harperdb 4.3.0-alpha.2 → 4.3.0-beta.10
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 +58 -55
- package/bin/lite.js +21 -18
- package/config/yaml/defaultConfig.yaml +7 -2
- package/dependencies/linux-x64/nats-server +0 -0
- package/json/systemSchema.json +20 -0
- package/launchServiceScripts/launchInstallNATSServer.js +3 -3
- package/launchServiceScripts/launchNatsIngestService.js +20 -17
- package/launchServiceScripts/launchNatsReplyService.js +21 -18
- package/launchServiceScripts/launchUpdateNodes4-0-0.js +21 -18
- package/npm-shrinkwrap.json +547 -529
- package/package.json +6 -9
- package/resources/DatabaseTransaction.d.ts +9 -3
- package/resources/Table.d.ts +2 -2
- package/resources/databases.d.ts +5 -3
- package/resources/search.d.ts +11 -1
- package/server/jobs/jobProcess.js +21 -18
- package/server/serverHelpers/Headers.d.ts +12 -0
- package/server/threads/threadServer.js +21 -18
- package/studio/build-local/asset-manifest.json +2 -2
- package/studio/build-local/index.html +1 -1
- package/studio/build-local/static/js/{main.824bbe07.js → main.3051089a.js} +2 -2
- package/utility/scripts/restartHdb.js +21 -18
- /package/studio/build-local/static/js/{main.824bbe07.js.LICENSE.txt → main.3051089a.js.LICENSE.txt} +0 -0
package/bin/harperdb.js
CHANGED
|
@@ -1,104 +1,107 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";var B$=Object.create;var Nl=Object.defineProperty;var H$=Object.getOwnPropertyDescriptor;var q$=Object.getOwnPropertyNames;var x$=Object.getPrototypeOf,G$=Object.prototype.hasOwnProperty;var a=(e,t)=>Nl(e,"name",{value:t,configurable:!0});var Ne=(e,t)=>()=>(e&&(t=e(e=0)),t);var T=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Fe=(e,t)=>{for(var r in t)Nl(e,r,{get:t[r],enumerable:!0})},bb=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of q$(t))!G$.call(e,s)&&s!==r&&Nl(e,s,{get:()=>t[s],enumerable:!(n=H$(t,s))||n.enumerable});return e};var B=(e,t,r)=>(r=e!=null?B$(x$(e)):{},bb(t||!e||!e.__esModule?Nl(r,"default",{value:e,enumerable:!0}):r,e)),re=e=>bb(Nl({},"__esModule",{value:!0}),e);var wb=T((aEe,Ib)=>{var F$=require("fast-glob"),{statSync:Rp,existsSync:Ap,readFileSync:k$,writeFileSync:$$}=require("fs"),{spawnSync:V$,spawn:Y$,execFileSync:oEe}=require("child_process"),{isMainThread:K$}=require("worker_threads"),{join:qi,relative:yb}=require("path"),{PACKAGE_ROOT:Qn}=C(),{tmpdir:W$,platform:Q$}=require("os");require("source-map-support").install();var j$=["resources","server","dataLayer","components"],bl="ts-build",Op,z$=__filename.endsWith("tsBuild.js");if(z$){if(K$){let r;try{Rp(qi(Qn,bl)),r=!0}catch{}if(r)for(let n of F$.sync(j$.map(s=>s+"/**/*.ts"),{cwd:Qn})){let s=0,i=0;try{s=Rp(qi(Qn,n)).mtimeMs-5e3,i=Rp(qi(Qn,bl,n.replace(/.ts$/,".js"))).mtimeMs}catch{}if(s>i){console.warn(`TypeScript ${n} is not compiled`+(i?` (TS source file was modified at ${new Date(s)} and compiled file at ${new Date(i)})`:"")+", consider enabling auto-compilation of TypeScript in your IDE), compiling now."),Op=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),Op=!0;if(Op){let n=qi(Qn,"node_modules/.bin/tsc");Q$()==="win32"&&(n+=".cmd");let s=V$(n,{cwd:Qn});if(s.stdout.length&&console.log(s.stdout.toString()),s.stderr.length&&console.log(s.stderr.toString()),r){let i=qi(W$(),"harperdb-tsc.pid"),o;if(Ap(i))try{process.kill(+k$(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=Y$(n,["--watch"],{cwd:Qn,detached:!0,stdio:"ignore"});$$(i,c.pid.toString()),c.unref()}}}}let e=Ib.constructor,t=e._findPath;e._findPath=function(r,n,s){if(r.startsWith(".")&&!s&&n.length===1&&n[0].startsWith(Qn)&&!n[0].includes("node_modules")){let i=yb(Qn,n[0]),o;i.startsWith(bl)?o=qi(Qn,yb(bl,i)):o=qi(Qn,bl,i);let c=qi(o,r),l=c+".js";if(Ap(l))return l;if(c.includes(".")&&Ap(c))return c}return t(r,n,s)}}});var C=T((uEe,kb)=>{"use strict";var Rn=require("path"),J$=require("fs"),{relative:cEe,join:lEe}=Rn,{existsSync:X$}=J$;function Z$(){let e=__dirname;for(;!X$(Rn.join(e,"package.json"));){let t=Rn.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(Z$,"getHDBPackageRoot");var xi=Z$(),Cb="js",wd=Cb,eV="harperdb-config.yaml",tV="defaultConfig.yaml",rV="hdb",Lb=`harperdb.${wd}`,Db=`customFunctionsServer.${wd}`,nV=`restartHdb.${wd}`,bp="HarperDB",Id="Custom Functions",Cd="Clustering Hub",Ld="Clustering Leaf",sV="Clustering Ingest Service",iV="Clustering Reply Service",oV="foreground.pid",aV="hdb.pid",cV="data",lV={HDB:bp,CLUSTERING_HUB:Cd,CLUSTERING_LEAF:Ld,CLUSTERING_INGEST_SERVICE:sV,CLUSTERING_REPLY_SERVICE:iV,CUSTOM_FUNCTIONS:Id,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"},uV={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},_V={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},dV={harperdb:bp,"clustering hub":Cd,"clustering leaf":Ld,"custom functions":Id,custom_functions:Id,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},fV={CLUSTERING_HUB_PROC_DESCRIPTOR:Cd,CLUSTERING_LEAF_PROC_DESCRIPTOR:Ld},Np={HDB:Rn.join(xi,"server/harperdb"),CUSTOM_FUNCTIONS:Rn.join(xi,"server/customFunctions"),CLUSTERING_HUB:Rn.join(xi,"server/nats"),CLUSTERING_LEAF:Rn.join(xi,"server/nats")},EV={HDB:Rn.join(Np.HDB,Lb),CUSTOM_FUNCTIONS:Rn.join(Np.CUSTOM_FUNCTIONS,Db)},hV={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:Rn.join(xi,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:Rn.join(xi,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:Rn.join(xi,"launchServiceScripts/launchUpdateNodes4-0-0.js")},mV={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},Pb="support@harperdb.io",pV="customer-success@harperdb.io",Mb=1,SV=4141,Ub="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",TV="https://www.harperdb.io/product",gV=`For support, please submit a request at ${Ub} or contact ${Pb}`,vb=`For license support, please contact ${pV}`,RV="None of the specified records were found.",AV="hash attribute not found",OV=`Your current license only supports ${Mb} role. ${vb}`,NV="Your current license only supports 3 connections to a node.",bV="127.0.0.1",yV=1,IV=/^\.$/,wV=/^\.\.$/,CV="U+002E",LV=/\//g,DV="U+002F",PV=/U\+002F/g,MV=/^U\+002E$/,UV=/^U\+002EU\+002E$/,vV="d",BV=999999,HV="*",qV="--max-old-space-size=",xV="system",GV="__hdb_hash",FV=".harperdb",kV=".hdb",$V="keys",VV="hdb_boot_properties.file",YV=".updateConfig.json",KV="SIGTSTP",WV=24,QV=6e4,jV=448,zV="blob",JV="trash",XV="database",ZV="schema",eY="transactions",tY=".count",rY="id",nY="PROCESS_NAME",Bb={SETTINGS_PATH_KEY:"settings_path"},Hb=require("lodash"),sY={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",OPERATIONSAPI_NETWORK_SECUREPORT:"OPERATIONSAPI_NETWORK_SECUREPORT",CLUSTERING_PORT:"CLUSTERING_PORT",HDB_ROOT:"HDB_ROOT",SERVER_PORT:"SERVER_PORT",NODE_NAME:"NODE_NAME",CLUSTERING:"CLUSTERING"},iY={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},oY={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},aY={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"},cY={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"},Wr="hdb_internal:",lY={CREATE_SCHEMA:Wr+"create_schema",CREATE_TABLE:Wr+"create_table",CREATE_ATTRIBUTE:Wr+"create_attribute",ADD_USER:Wr+"add_user",ALTER_USER:Wr+"alter_user",DROP_USER:Wr+"drop_user",HDB_NODES:Wr+"hdb_nodes",HDB_USERS:Wr+"hdb_users",HDB_WORKERS:Wr+"hdb_workers",CATCHUP:Wr+"catchup",SCHEMA_CATCHUP:Wr+"schema_catchup",WORKER_ROOM:Wr+"cluster_workers"},uY={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"},_Y="060493.ks",dY=".license",fY={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},X={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",SET_NODE_REPLICATION:"set_node_replication",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"},EY={CSV:".csv",JSON:".json"},hY={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},mY={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},yl={};yl[X.INSERT]=X.INSERT;yl[X.UPDATE]=X.UPDATE;yl[X.UPSERT]=X.UPSERT;yl[X.DELETE]=X.DELETE;var He=Object.create(null);He[X.DESCRIBE_ALL]=X.DESCRIBE_ALL;He[X.DESCRIBE_TABLE]=X.DESCRIBE_TABLE;He[X.DESCRIBE_SCHEMA]=X.DESCRIBE_SCHEMA;He[X.READ_LOG]=X.READ_LOG;He[X.ADD_NODE]=X.ADD_NODE;He[X.LIST_USERS]=X.LIST_USERS;He[X.LIST_ROLES]=X.LIST_ROLES;He[X.USER_INFO]=X.USER_INFO;He[X.SQL]=X.SQL;He[X.GET_JOB]=X.GET_JOB;He[X.SEARCH_JOBS_BY_START_DATE]=X.SEARCH_JOBS_BY_START_DATE;He[X.DELETE_FILES_BEFORE]=X.DELETE_FILES_BEFORE;He[X.EXPORT_LOCAL]=X.EXPORT_LOCAL;He[X.EXPORT_TO_S3]=X.EXPORT_TO_S3;He[X.CLUSTER_STATUS]=X.CLUSTER_STATUS;He[X.REMOVE_NODE]=X.REMOVE_NODE;He[X.RESTART]=X.RESTART;He[X.CUSTOM_FUNCTIONS_STATUS]=X.CUSTOM_FUNCTIONS_STATUS;He[X.GET_CUSTOM_FUNCTIONS]=X.GET_CUSTOM_FUNCTIONS;He[X.GET_CUSTOM_FUNCTION]=X.GET_CUSTOM_FUNCTION;He[X.SET_CUSTOM_FUNCTION]=X.SET_CUSTOM_FUNCTION;He[X.DROP_CUSTOM_FUNCTION]=X.DROP_CUSTOM_FUNCTION;He[X.ADD_CUSTOM_FUNCTION_PROJECT]=X.ADD_CUSTOM_FUNCTION_PROJECT;He[X.DROP_CUSTOM_FUNCTION_PROJECT]=X.DROP_CUSTOM_FUNCTION_PROJECT;He[X.PACKAGE_CUSTOM_FUNCTION_PROJECT]=X.PACKAGE_CUSTOM_FUNCTION_PROJECT;He[X.DEPLOY_CUSTOM_FUNCTION_PROJECT]=X.DEPLOY_CUSTOM_FUNCTION_PROJECT;var pY={DEV:"dev",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status",OPERATION:"operation",RENEWCERTS:"renew-certs"},SY={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},qb={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"},TY=Hb.invert(qb),gY={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"},L={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",MAXHEAPMEMORY:"maxHeapMemory",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_DOMAINSOCKET:"operationsApi_network_domainSocket",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",SERIALIZATION_BIGINT:"serialization_bigInt",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_NETWORK_MTLS:"mqtt_network_mtls",MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY:"mqtt_network_mtls_certificateAuthority",MQTT_NETWORK_MTLS_USER:"mqtt_network_mtls_user",MQTT_REQUIREAUTHENTICATION:"mqtt_requireAuthentication",COMPONENTSROOT:"componentsRoot",TLS_CERTIFICATE:"tls_certificate",TLS_PRIVATEKEY:"tls_privateKey",TLS_CERTIFICATEAUTHORITY:"tls_certificateAuthority",TLS_CIPHERS:"tls_ciphers"},xb={settings_path:Bb.SETTINGS_PATH_KEY,hdb_root_key:L.ROOTPATH,hdb_root:L.ROOTPATH,rootpath:L.ROOTPATH,server_port_key:L.OPERATIONSAPI_NETWORK_PORT,server_port:L.OPERATIONSAPI_NETWORK_PORT,cert_key:L.TLS_CERTIFICATE,certificate:L.TLS_CERTIFICATE,private_key_key:L.TLS_PRIVATEKEY,private_key:L.TLS_PRIVATEKEY,http_secure_enabled_key:L.OPERATIONSAPI_NETWORK_HTTPS,https_on:L.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:L.OPERATIONSAPI_NETWORK_CORS,cors_on:L.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:L.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:L.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:L.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:L.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:L.LOGGING_LEVEL,log_level:L.LOGGING_LEVEL,log_path_key:L.LOGGING_ROOT,log_path:L.LOGGING_ROOT,clustering_node_name_key:L.CLUSTERING_NODENAME,node_name:L.CLUSTERING_NODENAME,clustering_enabled_key:L.CLUSTERING_ENABLED,clustering:L.CLUSTERING_ENABLED,max_http_threads:L.THREADS,max_hdb_processes:L.THREADS,server_timeout_key:L.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:L.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:L.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:L.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:L.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:L.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:L.LOGGING_AUDITLOG,disable_transaction_log:L.LOGGING_AUDITLOG,operation_token_timeout_key:L.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:L.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:L.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:L.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:L.HTTP_PORT,custom_functions_port:L.HTTP_PORT,custom_functions_directory_key:L.COMPONENTSROOT,custom_functions_directory:L.COMPONENTSROOT,max_custom_function_processes:L.THREADS,log_to_file:L.LOGGING_FILE,log_to_stdstreams:L.LOGGING_STDSTREAMS,local_studio_on:L.LOCALSTUDIO_ENABLED,clustering_port:L.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:L.CLUSTERING_USER,clustering_enabled:L.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:L.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:L.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:L.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:L.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:L.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:L.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:L.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:L.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:L.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxmsgs:L.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:L.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:L.CLUSTERING_NODENAME,clustering_tls_certificate:L.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:L.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:L.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:L.CLUSTERING_TLS_INSECURE,clustering_tls_verify:L.CLUSTERING_TLS_VERIFY,clustering_loglevel:L.CLUSTERING_LOGLEVEL,clustering_republishmessages:L.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:L.CLUSTERING_DATABASELEVEL,customfunctions_network_port:L.HTTP_PORT,customfunctions_tls_certificate:L.TLS_CERTIFICATE,customfunctions_network_cors:L.HTTP_CORS,customfunctions_network_corsaccesslist:L.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:L.HTTP_HEADERSTIMEOUT,customfunctions_network_https:L.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:L.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:L.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:L.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:L.HTTP_TIMEOUT,http_threads:L.THREADS,threads:L.THREADS,maxheapmemory:L.MAXHEAPMEMORY,http_session_affinity:L.HTTP_SESSIONAFFINITY,http_compressionthreshold:L.HTTP_COMPRESSIONTHRESHOLD,http_cors:L.HTTP_CORS,http_corsaccesslist:L.HTTP_CORSACCESSLIST,http_headerstimeout:L.HTTP_HEADERSTIMEOUT,http_keepalivetimeout:L.HTTP_KEEPALIVETIMEOUT,http_timeout:L.HTTP_TIMEOUT,http_port:L.HTTP_PORT,http_secureport:L.HTTP_SECUREPORT,customfunctions_processes:L.THREADS,customfunctions_root:L.COMPONENTSROOT,localstudio_enabled:L.LOCALSTUDIO_ENABLED,logging_file:L.LOGGING_FILE,logging_level:L.LOGGING_LEVEL,logging_root:L.LOGGING_ROOT,logging_rotation_enabled:L.LOGGING_ROTATION_ENABLED,logging_rotation_compress:L.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:L.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:L.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:L.LOGGING_ROTATION_PATH,logging_stdstreams:L.LOGGING_STDSTREAMS,logging_auditlog:L.LOGGING_AUDITLOG,logging_auditretention:L.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:L.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:L.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:L.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:L.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_network_cors:L.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:L.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:L.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:L.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:L.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:L.OPERATIONSAPI_NETWORK_PORT,operationsapi_network_domainsocket:L.OPERATIONSAPI_NETWORK_DOMAINSOCKET,operationsapi_network_secureport:L.OPERATIONSAPI_NETWORK_SECUREPORT,operationsapi_tls_certificate:L.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_tls_privatekey:L.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:L.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY,operationsapi_network_timeout:L.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_root:L.ROOTPATH,databases:L.DATABASES,storage_path:L.STORAGE_PATH,ignorescripts:L.IGNORE_SCRIPTS,mqtt_network_port:L.MQTT_NETWORK_PORT,mqtt_websocket:L.MQTT_WEBSOCKET,mqtt_network_secureport:L.MQTT_NETWORK_SECUREPORT,mqtt_network_mtls:L.MQTT_NETWORK_MTLS,mqtt_network_mtls_certificateAuthority:L.MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY,mqtt_network_mtls_user:L.MQTT_NETWORK_MTLS_USER,mqtt_requireauthentication:L.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:L.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:L.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:L.AUTHENTICATION_CACHETTL,authentication_enablesessions:L.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:L.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:L.AUTHENTICATION_REFRESHTOKENTIMEOUT,componentsroot:L.COMPONENTSROOT,tls_certificate:L.TLS_CERTIFICATE,tls_privatekey:L.TLS_PRIVATEKEY,tls_certificateauthority:L.TLS_CERTIFICATEAUTHORITY,tls_ciphers:L.TLS_CIPHERS};for(let e in L){let t=L[e];xb[t.toLowerCase()]=t}var RY={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},AY={csv_file_load:"csv_file_load",csv_data_load:X.CSV_DATA_LOAD,csv_url_load:X.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"},OY={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"},NY={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},bY={VERSION_DEFAULT:"2.2.0"},yY={DEVELOPMENT:8192,DEFAULT:512},IY={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"},wY={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"},CY={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},Gb={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},LY=Symbol("metadata"),DY="__clustering__",PY=Object.values(Gb),MY=15984864e5,Fb={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},UY=Hb.invert(Fb),vY={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"},BY=111,HY=`\r
|
|
3
|
-
`,
|
|
4
|
-
`}a(ei,"createLogRecord");function Dl(e){Xs&&Zb(e),gs&&process.stdout.write(e)}a(Dl,"logStdOut");function Ud(e){Xs&&Zb(e),gs&&process.stderr.write(e)}a(Ud,"logStdErr");function Zb(e){c1(),Xa?Po.appendFileSync(Xa,e):wl.log(e)}a(Zb,"logToFile");function wp(){try{Po.closeSync(Xa)}catch{}Xa=null}a(wp,"closeLogFile");function c1(){if(!Xa){try{if(!Cl)debugger;Xa=Po.openSync(Cl,"a")}catch(e){wl.error(e)}setTimeout(()=>{wp()},s1).unref()}}a(c1,"openLogFile");function Md(...e){Er[fr]<=Er.info&&Dl(ei("info",e))}a(Md,"info");function Cp(...e){Er[fr]<=Er.trace&&Dl(ei("trace",e))}a(Cp,"trace");function Ll(...e){Er[fr]<=Er.error&&Ud(ei("error",e))}a(Ll,"error");function Lp(...e){Er[fr]<=Er.debug&&Dl(ei("debug",e))}a(Lp,"debug");function ey(...e){Er[fr]<=Er.notify&&Dl(ei("notify",e))}a(ey,"notify");function ty(...e){Er[fr]<=Er.fatal&&Ud(ei("fatal",e))}a(ty,"fatal");function Dp(...e){Er[fr]<=Er.warn&&Ud(ei("warn",e))}a(Dp,"warn");function l1(e,t,...r){t===zb.STDERR?Ud(ei(e,r)):Dl(ei(e,r))}a(l1,"logCustomLevel");function u1(){let e;try{e=e1.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Zs.join(e,Ut.HDB_HOME_DIR_NAME,Ut.BOOT_PROPS_FILE_NAME);return Po.existsSync(t)||(t=Zs.join(Ip,"utility/hdb_boot_properties.file")),t}a(u1,"getPropsFilePath");function _1(e){fr=e}a(_1,"setLogLevel");function Wb(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(Wb,"autoCastBoolean");function d1(e){try{if(e.includes("config/settings.js")){let o=jb(e);return{level:o.get(Ut.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:Zs.dirname(o.get(Ut.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(Ut.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(Ut.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=Qb.parseDocument(Po.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),n=t.getIn(["logging","root"]),s=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]);return{level:r,config_log_path:n,to_file:s,to_stream:i}}catch(t){if(t.code===Ut.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(d1,"getLogConfig");function f1(){try{let e=Qb.parseDocument(Po.readFileSync(n1,"utf8")),t=e.getIn(["logging","level"]),r=e.getIn(["logging","file"]),n=e.getIn(["logging","stdStreams"]);return{default_level:t,default_to_file:r,default_to_stream:n}}catch(e){console.error("Error accessing default config file for logging"),console.error(e)}}a(f1,"getDefaultConfig");function E1(e,t,r,n,s,i){this.username=e,this.status=t,this.type=r,this.originating_ip=n,this.request_method=s,this.path=i}a(E1,"AuthAuditLog")});var Mo=T((mEe,h1)=>{h1.exports={name:"harperdb",version:"4.3.0-alpha.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:resources && 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:bin && 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:resources && npm run test:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:bin && npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:resources":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/resources/**/*.js' --config '../unitTests/.mocharc.json'","test:bin":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/bin/**/*.js' --config '../unitTests/.mocharc.json'","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.477.0","@aws-sdk/lib-storage":"3.477.0","@endo/static-module-record":"^1.0.0","@fastify/autoload":"5.7.1","@fastify/compress":"~6.5.0","@fastify/cors":"~8.5.0","@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:"4.1.10","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.25.1","fastify-plugin":"~4.5.1","fs-extra":"11.2.0",graphql:"^16.8.1","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.11.0","json-bigint-fixes":"1.1.0",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.2",lmdb:"2.9.3-beta.2",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.10.1",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.5.1",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.16.0",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","serve-static":"1.15.0",ses:"1.0.0","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.21.20","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.1","validate.js":"0.13.1",ws:"8.15.1",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:"1.6.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.3.3","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 Uo=T((pEe,ry)=>{"use strict";ry.exports={version:m1,printVersion:p1};var vd=Mo();function m1(){if(vd)return vd.version}a(m1,"version");function p1(){vd&&console.log(`HarperDB Version ${vd.version}`)}a(p1,"printVersion")});var iy=T((TEe,sy)=>{"use strict";var ny=require("semver/functions/major"),S1=Mo(),Mp=process.versions&&process.versions.node?process.versions.node:void 0;sy.exports=T1;function T1(){let e=S1.engines["minimum-node"];if(Mp&&ny(Mp)<ny(e))return{error:`The minimum version of Node.js HarperDB supports is: ${e}, the currently installed Node.js version is: ${Mp}. Please install a version of Node.js that is withing the defined range.`}}a(T1,"checkNodeVersion")});var vo={};Fe(vo,{server:()=>Et});var oy,Et,hr=Ne(()=>{oy=require("../index"),Et={};(0,oy._assignPackageExport)("server",Et)});var Up=T((REe,ay)=>{"use strict";var g1=require("util"),R1=require("path"),A1=require("child_process"),O1=g1.promisify(A1.execFile),N1=1e3*1e3*10;ay.exports={findPs:b1};async function b1(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:n}=await O1("ps",["wwxo",`pid,${r}`],{maxBuffer:N1});for(let s of n.trim().split(`
|
|
5
|
-
`).slice(1)){s=s.trim();let[i]=s.split(" ",1),o=s.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,n])=>({pid:Number.parseInt(r,10),name:R1.basename(n.comm),cmd:n.args,ppid:Number.parseInt(n.ppid,10),uid:Number.parseInt(n.uid,10),cpu:Number.parseFloat(n["%cpu"]),memory:Number.parseFloat(n["%mem"])}))}a(b1,"findPs")});var ht=T((OEe,ly)=>{"use strict";var y1="__dbis__",I1="__txns__",w1="__environment_name__",C1="__dbi_defintion__",L1={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"},D1=["__createdtime__","__updatedtime__"],P1="\uFFFF",cy={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},M1=Object.values(cy);ly.exports={AUDIT_STORE_NAME:I1,INTERNAL_DBIS_NAME:y1,DBI_DEFINITION_NAME:C1,SEARCH_TYPES:L1,TIMESTAMP_NAMES:D1,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:w1,TRANSACTIONS_DBI_NAMES_ENUM:cy,TRANSACTIONS_DBIS:M1,OVERFLOW_MARKER:P1}});var Qr=T((NEe,Sy)=>{"use strict";var uy=C(),_y=ht(),dy={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},fy=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),Ey={500:fy("There was an error processing your request."),400:"Invalid request"},U1=Ey[dy.INTERNAL_SERVER_ERROR],v1={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.`},B1={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},H1={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"},q1={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 ${_y.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${_y.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"},x1={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${uy.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 ${uy.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"},hy={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"},G1={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."},F1={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`},k1={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"},$1={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},V1={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`},my={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.`},py={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}`},Y1={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."},K1={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},W1={...hy,...H1,...v1,...G1,...F1,...k1,...$1,...V1,...x1,...my,...py,...Y1,...K1,...B1};Sy.exports={CHECK_LOGS_WRAPPER:fy,HDB_ERROR_MSGS:W1,DEFAULT_ERROR_MSGS:Ey,DEFAULT_ERROR_RESP:U1,HTTP_STATUS_CODES:dy,LMDB_ERRORS_ENUM:q1,AUTHENTICATION_ERROR_MSGS:hy,VALIDATION_ERROR_MSGS:my,ITC_ERRORS:py}});var te=T((yEe,Ry)=>{"use strict";var Za=Qr(),Q1=q(),j1=C(),Bd=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,Ty),this.statusCode=n||Za.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Za.DEFAULT_ERROR_MSGS[n]?Za.DEFAULT_ERROR_MSGS[n]:Za.DEFAULT_ERROR_MSGS[Za.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,s&&(this.logLevel=s),typeof this.message!="string"&&(this.stack=t.stack),i&&Q1[s](i)}},vp=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}},Bp=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function Ty(e,t,r,n=j1.LOG_LEVELS.ERROR,s=null,i=!1){if(gy(e))return e;let o=new Bd(e,t,r,n,s);return i&&delete o.stack,o}a(Ty,"handleHDBError");function gy(e){return e.__proto__.constructor.name===Bd.name}a(gy,"isHDBError");Ry.exports={isHDBError:gy,handleHDBError:Ty,ClientError:vp,ServerError:Bp,hdb_errors:Za}});var je=T((wEe,wy)=>{"use strict";var Bl=C(),z1=Y(),mr=J(),Hl=require("path"),J1=require("minimist"),Ay=require("fs-extra"),Oy=require("lodash");mr.initSync();var{CONFIG_PARAMS:Gi,DATABASES_PARAM_CONFIG:Pl,SYSTEM_SCHEMA_NAME:Hd}=Bl,Ml,Ul,vl;function Ny(){if(Ml!==void 0)return Ml;if(mr.getHdbBasePath()!==void 0)return Ml=mr.get(Gi.STORAGE_PATH)||Hl.join(mr.getHdbBasePath(),Bl.DATABASES_DIR_NAME),Ml}a(Ny,"getBaseSchemaPath");function by(){if(Ul!==void 0)return Ul;if(mr.getHdbBasePath()!==void 0)return Ul=Iy(Hd),Ul}a(by,"getSystemSchemaPath");function yy(){if(vl!==void 0)return vl;if(mr.getHdbBasePath()!==void 0)return vl=mr.get(Bl.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||Hl.join(mr.getHdbBasePath(),Bl.TRANSACTIONS_DIR_NAME),vl}a(yy,"getTransactionAuditStoreBasePath");function X1(e,t){let r=mr.get(Gi.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||Hl.join(yy(),e.toString())}a(X1,"getTransactionAuditStorePath");function Iy(e,t){e=e.toString(),t=t&&t.toString();let r=mr.get(Bl.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||Hl.join(Ny(),e)}a(Iy,"getSchemaPath");function Z1(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,J1(process.argv));let n=r[Gi.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!z1.isObject(n))throw o;i=n}for(let o of i){let c=o[Hd];if(!c)continue;let l=mr.get(Gi.DATABASES);l=l??{};let _=c?.tables?.[t]?.[Pl.PATH];if(_)return Oy.set(l,[Hd,Pl.TABLES,t,Pl.PATH],_),mr.setProperty(Gi.DATABASES,l),_;let u=c?.[Pl.PATH];if(u)return Oy.set(l,[Hd,Pl.PATH],u),mr.setProperty(Gi.DATABASES,l),u}}let s=r[Gi.STORAGE_PATH.toUpperCase()];if(s){if(!Ay.pathExistsSync(s))throw new Error(s+" does not exist");let i=Hl.join(s,e);return Ay.mkdirsSync(i),mr.setProperty(Gi.STORAGE_PATH,s),i}return by()}a(Z1,"initSystemSchemaPaths");function eK(){Ml=void 0,Ul=void 0,vl=void 0}a(eK,"resetPaths");wy.exports={getBaseSchemaPath:Ny,getSystemSchemaPath:by,getTransactionAuditStorePath:X1,getTransactionAuditStoreBasePath:yy,getSchemaPath:Iy,initSystemSchemaPaths:Z1,resetPaths:eK}});var pr=T((PEe,My)=>{"use strict";var tK=Qr().LMDB_ERRORS_ENUM,LEe=require("lmdb"),rK=ht(),DEe=require("buffer").Buffer,{OVERFLOW_MARKER:Cy,MAX_SEARCH_KEY_LENGTH:qd}=rK,Ly=["number","string","symbol","boolean","bigint"];function nK(e){if(e=e?.primaryStore||e,!e)throw new Error(tK.ENV_REQUIRED)}a(nK,"validateEnv");function sK(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(sK,"stringifyData");function iK(e){return e instanceof Date?e.valueOf():e}a(iK,"convertKeyValueToWrite");function oK(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(Ly.includes(typeof e))return e.length>qd?[e.slice(0,qd)+Cy]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(Ly.includes(typeof i))i.length>qd?r.push(i.slice(0,qd)+Cy):r.push(i);else{if(i===null&&t)return r.push(null);if(i instanceof Date)return r.push(i.getTime())}}}else if(e instanceof Date)return[e.getTime()];return r}a(oK,"getIndexedValues");var xd=0,Dy=0;function Py(){Dy=Date.now()-performance.now()}a(Py,"adjustStartTime");Py();var aK=6e4;setInterval(Py,aK).unref();function cK(){let e=performance.now()+Dy;return e>xd?(xd=e,e):(xd+=488e-6,xd)}a(cK,"getNextMonotonicTime");My.exports={validateEnv:nK,stringifyData:sK,convertKeyValueToWrite:iK,getNextMonotonicTime:cK,getIndexedValues:oK}});var Uy,jn,Hp,ql=Ne(()=>{Uy=require("events"),jn=class extends Uy.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new Hp;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)}},Hp=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}}}});var xy={};Fe(xy,{HAS_EXPIRATION:()=>$p,LAST_TIMESTAMP_PLACEHOLDER:()=>Fl,LOCAL_TIMESTAMP:()=>lK,METADATA:()=>xl,NO_TIMESTAMP:()=>qp,PENDING_LOCAL_TIME:()=>Vp,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>kp,RecordEncoder:()=>Fp,TIMESTAMP_ASSIGN_LAST:()=>_K,TIMESTAMP_ASSIGN_NEW:()=>Hy,TIMESTAMP_ASSIGN_PREVIOUS:()=>qy,TIMESTAMP_PLACEHOLDER:()=>Gd,TIMESTAMP_RECORD_PREVIOUS:()=>xp,getUpdateRecord:()=>Yp,handleLocalTimeForGets:()=>Vd});function fK(){return Gl[0]=Gl[0]^64,uK.getFloat64(0)}function Vd(e){let t=e.getEntry;e.readCount=0,e.cachePuts=!1,e.getEntry=function(i,o){e.readCount++;let c=t.call(this,i,o),l=c?.value,_=l?.[xl];return _>=0&&(c.metadataFlags=_,c.localTime=l.localTime,c.value=l.value,l.expiresAt>0&&(c.expiresAt=l.expiresAt)),c&&(c.key=i),c};let r=e.get;e.get=function(i,o){let c=r.call(this,i,o);return c?.[xl]>=0?c.value:c};let n=e.getRange;e.getRange=function(i){let o=n.call(this,i);return i.valuesForKey?o.map(c=>c?.value):i.values===!1||i.onlyCount?o:o.map(c=>{let l=c.value,_=l[xl];return _>=0&&(c.metadataFlags=_,c.localTime=l.localTime,c.value=l.value,l.expiresAt>0&&(c.expiresAt=l.expiresAt)),c})};let s=e.useReadTransaction();if(s.done(),!s.done.isTracked){let i=s.constructor,o=s.use,c=s.done;i.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,Bo.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let l=0;l<Bo.length;l++){let _=Bo[l].deref();(!_||_===this||_.isDone||_.isCommitted)&&Bo.splice(l--,1)}},i.prototype.done.isTracked=!0}return e}function Yp(e,t,r){return function(n,s,i,o,c=-1,l,_,u,d="put",f,E){if(f||l==null?ec=i?.localTime?xp|qy:qp:ec=l?i?.localTime?xp|16384:Hy|16384:qp,u>0&&(c|=$p),kd=c,Gp=u,i?.version===o&&l===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:ec>0},p;try{f&&(h.ifVersion=p=i?.version??null);let S=e.put(n,s,h);if(l){let A=_?.user?.username;if(E&&(Fd=e.encoder.encode(E)),f&&i?.localTime){let g=i?.localTime,I=r.get(g);if(I){let v=Vt(I).previousLocalTime;return r.put(g,$d(o,t,n,v,A,d,Fd),{ifVersion:p}),S}}r.put(Fl,$d(o,t,n,i?.localTime?1:0,A,d,Fd),{append:d!=="invalidate",instructedWrite:!0,ifVersion:p})}return S}catch(S){throw S.message+=" id: "+n+" options: "+h,S}}}var vy,By,Gd,Fl,kp,lK,xl,Gl,uK,qp,Hy,_K,qy,xp,$p,Vp,dK,Fd,ec,kd,Gp,Fp,HEe,Bo,kl=Ne(()=>{vy=require("msgpackr");Ho();By=B(q()),Gd=new Uint8Array([1,1,1,1,4,64,0,0]),Fl=new Uint8Array([1,1,1,1,1,0,0,0]),kp=new Uint8Array([1,1,1,1,3,64,0,0]),lK=Symbol("local-timestamp"),xl=Symbol("metadata"),Gl=new Uint8Array(8),uK=new DataView(Gl.buffer,0,8),qp=0,Hy=0,_K=1,qy=3,xp=4,$p=16,Vp=1,ec=0,kd=-1,Gp=0,Fp=class extends vy.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(n,s){if(ec||kd>=0){let i=0,o=ec;o&&(i+=8,ec=0);let c=kd,l=Gp;c>=0&&(i+=2,kd=-1,l&&(i+=8,Gp=0));let _=dK=r.call(this,n,s|2048|i);Fd=_.subarray((_.start||0)+i,_.end);let u=_.start||0;return o&&(Gd[4]=o,Gd[5]=o>>8,_.set(Gd,u),u+=8),c>=0&&(_[u++]=c,_[u++]=0,l&&(_.dataView||(_.dataView=new DataView(_.buffer,_.byteOffset,_.byteLength))).setFloat64(u,l)),_}else return r.call(this,n,s)}}decode(t,r){let n=r?.start||0,s=r>-1?r:r?.end||t.length,i=t[n],o=0;try{if(i<32&&s>2){let c=n,l;if(i===2){if(t.copy)t.copy(Gl,0,c),c+=8;else for(let d=0;d<8;d++)Gl[d]=t[c++];l=fK(),i=t[c]}let _;i<32&&(o=i,c+=2,o&$p&&(_=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8));let u=super.decode(t.subarray(c,s),s-c);return{localTime:l,value:u,[xl]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(fK,"getTimestamp");HEe=Map.prototype.get;a(Vd,"handleLocalTimeForGets");Bo=[];setInterval(()=>{for(let e=0;e<Bo.length;e++){let t=Bo[e].deref();!t||t.isDone||t.isCommitted?Bo.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&By.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(Yp,"getUpdateRecord")});var Jy={};Fe(Jy,{AUDIT_STORE_OPTIONS:()=>jy,createAuditEntry:()=>$d,openAuditStore:()=>Qd,readAuditEntry:()=>Vt,setAuditRetention:()=>hK,transactionKeyEncoder:()=>Qy});function Qd(e){let t=e.auditStore=e.openDB(Yy.AUDIT_STORE_NAME,jy);t.rootStore=e;let r=[];t.addDeleteRemovalCallback=function(i,o){return r[i]=o,{remove(){delete r[i]}}};let n=null;function s(i=Yd){clearTimeout(n),n=setTimeout(async()=>{if(t.rootStore.status==="closed")return;let o=0,c;try{for(let{key:l,value:_}of t.getRange({start:0,snapshot:!1,end:Date.now()-Kp})){if((_[0]&15)===jp){let u=Vt(_),d=u.tableId;r[d]?.(u.recordId)}if(c=t.remove(l),await new Promise(setImmediate),++o>=EK){i=10;break}}await c}finally{o===0&&(i=Math.min(i<<1,Kp/10)),s(i)}},i).unref()}return a(s,"scheduleAuditCleanup"),t.scheduleAuditCleanup=s,(0,Wd.getWorkerIndex)()===(0,Wd.getWorkerCount)()-1&&s(Yd),t}function hK(e,t=Yd){Kp=e,Yd=t}function $d(e,t,r,n,s,i,o){let c=zy[i];if(!c)throw new Error(`Invalid audit entry type ${i}`);let l=1;n&&(n>1?tc.setFloat64(0,n):An.set(kp),l=9),f(0),f(t),d(r),tc.setFloat64(l,e),l+=8,s?d(s):An[l++]=0,An[n?8:0]=c;let u=An.subarray(0,l);if(o)return Buffer.concat([u,o]);return u;function d(E){let h=l;l+=1,l=(0,rc.writeKey)(E,An,l);let p=l-h-1;p>127?p>16383?(Jp.error("Key or username was too large for audit entry",E),l=h+1,An[h]=0):(An.copyWithin(h+2,h+1,l),tc.setUint16(h,p|32768),l++):An[h]=p}function f(E){E<128?An[l++]=E:E<16384?(tc.setUint16(l,E|32768),l+=2):E<1056964608?(tc.setUint32(l,E|3221225472),l+=4):(An[l]=255,tc.setUint32(l+1,E),l+=5)}}function Vt(e){try{let t=e.dataView||(e.dataView=new zp(e.buffer,e.byteOffset,e.byteLength)),r;e[0]==66&&(r=t.readFloat64());let n=t.readInt(),s=t.readInt(),i=t.readInt(),o=t.readInt(),c=t.position,l=t.position+=o,_=t.readFloat64();o=t.readInt();let u=t.position,d=t.position+=o;return{type:zy[n&7],tableId:i,get recordId(){return Vy(e,c,l)},version:_,previousLocalTime:r,get user(){return d>u?Vy(e,u,d):void 0},getValue(f,E,h){if(n&Wp||n&Qp&&!E)return f.decoder.decode(e.subarray(t.position));if(n&Qp&&h)return Xp(f.getEntry(this.recordId),h,f)}}}catch{return Jp.error("Reading audit entry error",e),{}}}function Vy(e,t,r){let n=e.subarray(t,r);return(0,rc.readKey)(n,0,r-t)}var rc,Kd,Yy,Ky,Wd,Wy,Jp,An,tc,Qy,jy,Kp,EK,Yd,Wp,Qp,Gy,jp,Fy,ky,$y,zy,zp,Ho=Ne(()=>{rc=require("ordered-binary"),Kd=B(J()),Yy=B(ht()),Ky=B(C()),Wd=B(et()),Wy=B(Y());kl();Jp=B(q());jd();(0,Kd.initSync)();An=Buffer.alloc(1024),tc=new DataView(An.buffer,An.byteOffset,1024),Qy={writeKey(e,t,r){return e===Fl?(t.set(Fl,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,rc.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,rc.readKey)(e,t,r)}},jy={encoding:"binary",keyEncoder:Qy},Kp=(0,Wy.convertToMS)((0,Kd.get)(Ky.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,EK=1e3,Yd=1e4;a(Qd,"openAuditStore");a(hK,"setAuditRetention");Wp=16,Qp=32,Gy=1,jp=2,Fy=3,ky=4,$y=5,zy={put:Gy|Wp,[Gy]:"put",delete:jp,[jp]:"delete",message:Fy|Wp,[Fy]:"message",invalidate:ky,[ky]:"invalidate",patch:$y|Qp,[$y]:"patch"};a($d,"createAuditEntry");a(Vt,"readAuditEntry");zp=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(Vy,"readKeySafely")});var Zp={};Fe(Zp,{add:()=>zd,applyReverse:()=>Xy,getRecordAtTime:()=>Xp,rebuildUpdateBefore:()=>Jd});function zd(e,t,r){isNaN(e[t])?e[t]=r.value:e[t]+=r.value}function Jd(e,t){let r=null;for(let n in e)if(n in t){let s=t[n];if(s?.__op__){let i=e[n];if(i?.__op__)if(i.__op__===s.__op__)r||(r={}),r[n]=i;else throw new Error("Can not merge updates with different operations");else r||(r={}),r[n]=i,zd(r,n,s)}}else r||(r={}),r[n]=e[n];return r}function Xy(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=mK[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=Zy}}function Xp(e,t,r){let n=r.rootStore.auditStore,s=Object.assign({},e.value),i=e.localTime;for(;i>t;){let l=n.get(i),_=Vt(l);switch(_.type){case"put":s=_.getValue(r);break;case"patch":Xy(s,_.getValue(r));break;case"delete":s=null}i=_.previousLocalTime}let o={},c=0;for(let l in s)s[l]===Zy&&(o[l]=!0,c++);for(;c>0&&i>0;){let l=n.get(i),_=Vt(l),u;switch(_.type){case"put":u=_.getValue(r);break;case"patch":u=_.getValue(r);break}for(let d in u)o[d]&&(s[d]=u[d],o[d]=!1,c--);i=_.previousLocalTime}if(c>0)for(let l in o)s[l]=null;return s}var mK,Zy,jd=Ne(()=>{Ho();a(zd,"add");zd.reverse=function(e,t,r){isNaN(e[t])||(e[t]-=r.value)};mK={add:zd};a(Jd,"rebuildUpdateBefore");a(Xy,"applyReverse");Zy={};a(Xp,"getRecordAtTime")});function jr(e){return e[vt]||(e[vt]=Object.create(null))}function rf(e,t){let r=e.prototype,n={},s=t.attributes||t.properties||[];for(let o of s){let c=o.name,l,_;if(o.resolve)_={get(){return o.resolve(this,this[Oe])},set(u){return o.set(this,u)},configurable:!0};else{switch(o.type){case"String":l=a(function(u){if(!(typeof u=="string"||u==null&&o.nullable!==!1))throw new On.ClientError(`${c} must be a string, attempt to assign ${u}`);jr(this)[c]=u},"set");break;case"ID":l=a(function(u){if(!(typeof u=="string"||u?.length>0&&u.every?.(d=>typeof d=="string")||u==null&&o.nullable!==!1))throw new On.ClientError(`${c} must be a string, attempt to assign ${u}`);jr(this)[c]=u},"set");break;case"Float":case"Number":l=a(function(u){if(!(typeof u=="number"||u==null&&o.nullable!==!1))throw new On.ClientError(`${c} must be a number, attempt to assign ${u}`);jr(this)[c]=u},"set");break;case"Int":l=a(function(u){if(!(u>>0===u||u==null&&o.nullable!==!1))if(typeof u=="number"&&Math.abs((u>>0)-u)<=1)u=Math.round(u);else throw new On.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${u}`);jr(this)[c]=u},"set");break;case"Long":l=a(function(u){if(!(Math.round(u)===u&&Math.abs(u)<=9007199254740992||u==null&&o.nullable!==!1))if(typeof u=="number"&&Math.abs(u)<=9007199254740992)u=Math.round(u);else throw new On.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${u}`);jr(this)[c]=u},"set");break;case"BigInt":l=a(function(u){if(!(typeof u=="bigint"||u==null&&o.nullable!==!1))if(typeof u=="string"||typeof u=="number")u=BigInt(u);else throw new On.ClientError(`${c} must be a number, attempt to assign ${u}`);jr(this)[c]=u},"set");break;case"Boolean":l=a(function(u){if(!(typeof u=="boolean"||u==null&&o.nullable!==!1))throw new On.ClientError(`${c} must be a boolean, attempt to assign ${u}`);jr(this)[c]=u},"set");break;case"Date":l=a(function(u){if(!(u instanceof Date||u==null&&o.nullable!==!1))if(typeof u=="string"||typeof u=="number")u=new Date(u);else throw new On.ClientError(`${c} must be a Date, attempt to assign ${u}`);jr(this)[c]=u},"set");break;case"Bytes":l=a(function(u){if(!(u instanceof Uint8Array||u==null&&o.nullable!==!1))throw new On.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${u}`);jr(this)[c]=u},"set");break;case"Any":case void 0:l=a(function(u){jr(this)[c]=u},"set");break;default:l=a(function(u){if(!(typeof u=="object"||u==null&&o.nullable!==!1))throw new On.ClientError(`${c} must be an object, attempt to assign ${u}`);jr(this)[c]=u},"set")}_={get(){let u=this[vt];if(u&&c in u){let f=u[c];if(f?.__op__){let E=this[be]?.[c];return f.update(E)}return f}let d=this[be]?.[c];if(d&&typeof d=="object"){let f=eI(d,o);if(f)return u||(u=this[vt]=Object.create(null)),u[c]=f}return d},set:l,enumerable:!0,configurable:!0}}_.get.isAttribute=!0,n[c]=_,(!(c in r)||Object.getOwnPropertyDescriptor(r,c)?.get?.isAttribute)&&Object.defineProperty(r,c,_)}i("getProperty",function(o){let c=n[o];if(c)return c.get.call(this);let l=this[vt];return l?.[o]!==void 0?l[o]:this[be]?.[o]}),i("set",function(o,c){let l=n[o];if(l)return l.set.call(this,c);if(t.sealed)throw new On.ClientError("Can not add a property to a sealed table schema");jr(this)[o]=c}),i("deleteProperty",function(o){jr(this)[o]=void 0}),i("toJSON",function(){let o=this[vt],c;for(let _ in o){c||(c=Object.assign({},this[be]));let u=o[_];if(u?.__op__){let d=c[_];u=u.update(d)}c[_]=u}return Object.keys(this).length>0&&(c||(c=Object.assign({},this[be])),Object.assign(c,this)),c||this[be]}),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 eI(e,t){let r;switch(e.constructor){case Object:return t?((r=t.TrackedObject)||(t.TrackedObject=r=class{static{a(this,"TrackedObject")}constructor(s){this[be]=s}},rf(r,t)),new r(e)):new Xd(e);case Array:let n=new ef(e.length);n[be]=e;for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=eI(o,t?.elements)),n[s]=o}return n;default:return e}}function nf(e){let t=e[vt],r;for(let s in t){r||(r=Object.assign({},e[be]));let i=t[s];if(i&&typeof i=="object")if(i.__op__){let o=r[s];i=i.update(o)}else i=nf(i);r[s]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[be])),Object.assign(r,e)),r||e[be]}function xo(e,t=e[vt]){let r;if(e[be]&&e.constructor===Array&&!Object.isFrozen(e)){r=e;for(let n=0,s=e.length;n<s;n++){let i=e[n];if(i&&typeof i=="object"){let o=xo(i);o!==i&&r===e&&(r=e.slice(0)),i=o}r[n]=i}return Object.freeze(r)}for(let n in t){r||(r=Object.assign({},e[be]));let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=Zp[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=xo(s);r[n]=s}return r?Object.freeze(r):e[be]||e}function Zd(e){let t=e[be];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[qo]||e.length!==t.length)return!0;for(let r=0,n=e.length;r<n;r++){let s=t[r],i=e[r];if(s&&i?.[be]===s){if(Zd(i))return!0}else return!0}}else{let r=e[vt];if(r&&!t)return!0;for(let n in r){let s=r[n];if(s&&typeof s=="object"){let i=t[n];if(i&&s[be]===i){if(Zd(s))return!0}else return!0}else return!0}}return!1}var On,vt,Xd,qo,ef,tf,sf=Ne(()=>{zn();On=B(te());jd();vt=Symbol("own-data");a(jr,"getChanges");a(rf,"assignTrackedAccessors");a(eI,"trackObject");Xd=class{static{a(this,"GenericTrackedObject")}constructor(t){this[be]=t}};rf(Xd,{});a(nf,"collapseData");a(xo,"deepFreeze");a(Zd,"hasChanges");qo=Symbol.for("has-array-changes"),ef=class extends Array{static{a(this,"TrackedArray")}[qo];constructor(t){super(t)}splice(...t){return this[qo]=!0,super.splice(...t)}push(...t){return this[qo]=!0,super.push(...t)}pop(){return this[qo]=!0,super.pop()}unshift(...t){return this[qo]=!0,super.unshift(...t)}shift(){return this[qo]=!0,super.shift()}};ef.prototype.constructor=Array;tf=class{constructor(t){this.value=t}static{a(this,"Addition")}__op__="add";update(t){return(+t||0)+this.value}}});function gK(){TK=setInterval(function(){for(let e of eS)if(e.stale){let t=e[Oe]?.url;tI.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},SK).unref()}var tS,tI,pK,eS,Go,of,SK,TK,rS=Ne(()=>{tS=B(pr()),tI=B(q());zn();pK=100,eS=new Set,Go=class{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;open=!0;getReadTxn(){if(this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn)return this.readTxn;if(!this.open)throw new Error("Can not start a read on a transaction that is no longer open");return this.readTxnsUsed=1,this.readTxn=this.lmdbDb.useReadTransaction(),eS.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(eS.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}addWrite(t){if(!this.open&&!this.autoCommitMode)throw new Error("Can not use a transaction that is no longer open");this.writes.push(t),this.autoCommitMode&&this.commit()}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,tS.getNextMonotonicTime)());let n=t.retries||0;if(this.validated<this.writes.length)try{let u=this.validated;this.validated=this.writes.length;for(let f=u;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let d;for(let f=u;f<this.validated;f++){let E=this.writes[f];E&&(E.before||E.beforeIntermediate)&&(d=!0)}if(d)return(async()=>{try{for(let f=0;f<2;f++){let E;for(let h=u;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)}}catch(f){throw this.abort(),f}return this.commit(t)})()}catch(u){throw this.abort(),u}n||this.doneReadTxn(),t?.prepared?.(),this.open=!1;let s,i=[],o=0;this.writes=this.writes.filter(u=>u);let c=a(u=>{u.commit(r,u.entry,n)},"doWrite"),l=a(()=>{let u=this.writes[o++];if(u)if(u.key){n>0&&(u.entry=u.store.getEntry(u.key));let d=u.store.ifVersion(u.key,u.entry?.version??null,l);s=s||d}else l();else for(let d of this.writes)c(d)},"nextCondition");if(this.writes.length<pK>>n?l():s=this.writes[0].store.transaction(()=>{for(let u of this.writes)u.entry=u.store.getEntry(u.key),c(u);return!0}),s)return s.then(u=>u?(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=n+1:t={retries:1},this.commit(t)));let _={txnTime:r};if(this.next){let u=this.next?.commit(t);if(u?.then)return u?.then(d=>({txnTime:r,next:d}));_.next=u}return _}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=!1,this.writes=[]}},of=class extends Go{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,tS.getNextMonotonicTime)())}getReadTxn(){}},SK=3e4;a(gK,"startMonitoringTxns");gK()});function Xe(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let n=e.transaction=new Go;e.timestamp&&(n.timestamp=e.timestamp),n[Oe]=e,e.resourceCache||(e.resourceCache=[]);let s;try{if(s=t(n),s?.then)return s.then(i,o)}catch(c){o(c)}return i(s);function i(c){let l=n.commit(r?.resetTransaction?{prepared(){n.autoCommitMode=!0}}:{});return l.then?l.then(()=>c):c}function o(c){throw n.abort({}),c}}var rI,Fo=Ne(()=>{rI=require("../index");zn();rS();a(Xe,"transaction");(0,rI._assignPackageExport)("transaction",Xe);Xe.commit=function(e){let t=(e[Oe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Xe.abort=function(e){let t=(e[Oe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});function Yl(e,t,r,n,s,i){let o=e[0]??e.attribute,c=e[1]??e.value,l=e.comparator;if(Array.isArray(o)){let A=o[0],g=ti(n.attributes,A);if(g.relationship){if(o.length<2)throw new ko.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let I=g.definition?.tableClass||g.elements?.definition?.tableClass,v=new Map,F=Yl({attribute:o.length>2?o.slice(1):o[1],value:c,comparator:l},t,r,I,s,v);if(g.relationship.to){i[o[0]]=v;let G=!!ti(I.attributes,g.relationship.to)?.elements;F=NK(F,g,I.primaryStore,G,v)}if(g.relationship.from){let G=a(U=>Yl({attribute:g.relationship.from,value:U},t,r,n,s,v),"searchEntry");g.elements?(i[o[0]]=v,F=bK(F,g,I.primaryStore,v,G)):F=F.flatMap(G)}return F}else if(o.length===1)o=o[0];else throw new ko.ClientError("Unable to query by attribute "+JSON.stringify(o))}let _,u,d,f;c instanceof Date&&(c=c.getTime());let E;switch(sI[l]||l){case"lt":_=!0,u=c;break;case"le":_=!0,u=c,d=!0;break;case"gt":_=c,f=!0;break;case"ge":_=c;break;case"prefix":Array.isArray(c)?c[c.length-1]!=null&&(c=c.concat(null)):c=[c,null],_=c,u=c.slice(0),u[u.length-1]=As.MAXIMUM_KEY;break;case"starts_with":_=c.toString(),u=c+"\uFFFF";break;case"between":_=c[0],_ instanceof Date&&(_=_.getTime()),u=c[1],u instanceof Date&&(u=u.getTime()),d=!0;break;case tt.SEARCH_TYPES.EQUALS:case void 0:_=c,u=c,d=!0;break;case"ne":if(c===null){_=c,f=!0;break}case"contains":case"ends_with":E=!0;break;default:throw new ko.ClientError(`Unknown query comparator "${l}"`)}if(r){let A=_;_=u,u=A,A=!f,f=!d,d=A}let h=o===n.primaryKey||o==null,p=h?n.primaryStore:n.indices[o];if(!p||p.isIndexing||E||c===null&&!p.indexNulls){if(!s)throw new ko.ClientError(`"${o}" is not indexed${c===null&&!p.indexNulls?" for nulls, index needs to be rebuilt to search for nulls":p?.isIndexing?" yet":""}, can not search for this attribute`,404);let A=Kl(e);if(!A)throw new ko.ClientError(`Unknown search operator ${e.comparator}`);return n.primaryStore.getRange({start:!0,transaction:t,reverse:r}).map(({key:g,value:I})=>new Promise((v,F)=>setImmediate(()=>{try{v(I&&A(I)?g:nS.SKIP)}catch(G){F(G)}})))}let S={start:_,end:u,inclusiveEnd:d,exclusiveStart:f,values:!0,versions:h,transaction:t,reverse:r};if(h){let A=p.getRange(S).map(g=>g.value==null?nS.SKIP:g);return A.hasEntries=!0,A}else return p.getRange(S).map(({value:A})=>A)}function ti(e,t){if(Array.isArray(t))if(t.length>1){let r=ti(e,t[0]),n=(r?.definition?.tableClass||r?.elements.definition?.tableClass)?.attributes;return n?ti(n,t.slice(1)):void 0}else t=t.toString();else typeof t!="string"&&(t=t.toString());return e.find(r=>r.name===t)}function NK(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i,o;return{next(){if(!i){let l=t.relationship.to;return(async()=>{let _=a((d,f)=>{let E=d;Array.isArray(d)&&(E=ki(d),o=!0);let h=s.get(E);h?h.push(f):s.set(E,h=[f]),d!==E&&(h.key=d)},"add_entry"),u=0;for await(let d of e){let f=d.value??r.get(d.key??d),E=f?.[l];if(E!=null&&!s.filters?.some(h=>!h(f))){if(n)for(let h=0;h<E.length;h++)_(E[h],d);else _(E,d);u++>100&&(await new Promise(setImmediate),u=0)}}return i=(o?s:s.keys())[Symbol.iterator](),this.next()})()}let c=i.next();return c.done?c:{value:o?c.value[1].key||c.value[0]:c.value}}}}})}function bK(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i,o;return{next(){let c;if(o&&(c=o.next(),!c.done))return c;if(!i)return(async()=>{let l=new Map;n.fromRecord=u=>u[t.relationship.from]?.filter?.(d=>l.has(ki(d)));let _=0;for await(let u of e){if(n.filters){let d=r.get(u);if(n.filters.some(f=>!f(d)))continue}l.set(ki(u),u),_++>100&&(await new Promise(setImmediate),_=0)}return i=l.values()[Symbol.iterator](),this.next()})();do{let l=i.next();return l.done?l:(o=s(l.value)[Symbol.iterator](),this.next())}while(!0)},return(){return o?.return?.()},throw(){return o?.throw?.()}}}})}function Kl(e,t,r,n){if(e.conditions){let c=e.conditions.map(Kl);return e.operator==="or"?l=>c.some(_=>_(l)):l=>c.every(_=>_(l))}let s=e.comparator,i=e[0]??e.attribute,o=e[1]??e.value;if(Array.isArray(i)){if(i.length===0)return()=>!0;if(i.length===1)i=i[0];else if(i.length>1){let c=i[0],l=ti(t.attributes,c),_=l.definition?.tableClass||l.elements.definition?.tableClass,u=n?.[c],d=Kl({attribute:i.length>2?i.slice(1):i[1],value:o,comparator:s},t,r,u?.[c]?.joined);if(!d)return;if(u){u.filters||(u.filters=[]),u.filters.push(d);return}let f=t.propertyResolvers?.[c];return(E,h)=>{let p,S;return f?(S=f(E,r,h),p=S?.value):p=E[c],p?Array.isArray(p)?p.some(d):d(p,S):!1}}}switch(o instanceof Date&&(o=o.getTime()),sI[s]||s){case tt.SEARCH_TYPES.EQUALS:case void 0:return Rs(i,c=>c===o);case tt.SEARCH_TYPES.CONTAINS:return Rs(i,c=>c?.toString().includes(o));case tt.SEARCH_TYPES.ENDS_WITH:case tt.SEARCH_TYPES._ENDS_WITH:return Rs(i,c=>c?.toString().endsWith(o));case tt.SEARCH_TYPES.STARTS_WITH:case tt.SEARCH_TYPES._STARTS_WITH:return Rs(i,c=>typeof c=="string"&&c.startsWith(o));case tt.SEARCH_TYPES.BETWEEN:return o[0]instanceof Date&&(o[0]=o[0].getTime()),o[1]instanceof Date&&(o[1]=o[1].getTime()),Rs(i,c=>(0,As.compareKeys)(c,o[0])>=0&&(0,As.compareKeys)(c,o[1])<=0);case"gt":case tt.SEARCH_TYPES.GREATER_THAN:case tt.SEARCH_TYPES._GREATER_THAN:return Rs(i,c=>(0,As.compareKeys)(c,o)>0);case"ge":case tt.SEARCH_TYPES.GREATER_THAN_EQUAL:case tt.SEARCH_TYPES._GREATER_THAN_EQUAL:return Rs(i,c=>(0,As.compareKeys)(c,o)>=0);case tt.SEARCH_TYPES.LESS_THAN:case"lt":case tt.SEARCH_TYPES._LESS_THAN:return Rs(i,c=>(0,As.compareKeys)(c,o)<0);case"le":case tt.SEARCH_TYPES.LESS_THAN_EQUAL:case tt.SEARCH_TYPES._LESS_THAN_EQUAL:return Rs(i,c=>(0,As.compareKeys)(c,o)<=0);case"ne":return Rs(i,c=>(0,As.compareKeys)(c,o)!==0);default:throw new ko.ClientError(`Unknown query comparator "${s}"`)}}function Rs(e,t){return r=>{let n=r[e];return typeof n!="object"||!n?t(n):Array.isArray(n)?n.some(t):n instanceof Date?t(n.getTime()):!1}}function sS(e){return t=>{if(t.estimated_count===void 0){if(t.conditions){let n;if(t.operator==="or"){n=0;for(let s of t.conditions)n+=s.estimated_count}else{n=1/0;for(let s of t.conditions)n=1/(1/n+1/s.estimated_count)}return t.estimated_count=n,t.estimated_count}let r=t.comparator||t.search_type;if(r===tt.SEARCH_TYPES.EQUALS){let n=t[0]??t.attribute;if(n==null||n===e.primaryKey)t.estimated_count=1;else if(Array.isArray(n)){let s=ti(e.attributes,n[0]),i=s.definition?.tableClass||s.elements.definition?.tableClass,o=sS(i)({value:t.value,attribute:n.length>2?n.slice(1):n[1],comparator:"equals"});t.estimated_count=o*4*(e.indices[s.relationship.from]||e.primaryStore).getStats().entryCount/(i.primaryStore.getStats().entryCount||1)}else{let s=e.indices[n];t.estimated_count=s?s.getValuesCount(t[1]??t.value):1/0}}else r===tt.SEARCH_TYPES.CONTAINS||r===tt.SEARCH_TYPES.ENDS_WITH||r==="ne"?t.value===null&&r==="ne"?t.estimated_count=nI:t.estimated_count=1/0:r===tt.SEARCH_TYPES.STARTS_WITH||r==="prefix"?t.estimated_count=nI:r===tt.SEARCH_TYPES.BETWEEN?t.estimated_count=AK:t.estimated_count=RK;typeof t.descending=="boolean"&&(t.estimated_count/=4)}return t.estimated_count}}function af(e){if(e)if(Fi=e,nc.lastIndex=0,yK.test(e))try{let t=$l(new sc,"");if(Sr!==Fi.length)throw new SyntaxError("Unable to parse query, unexpected end of query");return t}catch(t){throw t.statusCode=400,t.message=`Unable to parse query, ${t.message} at position ${Sr} in '${Fi}'`,t}else{let t=new URLSearchParams(e);return t.conditions=t,t}}function $l(e,t){let r=nc,n,s,i,o,c;for(;n=r.exec(Fi);){Sr=r.lastIndex;let[,l,_]=n;if(o){if(l)throw new SyntaxError(`expected operator, but encountered '${l}'`);o=!1,c=!1}else c=!0;let u;switch(_){case"=":if(s)if(l.length<=2)i=l;else throw new SyntaxError(`invalid FIQL operator ${l}`);else{if(i="equals",!l)throw new SyntaxError("attribute must be specified before equality comparator");s=Vl(l)}break;case"!=":case"<":case"<=":case">":case">=":if(i=OK[_],!l)throw new SyntaxError(`attribute must be specified before comparator ${_}`);s=Vl(l);break;case"|":e.operator="or";case"":case void 0:case"&":if(s==null){if(s===void 0)throw t?new SyntaxError(`expected '${t}', but encountered ${_[0]?"'"+_[0]+"'":"end of string"}}`):new SyntaxError(`no comparison specified before ${_?"'"+_+"'":"end of string"}`)}else{if(!e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");e.conditions.push({comparator:i,attribute:s,value:decodeURIComponent(l)})}s=void 0;break;case",":if(e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");e.push(Vl(l)),s=void 0;break;case"(":nc.lastIndex=Sr;let d=$l(l?[]:new sc,")");switch(l){case"":e.conditions.push(d);break;case"limit":switch(d.length){case 1:e.limit=+d[0];break;case 2:e.offset=+d[0],e.limit=d[1]-e.offset;break;default:throw new SyntaxError("limit must have 1 or 2 arguments")}break;case"select":Array.isArray(d[0])&&d.length===1&&!d[0].name?(e.select=d[0],e.select.asArray=!0):d.length===1?e.select=d[0]:d.length===2&&d[1]===""?e.select=d.slice(0,1):e.select=d;break;case"group-by":throw new SyntaxError("group by is not implemented yet");case"sort":e.sort=iI(d);break;default:throw new SyntaxError(`unknown query function call ${l}`)}Fi[Sr]===","?r.lastIndex=++Sr:o=!0,s=null;break;case"{":if(e.conditions)throw new SyntaxError("property sets are not allowed in a queries");if(!l)throw new SyntaxError("property sets must have a defined parent property name");nc.lastIndex=Sr,u=$l([],"}"),u.name=l,e.push(u),Fi[Sr]===","?r.lastIndex=++Sr:o=!0;break;case"[":nc.lastIndex=Sr,l?(u=$l(new sc,"]"),u.name=l):u=$l(e.conditions?new sc:[],"]"),e.conditions?(e.conditions.push(u),s=null):e.push(u),Fi[Sr]===","?r.lastIndex=++Sr:o=!0;break;case")":case"]":case"}":if(t===_[0]){if(e.conditions){if(s)e.conditions.push({comparator:i||"equals",attribute:s,value:decodeURIComponent(l)});else if(l)throw new SyntaxError("no attribute or comparison specified")}else(l||e.length>0&&c)&&e.push(Vl(l));return e}else throw t?new SyntaxError(`expected '${t}', but encountered '${_[0]}'`):new SyntaxError(`unexpected token '${_[0]}'`);default:throw new SyntaxError(`unexpected operator '${_}'`)}if(t!==")"&&(r=s?IK:nc,r.lastIndex=Sr),Sr===Fi.length)return e}if(t)throw new SyntaxError(`expected '${t}', but encountered end of string`)}function Vl(e){return e.indexOf(".")>-1?e.split(".").map(Vl):decodeURIComponent(e)}function iI(e){let t=oI(e[0]);return e.length>1&&(t.next=iI(e.slice(1))),t}function oI(e){if(Array.isArray(e)){let t=oI(e[0]);return e[0]=t.attribute,t.attribute=e,t}if(typeof e=="string")switch(e[0]){case"-":return{attribute:e.slice(1),descending:!0};case"+":return{attribute:e.slice(1),descending:!1};default:return{attribute:e,descending:!1}}throw new SyntaxError(`Unknown sort type ${e}`)}function ki(e){return Array.isArray(e)?e.join("\0"):e}var ko,tt,As,nS,RK,AK,nI,OK,sI,yK,nc,IK,Sr,Fi,sc,cf=Ne(()=>{ko=B(te()),tt=B(ht()),As=require("ordered-binary"),nS=require("lmdb"),RK=1e8,AK=15e6,nI=1e7,OK={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne"};a(Yl,"searchByIndex");a(ti,"findAttribute");a(NK,"joinTo");a(bK,"joinFrom");sI={greater_than:"gt",greater_than_equal:"ge",less_than:"lt",less_than_equal:"le",not_equal:"ne",equal:"equals",sw:"starts_with",ew:"ends_with",ct:"contains",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(Kl,"filterByType");a(Rs,"attributeComparator");a(sS,"estimateCondition");yK=/[()[\]|!<>.]|(=\w+=)/,nc=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,IK=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;a(af,"parseQuery");a($l,"parseBlock");a(Vl,"decodeProperty");a(iI,"toSortObject");a(oI,"toSortEntry");sc=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 n=this.conditions[r];if(n.attribute===t)return n.value}}};a(ki,"flattenKey")});var aS={};Fe(aS,{CONTEXT:()=>Oe,ID_PROPERTY:()=>De,IS_COLLECTION:()=>Nn,RECORD_PROPERTY:()=>be,Resource:()=>jt,snake_case:()=>CK,transformForSelect:()=>uf});function CK(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function aI(e,t){if(Wl=!1,e==="")return null;if(e=e.slice(1),e.indexOf("/")===-1)return e===""?(Wl=!0,null):(e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e)));let r=e.split("/"),n=new oS;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){Wl=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}function zr(e,t){n.reliesOnPrototype=!0;let r=t.hasContent;return n;function n(s,i,o){let c,l,_,u;if(r?o?(u=i,o=o[Oe]||o):i?typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(u=s,c=u[this.primaryKey]??null,o=i[Oe]||i):u=i:(u=s,c=u[De]??u[this.primaryKey]??null):i?o=i[Oe]||i:s&&typeof s=="object"&&!Array.isArray(s)&&(o=s),c===void 0)if(typeof s=="string")c=s;else if(typeof s=="object"&&s)if(l=s,s[Symbol.iterator]){c=[],_=!0;for(let E of s){if(typeof E=="object"&&E)break;c.push(E)}c.length===0?c=null:(c.length===1&&(c=c[0]),l.slice&&(l=l.slice(c.length,l.length),l.length===0&&(l=null,_=!1)))}else{if(typeof(c=s.url)=="string"){let E=c.indexOf("?");if(E>-1){let p=this.parseQuery(c.slice(E+1));l?l=Object.assign(p,l):l=p,c=c.slice(0,E)}let h=this.parsePath(c,o,l);h?.id!==void 0?(h.query&&(l?l=Object.assign(h.query,l):l=h.query),_=h.isCollection,c=h.id):c=h}c===void 0&&(c=s.id??null,c==null&&(_=!0))}else c=s??null,c==null&&(_=!0);o||(o={});let d;if(l?.ensureLoaded!=null||l?.async||_?(d=Object.assign({},t),l?.ensureLoaded!=null&&(d.ensureLoaded=l.ensureLoaded),l?.async&&(d.async=l.async),_&&(d.isCollection=!0)):d=t,o.transaction){let E=this.getResource(c,o,d);return E.then?E.then(f):f(E)}else return d.resetTransaction=!0,Xe(o,()=>{let E=this.getResource(c,o,d);return E.then?E.then(f):f(E)},d);function f(E){if(o.authorize){o.authorize=!1;let h=t.type==="read"?E.allowRead(o.user,l,o):t.type==="update"?E.doesExist?.()===!1?E.allowCreate(o.user,u,o):E.allowUpdate(o.user,u,o):t.type==="create"?E.allowCreate(o.user,u,o):E.allowDelete(o.user,l,o);if(h?.then)return h.then(p=>{if(!p)throw new lf(o.user);return typeof u?.then=="function"?u.then(S=>e(E,l,o,S)):e(E,l,o,u)});if(!h)throw new lf(o.user)}return typeof u?.then=="function"?u.then(h=>e(E,l,o,h)):e(E,l,o,u)}a(f,"authorizeActionOnResource")}}function Jr(e,t){let r=new uI.ClientError(`The ${e.constructor.name} does not have a ${t} method implemented`,405);r.allow=[],r.method=t;for(let n of["get","put","post","delete","query","move","copy"])typeof e[n]=="function"&&r.allow.push(n);throw r}function iS(e,t,r){let n=e[be];if(n){let s=e[vt];return i=>{let o,c;return e.hasOwnProperty(i)&&typeof(o=e[i])!="function"?o:s&&i in s?s[i]:(c=t?.[i])?c(e,r):n[i]}}else return t?s=>{let i=t[s];return i?i(e,r):e[s]}:s=>e[s]}function uf(e,t){let r=t?.propertyResolvers,n=t[Oe],s;if(typeof e=="string")return a(function o(c){return c.then?c.then(o):Array.isArray(c)?c.map(o):iS(c,r,n)(e)},"transform");if(typeof e=="object"){if(e.asArray)return a(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(c);let _=[],u=i(iS(l,r,n));for(let d of e)_.push(u(d));return _},"transform");let o=e.forceNulls;return a(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(f=>f&&typeof f=="object"?c(f):f);let _={},u=i(iS(l,r,n)),d;for(let f of e){let E=u(f);E===void 0&&o&&(E=null),E?.then?(d||(d=[]),d.push(E.then(h=>_[f.name||f]=h))):_[f.name||f]=E}return d?Promise.all(d).then(()=>_):_},"transform")}else throw new Error("Invalid select argument type "+typeof e);function i(o){return c=>{if(typeof c=="string")return o(c);if(typeof c=="object")if(c.name){s||(s={});let l=s[c.name];if(!l){let u=r[c.name]?.definition?.tableClass;l=s[c.name]=uf(c.select||c,u)}let _=o(c.name);return l(_)}else return o(c);else return c}}a(i,"handleProperty")}var cI,lI,uI,Oe,De,Nn,be,wK,jt,lf,Wl,oS,zn=Ne(()=>{cI=require("crypto");ql();lI=require("../index"),uI=B(te());sf();Fo();cf();Oe=Symbol.for("context"),De=Symbol.for("primary-key"),Nn=Symbol("is-collection"),be=Symbol("stored-record"),wK={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},jt=class{static{a(this,"Resource")}static transactions;constructor(t,r){this[De]=t;let n=r?.[Oe];this[Oe]=n!==void 0?n:r||null}static get=zr(function(t,r,n,s){let i=t.get?.(r);if(i?.then)return i.then(o);return o(i);function o(c){let l;if((l=r?.select)&&c!=null&&!c.selectApplied){let _=uf(l,t.constructor);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",resetTransaction:!0,ensureLoaded:!0,async:!0});static put=zr(function(t,r,n,s){if(Array.isArray(s)&&t[Nn]){let i=[],o=n.authorize;for(let c of s){let l=t.constructor,_=l.getResource(c[l.primaryKey],n,{async:!0});_.then?i.push(_.then(u=>u.put(c,n))):i.push(_.put(c,n))}return Promise.all(i)}return t.put?t.put(s,r):Jr(t,"put")},{hasContent:!0,type:"update"});static patch=zr(function(t,r,n,s){return t.patch?t.patch(s,r):Jr(t,"patch")},{hasContent:!0,type:"update"});static delete=zr(function(t,r,n,s){return t.delete?t.delete(r):Jr(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,cI.randomUUID)()}static create(t,r,n){let s;return t==null?s=this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?s=[...t,this.getNewId()]:typeof t!="object"?s=[t,this.getNewId()]:(s=this.getNewId(),n=r,r=t),Xe(n,()=>{let i=new this(s,n),o=i.update?i.update(r):Jr(i,"update");return n.newLocation=s,n.createdResource=!0,o?.then?o.then(()=>s):s})}static invalidate=zr(function(t,r,n,s){return t.invalidate?t.invalidate(r):Jr(t,"delete")},{hasContent:!1,type:"update"});static post=zr(function(t,r,n,s){return t[De]!=null&&t.update?.(),t.post(s,r)},{hasContent:!0,type:"create"});static connect=zr(function(t,r,n,s){return t.connect?t.connect(s,r):Jr(t,"connect")},{hasContent:!0,type:"read"});static subscribe=zr(function(t,r,n,s){return t.subscribe?t.subscribe(r):Jr(t,"subscribe")},{type:"read"});static publish=zr(function(t,r,n,s){return t[De]!=null&&t.update?.(),t.publish?t.publish(s,r):Jr(t,"publish")},{hasContent:!0,type:"create"});static search=zr(function(t,r,n,s){let i=t.search?t.search(r):Jr(t,"search"),o=n.select;if(o&&n.hasOwnProperty("select")&&i!=null&&!i.selectApplied){let c=uf(o,t.constructor);return i.map(c)}return i},{type:"read"});static query=zr(function(t,r,n,s){return t.search?t.search(s,r):Jr(t,"search")},{hasContent:!0,type:"read"});static copy=zr(function(t,r,n,s){return t.copy?t.copy(s,r):Jr(t,"copy")},{type:"create"});static move=zr(function(t,r,n,s){return t.move?t.move(s,r):Jr(t,"move")},{type:"delete"});post(t){if(this[Nn])return this.constructor.create(this[De],t,this[Oe]);Jr(this,"post")}static isCollection(t){return t?.[Nn]}static coerceId(t){return t}static parseQuery(t){return af(t)}static parsePath(t,r,n){let s=t.indexOf(".");if(s>-1){let o=t.slice(s+1);t=t.slice(0,s);let c=r?.headers&&wK[o];if(c)r.headers.set("accept",c);else if(n)n.property=o;else return{query:{property:o},id:aI(t,this),isCollection:Wl}}let i=aI(t,this);return Wl?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r[Oe],o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=n?.isCollection;let c=o&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let l;if(i.resourceCache?l=i.resourceCache:l=i.resourceCache=[],l.asMap){let _=l.asMap.get(t);if(s=_?.find(u=>u.constructor===c),s)return s;_||l.asMap.set(t,_=[]),_.push(s=new c(t,i))}else{if(s=l.find(_=>_[De]===t&&_.constructor===c),s)return s;if(l.push(s=new c(t,i)),l.length>10){let _=new Map;for(let u of l){let d=u[De],f=_.get(d);f?f.push(u):_.set(d,[u])}i.resourceCache.length=0,i.resourceCache.asMap=_}}}else s=new c(t,i);return o&&(s[Nn]=!0),s}subscribe(t){return new jn}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new jn}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[De]}getContext(){return this[Oe]}};jt.prototype[Oe]=null;(0,lI._assignPackageExport)("Resource",jt);a(CK,"snake_case");lf=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(aI,"pathToId");oS=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(zr,"transactional");a(Jr,"missingMethod");a(iS,"selectFromObject");a(uf,"transformForSelect")});var _I={};Fe(_I,{Resources:()=>_f,keyArrayToString:()=>ic,resetResources:()=>LK,resources:()=>$i});function LK(){return $i=new _f}function ic(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var _f,$i,Ql=Ne(()=>{Fo();_f=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;set(t,r,n,s){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,type:n,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!s)throw new Error(`Conflicting paths for ${t}`);super.set(t,i);for(let[c,l]of this){let _=2;for(;(_=c.indexOf("/",_))>-1;){let u=this.get(c.slice(0,_));u&&(u.hasSubPaths=!0),_+=2}}}getMatch(t,r){let n=2,s;for(;(n=t.indexOf("/",n))>-1;){let c=t.slice(0,n),l=this.get(c);if(l){if(l.relativeURL=t.slice(n),!l.hasSubPaths)return l;s=l}n+=2}if(s)return s;let i=t.indexOf("?"),o=i>-1?t.slice(0,i):t;return s=this.get(o),s?s.relativeURL=i>-1?t.slice(i):"":s||(s=this.get(""),s&&(t[0]!=="/"&&(t="/"+t),s.relativeURL=t)),s}getResource(t,r){let n=this.getMatch(t);if(n)return t=n.relativeURL,n.Resource.getResource(this.pathToId(t,n.Resource),r)}call(t,r,n){return Xe(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};a(LK,"resetResources");a(ic,"keyArrayToString")});function fI(e,t,r,n){let s=e.primaryStore.env.path,i=e.primaryStore.tableId;oc||((0,df.onMessageByType)(dI,u=>{EI(u.path)}),oc=Object.create(null));let o=oc[s]||(oc[s]=[]);o.auditStore=e.auditStore,o.lastTxnTime==null&&(o.lastTxnTime=Date.now());let c=o[i];c||(c=o[i]=new Map,c.envs=o,c.tableId=i,c.store=e.primaryStore),t=ic(t);let l=new lS(r);l.startTime=n;let _=c.get(t);return _?_.push(l):(c.set(t,_=[l]),_.tables=c,_.key=t),l.subscriptions=_,l}function EI(e,t){if(!oc)return;let r=oc[e];if(!r)return;try{r.auditStore.resetReadTxn()}catch(s){throw s.message+=" in "+e,s}let n;for(let{key:s,value:i}of r.auditStore.getRange({start:r.lastTxnTime,exclusiveStart:!0})){r.lastTxnTime=s;let o=Vt(i),c=r[o.tableId];if(!c)continue;let l=o.recordId,_,u=ic(o.recordId),d=0;do{let f=c.get(u);if(f){for(let h of f)if(!(d>0&&!(h.includeDescendants&&!(h.onlyChildren&&d>1)))){if(h.startTime>=s){(0,cS.info)("omitting",l,h.startTime,s);continue}try{if(h.crossThreads===!1&&!t)continue;let p;h.supportsTransactions&&h.txnInProgress!==o.version&&(p=!0,h.txnInProgress||(n?n.push(h):n=[h]),h.txnInProgress=o.version),h.listener(l,o,s,p)}catch(p){console.error(p),(0,cS.info)(p)}}}if(u==null)break;let E=u.lastIndexOf?.("/",u.length-2);E>-1?u=u.slice(0,E):u=null,d++}while(!0)}if(n)for(let s of n)s.txnInProgress=null,s.listener(null,{type:"end_txn"},r.lastTxnTime,!0)}function hI(e,t){let r=t||e,n=r.env;if(t&&!t.cache&&(t.cache=new Map),!n.hasBroadcastListener){n.hasBroadcastListener=!0;let s=n.path;r.on("aftercommit",()=>{(0,df.broadcast)({type:dI,path:s}),EI(s,!0)})}}var cS,df,dI,oc,She,lS,mI=Ne(()=>{cS=B(q()),df=B(et());ql();Ql();Ho();dI="transaction",She=Buffer.alloc(4096);a(fI,"addSubscription");lS=class extends jn{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 n=t.envs,s=t.dbi;delete n[s]}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}};a(EI,"notifyFromTransactionData");a(hI,"listenToCommits")});var SI=T((Rhe,pI)=>{"use strict";var uS=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};pI.exports=uS});var gI=T((Ohe,TI)=>{"use strict";var _S=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};TI.exports=_S});var ff=T((bhe,RI)=>{"use strict";var fS=J(),ES=C(),{RecordEncoder:DK}=(kl(),re(xy));fS.initSync();var PK=fS.get(ES.CONFIG_PARAMS.STORAGE_COMPRESSION),MK=fS.get(ES.CONFIG_PARAMS.STORAGE_CACHING)!==!1,UK=ES.UPDATES_PROPERTY,dS=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=PK&&r&&{startingOffset:32},this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=MK&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:DK},this.alwaysLazyProperty=n=>n===UK)}};RI.exports=dS});var hf=T((Ihe,OI)=>{"use strict";var ac=J(),jl=C();ac.initSync();var vK=ac.get(jl.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||ac.get(jl.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||ac.get(jl.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",AI=ac.get(jl.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),BK=ac.get(jl.CONFIG_PARAMS.STORAGE_NOREADAHEAD),Ef=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=vK,this.noFSAccess=!0,AI!==void 0&&(this.overlappingSync=AI),this.noReadAhead=BK}};OI.exports=Ef;Ef.MAX_DBS=1e4});var ke=T((Che,MI)=>{"use strict";var mS=require("lmdb"),Jn=require("fs-extra"),Xr=require("path"),mf=pr(),yI=q(),Tr=Qr().LMDB_ERRORS_ENUM,pf=gI(),pS=ff(),II=hf(),Vi=ht(),NI=C(),{table:HK,resetDatabases:qK}=(Re(),re(xe)),bI=J(),Xn=Vi.INTERNAL_DBIS_NAME,wI=Vi.DBI_DEFINITION_NAME,xK="data.mdb",GK="lock.mdb",zl=".mdb",FK="-lock",hS=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=bn(t,r),this.key_type=this.dbi[Vi.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Vi.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new mS.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Sf(e,t){if(e===void 0)throw new Error(Tr.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Tr.ENV_NAME_REQUIRED)}a(Sf,"pathEnvNameValidation");async function SS(e,t,r=!0){try{await Jn.access(e)}catch(n){throw n.code==="ENOENT"?new Error(Tr.INVALID_BASE_PATH):n}try{let n=Xr.join(e,t+zl);return await Jn.access(n,Jn.constants.R_OK|Jn.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await Jn.access(Xr.join(e,t,xK),Jn.constants.R_OK|Jn.constants.F_OK),Xr.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(Tr.INVALID_ENVIRONMENT)}else throw new Error(Tr.INVALID_ENVIRONMENT);throw n}}a(SS,"validateEnvironmentPath");function Tf(e,t){if(mf.validateEnv(e),t===void 0)throw new Error(Tr.DBI_NAME_REQUIRED)}a(Tf,"validateEnvDBIName");async function kK(e,t,r=!1,n=!1){Sf(e,t);let s=Xr.basename(e);t=t.toString();let i=bI.get(NI.CONFIG_PARAMS.DATABASES);i||bI.setProperty(NI.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await SS(e,t,n),CI(e,t,r)}catch(o){if(o.message===Tr.INVALID_ENVIRONMENT){let c=Xr.join(e,t);await Jn.mkdirp(n?c:e);let l=new II(n?c:c+zl,!1),_=mS.open(l);_.dbis=Object.create(null);let u=new pS(!1);_.openDB(Xn,u),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=TS(e,t,r);return _[Vi.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(kK,"createEnvironment");async function $K(e,t,r,n=!0){Sf(e,t),t=t.toString();let s=Xr.join(e,t);return HK({table:t,database:Xr.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a($K,"copyEnvironment");async function CI(e,t,r=!1){Sf(e,t),t=t.toString();let n=TS(e,t,r);if(global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null)),global.lmdb_map[n]!==void 0)return global.lmdb_map[n];let s=await SS(e,t),i=Xr.join(e,t+zl),o=s!=i,c=new II(s,o),l=mS.open(c);l.dbis=Object.create(null);let _=DI(l);for(let u=0;u<_.length;u++)bn(l,_[u]);return l[Vi.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}a(CI,"openEnvironment");async function VK(e,t,r=!1){Sf(e,t),t=t.toString();let n=Xr.join(e,t+zl),s=await SS(e,t);if(global.lmdb_map!==void 0){let i=TS(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await LI(o),delete global.lmdb_map[i]}}await Jn.remove(s),await Jn.remove(s===n?s+FK:Xr.join(Xr.dirname(s),GK))}a(VK,"deleteEnvironment");async function LI(e){mf.validateEnv(e);let t=e[Vi.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(LI,"closeEnvironment");function TS(e,t,r=!1){let s=`${Xr.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(TS,"getCachedEnvironmentName");function YK(e){mf.validateEnv(e);let t=Object.create(null),r=bn(e,Xn);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==Xn)try{t[n]=Object.assign(new pf,s)}catch{yI.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(YK,"listDBIDefinitions");function DI(e){mf.validateEnv(e);let t=[],r=bn(e,Xn);for(let{key:n}of r.getRange({start:!1}))n!==Xn&&t.push(n);return t}a(DI,"listDBIs");function KK(e,t){let n=bn(e,Xn).getEntry(t),s=new pf;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{yI.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(KK,"getDBIDefinition");function PI(e,t,r,n=!r){if(Tf(e,t),t=t.toString(),t===Xn)throw new Error(Tr.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return bn(e,t)}catch(s){if(s.message===Tr.DBI_DOES_NOT_EXIST){let i=new pS(r,n===!0),o=e.openDB(t,i),c=new pf(r===!0,n);return o[wI]=c,bn(e,Xn).putSync(t,c),e.dbis[t]=o,o}throw s}}a(PI,"createDBI");function bn(e,t){if(Tf(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Xn?r=KK(e,t):r=new pf,r===void 0)throw new Error(Tr.DBI_DOES_NOT_EXIST);let n;try{let s=new pS(r.dup_sort,r.useVersions);if(n=e.openDB(t,s),n.db===void 0)throw new Error("MDB_NOTFOUND")}catch(s){throw s.message.includes("MDB_NOTFOUND")===!0?new Error(Tr.DBI_DOES_NOT_EXIST):s}return n[wI]=r,e.dbis[t]=n,n}a(bn,"openDBI");function WK(e,t){Tf(e,t),t=t.toString();let r=bn(e,t),n=r.getStats();return r[Vi.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(WK,"statDBI");async function QK(e,t){try{let r=Xr.join(e,t+zl);return(await Jn.stat(r)).size}catch{throw new Error(Tr.INVALID_ENVIRONMENT)}}a(QK,"environmentDataSize");function jK(e,t){if(Tf(e,t),t=t.toString(),t===Xn)throw new Error(Tr.CANNOT_DROP_INTERNAL_DBIS_NAME);bn(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],bn(e,Xn).removeSync(t)}a(jK,"dropDBI");function zK(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{bn(e,i)}catch(o){if(o.message===Tr.DBI_DOES_NOT_EXIST)PI(e,i,i!==t,i===t),n=!0;else throw o}}n&&qK()}a(zK,"initializeDBIs");MI.exports={openDBI:bn,openEnvironment:CI,createEnvironment:kK,listDBIs:DI,listDBIDefinitions:YK,createDBI:PI,dropDBI:jK,statDBI:WK,deleteEnvironment:VK,initializeDBIs:zK,TransactionCursor:hS,environmentDataSize:QK,copyEnvironment:$K,closeEnvironment:LI}});var BI=T((Dhe,vI)=>{"use strict";var gS=ke(),JK=q(),UI=Qr().LMDB_ERRORS_ENUM;vI.exports=XK;async function XK(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 gS.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==UI.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await gS.closeEnvironment(global.lmdb_map[n]),await gS.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==UI.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){JK.error(t)}}a(XK,"cleanLMDBMap")});var ri=T((Mhe,ZK)=>{ZK.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 jI=T((vhe,QI)=>{"use strict";var RS=require("recursive-iterator"),eW=require("alasql"),AS=require("clone"),HI=Y(),{handleHDBError:qI,hdb_errors:tW}=te(),{HDB_ERROR_MSGS:xI,HTTP_STATUS_CODES:GI}=tW,{getDatabases:rW}=(Re(),re(xe)),nW=["DISTINCT_ARRAY"],FI=Symbol("validateTables"),OS=Symbol("validateTable"),Uhe=Symbol("getAllColumns"),kI=Symbol("validateAllColumns"),gf=Symbol("findColumn"),$I=Symbol("validateOrderBy"),Jl=Symbol("validateSegment"),NS=Symbol("validateColumn"),VI=Symbol("setColumnsForTable"),YI=Symbol("checkColumnsForAsterisk"),KI=Symbol("validateGroupBy"),WI=Symbol("hasColumns"),bS=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[FI](),this[YI](),this[kI]()}[FI](){if(this[WI]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[OS](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[OS](t.table)})}}[WI](){let t=!1,r=new RS(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[OS](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=rW();if(!r[t.databaseid])throw qI(new Error,xI.SCHEMA_NOT_FOUND(t.databaseid),GI.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw qI(new Error,xI.TABLE_NOT_FOUND(t.databaseid,t.tableid),GI.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=AS(s);i.table=AS(t),this.attributes.push(i)})}[gf](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)}[YI](){let t=new RS(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[VI](r.tableid)}[VI](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new eW.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[kI](){this[Jl](this.statement.columns,!1),this[Jl](this.statement.joins,!1),this[Jl](this.statement.where,!1),this[KI](this.statement.group,!1),this[Jl](this.statement.order,!0)}[Jl](t,r){if(!t)return;let n=new RS(t),s=[];for(let{node:i,path:o}of n)!HI.isEmpty(i)&&!HI.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[$I](i):s.push(this[NS](i)));return s}[KI](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&nW.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=AS(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[gf](n)[0];s&&r.push(s)}}}),this.statement.group.forEach(n=>{let s=null;if(!n.columnid)r.forEach((i,o)=>{if(i.toString()===n.toString()){s=i,r.splice(o,1);return}});else{let i=this[gf](n);if(!i||i.length===0)throw`unknown column '${n.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${n.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){s=o,r.splice(c,1);return}})}if(!s)throw`group by column '${n.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`}[$I](t){let r=this.statement.columns.filter(n=>n.as===t.columnid);if(r.length>1)throw`ambiguous column reference ${(t.tableid?t.tableid+".":"")+t.columnid} in order by`;r.length===0&&this[NS](t)}[NS](t){let r=this[gf](t),n=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${n}`;if(r.length>1)throw`ambiguous column reference ${n}`;return r[0]}};QI.exports=bS});var JI=T((Hhe,zI)=>{"use strict";var yS=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")}};zI.exports=yS});var ZI=T((xhe,XI)=>{"use strict";var IS=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};XI.exports=IS});var tw=T((Fhe,ew)=>{"use strict";var wS=class{static{a(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n,this.original_records=s}};ew.exports=wS});var nw=T(($he,rw)=>{"use strict";var CS=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};rw.exports=CS});var Vo=T((Qhe,ow)=>{"use strict";var sW=ke(),iW=ZI(),oW=tw(),aW=nw(),Os=pr(),Xl=Qr().LMDB_ERRORS_ENUM,cW=ht(),ni=C(),lW=Y(),uW=require("uuid"),Yhe=require("lmdb"),{handleHDBError:_W,hdb_errors:dW}=te(),{OVERFLOW_MARKER:Khe,MAX_SEARCH_KEY_LENGTH:Whe}=cW,sw=J();sw.initSync();var Rf=sw.get(ni.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),LS=ni.TIME_STAMP_NAMES_ENUM.CREATED_TIME,$o=ni.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function fW(e,t,r,n,s=Os.getNextMonotonicTime()){US(e,t,r,n),DS(e,t,r);let i=new iW,o=[],c=[];for(let l=0;l<n.length;l++){let _=n[l];iw(_,!0,s);let u=EW(e,t,r,_),d=_[t];o.push(u),c.push(d)}return PS(o,c,n,i,s)}a(fW,"insertRecords");function EW(e,t,r,n){let s=n[t];return e.dbis[t].ifNoExists(s,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||n.hasOwnProperty(o)===!1)continue;let c=n[o];if(typeof c=="function"){let u=c([[{}]]);Array.isArray(u)&&(c=u[0][ni.FUNC_VAL],n[o]=c)}let l=Os.getIndexedValues(c),_=e.dbis[o];if(l){Rf&&_.prefetch(l.map(u=>({key:u,value:s})),Af);for(let u=0,d=l.length;u<d;u++)_.put(l[u],s)}}Rf&&e.dbis[t].prefetch([s],Af),e.dbis[t].put(s,n,n[$o])})}a(EW,"insertRecord");function hW(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(hW,"removeSkippedRecords");function iw(e,t,r){let n=r>0;(n||!Number.isInteger(e[$o]))&&(e[$o]=r||(r=Os.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[LS]))&&(e[LS]=r||Os.getNextMonotonicTime()):delete e[LS]}a(iw,"setTimestamps");function DS(e,t,r){r.indexOf(ni.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(ni.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(ni.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(ni.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),sW.initializeDBIs(e,t,r)}a(DS,"initializeTransaction");async function mW(e,t,r,n,s=Os.getNextMonotonicTime()){US(e,t,r,n),DS(e,t,r);let i=new oW,o=[],c=[],l=[];for(let _=0;_<n.length;_++){let u=n[_],d=u[t],f;try{f=MS(e,t,u,d,i,!0,s)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(f),l.push(d)}return PS(c,l,n,i,s,o)}a(mW,"updateRecords");async function pW(e,t,r,n,s=Os.getNextMonotonicTime()){try{US(e,t,r,n)}catch(l){throw _W(l,l.message,dW.HTTP_STATUS_CODES.BAD_REQUEST)}DS(e,t,r);let i=new aW,o=[],c=[];for(let l=0;l<n.length;l++){let _=n[l],u;lW.isEmpty(_[t])?(u=uW.v4(),_[t]=u):u=_[t];let d=MS(e,t,_,u,i,!1,s);o.push(d),c.push(u)}return PS(o,c,n,i,s)}a(pW,"upsertRecords");async function PS(e,t,r,n,s,i=[]){let o=await Promise.all(e);for(let c=0,l=o.length;c<l;c++)o[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||Os.getNextMonotonicTime(),hW(r,i),n}a(PS,"finalizeWrite");function MS(e,t,r,n,s,i=!1,o){let c=e.dbis[t],l=c.getEntry(n),_=l?.value,u=_;if(!_){if(i)return!1;_={}}if(iw(r,!u,o),Number.isInteger(r[$o])&&_[$o]>r[$o])return!1;u&&s.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 I=p([[_]]);Array.isArray(I)&&(p=I[0][ni.FUNC_VAL],r[h]=p)}if(p===A)continue;let g=Os.getIndexedValues(A);if(g){Rf&&S.prefetch(g.map(I=>({key:I,value:n})),Af);for(let I=0,v=g.length;I<v;I++)S.remove(g[I],n)}if(g=Os.getIndexedValues(p),g){Rf&&S.prefetch(g.map(I=>({key:I,value:n})),Af);for(let I=0,v=g.length;I<v;I++)S.put(g[I],n)}}let E=Object.assign({},_,r);c.put(n,E,E[$o])},"do_put");return l?d=c.ifVersion(n,l.version,f):d=c.ifNoExists(n,f),d.then(E=>E?!0:MS(e,t,r,n,s,i,o))}a(MS,"updateUpsertRecord");function SW(e,t,r){if(Os.validateEnv(e),t===void 0)throw new Error(Xl.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Xl.WRITE_ATTRIBUTES_REQUIRED):new Error(Xl.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(SW,"validateBasic");function US(e,t,r,n){if(SW(e,t,r),!Array.isArray(n))throw n===void 0?new Error(Xl.RECORDS_REQUIRED):new Error(Xl.RECORDS_MUST_BE_ARRAY)}a(US,"validateWrite");function Af(){}a(Af,"noop");ow.exports={insertRecords:fW,updateRecords:mW,upsertRecords:pW}});var bs=T((zhe,lw)=>{"use strict";var cw=Y(),aw=C(),cc=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Ns=require("joi"),Yi={schema_format:{pattern:cc,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},TW=Ns.alternatives(Ns.string().min(1).max(Yi.schema_length.maximum).pattern(cc).messages({"string.pattern.base":"{:#label} "+Yi.schema_format.message}),Ns.number(),Ns.array()).required(),gW=Ns.alternatives(Ns.string().min(1).max(Yi.schema_length.maximum).pattern(cc).messages({"string.pattern.base":"{:#label} "+Yi.schema_format.message}),Ns.number()),RW=Ns.alternatives(Ns.string().min(1).max(Yi.schema_length.maximum).pattern(cc).messages({"string.pattern.base":"{:#label} "+Yi.schema_format.message}),Ns.number()).required();function AW(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Yi.schema_length.maximum?`'${e}' maximum of 250 characters`:cc.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(AW,"checkValidTable");function OW(e,t){return cw.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(OW,"validateSchemaExists");function NW(e,t){let r=t.state.ancestors[0].schema;return cw.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(NW,"validateTableExists");function bW(e,t){return e.toLowerCase()===aw.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${aw.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(bW,"validateSchemaName");lw.exports={common_validators:Yi,schema_regex:cc,hdb_schema_table:TW,validateSchemaExists:OW,validateTableExists:NW,validateSchemaName:bW,checkValidTable:AW,hdb_database:gW,hdb_table:RW}});var rt=T((Xhe,uw)=>{"use strict";var gr=require("validate.js");gr.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||gr.validators.type.checks[t](e)?null:` must be a '${t}' value`};gr.validators.type.checks={Object:function(e){return gr.isObject(e)&&!gr.isArray(e)},Array:gr.isArray,Integer:gr.isInteger,Number:gr.isNumber,String:gr.isString,Date:gr.isDate,Boolean:function(e){return typeof e=="boolean"}};gr.validators.hasValidFileExt=function(e,t){return gr.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};uw.exports={validateObject:yW,validateObjectAsync:IW,validateBySchema:wW};function yW(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=gr(e,t,{format:"flat"});return r?new Error(r):null}a(yW,"validateObject");async function IW(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await gr.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(IW,"validateObjectAsync");function wW(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(wW,"validateBySchema")});var Of=T((eme,_w)=>{var{common_validators:ys}=bs(),eu=rt(),Zl="is required",Nt={database:{presence:!1,format:ys.schema_format,length:ys.schema_length},schema:{presence:!1,format:ys.schema_format,length:ys.schema_length},table:{presence:!0,format:ys.schema_format,length:ys.schema_length},attribute:{presence:!0,format:ys.schema_format,length:ys.schema_length},hash_attribute:{presence:!0,format:ys.schema_format,length:ys.schema_length}};function tu(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(tu,"makeAttributesStrings");function CW(e){return e=tu(e),Nt.table.presence=!1,Nt.attribute.presence=!1,Nt.hash_attribute.presence=!1,eu.validateObject(e,Nt)}a(CW,"schema_object");function LW(e){return e=tu(e),Nt.table.presence={message:Zl},Nt.attribute.presence=!1,Nt.hash_attribute.presence=!1,eu.validateObject(e,Nt)}a(LW,"table_object");function DW(e){return e=tu(e),Nt.table.presence={message:Zl},Nt.attribute.presence=!1,eu.validateObject(e,Nt)}a(DW,"create_table_object");function PW(e){return e=tu(e),Nt.table.presence={message:Zl},Nt.attribute.presence={message:Zl},Nt.hash_attribute.presence=!1,eu.validateObject(e,Nt)}a(PW,"attribute_object");function MW(e){return e=tu(e),Nt.table.presence={message:Zl},Nt.attribute.presence=!1,Nt.hash_attribute.presence=!1,eu.validateObject(e,Nt)}a(MW,"describe_table");function UW(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(UW,"validateTableResidence");_w.exports={schema_object:CW,create_table_object:DW,table_object:LW,attribute_object:PW,describe_table:MW,validateTableResidence:UW}});var fw=T((rme,dw)=>{"use strict";var vW=require("uuid"),vS=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||vW.v4(),this.schema_table=`${this.schema}.${this.table}`}};dw.exports=vS});var Nf=T((sme,Ew)=>{"use strict";var BW=fw(),BS=class extends BW{static{a(this,"LMDBCreateAttributeObject")}constructor(t,r,n,s,i=!0,o=!1){super(t,r,n,s),this.dup_sort=i,this.is_hash_attribute=o}};Ew.exports=BS});var mw=T((ome,hw)=>{"use strict";hw.exports=qW;var HW="inserted";function qW(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===HW?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(qW,"returnObject")});var bf=T((cme,Rw)=>{"use strict";var xW=C(),HS=ke(),GW=Vo(),{getSystemSchemaPath:FW,getSchemaPath:kW}=je(),$W=ri(),VW=Of(),YW=Nf(),KW=mw(),{handleHDBError:pw,hdb_errors:Tw}=te(),Sw=Y(),{HTTP_STATUS_CODES:WW}=Tw,qS=$W.hdb_attribute,gw=[];for(let e=0;e<qS.attributes.length;e++)gw.push(qS.attributes[e].attribute);var QW="inserted";Rw.exports=jW;async function jW(e){let t=VW.attribute_object(e);if(t)throw pw(new Error,t.message,Tw.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&Sw.checkGlobalSchemaTable(e.schema,e.table);if(r)throw pw(new Error,r,WW.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=Sw.isEmpty(e.dup_sort)||e.dup_sort=="true";let n=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(n=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(n)&&n.length>0){for(let i of n)if(i.attribute===e.attribute)throw new Error(`attribute '${i.attribute}' already exists in ${e.schema}.${e.table}`)}let s=new YW(e.schema,e.table,e.attribute,e.id);try{let i=await HS.openEnvironment(kW(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}`);HS.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await HS.openEnvironment(FW(),xW.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await GW.insertRecords(o,qS.hash_attribute,gw,[s]);return KW(QW,c,{records:[s]},l)}catch(i){throw i}}a(jW,"lmdbCreateAttribute")});var GS=T((ume,Ow)=>{var{hdb_table:zW,hdb_database:Aw}=bs(),JW=rt(),xS=require("joi"),XW={undefined:"undefined",null:"null"},ZW=a((e,t)=>{let r=Object.keys(e),n=r.length,s;for(let i=0;i<n;i++){let o=r[i];(!o||o.length===0||XW[o]!==void 0)&&(s===void 0?s=`Invalid attribute name: '${o}'`:s+=`. Invalid attribute name: '${o}'`)}return s?t.message(s):e},"custom_records_val"),eQ=xS.object({database:Aw,schema:Aw,table:zW,records:xS.array().items(xS.object().custom(ZW)).required()});Ow.exports=function(e){return JW.validateBySchema(e,eQ)}});var ru=T((fme,bw)=>{"use strict";var si=Y(),Nw=q(),dme=GS(),{getDatabases:tQ}=(Re(),re(xe)),{ClientError:Yo}=te();bw.exports=rQ;function rQ(e){if(si.isEmpty(e))throw new Yo("invalid update parameters defined.");if(si.isEmptyOrZeroLength(e.schema))throw new Yo("invalid schema specified.");if(si.isEmptyOrZeroLength(e.table))throw new Yo("invalid table specified.");if(!Array.isArray(e.records))throw new Yo("records must be an array");let t=tQ()[e.schema]?.[e.table];if(si.isEmpty(t))throw new Yo(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,n=new Set,s={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&si.isEmptyOrZeroLength(o[r]))throw Nw.error("a valid hash attribute must be provided with update record:",o),new Yo("a valid hash attribute must be provided with update record, check log for more info");if(!si.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw Nw.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Yo(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!si.isEmpty(o[r])&&o[r]!==""&&n.has(si.autoCast(o[r]))&&(o.skip=!0),n.add(si.autoCast(o[r]));for(let c in o)s[c]=1}),s[r]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(s)}}a(rQ,"insertUpdateValidate")});var nu=T((hme,yw)=>{"use strict";var nQ=C().OPERATIONS_ENUM,FS=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=nQ.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};yw.exports=FS});var au=T((Sme,Iw)=>{"use strict";var pme=nu(),yf=C(),$S=Y(),kS=q(),sQ=require("uuid"),{handleHDBError:su,hdb_errors:iQ}=te(),{HDB_ERROR_MSGS:iu,HTTP_STATUS_CODES:ou}=iQ;Iw.exports=oQ;function oQ(e,t,r){for(let s=0;s<t.length;s++)aQ(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];cQ(i,r,e.operation)}}a(oQ,"processRows");function aQ(e){if(Buffer.byteLength(String(e))>yf.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw su(new Error,iu.ATTR_NAME_LENGTH_ERR(e),ou.BAD_REQUEST,void 0,void 0,!0);if($S.isEmptyOrZeroLength(e)||$S.isEmpty(e.trim()))throw su(new Error,iu.ATTR_NAME_NULLISH_ERR,ou.BAD_REQUEST,void 0,void 0,!0)}a(aQ,"validateAttribute");function cQ(e,t,r){if(!e.hasOwnProperty(t)||$S.isEmptyOrZeroLength(e[t])){if(r===yf.OPERATIONS_ENUM.INSERT||r===yf.OPERATIONS_ENUM.UPSERT){e[t]=sQ.v4();return}throw kS.error("Update transaction aborted due to record with no hash value:",e),su(new Error,iu.RECORD_MISSING_HASH_ERR,ou.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>yf.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw kS.error(e),su(new Error,iu.HASH_VAL_LENGTH_ERR,ou.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw kS.error(e),su(new Error,iu.INVALID_FORWARD_SLASH_IN_HASH_ERR,ou.BAD_REQUEST,void 0,void 0,!0)}a(cQ,"validateHash")});var If=T((gme,Cw)=>{"use strict";var ww=Y(),lQ=C(),uQ=q(),_Q=bf(),dQ=Nf(),fQ=ii(),{SchemaEventMsg:EQ}=Zn(),hQ="already exists in";Cw.exports=mQ;async function mQ(e,t,r){if(ww.isEmptyOrZeroLength(r))return r;let n=[];ww.isEmptyOrZeroLength(t.attributes)||t.attributes.forEach(i=>{n.push(i.attribute)});let s=r.filter(i=>n.indexOf(i)<0);return s.length===0||await Promise.all(s.map(async i=>{await pQ(e,t.schema,t.name,i)})),s}a(mQ,"lmdbCheckForNewAttributes");async function pQ(e,t,r,n){let s=new dQ(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await SQ(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(hQ))uQ.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(pQ,"createNewAttribute");async function SQ(e){let t;return t=await _Q(e),fQ.signalSchemaChange(new EQ(process.pid,lQ.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(SQ,"createAttribute")});var lc=T((Ame,Lw)=>{"use strict";var VS=class{static{a(this,"LMDBTransactionObject")}constructor(t,r,n,s,i=void 0){this.operation=t,this.user_name=r,this.timestamp=n,this.hash_values=s,this.origin=i}};Lw.exports=VS});var Pw=T((Nme,Dw)=>{"use strict";var TQ=lc(),gQ=C().OPERATIONS_ENUM,YS=class extends TQ{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(gQ.INSERT,r,n,s,i),this.records=t}};Dw.exports=YS});var Uw=T((yme,Mw)=>{"use strict";var RQ=lc(),AQ=C().OPERATIONS_ENUM,KS=class extends RQ{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(AQ.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};Mw.exports=KS});var Bw=T((wme,vw)=>{"use strict";var OQ=lc(),NQ=C().OPERATIONS_ENUM,WS=class extends OQ{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(NQ.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};vw.exports=WS});var qw=T((Lme,Hw)=>{"use strict";var bQ=lc(),yQ=C().OPERATIONS_ENUM,QS=class extends bQ{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(yQ.DELETE,n,s,t,i),this.original_records=r}};Hw.exports=QS});var cu=T((Mme,kw)=>{"use strict";var Pme=require("path"),xw=ke(),IQ=Pw(),wQ=Uw(),CQ=Bw(),LQ=qw(),uc=ht(),Gw=Y(),{CONFIG_PARAMS:DQ}=C(),Fw=J();Fw.initSync();var wf=C().OPERATIONS_ENUM,{getTransactionAuditStorePath:PQ}=je();kw.exports=MQ;async function MQ(e,t){if(Fw.get(DQ.LOGGING_AUDITLOG)===!1)return;let r=PQ(e.schema,e.table),n=await xw.openEnvironment(r,e.table,!0),s=UQ(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){xw.initializeDBIs(n,uc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,uc.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[uc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[uc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),Gw.isEmpty(s.user_name)||n.dbis[uc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[uc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(MQ,"writeTransaction");function UQ(e,t){let r=Gw.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===wf.INSERT)return new IQ(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===wf.UPDATE)return new wQ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===wf.UPSERT)return new CQ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===wf.DELETE)return new LQ(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(UQ,"createTransactionObject")});var jS=T((Bme,$w)=>{"use strict";var vQ=ru(),vme=nu(),lu=C(),BQ=au(),HQ=Vo().insertRecords,qQ=ke(),xQ=q(),GQ=If(),{getSchemaPath:FQ}=je(),kQ=cu();$w.exports=$Q;async function $Q(e){try{let{schema_table:t,attributes:r}=vQ(e);BQ(e,r,t.hash_attribute),e.schema!==lu.SYSTEM_SCHEMA_NAME&&(r.includes(lu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(lu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(lu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(lu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await GQ(e.hdb_auth_header,t,r),s=FQ(e.schema,e.table),i=await qQ.openEnvironment(s,e.table),o=await HQ(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await kQ(e,o)}catch(c){xQ.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:n,txn_time:o.txn_time}}catch(t){throw t}}a($Q,"lmdbCreateRecords")});var Kw=T((qme,Yw)=>{"use strict";var Vw=C(),VQ=jS(),YQ=nu(),KQ=require("fs-extra"),{getSchemaPath:WQ}=je();Yw.exports=QQ;async function QQ(e){let t=[{name:e.schema,createddate:Date.now()}],r=new YQ(Vw.SYSTEM_SCHEMA_NAME,Vw.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await VQ(r),await KQ.mkdirp(WQ(e.schema))}a(QQ,"lmdbCreateSchema")});var Qw=T((Gme,Ww)=>{"use strict";var zS=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.deleted=t,this.skipped=r,this.txn_time=n,this.original_records=s}};Ww.exports=zS});var Xw=T((Yme,Jw)=>{"use strict";var jw=ke(),JS=pr(),XS=Qr().LMDB_ERRORS_ENUM,jQ=ht(),zw=q(),kme=Y(),zQ=require("lmdb"),JQ=Qw(),XQ=C(),{OVERFLOW_MARKER:$me,MAX_SEARCH_KEY_LENGTH:Vme}=jQ,ZQ=XQ.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function ej(e,t,r,n){if(JS.validateEnv(e),t===void 0)throw new Error(XS.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(XS.IDS_REQUIRED):new Error(XS.IDS_MUST_BE_ITERABLE);try{let s=jw.listDBIs(e);jw.initializeDBIs(e,t,s);let i=new JQ,o,c=[],l=[];for(let f=0,E=r.length;f<E;f++)try{o=r[f];let h=e.dbis[t].get(o);if(!h||n&&h[ZQ]>n){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,zQ.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<s.length;S++){let A=s[S];if(!h.hasOwnProperty(A)||A===t)continue;let g=e.dbis[A],I=h[A];if(I!=null)try{let v=JS.getIndexedValues(I);if(v)for(let F=0,G=v.length;F<G;F++)g.remove(v[F],o)}catch{zw.warn(`cannot delete from attribute: ${A}, ${I}:${o}`)}}});c.push(p),l.push(o),i.original_records.push(h)}catch(h){zw.warn(h),i.skipped.push(o)}let _=[],u=await Promise.all(c);for(let f=0,E=u.length;f<E;f++)u[f]===!0?i.deleted.push(l[f]):(i.skipped.push(l[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=JS.getNextMonotonicTime(),i}catch(s){throw s}}a(ej,"deleteRecords");Jw.exports={deleteRecords:ej}});var uu=T((Wme,eC)=>{"use strict";var _c=Y(),tj=Xw(),rj=ke(),{getSchemaPath:nj}=je(),sj=cu(),ij=q();eC.exports=oj;async function oj(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(_c.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(_c.isEmptyOrZeroLength(e.hash_values)&&!_c.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];_c.isEmpty(l)||e.hash_values.push(l)}}if(_c.isEmptyOrZeroLength(e.hash_values))return Zw([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(_c.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[n]:e.hash_values[c]}}let s=nj(e.schema,e.table),i=await rj.openEnvironment(s,e.table),o=await tj.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await sj(e,o)}catch(c){ij.error(`unable to write transaction due to ${c.message}`)}return Zw(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(oj,"lmdbDeleteRecords");function Zw(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(Zw,"createDeleteResponse")});var eT=T((zme,tC)=>{"use strict";var aj=C(),jme=pr();function ZS(e,t){let r=Object.create(null);if(t.length===1&&aj.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let n=0;n<t.length;n++){let s=t[n],i=e[s];r[s]=i===void 0?null:i}return r}a(ZS,"parseRow");function cj(e,t,r,n){let s=ZS(r,e);n.push(s)}a(cj,"searchAll");function lj(e,t,r,n){let s=ZS(r,e);n[t]=s}a(lj,"searchAllToMap");function uj(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(uj,"iterateDBI");function Ko(e,t,r,n,s){let i=Object.create(null);i[s]=e;let o;n===s?o=e:(o=t,n!==void 0&&(i[n]=o)),r[0].push(o),r[1].push(i)}a(Ko,"pushResults");function _j(e,t,r,n,s,i){t.toString().endsWith(e)&&Ko(t,r,n,s,i)}a(_j,"endsWith");function dj(e,t,r,n,s,i){t.toString().includes(e)&&Ko(t,r,n,s,i)}a(dj,"contains");function fj(e,t,r,n,s,i){t>e&&Ko(t,r,n,s,i)}a(fj,"greaterThanCompare");function Ej(e,t,r,n,s,i){t>=e&&Ko(t,r,n,s,i)}a(Ej,"greaterThanEqualCompare");function hj(e,t,r,n,s,i){t<e&&Ko(t,r,n,s,i)}a(hj,"lessThanCompare");function mj(e,t,r,n,s,i){t<=e&&Ko(t,r,n,s,i)}a(mj,"lessThanEqualCompare");tC.exports={parseRow:ZS,searchAll:cj,searchAllToMap:lj,iterateDBI:uj,endsWith:_j,contains:dj,greaterThanCompare:fj,greaterThanEqualCompare:Ej,lessThanCompare:hj,lessThanEqualCompare:mj,pushResults:Ko}});var dc=T((tpe,cC)=>{"use strict";var Ki=ke(),Xme=q(),Zr=pr(),Cf=ht(),mt=Qr().LMDB_ERRORS_ENUM,Zme=Y(),pj=C(),Lf=eT(),{parseRow:Sj}=Lf,epe=require("lmdb"),{OVERFLOW_MARKER:rC,MAX_SEARCH_KEY_LENGTH:Tj}=Cf;function nC(e,t,r,n=!1,s=void 0,i=void 0){return Wo(e,t,r,(o,c)=>c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}))}a(nC,"iterateFullIndex");function _u(e,t,r,n,s,i=!1,o=void 0,c=void 0,l=!1,_=!1){return Wo(e,t,r,(u,d,f,E)=>{let g={transaction:u,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!l:!_,exclusiveStart:i===!0?_:l};return E===r?(g.values=!1,d.getRange(g).map(I=>({value:I}))):d.getRange(g)})}a(_u,"iterateRangeBetween");function Wo(e,t,r,n){let s=e.database||e,i=Ki.openDBI(s,r);i[Cf.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Ki.openDBI(s,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=n(o,i,s,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(Wo,"setupTransaction");function sC(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(rC)){if(!s)if(r)s=Ki.openDBI(e,r);else{let l=Ki.listDBIs(e);for(let _=0,u=l.length;_<u&&(s=Ki.openDBI(e,l[_]),!s[Cf.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(sC,"getOverflowCheck");function gj(e,t,r,n=!1,s=void 0,i=void 0){if(Zr.validateEnv(e),t===void 0)throw new Error(mt.HASH_ATTRIBUTE_REQUIRED);return Wo(e,t,t,(o,c,l)=>(Df(r),r=du(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(_=>Sj(_.value,r))))}a(gj,"searchAll");function Rj(e,t,r,n=!1,s=void 0,i=void 0){if(Zr.validateEnv(e),t===void 0)throw new Error(mt.HASH_ATTRIBUTE_REQUIRED);Df(r),r=du(e.database||e,r);let o=new Map;for(let{key:c,value:l}of nC(e,t,t,n,s,i))o.set(c,Lf.parseRow(l,r));return o}a(Rj,"searchAllToMap");function Aj(e,t,r=!1,n=void 0,s=void 0){if(Zr.validateEnv(e),t===void 0)throw new Error(mt.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=nC(e,void 0,t,r,n,s),c=o.transaction,l=sC(c.database,c,void 0,t);for(let{key:_,value:u}of o){let d=l(_,u);i[d]===void 0&&(i[d]=[]),i[d].push(u)}return i}a(Aj,"iterateDBI");function Oj(e,t){if(Zr.validateEnv(e),t===void 0)throw new Error(mt.HASH_ATTRIBUTE_REQUIRED);return Ki.statDBI(e,t).entryCount}a(Oj,"countAll");function Nj(e,t,r,n,s=!1,i=void 0,o=void 0){return Wi(e,r,n),Wo(e,t,r,(c,l,_,u)=>(n=Zr.convertKeyValueToWrite(n),u===r?l.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:l.getValues(n,{transaction:c,reverse:s,limit:i,offset:o}).map(d=>({key:n,value:d}))))}a(Nj,"equals");function bj(e,t,r){return Wi(e,t,r),Ki.openDBI(e,t).getValuesCount(r)}a(bj,"count");function yj(e,t,r,n,s=!1,i=void 0,o=void 0){return Wi(e,r,n),Wo(e,null,r,(c,l)=>{n=Zr.convertKeyValueToWrite(n);let _=!0;typeof n=="number"&&(_=!1);let u;if(s===!0){let d;for(let f of l.getKeys({transaction:c,start:n}))if(!f.startsWith(n)){d=f;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),u=l.getRange({transaction:c,start:d,end:void 0,reverse:s,limit:i,offset:o}).map(f=>{let{key:E}=f;if(E!==d){if(E.toString().startsWith(n))return f;if(_===!0)return u.DONE}}),u.filter(f=>f)}else return u=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(n))return d;if(_===!0)return u.DONE}),_?u:u.filter(d=>d)})}a(yj,"startsWith");function Ij(e,t,r,n,s=!1,i=void 0,o=void 0){return iC(e,t,r,n,s,i,o,!0)}a(Ij,"endsWith");function iC(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return Wi(e,r,n),Wo(e,null,r,(l,_,u,d)=>{let f=sC(u,l,d,r);return o=Number.isInteger(o)?o:0,_.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(E=>{let h=E.toString();return h.endsWith(rC)?_.getValues(E,{transaction:l}).map(p=>{let S=f(E,p);if(c?S.endsWith(n):S.includes(n))return{key:S,value:p}}).filter(p=>p):(c?h.endsWith(n):h.includes(n))?_[Cf.DBI_DEFINITION_NAME].is_hash_attribute?{key:E,value:E}:_.getValues(E,{transaction:l}).map(p=>({key:E,value:p})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(iC,"contains");function wj(e,t,r,n,s=!1,i=void 0,o=void 0){Wi(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),_u(e,t,r,n,l,s,i,o,!0,!1)}a(wj,"greaterThan");function Cj(e,t,r,n,s=!1,i=void 0,o=void 0){Wi(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),_u(e,t,r,n,l,s,i,o,!1,!1)}a(Cj,"greaterThanEqual");function Lj(e,t,r,n,s=!1,i=void 0,o=void 0){Wi(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),_u(e,t,r,l,n,s,i,o,!1,!0)}a(Lj,"lessThan");function Dj(e,t,r,n,s=!1,i=void 0,o=void 0){Wi(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),_u(e,t,r,l,n,s,i,o,!1,!1)}a(Dj,"lessThanEqual");function Pj(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(Zr.validateEnv(e),r===void 0)throw new Error(mt.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(mt.START_VALUE_REQUIRED);if(s===void 0)throw new Error(mt.END_VALUE_REQUIRED);if(n=Zr.convertKeyValueToWrite(n),s=Zr.convertKeyValueToWrite(s),n>s)throw new Error(mt.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return _u(e,t,r,n,s,i,o,c)}a(Pj,"between");function Mj(e,t,r,n){Zr.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(mt.HASH_ATTRIBUTE_REQUIRED);if(Df(r),r=du(s,r),n===void 0)throw new Error(mt.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=Lf.parseRow(c,r)),o}a(Mj,"searchByHash");function Uj(e,t,r){Zr.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(mt.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(mt.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(Uj,"checkHashExists");function vj(e,t,r,n,s=[]){return aC(e,t,r,n,s),oC(e,t,r,n,s).map(i=>i[1])}a(vj,"batchSearchByHash");function Bj(e,t,r,n,s=[]){aC(e,t,r,n,s);let i=new Map;for(let[o,c]of oC(e,t,r,n,s))i.set(o,c);return i}a(Bj,"batchSearchByHashToMap");function oC(e,t,r,n,s=[]){return Wo(e,t,t,(i,o,c)=>{r=du(c,r);let l=r.length<3;return n.map(_=>{let u=c.dbis[t].get(_,{transaction:i,lazy:l});if(u)return[_,Lf.parseRow(u,r)];s.push(_)}).filter(_=>_)})}a(oC,"batchHashSearch");function aC(e,t,r,n,s){if(Zr.validateEnv(e),t===void 0)throw new Error(mt.HASH_ATTRIBUTE_REQUIRED);if(Df(r),n==null)throw new Error(mt.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(mt.IDS_MUST_BE_ITERABLE)}a(aC,"initializeBatchSearchByHash");function Df(e){if(!Array.isArray(e))throw e===void 0?new Error(mt.FETCH_ATTRIBUTES_REQUIRED):new Error(mt.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Df,"validateFetchAttributes");function Wi(e,t,r){if(Zr.validateEnv(e),t===void 0)throw new Error(mt.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(mt.SEARCH_VALUE_REQUIRED);if(r?.length>Tj)throw new Error(mt.SEARCH_VALUE_TOO_LARGE)}a(Wi,"validateComparisonFunctions");function du(e,t){return t.length===1&&pj.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Ki.listDBIs(e)),t}a(du,"setGetWholeRowAttributes");cC.exports={searchAll:gj,searchAllToMap:Rj,count:bj,countAll:Oj,equals:Nj,startsWith:yj,endsWith:Ij,contains:iC,searchByHash:Mj,setGetWholeRowAttributes:du,batchSearchByHash:vj,batchSearchByHashToMap:Bj,checkHashExists:Uj,iterateDBI:Aj,greaterThan:wj,greaterThanEqual:Cj,lessThan:Lj,lessThanEqual:Dj,between:Pj}});var fc=T((npe,fC)=>{var lC=require("lodash"),uC=rt(),he=require("joi"),Hj=Y(),{hdb_schema_table:fu,checkValidTable:_C,hdb_table:dC,hdb_database:Pf}=bs(),{handleHDBError:qj,hdb_errors:xj}=te(),{getDatabases:Gj}=(Re(),re(xe)),{HTTP_STATUS_CODES:Fj}=xj,kj=he.object({database:Pf,schema:Pf,table:dC,search_attribute:fu,search_value:he.any().required(),get_attributes:he.array().min(1).items(he.alternatives(fu,he.object())).optional(),desc:he.bool(),limit:he.number().integer().min(1),offset:he.number().integer().min(0)}),$j=he.object({database:Pf,schema:Pf,table:dC,operator:he.string().valid("and","or").default("and").lowercase(),offset:he.number().integer().min(0),limit:he.number().integer().min(1),get_attributes:he.array().min(1).items(he.alternatives(fu,he.object())).optional(),sort:he.object({attribute:he.alternatives(fu,he.array().min(1)),descending:he.bool().optional()}).optional(),conditions:he.array().min(1).items(he.alternatives(he.object({operator:he.string().valid("and","or").default("and").lowercase(),conditions:he.array()}),he.object({search_attribute:he.alternatives(fu,he.array().min(1)),search_type:he.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:he.when("search_type",{switch:[{is:"equals",then:he.any()},{is:"between",then:he.array().items(he.alternatives([he.string(),he.number()])).length(2)}],otherwise:he.alternatives(he.string(),he.number())}).required()}))).required()});fC.exports=function(e,t){let r=null;switch(t){case"value":r=uC.validateBySchema(e,kj);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(_C("database",e.schema)),i(_C("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"),s&&(r=new Error(s.trim()));break;case"conditions":r=uC.validateBySchema(e,$j);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=Hj.checkGlobalSchemaTable(e.schema,e.table);if(s)return qj(new Error,s,Fj.NOT_FOUND);let o=Gj()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let l=a(u=>{for(let d=0,f=u.conditions.length;d<f;d++){let E=u.conditions[d];E.conditions?l(E):c.push(E.search_attribute)}},"addConditions");t==="conditions"&&l(e);let _=lC.filter(c,u=>u!=="*"&&u.attribute!=="*"&&!Array.isArray(u)&&!lC.some(o,d=>d===u||d.attribute===u||d.attribute===u.attribute));if(_&&_.length>0){let u=_.join(", ");return u=u.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${u}'`)}}return r}});var tT=T((ipe,EC)=>{"use strict";var Vj=ke(),Yj=fc(),{getSchemaPath:Kj}=je();EC.exports=Wj;function Wj(e){let t=Yj(e,"hashes");if(t)throw t;let r=Kj(e.schema,e.table);return Vj.openEnvironment(r,e.table)}a(Wj,"initialize")});var rT=T((ape,hC)=>{"use strict";var Qj=dc(),jj=tT();hC.exports=zj;async function zj(e){let t=await jj(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return Qj.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(zj,"lmdbGetDataByHash")});var Ec=T((lpe,mC)=>{"use strict";var nT=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};mC.exports=nT});var SC=T((dpe,pC)=>{"use strict";var _pe=Ec(),Jj=dc(),Xj=tT();pC.exports=Zj;async function Zj(e){let t=await Xj(e),r=global.hdb_schema[e.schema][e.table];return Jj.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(Zj,"lmdbSearchByHash")});var es=T((Epe,TC)=>{"use strict";var sT=class{static{a(this,"SearchObject")}constructor(t,r,n,s,i,o,c,l=!1,_=void 0,u=void 0){this.schema=t,this.table=r,this.search_attribute=n,this.search_value=s,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=l,this.limit=_,this.offset=u}};TC.exports=sT});var Mf=T((mpe,bC)=>{"use strict";var sr=dc(),ez=ke(),tz=Y(),me=ht(),Qo=C(),rz=ri(),gC=Qr().LMDB_ERRORS_ENUM,{getSchemaPath:nz}=je(),oi=Qo.SEARCH_WILDCARDS;async function sz(e,t,r){let n;e.schema===Qo.SYSTEM_SCHEMA_NAME?n=rz[e.table]:n=global.hdb_schema[e.schema][e.table];let s=NC(e,n.hash_attribute,r,t);return AC(e,s,n.hash_attribute,r)}a(sz,"prepSearch");async function AC(e,t,r,n){let s=nz(e.schema,e.table),i=await ez.openEnvironment(s,e.table),o=OC(i,e,t,r),c=o.transaction||i;if([me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,me.SEARCH_TYPES.SEARCH_ALL,me.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(iz(e,r)===!1){let u=e.search_attribute;if(u===r)return n?RC(o,()=>!0):o.map(f=>({[r]:f.key}));let d=a(f=>({[r]:f.value,[u]:f.key}),"toObject");return n?RC(o,d):o.map(d)}let _=e.search_attribute===r?o.map(u=>u.key):o.map(u=>u.value);return n===!0?sr.batchSearchByHashToMap(c,r,e.get_attributes,_):sr.batchSearchByHash(c,r,e.get_attributes,_)}a(AC,"executeSearch");function OC(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:o,limit:c,offset:l}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,l=Number.isInteger(l)?l:void 0,r){case me.SEARCH_TYPES.EQUALS:s=sr.equals(e,i,t.search_attribute,t.search_value,o,c,l);break;case me.SEARCH_TYPES.CONTAINS:s=sr.contains(e,i,t.search_attribute,t.search_value,o,c,l);break;case me.SEARCH_TYPES.ENDS_WITH:case me.SEARCH_TYPES._ENDS_WITH:s=sr.endsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case me.SEARCH_TYPES.STARTS_WITH:case me.SEARCH_TYPES._STARTS_WITH:s=sr.startsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return sr.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return sr.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case me.SEARCH_TYPES.SEARCH_ALL:return sr.searchAll(e,n,t.get_attributes,o,c,l);case me.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return sr.searchAllToMap(e,n,t.get_attributes,o,c,l);case me.SEARCH_TYPES.BETWEEN:s=sr.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,l);break;case me.SEARCH_TYPES.GREATER_THAN:case me.SEARCH_TYPES._GREATER_THAN:s=sr.greaterThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case me.SEARCH_TYPES.GREATER_THAN_EQUAL:case me.SEARCH_TYPES._GREATER_THAN_EQUAL:s=sr.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;case me.SEARCH_TYPES.LESS_THAN:case me.SEARCH_TYPES._LESS_THAN:s=sr.lessThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case me.SEARCH_TYPES.LESS_THAN_EQUAL:case me.SEARCH_TYPES._LESS_THAN_EQUAL:s=sr.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;default:return Object.create(null)}return s}a(OC,"searchByType");function RC(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(RC,"createMapFromIterable");function iz(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 n=!1;for(let s=0;s<e.get_attributes.length;s++)if(r.indexOf(e.get_attributes[s])<0){n=!0;break}return n}a(iz,"checkToFetchMore");function NC(e,t,r,n){if(tz.isEmpty(n)){let s=e.search_value;typeof s=="object"?s=JSON.stringify(s):s=s.toString();let i=s.charAt(0),o=s.charAt(s.length-1),c=!1;if(e.search_attribute===t&&(c=!0),oi.indexOf(s)>-1)return r===!0?me.SEARCH_TYPES.SEARCH_ALL_TO_MAP:me.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(oi[0])<0&&s.indexOf(oi[1])<0)return c===!0?r===!0?me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:me.SEARCH_TYPES.EQUALS;if(oi.indexOf(i)>=0&&oi.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),me.SEARCH_TYPES.CONTAINS;if(oi.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),me.SEARCH_TYPES.ENDS_WITH;if(oi.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),me.SEARCH_TYPES.STARTS_WITH;if(s.includes(oi[0])||s.includes(oi[1]))return me.SEARCH_TYPES.EQUALS;throw new Error(gC.UNKNOWN_SEARCH_TYPE)}else switch(n){case Qo.VALUE_SEARCH_COMPARATORS.BETWEEN:return me.SEARCH_TYPES.BETWEEN;case Qo.VALUE_SEARCH_COMPARATORS.GREATER:return me.SEARCH_TYPES.GREATER_THAN;case Qo.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return me.SEARCH_TYPES.GREATER_THAN_EQUAL;case Qo.VALUE_SEARCH_COMPARATORS.LESS:return me.SEARCH_TYPES.LESS_THAN;case Qo.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return me.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(gC.UNKNOWN_SEARCH_TYPE)}}a(NC,"createSearchTypeFromSearchObject");bC.exports={executeSearch:AC,createSearchTypeFromSearchObject:NC,prepSearch:sz,searchByType:OC}});var IC=T((Tpe,yC)=>{"use strict";var Spe=es(),oz=fc(),az=Y(),cz=C(),lz=Mf();yC.exports=uz;function uz(e,t){if(!az.isEmpty(t)&&cz.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=oz(e,"value");if(n)throw n;return lz.prepSearch(e,t,!0)}a(uz,"lmdbGetDataByValue")});var Eu=T((Ape,wC)=>{"use strict";var Rpe=es(),_z=fc(),dz=Y(),fz=C(),Ez=Mf();wC.exports=hz;async function hz(e,t){if(!dz.isEmpty(t)&&fz.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=_z(e,"value");if(n)throw n;return Ez.prepSearch(e,t,!1)}a(hz,"lmdbSearchByValue")});var LC=T((bpe,CC)=>{"use strict";var Npe=ht(),iT=class{static{a(this,"SearchByConditionsObject")}constructor(t,r,n,s,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=n,this.limit=i,this.offset=o,this.conditions=s,this.operator=c}},oT=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},aT=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};CC.exports={SearchByConditionsObject:iT,SearchCondition:oT,SortAttribute:aT}});var vC=T((Cpe,UC)=>{"use strict";var Ipe=LC().SearchByConditionsObject,mz=es(),pz=fc(),cT=dc(),Uf=ht(),{Resource:wpe}=(zn(),re(aS)),MC=Mf(),Sz=eT(),Tz=require("lodash"),{getSchemaPath:gz}=je(),DC=ke(),{handleHDBError:Rz,hdb_errors:Az}=te(),{HTTP_STATUS_CODES:Oz}=Az,Nz=1e8;UC.exports=bz;async function bz(e){let t=pz(e,"conditions");if(t)throw Rz(t,t.message,Oz.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=gz(e.schema,e.table),n=await DC.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)DC.openDBI(n,_.search_attribute);let i=Tz.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let u=_.search_type;u===Uf.SEARCH_TYPES.EQUALS?_.estimated_count=cT.count(n,_.search_attribute,_.search_value):u===Uf.SEARCH_TYPES.CONTAINS||u===Uf.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=Nz}return _.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await PC(o,e,i[0],s.hash_attribute),l;if(!e.operator||e.operator.toLowerCase()==="and"){let _=n.dbis[s.hash_attribute],u=i.slice(1).map(MC.filterByType),d=u.length,f=cT.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(E=>_.get(E,{transaction:o,lazy:!0})),d>0&&(l=l.filter(E=>{for(let h=0;h<d;h++)if(!u[h](E))return!1;return!0})),(e.offset||e.limit!==void 0)&&(l=l.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),l=l.map(E=>Sz.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await PC(o,e,f,s.hash_attribute);c=c.concat(E)}let _=new Set,u=e.offset||0;c=c.filter(d=>_.has(d)?!1:(_.add(d),!0)).slice(u,e.limit&&e.limit+u),l=cT.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(bz,"lmdbSearchByConditions");async function PC(e,t,r,n){let s=new mz(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===Uf.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,MC.searchByType(e,s,i,n).map(o=>o.value)}a(PC,"executeConditionSearch")});var hu=T((Dpe,BC)=>{"use strict";var yz=C().OPERATIONS_ENUM,lT=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=yz.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};BC.exports=lT});var uT=T((Mpe,VC)=>{"use strict";var GC=es(),FC=hu(),kC=Eu(),$C=uu(),Rr=C(),HC=Y(),qC=ke(),{getTransactionAuditStorePath:Iz,getSchemaPath:wz}=je(),xC=q();VC.exports=Cz;async function Cz(e){try{if(HC.isEmpty(global.hdb_schema[e.schema])||HC.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await Lz(e),await Dz(e);let t=wz(e.schema,e.table);try{await qC.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")xC.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=Iz(e.schema,e.table);await qC.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")xC.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(Cz,"lmdbDropTable");async function Lz(e){let t=new GC(Rr.SYSTEM_SCHEMA_NAME,Rr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Rr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Rr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await kC(t)),n=[];for(let i=0;i<r.length;i++){let o=r[i];n.push(o.id)}if(n.length===0)return;let s=new FC(Rr.SYSTEM_SCHEMA_NAME,Rr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await $C(s)}a(Lz,"deleteAttributesFromSystem");async function Dz(e){let t=new GC(Rr.SYSTEM_SCHEMA_NAME,Rr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Rr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Rr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Rr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Rr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await kC(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&&(n=o)}if(!n)throw new Error(`${e.schema}.${e.table} was not found`);let s=new FC(Rr.SYSTEM_SCHEMA_NAME,Rr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await $C(s)}catch(i){throw i}}a(Dz,"dropTableFromSystem")});var KC=T((vpe,YC)=>{"use strict";var Pz=require("fs-extra"),Mz=es(),Uz=Ec(),vz=hu(),Bz=uT(),Hz=uu(),qz=rT(),xz=Eu(),ai=C(),{getSchemaPath:Gz}=je(),{handleHDBError:Fz,hdb_errors:kz}=te(),{HDB_ERROR_MSGS:$z,HTTP_STATUS_CODES:Vz}=kz;YC.exports=Yz;async function Yz(e){let t;try{t=await Kz(e.schema);let r=new Mz(ai.SYSTEM_SCHEMA_NAME,ai.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,ai.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[ai.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await xz(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await Bz(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new vz(ai.SYSTEM_SCHEMA_NAME,ai.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await Hz(s);let i=Gz(t);await Pz.remove(i)}catch(r){throw r}}a(Yz,"lmdbDropSchema");async function Kz(e){let t=new Uz(ai.SYSTEM_SCHEMA_NAME,ai.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[ai.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await qz(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw Fz(new Error,$z.SCHEMA_NOT_FOUND(e),Vz.NOT_FOUND,void 0,void 0,!0);return n}a(Kz,"validateDropSchema")});var mu=T((Hpe,WC)=>{"use strict";var _T=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};WC.exports=_T});var fT=T((Gpe,QC)=>{"use strict";var Wz=require("fs-extra"),vf=ke(),{getTransactionAuditStorePath:Qz}=je(),dT=ht(),xpe=mu();QC.exports=jz;async function jz(e){let t;try{let r=Qz(e.schema,e.table);await Wz.mkdirp(r),t=await vf.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{vf.createDBI(t,dT.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),vf.createDBI(t,dT.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),vf.createDBI(t,dT.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(jz,"createTransactionsAuditEnvironment")});var XC=T((kpe,JC)=>{"use strict";var ET=C(),jC=ke(),zz=Vo(),{getSystemSchemaPath:Jz,getSchemaPath:Xz}=je(),Zz=ri(),eJ=bf(),hT=Nf(),tJ=q(),rJ=fT(),pT=Zz.hdb_table,zC=[];for(let e=0;e<pT.attributes.length;e++)zC.push(pT.attributes[e].attribute);JC.exports=nJ;async function nJ(e,t){let r=Xz(t.schema,t.table),n=new hT(t.schema,t.table,ET.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new hT(t.schema,t.table,ET.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new hT(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await jC.createEnvironment(r,t.table),e!==void 0){let o=await jC.openEnvironment(Jz(),ET.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await zz.insertRecords(o,pT.hash_attribute,zC,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await mT(n),await mT(s),await mT(i)}await rJ(t)}catch(o){throw o}}a(nJ,"lmdbCreateTable");async function mT(e){try{await eJ(e)}catch(t){tJ.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(mT,"createAttribute")});var eL=T((Vpe,ZC)=>{"use strict";var sJ=ru(),iJ=au(),oJ=If(),pu=C(),aJ=Vo().updateRecords,cJ=ke(),{getSchemaPath:lJ}=je(),uJ=cu(),_J=q();ZC.exports=dJ;async function dJ(e){try{let{schema_table:t,attributes:r}=sJ(e);iJ(e,r,t.hash_attribute),e.schema!==pu.SYSTEM_SCHEMA_NAME&&(r.includes(pu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(pu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(pu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(pu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await oJ(e.hdb_auth_header,t,r),s=lJ(e.schema,e.table),i=await cJ.openEnvironment(s,e.table),o=await aJ(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await uJ(e,o)}catch(c){_J.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:n,txn_time:o.txn_time}}catch(t){throw t}}a(dJ,"lmdbUpdateRecords")});var rL=T((Kpe,tL)=>{"use strict";var fJ=C().OPERATIONS_ENUM,ST=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=fJ.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};tL.exports=ST});var sL=T((jpe,nL)=>{"use strict";var Qpe=rL(),EJ=ru(),hJ=au(),mJ=If(),Su=C(),pJ=Vo().upsertRecords,SJ=ke(),{getSchemaPath:TJ}=je(),gJ=cu(),RJ=q(),{handleHDBError:AJ,hdb_errors:OJ}=te();nL.exports=NJ;async function NJ(e){let t;try{t=EJ(e)}catch(l){throw AJ(l,l.message,OJ.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;hJ(e,n,r.hash_attribute),e.schema!==Su.SYSTEM_SCHEMA_NAME&&(n.includes(Su.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(Su.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(Su.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(Su.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await mJ(e.hdb_auth_header,r,n),i=TJ(e.schema,e.table),o=await SJ.openEnvironment(i,e.table),c=await pJ(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await gJ(e,c)}catch(l){RJ.error(`unable to write transaction due to ${l.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:s,txn_time:c.txn_time}}a(NJ,"lmdbUpsertRecords")});var oL=T((Jpe,iL)=>{"use strict";var TT=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};iL.exports=TT});var cL=T((Zpe,aL)=>{"use strict";var gT=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,n=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=n}};aL.exports=gT});var _L=T((rSe,uL)=>{"use strict";var RT=ke(),{getTransactionAuditStorePath:bJ}=je(),tSe=oL(),Tu=ht(),yJ=Y(),lL=cL(),IJ=require("util").promisify,wJ=IJ(setTimeout),CJ=1e4,LJ=100;uL.exports=DJ;async function DJ(e){let t=bJ(e.schema,e.table),r=await RT.openEnvironment(t,e.table,!0),n=RT.listDBIs(r);RT.initializeDBIs(r,Tu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new lL;do s=await PJ(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=s.start_timestamp),s.end_timestamp!==void 0&&(i.end_timestamp=s.end_timestamp),i.transactions_deleted+=s.transactions_deleted,await wJ(LJ);while(s.transactions_deleted>0);return i}a(DJ,"deleteAuditLogsBefore");async function PJ(e,t){let r=new lL;try{let n=e.dbis[Tu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let{key:i,value:o}of n.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),s=n.remove(i);let c=o[Tu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];yJ.isEmpty(c)||(s=e.dbis[Tu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[Tu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>CJ)break}return await s,r}catch(n){throw n}}a(PJ,"deleteTransactions")});var fL=T((sSe,dL)=>{"use strict";var AT=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};dL.exports=AT});var hL=T((aSe,EL)=>{"use strict";var MJ=es(),UJ=hu(),oSe=fL(),Is=C(),vJ=Y(),OT=ke(),BJ=ri(),HJ=Eu(),qJ=uu(),{getSchemaPath:xJ}=je();EL.exports=GJ;async function GJ(e,t=!0){let r;e.schema===Is.SYSTEM_SCHEMA_NAME?r=BJ[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await kJ(e),s=xJ(e.schema,e.table),i=await OT.openEnvironment(s,e.table);return t===!0&&await FJ(e,i,r.hash_attribute),OT.dropDBI(i,e.attribute),n}a(GJ,"lmdbDropAttribute");async function FJ(e,t,r){let n=OT.openDBI(t,r),s,i=e.attribute;for(let{key:o,value:c,version:l}of n.getRange({start:!1,versions:!0})){let _={};for(let u in c)u!==i&&(_[u]=c[u]);s=t.dbis[r].put(o,_,l)}await s}a(FJ,"removeAttributeFromAllObjects");async function kJ(e){let t=new MJ(Is.SYSTEM_SCHEMA_NAME,Is.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Is.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Is.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Is.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await HJ(t)).filter(o=>o[Is.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(vJ.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[Is.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new UJ(Is.SYSTEM_SCHEMA_NAME,Is.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return qJ(i)}a(kJ,"dropAttributeFromSystem")});var RL=T((uSe,gL)=>{"use strict";var NT=ke(),hc=ht(),lSe=pr(),bT=C(),mL=Y(),{getTransactionAuditStorePath:$J}=je(),VJ=dc(),Bf=lc(),YJ=q();gL.exports=KJ;async function KJ(e){let t=$J(e.schema,e.table),r=await NT.openEnvironment(t,e.table,!0),n=NT.listDBIs(r);NT.initializeDBIs(r,hc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case bT.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return pL(r,e.search_values);case bT.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,QJ(r,e.search_values,s);case bT.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return WJ(r,e.search_values);default:return pL(r)}}a(KJ,"readAuditLog");function pL(e,t=[0,Date.now()]){mL.isEmpty(t[0])&&(t[0]=0),mL.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[hc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let s of r.getKeys({start:t[1]}))if(s!==t[1]){n=s;break}return r.getRange({start:t[0],end:n}).map(({value:s})=>Object.assign(new Bf,s))}a(pL,"searchTransactionsByTimestamp");function WJ(e,t=[]){let r=new Map;for(let n=0;n<t.length;n++){let s=t[n],i=[];for(let o of e.dbis[hc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,TL(e,i))}return Object.fromEntries(r)}a(WJ,"searchTransactionsByUsername");function QJ(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let _=t[c],u=VJ.equals(e,hc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,hc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,_);for(let{value:d}of u){let f=Number(d);n.has(f)?n.get(f).push(_.toString()):n.set(f,[_.toString()])}}let s=Array.from(n.keys()),i=TL(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],_=l.timestamp,u=n.get(_);SL(l,"records",r,u,o),SL(l,"original_records",r,u,o)}return Object.fromEntries(o)}a(QJ,"searchTransactionsByHashValues");function SL(e,t,r,n,s){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],l=c[r].toString();if(n.indexOf(l)>=0)if(s.has(l)){let _=s.get(l),u=_[_.length-1];if(u.timestamp===i)u[t]=[c];else{let d=new Bf(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new Bf(e.operation,e.user_name,i,void 0);_[t]=[c],s.set(l,[_])}}}a(SL,"loopRecords");function TL(e,t){let r=[];try{let n=e.dbis[hc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let s=0;s<t.length;s++)try{let i=n.get(t[s]);if(i){let o=Object.assign(new Bf,i);r.push(o)}}catch(i){YJ.warn(i)}return r}catch(n){throw n}}a(TL,"batchSearchTransactions")});var OL=T((ESe,AL)=>{"use strict";var{getSchemaPath:dSe}=je(),fSe=ke(),{database:jJ}=(Re(),re(xe));AL.exports={writeTransaction:zJ};async function zJ(e,t,r){return jJ({database:e,table:t}).transaction(r)}a(zJ,"writeTransaction")});var IL=T((mSe,yL)=>{"use strict";var{getSchemaPath:NL}=je(),bL=ke();yL.exports={flush:JJ,resetReadTxn:XJ};async function JJ(e,t){return(await bL.openEnvironment(NL(e,t),t.toString())).flushed}a(JJ,"flush");async function XJ(e,t){try{(await bL.openEnvironment(NL(e,t),t.toString())).resetReadTxn()}catch{}}a(XJ,"resetReadTxn")});var DL=T((SSe,LL)=>{"use strict";var{Readable:ZJ}=require("stream"),{getDatabases:e2}=(Re(),re(xe)),{readSync:t2,openSync:r2,createReadStream:wL}=require("fs"),{open:n2}=require("lmdb"),CL=ff(),s2=hf(),{AUDIT_STORE_OPTIONS:i2}=(Ho(),re(Jy)),{INTERNAL_DBIS_NAME:o2,AUDIT_STORE_NAME:a2}=ht();LL.exports=l2;var yT=32768,c2=100;async function l2(e){let t=e.database||e.schema||"data",r=e2()[t],n=new Date().toISOString(),s=e.tables||e.table&&[e.table];if(s){let _=r[s[0]];if(!_)throw new Error(`Can not find table ${s[0]}`);let u=_.dbisDB,d=n2({noSync:!0,maxDbs:s2.MAX_DBS}),f,E=d.openDB(o2,new CL(!1)),h=u.useReadTransaction(),p=0,S=a(async function(g,I){I.encoding="binary",I.encoder=void 0;let v=d.openDB(g,I),F=u.openDB(g,I);for(let{key:G,version:U,value:Q}of F.getRange({transaction:h,versions:F.useVersions}))f=v.put(G,Q,U),p++%c2===0&&(await new Promise(V=>setTimeout(V,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:g,value:I}of u.getRange({transaction:h,start:!1}))if(s.some(v=>g.startsWith?.(v+"/"))){E.put(g,I);let[,v]=g.split("/"),F=!v,G=new CL(!F,F);await S(g,G)}e.include_audit&&await S(a2,Object.assign({},i2)),await f;let A=wL(d.path);return A.headers=l(),A.on("close",()=>{h.done(),d.close()}),A}let o=r[Object.keys(r)[0]].primaryStore,c=r2(o.path);return o.transaction(()=>{let _=Buffer.alloc(yT);t2(c,_,0,yT),o.resetReadTxn();let u=o.useReadTransaction();u.renew();let d=wL(null,{fd:c,start:yT}),f=new ZJ.from(async function*(){yield _;for await(let E of d)u.openTimer&&(u.openTimer=0),yield E;u.done()}());return f.headers=l(),f});function l(){let _=new Map;return _.set("content-type","application/octet-stream"),_.set("content-disposition",`attachment; filename="${t}"`),_.set("date",n),_}}a(l2,"getBackup")});var UL=T((gSe,ML)=>{"use strict";var u2=q(),{handleHDBError:_2}=te(),d2=JI(),f2=bf(),E2=jS(),h2=Kw(),m2=uu(),p2=rT(),S2=SC(),T2=IC(),g2=Eu(),R2=vC(),A2=KC(),O2=XC(),N2=eL(),b2=sL(),y2=_L(),I2=uT(),w2=hL(),C2=RL(),L2=OL(),PL=IL(),D2=DL(),IT=class extends d2{static{a(this,"LMDBBridge")}async searchByConditions(t){return R2(t)}async getDataByHash(t){return await p2(t)}async searchByHash(t){return await S2(t)}async getDataByValue(t,r){return await T2(t,r)}async searchByValue(t){return await g2(t)}async createSchema(t){return await h2(t)}async dropSchema(t){return await A2(t)}async createTable(t,r){return await O2(t,r)}async dropTable(t){return await I2(t)}async createAttribute(t){return await f2(t)}async createRecords(t){return await E2(t)}async updateRecords(t){return await N2(t)}async upsertRecords(t){try{return await b2(t)}catch(r){throw _2(r,null,null,u2.ERR,r)}}async deleteRecords(t){return await m2(t)}async dropAttribute(t){return await w2(t)}async deleteAuditLogsBefore(t){return await y2(t)}async readAuditLog(t){return await C2(t)}writeTransaction(t,r,n){return L2.writeTransaction(t,r,n)}flush(t,r){return PL.flush(t,r)}resetReadTxn(t,r){return PL.resetReadTxn(t,r)}getBackup(t){return D2(t)}};ML.exports=IT});var $L={};Fe($L,{ResourceBridge:()=>LT});function DT({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 BL(e,t){let r=ws(e),n=DT(e,r);if(!r)throw new ts.ClientError(`Table ${e.table} not found`);let s;n&&r.attributes.length-n.length>2&&n.length<5&&(s=!0);let i={user:e.hdb_user},o;Xe(i,()=>new Promise(_=>o=_));let c=e.ids||e.hash_values,l=0;return{[Symbol.asyncIterator](){return{async next(){if(l<c.length){let _=c[l++],u=await r.get({id:_,lazy:s,select:n},i);return u=u&&nf(u),t?{value:{key:_,value:u}}:{value:u}}else return o(),{done:!0}},return(_){return o(),{value:_,done:!0}},throw(_){return o(),{done:!0}}}}}}function ws(e){let t=e.database||e.schema||M2,r=rs()[t];if(!r)throw(0,ts.handleHDBError)(new Error,P2.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function HL(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}async function*qL(e,t,r){let n;for await(let s of e.getHistory(t,r)){let i=s.type;i==="put"&&(i="upsert");let{id:o,version:c,value:l}=s;n?.timestamp===c?(n.hash_values.push(o),n.records.push(l)):(n&&(yield n),n={operation:i,user_name:s.user,timestamp:c,hash_values:[o],records:[l]})}n&&(yield n)}var xL,Hf,ts,GL,FL,ns,wT,CT,kL,P2,M2,U2,v2,vL,LT,VL=Ne(()=>{"use strict";xL=B(UL()),Hf=B(fc()),ts=B(te());Re();GL=B(ru()),FL=B(au()),ns=B(C()),wT=B(ii()),CT=B(Zn()),kL=B(Y());Fo();sf();({HDB_ERROR_MSGS:P2}=ts.hdb_errors),M2="data",U2=1e4,v2=10,LT=class extends xL.default{static{a(this,"ResourceBridge")}constructor(t){super(t),vL=this}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);for(let o of t.conditions||[])o?.attribute!==void 0&&(o.search_attribute=o.attribute),o?.comparator!==void 0&&(o.search_type=o.comparator),o?.value!==void 0&&(o.search_value=o.value);let r=(0,Hf.default)(t,"conditions");if(r)throw(0,ts.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=ws(t);if(!n)throw new ts.ClientError(`Table ${t.table} not found`);let s=t.conditions.map(i);function i(o){return o.conditions?(o.conditions=o.conditions.map(i),o):{attribute:o.search_attribute??o.attribute,comparator:o.search_type??o.comparator,value:o.search_value!==void 0?o.search_value:o.value}}return a(i,"mapCondition"),n.search({conditions:s,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:DT(t,n),sort:t.sort,allowFullScan:!0})}async createTable(t,r){let n=r.attributes,s=!!n,i=r.primary_key||r.hash_attribute;if(n)for(let o of n)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new ts.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");n=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}pt({database:r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration})}async createAttribute(t){return await ws(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=ws(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=a((o,c,l)=>(c=Object.assign({},c),delete c[n],r.primaryStore.ifVersion(o,l,()=>r.primaryStore.put(o,c,l)).then(_=>{if(!_){let{value:u,version:d}=r.primaryStore.getEntry(o);return i(o,u,d)}})),"deleteRecord");for(let{key:o,value:c,version:l}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(o,c,l),await new Promise(_=>setImmediate(_));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){ws(t).dropTable()}createSchema(t){return gu({database:t.schema,table:null}),wT.signalSchemaChange(new CT.SchemaEventMsg(process.pid,ns.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await PT(t.schema),wT.signalSchemaChange(new CT.SchemaEventMsg(process.pid,ns.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,vL.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,GL.default)(t);(0,FL.default)(t,n,r.primaryKey);let s,i=rs()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return Xe(o,async c=>{if(!i.schemaDefined){s=[];for(let u of n)i.attributes.find(f=>f.name==u)||s.push(u);s.length>0&&await i.addAttributes(s.map(u=>({name:u,indexed:!0})))}let l=[],_=[];for(let u of t.records){let d=await i.get(u[i.primaryKey],o);if(t.requires_existing&&!d||t.requires_no_existing&&d){_.push(u[i.primaryKey]);continue}d&&(d=nf(d));for(let f in u)if(Object.prototype.hasOwnProperty.call(u,f)){let E=u[f];if(typeof E=="function")try{let h=E([[d]]);Array.isArray(h)&&(E=h[0].func_val,u[f]=E)}catch(h){throw h.message+="Trying to set key "+f+" on object"+JSON.stringify(u),h}}if(d)for(let f in d)Object.prototype.hasOwnProperty.call(u,f)||(u[f]=d[f]);await i.put(u,o),l.push(u[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:l,new_attributes:s,skipped_hashes:_}})}async deleteRecords(t){let r=rs()[t.schema][t.table],n={user:t.hdb_user};return Xe(n,async s=>{let i=t.hash_values||t.records.map(l=>l[r.primaryKey]),o=[],c=[];for(let l of i)await r.delete(l,n)?o.push(l):c.push(l);return HL(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=rs()[t.schema][t.table];if(!r.createdTimeProperty)throw new ts.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let n=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:ns.VALUE_SEARCH_COMPARATORS.LESS}]}),s=!1,i=[],o=[],c=0,l=[],_=a(async()=>{let u=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:l});i.push(...u.deleted_hashes),o.push(...u.skipped_hashes),await(0,kL.async_set_timeout)(v2),l=[],s=!0},"chunkDelete");for await(let u of n)l.push(u[r.primaryKey]),c++,c%U2===0&&await _();return l.length>0&&await _(),s?HL(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,Hf.default)(t,"hashes");if(r)throw r;return BL(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of BL(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&ns.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);t.select!==void 0&&(t.get_attributes=t.select),t.attribute!==void 0&&(t.search_attribute=condition.attribute),t.value!==void 0&&(t.search_value=condition.value);let n=(0,Hf.default)(t,"value");if(n)throw n;let s=ws(t);if(!s)throw new ts.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===ns.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return s.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:DT(t,s)})}async getDataByValue(t,r){let n=new Map,s=ws(t);t.get_attributes&&!t.get_attributes.includes(s.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(s.primaryKey);for await(let i of this.searchByValue(t,r))n.set(i[s.primaryKey],i);return n}resetReadTxn(t,r){ws({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return ws(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=ws(t),n={};switch(t.search_type){case ns.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)n[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 n;case ns.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let s=t.search_values;for await(let i of qL(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return qL(r,t.search_values?.[0],t.search_values?.[1])}}};a(DT,"getSelect");a(BL,"getRecords");a(ws,"getTable");a(HL,"createDeleteResponse");a(qL,"groupRecordsInHistory")});var yn=T((ySe,YL)=>{"use strict";var{ResourceBridge:B2}=(VL(),re($L)),H2=J();H2.initSync();var qf;function q2(){return qf||(qf=new B2,qf)}a(q2,"getBridge");YL.exports=q2()});var jL=T((wSe,QL)=>{"use strict";var KL=require("lodash"),Ru=require("mathjs"),x2=require("jsonata"),WL=Y();QL.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?KL.uniqWith(e,KL.isEqual):e,searchJSON:G2,mad:Au.bind(null,Ru.mad),mean:Au.bind(null,Ru.mean),mode:Au.bind(null,Ru.mode),prod:Au.bind(null,Ru.prod),median:Au.bind(null,Ru.median)};function Au(e,t,r,n){return n===1?t==null?[]:[t]:n===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(Au,"aggregateFunction");function G2(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(WL.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),WL.isEmpty(this.__ala__.res[r])){let n=x2(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(G2,"searchJSON")});var JL=T((LSe,zL)=>{"use strict";var bt=require("moment"),MT="YYYY-MM-DDTHH:mm:ss.SSSZZ";bt.suppressDeprecationWarnings=!0;zL.exports={current_date:()=>bt().utc().format("YYYY-MM-DD"),current_time:()=>bt().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return bt(e).utc().format("YYYY");case"month":return bt(e).utc().format("MM");case"day":return bt(e).utc().format("DD");case"hour":return bt(e).utc().format("HH");case"minute":return bt(e).utc().format("mm");case"second":return bt(e).utc().format("ss");case"millisecond":return bt(e).utc().format("SSS");default:break}},date:e=>bt(e).utc().format(MT),date_format:(e,t)=>bt(e).utc().format(t),date_add:(e,t,r)=>bt(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>bt(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let n=bt(e).utc(),s=bt(t).utc();return r?n.diff(s,r,!0):n.diff(s)},now:()=>bt().utc().valueOf(),get_server_time:()=>bt().format(MT),offset_utc:(e,t)=>bt(e).utc().utcOffset(t).format(MT)}});var tD=T((DSe,eD)=>{"use strict";var F2=require("@turf/area"),k2=require("@turf/length"),$2=require("@turf/circle"),V2=require("@turf/difference"),Y2=require("@turf/distance"),K2=require("@turf/boolean-contains"),W2=require("@turf/boolean-equal"),Q2=require("@turf/boolean-disjoint"),j2=require("@turf/helpers"),XL=C(),Se=Y(),ci=q();eD.exports={geoArea:z2,geoLength:J2,geoCircle:X2,geoDifference:Z2,geoDistance:ZL,geoNear:e4,geoContains:t4,geoEqual:r4,geoCrosses:n4,geoConvert:s4};function z2(e){if(Se.isEmpty(e))return NaN;typeof e=="string"&&(e=Se.autoCastJSON(e));try{return F2.default(e)}catch(t){return ci.trace(t,e),NaN}}a(z2,"geoArea");function J2(e,t){if(Se.isEmpty(e))return NaN;typeof e=="string"&&(e=Se.autoCastJSON(e));try{return k2.default(e,{units:t||"kilometers"})}catch(r){return ci.trace(r,e),NaN}}a(J2,"geoLength");function X2(e,t,r){if(Se.isEmpty(e))return NaN;if(Se.isEmpty(t))return NaN;typeof e=="string"&&(e=Se.autoCastJSON(e));try{return $2.default(e,t,{units:r||"kilometers"})}catch(n){return ci.trace(n,e,t),NaN}}a(X2,"geoCircle");function Z2(e,t){if(Se.isEmpty(e))return NaN;if(Se.isEmpty(t))return NaN;typeof e=="string"&&(e=Se.autoCastJSON(e)),typeof t=="string"&&(t=Se.autoCastJSON(t));try{return V2(e,t)}catch(r){return ci.trace(r,e,t),NaN}}a(Z2,"geoDifference");function ZL(e,t,r){if(Se.isEmpty(e))return NaN;if(Se.isEmpty(t))return NaN;typeof e=="string"&&(e=Se.autoCastJSON(e)),typeof t=="string"&&(t=Se.autoCastJSON(t));try{return Y2.default(e,t,{units:r||"kilometers"})}catch(n){return ci.trace(n,e,t),NaN}}a(ZL,"geoDistance");function e4(e,t,r,n){if(Se.isEmpty(e)||Se.isEmpty(t))return!1;if(Se.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=Se.autoCastJSON(e)),typeof t=="string"&&(t=Se.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return ZL(e,t,n)<=r}catch(s){return ci.trace(s,e,t),!1}}a(e4,"geoNear");function t4(e,t){if(Se.isEmpty(e)||Se.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Se.autoCastJSON(e)),typeof t=="string"&&(t=Se.autoCastJSON(t));try{return K2.default(e,t)}catch(r){return ci.trace(r,e,t),!1}}a(t4,"geoContains");function r4(e,t){if(Se.isEmpty(e)||Se.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Se.autoCastJSON(e)),typeof t=="string"&&(t=Se.autoCastJSON(t));try{return W2.default(e,t)}catch(r){return ci.trace(r,e,t),!1}}a(r4,"geoEqual");function n4(e,t){if(Se.isEmpty(e)||Se.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Se.autoCastJSON(e)),typeof t=="string"&&(t=Se.autoCastJSON(t));try{return!Q2.default(e,t)}catch(r){return ci.trace(r,e,t),!1}}a(n4,"geoCrosses");function s4(e,t,r){if(Se.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(Se.isEmpty(t))throw new Error("geo_type is required");if(Se.isEmpty(XL.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(XL.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Se.autoCastJSON(e)),j2[t](e,r)}a(s4,"geoConvert")});var xf=T((MSe,rD)=>{var jo=jL(),en=JL(),Cs=tD();rD.exports=e=>{e.aggr.mad=e.aggr.MAD=jo.mad,e.aggr.mean=e.aggr.MEAN=jo.mean,e.aggr.mode=e.aggr.MODE=jo.mode,e.aggr.prod=e.aggr.PROD=jo.prod,e.aggr.median=e.aggr.MEDIAN=jo.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=jo.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=jo.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=en.current_date,e.fn.current_time=e.fn.CURRENT_TIME=en.current_time,e.fn.extract=e.fn.EXTRACT=en.extract,e.fn.date=e.fn.DATE=en.date,e.fn.date_format=e.fn.DATE_FORMAT=en.date_format,e.fn.date_add=e.fn.DATE_ADD=en.date_add,e.fn.date_sub=e.fn.DATE_SUB=en.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=en.date_diff,e.fn.now=e.fn.NOW=en.now,e.fn.offset_utc=e.fn.OFFSET_UTC=en.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=en.get_server_time,e.fn.getdate=e.fn.GETDATE=en.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=en.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Cs.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Cs.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Cs.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Cs.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Cs.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Cs.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Cs.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Cs.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Cs.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Cs.geoNear}});var oD=T((USe,iD)=>{"use strict";var Ou=require("lodash"),Ar=require("alasql");Ar.options.cache=!1;var i4=xf(),nD=require("clone"),Gf=require("recursive-iterator"),ue=q(),Le=Y(),mc=yn(),o4=C(),{hdb_errors:a4}=te(),{getDatabases:sD}=(Re(),re(xe)),c4="IS NULL",ss="There was a problem performing this search. Please check the logs and try again.";i4(Ar);var UT=class{static{a(this,"SQLSearch")}constructor(t,r){if(Le.isEmpty(t))throw ue.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),Le.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!Le.isEmptyOrZeroLength(n))return ue.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw ue.error("Error thrown from checkEmptySQL in SQLSearch class method search."),ue.error(n),new Error(ss)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw ue.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),ue.error(n),new Error(ss)}if(Object.keys(this.data).length===0)return ue.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw ue.error("Error thrown from processJoins in SQLSearch class method search."),ue.error(n),new Error(ss)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw ue.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),ue.error(n),new Error(ss)}try{return t=await this._finalSQL(),t}catch(n){throw ue.error("Error thrown from finalSQL in SQLSearch class method search."),ue.error(n),new Error(ss)}}_getColumns(){let t=new Gf(this.statement);for(let{node:r,path:n}of t)r&&r.columnid&&(this.columns[n[0]]||(this.columns[n[0]]=[]),this.columns[n[0]].push(nD(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Ou.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let n=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[n]={},this.data[n].__hash_name=sD()[r.databaseid][r.tableid].primaryKey,this.data[n].__merged_data={},this.data[n].__merged_attributes=[],this.data[n].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(Le.isEmpty(this.statement.where)){ue.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Gf(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!Le.isEmpty(r)&&r.right)if(Le.isNotEmptyAndHasValue(r.right.value)){let n=Le.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new Ar.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=Le.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new Ar.yy.LogicValue({value:i}):n instanceof Ar.yy.StringValue&&Le.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new Ar.yy.NumValue({value:i}))});if(t){ue.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Gf(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let n=new Set,s=r.left.columnid?r.left:r.right,i=this._findColumn(s);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!Le.isEmpty(o4.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(Le.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(Le.isEmptyOrZeroLength(r.left.columnid)||Le.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[o].ignore=!0,this.comparator_search_values[o].comparators=[];continue}this.comparator_search_values[o].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(Le.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let c=!1;switch(r.op){case"=":!Le.isEmpty(r.right.value)||!Le.isEmpty(r.left.value)?n.add(Le.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let l=Array.isArray(r.right)?r.right:r.left;for(let _=0;_<l.length;_++)if(l[_].value)n.add(l[_].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,...n])}}}_setAliasesForColumns(){if(Le.isEmptyOrZeroLength(this.all_table_attributes)&&Le.isEmptyOrZeroLength(this.statement.from)&&Le.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((n,s)=>{if(n.columnid==="*"){t.push(s);return}if(n.aggregatorid&&(this.has_aggregator=!0),!n.aggregatorid&&!n.funcid)if(n.as_orig=n.as?n.as:n.columnid,this.statement.joins)if(r[n.as_orig]>=0){let i=r[n.as_orig]+1;n.as=`[${n.as_orig+i}]`,r[n.as_orig]=i}else n.as=`[${n.as_orig}]`,r[n.as_orig]=0;else n.as=`[${n.as_orig}]`;!n.aggregatorid&&n.funcid&&n.args&&(n.as_orig=n.as?n.as:n.toString().replace(/'/g,'"'),n.as=`[${n.as_orig}]`),n.aggregatorid&&n.expression.columnid!=="*"&&(n.as_orig=n.as?n.as:n.expression.tableid?`${n.aggregatorid}(${n.expression.tableid}.${n.expression.columnid})`:`${n.aggregatorid}(${n.expression.columnid})`,n.as=`[${n.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&Ou.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(n=>{if(t.columnid_orig&&t.tableid_orig)return(n.table.as===t.tableid_orig||n.table.tableid===t.tableid_orig)&&n.attribute===t.columnid_orig;if(t.tableid)return(n.table.as===t.tableid||n.table.tableid===t.tableid)&&n.attribute===t.columnid;let s=t.columnid_orig?t.columnid_orig:t.columnid;return n.attribute===s});if(Le.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);Le.isEmptyOrZeroLength(n)||(r=this.all_table_attributes.filter(s=>s.attribute===n[0].columnid&&n[0].tableid&&n[0].tableid===(s.table.as?s.table.as:s.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(Le.isEmptyOrZeroLength(this.all_table_attributes)&&!Le.isEmptyOrZeroLength(this.columns.columns))return t;if(Le.isEmptyOrZeroLength(this.all_table_attributes)&&Le.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Ar.promise(r)}catch(r){throw ue.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),ue.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let n=this._findColumn(r);n&&this.fetch_attributes.push(nD(n))})}_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,n,s){let i=this.data[t].__merged_attr_map[n];this.data[t].__merged_data[r].splice(i,1,s)}async _getFetchAttributeValues(){if(Le.isEmptyOrZeroLength(Object.keys(this.columns)))return[];this._addFetchColumns(this.columns.joins);let t=null;try{t=this.statement.where?this.statement.where.toString():""}catch{throw new Error("Could not generate proper where clause")}this.columns.where&&this._addFetchColumns(this.columns.where);let r=this._isSimpleSelect();if(r?this._addFetchColumns(this.columns.columns):(!this.columns.where&&this.fetch_attributes.length===0)|t.indexOf(c4)>-1&&this.tables.forEach(s=>{let i={columnid:sD()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Ou.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return s[o]||(s[o]=[],s[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(s[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,o=this.data[i].__hash_name,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},l=!1,_=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(l=!0),!Le.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!Le.isEmptyOrZeroLength(this.exact_search_values[_].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[_].values);let u=await mc.getDataByHash(c);for(let d of c.hash_values)u.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d))}catch(u){throw ue.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),ue.error(u),new Error(ss)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[_].values).map(async u=>{let d=Object.assign({},c);d.search_value=u;let f=await mc.getDataByValue(d);for(let[E,h]of f)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,s.attribute,h[s.attribute]):(this.data[i].__merged_data[E]=[...n[i]],this._updateMergedAttribute(i,E,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,E))}))}catch(u){throw ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),ue.error(u),new Error(ss)}else if(!Le.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!Le.isEmptyOrZeroLength(this.comparator_search_values[_].comparators))try{let u=this.comparator_search_values[_].comparators;for(let d=0,f=u.length;d<f;d++){let E=u[d];c.search_attribute=E.attribute,c.search_value=E.search_value;let h=await mc.getDataByValue(c,E.operation);if(l)for(let[p]of h)this.data[i].__merged_data[p]||(this.data[i].__merged_data[p]=[...n[i]],this._setMergedHashAttribute(i,p));else for(let[p,S]of h)this.data[i].__merged_data[p]?this._updateMergedAttribute(i,p,s.attribute,S[s.attribute]):(this.data[i].__merged_data[p]=[...n[i]],this._updateMergedAttribute(i,p,s.attribute,S[s.attribute]),this._setMergedHashAttribute(i,p))}}catch(u){throw ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),ue.error(u),new Error(ss)}else try{c.search_attribute=s.attribute,c.search_value="*";let u=await mc.getDataByValue(c);if(l)for(let[d]of u)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d));else for(let[d,f]of u)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,s.attribute,f[s.attribute]):(this.data[i].__merged_data[d]=[...n[i]],this._updateMergedAttribute(i,d,s.attribute,f[s.attribute]),this._setMergedHashAttribute(i,d))}catch(u){throw ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),ue.error(u),new Error(ss)}}}_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 Ar.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(s=>{let i=s.aggregatorid?s.expression:s,o=s.aggregatorid?s.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 n=r[0];if(t.is_func=!!n.funcid,t.is_aggregator=!!n.aggregatorid,n.as)if(n.as&&!t.expression.tableid)t.expression.columnid=n.as,t.expression.columnid_orig=n.as_orig;else{let s=new Ar.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new Ar.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 s=t.is_func?new Ar.yy.FuncValue:new Ar.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(E=>{E.joinmode&&E.joinmode!=="INNER"&&(this.has_outer_join=!0),s.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={};s.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 l=this.statement.where?"WHERE "+this.statement.where:"";l=l.replace(/NOT\(NULL\)/g,"NOT NULL");let _="";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 u="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(u=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(" ")} ${l} ${_} ${u} ${d}`,h=this._convertColumnsToIndexes(E,s);f=await Ar.promise(h,t),t=null}catch(E){throw ue.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),ue.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=Ou.difference(h,[...E.keys].map(S=>S.toString()));for(let S=0,A=p.length;S<A;S++){let g=p[S];delete this.data[`${E.schema}_${E.table}`].__merged_data[g]}})}return{existing_attributes:c,joined_length:f?f.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new Gf(this.columns);for(let{node:i}of s)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)&&n.push(o)}}n=Ou.uniqBy(n,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(n)}catch(i){throw ue.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),ue.error(i),new Error(ss)}}async _getData(t){try{let r=t.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]?n[i].columns.push(s.attribute):n[i]={schema:s.table.databaseid,table:s.table.tableid,columns:[s.attribute]},n},{});for(let n in r){let s=r[n],i=this.data[n].__merged_data,o=[];for(let u in i)o.push(i[u][0]);this.data[n].__merged_attributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:o,get_attributes:s.columns},l=await mc.getDataByHash(c),_=s.columns.length;for(let u=0,d=o.length;u<d;u++){let f=o[u],E=l.get(f);for(let h=0;h<_;h++){let p=s.columns[h],S=E[p]===void 0?null:E[p];this.data[n].__merged_data[f].push(S)}}}}catch(r){throw ue.error("Error thrown from getDataByHash function in SQLSearch class method getData."),ue.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(s=>{s.as=s.as?s.as:s.table.tableid,t.push(Object.values(this.data[`${s.table.databaseid_orig}_${s.table.as?s.table.as_orig:s.table.tableid_orig}`].__merged_data)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,l=o.aggregatorid?o.as_orig:c.as_orig;return s.expression.tableid?c.columnid_orig===s.expression.columnid_orig&&c.tableid_orig===s.expression.tableid_orig:c.columnid_orig===s.expression.columnid_orig||s.expression.columnid_orig===l}).length===0&&(s.expression.columnid=s.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let n;try{let s=this._buildSQL();ue.trace(`Final SQL: ${s}`),n=await Ar.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),ue.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw ue.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),ue.error(s),new Error("There was a problem running the generated sql.")}return n}_translateUndefinedValues(t){try{let r=[];for(let n of t){let s=Object.create(null);Object.keys(n).forEach(i=>{n[i]===void 0?s[i]=null:s[i]=n[i]}),r.push(s)}return r}catch(r){return ue.error(a4.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),ue.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return r=r.replace(/NOT\(NULL\)/g,"NOT NULL"),this.statement.columns.forEach(n=>{if(n.funcid&&n.as){let s=n.toString().replace(" AS "+n.as,"");r=r.replace(n.toString(),s)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let n=t,s={};r.forEach(i=>{i.databaseid_orig?s[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:s[`${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 l=s[i],_=new RegExp(`${l}.\`${o}\``,"g"),u=`${l}.[${c}]`;n=n.replace(_,u)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=new RegExp(`\`${o}\``,"g"),_=`[${c}]`;n=n.replace(l,_)});return n}async _simpleSQLQuery(){let t=this.statement.columns.reduce((n,s)=>(s.as_orig&&s.as_orig!=s.columnid_orig?n[s.columnid_orig]=s.as_orig:n[s.columnid_orig]||(n[s.columnid_orig]=s.columnid_orig),n),{}),r=this.fetch_attributes.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]||(n[i]={}),n[i][t[s.attribute]]=null,n},{});for(let n of this.fetch_attributes){let s=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,i={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]};try{i.search_attribute=n.attribute,i.search_value="*";let o=await mc.getDataByValue(i);for(let[c,l]of o)this.data[s].__merged_data[c]||(l[n.attribute]===void 0&&(l[n.attribute]=null),this.data[s].__merged_data[c]=Object.assign({},r[s])),this.data[s].__merged_data[c][t[n.attribute]]=l[n.attribute]??null}catch(o){throw ue.error("There was an error when processing this SQL operation. Check your logs"),ue.error(o),new Error(ss)}}return Object.values(Object.values(this.data)[0].__merged_data)}};iD.exports=UT});var Or=T((BSe,aD)=>{"use strict";var l4=jI();aD.exports={searchByConditions:_4,searchByHash:d4,searchByValue:f4,search:E4};var vT=yn(),{transformReq:BT}=Y(),u4=oD();async function _4(e){return BT(e),vT.searchByConditions(e)}a(_4,"searchByConditions");async function d4(e){BT(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of vT.searchByHash(e))r&&t.push(r);return t}a(d4,"searchByHash");async function f4(e){BT(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of vT.searchByValue(e))t.push(r);return t}a(f4,"searchByValue");function E4(e,t){try{let r=new l4(e);r.validate(),new u4(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(E4,"search")});var li=T((qSe,_D)=>{"use strict";var Nu=require("crypto"),h4=J(),{CONFIG_PARAMS:m4}=C(),lD="aes-256-cbc",p4=32,S4=16,HT=64,uD=32,T4=HT+uD,cD=new Map;_D.exports={encrypt:g4,decrypt:R4,createNatsTableStreamName:A4};function g4(e){let t=Nu.randomBytes(p4),r=Nu.randomBytes(S4),n=Nu.createCipheriv(lD,Buffer.from(t),r),s=n.update(e);s=Buffer.concat([s,n.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=s.toString("hex");return i+o+c}a(g4,"encrypt");function R4(e){let t=e.substr(0,HT),r=e.substr(HT,uD),n=e.substr(T4,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Nu.createDecipheriv(lD,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(R4,"decrypt");function A4(e,t){let r=h4.get(m4.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=cD.get(r);return n||(n=Nu.createHash("md5").update(r).digest("hex"),cD.set(r,n)),n}a(A4,"createNatsTableStreamName")});var Qi=T((FSe,fD)=>{"use strict";var GSe=Or(),Ff=q(),dD=Of(),O4=li(),kf=Y(),{handleHDBError:$f,hdb_errors:N4}=te(),{HDB_ERROR_MSGS:Vf,HTTP_STATUS_CODES:qT}=N4,b4=J();b4.initSync();var{getDatabases:xT}=(Re(),re(xe));fD.exports={describeAll:y4,describeTable:Yf,describeSchema:I4};async function y4(e){try{let t=kf.isEmptyOrZeroLength(e),r,n;t||(r=e.hdb_user.role.permission,n=r.super_user||r.cluster_user);let s=xT(),i={},o={},c=[],l=e?.exact_count;for(let u in s){i[u]=!0,!t&&!n&&(o[u]=e.hdb_user.role.permission[u].describe);let d=s[u];for(let f in d)try{let E;if(t||n)E=await Yf({schema:u,table:f,exact_count:l});else if(r&&r[u].describe&&r[u].tables[f].describe){let h=r[u].tables[f].attribute_permissions;E=await Yf({schema:u,table:f,exact_count:l},h)}E&&c.push(E)}catch(E){Ff.error(E)}}let _={};for(let u in c)t||n?(_[c[u].schema]==null&&(_[c[u].schema]={}),_[c[u].schema][c[u].name]=c[u],i[c[u].schema]&&delete i[c[u].schema]):o[c[u].schema]&&(_[c[u].schema]==null&&(_[c[u].schema]={}),_[c[u].schema][c[u].name]=c[u],i[c[u].schema]&&delete i[c[u].schema]);for(let u in i)t||n?_[u]={}:o[u]&&(_[u]={});return _}catch(t){return Ff.error("Got an error in describeAll"),Ff.error(t),$f(new Error,Vf.DESCRIBE_ALL_ERR)}}a(y4,"describeAll");async function Yf(e,t){kf.transformReq(e);let{schema:r,table:n}=e;r=r?.toString(),n=n?.toString();let s=t;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(s=e.hdb_user.role.permission[r].tables[n].attribute_permissions);let i=dD.describe_table(e);if(i)throw i;let c=xT()[r];if(!c)throw $f(new Error,Vf.SCHEMA_NOT_FOUND(e.schema),qT.NOT_FOUND);let l=c[n];if(!l)throw $f(new Error,Vf.TABLE_NOT_FOUND(e.schema,e.table),qT.NOT_FOUND);function _(f){u.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 u=[];if(s){let f={};s.forEach(E=>{E.describe&&(f[E.attribute_name]=!0)}),l.attributes.forEach(E=>{f[E.name]&&_(E)})}else l.attributes?.forEach(f=>_(f));let d={schema:r,name:l.tableName,hash_attribute:l.attributes.find(f=>f.isPrimaryKey||f.is_hash_attribute)?.name,audit:l.audit,schema_defined:l.schemaDefined,attributes:u};d.clustering_stream_name=O4.createNatsTableStreamName(d.schema,d.name);try{let f=l.getRecordCount({exactCount:e.exact_count==="true"});d.record_count=f.recordCount,d.estimated_record_range=f.estimatedRange;let E=l.auditStore;if(E)for(let h of E.getKeys({reverse:!0,limit:1}))d.last_updated_record=h[0];if(!d.last_updated_record&&l.indices.__updatedtime__)for(let h of l.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))d.last_updated_record=h}catch(f){Ff.warn(`unable to stat table dbi due to ${f}`)}return d}a(Yf,"descTable");async function I4(e){kf.transformReq(e);let t=dD.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 n=e.schema.toString(),i=xT()[n];if(!i)throw $f(new Error,Vf.SCHEMA_NOT_FOUND(e.schema),qT.NOT_FOUND);let o={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),kf.isEmpty(l)||l.describe){let _=await Yf({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(I4,"describeSchema")});var In=T((YSe,SD)=>{var w4=ri(),{callbackify:hD,promisify:C4}=require("util"),{getDatabases:mD}=(Re(),re(xe));SD.exports={setSchemaDataToGlobal:ED,getTableSchema:L4,getSystemSchema:D4,setSchemaDataToGlobalAsync:C4(ED)};var pD=Qi(),$Se=hD(pD.describeAll),VSe=hD(pD.describeTable);function ED(e){global.hdb_schema=mD(),e&&e()}a(ED,"setSchemaDataToGlobal");function L4(e,t,r){let n=mD()[e];if(!n)return r(`schema ${e} does not exist`);let s=n[t];return s?r(null,{schema:e,name:t,hash_attribute:s.primaryKey}):r(`table ${e}.${t} does not exist`)}a(L4,"getTableSchema");function D4(){return w4}a(D4,"getSystemSchema")});var Nr=T((WSe,AD)=>{"use strict";var Wf=GS(),zt=Y(),P4=require("util"),Qf=yn(),M4=In(),TD=q(),{handleHDBError:zo,hdb_errors:U4}=te(),{HTTP_STATUS_CODES:Jo}=U4,v4=P4.promisify(M4.getTableSchema),B4="updated",gD="inserted",RD="upserted";AD.exports={insert:q4,update:x4,upsert:G4,validation:H4,flush:F4};async function H4(e){if(zt.isEmpty(e))throw new Error("invalid update parameters defined.");if(zt.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(zt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await v4(e.schema,e.table),r=Wf(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let n=t.hash_attribute,s=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&zt.isEmptyOrZeroLength(c[n]))throw TD.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(!zt.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw TD.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!zt.isEmpty(c[n])&&c[n]!==""&&s.has(zt.autoCast(c[n]))&&(c.skip=!0),s.add(zt.autoCast(c[n]));for(let l in c)i[l]=1}),i[n]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(i)}}a(H4,"validation");async function q4(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Wf(e);if(t)throw zo(new Error,t.message,Jo.BAD_REQUEST);zt.transformReq(e);let r=zt.checkSchemaTableExist(e.schema,e.table);if(r)throw zo(new Error,r,Jo.BAD_REQUEST);let n=await Qf.createRecords(e);return Kf(gD,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(q4,"insertData");async function x4(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Wf(e);if(t)throw zo(new Error,t.message,Jo.BAD_REQUEST);zt.transformReq(e);let r=zt.checkSchemaTableExist(e.schema,e.table);if(r)throw zo(new Error,r,Jo.BAD_REQUEST);let n=await Qf.updateRecords(e);return zt.isEmpty(n.existing_rows)?Kf(B4,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):Kf(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(x4,"updateData");async function G4(e){if(e.operation!=="upsert")throw zo(new Error,"invalid operation, must be upsert",Jo.INTERNAL_SERVER_ERROR);let t=Wf(e);if(t)throw zo(new Error,t.message,Jo.BAD_REQUEST);zt.transformReq(e);let r=zt.checkSchemaTableExist(e.schema,e.table);if(r)throw zo(new Error,r,Jo.BAD_REQUEST);let n=await Qf.upsertRecords(e);return Kf(RD,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(G4,"upsertData");function Kf(e,t,r,n,s,i){let o={message:`${e} ${t.length} of ${t.length+n.length} records`,new_attributes:s,txn_time:i};return e===gD?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===RD?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(Kf,"returnObject");function F4(e){return zt.transformReq(e),Qf.flush(e.schema,e.table)}a(F4,"flush")});var FT=T((jSe,bD)=>{var k4=rt(),GT=require("joi"),{hdb_table:$4,hdb_database:OD}=bs(),ND={schema:OD,database:OD,table:$4},V4={date:GT.date().iso().required()},Y4={timestamp:GT.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};bD.exports=function(e,t){let r=t==="timestamp"?{...ND,...Y4}:{...ND,...V4},n=GT.object(r);return k4.validateBySchema(e,n)}});var wD=T((zSe,ID)=>{var K4=rt(),kT=require("joi"),{hdb_table:W4,hdb_database:yD}=bs(),Q4=kT.object({schema:yD,database:yD,table:W4,hash_values:kT.array().required(),ids:kT.array()});ID.exports=function(e){return K4.validateBySchema(e,Q4)}});var KT=T((JSe,CD)=>{"use strict";var $T=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i){this.operation=t,this.schema=r,this.table=n,this.hash_attribute=s,this.records=i}},VT=class{static{a(this,"NoSQLSeachObject")}constructor(t,r,n,s,i,o){this.schema=t,this.table=r,this.search_attribute=n,this.hash_attribute=s,this.get_attributes=i,this.search_value=o}},YT=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};CD.exports={InsertObject:$T,NoSQLSeachObject:VT,DeleteResponseObject:YT}});var ea=T((ZSe,UD)=>{"use strict";var DD=FT(),j4=wD(),Xo=Y(),LD=require("moment"),PD=q(),{promisify:z4,callbackify:J4}=require("util"),Zo=C(),X4=In(),WT=z4(X4.getTableSchema),QT=yn(),{DeleteResponseObject:Z4}=KT(),{handleHDBError:ji,hdb_errors:e3}=te(),{HDB_ERROR_MSGS:jf,HTTP_STATUS_CODES:zi}=e3,t3="records successfully deleted",r3=J4(MD);UD.exports={delete:r3,deleteRecord:MD,deleteFilesBefore:n3,deleteAuditLogsBefore:s3};async function n3(e){let t=DD(e,"date");if(t)throw ji(t,t.message,zi.BAD_REQUEST,void 0,void 0,!0);if(Xo.transformReq(e),!LD(e.date,LD.ISO_8601).isValid())throw ji(new Error,jf.INVALID_DATE,zi.BAD_REQUEST,Zo.LOG_LEVELS.ERROR,jf.INVALID_DATE,!0);let n=Xo.checkSchemaTableExist(e.schema,e.table);if(n)throw ji(new Error,n,zi.NOT_FOUND,Zo.LOG_LEVELS.ERROR,n,!0);let s=await QT.deleteRecordsBefore(e);if(await WT(e.schema,e.table),PD.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(n3,"deleteFilesBefore");async function s3(e){let t=DD(e,"timestamp");if(t)throw ji(t,t.message,zi.BAD_REQUEST,void 0,void 0,!0);if(Xo.transformReq(e),isNaN(e.timestamp))throw ji(new Error,jf.INVALID_VALUE("Timestamp"),zi.BAD_REQUEST,Zo.LOG_LEVELS.ERROR,jf.INVALID_VALUE("Timestamp"),!0);let r=Xo.checkSchemaTableExist(e.schema,e.table);if(r)throw ji(new Error,r,zi.NOT_FOUND,Zo.LOG_LEVELS.ERROR,r,!0);let n=await QT.deleteAuditLogsBefore(e);return await WT(e.schema,e.table),PD.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(s3,"deleteAuditLogsBefore");async function MD(e){e.ids&&(e.hash_values=e.ids);let t=j4(e);if(t)throw ji(t,t.message,zi.BAD_REQUEST,void 0,void 0,!0);Xo.transformReq(e);let r=Xo.checkSchemaTableExist(e.schema,e.table);if(r)throw ji(new Error,r,zi.NOT_FOUND,Zo.LOG_LEVELS.ERROR,r,!0);try{await WT(e.schema,e.table);let n=await QT.deleteRecords(e);return Xo.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${t3}`),n}catch(n){if(n.message===Zo.SEARCH_NOT_FOUND_MESSAGE){let s=new Z4;return s.message=Zo.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(MD,"deleteRecord")});var zf=T((tTe,HD)=>{var i3=require("crypto"),vD=9;function o3(e){let t=c3(vD),r=BD(e+t);return t+r}a(o3,"createHash");function a3(e,t){let r=e?.substr(0,vD),n=r+BD(t+r);return e===n}a(a3,"validateHash");function c3(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,n="";for(let s=0;s<e;s++){let i=Math.floor(Math.random()*r);n+=t[i]}return n}a(c3,"generateSalt");function BD(e){return i3.createHash("md5").update(e).digest("hex")}a(BD,"md5");HD.exports={hash:o3,validate:a3}});var xD=T((nTe,qD)=>{var jT=rt(),ir={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 l3(e){return ir.password.presence=!0,ir.username.presence=!0,ir.role.presence=!0,ir.active.presence=!0,jT.validateObject(e,ir)}a(l3,"addUserValidation");function u3(e){return ir.password.presence=!1,ir.username.presence=!0,ir.role.presence=!1,ir.active.presence=!1,jT.validateObject(e,ir)}a(u3,"alterUserValidation");function _3(e){return ir.password.presence=!1,ir.username.presence=!0,ir.role.presence=!1,ir.active.presence=!1,jT.validateObject(e,ir)}a(_3,"dropUserValidation");qD.exports={addUserValidation:l3,alterUserValidation:u3,dropUserValidation:_3}});var Ze=T((oTe,FD)=>{"use strict";var{platform:iTe}=require("os"),d3="nats-server.zip",zT="nats-server",f3=process.platform==="win32"?`${zT}.exe`:zT,JT="HDB",E3=/^[^\s.,*>]+$/,GD="__request__",h3=a(e=>`${e}.${GD}`,"REQUEST_SUBJECT"),m3={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},p3={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},S3={HUB:"hub.pid",LEAF:"leaf.pid"},T3={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},g3={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:JT,deliver_subject:"__HDB__.WORKQUEUE"},R3={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:JT,deliver_subject:"HDB.SCHEMAQUEUE"},A3={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:JT,deliver_subject:"HDB.USERQUEUE"},O3={SUCCESS:"success",ERROR:"error"},N3={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},b3={TXN:"txn",MSGID:"msgid"},pc={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},y3={[pc.ERR]:1,[pc.WRN]:2,[pc.INF]:3,[pc.DBG]:4,[pc.TRC]:5},I3={debug:"-D",trace:"-DVV"};FD.exports={NATS_SERVER_ZIP:d3,NATS_SERVER_NAME:zT,NATS_BINARY_NAME:f3,PID_FILES:S3,NATS_CONFIG_FILES:p3,SERVER_SUFFIX:T3,WORK_QUEUE_CONSUMER_NAMES:g3,SCHEMA_QUEUE_CONSUMER_NAMES:R3,USER_QUEUE_CONSUMER_NAMES:A3,NATS_TERM_CONSTRAINTS_RX:E3,REQUEST_SUFFIX:GD,UPDATE_REMOTE_RESPONSE_STATUSES:O3,CLUSTER_STATUS_STATUSES:N3,REQUEST_SUBJECT:h3,SUBJECT_PREFIXES:b3,MSG_HEADERS:m3,LOG_LEVELS:pc,LOG_LEVEL_FLAGS:I3,LOG_LEVEL_HIERARCHY:y3}});var XT=T((cTe,kD)=>{"use strict";var w3={key:"-----BEGIN RSA PRIVATE KEY-----\rMIIEowIBAAKCAQEArBFJQRfFiJku/KwhV1Ssp7cX61vvuKmd4Rp6A9jB2QLgx8nj\r/+Xhp2hPRkISnOA8BuAxr4dMD9syGJwX4kNy9mbZ5Q0fWZCiEGBpVcU1J+k+N5K4\rSuZ2SqgxeN2IN2RLzt3GyQY4imcdHgNv7aHoXUrEwBx0MeYEw3IIDXtrYKCR2D8I\rvWBfwMUgWa24G8lpWILWA5hd9srRz9NxlAiHSjhbgT7B0xruEpHRCHSyKjvaIJVt\rWBR+amejYsAKVrD/hgrqjsA1123Y6++YqvU6vwg64xhS2kz5r3dkNKhvwbWgpZdI\rIaRvsiB77f4kLGo0vi8RFgJ1ZRjGg3RRK2w1LQIDAQABAoIBAQCEOmh78EOpnGZC\rYBjjHrvrysVD5gvLcfVUtl8Ls7gMB60re1eOIF+PoZZCHKZnDd6zPfiQtj1adg0C\rYnnsM/8VoaZS4gm0b3RLd3ubIQifWhuo40RissY2yxfxlPSH9LhZCY8ojnJG0cTL\resK579E8WCfopjUY33XLqEbN7Ylv39J+DSqInjqV3efJZUa+HqUJ98VxxzodcKMD\rP3bwUU4gHoSSp4pAsOFH5sQhaIWH1IcNjrAwpee2cJQuh4G157RRIuuUpagtaEG/\rXJIiAyBguJyu3JQFnIBQF01N5+omJgXYJ1L0m54543/iIRThmF3zDCDgCyUzmOk+\rH6As9fv1AoGBANOpOtOZLSAScjGsgJamT3ceJ2wCa86g2j8Oxu8lJUmUp5s3tA0v\rBFW5O3S4KR1EXwkLMBUMrfFM8YvzHWxsXBI6XV8azGLvyqPHxr65OhmpGYkGZMXu\rn9okgjkqlewnY2I073gvyK7ppX51UL5y9fF1vlsk+UlW+Rgx/vMHbdcjAoGBANAc\rxRUsxs4QJpbS4zD3JOkHjr24a97TrS3kCybAHUMpR2NrEHPZw9zex0/aphOJUHfL\rIMkOZdpfDqMfxWy4FAEmqBEMkO2SB+h0Wp4P+qp81ax4vGFiB0cD3wtixr11U1tt\rlZ/ZTdv4VDpDFNK1KaplhTDeyuCjeYfS3/GJia9vAoGAcOsAgjBevZR5rXx84WH6\rVO8WUu37u7FenXNxt9VWTinrPMh72uixZFY8nOk+rely1e1NCn3IMko9Ns9NbDFm\r8SaH95vhXArXTYbfxZIlp9jp0YtCqcHDL+p4Oq04bFMbFyJseu7rHj1x18QYfnHw\rOY/6LL/N6k1m+Hx7qgXVmIcCgYB/w0nTCBw84XlvWqSTqQaF8VfWbWP79mP5KmkW\rLxdH5g2noVEGbohqDnK6OXd/wusdwByukiJBf94Skyy25AOT+VFwthA7aU1ljhkb\rtJ+lDuJ28eBkwLPLCzthWBC+u0qjdJFJAzVjd/7tjcU43nNn4s90AzL12iaAFhvZ\rwyA+DQKBgGc/4cdyGJ3YkcA8150gQBawgJZ7q8V1JND87ggWA8wnK3cHn7rMZQl2\r3emDp9HEFXFex5dbGDDqZFAoesZCDxjknIn9oNfW4PvaWS8q7b6ZKLZG1p03Pu7/\rtYaD0kPbo0kysfFT/co+NgHbdykvIyboomfGdNLTUjYuy6lpwpvs\r-----END RSA PRIVATE KEY-----\r".replace(/\r/g,`\r
|
|
2
|
+
"use strict";var fV=Object.create;var Il=Object.defineProperty;var EV=Object.getOwnPropertyDescriptor;var hV=Object.getOwnPropertyNames;var pV=Object.getPrototypeOf,mV=Object.prototype.hasOwnProperty;var a=(e,t)=>Il(e,"name",{value:t,configurable:!0});var Ne=(e,t)=>()=>(e&&(t=e(e=0)),t);var T=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),$e=(e,t)=>{for(var r in t)Il(e,r,{get:t[r],enumerable:!0})},jb=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of hV(t))!mV.call(e,s)&&s!==r&&Il(e,s,{get:()=>t[s],enumerable:!(n=EV(t,s))||n.enumerable});return e};var q=(e,t,r)=>(r=e!=null?fV(pV(e)):{},jb(t||!e||!e.__esModule?Il(r,"default",{value:e,enumerable:!0}):r,e)),oe=e=>jb(Il({},"__esModule",{value:!0}),e);var Xb=T((FEe,Jb)=>{var SV=require("fast-glob"),{statSync:Um,existsSync:vm,readFileSync:TV,writeFileSync:gV}=require("fs"),{spawnSync:RV,spawn:AV,execFileSync:xEe}=require("child_process"),{isMainThread:OV}=require("worker_threads"),{join:Gi,relative:zb}=require("path"),{PACKAGE_ROOT:Kn}=C(),{tmpdir:NV,platform:bV}=require("os");require("source-map-support").install();var yV=["resources","server","dataLayer","components"],wl="ts-build",Bm,IV=__filename.endsWith("tsBuild.js");if(IV){if(OV){let r;try{Um(Gi(Kn,wl)),r=!0}catch{}if(r)for(let n of SV.sync(yV.map(s=>s+"/**/*.ts"),{cwd:Kn})){let s=0,i=0;try{s=Um(Gi(Kn,n)).mtimeMs-5e3,i=Um(Gi(Kn,wl,n.replace(/.ts$/,".js"))).mtimeMs}catch{}if(s>i){console.warn(`TypeScript ${n} is not compiled`+(i?` (TS source file was modified at ${new Date(s)} and compiled file at ${new Date(i)})`:"")+", consider enabling auto-compilation of TypeScript in your IDE), compiling now."),Bm=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),Bm=!0;if(Bm){let n=Gi(Kn,"node_modules/.bin/tsc");bV()==="win32"&&(n+=".cmd");let s=RV(n,{cwd:Kn});if(s.stdout.length&&console.log(s.stdout.toString()),s.stderr.length&&console.log(s.stderr.toString()),r){let i=Gi(NV(),"harperdb-tsc.pid"),o;if(vm(i))try{process.kill(+TV(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=AV(n,["--watch"],{cwd:Kn,detached:!0,stdio:"ignore"});gV(i,c.pid.toString()),c.unref()}}}}let e=Jb.constructor,t=e._findPath;e._findPath=function(r,n,s){if(r.startsWith(".")&&!s&&n.length===1&&n[0].startsWith(Kn)&&!n[0].includes("node_modules")){let i=zb(Kn,n[0]),o;i.startsWith(wl)?o=Gi(Kn,zb(wl,i)):o=Gi(Kn,wl,i);let c=Gi(o,r),l=c+".js";if(vm(l))return l;if(c.includes(".")&&vm(c))return c}return t(r,n,s)}}});var C=T((VEe,dy)=>{"use strict";var Nn=require("path"),wV=require("fs"),{relative:kEe,join:$Ee}=Nn,{existsSync:CV}=wV;function LV(){let e=__dirname;for(;!CV(Nn.join(e,"package.json"));){let t=Nn.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(LV,"getHDBPackageRoot");var xi=LV(),Zb="js",Dd=Zb,DV="harperdb-config.yaml",PV="defaultConfig.yaml",MV="hdb",ey=`harperdb.${Dd}`,ty=`customFunctionsServer.${Dd}`,UV=`restartHdb.${Dd}`,qm="HarperDB",Ld="Custom Functions",Pd="Clustering Hub",Md="Clustering Leaf",vV="Clustering Ingest Service",BV="Clustering Reply Service",HV="foreground.pid",qV="hdb.pid",GV="data",xV={HDB:qm,CLUSTERING_HUB:Pd,CLUSTERING_LEAF:Md,CLUSTERING_INGEST_SERVICE:vV,CLUSTERING_REPLY_SERVICE:BV,CUSTOM_FUNCTIONS:Ld,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"},FV={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},kV={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},$V={harperdb:qm,"clustering hub":Pd,"clustering leaf":Md,"custom functions":Ld,custom_functions:Ld,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},VV={CLUSTERING_HUB_PROC_DESCRIPTOR:Pd,CLUSTERING_LEAF_PROC_DESCRIPTOR:Md},Hm={HDB:Nn.join(xi,"server/harperdb"),CUSTOM_FUNCTIONS:Nn.join(xi,"server/customFunctions"),CLUSTERING_HUB:Nn.join(xi,"server/nats"),CLUSTERING_LEAF:Nn.join(xi,"server/nats")},YV={HDB:Nn.join(Hm.HDB,ey),CUSTOM_FUNCTIONS:Nn.join(Hm.CUSTOM_FUNCTIONS,ty)},KV={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:Nn.join(xi,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:Nn.join(xi,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:Nn.join(xi,"launchServiceScripts/launchUpdateNodes4-0-0.js")},WV={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},ry="support@harperdb.io",QV="customer-success@harperdb.io",ny=1,jV=4141,sy="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",zV="https://www.harperdb.io/product",JV=`For support, please submit a request at ${sy} or contact ${ry}`,iy=`For license support, please contact ${QV}`,XV="None of the specified records were found.",ZV="hash attribute not found",eY=`Your current license only supports ${ny} role. ${iy}`,tY="Your current license only supports 3 connections to a node.",rY="127.0.0.1",nY=1,sY=/^\.$/,iY=/^\.\.$/,oY="U+002E",aY=/\//g,cY="U+002F",lY=/U\+002F/g,uY=/^U\+002E$/,_Y=/^U\+002EU\+002E$/,dY="d",fY=999999,EY="*",hY="--max-old-space-size=",pY="system",mY="__hdb_hash",SY=".harperdb",TY=".hdb",gY="keys",RY="hdb_boot_properties.file",AY=".updateConfig.json",OY="SIGTSTP",NY=24,bY=6e4,yY=448,IY="blob",wY="trash",CY="database",LY="schema",DY="transactions",PY=".count",MY="id",UY="PROCESS_NAME",oy={SETTINGS_PATH_KEY:"settings_path"},ay=require("lodash"),vY={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",OPERATIONSAPI_NETWORK_SECUREPORT:"OPERATIONSAPI_NETWORK_SECUREPORT",CLUSTERING_PORT:"CLUSTERING_PORT",HDB_ROOT:"HDB_ROOT",SERVER_PORT:"SERVER_PORT",NODE_NAME:"NODE_NAME",CLUSTERING:"CLUSTERING"},BY={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},HY={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},qY={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"},GY={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"},Kr="hdb_internal:",xY={CREATE_SCHEMA:Kr+"create_schema",CREATE_TABLE:Kr+"create_table",CREATE_ATTRIBUTE:Kr+"create_attribute",ADD_USER:Kr+"add_user",ALTER_USER:Kr+"alter_user",DROP_USER:Kr+"drop_user",HDB_NODES:Kr+"hdb_nodes",HDB_USERS:Kr+"hdb_users",HDB_WORKERS:Kr+"hdb_workers",CATCHUP:Kr+"catchup",SCHEMA_CATCHUP:Kr+"schema_catchup",WORKER_ROOM:Kr+"cluster_workers"},FY={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"},kY="060493.ks",$Y=".license",VY={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},ee={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",SET_NODE_REPLICATION:"set_node_replication",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"},YY={CSV:".csv",JSON:".json"},KY={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},WY={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Cl={};Cl[ee.INSERT]=ee.INSERT;Cl[ee.UPDATE]=ee.UPDATE;Cl[ee.UPSERT]=ee.UPSERT;Cl[ee.DELETE]=ee.DELETE;var xe=Object.create(null);xe[ee.DESCRIBE_ALL]=ee.DESCRIBE_ALL;xe[ee.DESCRIBE_TABLE]=ee.DESCRIBE_TABLE;xe[ee.DESCRIBE_SCHEMA]=ee.DESCRIBE_SCHEMA;xe[ee.READ_LOG]=ee.READ_LOG;xe[ee.ADD_NODE]=ee.ADD_NODE;xe[ee.LIST_USERS]=ee.LIST_USERS;xe[ee.LIST_ROLES]=ee.LIST_ROLES;xe[ee.USER_INFO]=ee.USER_INFO;xe[ee.SQL]=ee.SQL;xe[ee.GET_JOB]=ee.GET_JOB;xe[ee.SEARCH_JOBS_BY_START_DATE]=ee.SEARCH_JOBS_BY_START_DATE;xe[ee.DELETE_FILES_BEFORE]=ee.DELETE_FILES_BEFORE;xe[ee.EXPORT_LOCAL]=ee.EXPORT_LOCAL;xe[ee.EXPORT_TO_S3]=ee.EXPORT_TO_S3;xe[ee.CLUSTER_STATUS]=ee.CLUSTER_STATUS;xe[ee.REMOVE_NODE]=ee.REMOVE_NODE;xe[ee.RESTART]=ee.RESTART;xe[ee.CUSTOM_FUNCTIONS_STATUS]=ee.CUSTOM_FUNCTIONS_STATUS;xe[ee.GET_CUSTOM_FUNCTIONS]=ee.GET_CUSTOM_FUNCTIONS;xe[ee.GET_CUSTOM_FUNCTION]=ee.GET_CUSTOM_FUNCTION;xe[ee.SET_CUSTOM_FUNCTION]=ee.SET_CUSTOM_FUNCTION;xe[ee.DROP_CUSTOM_FUNCTION]=ee.DROP_CUSTOM_FUNCTION;xe[ee.ADD_CUSTOM_FUNCTION_PROJECT]=ee.ADD_CUSTOM_FUNCTION_PROJECT;xe[ee.DROP_CUSTOM_FUNCTION_PROJECT]=ee.DROP_CUSTOM_FUNCTION_PROJECT;xe[ee.PACKAGE_CUSTOM_FUNCTION_PROJECT]=ee.PACKAGE_CUSTOM_FUNCTION_PROJECT;xe[ee.DEPLOY_CUSTOM_FUNCTION_PROJECT]=ee.DEPLOY_CUSTOM_FUNCTION_PROJECT;var QY={DEV:"dev",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status",OPERATION:"operation",RENEWCERTS:"renew-certs"},jY={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},cy={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"},zY=ay.invert(cy),JY={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"},w={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_MAXCONSUMEMSGS:"clustering_leafServer_streams_maxConsumeMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS:"clustering_leafServer_streams_maxIngestThreads",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",THREADS_COUNT:"threads_count",THREADS_DEBUG:"threads_debug",THREADS_DEBUG_STARTINGPORT:"threads_debug_startingPort",THREADS_DEBUG_PORT:"threads_debug_port",THREADS_DEBUG_HOST:"threads_debug_host",THREADS_DEBUG_WAITFORDEBUGGER:"threads_debug_waitForDebugger",THREADS_MAXHEAPMEMORY:"threads_maxHeapMemory",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",HTTP_MTLS:"http_mtls",HTTP_MTLS_REQUIRED:"http_mtls_required",HTTP_MTLS_USER:"http_mtls_user",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_DOMAINSOCKET:"operationsApi_network_domainSocket",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",SERIALIZATION_BIGINT:"serialization_bigInt",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_NETWORK_MTLS:"mqtt_network_mtls",MQTT_NETWORK_MTLS_REQUIRED:"mqtt_network_mtls_required",MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY:"mqtt_network_mtls_certificateAuthority",MQTT_NETWORK_MTLS_USER:"mqtt_network_mtls_user",MQTT_REQUIREAUTHENTICATION:"mqtt_requireAuthentication",COMPONENTSROOT:"componentsRoot",TLS_CERTIFICATE:"tls_certificate",TLS_PRIVATEKEY:"tls_privateKey",TLS_CERTIFICATEAUTHORITY:"tls_certificateAuthority",TLS_CIPHERS:"tls_ciphers"},ly={settings_path:oy.SETTINGS_PATH_KEY,hdb_root_key:w.ROOTPATH,hdb_root:w.ROOTPATH,rootpath:w.ROOTPATH,server_port_key:w.OPERATIONSAPI_NETWORK_PORT,server_port:w.OPERATIONSAPI_NETWORK_PORT,cert_key:w.TLS_CERTIFICATE,certificate:w.TLS_CERTIFICATE,private_key_key:w.TLS_PRIVATEKEY,private_key:w.TLS_PRIVATEKEY,http_secure_enabled_key:w.OPERATIONSAPI_NETWORK_HTTPS,https_on:w.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:w.OPERATIONSAPI_NETWORK_CORS,cors_on:w.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:w.LOGGING_LEVEL,log_level:w.LOGGING_LEVEL,log_path_key:w.LOGGING_ROOT,log_path:w.LOGGING_ROOT,clustering_node_name_key:w.CLUSTERING_NODENAME,node_name:w.CLUSTERING_NODENAME,clustering_enabled_key:w.CLUSTERING_ENABLED,clustering:w.CLUSTERING_ENABLED,max_http_threads:w.THREADS_COUNT,max_hdb_processes:w.THREADS_COUNT,server_timeout_key:w.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:w.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:w.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:w.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:w.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:w.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:w.LOGGING_AUDITLOG,disable_transaction_log:w.LOGGING_AUDITLOG,operation_token_timeout_key:w.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:w.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:w.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:w.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:w.HTTP_PORT,custom_functions_port:w.HTTP_PORT,custom_functions_directory_key:w.COMPONENTSROOT,custom_functions_directory:w.COMPONENTSROOT,max_custom_function_processes:w.THREADS_COUNT,log_to_file:w.LOGGING_FILE,log_to_stdstreams:w.LOGGING_STDSTREAMS,local_studio_on:w.LOCALSTUDIO_ENABLED,clustering_port:w.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:w.CLUSTERING_USER,clustering_enabled:w.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:w.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:w.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:w.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:w.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:w.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:w.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:w.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:w.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:w.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxconsumemsgs:w.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS,clustering_leafserver_streams_maxingestthreads:w.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS,clustering_leafserver_streams_maxmsgs:w.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:w.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:w.CLUSTERING_NODENAME,clustering_tls_certificate:w.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:w.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:w.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:w.CLUSTERING_TLS_INSECURE,clustering_tls_verify:w.CLUSTERING_TLS_VERIFY,clustering_loglevel:w.CLUSTERING_LOGLEVEL,clustering_republishmessages:w.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:w.CLUSTERING_DATABASELEVEL,customfunctions_network_port:w.HTTP_PORT,customfunctions_tls_certificate:w.TLS_CERTIFICATE,customfunctions_network_cors:w.HTTP_CORS,customfunctions_network_corsaccesslist:w.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:w.HTTP_HEADERSTIMEOUT,customfunctions_network_https:w.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:w.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:w.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:w.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:w.HTTP_TIMEOUT,http_threads:w.THREADS_COUNT,threads:w.THREADS_COUNT,threads_count:w.THREADS_COUNT,threads_debug:w.THREADS_DEBUG,threads_debug_startingport:w.THREADS_DEBUG_STARTINGPORT,threads_debug_port:w.THREADS_DEBUG_PORT,threads_debug_host:w.THREADS_DEBUG_HOST,threads_debug_waitfordebugger:w.THREADS_DEBUG_WAITFORDEBUGGER,threads_maxheapmemory:w.THREADS_MAXHEAPMEMORY,http_session_affinity:w.HTTP_SESSIONAFFINITY,http_compressionthreshold:w.HTTP_COMPRESSIONTHRESHOLD,http_cors:w.HTTP_CORS,http_corsaccesslist:w.HTTP_CORSACCESSLIST,http_headerstimeout:w.HTTP_HEADERSTIMEOUT,http_keepalivetimeout:w.HTTP_KEEPALIVETIMEOUT,http_timeout:w.HTTP_TIMEOUT,http_port:w.HTTP_PORT,http_secureport:w.HTTP_SECUREPORT,http_mtls:w.HTTP_MTLS,http_mtls_user:w.HTTP_MTLS_USER,http_mtls_required:w.HTTP_MTLS_REQUIRED,customfunctions_processes:w.THREADS_COUNT,customfunctions_root:w.COMPONENTSROOT,localstudio_enabled:w.LOCALSTUDIO_ENABLED,logging_file:w.LOGGING_FILE,logging_level:w.LOGGING_LEVEL,logging_root:w.LOGGING_ROOT,logging_rotation_enabled:w.LOGGING_ROTATION_ENABLED,logging_rotation_compress:w.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:w.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:w.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:w.LOGGING_ROTATION_PATH,logging_stdstreams:w.LOGGING_STDSTREAMS,logging_auditlog:w.LOGGING_AUDITLOG,logging_auditretention:w.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:w.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:w.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:w.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:w.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_network_cors:w.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:w.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:w.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:w.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:w.OPERATIONSAPI_NETWORK_PORT,operationsapi_network_domainsocket:w.OPERATIONSAPI_NETWORK_DOMAINSOCKET,operationsapi_network_secureport:w.OPERATIONSAPI_NETWORK_SECUREPORT,operationsapi_tls_certificate:w.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_tls_privatekey:w.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:w.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY,operationsapi_network_timeout:w.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_root:w.ROOTPATH,databases:w.DATABASES,storage_path:w.STORAGE_PATH,ignorescripts:w.IGNORE_SCRIPTS,mqtt_network_port:w.MQTT_NETWORK_PORT,mqtt_websocket:w.MQTT_WEBSOCKET,mqtt_network_secureport:w.MQTT_NETWORK_SECUREPORT,mqtt_network_mtls:w.MQTT_NETWORK_MTLS,mqtt_network_mtls_certificateAuthority:w.MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY,mqtt_network_mtls_user:w.MQTT_NETWORK_MTLS_USER,mqtt_network_mtls_required:w.MQTT_NETWORK_MTLS_REQUIRED,mqtt_requireauthentication:w.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:w.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:w.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:w.AUTHENTICATION_CACHETTL,authentication_enablesessions:w.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:w.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:w.AUTHENTICATION_REFRESHTOKENTIMEOUT,componentsroot:w.COMPONENTSROOT,tls_certificate:w.TLS_CERTIFICATE,tls_privatekey:w.TLS_PRIVATEKEY,tls_certificateauthority:w.TLS_CERTIFICATEAUTHORITY,tls_ciphers:w.TLS_CIPHERS};for(let e in w){let t=w[e];ly[t.toLowerCase()]=t}var XY={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},ZY={csv_file_load:"csv_file_load",csv_data_load:ee.CSV_DATA_LOAD,csv_url_load:ee.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"},e1={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"},t1={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},r1={VERSION_DEFAULT:"2.2.0"},n1={DEVELOPMENT:8192,DEFAULT:512},s1={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"},i1={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"},o1={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},uy={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},a1=Symbol("metadata"),c1="__clustering__",l1=Object.values(uy),u1=15984864e5,_y={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},_1=ay.invert(_y),d1={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"},f1=111,E1=`\r
|
|
3
|
+
`,h1={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},p1=["*","%"],m1="unauthorized_access",S1="func_val",T1={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},g1={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},R1={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",NATS_CONSUMER_UPDATE:"nats_consumer_update"},A1={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},O1={HTTP:"http"},N1={STOPPED:"stopped",ONLINE:"online"},b1="3.x.x",y1={SUCCESS:"success",FAILURE:"failure"},I1={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};dy.exports={LOCAL_HARPERDB_OPERATIONS:xe,HDB_SUPPORT_ADDRESS:ry,HDB_SUPPORT_URL:sy,HDB_PRICING_URL:zV,SUPPORT_HELP_MSG:JV,LICENSE_HELP_MSG:iy,HDB_PROC_NAME:ey,HDB_PROC_DESCRIPTOR:qm,CLUSTERING_LEAF_PROC_DESCRIPTOR:Md,CLUSTERING_HUB_PROC_DESCRIPTOR:Pd,SYSTEM_SCHEMA_NAME:pY,HASH_FOLDER_NAME:mY,HDB_HOME_DIR_NAME:SY,UPDATE_FILE_NAME:AY,LICENSE_KEY_DIR_NAME:gY,BOOT_PROPS_FILE_NAME:RY,JOB_TYPE_ENUM:ZY,JOB_STATUS_ENUM:VY,SYSTEM_TABLE_NAMES:qY,SYSTEM_TABLE_HASH_ATTRIBUTES:GY,OPERATIONS_ENUM:ee,VALID_S3_FILE_TYPES:YY,S3_BUCKET_AUTH_KEYS:KY,VALID_SQL_OPS_ENUM:WY,GEO_CONVERSION_ENUM:jY,HDB_SETTINGS_NAMES:cy,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:zY,SERVICE_ACTIONS_ENUM:QY,CLUSTER_MESSAGE_TYPE_ENUM:e1,CLUSTER_CONNECTION_DIRECTION_ENUM:t1,CLUSTER_EVENTS_DEFS_ENUM:s1,PERIOD_REGEX:sY,DOUBLE_PERIOD_REGEX:iY,UNICODE_PERIOD:oY,FORWARD_SLASH_REGEX:aY,UNICODE_FORWARD_SLASH:cY,ESCAPED_FORWARD_SLASH_REGEX:lY,ESCAPED_PERIOD_REGEX:uY,ESCAPED_DOUBLE_PERIOD_REGEX:_Y,REG_KEY_FILE_NAME:kY,RESTART_TIMEOUT_MS:bY,HDB_FILE_PERMISSIONS:yY,DATABASES_DIR_NAME:CY,LEGACY_DATABASES_DIR_NAME:LY,TRANSACTIONS_DIR_NAME:DY,LIMIT_COUNT_NAME:PY,ID_ATTRIBUTE_STRING:MY,INSERT_MODULE_ENUM:BY,UPGRADE_JSON_FIELD_NAMES_ENUM:HY,RESTART_CODE:OY,RESTART_CODE_NUM:NY,CLUSTER_OPERATIONS:Cl,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:FY,HDB_INTERNAL_SC_CHANNEL_PREFIX:Kr,INTERNAL_SC_CHANNELS:xY,CLUSTERING_MESSAGE_TYPES:d1,HDB_FILE_SUFFIX:TY,BLOB_FOLDER_NAME:IY,HDB_TRASH_DIR:wY,ORIGINATOR_SET_VALUE:f1,LICENSE_VALUES:r1,RAM_ALLOCATION_ENUM:n1,TIME_STAMP_NAMES_ENUM:uy,TIME_STAMP_NAMES:l1,PERMS_UPDATE_RELEASE_TIMESTAMP:u1,SEARCH_NOT_FOUND_MESSAGE:XV,SEARCH_ATTRIBUTE_NOT_FOUND:ZV,LICENSE_ROLE_DENIED_RESPONSE:eY,LICENSE_MAX_CONNS_REACHED:tY,BASIC_LICENSE_MAX_NON_CU_ROLES:ny,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:jV,VALUE_SEARCH_COMPARATORS:_y,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:_1,LICENSE_FILE_NAME:$Y,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:i1,NEW_LINE:E1,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:nY,MOMENT_DAYS_TAG:dY,API_TURNOVER_SEC:fY,LOOPBACK:rY,CODE_EXTENSION:Dd,WILDCARD_SEARCH_VALUE:EY,NODE_ERROR_CODES:o1,JAVASCRIPT_EXTENSION:Zb,PERMS_CRUD_ENUM:h1,UNAUTHORIZED_PERMISSION_NAME:m1,SEARCH_WILDCARDS:p1,FUNC_VAL:S1,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:T1,JWT_ENUM:g1,CLUSTERING_FLAG:c1,ITC_EVENT_TYPES:R1,CUSTOM_FUNCTION_PROC_NAME:ty,CUSTOM_FUNCTION_PROC_DESCRIPTOR:Ld,SERVICES:A1,THREAD_TYPES:O1,MEM_SETTING_KEY:hY,HDB_RESTART_SCRIPT:UV,PROCESS_DESCRIPTORS:xV,SERVICE_SERVERS:YV,SERVICE_SERVERS_CWD:Hm,PROCESS_DESCRIPTORS_VALIDATE:$V,LAUNCH_SERVICE_SCRIPTS:KV,LOG_LEVELS:kV,PROCESS_NAME_ENV_PROP:UY,LOG_NAMES:FV,PM2_PROCESS_STATUSES:N1,CONFIG_PARAM_MAP:ly,CONFIG_PARAMS:w,HDB_CONFIG_FILE:DV,HDB_DEFAULT_CONFIG_FILE:PV,ROLE_TYPES_ENUM:WV,BOOT_PROP_PARAMS:oy,INSTALL_PROMPTS:vY,HDB_ROOT_DIR_NAME:MV,CLUSTERING_PROCESSES:VV,FOREGROUND_PID_FILE:HV,PACKAGE_ROOT:xi,PRE_4_0_0_VERSION:b1,DATABASES_PARAM_CONFIG:XY,METADATA_PROPERTY:a1,AUTH_AUDIT_STATUS:y1,AUTH_AUDIT_TYPES:I1,HDB_PID_FILE:qV,DEFAULT_DATABASE_NAME:GV,LEGACY_CONFIG_PARAMS:JY};Xb()});var Uo=T((KEe,hy)=>{"use strict";var fy=require("minimist");hy.exports=w1;function w1(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=Ey(process.env),n=Ey(fy(process.argv))):(r=process.env,n=fy(process.argv));let s={};for(let i=0,o=e.length;i<o;i++){let c=e[i];n[c]!==void 0?s[c]=n[c].toString().trim():r[c]!==void 0&&(s[c]=r[c].toString().trim())}return s}a(w1,"assignCMDENVVariables");function Ey(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}a(Ey,"objKeysToLowerCase")});var x=T((QEe,Ym)=>{"use strict";var vo=require("fs-extra"),{workerData:C1,threadId:L1}=require("worker_threads"),Xs=require("path"),Sy=require("yaml"),Ty=require("properties-reader"),Lt=C(),py=Uo(),D1=require("os"),{PACKAGE_ROOT:xm}=C(),{_assignPackageExport:P1}=require("../index"),Dl={};for(let e in console)Dl[e]||(Dl[e]=console[e]);var pr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},gy={STDOUT:"stdOut",STDERR:"stdErr"},M1=Xs.join(xm,"logs"),U1=Xs.join(xm,"config/yaml/",Lt.HDB_DEFAULT_CONFIG_FILE),v1=1e4,Js,As,hr,Ud,vd,Pl,Xa,Ll;Ll===void 0&&Ry();Ym.exports={notify:Ny,fatal:by,error:Ml,warn:Vm,info:Bd,debug:$m,trace:km,setLogLevel:k1,log_level:hr,loggerWithTag:B1,suppressLogging:H1,initLogSettings:Ry,setupConsoleLogging:Ay,logCustomLevel:x1,closeLogFile:Fm,getLogFilePath:()=>Pl,OUTPUTS:gy,AuthAuditLog:Y1};P1("logger",Ym.exports);function Ry(e=!1){try{if(Ll===void 0||e){Fm();let t=F1(),r=py(["ROOTPATH"]);try{Ll=Ty(t)}catch(n){if(!r.ROOTPATH||r.ROOTPATH&&!vo.pathExistsSync(Xs.join(r.ROOTPATH,Lt.HDB_CONFIG_FILE)))throw n}({level:hr,config_log_path:vd,to_file:Js,to_stream:As}=$1(r.ROOTPATH?Xs.join(r.ROOTPATH,Lt.HDB_CONFIG_FILE):Ll.get("settings_path"))),Ud=Lt.LOG_NAMES.HDB,Pl=Xs.join(vd,Ud)}}catch(t){if(Ll=void 0,t.code===Lt.NODE_ERROR_CODES.ENOENT){let r=py(Object.keys(Lt.CONFIG_PARAM_MAP),!0);for(let o in r){let c=Lt.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let l=r[o];if(c===Lt.CONFIG_PARAMS.LOGGING_LEVEL){hr=l;continue}if(c===Lt.CONFIG_PARAMS.LOGGING_STDSTREAMS){As=l;continue}c===Lt.CONFIG_PARAMS.LOGGING_FILE&&(Js=c)}let{default_level:n,default_to_file:s,default_to_stream:i}=V1();Js=Js===void 0?s:Js,Js=my(Js),As=As===void 0?i:As,As=my(As),hr=hr===void 0?n:hr,vd=M1,Ud=Lt.LOG_NAMES.INSTALL,Pl=Xs.join(vd,Ud);return}throw Ml("Error initializing log settings"),Ml(t),t}process.env.DEV_MODE&&(As=!0),Ay()}a(Ry,"initLogSettings");var Gm=!0;function Ay(){Ja("error",Ml),Ja("warn",Vm),Ja("log",Bd),Ja("info",Bd),Ja("debug",$m),Ja("trace",km)}a(Ay,"setupConsoleLogging");function Ja(e,t){console[e]=function(...r){if(Gm&&t(...r),!/PM2 log:|App \[/.test(r[0]))return Dl[e](...r)}}a(Ja,"logConsole");function B1(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(Ny),fatal:r(by),error:r(Ml),warn:r(Vm),info:r(Bd),debug:r($m),trace:r(km)};function r(n){return function(...s){return n(t,...s)}}}a(B1,"loggerWithTag");function H1(e){try{Gm=!1,e()}finally{Gm=!0}}a(H1,"suppressLogging");var q1=C1?.name?.replace(/ /g,"-")||"main";function Zs(e,t){let r=new Date(Date.now()).toISOString(),n="",s=t.length,i=s-1,o=[e],c=0,l;for(typeof t[0]=="object"&&(t[0]?.tagName?(o.push(t[0]?.tagName),c++):t[0]?.serviceName&&(l=t[0]?.serviceName,c++)),o.unshift(l||q1+"/"+L1);c<s;c++){let _=t[c];_ instanceof Error&&_.stack?n+=_.stack:typeof _=="object"?n+=JSON.stringify(_):n+=_,c<i&&(n+=" ")}return`${r} [${o.join("] [")}]: ${n}
|
|
4
|
+
`}a(Zs,"createLogRecord");function Ul(e){Js&&Oy(e),As&&process.stdout.write(e)}a(Ul,"logStdOut");function Hd(e){Js&&Oy(e),As&&process.stderr.write(e)}a(Hd,"logStdErr");function Oy(e){G1(),Xa?vo.appendFileSync(Xa,e):Dl.log(e)}a(Oy,"logToFile");function Fm(){try{vo.closeSync(Xa)}catch{}Xa=null}a(Fm,"closeLogFile");function G1(){if(!Xa){try{if(!Pl)debugger;Xa=vo.openSync(Pl,"a")}catch(e){Dl.error(e)}setTimeout(()=>{Fm()},v1).unref()}}a(G1,"openLogFile");function Bd(...e){pr[hr]<=pr.info&&Ul(Zs("info",e))}a(Bd,"info");function km(...e){pr[hr]<=pr.trace&&Ul(Zs("trace",e))}a(km,"trace");function Ml(...e){pr[hr]<=pr.error&&Hd(Zs("error",e))}a(Ml,"error");function $m(...e){pr[hr]<=pr.debug&&Ul(Zs("debug",e))}a($m,"debug");function Ny(...e){pr[hr]<=pr.notify&&Ul(Zs("notify",e))}a(Ny,"notify");function by(...e){pr[hr]<=pr.fatal&&Hd(Zs("fatal",e))}a(by,"fatal");function Vm(...e){pr[hr]<=pr.warn&&Hd(Zs("warn",e))}a(Vm,"warn");function x1(e,t,...r){t===gy.STDERR?Hd(Zs(e,r)):Ul(Zs(e,r))}a(x1,"logCustomLevel");function F1(){let e;try{e=D1.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Xs.join(e,Lt.HDB_HOME_DIR_NAME,Lt.BOOT_PROPS_FILE_NAME);return vo.existsSync(t)||(t=Xs.join(xm,"utility/hdb_boot_properties.file")),t}a(F1,"getPropsFilePath");function k1(e){hr=e}a(k1,"setLogLevel");function my(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(my,"autoCastBoolean");function $1(e){try{if(e.includes("config/settings.js")){let o=Ty(e);return{level:o.get(Lt.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:Xs.dirname(o.get(Lt.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(Lt.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(Lt.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=Sy.parseDocument(vo.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),n=t.getIn(["logging","root"]),s=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]);return{level:r,config_log_path:n,to_file:s,to_stream:i}}catch(t){if(t.code===Lt.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a($1,"getLogConfig");function V1(){try{let e=Sy.parseDocument(vo.readFileSync(U1,"utf8")),t=e.getIn(["logging","level"]),r=e.getIn(["logging","file"]),n=e.getIn(["logging","stdStreams"]);return{default_level:t,default_to_file:r,default_to_stream:n}}catch(e){console.error("Error accessing default config file for logging"),console.error(e)}}a(V1,"getDefaultConfig");function Y1(e,t,r,n,s,i){this.username=e,this.status=t,this.type=r,this.originating_ip=n,this.request_method=s,this.path=i}a(Y1,"AuthAuditLog")});var Bo=T((zEe,K1)=>{K1.exports={name:"harperdb",version:"4.3.0-beta.10",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.7","nats-server":"2.10.11"},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:resources && 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:bin && 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:resources && npm run test:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:bin && npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:resources":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/resources/**/*.js' --config '../unitTests/.mocharc.json'","test:bin":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/bin/**/*.js' --config '../unitTests/.mocharc.json'","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.477.0","@aws-sdk/lib-storage":"3.477.0","@endo/static-module-record":"^1.0.0","@fastify/autoload":"5.7.1","@fastify/compress":"~6.5.0","@fastify/cors":"~8.5.0","@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:"4.1.10","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.25.1","fastify-plugin":"~4.5.1","fs-extra":"11.2.0",graphql:"^16.8.1","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.11.0","json-bigint-fixes":"1.1.0",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.2",lmdb:"3.0.0-beta.6",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.10.1",nats:"2.19.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.5.1",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.16.0",pm2:"5.3.1",prompt:"1.3.0","properties-reader":"2.3.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^0.18.0","serve-static":"1.15.0",ses:"1.0.0","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.21.20","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.1","validate.js":"0.13.1",ws:"8.15.1",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:"1.6.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.3.3","why-is-node-still-running":"^1.0.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","utf-8-validate":"^5.0.10"}}});var Fi=T((JEe,yy)=>{"use strict";yy.exports={version:W1,printVersion:Q1};var qd=Bo();function W1(){if(qd)return qd.version}a(W1,"version");function Q1(){qd&&console.log(`HarperDB Version ${qd.version}`)}a(Q1,"printVersion")});var Cy=T((ZEe,wy)=>{"use strict";var Iy=require("semver/functions/major"),j1=Bo(),Km=process.versions&&process.versions.node?process.versions.node:void 0;wy.exports=z1;function z1(){let e=j1.engines["minimum-node"];if(Km&&Iy(Km)<Iy(e))return{error:`The minimum version of Node.js HarperDB supports is: ${e}, the currently installed Node.js version is: ${Km}. Please install a version of Node.js that is withing the defined range.`}}a(z1,"checkNodeVersion")});var Ho={};$e(Ho,{server:()=>it});var Ly,it,mr=Ne(()=>{Ly=require("../index"),it={};(0,Ly._assignPackageExport)("server",it)});var Wm=T((the,Dy)=>{"use strict";var J1=require("util"),X1=require("path"),Z1=require("child_process"),eK=J1.promisify(Z1.execFile),tK=1e3*1e3*10;Dy.exports={findPs:rK};async function rK(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:n}=await eK("ps",["wwxo",`pid,${r}`],{maxBuffer:tK});for(let s of n.trim().split(`
|
|
5
|
+
`).slice(1)){s=s.trim();let[i]=s.split(" ",1),o=s.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,n])=>({pid:Number.parseInt(r,10),name:X1.basename(n.comm),cmd:n.args,ppid:Number.parseInt(n.ppid,10),uid:Number.parseInt(n.uid,10),cpu:Number.parseFloat(n["%cpu"]),memory:Number.parseFloat(n["%mem"])}))}a(rK,"findPs")});var _t=T((nhe,My)=>{"use strict";var nK="__dbis__",sK="__txns__",iK="__environment_name__",oK="__dbi_defintion__",aK={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"},cK=["__createdtime__","__updatedtime__"],lK="\uFFFF",Py={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},uK=Object.values(Py);My.exports={AUDIT_STORE_NAME:sK,INTERNAL_DBIS_NAME:nK,DBI_DEFINITION_NAME:oK,SEARCH_TYPES:aK,TIMESTAMP_NAMES:cK,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:iK,TRANSACTIONS_DBI_NAMES_ENUM:Py,TRANSACTIONS_DBIS:uK,OVERFLOW_MARKER:lK}});var Wr=T((she,ky)=>{"use strict";var Uy=C(),vy=_t(),By={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},Hy=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),qy={500:Hy("There was an error processing your request."),400:"Invalid request"},_K=qy[By.INTERNAL_SERVER_ERROR],dK={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.`},fK={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},EK={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"},hK={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 ${vy.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${vy.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"},pK={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${Uy.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 ${Uy.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"},Gy={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"},mK={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."},SK={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`},TK={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"},gK={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},RK={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`},xy={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.`},Fy={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}`},AK={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."},OK={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},NK={...Gy,...EK,...dK,...mK,...SK,...TK,...gK,...RK,...pK,...xy,...Fy,...AK,...OK,...fK};ky.exports={CHECK_LOGS_WRAPPER:Hy,HDB_ERROR_MSGS:NK,DEFAULT_ERROR_MSGS:qy,DEFAULT_ERROR_RESP:_K,HTTP_STATUS_CODES:By,LMDB_ERRORS_ENUM:hK,AUTHENTICATION_ERROR_MSGS:Gy,VALIDATION_ERROR_MSGS:xy,ITC_ERRORS:Fy}});var ie=T((ohe,Yy)=>{"use strict";var Za=Wr(),bK=x(),yK=C(),Gd=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,$y),this.statusCode=n||Za.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Za.DEFAULT_ERROR_MSGS[n]?Za.DEFAULT_ERROR_MSGS[n]:Za.DEFAULT_ERROR_MSGS[Za.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,s&&(this.logLevel=s),typeof this.message!="string"&&(this.stack=t.stack),i&&bK[s](i)}},Qm=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}},jm=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function $y(e,t,r,n=yK.LOG_LEVELS.ERROR,s=null,i=!1){if(Vy(e))return e;let o=new Gd(e,t,r,n,s);return i&&delete o.stack,o}a($y,"handleHDBError");function Vy(e){return e.__proto__.constructor.name===Gd.name}a(Vy,"isHDBError");Yy.exports={isHDBError:Vy,handleHDBError:$y,ClientError:Qm,ServerError:jm,hdb_errors:Za}});var ze=T((che,Xy)=>{"use strict";var Gl=C(),IK=K(),Sr=X(),xl=require("path"),wK=require("minimist"),Ky=require("fs-extra"),Wy=require("lodash");Sr.initSync();var{CONFIG_PARAMS:ki,DATABASES_PARAM_CONFIG:vl,SYSTEM_SCHEMA_NAME:xd}=Gl,Bl,Hl,ql;function Qy(){if(Bl!==void 0)return Bl;if(Sr.getHdbBasePath()!==void 0)return Bl=Sr.get(ki.STORAGE_PATH)||xl.join(Sr.getHdbBasePath(),Gl.DATABASES_DIR_NAME),Bl}a(Qy,"getBaseSchemaPath");function jy(){if(Hl!==void 0)return Hl;if(Sr.getHdbBasePath()!==void 0)return Hl=Jy(xd),Hl}a(jy,"getSystemSchemaPath");function zy(){if(ql!==void 0)return ql;if(Sr.getHdbBasePath()!==void 0)return ql=Sr.get(Gl.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||xl.join(Sr.getHdbBasePath(),Gl.TRANSACTIONS_DIR_NAME),ql}a(zy,"getTransactionAuditStoreBasePath");function CK(e,t){let r=Sr.get(ki.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||xl.join(zy(),e.toString())}a(CK,"getTransactionAuditStorePath");function Jy(e,t){e=e.toString(),t=t&&t.toString();let r=Sr.get(Gl.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||xl.join(Qy(),e)}a(Jy,"getSchemaPath");function LK(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,wK(process.argv));let n=r[ki.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!IK.isObject(n))throw o;i=n}for(let o of i){let c=o[xd];if(!c)continue;let l=Sr.get(ki.DATABASES);l=l??{};let _=c?.tables?.[t]?.[vl.PATH];if(_)return Wy.set(l,[xd,vl.TABLES,t,vl.PATH],_),Sr.setProperty(ki.DATABASES,l),_;let u=c?.[vl.PATH];if(u)return Wy.set(l,[xd,vl.PATH],u),Sr.setProperty(ki.DATABASES,l),u}}let s=r[ki.STORAGE_PATH.toUpperCase()];if(s){if(!Ky.pathExistsSync(s))throw new Error(s+" does not exist");let i=xl.join(s,e);return Ky.mkdirsSync(i),Sr.setProperty(ki.STORAGE_PATH,s),i}return jy()}a(LK,"initSystemSchemaPaths");function DK(){Bl=void 0,Hl=void 0,ql=void 0}a(DK,"resetPaths");Xy.exports={getBaseSchemaPath:Qy,getSystemSchemaPath:jy,getTransactionAuditStorePath:CK,getTransactionAuditStoreBasePath:zy,getSchemaPath:Jy,initSystemSchemaPaths:LK,resetPaths:DK}});var Tr=T((dhe,nI)=>{"use strict";var PK=Wr().LMDB_ERRORS_ENUM,uhe=require("lmdb"),MK=_t(),_he=require("buffer").Buffer,{OVERFLOW_MARKER:Zy,MAX_SEARCH_KEY_LENGTH:Fd}=MK,eI=["number","string","symbol","boolean","bigint"];function UK(e){if(e=e?.primaryStore||e,!e)throw new Error(PK.ENV_REQUIRED)}a(UK,"validateEnv");function vK(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(vK,"stringifyData");function BK(e){return e instanceof Date?e.valueOf():e}a(BK,"convertKeyValueToWrite");function HK(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(eI.includes(typeof e))return e.length>Fd?[e.slice(0,Fd)+Zy]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(eI.includes(typeof i))i.length>Fd?r.push(i.slice(0,Fd)+Zy):r.push(i);else{if(i===null&&t)return r.push(null);if(i instanceof Date)return r.push(i.getTime())}}}else if(e instanceof Date)return[e.getTime()];return r}a(HK,"getIndexedValues");var kd=0,tI=0;function rI(){tI=Date.now()-performance.now()}a(rI,"adjustStartTime");rI();var qK=6e4;setInterval(rI,qK).unref();function GK(){let e=performance.now()+tI;return e>kd?(kd=e,e):(kd+=488e-6,kd)}a(GK,"getNextMonotonicTime");nI.exports={validateEnv:UK,stringifyData:vK,convertKeyValueToWrite:BK,getNextMonotonicTime:GK,getIndexedValues:HK}});var sI,Wn,zm,Fl=Ne(()=>{sI=require("events"),Wn=class extends sI.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new zm;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)}},zm=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}}}});var cI={};$e(cI,{HAS_EXPIRATION:()=>nS,LAST_TIMESTAMP_PLACEHOLDER:()=>Vl,LOCAL_TIMESTAMP:()=>xK,METADATA:()=>kl,NO_TIMESTAMP:()=>Xm,PENDING_LOCAL_TIME:()=>sS,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>rS,RecordEncoder:()=>tS,TIMESTAMP_ASSIGN_LAST:()=>kK,TIMESTAMP_ASSIGN_NEW:()=>oI,TIMESTAMP_ASSIGN_PREVIOUS:()=>aI,TIMESTAMP_PLACEHOLDER:()=>$d,TIMESTAMP_RECORD_PREVIOUS:()=>Zm,getUpdateRecord:()=>iS,handleLocalTimeForGets:()=>Wd});function VK(){return $l[0]=$l[0]^64,FK.getFloat64(0)}function Wd(e){let t=e.getEntry;e.readCount=0,e.cachePuts=!1,e.getEntry=function(i,o){e.readCount++;let c=t.call(this,i,o),l=c?.value,_=l?.[kl];return _>=0&&(c.metadataFlags=_,c.localTime=l.localTime,c.value=l.value,l.expiresAt>0&&(c.expiresAt=l.expiresAt)),c&&(c.key=i),c};let r=e.get;e.get=function(i,o){let c=r.call(this,i,o);return c?.[kl]>=0?c.value:c};let n=e.getRange;e.getRange=function(i){let o=n.call(this,i);return i.valuesForKey?o.map(c=>c?.value):i.values===!1||i.onlyCount?o:o.map(c=>{let l=c.value,_=l[kl];return _>=0&&(c.metadataFlags=_,c.localTime=l.localTime,c.value=l.value,l.expiresAt>0&&(c.expiresAt=l.expiresAt)),c})};let s=e.useReadTransaction();if(s.done(),!s.done.isTracked){let i=s.constructor,o=s.use,c=s.done;i.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,qo.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let l=0;l<qo.length;l++){let _=qo[l].deref();(!_||_.isDone||_.isCommitted)&&qo.splice(l--,1)}},i.prototype.done.isTracked=!0}return e}function iS(e,t,r){return function(n,s,i,o,c=-1,l,_,u,d="put",f,E){if(f||l==null?ec=i?.localTime?Zm|aI:Xm:ec=l?i?.localTime?Zm|16384:oI|16384:Xm,u>0&&(c|=nS),Yd=c,eS=u,i?.version===o&&l===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:ec>0},m;try{f&&(h.ifVersion=m=i?.version??null);let S=e.put(n,s,h);if(l){let R=_?.user?.username;if(E&&(Vd=e.encoder.encode(E)),f&&i?.localTime){let g=i?.localTime,A=r.get(g);if(A){let P=xt(A).previousLocalTime;return r.put(g,Kd(o,t,n,P,R,d,Vd),{ifVersion:m}),S}}r.put(Vl,Kd(o,t,n,i?.localTime?1:0,R,d,Vd),{append:d!=="invalidate",instructedWrite:!0,ifVersion:m})}return S}catch(S){throw S.message+=" id: "+n+" options: "+h,S}}}var iI,Jm,$d,Vl,rS,xK,kl,$l,FK,Xm,oI,kK,aI,Zm,nS,sS,$K,Vd,ec,Yd,eS,tS,qo,Yl=Ne(()=>{iI=require("msgpackr");Go();Jm=q(x()),$d=new Uint8Array([1,1,1,1,4,64,0,0]),Vl=new Uint8Array([1,1,1,1,1,0,0,0]),rS=new Uint8Array([1,1,1,1,3,64,0,0]),xK=Symbol("local-timestamp"),kl=Symbol("metadata"),$l=new Uint8Array(8),FK=new DataView($l.buffer,0,8),Xm=0,oI=0,kK=1,aI=3,Zm=4,nS=16,sS=1,ec=0,Yd=-1,eS=0,tS=class extends iI.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(n,s){if(ec||Yd>=0){let i=0,o=ec;o&&(i+=8,ec=0);let c=Yd,l=eS;c>=0&&(i+=2,Yd=-1,l&&(i+=8,eS=0));let _=$K=r.call(this,n,s|2048|i);Vd=_.subarray((_.start||0)+i,_.end);let u=_.start||0;return o&&($d[4]=o,$d[5]=o>>8,_.set($d,u),u+=8),c>=0&&(_[u++]=c,_[u++]=0,l&&(_.dataView||(_.dataView=new DataView(_.buffer,_.byteOffset,_.byteLength))).setFloat64(u,l)),_}else return r.call(this,n,s)}}decode(t,r){let n=r?.start||0,s=r>-1?r:r?.end||t.length,i=t[n],o=0;try{if(i<32&&s>2){let c=n,l;if(i===2){if(t.copy)t.copy($l,0,c),c+=8;else for(let d=0;d<8;d++)$l[d]=t[c++];l=VK(),i=t[c]}let _;i<32&&(o=i,c+=2,o&nS&&(_=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8));let u=super.decode(t.subarray(c,s),s-c);return{localTime:l,value:u,[kl]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(VK,"getTimestamp");a(Wd,"handleLocalTimeForGets");qo=[];setInterval(()=>{for(let e=0;e<qo.length;e++){let t=qo[e].deref();!t||t.isDone||t.isCommitted?qo.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(Jm.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):Jm.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(iS,"getUpdateRecord")});var gI={};$e(gI,{AUDIT_STORE_OPTIONS:()=>SI,createAuditEntry:()=>Kd,openAuditStore:()=>Jd,readAuditEntry:()=>xt,setAuditRetention:()=>KK,transactionKeyEncoder:()=>mI});function Jd(e){let t=e.auditStore=e.openDB(EI.AUDIT_STORE_NAME,SI);t.rootStore=e;let r=[];t.addDeleteRemovalCallback=function(i,o){return r[i]=o,{remove(){delete r[i]}}};let n=null;function s(i=Qd){clearTimeout(n),n=setTimeout(async()=>{if(t.rootStore.status==="closed")return;let o=0,c;try{for(let{key:l,value:_}of t.getRange({start:0,snapshot:!1,end:Date.now()-oS})){if((_[0]&15)===lS){let u=xt(_),d=u.tableId;r[d]?.(u.recordId)}if(c=t.remove(l),await new Promise(setImmediate),++o>=YK){i=10;break}}await c}finally{o===0&&(i=Math.min(i<<1,oS/10)),s(i)}},i).unref()}return a(s,"scheduleAuditCleanup"),t.scheduleAuditCleanup=s,(0,zd.getWorkerIndex)()===(0,zd.getWorkerCount)()-1&&s(Qd),t}function KK(e,t=Qd){oS=e,Qd=t}function Kd(e,t,r,n,s,i,o){let c=TI[i];if(!c)throw new Error(`Invalid audit entry type ${i}`);let l=1;n&&(n>1?tc.setFloat64(0,n):bn.set(rS),l=9),f(0),f(t),d(r),tc.setFloat64(l,e),l+=8,s?d(s):bn[l++]=0,bn[n?8:0]=c;let u=bn.subarray(0,l);if(o)return Buffer.concat([u,o]);return u;function d(E){let h=l;l+=1,l=(0,rc.writeKey)(E,bn,l);let m=l-h-1;m>127?m>16383?(_S.error("Key or username was too large for audit entry",E),l=h+1,bn[h]=0):(bn.copyWithin(h+2,h+1,l),tc.setUint16(h,m|32768),l++):bn[h]=m}function f(E){E<128?bn[l++]=E:E<16384?(tc.setUint16(l,E|32768),l+=2):E<1056964608?(tc.setUint32(l,E|3221225472),l+=4):(bn[l]=255,tc.setUint32(l+1,E),l+=5)}}function xt(e){try{let t=e.dataView||(e.dataView=new uS(e.buffer,e.byteOffset,e.byteLength)),r;e[0]==66&&(r=t.readFloat64());let n=t.readInt(),s=t.readInt(),i=t.readInt(),o=t.readInt(),c=t.position,l=t.position+=o,_=t.readFloat64();o=t.readInt();let u=t.position,d=t.position+=o;return{type:TI[n&7],tableId:i,get recordId(){return fI(e,c,l)},version:_,previousLocalTime:r,get user(){return d>u?fI(e,u,d):void 0},getValue(f,E,h){if(n&aS||n&cS&&!E)return f.decoder.decode(e.subarray(t.position));if(n&cS&&h)return dS(f.getEntry(this.recordId),h,f)}}}catch(t){return _S.error("Reading audit entry error",t,e),{}}}function fI(e,t,r){let n=e.subarray(t,r);return(0,rc.readKey)(n,0,r-t)}var rc,jd,EI,hI,zd,pI,_S,bn,tc,mI,SI,oS,YK,Qd,aS,cS,lI,lS,uI,_I,dI,TI,uS,Go=Ne(()=>{rc=require("ordered-binary"),jd=q(X()),EI=q(_t()),hI=q(C()),zd=q(tt()),pI=q(K());Yl();_S=q(x());Xd();(0,jd.initSync)();bn=Buffer.alloc(1024),tc=new DataView(bn.buffer,bn.byteOffset,1024),mI={writeKey(e,t,r){return e===Vl?(t.set(Vl,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,rc.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,rc.readKey)(e,t,r)}},SI={encoding:"binary",keyEncoder:mI},oS=(0,pI.convertToMS)((0,jd.get)(hI.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,YK=1e3,Qd=1e4;a(Jd,"openAuditStore");a(KK,"setAuditRetention");aS=16,cS=32,lI=1,lS=2,uI=3,_I=4,dI=5,TI={put:lI|aS,[lI]:"put",delete:lS,[lS]:"delete",message:uI|aS,[uI]:"message",invalidate:_I,[_I]:"invalidate",patch:dI|cS,[dI]:"patch"};a(Kd,"createAuditEntry");a(xt,"readAuditEntry");uS=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(fI,"readKeySafely")});var fS={};$e(fS,{add:()=>Zd,applyReverse:()=>RI,getRecordAtTime:()=>dS,rebuildUpdateBefore:()=>ef});function Zd(e,t,r){isNaN(e[t])?e[t]=r.value:e[t]+=r.value}function ef(e,t){let r=null;for(let n in e)if(n in t){let s=t[n];if(s?.__op__){let i=e[n];if(i?.__op__)if(i.__op__===s.__op__)r||(r={}),r[n]=i;else throw new Error("Can not merge updates with different operations");else r||(r={}),r[n]=i,Zd(r,n,s)}}else r||(r={}),r[n]=e[n];return r}function RI(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=WK[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=AI}}function dS(e,t,r){let n=r.rootStore.auditStore,s=Object.assign({},e.value),i=e.localTime;for(;i>t;){let l=n.get(i),_=xt(l);switch(_.type){case"put":s=_.getValue(r);break;case"patch":RI(s,_.getValue(r));break;case"delete":s=null}i=_.previousLocalTime}let o={},c=0;for(let l in s)s[l]===AI&&(o[l]=!0,c++);for(;c>0&&i>0;){let l=n.get(i),_=xt(l),u;switch(_.type){case"put":u=_.getValue(r);break;case"patch":u=_.getValue(r);break}for(let d in u)o[d]&&(s[d]=u[d],o[d]=!1,c--);i=_.previousLocalTime}if(c>0)for(let l in o)s[l]=null;return s}var WK,AI,Xd=Ne(()=>{Go();a(Zd,"add");Zd.reverse=function(e,t,r){isNaN(e[t])||(e[t]-=r.value)};WK={add:Zd};a(ef,"rebuildUpdateBefore");a(RI,"applyReverse");AI={};a(dS,"getRecordAtTime")});function Qr(e){return e[Dt]||(e[Dt]=Object.create(null))}function of(e,t){let r=e.prototype,n={},s=t.attributes||t.properties||[];for(let o of s){let c=o.name,l,_;if(o.resolve)_={get(){return o.resolve(this,this[be])},set(u){return o.set(this,u)},configurable:!0};else{switch(o.type){case"String":l=a(function(u){if(!(typeof u=="string"||u==null&&o.nullable!==!1))throw new yn.ClientError(`${c} must be a string, attempt to assign ${u}`);Qr(this)[c]=u},"set");break;case"ID":l=a(function(u){if(!(typeof u=="string"||u?.length>0&&u.every?.(d=>typeof d=="string")||u==null&&o.nullable!==!1))throw new yn.ClientError(`${c} must be a string, attempt to assign ${u}`);Qr(this)[c]=u},"set");break;case"Float":case"Number":l=a(function(u){if(!(typeof u=="number"||u==null&&o.nullable!==!1))throw new yn.ClientError(`${c} must be a number, attempt to assign ${u}`);Qr(this)[c]=u},"set");break;case"Int":l=a(function(u){if(!(u>>0===u||u==null&&o.nullable!==!1))if(typeof u=="number"&&Math.abs((u>>0)-u)<=1)u=Math.round(u);else throw new yn.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${u}`);Qr(this)[c]=u},"set");break;case"Long":l=a(function(u){if(!(Math.round(u)===u&&Math.abs(u)<=9007199254740992||u==null&&o.nullable!==!1))if(typeof u=="number"&&Math.abs(u)<=9007199254740992)u=Math.round(u);else throw new yn.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${u}`);Qr(this)[c]=u},"set");break;case"BigInt":l=a(function(u){if(!(typeof u=="bigint"||u==null&&o.nullable!==!1))if(typeof u=="string"||typeof u=="number")u=BigInt(u);else throw new yn.ClientError(`${c} must be a number, attempt to assign ${u}`);Qr(this)[c]=u},"set");break;case"Boolean":l=a(function(u){if(!(typeof u=="boolean"||u==null&&o.nullable!==!1))throw new yn.ClientError(`${c} must be a boolean, attempt to assign ${u}`);Qr(this)[c]=u},"set");break;case"Date":l=a(function(u){if(!(u instanceof Date||u==null&&o.nullable!==!1))if(typeof u=="string"||typeof u=="number")u=new Date(u);else throw new yn.ClientError(`${c} must be a Date, attempt to assign ${u}`);Qr(this)[c]=u},"set");break;case"Bytes":l=a(function(u){if(!(u instanceof Uint8Array||u==null&&o.nullable!==!1))throw new yn.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${u}`);Qr(this)[c]=u},"set");break;case"Any":case void 0:l=a(function(u){Qr(this)[c]=u},"set");break;default:l=a(function(u){if(!(typeof u=="object"||u==null&&o.nullable!==!1))throw new yn.ClientError(`${c} must be an object, attempt to assign ${u}`);Qr(this)[c]=u},"set")}_={get(){let u=this[Dt];if(u&&c in u){let f=u[c];if(f?.__op__){let E=this[fe]?.[c];return f.update(E)}return f}let d=this[fe]?.[c];if(d&&typeof d=="object"){let f=NI(d,o);if(f)return u||(u=this[Dt]=Object.create(null)),u[c]=f}return d},set:l,enumerable:!0,configurable:!0}}_.get.isAttribute=!0,n[c]=_,(!(c in r)||Object.getOwnPropertyDescriptor(r,c)?.get?.isAttribute)&&Object.defineProperty(r,c,_)}i("getProperty",function(o){let c=n[o];if(c)return c.get.call(this);let l=this[Dt];return l?.[o]!==void 0?l[o]:this[fe]?.[o]}),i("set",function(o,c){let l=n[o];if(l)return l.set.call(this,c);if(t.sealed)throw new yn.ClientError("Can not add a property to a sealed table schema");Qr(this)[o]=c}),i("deleteProperty",function(o){Qr(this)[o]=void 0}),i("toJSON",function(){let o=this[Dt],c;for(let _ in o){c||(c=Object.assign({},this[fe]));let u=o[_];if(u?.__op__){let d=c[_];u=u.update(d)}c[_]=u}return Object.keys(this).length>0&&(c||(c=Object.assign({},this[fe])),Object.assign(c,this)),c||this[fe]}),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 NI(e,t){let r;switch(e.constructor){case Object:return t?((r=t.TrackedObject)||(t.TrackedObject=r=class{static{a(this,"TrackedObject")}constructor(s){if(s?.[fe])throw new Error("Can not track an already tracked object, check for circular references");this[fe]=s}},of(r,t)),new r(e)):new tf(e);case Array:let n=new nf(e.length);n[fe]=e;for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=NI(o,t?.elements)),n[s]=o}return n;default:return e}}function af(e){let t=e[Dt],r;for(let s in t){r||(r=Object.assign({},e[fe]));let i=t[s];if(i&&typeof i=="object")if(i.__op__){let o=r[s];i=i.update(o)}else i=af(i);r[s]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[fe])),Object.assign(r,e)),r||e[fe]}function Fo(e,t=e[Dt]){let r;if(OI.call(e,fe)&&e.constructor===Array&&!Object.isFrozen(e)){r=e;for(let n=0,s=e.length;n<s;n++){let i=e[n];if(i&&typeof i=="object"){let o=Fo(i);o!==i&&r===e&&(r=e.slice(0)),i=o}r[n]=i}return Object.freeze(r)}for(let n in t){r||(r=Object.assign({},e[fe]));let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=fS[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=Fo(s);r[n]=s}return r?Object.freeze(r):OI.call(e,fe)?e[fe]:e}function rf(e){let t=e[fe];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[xo]||e.length!==t.length)return!0;for(let r=0,n=e.length;r<n;r++){let s=t[r],i=e[r];if(s&&i?.[fe]===s){if(rf(i))return!0}else return!0}}else{let r=e[Dt];if(r&&!t)return!0;for(let n in r){let s=r[n];if(s&&typeof s=="object"){let i=t[n];if(i&&s[fe]===i){if(rf(s))return!0}else return!0}else return!0}}return!1}var yn,Dt,tf,OI,xo,nf,sf,cf=Ne(()=>{Qn();yn=q(ie());Xd();Dt=Symbol("own-data");a(Qr,"getChanges");a(of,"assignTrackedAccessors");a(NI,"trackObject");tf=class{static{a(this,"GenericTrackedObject")}constructor(t){if(t?.[fe])throw new Error("Can not track an already tracked object, check for circular references");this[fe]=t}};of(tf,{});a(af,"collapseData");OI=Object.prototype.hasOwnProperty;a(Fo,"deepFreeze");a(rf,"hasChanges");xo=Symbol.for("has-array-changes"),nf=class extends Array{static{a(this,"TrackedArray")}[xo];constructor(t){super(t)}splice(...t){return this[xo]=!0,super.splice(...t)}push(...t){return this[xo]=!0,super.push(...t)}pop(){return this[xo]=!0,super.pop()}unshift(...t){return this[xo]=!0,super.unshift(...t)}shift(){return this[xo]=!0,super.shift()}};nf.prototype.constructor=Array;sf=class{constructor(t){this.value=t}static{a(this,"Addition")}__op__="add";update(t){return(+t||0)+this.value}}});function XK(){JK=setInterval(function(){for(let e of ES)if(e.stale){let t=e[be]?.url;II.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},zK).unref()}var hS,yI,II,QK,ES,jK,Kl,bI,ko,lf,zK,JK,pS=Ne(()=>{hS=q(Tr()),yI=q(ie()),II=q(x());Qn();QK=100,ES=new Set,jK=25e3,ko=class e{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;open=1;getReadTxn(){if(this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn)return this.readTxn.openTimer&&(this.readTxn.openTimer=0),this.readTxn;if(this.open===1)return this.readTxnsUsed=1,this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxn.openTimer&&(this.readTxn.openTimer=0),ES.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(ES.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(Kl&&performance.now()-bI>jK)throw new yI.ServerError("Outstanding write transactions have too long of queue, please try again later",503)}addWrite(t){if(this.open===0)throw new Error("Can not use a transaction that is no longer open");if(this.open===2){let r=new e;return r.addWrite(t),r.commit({})}else 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,hS.getNextMonotonicTime)());let n=t.retries||0;if(this.validated<this.writes.length)try{let u=this.validated;this.validated=this.writes.length;for(let f=u;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let d;for(let f=u;f<this.validated;f++){let E=this.writes[f];E&&(E.before||E.beforeIntermediate)&&(d=!0)}if(d)return(async()=>{try{for(let f=0;f<2;f++){let E;for(let h=u;h<this.validated;h++){let m=this.writes[h];if(!m)continue;let S=m[f===0?"before":"beforeIntermediate"];if(S){let R=S();E?E.push?E.push(R):E=[E,R]:E=R}}E&&await(E.push?Promise.all(E):E)}}catch(f){throw this.abort(),f}return this.commit(t)})()}catch(u){throw this.abort(),u}n||this.doneReadTxn(),this.open=t?.letItLinger?2:0;let s,i=[],o=0;this.writes=this.writes.filter(u=>u);let c=a(u=>{u.commit(r,u.entry,n)},"doWrite"),l=a(()=>{let u=this.writes[o++];if(u)if(u.key){n>0&&(u.entry=u.store.getEntry(u.key));let d=u.store.ifVersion(u.key,u.entry?.version??null,l);s=s||d}else l();else for(let d of this.writes)c(d)},"nextCondition");if(this.writes.length<QK>>n?l():s=this.writes[0].store.transaction(()=>{for(let u of this.writes)u.entry=u.store.getEntry(u.key),c(u);return!0}),s)return Kl||(Kl=s,bI=performance.now(),Kl.then(()=>{Kl=null})),s.then(u=>u?(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=n+1:t={retries:1},this.commit(t)));let _={txnTime:r};if(this.next){let u=this.next?.commit(t);if(u?.then)return u?.then(d=>({txnTime:r,next:d}));_.next=u}return _}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=0,this.writes=[]}},lf=class extends ko{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,hS.getNextMonotonicTime)())}getReadTxn(){}},zK=3e4;a(XK,"startMonitoringTxns");XK()});function Ze(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===1&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let n=e.transaction=new ko;e.timestamp&&(n.timestamp=e.timestamp),n[be]=e,e.resourceCache||(e.resourceCache=[]);let s;try{if(s=t(n),s?.then)return s.then(i,o)}catch(c){o(c)}return i(s);function i(c){let l=n.commit({letItLinger:r?.letItLinger});return l.then?l.then(()=>c):c}function o(c){throw n.abort({}),c}}var wI,$o=Ne(()=>{wI=require("../index");Qn();pS();a(Ze,"transaction");(0,wI._assignPackageExport)("transaction",Ze);Ze.commit=function(e){let t=(e[be]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Ze.abort=function(e){let t=(e[be]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});function TS(e,t,r,n,s,i,o,c){let l=e[0];if(t==="or"){let d=_(l);for(let E=1;E<e.length;E++){let h=e[E],m=_(h);d=d.concat(m)}let f=new Set;return d.filter(E=>{let h=E.key??E;return f.has(h)?!1:(f.add(h),!0)})}else{let d=_(l),f=u(e.slice(1),!0,l.estimated_count);return f.length>0?o(d,f):d}function _(d){return d.conditions?TS(d.conditions,d.operator,r,n,s,i,o,c):ic(d,n,d.descending||s.reverse===!0,r,s.allowFullScan,c)}a(_,"executeCondition");function u(d,f,E){return d.map((h,m)=>{if(h.conditions){let g=h.operator==="or",A=u(h.conditions,!g,E);return g?(P,v)=>A.some(U=>U(P,v)):(P,v)=>A.every(U=>U(P,v))}let S=(h.attribute||h[0])===r.primaryKey,R=RS(h,r,i,c,S,E);return f&&m<d.length-1&&E&&(E=aW(r.primaryStore,h.estimated_count,E)),R}).filter(Boolean)}a(u,"mapConditionsToFilters")}function ic(e,t,r,n,s,i){let o=e[0]??e.attribute,c=e[1]??e.value,l=e.comparator;if(Array.isArray(o)){let g=o[0],A=ti(n.attributes,g);if(A.relationship){if(o.length<2)throw new jr.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let P=A.definition?.tableClass||A.elements?.definition?.tableClass,v=new Map,U=ic({attribute:o.length>2?o.slice(1):o[1],value:c,comparator:l},t,r,P,s,v);if(A.relationship.to){i[o[0]]=v;let F=!!ti(P.attributes,A.relationship.to)?.elements;U=nW(U,A,P.primaryStore,F,v)}if(A.relationship.from){let F=a(H=>ic({attribute:A.relationship.from,value:H},t,r,n,s,v),"searchEntry");A.elements?(i[o[0]]=v,U=sW(U,A,P.primaryStore,v,F)):U=U.flatMap(F)}return U}else if(o.length===1)o=o[0];else throw new jr.ClientError("Unable to query by attribute "+JSON.stringify(o))}let _,u,d,f;c instanceof Date&&(c=c.getTime());let E;switch(gS[l]||l){case"lt":_=!0,u=c;break;case"le":_=!0,u=c,d=!0;break;case"gt":_=c,f=!0;break;case"ge":_=c;break;case"prefix":Array.isArray(c)?c[c.length-1]!=null&&(c=c.concat(null)):c=[c,null],_=c,u=c.slice(0),u[u.length-1]=Os.MAXIMUM_KEY;break;case"starts_with":_=c.toString(),u=c+"\uFFFF";break;case"between":_=c[0],_ instanceof Date&&(_=_.getTime()),u=c[1],u instanceof Date&&(u=u.getTime()),d=!0;break;case"equals":case void 0:_=c,u=c,d=!0;break;case"ne":if(c===null){_=c,f=!0;break}case"sort":case"contains":case"ends_with":_=!0,E=!0;break;default:throw new jr.ClientError(`Unknown query comparator "${l}"`)}if(r){let g=_;_=u,u=g,g=!f,f=!d,d=g}let h=o===n.primaryKey||o==null,m=h?n.primaryStore:n.indices[o],S;if(!m||m.isIndexing||E||c===null&&!m.indexNulls){if(s===!1&&!m)throw new jr.ClientError(`"${o}" is not indexed, can not search for this attribute`,404);if(s===!1&&E)throw new jr.ClientError(`Can not use ${l||"equal"} operator without combining with a condition that uses an index, can not search for attribute ${o}`,403);if(m?.isIndexing)throw new jr.ServerError(`"${o}" is not indexed yet, can not search for this attribute`,503);if(c===null&&!m.indexNulls)throw new jr.ClientError(`"${o}" is not indexed for nulls, index needs to be rebuilt to search for nulls, can not search for this attribute`,400);if(S=RS(e),!S)throw new jr.ClientError(`Unknown search operator ${e.comparator}`)}let R={start:_,end:u,inclusiveEnd:d,exclusiveStart:f,values:!0,versions:h,transaction:t,reverse:r};if(h){let g=m.getRange(R).map(S?function({key:A,value:P}){return this.isSync?P&&S(P)?A:$i.SKIP:new Promise((v,U)=>setImmediate(()=>{try{v(P&&S(P)?A:$i.SKIP)}catch(F){U(F)}}))}:A=>A.value==null?$i.SKIP:A);return g.hasEntries=!0,g}else return m?m.getRange(R).map(S?function({key:g,value:A}){return this.isSync?S({[o]:g})?A:$i.SKIP:new Promise((P,v)=>setImmediate(()=>{try{P(S({[o]:g})?A:$i.SKIP)}catch(U){v(U)}}))}:({value:g})=>g):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:g,value:A}){return this.isSync?A&&S(A)?g:$i.SKIP:new Promise((P,v)=>setImmediate(()=>{try{P(A&&S(A)?g:$i.SKIP)}catch(U){v(U)}}))})}function ti(e,t){if(Array.isArray(t))if(t.length>1){let r=ti(e,t[0]),n=(r?.definition?.tableClass||r?.elements.definition?.tableClass)?.attributes;return n?ti(n,t.slice(1)):void 0}else t=t.toString();else typeof t!="string"&&(t=t.toString());return e.find(r=>r.name===t)}function nW(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i;s.hasMappings=!0;let o;return{next(){if(!i){let l=t.relationship.to,_=a((u,d)=>{let f=u;Array.isArray(u)&&(f=jn(u),o=!0);let E=s.get(f);E?E.push(d):s.set(f,E=[d]),u!==f&&(E.key=u)},"add_entry");for(let u of e){let d=u.value??r.get(u.key??u),f=d?.[l];if(f!=null&&!s.filters?.some(E=>!E(d)))if(n)for(let E=0;E<f.length;E++)_(f[E],u);else _(f,u)}return i=(o?s:s.keys())[Symbol.iterator](),this.next()}let c=i.next();return c.done?c:{value:o?c.value[1].key||c.value[0]:c.value}}}}})}function sW(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i,o,c=new Set;return{next(){let l;if(o)for(;l=o.next(),!l.done;){let _=jn(l.value);if(!c.has(_))return c.add(_),l}if(!i){let _=new Map;n.fromRecord=u=>u[t.relationship.from]?.filter?.(d=>_.has(jn(d)));for(let u of e){if(n.filters){let d=r.get(u);if(n.filters.some(f=>!f(d)))continue}_.set(jn(u),u)}return i=_.values()[Symbol.iterator](),this.next()}do{let _=i.next();return _.done?_:(o=s(_.value)[Symbol.iterator](),this.next())}while(!0)},return(){return o?.return?.()},throw(){return o?.throw?.()}}}})}function RS(e,t,r,n,s,i){let o=e.comparator,c=e[0]??e.attribute,l=e[1]??e.value;if(Array.isArray(c)){if(c.length===0)return()=>!0;if(c.length===1)c=c[0];else if(c.length>1){let u=c[0],d=ti(t.attributes,u),f=d.definition?.tableClass||d.elements.definition?.tableClass,E=n?.[u],h=RS({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:o},f,r,E?.[u]?.joined,c[1]===f.primaryKey,i);if(!h)return;if(E){E.filters||(E.filters=[]),E.filters.push(h);return}let m=t.propertyResolvers?.[u],S,R=a((g,A)=>{let P,v;if(m){if(m.from&&h.idFilter){if(!S)if(h.idFilter.idSet?.size===1){for(let F of h.idFilter.idSet)e={attribute:m.from,value:F};S=_(m.from,h.idFilter,!0,!0)}else S=_(m.from,h.idFilter,!1,!0);let U=S(g);return S.idFilter&&(R.idFilter=S.idFilter),U}v=m(g,r,A),P=v?.value}else P=g[u];return P?Array.isArray(P)?P.some(h):h(P,v):!1},"recordFilter");return R}}switch(l instanceof Date&&(l=l.getTime()),gS[o]||o){case mS.SEARCH_TYPES.EQUALS:case void 0:return _(c,u=>u===l,!0);case"contains":return _(c,u=>u?.toString().includes(l));case"ends_with":return _(c,u=>u?.toString().endsWith(l));case"starts_with":return _(c,u=>typeof u=="string"&&u.startsWith(l),!0);case"prefix":return Array.isArray(l)?l[l.length-1]==null&&(l=l.slice(0,-1)):l=[l],_(c,u=>{if(!Array.isArray(u))return!1;for(let d=0,f=l.length;d<f;d++)if(u[d]!==l[d])return!1;return!0},!0);case"between":return l[0]instanceof Date&&(l[0]=l[0].getTime()),l[1]instanceof Date&&(l[1]=l[1].getTime()),_(c,u=>(0,Os.compareKeys)(u,l[0])>=0&&(0,Os.compareKeys)(u,l[1])<=0,!0);case"gt":return _(c,u=>(0,Os.compareKeys)(u,l)>0);case"ge":return _(c,u=>(0,Os.compareKeys)(u,l)>=0);case"lt":return _(c,u=>(0,Os.compareKeys)(u,l)<0);case"le":return _(c,u=>(0,Os.compareKeys)(u,l)<=0);case"ne":return _(c,u=>(0,Os.compareKeys)(u,l)!==0);case"sort":return()=>!0;default:throw new jr.ClientError(`Unknown query comparator "${o}"`)}function _(u,d,f,E){let h;f=f&&!s&&t?.indices[u]&&i>3,f&&(e.estimated_count==null&&_f(t)(e),h=e.estimated_count>>4,(isNaN(h)||h>=i)&&(f=!1));let m=0,S=3;function R(g){let A=g[u],P;if(typeof A!="object"||!A||E?P=d(A):Array.isArray(A)?P=A.some(d):A instanceof Date&&(P=d(A.getTime())),f&&(S++,!P&&!R.idFilter&&++m/S*(i-S)>h)){let v=ic(e,r.transaction.getReadTxn(),!1,t).map(jn),U=new Set(v);R.idFilter=F=>U.has(jn(F)),R.idFilter.idSet=U}return P}return a(R,"recordFilter"),s&&(R.idFilter=d),R}a(_,"attributeComparator")}function _f(e){function t(r){if(r.estimated_count===void 0){if(r.conditions){let s;if(r.operator==="or"){s=0;for(let i of r.conditions)t(i),s+=i.estimated_count}else{s=1/0;for(let i of r.conditions)t(i),s=isFinite(s)?s*i.estimated_count/ei(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=gS[n]||n,n===mS.SEARCH_TYPES.EQUALS||!n){let s=r[0]??r.attribute;if(s==null||s===e.primaryKey)r.estimated_count=1;else if(Array.isArray(s)&&s.length>1){let i=ti(e.attributes,s[0]),o=i.definition?.tableClass||i.elements.definition?.tableClass,c=_f(o)({value:r.value,attribute:s.length>2?s.slice(1):s[1],comparator:"equals"}),l=e.indices[i.relationship.from];r.estimated_count=c+(l?c*ei(e.indices[i.relationship.from])/(ei(o.primaryStore)||1):c)}else{let i=e.indices[s];r.estimated_count=i?i.getValuesCount(r[1]??r.value):1/0}}else if(n==="contains"||n==="ends_with"||n==="ne"){let s=r[0]??r.attribute,i=e.indices[s];r.value===null&&n==="ne"?r.estimated_count=ei(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else n==="starts_with"||n==="prefix"?r.estimated_count=tW*ei(e.primaryStore)+1:n==="between"?r.estimated_count=eW*ei(e.primaryStore)+1:n==="sort"?r.estimated_count=ei(e.primaryStore)+1:r.estimated_count=ZK*ei(e.primaryStore)+1;typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return a(t,"estimateConditionForTable"),t}function df(e){if(e)if(Vi=e,nc.lastIndex=0,iW.test(e))try{let t=Wl(new sc,"");if(gr!==Vi.length)throw new SyntaxError("Unable to parse query, unexpected end of query");return t}catch(t){throw t.statusCode=400,t.message=`Unable to parse query, ${t.message} at position ${gr} in '${Vi}'`,t}else{let t=new URLSearchParams(e);return t.conditions=t,t}}function Wl(e,t){let r=nc,n,s,i,o,c,l=decodeURIComponent,_;for(;n=r.exec(Vi);){gr=r.lastIndex;let[,u,d]=n;if(o){if(u)throw new SyntaxError(`expected operator, but encountered '${u}'`);o=!1,c=!1}else c=!0;let f;switch(d){case"=":if(s){if(u.length<=2)i=u;else throw new SyntaxError(`invalid FIQL operator ${u}`);l=CI}else{if(l=decodeURIComponent,i="equals",!u)throw new SyntaxError("attribute must be specified before equality comparator");s=Ql(u)}break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":if(i=rW[d],l=SS[i]?CI:decodeURIComponent,!u)throw new SyntaxError(`attribute must be specified before comparator ${d}`);s=Ql(u);break;case"|":case"&":case"":case void 0:if(s==null){if(s===void 0)throw t?new SyntaxError(`expected '${t}', but encountered ${d[0]?"'"+d[0]+"'":"end of string"}}`):new SyntaxError(`no comparison specified before ${d?"'"+d+"'":"end of string"}`)}else{if(!e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");let h={comparator:i,attribute:s,value:l(u)};i==="eq"&&LI(h,u),uf(e,_),e.conditions.push(h)}d==="&"&&(_="and"),d==="|"&&(_="or"),s=void 0;break;case",":if(e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");e.push(Ql(u)),s=void 0;break;case"(":nc.lastIndex=gr;let E=Wl(u?[]:new sc,")");switch(u){case"":uf(e,_),e.conditions.push(E);break;case"limit":switch(E.length){case 1:e.limit=+E[0];break;case 2:e.offset=+E[0],e.limit=E[1]-e.offset;break;default:throw new SyntaxError("limit must have 1 or 2 arguments")}break;case"select":Array.isArray(E[0])&&E.length===1&&!E[0].name?(e.select=E[0],e.select.asArray=!0):E.length===1?e.select=E[0]:E.length===2&&E[1]===""?e.select=E.slice(0,1):e.select=E;break;case"group-by":throw new SyntaxError("group by is not implemented yet");case"sort":e.sort=DI(E);break;default:throw new SyntaxError(`unknown query function call ${u}`)}Vi[gr]===","?r.lastIndex=++gr:o=!0,s=null;break;case"{":if(e.conditions)throw new SyntaxError("property sets are not allowed in a queries");if(!u)throw new SyntaxError("property sets must have a defined parent property name");nc.lastIndex=gr,f=Wl([],"}"),f.name=u,e.push(f),Vi[gr]===","?r.lastIndex=++gr:o=!0;break;case"[":nc.lastIndex=gr,u?(f=Wl(new sc,"]"),f.name=u):f=Wl(e.conditions?new sc:[],"]"),e.conditions?(uf(e,_),e.conditions.push(f),s=null):e.push(f),Vi[gr]===","?r.lastIndex=++gr:o=!0;break;case")":case"]":case"}":if(t===d[0]){if(e.conditions){if(s){let h={comparator:i||"equals",attribute:s,value:l(u)};i==="eq"&&LI(h,u),uf(e,_),e.conditions.push(h)}else if(u)throw new SyntaxError("no attribute or comparison specified")}else(u||e.length>0&&c)&&e.push(Ql(u));return e}else throw t?new SyntaxError(`expected '${t}', but encountered '${d[0]}'`):new SyntaxError(`unexpected token '${d[0]}'`);default:throw new SyntaxError(`unexpected operator '${d}'`)}if(t!==")"&&(r=s?oW:nc,r.lastIndex=gr),gr===Vi.length)return e}if(t)throw new SyntaxError(`expected '${t}', but encountered end of string`)}function uf(e,t){if(e.conditions.length>0)if(e.operator){if(e.operator!==t)throw new SyntaxError("Can not mix operators within a condition grouping")}else e.operator=t}function Ql(e){return e.indexOf(".")>-1?e.split(".").map(Ql):decodeURIComponent(e)}function CI(e){if(e==="null")return null;if(e.indexOf(":")>-1){let[t,r]=e.split(":");if(t==="number")return+r;if(t==="boolean")return r==="true";if(t==="date")return new Date(decodeURIComponent(r));if(t==="string")return decodeURIComponent(r);throw new jr.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function LI(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new jr.ClientError("wildcard can only be used at the end of a string")}function DI(e){let t=PI(e[0]);return e.length>1&&(t.next=DI(e.slice(1))),t}function PI(e){if(Array.isArray(e)){let t=PI(e[0]);return e[0]=t.attribute,t.attribute=e,t}if(typeof e=="string")switch(e[0]){case"-":return{attribute:e.slice(1),descending:!0};case"+":return{attribute:e.slice(1),descending:!1};default:return{attribute:e,descending:!1}}throw new SyntaxError(`Unknown sort type ${e}`)}function jn(e){return Array.isArray(e)?e.join("\0"):e}function ei(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function aW(e,t,r){return t*r/ei(e)}var jr,mS,Os,$i,ZK,eW,tW,rW,SS,gS,iW,nc,oW,gr,Vi,sc,ff=Ne(()=>{jr=q(ie()),mS=q(_t()),Os=require("ordered-binary"),$i=require("lmdb"),ZK=.3,eW=.1,tW=.05,rW={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},SS={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};a(TS,"executeConditions");a(ic,"searchByIndex");a(ti,"findAttribute");a(nW,"joinTo");a(sW,"joinFrom");gS={eq:"equals",greater_than:"gt",greaterThan:"gt",greater_than_equal:"ge",greaterThanEqual:"ge",less_than:"lt",lessThan:"lt",less_than_equal:"le",lessThanEqual:"le",not_equal:"ne",notEqual:"ne",equal:"equals",sw:"starts_with",startsWith:"starts_with",ew:"ends_with",endsWith:"ends_with",ct:"contains",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(RS,"filterByType");a(_f,"estimateCondition");iW=/[()[\]|!<>.]|(=\w*=)/,nc=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,oW=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;a(df,"parseQuery");a(Wl,"parseBlock");a(uf,"assignOperator");a(Ql,"decodeProperty");a(CI,"typedDecoding");a(LI,"wildcardDecoding");a(DI,"toSortObject");a(PI,"toSortEntry");sc=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 n=this.conditions[r];if(n.attribute===t)return n.value}}};a(jn,"flattenKey");a(ei,"estimatedEntryCount");a(aW,"intersectionEstimate")});var NS={};$e(NS,{CONTEXT:()=>be,ID_PROPERTY:()=>Ue,IS_COLLECTION:()=>In,RECORD_PROPERTY:()=>fe,Resource:()=>jt,snake_case:()=>lW,transformForSelect:()=>hf});function lW(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function MI(e,t){if(jl=!1,e==="")return null;if(e=e.slice(1),e.indexOf("/")===-1)return e===""?(jl=!0,null):(e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e)));let r=e.split("/"),n=new OS;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){jl=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}function zr(e,t){n.reliesOnPrototype=!0;let r=t.hasContent;return n;function n(s,i,o){let c,l,_,u;if(r?(o?(u=i,o=o[be]||o):i?typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(u=s,c=u[this.primaryKey]??null,o=i[be]||i):u=i:(u=s,c=u[Ue]??u[this.primaryKey]??null),c==null&&(_=!0)):i?o=i[be]||i:s&&typeof s=="object"&&!Array.isArray(s)&&(o=s),c===void 0)if(typeof s=="string")c=s;else if(typeof s=="object"&&s)if(l=s,s[Symbol.iterator]){c=[],_=!0;for(let E of s){if(typeof E=="object"&&E)break;c.push(E)}c.length===0?c=null:(c.length===1&&(c=c[0]),l.slice&&(l=l.slice(c.length,l.length),l.length===0&&(l=null,_=!1)))}else{if(typeof(c=s.url)=="string"){let E=c.indexOf("?");if(E>-1){let m=this.parseQuery(c.slice(E+1));l?l=Object.assign(m,l):l=m,c=c.slice(0,E)}let h=this.parsePath(c,o,l);h?.id!==void 0?(h.query&&(l?l=Object.assign(h.query,l):l=h.query),_=h.isCollection,c=h.id):c=h}c===void 0&&(c=s.id??null,c==null&&(_=!0))}else c=s??null,c==null&&(_=!0);o||(o={});let d;if(l?.ensureLoaded!=null||l?.async||_?(d=Object.assign({},t),l?.ensureLoaded!=null&&(d.ensureLoaded=l.ensureLoaded),l?.async&&(d.async=l.async),_&&(d.isCollection=!0)):d=t,o.transaction){let E=this.getResource(c,o,d);return E.then?E.then(f):f(E)}else return Ze(o,()=>{let E=this.getResource(c,o,d);return E.then?E.then(f):f(E)},d);function f(E){if(o.authorize){o.authorize=!1;let h=t.type==="read"?E.allowRead(o.user,l,o):t.type==="update"?E.doesExist?.()===!1?E.allowCreate(o.user,u,o):E.allowUpdate(o.user,u,o):t.type==="create"?E.allowCreate(o.user,u,o):E.allowDelete(o.user,l,o);if(h?.then)return h.then(m=>{if(!m)throw new Ef(o.user);return typeof u?.then=="function"?u.then(S=>e(E,l,o,S)):e(E,l,o,u)});if(!h)throw new Ef(o.user)}return typeof u?.then=="function"?u.then(h=>e(E,l,o,h)):e(E,l,o,u)}a(f,"authorizeActionOnResource")}}function Jr(e,t){let r=new BI.ClientError(`The ${e.constructor.name} does not have a ${t} method implemented`,405);r.allow=[],r.method=t;for(let n of["get","put","post","delete","query","move","copy"])typeof e[n]=="function"&&r.allow.push(n);throw r}function AS(e,t,r){let n=e[fe];if(n){let s=e[Dt];return i=>{let o,c;return e.hasOwnProperty(i)&&typeof(o=e[i])!="function"?o:s&&i in s?s[i]:(c=t?.[i])?c(e,r):n[i]}}else return t?s=>{let i=t[s];return i?i(e,r):e[s]}:s=>e[s]}function hf(e,t){let r=t?.propertyResolvers,n=t[be],s;if(typeof e=="string")return a(function o(c){return c.then?c.then(o):Array.isArray(c)?c.map(o):AS(c,r,n)(e)},"transform");if(typeof e=="object"){if(e.asArray)return a(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(c);let _=[],u=i(AS(l,r,n));for(let d of e)_.push(u(d));return _},"transform");let o=e.forceNulls;return a(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(f=>f&&typeof f=="object"?c(f):f);let _={},u=i(AS(l,r,n)),d;for(let f of e){let E=u(f);E===void 0&&o&&(E=null),E?.then?(d||(d=[]),d.push(E.then(h=>_[f.name||f]=h))):_[f.name||f]=E}return d?Promise.all(d).then(()=>_):_},"transform")}else throw new Error("Invalid select argument type "+typeof e);function i(o){return c=>{if(typeof c=="string")return o(c);if(typeof c=="object")if(c.name){s||(s={});let l=s[c.name];if(!l){let u=r[c.name]?.definition?.tableClass;l=s[c.name]=hf(c.select||c,u)}let _=o(c.name);return l(_)}else return o(c);else return c}}a(i,"handleProperty")}var UI,vI,BI,be,Ue,In,fe,cW,jt,Ef,jl,OS,Qn=Ne(()=>{UI=require("crypto");Fl();vI=require("../index"),BI=q(ie());cf();$o();ff();be=Symbol.for("context"),Ue=Symbol.for("primary-key"),In=Symbol("is-collection"),fe=Symbol("stored-record"),cW={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},jt=class{static{a(this,"Resource")}static transactions;constructor(t,r){this[Ue]=t;let n=r?.[be];this[be]=n!==void 0?n:r||null}static get=zr(function(t,r,n,s){let i=t.get?.(r);if(i?.then)return i.then(o);return o(i);function o(c){let l;if((l=r?.select)&&c!=null&&!c.selectApplied){let _=hf(l,t.constructor);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",letItLinger:!0,ensureLoaded:!0,async:!0});static put=zr(function(t,r,n,s){if(Array.isArray(s)&&t[In]){let i=[],o=n.authorize;for(let c of s){let l=t.constructor,_=l.getResource(c[l.primaryKey],n,{async:!0});_.then?i.push(_.then(u=>u.put(c,n))):i.push(_.put(c,n))}return Promise.all(i)}return t.put?t.put(s,r):Jr(t,"put")},{hasContent:!0,type:"update"});static patch=zr(function(t,r,n,s){return t.patch?t.patch(s,r):Jr(t,"patch")},{hasContent:!0,type:"update"});static delete=zr(function(t,r,n,s){return t.delete?t.delete(r):Jr(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,UI.randomUUID)()}static create(t,r,n){let s;return t==null?s=this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?s=[...t,this.getNewId()]:typeof t!="object"?s=[t,this.getNewId()]:(s=this.getNewId(),n=r,r=t),Ze(n,()=>{let i=new this(s,n),o=i.update?i.update(r):Jr(i,"update");return n.newLocation=s,n.createdResource=!0,o?.then?o.then(()=>s):s})}static invalidate=zr(function(t,r,n,s){return t.invalidate?t.invalidate(r):Jr(t,"delete")},{hasContent:!1,type:"update"});static post=zr(function(t,r,n,s){return t[Ue]!=null&&t.update?.(),t.post(s,r)},{hasContent:!0,type:"create"});static connect=zr(function(t,r,n,s){return t.connect?t.connect(s,r):Jr(t,"connect")},{hasContent:!0,type:"read"});static subscribe=zr(function(t,r,n,s){return t.subscribe?t.subscribe(r):Jr(t,"subscribe")},{type:"read"});static publish=zr(function(t,r,n,s){return t[Ue]!=null&&t.update?.(),t.publish?t.publish(s,r):Jr(t,"publish")},{hasContent:!0,type:"create"});static search=zr(function(t,r,n,s){let i=t.search?t.search(r):Jr(t,"search"),o=n.select;if(o&&n.hasOwnProperty("select")&&i!=null&&!i.selectApplied){let c=hf(o,t.constructor);return i.map(c)}return i},{type:"read"});static query=zr(function(t,r,n,s){return t.search?t.search(s,r):Jr(t,"search")},{hasContent:!0,type:"read"});static copy=zr(function(t,r,n,s){return t.copy?t.copy(s,r):Jr(t,"copy")},{type:"create"});static move=zr(function(t,r,n,s){return t.move?t.move(s,r):Jr(t,"move")},{type:"delete"});post(t){if(this[In])return this.constructor.create(this[Ue],t,this[be]);Jr(this,"post")}static isCollection(t){return t?.[In]}static coerceId(t){return t}static parseQuery(t){return df(t)}static parsePath(t,r,n){let s=t.indexOf(".");if(s>-1){let o=t.slice(s+1);t=t.slice(0,s);let c=r?.headers&&cW[o];if(c)r.headers.set("accept",c);else if(n)n.property=o;else return{query:{property:o},id:MI(t,this),isCollection:jl}}let i=MI(t,this);return jl?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r[be],o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=n?.isCollection;let c=o&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let l;if(i.resourceCache?l=i.resourceCache:l=i.resourceCache=[],l.asMap){let _=l.asMap.get(t);if(s=_?.find(u=>u.constructor===c),s)return s;_||l.asMap.set(t,_=[]),_.push(s=new c(t,i))}else{if(s=l.find(_=>_[Ue]===t&&_.constructor===c),s)return s;if(l.push(s=new c(t,i)),l.length>10){let _=new Map;for(let u of l){let d=u[Ue],f=_.get(d);f?f.push(u):_.set(d,[u])}i.resourceCache.length=0,i.resourceCache.asMap=_}}}else s=new c(t,i);return o&&(s[In]=!0),s}subscribe(t){return new Wn}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new Wn}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[Ue]}getContext(){return this[be]}};jt.prototype[be]=null;(0,vI._assignPackageExport)("Resource",jt);a(lW,"snake_case");Ef=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(MI,"pathToId");OS=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(zr,"transactional");a(Jr,"missingMethod");a(AS,"selectFromObject");a(hf,"transformForSelect")});var HI={};$e(HI,{Resources:()=>pf,keyArrayToString:()=>oc,resetResources:()=>uW,resources:()=>Yi});function uW(){return Yi=new pf}function oc(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var pf,Yi,zl=Ne(()=>{$o();pf=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;set(t,r,n,s){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,type:n,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!s)throw new Error(`Conflicting paths for ${t}`);super.set(t,i);for(let[c,l]of this){let _=2;for(;(_=c.indexOf("/",_))>-1;){let u=this.get(c.slice(0,_));u&&(u.hasSubPaths=!0),_+=2}}}getMatch(t,r){let n=2,s;for(;(n=t.indexOf("/",n))>-1;){let c=t.slice(0,n),l=this.get(c);if(l){if(l.relativeURL=t.slice(n),!l.hasSubPaths)return l;s=l}n+=2}if(s)return s;let i=t.indexOf("?"),o=i>-1?t.slice(0,i):t;return s=this.get(o),s?s.relativeURL=i>-1?t.slice(i):"":s||(s=this.get(""),s&&(t[0]!=="/"&&(t="/"+t),s.relativeURL=t)),s}getResource(t,r){let n=this.getMatch(t);if(n)return t=n.relativeURL,n.Resource.getResource(this.pathToId(t,n.Resource),r)}call(t,r,n){return Ze(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};a(uW,"resetResources");a(oc,"keyArrayToString")});function GI(e,t,r,n){let s=e.primaryStore.env.path,i=e.primaryStore.tableId;ac||((0,mf.onMessageByType)(qI,u=>{xI(u.path)}),ac=Object.create(null));let o=ac[s]||(ac[s]=[]);o.auditStore=e.auditStore,o.lastTxnTime==null&&(o.lastTxnTime=Date.now());let c=o[i];c||(c=o[i]=new Map,c.envs=o,c.tableId=i,c.store=e.primaryStore),t=oc(t);let l=new yS(r);l.startTime=n;let _=c.get(t);return _?_.push(l):(c.set(t,_=[l]),_.tables=c,_.key=t),l.subscriptions=_,l}function xI(e,t){if(!ac)return;let r=ac[e];if(!r)return;try{r.auditStore.resetReadTxn()}catch(s){throw s.message+=" in "+e,s}let n;for(let{key:s,value:i}of r.auditStore.getRange({start:r.lastTxnTime,exclusiveStart:!0})){r.lastTxnTime=s;let o=xt(i),c=r[o.tableId];if(!c)continue;let l=o.recordId,_,u=oc(o.recordId),d=0;do{let f=c.get(u);if(f){for(let h of f)if(!(d>0&&!(h.includeDescendants&&!(h.onlyChildren&&d>1)))){if(h.startTime>=s){(0,bS.info)("omitting",l,h.startTime,s);continue}try{if(h.crossThreads===!1&&!t)continue;let m;h.supportsTransactions&&h.txnInProgress!==o.version&&(m=!0,h.txnInProgress||(n?n.push(h):n=[h]),h.txnInProgress=o.version),h.listener(l,o,s,m)}catch(m){console.error(m),(0,bS.info)(m)}}}if(u==null)break;let E=u.lastIndexOf?.("/",u.length-2);E>-1?u=u.slice(0,E):u=null,d++}while(!0)}if(n)for(let s of n)s.txnInProgress=null,s.listener(null,{type:"end_txn"},r.lastTxnTime,!0)}function FI(e,t){let r=t||e,n=r.env;if(t&&!t.cache&&(t.cache=new Map),!n.hasBroadcastListener){n.hasBroadcastListener=!0;let s=n.path;r.on("aftercommit",()=>{(0,mf.broadcast)({type:qI,path:s}),xI(s,!0)})}}var bS,mf,qI,ac,Xhe,yS,kI=Ne(()=>{bS=q(x()),mf=q(tt());Fl();zl();Go();qI="transaction",Xhe=Buffer.alloc(4096);a(GI,"addSubscription");yS=class extends Wn{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 n=t.envs,s=t.dbi;delete n[s]}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}};a(xI,"notifyFromTransactionData");a(FI,"listenToCommits")});var VI=T((tpe,$I)=>{"use strict";var IS=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};$I.exports=IS});var KI=T((npe,YI)=>{"use strict";var wS=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};YI.exports=wS});var Sf=T((ipe,WI)=>{"use strict";var LS=X(),DS=C(),{RecordEncoder:_W}=(Yl(),oe(cI));LS.initSync();var dW=LS.get(DS.CONFIG_PARAMS.STORAGE_COMPRESSION),fW=LS.get(DS.CONFIG_PARAMS.STORAGE_CACHING)!==!1,EW=DS.UPDATES_PROPERTY,CS=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=dW&&r&&{startingOffset:32},this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=fW&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:_W},this.alwaysLazyProperty=n=>n===EW)}};WI.exports=CS});var gf=T((ape,jI)=>{"use strict";var cc=X(),Jl=C();cc.initSync();var hW=cc.get(Jl.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||cc.get(Jl.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||cc.get(Jl.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",QI=cc.get(Jl.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),pW=cc.get(Jl.CONFIG_PARAMS.STORAGE_NOREADAHEAD),Tf=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=hW,this.noFSAccess=!0,QI!==void 0&&(this.overlappingSync=QI),this.noReadAhead=pW}};jI.exports=Tf;Tf.MAX_DBS=1e4});var Ve=T((lpe,iw)=>{"use strict";var MS=require("lmdb"),zn=require("fs-extra"),Xr=require("path"),Rf=Tr(),XI=x(),Rr=Wr().LMDB_ERRORS_ENUM,Af=KI(),US=Sf(),ZI=gf(),Ki=_t(),zI=C(),{table:mW,resetDatabases:SW}=(ge(),oe(Fe)),JI=X(),Jn=Ki.INTERNAL_DBIS_NAME,ew=Ki.DBI_DEFINITION_NAME,TW="data.mdb",gW="lock.mdb",Xl=".mdb",RW="-lock",PS=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=wn(t,r),this.key_type=this.dbi[Ki.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Ki.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new MS.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Of(e,t){if(e===void 0)throw new Error(Rr.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Rr.ENV_NAME_REQUIRED)}a(Of,"pathEnvNameValidation");async function vS(e,t,r=!0){try{await zn.access(e)}catch(n){throw n.code==="ENOENT"?new Error(Rr.INVALID_BASE_PATH):n}try{let n=Xr.join(e,t+Xl);return await zn.access(n,zn.constants.R_OK|zn.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await zn.access(Xr.join(e,t,TW),zn.constants.R_OK|zn.constants.F_OK),Xr.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(Rr.INVALID_ENVIRONMENT)}else throw new Error(Rr.INVALID_ENVIRONMENT);throw n}}a(vS,"validateEnvironmentPath");function Nf(e,t){if(Rf.validateEnv(e),t===void 0)throw new Error(Rr.DBI_NAME_REQUIRED)}a(Nf,"validateEnvDBIName");async function AW(e,t,r=!1,n=!1){Of(e,t);let s=Xr.basename(e);t=t.toString();let i=JI.get(zI.CONFIG_PARAMS.DATABASES);i||JI.setProperty(zI.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await vS(e,t,n),tw(e,t,r)}catch(o){if(o.message===Rr.INVALID_ENVIRONMENT){let c=Xr.join(e,t);await zn.mkdirp(n?c:e);let l=new ZI(n?c:c+Xl,!1),_=MS.open(l);_.dbis=Object.create(null);let u=new US(!1);_.openDB(Jn,u),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=BS(e,t,r);return _[Ki.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(AW,"createEnvironment");async function OW(e,t,r,n=!0){Of(e,t),t=t.toString();let s=Xr.join(e,t);return mW({table:t,database:Xr.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(OW,"copyEnvironment");async function tw(e,t,r=!1){Of(e,t),t=t.toString();let n=BS(e,t,r);if(global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null)),global.lmdb_map[n]!==void 0)return global.lmdb_map[n];let s=await vS(e,t),i=Xr.join(e,t+Xl),o=s!=i,c=new ZI(s,o),l=MS.open(c);l.dbis=Object.create(null);let _=nw(l);for(let u=0;u<_.length;u++)wn(l,_[u]);return l[Ki.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}a(tw,"openEnvironment");async function NW(e,t,r=!1){Of(e,t),t=t.toString();let n=Xr.join(e,t+Xl),s=await vS(e,t);if(global.lmdb_map!==void 0){let i=BS(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await rw(o),delete global.lmdb_map[i]}}await zn.remove(s),await zn.remove(s===n?s+RW:Xr.join(Xr.dirname(s),gW))}a(NW,"deleteEnvironment");async function rw(e){Rf.validateEnv(e);let t=e[Ki.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(rw,"closeEnvironment");function BS(e,t,r=!1){let s=`${Xr.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(BS,"getCachedEnvironmentName");function bW(e){Rf.validateEnv(e);let t=Object.create(null),r=wn(e,Jn);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==Jn)try{t[n]=Object.assign(new Af,s)}catch{XI.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(bW,"listDBIDefinitions");function nw(e){Rf.validateEnv(e);let t=[],r=wn(e,Jn);for(let{key:n}of r.getRange({start:!1}))n!==Jn&&t.push(n);return t}a(nw,"listDBIs");function yW(e,t){let n=wn(e,Jn).getEntry(t),s=new Af;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{XI.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(yW,"getDBIDefinition");function sw(e,t,r,n=!r){if(Nf(e,t),t=t.toString(),t===Jn)throw new Error(Rr.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return wn(e,t)}catch(s){if(s.message===Rr.DBI_DOES_NOT_EXIST){let i=new US(r,n===!0),o=e.openDB(t,i),c=new Af(r===!0,n);return o[ew]=c,wn(e,Jn).putSync(t,c),e.dbis[t]=o,o}throw s}}a(sw,"createDBI");function wn(e,t){if(Nf(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Jn?r=yW(e,t):r=new Af,r===void 0)throw new Error(Rr.DBI_DOES_NOT_EXIST);let n;try{let s=new US(r.dup_sort,r.useVersions);if(n=e.openDB(t,s),n.db===void 0)throw new Error("MDB_NOTFOUND")}catch(s){throw s.message.includes("MDB_NOTFOUND")===!0?new Error(Rr.DBI_DOES_NOT_EXIST):s}return n[ew]=r,e.dbis[t]=n,n}a(wn,"openDBI");function IW(e,t){Nf(e,t),t=t.toString();let r=wn(e,t),n=r.getStats();return r[Ki.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(IW,"statDBI");async function wW(e,t){try{let r=Xr.join(e,t+Xl);return(await zn.stat(r)).size}catch{throw new Error(Rr.INVALID_ENVIRONMENT)}}a(wW,"environmentDataSize");function CW(e,t){if(Nf(e,t),t=t.toString(),t===Jn)throw new Error(Rr.CANNOT_DROP_INTERNAL_DBIS_NAME);wn(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],wn(e,Jn).removeSync(t)}a(CW,"dropDBI");function LW(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{wn(e,i)}catch(o){if(o.message===Rr.DBI_DOES_NOT_EXIST)sw(e,i,i!==t,i===t),n=!0;else throw o}}n&&SW()}a(LW,"initializeDBIs");iw.exports={openDBI:wn,openEnvironment:tw,createEnvironment:AW,listDBIs:nw,listDBIDefinitions:bW,createDBI:sw,dropDBI:CW,statDBI:IW,deleteEnvironment:NW,initializeDBIs:LW,TransactionCursor:PS,environmentDataSize:wW,copyEnvironment:OW,closeEnvironment:rw}});var cw=T((_pe,aw)=>{"use strict";var HS=Ve(),DW=x(),ow=Wr().LMDB_ERRORS_ENUM;aw.exports=PW;async function PW(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 HS.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==ow.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await HS.closeEnvironment(global.lmdb_map[n]),await HS.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==ow.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){DW.error(t)}}a(PW,"cleanLMDBMap")});var ri=T((fpe,MW)=>{MW.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"}]},hdb_durable_session:{hash_attribute:"id",name:"hdb_durable_session",schema:"system",attributes:[{attribute:"id"}]},hdb_session_will:{hash_attribute:"id",name:"hdb_session_will",schema:"system",attributes:[{attribute:"id"}]}}});var Rw=T((hpe,gw)=>{"use strict";var qS=require("recursive-iterator"),UW=require("alasql"),GS=require("clone"),lw=K(),{handleHDBError:uw,hdb_errors:vW}=ie(),{HDB_ERROR_MSGS:_w,HTTP_STATUS_CODES:dw}=vW,{getDatabases:BW}=(ge(),oe(Fe)),HW=["DISTINCT_ARRAY"],fw=Symbol("validateTables"),xS=Symbol("validateTable"),Epe=Symbol("getAllColumns"),Ew=Symbol("validateAllColumns"),bf=Symbol("findColumn"),hw=Symbol("validateOrderBy"),Zl=Symbol("validateSegment"),FS=Symbol("validateColumn"),pw=Symbol("setColumnsForTable"),mw=Symbol("checkColumnsForAsterisk"),Sw=Symbol("validateGroupBy"),Tw=Symbol("hasColumns"),kS=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[fw](),this[mw](),this[Ew]()}[fw](){if(this[Tw]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[xS](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[xS](t.table)})}}[Tw](){let t=!1,r=new qS(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[xS](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=BW();if(!r[t.databaseid])throw uw(new Error,_w.SCHEMA_NOT_FOUND(t.databaseid),dw.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw uw(new Error,_w.TABLE_NOT_FOUND(t.databaseid,t.tableid),dw.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=GS(s);i.table=GS(t),this.attributes.push(i)})}[bf](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)}[mw](){let t=new qS(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[pw](r.tableid)}[pw](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new UW.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[Ew](){this[Zl](this.statement.columns,!1),this[Zl](this.statement.joins,!1),this[Zl](this.statement.where,!1),this[Sw](this.statement.group,!1),this[Zl](this.statement.order,!0)}[Zl](t,r){if(!t)return;let n=new qS(t),s=[];for(let{node:i,path:o}of n)!lw.isEmpty(i)&&!lw.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[hw](i):s.push(this[FS](i)));return s}[Sw](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&HW.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=GS(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[bf](n)[0];s&&r.push(s)}}}),this.statement.group.forEach(n=>{let s=null;if(!n.columnid)r.forEach((i,o)=>{if(i.toString()===n.toString()){s=i,r.splice(o,1);return}});else{let i=this[bf](n);if(!i||i.length===0)throw`unknown column '${n.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${n.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){s=o,r.splice(c,1);return}})}if(!s)throw`group by column '${n.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`}[hw](t){let r=this.statement.columns.filter(n=>n.as===t.columnid);if(r.length>1)throw`ambiguous column reference ${(t.tableid?t.tableid+".":"")+t.columnid} in order by`;r.length===0&&this[FS](t)}[FS](t){let r=this[bf](t),n=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${n}`;if(r.length>1)throw`ambiguous column reference ${n}`;return r[0]}};gw.exports=kS});var Ow=T((mpe,Aw)=>{"use strict";var $S=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")}};Aw.exports=$S});var bw=T((Tpe,Nw)=>{"use strict";var VS=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};Nw.exports=VS});var Iw=T((Rpe,yw)=>{"use strict";var YS=class{static{a(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n,this.original_records=s}};yw.exports=YS});var Cw=T((Ope,ww)=>{"use strict";var KS=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};ww.exports=KS});var Yo=T((wpe,Pw)=>{"use strict";var qW=Ve(),GW=bw(),xW=Iw(),FW=Cw(),Ns=Tr(),eu=Wr().LMDB_ERRORS_ENUM,kW=_t(),ni=C(),$W=K(),VW=require("uuid"),bpe=require("lmdb"),{handleHDBError:YW,hdb_errors:KW}=ie(),{OVERFLOW_MARKER:ype,MAX_SEARCH_KEY_LENGTH:Ipe}=kW,Lw=X();Lw.initSync();var yf=Lw.get(ni.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),WS=ni.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Vo=ni.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function WW(e,t,r,n,s=Ns.getNextMonotonicTime()){JS(e,t,r,n),QS(e,t,r);let i=new GW,o=[],c=[];for(let l=0;l<n.length;l++){let _=n[l];Dw(_,!0,s);let u=QW(e,t,r,_),d=_[t];o.push(u),c.push(d)}return jS(o,c,n,i,s)}a(WW,"insertRecords");function QW(e,t,r,n){let s=n[t];return e.dbis[t].ifNoExists(s,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||n.hasOwnProperty(o)===!1)continue;let c=n[o];if(typeof c=="function"){let u=c([[{}]]);Array.isArray(u)&&(c=u[0][ni.FUNC_VAL],n[o]=c)}let l=Ns.getIndexedValues(c),_=e.dbis[o];if(l){yf&&_.prefetch(l.map(u=>({key:u,value:s})),If);for(let u=0,d=l.length;u<d;u++)_.put(l[u],s)}}yf&&e.dbis[t].prefetch([s],If),e.dbis[t].put(s,n,n[Vo])})}a(QW,"insertRecord");function jW(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(jW,"removeSkippedRecords");function Dw(e,t,r){let n=r>0;(n||!Number.isInteger(e[Vo]))&&(e[Vo]=r||(r=Ns.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[WS]))&&(e[WS]=r||Ns.getNextMonotonicTime()):delete e[WS]}a(Dw,"setTimestamps");function QS(e,t,r){r.indexOf(ni.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(ni.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(ni.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(ni.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),qW.initializeDBIs(e,t,r)}a(QS,"initializeTransaction");async function zW(e,t,r,n,s=Ns.getNextMonotonicTime()){JS(e,t,r,n),QS(e,t,r);let i=new xW,o=[],c=[],l=[];for(let _=0;_<n.length;_++){let u=n[_],d=u[t],f;try{f=zS(e,t,u,d,i,!0,s)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(f),l.push(d)}return jS(c,l,n,i,s,o)}a(zW,"updateRecords");async function JW(e,t,r,n,s=Ns.getNextMonotonicTime()){try{JS(e,t,r,n)}catch(l){throw YW(l,l.message,KW.HTTP_STATUS_CODES.BAD_REQUEST)}QS(e,t,r);let i=new FW,o=[],c=[];for(let l=0;l<n.length;l++){let _=n[l],u;$W.isEmpty(_[t])?(u=VW.v4(),_[t]=u):u=_[t];let d=zS(e,t,_,u,i,!1,s);o.push(d),c.push(u)}return jS(o,c,n,i,s)}a(JW,"upsertRecords");async function jS(e,t,r,n,s,i=[]){let o=await Promise.all(e);for(let c=0,l=o.length;c<l;c++)o[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||Ns.getNextMonotonicTime(),jW(r,i),n}a(jS,"finalizeWrite");function zS(e,t,r,n,s,i=!1,o){let c=e.dbis[t],l=c.getEntry(n),_=l?.value,u=_;if(!_){if(i)return!1;_={}}if(Dw(r,!u,o),Number.isInteger(r[Vo])&&_[Vo]>r[Vo])return!1;u&&s.original_records.push(_);let d,f=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let m=r[h],S=e.dbis[h];if(S===void 0)continue;let R=_[h];if(typeof m=="function"){let A=m([[_]]);Array.isArray(A)&&(m=A[0][ni.FUNC_VAL],r[h]=m)}if(m===R)continue;let g=Ns.getIndexedValues(R);if(g){yf&&S.prefetch(g.map(A=>({key:A,value:n})),If);for(let A=0,P=g.length;A<P;A++)S.remove(g[A],n)}if(g=Ns.getIndexedValues(m),g){yf&&S.prefetch(g.map(A=>({key:A,value:n})),If);for(let A=0,P=g.length;A<P;A++)S.put(g[A],n)}}let E=Object.assign({},_,r);c.put(n,E,E[Vo])},"do_put");return l?d=c.ifVersion(n,l.version,f):d=c.ifNoExists(n,f),d.then(E=>E?!0:zS(e,t,r,n,s,i,o))}a(zS,"updateUpsertRecord");function XW(e,t,r){if(Ns.validateEnv(e),t===void 0)throw new Error(eu.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(eu.WRITE_ATTRIBUTES_REQUIRED):new Error(eu.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(XW,"validateBasic");function JS(e,t,r,n){if(XW(e,t,r),!Array.isArray(n))throw n===void 0?new Error(eu.RECORDS_REQUIRED):new Error(eu.RECORDS_MUST_BE_ARRAY)}a(JS,"validateWrite");function If(){}a(If,"noop");Pw.exports={insertRecords:WW,updateRecords:zW,upsertRecords:JW}});var ys=T((Lpe,vw)=>{"use strict";var Uw=K(),Mw=C(),lc=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,bs=require("joi"),Wi={schema_format:{pattern:lc,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},ZW=bs.alternatives(bs.string().min(1).max(Wi.schema_length.maximum).pattern(lc).messages({"string.pattern.base":"{:#label} "+Wi.schema_format.message}),bs.number(),bs.array()).required(),eQ=bs.alternatives(bs.string().min(1).max(Wi.schema_length.maximum).pattern(lc).messages({"string.pattern.base":"{:#label} "+Wi.schema_format.message}),bs.number()),tQ=bs.alternatives(bs.string().min(1).max(Wi.schema_length.maximum).pattern(lc).messages({"string.pattern.base":"{:#label} "+Wi.schema_format.message}),bs.number()).required();function rQ(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Wi.schema_length.maximum?`'${e}' maximum of 250 characters`:lc.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(rQ,"checkValidTable");function nQ(e,t){return Uw.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(nQ,"validateSchemaExists");function sQ(e,t){let r=t.state.ancestors[0].schema;return Uw.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(sQ,"validateTableExists");function iQ(e,t){return e.toLowerCase()===Mw.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${Mw.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(iQ,"validateSchemaName");vw.exports={common_validators:Wi,schema_regex:lc,hdb_schema_table:ZW,validateSchemaExists:nQ,validateTableExists:sQ,validateSchemaName:iQ,checkValidTable:rQ,hdb_database:eQ,hdb_table:tQ}});var rt=T((Ppe,Bw)=>{"use strict";var Ar=require("validate.js");Ar.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||Ar.validators.type.checks[t](e)?null:` must be a '${t}' value`};Ar.validators.type.checks={Object:function(e){return Ar.isObject(e)&&!Ar.isArray(e)},Array:Ar.isArray,Integer:Ar.isInteger,Number:Ar.isNumber,String:Ar.isString,Date:Ar.isDate,Boolean:function(e){return typeof e=="boolean"}};Ar.validators.hasValidFileExt=function(e,t){return Ar.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};Bw.exports={validateObject:oQ,validateObjectAsync:aQ,validateBySchema:cQ};function oQ(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Ar(e,t,{format:"flat"});return r?new Error(r):null}a(oQ,"validateObject");async function aQ(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Ar.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(aQ,"validateObjectAsync");function cQ(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(cQ,"validateBySchema")});var wf=T((Upe,Hw)=>{var{common_validators:Is}=ys(),ru=rt(),tu="is required",gt={database:{presence:!1,format:Is.schema_format,length:Is.schema_length},schema:{presence:!1,format:Is.schema_format,length:Is.schema_length},table:{presence:!0,format:Is.schema_format,length:Is.schema_length},attribute:{presence:!0,format:Is.schema_format,length:Is.schema_length},hash_attribute:{presence:!0,format:Is.schema_format,length:Is.schema_length}};function nu(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(nu,"makeAttributesStrings");function lQ(e){return e=nu(e),gt.table.presence=!1,gt.attribute.presence=!1,gt.hash_attribute.presence=!1,ru.validateObject(e,gt)}a(lQ,"schema_object");function uQ(e){return e=nu(e),gt.table.presence={message:tu},gt.attribute.presence=!1,gt.hash_attribute.presence=!1,ru.validateObject(e,gt)}a(uQ,"table_object");function _Q(e){return e=nu(e),gt.table.presence={message:tu},gt.attribute.presence=!1,ru.validateObject(e,gt)}a(_Q,"create_table_object");function dQ(e){return e=nu(e),gt.table.presence={message:tu},gt.attribute.presence={message:tu},gt.hash_attribute.presence=!1,ru.validateObject(e,gt)}a(dQ,"attribute_object");function fQ(e){return e=nu(e),gt.table.presence={message:tu},gt.attribute.presence=!1,gt.hash_attribute.presence=!1,ru.validateObject(e,gt)}a(fQ,"describe_table");function EQ(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(EQ,"validateTableResidence");Hw.exports={schema_object:lQ,create_table_object:_Q,table_object:uQ,attribute_object:dQ,describe_table:fQ,validateTableResidence:EQ}});var Gw=T((Bpe,qw)=>{"use strict";var hQ=require("uuid"),XS=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||hQ.v4(),this.schema_table=`${this.schema}.${this.table}`}};qw.exports=XS});var Cf=T((qpe,xw)=>{"use strict";var pQ=Gw(),ZS=class extends pQ{static{a(this,"LMDBCreateAttributeObject")}constructor(t,r,n,s,i=!0,o=!1){super(t,r,n,s),this.dup_sort=i,this.is_hash_attribute=o}};xw.exports=ZS});var kw=T((xpe,Fw)=>{"use strict";Fw.exports=SQ;var mQ="inserted";function SQ(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===mQ?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(SQ,"returnObject")});var Lf=T((kpe,Ww)=>{"use strict";var TQ=C(),eT=Ve(),gQ=Yo(),{getSystemSchemaPath:RQ,getSchemaPath:AQ}=ze(),OQ=ri(),NQ=wf(),bQ=Cf(),yQ=kw(),{handleHDBError:$w,hdb_errors:Yw}=ie(),Vw=K(),{HTTP_STATUS_CODES:IQ}=Yw,tT=OQ.hdb_attribute,Kw=[];for(let e=0;e<tT.attributes.length;e++)Kw.push(tT.attributes[e].attribute);var wQ="inserted";Ww.exports=CQ;async function CQ(e){let t=NQ.attribute_object(e);if(t)throw $w(new Error,t.message,Yw.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&Vw.checkGlobalSchemaTable(e.schema,e.table);if(r)throw $w(new Error,r,IQ.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=Vw.isEmpty(e.dup_sort)||e.dup_sort=="true";let n=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(n=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(n)&&n.length>0){for(let i of n)if(i.attribute===e.attribute)throw new Error(`attribute '${i.attribute}' already exists in ${e.schema}.${e.table}`)}let s=new bQ(e.schema,e.table,e.attribute,e.id);try{let i=await eT.openEnvironment(AQ(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}`);eT.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await eT.openEnvironment(RQ(),TQ.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await gQ.insertRecords(o,tT.hash_attribute,Kw,[s]);return yQ(wQ,c,{records:[s]},l)}catch(i){throw i}}a(CQ,"lmdbCreateAttribute")});var nT=T((Vpe,jw)=>{var{hdb_table:LQ,hdb_database:Qw}=ys(),DQ=rt(),rT=require("joi"),PQ={undefined:"undefined",null:"null"},MQ=a((e,t)=>{let r=Object.keys(e),n=r.length,s;for(let i=0;i<n;i++){let o=r[i];(!o||o.length===0||PQ[o]!==void 0)&&(s===void 0?s=`Invalid attribute name: '${o}'`:s+=`. Invalid attribute name: '${o}'`)}return s?t.message(s):e},"custom_records_val"),UQ=rT.object({database:Qw,schema:Qw,table:LQ,records:rT.array().items(rT.object().custom(MQ)).required()});jw.exports=function(e){return DQ.validateBySchema(e,UQ)}});var su=T((Wpe,Jw)=>{"use strict";var si=K(),zw=x(),Kpe=nT(),{getDatabases:vQ}=(ge(),oe(Fe)),{ClientError:Ko}=ie();Jw.exports=BQ;function BQ(e){if(si.isEmpty(e))throw new Ko("invalid update parameters defined.");if(si.isEmptyOrZeroLength(e.schema))throw new Ko("invalid schema specified.");if(si.isEmptyOrZeroLength(e.table))throw new Ko("invalid table specified.");if(!Array.isArray(e.records))throw new Ko("records must be an array");let t=vQ()[e.schema]?.[e.table];if(si.isEmpty(t))throw new Ko(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,n=new Set,s={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&si.isEmptyOrZeroLength(o[r]))throw zw.error("a valid hash attribute must be provided with update record:",o),new Ko("a valid hash attribute must be provided with update record, check log for more info");if(!si.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw zw.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Ko(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!si.isEmpty(o[r])&&o[r]!==""&&n.has(si.autoCast(o[r]))&&(o.skip=!0),n.add(si.autoCast(o[r]));for(let c in o)s[c]=1}),s[r]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(s)}}a(BQ,"insertUpdateValidate")});var iu=T((jpe,Xw)=>{"use strict";var HQ=C().OPERATIONS_ENUM,sT=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=HQ.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};Xw.exports=sT});var ou=T((Xpe,eC)=>{"use strict";var Jpe=iu(),Df=C(),iT=K(),Zw=x(),qQ=require("uuid"),{handleHDBError:Pf,hdb_errors:GQ}=ie(),{HDB_ERROR_MSGS:Mf,HTTP_STATUS_CODES:Uf}=GQ;eC.exports=xQ;function xQ(e,t,r){for(let s=0;s<t.length;s++)FQ(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];kQ(i,r,e.operation)}}a(xQ,"processRows");function FQ(e){if(Buffer.byteLength(String(e))>Df.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Pf(new Error,Mf.ATTR_NAME_LENGTH_ERR(e),Uf.BAD_REQUEST,void 0,void 0,!0);if(iT.isEmptyOrZeroLength(e)||iT.isEmpty(e.trim()))throw Pf(new Error,Mf.ATTR_NAME_NULLISH_ERR,Uf.BAD_REQUEST,void 0,void 0,!0)}a(FQ,"validateAttribute");function kQ(e,t,r){if(!e.hasOwnProperty(t)||iT.isEmptyOrZeroLength(e[t])){if(r===Df.OPERATIONS_ENUM.INSERT||r===Df.OPERATIONS_ENUM.UPSERT){e[t]=qQ.v4();return}throw Zw.error("Update transaction aborted due to record with no hash value:",e),Pf(new Error,Mf.RECORD_MISSING_HASH_ERR,Uf.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Df.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Zw.error(e),Pf(new Error,Mf.HASH_VAL_LENGTH_ERR,Uf.BAD_REQUEST,void 0,void 0,!0)}a(kQ,"validateHash")});var vf=T((eme,rC)=>{"use strict";var tC=K(),$Q=C(),VQ=x(),YQ=Lf(),KQ=Cf(),WQ=ii(),{SchemaEventMsg:QQ}=Xn(),jQ="already exists in";rC.exports=zQ;async function zQ(e,t,r){if(tC.isEmptyOrZeroLength(r))return r;let n=[];tC.isEmptyOrZeroLength(t.attributes)||t.attributes.forEach(i=>{n.push(i.attribute)});let s=r.filter(i=>n.indexOf(i)<0);return s.length===0||await Promise.all(s.map(async i=>{await JQ(e,t.schema,t.name,i)})),s}a(zQ,"lmdbCheckForNewAttributes");async function JQ(e,t,r,n){let s=new KQ(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await XQ(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(jQ))VQ.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(JQ,"createNewAttribute");async function XQ(e){let t;return t=await YQ(e),WQ.signalSchemaChange(new QQ(process.pid,$Q.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(XQ,"createAttribute")});var uc=T((rme,nC)=>{"use strict";var oT=class{static{a(this,"LMDBTransactionObject")}constructor(t,r,n,s,i=void 0){this.operation=t,this.user_name=r,this.timestamp=n,this.hash_values=s,this.origin=i}};nC.exports=oT});var iC=T((sme,sC)=>{"use strict";var ZQ=uc(),ej=C().OPERATIONS_ENUM,aT=class extends ZQ{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(ej.INSERT,r,n,s,i),this.records=t}};sC.exports=aT});var aC=T((ome,oC)=>{"use strict";var tj=uc(),rj=C().OPERATIONS_ENUM,cT=class extends tj{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(rj.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};oC.exports=cT});var lC=T((cme,cC)=>{"use strict";var nj=uc(),sj=C().OPERATIONS_ENUM,lT=class extends nj{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(sj.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};cC.exports=lT});var _C=T((ume,uC)=>{"use strict";var ij=uc(),oj=C().OPERATIONS_ENUM,uT=class extends ij{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(oj.DELETE,n,s,t,i),this.original_records=r}};uC.exports=uT});var au=T((fme,hC)=>{"use strict";var dme=require("path"),dC=Ve(),aj=iC(),cj=aC(),lj=lC(),uj=_C(),_c=_t(),fC=K(),{CONFIG_PARAMS:_j}=C(),EC=X();EC.initSync();var Bf=C().OPERATIONS_ENUM,{getTransactionAuditStorePath:dj}=ze();hC.exports=fj;async function fj(e,t){if(EC.get(_j.LOGGING_AUDITLOG)===!1)return;let r=dj(e.schema,e.table),n=await dC.openEnvironment(r,e.table,!0),s=Ej(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){dC.initializeDBIs(n,_c.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,_c.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[_c.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[_c.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),fC.isEmpty(s.user_name)||n.dbis[_c.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[_c.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(fj,"writeTransaction");function Ej(e,t){let r=fC.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===Bf.INSERT)return new aj(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Bf.UPDATE)return new cj(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Bf.UPSERT)return new lj(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Bf.DELETE)return new uj(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(Ej,"createTransactionObject")});var _T=T((pme,pC)=>{"use strict";var hj=su(),hme=iu(),cu=C(),pj=ou(),mj=Yo().insertRecords,Sj=Ve(),Tj=x(),gj=vf(),{getSchemaPath:Rj}=ze(),Aj=au();pC.exports=Oj;async function Oj(e){try{let{schema_table:t,attributes:r}=hj(e);pj(e,r,t.hash_attribute),e.schema!==cu.SYSTEM_SCHEMA_NAME&&(r.includes(cu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(cu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(cu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(cu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await gj(e.hdb_auth_header,t,r),s=Rj(e.schema,e.table),i=await Sj.openEnvironment(s,e.table),o=await mj(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await Aj(e,o)}catch(c){Tj.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:n,txn_time:o.txn_time}}catch(t){throw t}}a(Oj,"lmdbCreateRecords")});var TC=T((Sme,SC)=>{"use strict";var mC=C(),Nj=_T(),bj=iu(),yj=require("fs-extra"),{getSchemaPath:Ij}=ze();SC.exports=wj;async function wj(e){let t=[{name:e.schema,createddate:Date.now()}],r=new bj(mC.SYSTEM_SCHEMA_NAME,mC.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await Nj(r),await yj.mkdirp(Ij(e.schema))}a(wj,"lmdbCreateSchema")});var RC=T((gme,gC)=>{"use strict";var dT=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.deleted=t,this.skipped=r,this.txn_time=n,this.original_records=s}};gC.exports=dT});var bC=T((bme,NC)=>{"use strict";var AC=Ve(),fT=Tr(),ET=Wr().LMDB_ERRORS_ENUM,Cj=_t(),OC=x(),Ame=K(),Lj=require("lmdb"),Dj=RC(),Pj=C(),{OVERFLOW_MARKER:Ome,MAX_SEARCH_KEY_LENGTH:Nme}=Cj,Mj=Pj.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Uj(e,t,r,n){if(fT.validateEnv(e),t===void 0)throw new Error(ET.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(ET.IDS_REQUIRED):new Error(ET.IDS_MUST_BE_ITERABLE);try{let s=AC.listDBIs(e);AC.initializeDBIs(e,t,s);let i=new Dj,o,c=[],l=[];for(let f=0,E=r.length;f<E;f++)try{o=r[f];let h=e.dbis[t].get(o);if(!h||n&&h[Mj]>n){i.skipped.push(o);continue}let m=e.dbis[t].ifVersion(o,Lj.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<s.length;S++){let R=s[S];if(!h.hasOwnProperty(R)||R===t)continue;let g=e.dbis[R],A=h[R];if(A!=null)try{let P=fT.getIndexedValues(A);if(P)for(let v=0,U=P.length;v<U;v++)g.remove(P[v],o)}catch{OC.warn(`cannot delete from attribute: ${R}, ${A}:${o}`)}}});c.push(m),l.push(o),i.original_records.push(h)}catch(h){OC.warn(h),i.skipped.push(o)}let _=[],u=await Promise.all(c);for(let f=0,E=u.length;f<E;f++)u[f]===!0?i.deleted.push(l[f]):(i.skipped.push(l[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=fT.getNextMonotonicTime(),i}catch(s){throw s}}a(Uj,"deleteRecords");NC.exports={deleteRecords:Uj}});var lu=T((Ime,IC)=>{"use strict";var dc=K(),vj=bC(),Bj=Ve(),{getSchemaPath:Hj}=ze(),qj=au(),Gj=x();IC.exports=xj;async function xj(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(dc.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(dc.isEmptyOrZeroLength(e.hash_values)&&!dc.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];dc.isEmpty(l)||e.hash_values.push(l)}}if(dc.isEmptyOrZeroLength(e.hash_values))return yC([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(dc.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[n]:e.hash_values[c]}}let s=Hj(e.schema,e.table),i=await Bj.openEnvironment(s,e.table),o=await vj.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await qj(e,o)}catch(c){Gj.error(`unable to write transaction due to ${c.message}`)}return yC(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(xj,"lmdbDeleteRecords");function yC(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(yC,"createDeleteResponse")});var pT=T((Lme,wC)=>{"use strict";var Fj=C(),Cme=Tr();function hT(e,t){let r=Object.create(null);if(t.length===1&&Fj.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let n=0;n<t.length;n++){let s=t[n],i=e[s];r[s]=i===void 0?null:i}return r}a(hT,"parseRow");function kj(e,t,r,n){let s=hT(r,e);n.push(s)}a(kj,"searchAll");function $j(e,t,r,n){let s=hT(r,e);n[t]=s}a($j,"searchAllToMap");function Vj(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(Vj,"iterateDBI");function Wo(e,t,r,n,s){let i=Object.create(null);i[s]=e;let o;n===s?o=e:(o=t,n!==void 0&&(i[n]=o)),r[0].push(o),r[1].push(i)}a(Wo,"pushResults");function Yj(e,t,r,n,s,i){t.toString().endsWith(e)&&Wo(t,r,n,s,i)}a(Yj,"endsWith");function Kj(e,t,r,n,s,i){t.toString().includes(e)&&Wo(t,r,n,s,i)}a(Kj,"contains");function Wj(e,t,r,n,s,i){t>e&&Wo(t,r,n,s,i)}a(Wj,"greaterThanCompare");function Qj(e,t,r,n,s,i){t>=e&&Wo(t,r,n,s,i)}a(Qj,"greaterThanEqualCompare");function jj(e,t,r,n,s,i){t<e&&Wo(t,r,n,s,i)}a(jj,"lessThanCompare");function zj(e,t,r,n,s,i){t<=e&&Wo(t,r,n,s,i)}a(zj,"lessThanEqualCompare");wC.exports={parseRow:hT,searchAll:kj,searchAllToMap:$j,iterateDBI:Vj,endsWith:Yj,contains:Kj,greaterThanCompare:Wj,greaterThanEqualCompare:Qj,lessThanCompare:jj,lessThanEqualCompare:zj,pushResults:Wo}});var fc=T((vme,vC)=>{"use strict";var Qi=Ve(),Pme=x(),Zr=Tr(),Hf=_t(),dt=Wr().LMDB_ERRORS_ENUM,Mme=K(),Jj=C(),qf=pT(),{parseRow:Xj}=qf,Ume=require("lmdb"),{OVERFLOW_MARKER:CC,MAX_SEARCH_KEY_LENGTH:Zj}=Hf;function LC(e,t,r,n=!1,s=void 0,i=void 0){return Qo(e,t,r,(o,c)=>c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}))}a(LC,"iterateFullIndex");function uu(e,t,r,n,s,i=!1,o=void 0,c=void 0,l=!1,_=!1){return Qo(e,t,r,(u,d,f,E)=>{let g={transaction:u,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!l:!_,exclusiveStart:i===!0?_:l};return E===r?(g.values=!1,d.getRange(g).map(A=>({value:A}))):d.getRange(g)})}a(uu,"iterateRangeBetween");function Qo(e,t,r,n){let s=e.database||e,i=Qi.openDBI(s,r);i[Hf.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Qi.openDBI(s,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=n(o,i,s,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(Qo,"setupTransaction");function DC(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(CC)){if(!s)if(r)s=Qi.openDBI(e,r);else{let l=Qi.listDBIs(e);for(let _=0,u=l.length;_<u&&(s=Qi.openDBI(e,l[_]),!s[Hf.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(DC,"getOverflowCheck");function ez(e,t,r,n=!1,s=void 0,i=void 0){if(Zr.validateEnv(e),t===void 0)throw new Error(dt.HASH_ATTRIBUTE_REQUIRED);return Qo(e,t,t,(o,c,l)=>(Gf(r),r=_u(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(_=>Xj(_.value,r))))}a(ez,"searchAll");function tz(e,t,r,n=!1,s=void 0,i=void 0){if(Zr.validateEnv(e),t===void 0)throw new Error(dt.HASH_ATTRIBUTE_REQUIRED);Gf(r),r=_u(e.database||e,r);let o=new Map;for(let{key:c,value:l}of LC(e,t,t,n,s,i))o.set(c,qf.parseRow(l,r));return o}a(tz,"searchAllToMap");function rz(e,t,r=!1,n=void 0,s=void 0){if(Zr.validateEnv(e),t===void 0)throw new Error(dt.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=LC(e,void 0,t,r,n,s),c=o.transaction,l=DC(c.database,c,void 0,t);for(let{key:_,value:u}of o){let d=l(_,u);i[d]===void 0&&(i[d]=[]),i[d].push(u)}return i}a(rz,"iterateDBI");function nz(e,t){if(Zr.validateEnv(e),t===void 0)throw new Error(dt.HASH_ATTRIBUTE_REQUIRED);return Qi.statDBI(e,t).entryCount}a(nz,"countAll");function sz(e,t,r,n,s=!1,i=void 0,o=void 0){return ji(e,r,n),Qo(e,t,r,(c,l,_,u)=>(n=Zr.convertKeyValueToWrite(n),u===r?l.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:l.getValues(n,{transaction:c,reverse:s,limit:i,offset:o}).map(d=>({key:n,value:d}))))}a(sz,"equals");function iz(e,t,r){return ji(e,t,r),Qi.openDBI(e,t).getValuesCount(r)}a(iz,"count");function oz(e,t,r,n,s=!1,i=void 0,o=void 0){return ji(e,r,n),Qo(e,null,r,(c,l)=>{n=Zr.convertKeyValueToWrite(n);let _=!0;typeof n=="number"&&(_=!1);let u;if(s===!0){let d;for(let f of l.getKeys({transaction:c,start:n}))if(!f.startsWith(n)){d=f;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),u=l.getRange({transaction:c,start:d,end:void 0,reverse:s,limit:i,offset:o}).map(f=>{let{key:E}=f;if(E!==d){if(E.toString().startsWith(n))return f;if(_===!0)return u.DONE}}),u.filter(f=>f)}else return u=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(n))return d;if(_===!0)return u.DONE}),_?u:u.filter(d=>d)})}a(oz,"startsWith");function az(e,t,r,n,s=!1,i=void 0,o=void 0){return PC(e,t,r,n,s,i,o,!0)}a(az,"endsWith");function PC(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return ji(e,r,n),Qo(e,null,r,(l,_,u,d)=>{let f=DC(u,l,d,r);return o=Number.isInteger(o)?o:0,_.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(E=>{let h=E.toString();return h.endsWith(CC)?_.getValues(E,{transaction:l}).map(m=>{let S=f(E,m);if(c?S.endsWith(n):S.includes(n))return{key:S,value:m}}).filter(m=>m):(c?h.endsWith(n):h.includes(n))?_[Hf.DBI_DEFINITION_NAME].is_hash_attribute?{key:E,value:E}:_.getValues(E,{transaction:l}).map(m=>({key:E,value:m})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(PC,"contains");function cz(e,t,r,n,s=!1,i=void 0,o=void 0){ji(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),uu(e,t,r,n,l,s,i,o,!0,!1)}a(cz,"greaterThan");function lz(e,t,r,n,s=!1,i=void 0,o=void 0){ji(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),uu(e,t,r,n,l,s,i,o,!1,!1)}a(lz,"greaterThanEqual");function uz(e,t,r,n,s=!1,i=void 0,o=void 0){ji(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),uu(e,t,r,l,n,s,i,o,!1,!0)}a(uz,"lessThan");function _z(e,t,r,n,s=!1,i=void 0,o=void 0){ji(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),uu(e,t,r,l,n,s,i,o,!1,!1)}a(_z,"lessThanEqual");function dz(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(Zr.validateEnv(e),r===void 0)throw new Error(dt.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(dt.START_VALUE_REQUIRED);if(s===void 0)throw new Error(dt.END_VALUE_REQUIRED);if(n=Zr.convertKeyValueToWrite(n),s=Zr.convertKeyValueToWrite(s),n>s)throw new Error(dt.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return uu(e,t,r,n,s,i,o,c)}a(dz,"between");function fz(e,t,r,n){Zr.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(dt.HASH_ATTRIBUTE_REQUIRED);if(Gf(r),r=_u(s,r),n===void 0)throw new Error(dt.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=qf.parseRow(c,r)),o}a(fz,"searchByHash");function Ez(e,t,r){Zr.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(dt.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(dt.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(Ez,"checkHashExists");function hz(e,t,r,n,s=[]){return UC(e,t,r,n,s),MC(e,t,r,n,s).map(i=>i[1])}a(hz,"batchSearchByHash");function pz(e,t,r,n,s=[]){UC(e,t,r,n,s);let i=new Map;for(let[o,c]of MC(e,t,r,n,s))i.set(o,c);return i}a(pz,"batchSearchByHashToMap");function MC(e,t,r,n,s=[]){return Qo(e,t,t,(i,o,c)=>{r=_u(c,r);let l=r.length<3;return n.map(_=>{let u=c.dbis[t].get(_,{transaction:i,lazy:l});if(u)return[_,qf.parseRow(u,r)];s.push(_)}).filter(_=>_)})}a(MC,"batchHashSearch");function UC(e,t,r,n,s){if(Zr.validateEnv(e),t===void 0)throw new Error(dt.HASH_ATTRIBUTE_REQUIRED);if(Gf(r),n==null)throw new Error(dt.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(dt.IDS_MUST_BE_ITERABLE)}a(UC,"initializeBatchSearchByHash");function Gf(e){if(!Array.isArray(e))throw e===void 0?new Error(dt.FETCH_ATTRIBUTES_REQUIRED):new Error(dt.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Gf,"validateFetchAttributes");function ji(e,t,r){if(Zr.validateEnv(e),t===void 0)throw new Error(dt.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(dt.SEARCH_VALUE_REQUIRED);if(r?.length>Zj)throw new Error(dt.SEARCH_VALUE_TOO_LARGE)}a(ji,"validateComparisonFunctions");function _u(e,t){return t.length===1&&Jj.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Qi.listDBIs(e)),t}a(_u,"setGetWholeRowAttributes");vC.exports={searchAll:ez,searchAllToMap:tz,count:iz,countAll:nz,equals:sz,startsWith:oz,endsWith:az,contains:PC,searchByHash:fz,setGetWholeRowAttributes:_u,batchSearchByHash:hz,batchSearchByHashToMap:pz,checkHashExists:Ez,iterateDBI:rz,greaterThan:cz,greaterThanEqual:lz,lessThan:uz,lessThanEqual:_z,between:dz}});var Ec=T((Hme,xC)=>{var BC=require("lodash"),HC=rt(),he=require("joi"),mz=K(),{hdb_schema_table:du,checkValidTable:qC,hdb_table:GC,hdb_database:xf}=ys(),{handleHDBError:Sz,hdb_errors:Tz}=ie(),{getDatabases:gz}=(ge(),oe(Fe)),{HTTP_STATUS_CODES:Rz}=Tz,Az=he.object({database:xf,schema:xf,table:GC,search_attribute:du,search_value:he.any().required(),get_attributes:he.array().min(1).items(he.alternatives(du,he.object())).optional(),desc:he.bool(),limit:he.number().integer().min(1),offset:he.number().integer().min(0)}),Oz=he.object({database:xf,schema:xf,table:GC,operator:he.string().valid("and","or").default("and").lowercase(),offset:he.number().integer().min(0),limit:he.number().integer().min(1),get_attributes:he.array().min(1).items(he.alternatives(du,he.object())).optional(),sort:he.object({attribute:he.alternatives(du,he.array().min(1)),descending:he.bool().optional()}).optional(),conditions:he.array().min(1).items(he.alternatives(he.object({operator:he.string().valid("and","or").default("and").lowercase(),conditions:he.array()}),he.object({search_attribute:he.alternatives(du,he.array().min(1)),search_type:he.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:he.when("search_type",{switch:[{is:"equals",then:he.any()},{is:"between",then:he.array().items(he.alternatives([he.string(),he.number()])).length(2)}],otherwise:he.alternatives(he.string(),he.number())}).required()}))).required()});xC.exports=function(e,t){let r=null;switch(t){case"value":r=HC.validateBySchema(e,Az);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(qC("database",e.schema)),i(qC("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"),s&&(r=new Error(s.trim()));break;case"conditions":r=HC.validateBySchema(e,Oz);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=mz.checkGlobalSchemaTable(e.schema,e.table);if(s)return Sz(new Error,s,Rz.NOT_FOUND);let o=gz()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let l=a(u=>{for(let d=0,f=u.conditions.length;d<f;d++){let E=u.conditions[d];E.conditions?l(E):c.push(E.search_attribute)}},"addConditions");t==="conditions"&&l(e);let _=BC.filter(c,u=>u!=="*"&&u.attribute!=="*"&&!Array.isArray(u)&&!u.name&&!BC.some(o,d=>d===u||d.attribute===u||d.attribute===u.attribute));if(_&&_.length>0){let u=_.join(", ");return u=u.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${u}'`)}}return r}});var mT=T((Gme,FC)=>{"use strict";var Nz=Ve(),bz=Ec(),{getSchemaPath:yz}=ze();FC.exports=Iz;function Iz(e){let t=bz(e,"hashes");if(t)throw t;let r=yz(e.schema,e.table);return Nz.openEnvironment(r,e.table)}a(Iz,"initialize")});var ST=T((Fme,kC)=>{"use strict";var wz=fc(),Cz=mT();kC.exports=Lz;async function Lz(e){let t=await Cz(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return wz.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(Lz,"lmdbGetDataByHash")});var hc=T(($me,$C)=>{"use strict";var TT=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};$C.exports=TT});var YC=T((Kme,VC)=>{"use strict";var Yme=hc(),Dz=fc(),Pz=mT();VC.exports=Mz;async function Mz(e){let t=await Pz(e),r=global.hdb_schema[e.schema][e.table];return Dz.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(Mz,"lmdbSearchByHash")});var Zn=T((Qme,KC)=>{"use strict";var gT=class{static{a(this,"SearchObject")}constructor(t,r,n,s,i,o,c,l=!1,_=void 0,u=void 0){this.schema=t,this.table=r,this.search_attribute=n,this.search_value=s,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=l,this.limit=_,this.offset=u}};KC.exports=gT});var Ff=T((zme,XC)=>{"use strict";var rr=fc(),Uz=Ve(),vz=K(),pe=_t(),jo=C(),Bz=ri(),WC=Wr().LMDB_ERRORS_ENUM,{getSchemaPath:Hz}=ze(),oi=jo.SEARCH_WILDCARDS;async function qz(e,t,r){let n;e.schema===jo.SYSTEM_SCHEMA_NAME?n=Bz[e.table]:n=global.hdb_schema[e.schema][e.table];let s=JC(e,n.hash_attribute,r,t);return jC(e,s,n.hash_attribute,r)}a(qz,"prepSearch");async function jC(e,t,r,n){let s=Hz(e.schema,e.table),i=await Uz.openEnvironment(s,e.table),o=zC(i,e,t,r),c=o.transaction||i;if([pe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,pe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,pe.SEARCH_TYPES.SEARCH_ALL,pe.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(Gz(e,r)===!1){let u=e.search_attribute;if(u===r)return n?QC(o,()=>!0):o.map(f=>({[r]:f.key}));let d=a(f=>({[r]:f.value,[u]:f.key}),"toObject");return n?QC(o,d):o.map(d)}let _=e.search_attribute===r?o.map(u=>u.key):o.map(u=>u.value);return n===!0?rr.batchSearchByHashToMap(c,r,e.get_attributes,_):rr.batchSearchByHash(c,r,e.get_attributes,_)}a(jC,"executeSearch");function zC(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:o,limit:c,offset:l}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,l=Number.isInteger(l)?l:void 0,r){case pe.SEARCH_TYPES.EQUALS:s=rr.equals(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.CONTAINS:s=rr.contains(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.ENDS_WITH:case pe.SEARCH_TYPES._ENDS_WITH:s=rr.endsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.STARTS_WITH:case pe.SEARCH_TYPES._STARTS_WITH:s=rr.startsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return rr.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case pe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return rr.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case pe.SEARCH_TYPES.SEARCH_ALL:return rr.searchAll(e,n,t.get_attributes,o,c,l);case pe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return rr.searchAllToMap(e,n,t.get_attributes,o,c,l);case pe.SEARCH_TYPES.BETWEEN:s=rr.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,l);break;case pe.SEARCH_TYPES.GREATER_THAN:case pe.SEARCH_TYPES._GREATER_THAN:s=rr.greaterThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.GREATER_THAN_EQUAL:case pe.SEARCH_TYPES._GREATER_THAN_EQUAL:s=rr.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.LESS_THAN:case pe.SEARCH_TYPES._LESS_THAN:s=rr.lessThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.LESS_THAN_EQUAL:case pe.SEARCH_TYPES._LESS_THAN_EQUAL:s=rr.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;default:return Object.create(null)}return s}a(zC,"searchByType");function QC(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(QC,"createMapFromIterable");function Gz(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 n=!1;for(let s=0;s<e.get_attributes.length;s++)if(r.indexOf(e.get_attributes[s])<0){n=!0;break}return n}a(Gz,"checkToFetchMore");function JC(e,t,r,n){if(vz.isEmpty(n)){let s=e.search_value;typeof s=="object"?s=JSON.stringify(s):s=s.toString();let i=s.charAt(0),o=s.charAt(s.length-1),c=!1;if(e.search_attribute===t&&(c=!0),oi.indexOf(s)>-1)return r===!0?pe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:pe.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(oi[0])<0&&s.indexOf(oi[1])<0)return c===!0?r===!0?pe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:pe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:pe.SEARCH_TYPES.EQUALS;if(oi.indexOf(i)>=0&&oi.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),pe.SEARCH_TYPES.CONTAINS;if(oi.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),pe.SEARCH_TYPES.ENDS_WITH;if(oi.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),pe.SEARCH_TYPES.STARTS_WITH;if(s.includes(oi[0])||s.includes(oi[1]))return pe.SEARCH_TYPES.EQUALS;throw new Error(WC.UNKNOWN_SEARCH_TYPE)}else switch(n){case jo.VALUE_SEARCH_COMPARATORS.BETWEEN:return pe.SEARCH_TYPES.BETWEEN;case jo.VALUE_SEARCH_COMPARATORS.GREATER:return pe.SEARCH_TYPES.GREATER_THAN;case jo.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return pe.SEARCH_TYPES.GREATER_THAN_EQUAL;case jo.VALUE_SEARCH_COMPARATORS.LESS:return pe.SEARCH_TYPES.LESS_THAN;case jo.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return pe.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(WC.UNKNOWN_SEARCH_TYPE)}}a(JC,"createSearchTypeFromSearchObject");XC.exports={executeSearch:jC,createSearchTypeFromSearchObject:JC,prepSearch:qz,searchByType:zC}});var eL=T((Zme,ZC)=>{"use strict";var Xme=Zn(),xz=Ec(),Fz=K(),kz=C(),$z=Ff();ZC.exports=Vz;function Vz(e,t){if(!Fz.isEmpty(t)&&kz.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=xz(e,"value");if(n)throw n;return $z.prepSearch(e,t,!0)}a(Vz,"lmdbGetDataByValue")});var fu=T((rSe,tL)=>{"use strict";var tSe=Zn(),Yz=Ec(),Kz=K(),Wz=C(),Qz=Ff();tL.exports=jz;async function jz(e,t){if(!Kz.isEmpty(t)&&Wz.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=Yz(e,"value");if(n)throw n;return Qz.prepSearch(e,t,!1)}a(jz,"lmdbSearchByValue")});var nL=T((iSe,rL)=>{"use strict";var sSe=_t(),RT=class{static{a(this,"SearchByConditionsObject")}constructor(t,r,n,s,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=n,this.limit=i,this.offset=o,this.conditions=s,this.operator=c}},AT=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},OT=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};rL.exports={SearchByConditionsObject:RT,SearchCondition:AT,SortAttribute:OT}});var cL=T((lSe,aL)=>{"use strict";var aSe=nL().SearchByConditionsObject,zz=Zn(),Jz=Ec(),NT=fc(),kf=_t(),{Resource:cSe}=(Qn(),oe(NS)),oL=Ff(),Xz=pT(),Zz=require("lodash"),{getSchemaPath:eJ}=ze(),sL=Ve(),{handleHDBError:tJ,hdb_errors:rJ}=ie(),{HTTP_STATUS_CODES:nJ}=rJ,sJ=1e8;aL.exports=iJ;async function iJ(e){let t=Jz(e,"conditions");if(t)throw tJ(t,t.message,nJ.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=eJ(e.schema,e.table),n=await sL.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)sL.openDBI(n,_.search_attribute);let i=Zz.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let u=_.search_type;u===kf.SEARCH_TYPES.EQUALS?_.estimated_count=NT.count(n,_.search_attribute,_.search_value):u===kf.SEARCH_TYPES.CONTAINS||u===kf.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=sJ}return _.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await iL(o,e,i[0],s.hash_attribute),l;if(!e.operator||e.operator.toLowerCase()==="and"){let _=n.dbis[s.hash_attribute],u=i.slice(1).map(oL.filterByType),d=u.length,f=NT.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(E=>_.get(E,{transaction:o,lazy:!0})),d>0&&(l=l.filter(E=>{for(let h=0;h<d;h++)if(!u[h](E))return!1;return!0})),(e.offset||e.limit!==void 0)&&(l=l.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),l=l.map(E=>Xz.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await iL(o,e,f,s.hash_attribute);c=c.concat(E)}let _=new Set,u=e.offset||0;c=c.filter(d=>_.has(d)?!1:(_.add(d),!0)).slice(u,e.limit&&e.limit+u),l=NT.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(iJ,"lmdbSearchByConditions");async function iL(e,t,r,n){let s=new zz(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===kf.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,oL.searchByType(e,s,i,n).map(o=>o.value)}a(iL,"executeConditionSearch")});var Eu=T((_Se,lL)=>{"use strict";var oJ=C().OPERATIONS_ENUM,bT=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=oJ.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};lL.exports=bT});var yT=T((fSe,mL)=>{"use strict";var fL=Zn(),EL=Eu(),hL=fu(),pL=lu(),Or=C(),uL=K(),_L=Ve(),{getTransactionAuditStorePath:aJ,getSchemaPath:cJ}=ze(),dL=x();mL.exports=lJ;async function lJ(e){try{if(uL.isEmpty(global.hdb_schema[e.schema])||uL.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await uJ(e),await _J(e);let t=cJ(e.schema,e.table);try{await _L.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")dL.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=aJ(e.schema,e.table);await _L.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")dL.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(lJ,"lmdbDropTable");async function uJ(e){let t=new fL(Or.SYSTEM_SCHEMA_NAME,Or.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Or.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Or.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await hL(t)),n=[];for(let i=0;i<r.length;i++){let o=r[i];n.push(o.id)}if(n.length===0)return;let s=new EL(Or.SYSTEM_SCHEMA_NAME,Or.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await pL(s)}a(uJ,"deleteAttributesFromSystem");async function _J(e){let t=new fL(Or.SYSTEM_SCHEMA_NAME,Or.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Or.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Or.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Or.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Or.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await hL(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&&(n=o)}if(!n)throw new Error(`${e.schema}.${e.table} was not found`);let s=new EL(Or.SYSTEM_SCHEMA_NAME,Or.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await pL(s)}catch(i){throw i}}a(_J,"dropTableFromSystem")});var TL=T((hSe,SL)=>{"use strict";var dJ=require("fs-extra"),fJ=Zn(),EJ=hc(),hJ=Eu(),pJ=yT(),mJ=lu(),SJ=ST(),TJ=fu(),ai=C(),{getSchemaPath:gJ}=ze(),{handleHDBError:RJ,hdb_errors:AJ}=ie(),{HDB_ERROR_MSGS:OJ,HTTP_STATUS_CODES:NJ}=AJ;SL.exports=bJ;async function bJ(e){let t;try{t=await yJ(e.schema);let r=new fJ(ai.SYSTEM_SCHEMA_NAME,ai.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,ai.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[ai.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await TJ(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await pJ(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new hJ(ai.SYSTEM_SCHEMA_NAME,ai.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await mJ(s);let i=gJ(t);await dJ.remove(i)}catch(r){throw r}}a(bJ,"lmdbDropSchema");async function yJ(e){let t=new EJ(ai.SYSTEM_SCHEMA_NAME,ai.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[ai.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await SJ(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw RJ(new Error,OJ.SCHEMA_NOT_FOUND(e),NJ.NOT_FOUND,void 0,void 0,!0);return n}a(yJ,"validateDropSchema")});var hu=T((mSe,gL)=>{"use strict";var IT=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};gL.exports=IT});var CT=T((gSe,RL)=>{"use strict";var IJ=require("fs-extra"),$f=Ve(),{getTransactionAuditStorePath:wJ}=ze(),wT=_t(),TSe=hu();RL.exports=CJ;async function CJ(e){let t;try{let r=wJ(e.schema,e.table);await IJ.mkdirp(r),t=await $f.createEnvironment(r,e.table,!0)}catch(r){throw r.message=`unable to create transactions audit environment for ${e.schema}.${e.table} due to: ${r.message}`,r}try{$f.createDBI(t,wT.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),$f.createDBI(t,wT.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),$f.createDBI(t,wT.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(CJ,"createTransactionsAuditEnvironment")});var bL=T((ASe,NL)=>{"use strict";var LT=C(),AL=Ve(),LJ=Yo(),{getSystemSchemaPath:DJ,getSchemaPath:PJ}=ze(),MJ=ri(),UJ=Lf(),DT=Cf(),vJ=x(),BJ=CT(),MT=MJ.hdb_table,OL=[];for(let e=0;e<MT.attributes.length;e++)OL.push(MT.attributes[e].attribute);NL.exports=HJ;async function HJ(e,t){let r=PJ(t.schema,t.table),n=new DT(t.schema,t.table,LT.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new DT(t.schema,t.table,LT.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new DT(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await AL.createEnvironment(r,t.table),e!==void 0){let o=await AL.openEnvironment(DJ(),LT.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await LJ.insertRecords(o,MT.hash_attribute,OL,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await PT(n),await PT(s),await PT(i)}await BJ(t)}catch(o){throw o}}a(HJ,"lmdbCreateTable");async function PT(e){try{await UJ(e)}catch(t){vJ.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(PT,"createAttribute")});var IL=T((NSe,yL)=>{"use strict";var qJ=su(),GJ=ou(),xJ=vf(),pu=C(),FJ=Yo().updateRecords,kJ=Ve(),{getSchemaPath:$J}=ze(),VJ=au(),YJ=x();yL.exports=KJ;async function KJ(e){try{let{schema_table:t,attributes:r}=qJ(e);GJ(e,r,t.hash_attribute),e.schema!==pu.SYSTEM_SCHEMA_NAME&&(r.includes(pu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(pu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(pu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(pu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await xJ(e.hdb_auth_header,t,r),s=$J(e.schema,e.table),i=await kJ.openEnvironment(s,e.table),o=await FJ(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await VJ(e,o)}catch(c){YJ.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:n,txn_time:o.txn_time}}catch(t){throw t}}a(KJ,"lmdbUpdateRecords")});var CL=T((ySe,wL)=>{"use strict";var WJ=C().OPERATIONS_ENUM,UT=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=WJ.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};wL.exports=UT});var DL=T((CSe,LL)=>{"use strict";var wSe=CL(),QJ=su(),jJ=ou(),zJ=vf(),mu=C(),JJ=Yo().upsertRecords,XJ=Ve(),{getSchemaPath:ZJ}=ze(),e2=au(),t2=x(),{handleHDBError:r2,hdb_errors:n2}=ie();LL.exports=s2;async function s2(e){let t;try{t=QJ(e)}catch(l){throw r2(l,l.message,n2.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;jJ(e,n,r.hash_attribute),e.schema!==mu.SYSTEM_SCHEMA_NAME&&(n.includes(mu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(mu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(mu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(mu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await zJ(e.hdb_auth_header,r,n),i=ZJ(e.schema,e.table),o=await XJ.openEnvironment(i,e.table),c=await JJ(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await e2(e,c)}catch(l){t2.error(`unable to write transaction due to ${l.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:s,txn_time:c.txn_time}}a(s2,"lmdbUpsertRecords")});var ML=T((DSe,PL)=>{"use strict";var vT=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};PL.exports=vT});var vL=T((MSe,UL)=>{"use strict";var BT=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,n=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=n}};UL.exports=BT});var qL=T((BSe,HL)=>{"use strict";var HT=Ve(),{getTransactionAuditStorePath:i2}=ze(),vSe=ML(),Su=_t(),o2=K(),BL=vL(),a2=require("util").promisify,c2=a2(setTimeout),l2=1e4,u2=100;HL.exports=_2;async function _2(e){let t=i2(e.schema,e.table),r=await HT.openEnvironment(t,e.table,!0),n=HT.listDBIs(r);HT.initializeDBIs(r,Su.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new BL;do s=await d2(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=s.start_timestamp),s.end_timestamp!==void 0&&(i.end_timestamp=s.end_timestamp),i.transactions_deleted+=s.transactions_deleted,await c2(u2);while(s.transactions_deleted>0);return i}a(_2,"deleteAuditLogsBefore");async function d2(e,t){let r=new BL;try{let n=e.dbis[Su.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let{key:i,value:o}of n.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),s=n.remove(i);let c=o[Su.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];o2.isEmpty(c)||(s=e.dbis[Su.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[Su.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>l2)break}return await s,r}catch(n){throw n}}a(d2,"deleteTransactions")});var xL=T((qSe,GL)=>{"use strict";var qT=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};GL.exports=qT});var kL=T((FSe,FL)=>{"use strict";var f2=Zn(),E2=Eu(),xSe=xL(),ws=C(),h2=K(),GT=Ve(),p2=ri(),m2=fu(),S2=lu(),{getSchemaPath:T2}=ze();FL.exports=g2;async function g2(e,t=!0){let r;e.schema===ws.SYSTEM_SCHEMA_NAME?r=p2[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await A2(e),s=T2(e.schema,e.table),i=await GT.openEnvironment(s,e.table);return t===!0&&await R2(e,i,r.hash_attribute),GT.dropDBI(i,e.attribute),n}a(g2,"lmdbDropAttribute");async function R2(e,t,r){let n=GT.openDBI(t,r),s,i=e.attribute;for(let{key:o,value:c,version:l}of n.getRange({start:!1,versions:!0})){let _={};for(let u in c)u!==i&&(_[u]=c[u]);s=t.dbis[r].put(o,_,l)}await s}a(R2,"removeAttributeFromAllObjects");async function A2(e){let t=new f2(ws.SYSTEM_SCHEMA_NAME,ws.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,ws.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[ws.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,ws.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await m2(t)).filter(o=>o[ws.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(h2.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[ws.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new E2(ws.SYSTEM_SCHEMA_NAME,ws.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return S2(i)}a(A2,"dropAttributeFromSystem")});var QL=T((VSe,WL)=>{"use strict";var xT=Ve(),pc=_t(),$Se=Tr(),FT=C(),$L=K(),{getTransactionAuditStorePath:O2}=ze(),N2=fc(),Vf=uc(),b2=x();WL.exports=y2;async function y2(e){let t=O2(e.schema,e.table),r=await xT.openEnvironment(t,e.table,!0),n=xT.listDBIs(r);xT.initializeDBIs(r,pc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case FT.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return VL(r,e.search_values);case FT.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,w2(r,e.search_values,s);case FT.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return I2(r,e.search_values);default:return VL(r)}}a(y2,"readAuditLog");function VL(e,t=[0,Date.now()]){$L.isEmpty(t[0])&&(t[0]=0),$L.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[pc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let s of r.getKeys({start:t[1]}))if(s!==t[1]){n=s;break}return r.getRange({start:t[0],end:n}).map(({value:s})=>Object.assign(new Vf,s))}a(VL,"searchTransactionsByTimestamp");function I2(e,t=[]){let r=new Map;for(let n=0;n<t.length;n++){let s=t[n],i=[];for(let o of e.dbis[pc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,KL(e,i))}return Object.fromEntries(r)}a(I2,"searchTransactionsByUsername");function w2(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let _=t[c],u=N2.equals(e,pc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,pc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,_);for(let{value:d}of u){let f=Number(d);n.has(f)?n.get(f).push(_.toString()):n.set(f,[_.toString()])}}let s=Array.from(n.keys()),i=KL(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],_=l.timestamp,u=n.get(_);YL(l,"records",r,u,o),YL(l,"original_records",r,u,o)}return Object.fromEntries(o)}a(w2,"searchTransactionsByHashValues");function YL(e,t,r,n,s){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],l=c[r].toString();if(n.indexOf(l)>=0)if(s.has(l)){let _=s.get(l),u=_[_.length-1];if(u.timestamp===i)u[t]=[c];else{let d=new Vf(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new Vf(e.operation,e.user_name,i,void 0);_[t]=[c],s.set(l,[_])}}}a(YL,"loopRecords");function KL(e,t){let r=[];try{let n=e.dbis[pc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let s=0;s<t.length;s++)try{let i=n.get(t[s]);if(i){let o=Object.assign(new Vf,i);r.push(o)}}catch(i){b2.warn(i)}return r}catch(n){throw n}}a(KL,"batchSearchTransactions")});var zL=T((QSe,jL)=>{"use strict";var{getSchemaPath:KSe}=ze(),WSe=Ve(),{database:C2}=(ge(),oe(Fe));jL.exports={writeTransaction:L2};async function L2(e,t,r){return C2({database:e,table:t}).transaction(r)}a(L2,"writeTransaction")});var eD=T((zSe,ZL)=>{"use strict";var{getSchemaPath:JL}=ze(),XL=Ve();ZL.exports={flush:D2,resetReadTxn:P2};async function D2(e,t){return(await XL.openEnvironment(JL(e,t),t.toString())).flushed}a(D2,"flush");async function P2(e,t){try{(await XL.openEnvironment(JL(e,t),t.toString())).resetReadTxn()}catch{}}a(P2,"resetReadTxn")});var sD=T((XSe,nD)=>{"use strict";var{Readable:M2}=require("stream"),{getDatabases:U2}=(ge(),oe(Fe)),{readSync:v2,openSync:B2,createReadStream:tD}=require("fs"),{open:H2}=require("lmdb"),rD=Sf(),q2=gf(),{AUDIT_STORE_OPTIONS:G2}=(Go(),oe(gI)),{INTERNAL_DBIS_NAME:x2,AUDIT_STORE_NAME:F2}=_t();nD.exports=$2;var kT=32768,k2=100;async function $2(e){let t=e.database||e.schema||"data",r=U2()[t],n=new Date().toISOString(),s=e.tables||e.table&&[e.table];if(s){let _=r[s[0]];if(!_)throw new Error(`Can not find table ${s[0]}`);let u=_.dbisDB,d=H2({noSync:!0,maxDbs:q2.MAX_DBS}),f,E=d.openDB(x2,new rD(!1)),h=u.useReadTransaction(),m=0,S=a(async function(g,A){A.encoding="binary",A.encoder=void 0;let P=d.openDB(g,A),v=u.openDB(g,A);for(let{key:U,version:F,value:H}of v.getRange({transaction:h,versions:v.useVersions}))f=P.put(U,H,F),m++%k2===0&&(await new Promise(j=>setTimeout(j,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:g,value:A}of u.getRange({transaction:h,start:!1}))if(s.some(P=>g.startsWith?.(P+"/"))){E.put(g,A);let[,P]=g.split("/"),v=!P,U=new rD(!v,v);await S(g,U)}e.include_audit&&await S(F2,Object.assign({},G2)),await f;let R=tD(d.path);return R.headers=l(),R.on("close",()=>{h.done(),d.close()}),R}let o=r[Object.keys(r)[0]].primaryStore,c=B2(o.path);return o.transaction(()=>{let _=Buffer.alloc(kT);v2(c,_,0,kT),o.resetReadTxn();let u=o.useReadTransaction();u.renew();let d=tD(null,{fd:c,start:kT}),f=new M2.from(async function*(){yield _;for await(let E of d)u.openTimer&&(u.openTimer=0),yield E;u.done()}());return f.headers=l(),f});function l(){let _=new Map;return _.set("content-type","application/octet-stream"),_.set("content-disposition",`attachment; filename="${t}"`),_.set("date",n),_}}a($2,"getBackup")});var aD=T((eTe,oD)=>{"use strict";var V2=x(),{handleHDBError:Y2}=ie(),K2=Ow(),W2=Lf(),Q2=_T(),j2=TC(),z2=lu(),J2=ST(),X2=YC(),Z2=eL(),e4=fu(),t4=cL(),r4=TL(),n4=bL(),s4=IL(),i4=DL(),o4=qL(),a4=yT(),c4=kL(),l4=QL(),u4=zL(),iD=eD(),_4=sD(),$T=class extends K2{static{a(this,"LMDBBridge")}async searchByConditions(t){return t4(t)}async getDataByHash(t){return await J2(t)}async searchByHash(t){return await X2(t)}async getDataByValue(t,r){return await Z2(t,r)}async searchByValue(t){return await e4(t)}async createSchema(t){return await j2(t)}async dropSchema(t){return await r4(t)}async createTable(t,r){return await n4(t,r)}async dropTable(t){return await a4(t)}async createAttribute(t){return await W2(t)}async createRecords(t){return await Q2(t)}async updateRecords(t){return await s4(t)}async upsertRecords(t){try{return await i4(t)}catch(r){throw Y2(r,null,null,V2.ERR,r)}}async deleteRecords(t){return await z2(t)}async dropAttribute(t){return await c4(t)}async deleteAuditLogsBefore(t){return await o4(t)}async readAuditLog(t){return await l4(t)}writeTransaction(t,r,n){return u4.writeTransaction(t,r,n)}flush(t,r){return iD.flush(t,r)}resetReadTxn(t,r){return iD.resetReadTxn(t,r)}getBackup(t){return _4(t)}};oD.exports=$T});var pD={};$e(pD,{ResourceBridge:()=>KT});function WT({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 lD(e,t){let r=Cs(e),n=WT(e,r);if(!r)throw new es.ClientError(`Table ${e.table} not found`);let s;n&&r.attributes.length-n.length>2&&n.length<5&&(s=!0);let i={user:e.hdb_user},o;Ze(i,()=>new Promise(_=>o=_));let c=e.ids||e.hash_values,l=0;return{[Symbol.asyncIterator](){return{async next(){if(l<c.length){let _=c[l++],u=await r.get({id:_,lazy:s,select:n},i);return u=u&&af(u),t?{value:{key:_,value:u}}:{value:u}}else return o(),{done:!0}},return(_){return o(),{value:_,done:!0}},throw(_){return o(),{done:!0}}}}}}function Cs(e){let t=e.database||e.schema||f4,r=ts()[t];if(!r)throw(0,es.handleHDBError)(new Error,d4.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function uD(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}async function*_D(e,t,r){let n;for await(let s of e.getHistory(t,r)){let i=s.type;i==="put"&&(i="upsert");let{id:o,version:c,value:l}=s;n?.timestamp===c?(n.hash_values.push(o),n.records.push(l)):(n&&(yield n),n={operation:i,user_name:s.user,timestamp:c,hash_values:[o],records:[l]})}n&&(yield n)}var dD,Yf,es,fD,ED,rs,VT,YT,hD,d4,f4,E4,h4,cD,KT,mD=Ne(()=>{"use strict";dD=q(aD()),Yf=q(Ec()),es=q(ie());ge();fD=q(su()),ED=q(ou()),rs=q(C()),VT=q(ii()),YT=q(Xn()),hD=q(K());$o();cf();({HDB_ERROR_MSGS:d4}=es.hdb_errors),f4="data",E4=1e4,h4=10,KT=class extends dD.default{static{a(this,"ResourceBridge")}constructor(t){super(t),cD=this}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);for(let o of t.conditions||[])o?.attribute!==void 0&&(o.search_attribute=o.attribute),o?.comparator!==void 0&&(o.search_type=o.comparator),o?.value!==void 0&&(o.search_value=o.value);let r=(0,Yf.default)(t,"conditions");if(r)throw(0,es.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=Cs(t);if(!n)throw new es.ClientError(`Table ${t.table} not found`);let s=t.conditions.map(i);function i(o){return o.conditions?(o.conditions=o.conditions.map(i),o):{attribute:o.search_attribute??o.attribute,comparator:o.search_type??o.comparator,value:o.search_value!==void 0?o.search_value:o.value}}return a(i,"mapCondition"),n.search({conditions:s,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:WT(t,n),sort:t.sort,allowFullScan:!0})}async createTable(t,r){let n=r.attributes,s=!!n,i=r.primary_key||r.hash_attribute;if(n)for(let o of n)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`");n=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}ft({database:r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration})}async createAttribute(t){return await Cs(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Cs(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=a((o,c,l)=>(c=Object.assign({},c),delete c[n],r.primaryStore.ifVersion(o,l,()=>r.primaryStore.put(o,c,l)).then(_=>{if(!_){let{value:u,version:d}=r.primaryStore.getEntry(o);return i(o,u,d)}})),"deleteRecord");for(let{key:o,value:c,version:l}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(o,c,l),await new Promise(_=>setImmediate(_));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){Cs(t).dropTable()}createSchema(t){return Tu({database:t.schema,table:null}),VT.signalSchemaChange(new YT.SchemaEventMsg(process.pid,rs.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await QT(t.schema),VT.signalSchemaChange(new YT.SchemaEventMsg(process.pid,rs.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,cD.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,fD.default)(t);(0,ED.default)(t,n,r.primaryKey);let s,i=ts()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return Ze(o,async c=>{if(!i.schemaDefined){s=[];for(let u of n)i.attributes.find(f=>f.name==u)||s.push(u);s.length>0&&await i.addAttributes(s.map(u=>({name:u,indexed:!0})))}let l=[],_=[];for(let u of t.records){let d=await i.get(u[i.primaryKey],o);if(t.requires_existing&&!d||t.requires_no_existing&&d){_.push(u[i.primaryKey]);continue}d&&(d=af(d));for(let f in u)if(Object.prototype.hasOwnProperty.call(u,f)){let E=u[f];if(typeof E=="function")try{let h=E([[d]]);Array.isArray(h)&&(E=h[0].func_val,u[f]=E)}catch(h){throw h.message+="Trying to set key "+f+" on object"+JSON.stringify(u),h}}if(d)for(let f in d)Object.prototype.hasOwnProperty.call(u,f)||(u[f]=d[f]);await i.put(u,o),l.push(u[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:l,new_attributes:s,skipped_hashes:_}})}async deleteRecords(t){let r=ts()[t.schema][t.table],n={user:t.hdb_user};return Ze(n,async s=>{let i=t.hash_values||t.records.map(l=>l[r.primaryKey]),o=[],c=[];for(let l of i)await r.delete(l,n)?o.push(l):c.push(l);return uD(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=ts()[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 n=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:rs.VALUE_SEARCH_COMPARATORS.LESS}]}),s=!1,i=[],o=[],c=0,l=[],_=a(async()=>{let u=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:l});i.push(...u.deleted_hashes),o.push(...u.skipped_hashes),await(0,hD.async_set_timeout)(h4),l=[],s=!0},"chunkDelete");for await(let u of n)l.push(u[r.primaryKey]),c++,c%E4===0&&await _();return l.length>0&&await _(),s?uD(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,Yf.default)(t,"hashes");if(r)throw r;return lD(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of lD(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&rs.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);t.select!==void 0&&(t.get_attributes=t.select),t.attribute!==void 0&&(t.search_attribute=condition.attribute),t.value!==void 0&&(t.search_value=condition.value);let n=(0,Yf.default)(t,"value");if(n)throw n;let s=Cs(t);if(!s)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===rs.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return s.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:WT(t,s)})}async getDataByValue(t,r){let n=new Map,s=Cs(t);t.get_attributes&&!t.get_attributes.includes(s.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(s.primaryKey);for await(let i of this.searchByValue(t,r))n.set(i[s.primaryKey],i);return n}resetReadTxn(t,r){Cs({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Cs(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=Cs(t),n={};switch(t.search_type){case rs.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)n[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 n;case rs.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let s=t.search_values;for await(let i of _D(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return _D(r,t.search_values?.[0],t.search_values?.[1])}}};a(WT,"getSelect");a(lD,"getRecords");a(Cs,"getTable");a(uD,"createDeleteResponse");a(_D,"groupRecordsInHistory")});var Cn=T((oTe,SD)=>{"use strict";var{ResourceBridge:p4}=(mD(),oe(pD)),m4=X();m4.initSync();var Kf;function S4(){return Kf||(Kf=new p4,Kf)}a(S4,"getBridge");SD.exports=S4()});var AD=T((cTe,RD)=>{"use strict";var TD=require("lodash"),gu=require("mathjs"),T4=require("jsonata"),gD=K();RD.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?TD.uniqWith(e,TD.isEqual):e,searchJSON:g4,mad:Ru.bind(null,gu.mad),mean:Ru.bind(null,gu.mean),mode:Ru.bind(null,gu.mode),prod:Ru.bind(null,gu.prod),median:Ru.bind(null,gu.median)};function Ru(e,t,r,n){return n===1?t==null?[]:[t]:n===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(Ru,"aggregateFunction");function g4(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(gD.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),gD.isEmpty(this.__ala__.res[r])){let n=T4(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(g4,"searchJSON")});var ND=T((uTe,OD)=>{"use strict";var Rt=require("moment"),jT="YYYY-MM-DDTHH:mm:ss.SSSZZ";Rt.suppressDeprecationWarnings=!0;OD.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(jT),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 n=Rt(e).utc(),s=Rt(t).utc();return r?n.diff(s,r,!0):n.diff(s)},now:()=>Rt().utc().valueOf(),get_server_time:()=>Rt().format(jT),offset_utc:(e,t)=>Rt(e).utc().utcOffset(t).format(jT)}});var wD=T((_Te,ID)=>{"use strict";var R4=require("@turf/area"),A4=require("@turf/length"),O4=require("@turf/circle"),N4=require("@turf/difference"),b4=require("@turf/distance"),y4=require("@turf/boolean-contains"),I4=require("@turf/boolean-equal"),w4=require("@turf/boolean-disjoint"),C4=require("@turf/helpers"),bD=C(),Se=K(),ci=x();ID.exports={geoArea:L4,geoLength:D4,geoCircle:P4,geoDifference:M4,geoDistance:yD,geoNear:U4,geoContains:v4,geoEqual:B4,geoCrosses:H4,geoConvert:q4};function L4(e){if(Se.isEmpty(e))return NaN;typeof e=="string"&&(e=Se.autoCastJSON(e));try{return R4.default(e)}catch(t){return ci.trace(t,e),NaN}}a(L4,"geoArea");function D4(e,t){if(Se.isEmpty(e))return NaN;typeof e=="string"&&(e=Se.autoCastJSON(e));try{return A4.default(e,{units:t||"kilometers"})}catch(r){return ci.trace(r,e),NaN}}a(D4,"geoLength");function P4(e,t,r){if(Se.isEmpty(e))return NaN;if(Se.isEmpty(t))return NaN;typeof e=="string"&&(e=Se.autoCastJSON(e));try{return O4.default(e,t,{units:r||"kilometers"})}catch(n){return ci.trace(n,e,t),NaN}}a(P4,"geoCircle");function M4(e,t){if(Se.isEmpty(e))return NaN;if(Se.isEmpty(t))return NaN;typeof e=="string"&&(e=Se.autoCastJSON(e)),typeof t=="string"&&(t=Se.autoCastJSON(t));try{return N4(e,t)}catch(r){return ci.trace(r,e,t),NaN}}a(M4,"geoDifference");function yD(e,t,r){if(Se.isEmpty(e))return NaN;if(Se.isEmpty(t))return NaN;typeof e=="string"&&(e=Se.autoCastJSON(e)),typeof t=="string"&&(t=Se.autoCastJSON(t));try{return b4.default(e,t,{units:r||"kilometers"})}catch(n){return ci.trace(n,e,t),NaN}}a(yD,"geoDistance");function U4(e,t,r,n){if(Se.isEmpty(e)||Se.isEmpty(t))return!1;if(Se.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=Se.autoCastJSON(e)),typeof t=="string"&&(t=Se.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return yD(e,t,n)<=r}catch(s){return ci.trace(s,e,t),!1}}a(U4,"geoNear");function v4(e,t){if(Se.isEmpty(e)||Se.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Se.autoCastJSON(e)),typeof t=="string"&&(t=Se.autoCastJSON(t));try{return y4.default(e,t)}catch(r){return ci.trace(r,e,t),!1}}a(v4,"geoContains");function B4(e,t){if(Se.isEmpty(e)||Se.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Se.autoCastJSON(e)),typeof t=="string"&&(t=Se.autoCastJSON(t));try{return I4.default(e,t)}catch(r){return ci.trace(r,e,t),!1}}a(B4,"geoEqual");function H4(e,t){if(Se.isEmpty(e)||Se.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Se.autoCastJSON(e)),typeof t=="string"&&(t=Se.autoCastJSON(t));try{return!w4.default(e,t)}catch(r){return ci.trace(r,e,t),!1}}a(H4,"geoCrosses");function q4(e,t,r){if(Se.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(Se.isEmpty(t))throw new Error("geo_type is required");if(Se.isEmpty(bD.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(bD.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Se.autoCastJSON(e)),C4[t](e,r)}a(q4,"geoConvert")});var Wf=T((fTe,CD)=>{var zo=AD(),en=ND(),Ls=wD();CD.exports=e=>{e.aggr.mad=e.aggr.MAD=zo.mad,e.aggr.mean=e.aggr.MEAN=zo.mean,e.aggr.mode=e.aggr.MODE=zo.mode,e.aggr.prod=e.aggr.PROD=zo.prod,e.aggr.median=e.aggr.MEDIAN=zo.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=zo.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=zo.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=en.current_date,e.fn.current_time=e.fn.CURRENT_TIME=en.current_time,e.fn.extract=e.fn.EXTRACT=en.extract,e.fn.date=e.fn.DATE=en.date,e.fn.date_format=e.fn.DATE_FORMAT=en.date_format,e.fn.date_add=e.fn.DATE_ADD=en.date_add,e.fn.date_sub=e.fn.DATE_SUB=en.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=en.date_diff,e.fn.now=e.fn.NOW=en.now,e.fn.offset_utc=e.fn.OFFSET_UTC=en.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=en.get_server_time,e.fn.getdate=e.fn.GETDATE=en.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=en.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Ls.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Ls.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Ls.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Ls.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Ls.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Ls.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Ls.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Ls.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Ls.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Ls.geoNear}});var MD=T((ETe,PD)=>{"use strict";var Au=require("lodash"),Nr=require("alasql");Nr.options.cache=!1;var G4=Wf(),LD=require("clone"),Qf=require("recursive-iterator"),de=x(),Le=K(),mc=Cn(),x4=C(),{hdb_errors:F4}=ie(),{getDatabases:DD}=(ge(),oe(Fe)),k4="IS NULL",ns="There was a problem performing this search. Please check the logs and try again.";G4(Nr);var zT=class{static{a(this,"SQLSearch")}constructor(t,r){if(Le.isEmpty(t))throw de.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),Le.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!Le.isEmptyOrZeroLength(n))return de.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw de.error("Error thrown from checkEmptySQL in SQLSearch class method search."),de.error(n),new Error(ns)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw de.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),de.error(n),new Error(ns)}if(Object.keys(this.data).length===0)return de.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw de.error("Error thrown from processJoins in SQLSearch class method search."),de.error(n),new Error(ns)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw de.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),de.error(n),new Error(ns)}try{return t=await this._finalSQL(),t}catch(n){throw de.error("Error thrown from finalSQL in SQLSearch class method search."),de.error(n),new Error(ns)}}_getColumns(){let t=new Qf(this.statement);for(let{node:r,path:n}of t)r&&r.columnid&&(this.columns[n[0]]||(this.columns[n[0]]=[]),this.columns[n[0]].push(LD(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Au.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let n=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[n]={},this.data[n].__hash_name=DD()[r.databaseid][r.tableid].primaryKey,this.data[n].__merged_data={},this.data[n].__merged_attributes=[],this.data[n].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(Le.isEmpty(this.statement.where)){de.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Qf(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!Le.isEmpty(r)&&r.right)if(Le.isNotEmptyAndHasValue(r.right.value)){let n=Le.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new Nr.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=Le.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new Nr.yy.LogicValue({value:i}):n instanceof Nr.yy.StringValue&&Le.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new Nr.yy.NumValue({value:i}))});if(t){de.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Qf(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let n=new Set,s=r.left.columnid?r.left:r.right,i=this._findColumn(s);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!Le.isEmpty(x4.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(Le.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(Le.isEmptyOrZeroLength(r.left.columnid)||Le.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[o].ignore=!0,this.comparator_search_values[o].comparators=[];continue}this.comparator_search_values[o].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(Le.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let c=!1;switch(r.op){case"=":!Le.isEmpty(r.right.value)||!Le.isEmpty(r.left.value)?n.add(Le.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let l=Array.isArray(r.right)?r.right:r.left;for(let _=0;_<l.length;_++)if(l[_].value)n.add(l[_].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,...n])}}}_setAliasesForColumns(){if(Le.isEmptyOrZeroLength(this.all_table_attributes)&&Le.isEmptyOrZeroLength(this.statement.from)&&Le.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((n,s)=>{if(n.columnid==="*"){t.push(s);return}if(n.aggregatorid&&(this.has_aggregator=!0),!n.aggregatorid&&!n.funcid)if(n.as_orig=n.as?n.as:n.columnid,this.statement.joins)if(r[n.as_orig]>=0){let i=r[n.as_orig]+1;n.as=`[${n.as_orig+i}]`,r[n.as_orig]=i}else n.as=`[${n.as_orig}]`,r[n.as_orig]=0;else n.as=`[${n.as_orig}]`;!n.aggregatorid&&n.funcid&&n.args&&(n.as_orig=n.as?n.as:n.toString().replace(/'/g,'"'),n.as=`[${n.as_orig}]`),n.aggregatorid&&n.expression.columnid!=="*"&&(n.as_orig=n.as?n.as:n.expression.tableid?`${n.aggregatorid}(${n.expression.tableid}.${n.expression.columnid})`:`${n.aggregatorid}(${n.expression.columnid})`,n.as=`[${n.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&Au.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(n=>{if(t.columnid_orig&&t.tableid_orig)return(n.table.as===t.tableid_orig||n.table.tableid===t.tableid_orig)&&n.attribute===t.columnid_orig;if(t.tableid)return(n.table.as===t.tableid||n.table.tableid===t.tableid)&&n.attribute===t.columnid;let s=t.columnid_orig?t.columnid_orig:t.columnid;return n.attribute===s});if(Le.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);Le.isEmptyOrZeroLength(n)||(r=this.all_table_attributes.filter(s=>s.attribute===n[0].columnid&&n[0].tableid&&n[0].tableid===(s.table.as?s.table.as:s.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(Le.isEmptyOrZeroLength(this.all_table_attributes)&&!Le.isEmptyOrZeroLength(this.columns.columns))return t;if(Le.isEmptyOrZeroLength(this.all_table_attributes)&&Le.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Nr.promise(r)}catch(r){throw de.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),de.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let n=this._findColumn(r);n&&this.fetch_attributes.push(LD(n))})}_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,n,s){let i=this.data[t].__merged_attr_map[n];this.data[t].__merged_data[r].splice(i,1,s)}async _getFetchAttributeValues(){if(Le.isEmptyOrZeroLength(Object.keys(this.columns)))return[];this._addFetchColumns(this.columns.joins);let t=null;try{t=this.statement.where?this.statement.where.toString():""}catch{throw new Error("Could not generate proper where clause")}this.columns.where&&this._addFetchColumns(this.columns.where);let r=this._isSimpleSelect();if(r?this._addFetchColumns(this.columns.columns):(!this.columns.where&&this.fetch_attributes.length===0)|t.indexOf(k4)>-1&&this.tables.forEach(s=>{let i={columnid:DD()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Au.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return s[o]||(s[o]=[],s[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(s[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,o=this.data[i].__hash_name,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},l=!1,_=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(l=!0),!Le.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!Le.isEmptyOrZeroLength(this.exact_search_values[_].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[_].values);let u=await mc.getDataByHash(c);for(let d of c.hash_values)u.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d))}catch(u){throw de.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),de.error(u),new Error(ns)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[_].values).map(async u=>{let d=Object.assign({},c);d.search_value=u;let f=await mc.getDataByValue(d);for(let[E,h]of f)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,s.attribute,h[s.attribute]):(this.data[i].__merged_data[E]=[...n[i]],this._updateMergedAttribute(i,E,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,E))}))}catch(u){throw de.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),de.error(u),new Error(ns)}else if(!Le.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!Le.isEmptyOrZeroLength(this.comparator_search_values[_].comparators))try{let u=this.comparator_search_values[_].comparators;for(let d=0,f=u.length;d<f;d++){let E=u[d];c.search_attribute=E.attribute,c.search_value=E.search_value;let h=await mc.getDataByValue(c,E.operation);if(l)for(let[m]of h)this.data[i].__merged_data[m]||(this.data[i].__merged_data[m]=[...n[i]],this._setMergedHashAttribute(i,m));else for(let[m,S]of h)this.data[i].__merged_data[m]?this._updateMergedAttribute(i,m,s.attribute,S[s.attribute]):(this.data[i].__merged_data[m]=[...n[i]],this._updateMergedAttribute(i,m,s.attribute,S[s.attribute]),this._setMergedHashAttribute(i,m))}}catch(u){throw de.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),de.error(u),new Error(ns)}else try{c.search_attribute=s.attribute,c.search_value="*";let u=await mc.getDataByValue(c);if(l)for(let[d]of u)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d));else for(let[d,f]of u)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,s.attribute,f[s.attribute]):(this.data[i].__merged_data[d]=[...n[i]],this._updateMergedAttribute(i,d,s.attribute,f[s.attribute]),this._setMergedHashAttribute(i,d))}catch(u){throw de.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),de.error(u),new Error(ns)}}}_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 Nr.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(s=>{let i=s.aggregatorid?s.expression:s,o=s.aggregatorid?s.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 n=r[0];if(t.is_func=!!n.funcid,t.is_aggregator=!!n.aggregatorid,n.as)if(n.as&&!t.expression.tableid)t.expression.columnid=n.as,t.expression.columnid_orig=n.as_orig;else{let s=new Nr.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new Nr.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 s=t.is_func?new Nr.yy.FuncValue:new Nr.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(E=>{E.joinmode&&E.joinmode!=="INNER"&&(this.has_outer_join=!0),s.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={};s.forEach(E=>{let h=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__hash_name,m=E.as?E.as_orig:E.tableid_orig;o.push({key:`'${m}.${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 "${m}.${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 l=this.statement.where?"WHERE "+this.statement.where:"";l=l.replace(/NOT\(NULL\)/g,"NOT NULL");let _="";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 u="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(u=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(" ")} ${l} ${_} ${u} ${d}`,h=this._convertColumnsToIndexes(E,s);f=await Nr.promise(h,t),t=null}catch(E){throw de.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),de.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 m=f[E];o.forEach(S=>{m[S.key]!==null&&m[S.key]!==void 0&&S.keys.add(m[S.key])})}o.forEach(E=>{let h=Object.keys(this.data[`${E.schema}_${E.table}`].__merged_data),m=Au.difference(h,[...E.keys].map(S=>S.toString()));for(let S=0,R=m.length;S<R;S++){let g=m[S];delete this.data[`${E.schema}_${E.table}`].__merged_data[g]}})}return{existing_attributes:c,joined_length:f?f.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new Qf(this.columns);for(let{node:i}of s)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)&&n.push(o)}}n=Au.uniqBy(n,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(n)}catch(i){throw de.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),de.error(i),new Error(ns)}}async _getData(t){try{let r=t.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]?n[i].columns.push(s.attribute):n[i]={schema:s.table.databaseid,table:s.table.tableid,columns:[s.attribute]},n},{});for(let n in r){let s=r[n],i=this.data[n].__merged_data,o=[];for(let u in i)o.push(i[u][0]);this.data[n].__merged_attributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:o,get_attributes:s.columns},l=await mc.getDataByHash(c),_=s.columns.length;for(let u=0,d=o.length;u<d;u++){let f=o[u],E=l.get(f);for(let h=0;h<_;h++){let m=s.columns[h],S=E[m]===void 0?null:E[m];this.data[n].__merged_data[f].push(S)}}}}catch(r){throw de.error("Error thrown from getDataByHash function in SQLSearch class method getData."),de.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(s=>{s.as=s.as?s.as:s.table.tableid,t.push(Object.values(this.data[`${s.table.databaseid_orig}_${s.table.as?s.table.as_orig:s.table.tableid_orig}`].__merged_data)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,l=o.aggregatorid?o.as_orig:c.as_orig;return s.expression.tableid?c.columnid_orig===s.expression.columnid_orig&&c.tableid_orig===s.expression.tableid_orig:c.columnid_orig===s.expression.columnid_orig||s.expression.columnid_orig===l}).length===0&&(s.expression.columnid=s.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let n;try{let s=this._buildSQL();de.trace(`Final SQL: ${s}`),n=await Nr.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),de.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw de.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),de.error(s),new Error("There was a problem running the generated sql.")}return n}_translateUndefinedValues(t){try{let r=[];for(let n of t){let s=Object.create(null);Object.keys(n).forEach(i=>{n[i]===void 0?s[i]=null:s[i]=n[i]}),r.push(s)}return r}catch(r){return de.error(F4.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),de.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return r=r.replace(/NOT\(NULL\)/g,"NOT NULL"),this.statement.columns.forEach(n=>{if(n.funcid&&n.as){let s=n.toString().replace(" AS "+n.as,"");r=r.replace(n.toString(),s)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let n=t,s={};r.forEach(i=>{i.databaseid_orig?s[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:s[`${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 l=s[i],_=new RegExp(`${l}.\`${o}\``,"g"),u=`${l}.[${c}]`;n=n.replace(_,u)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=new RegExp(`\`${o}\``,"g"),_=`[${c}]`;n=n.replace(l,_)});return n}async _simpleSQLQuery(){let t=this.statement.columns.reduce((n,s)=>(s.as_orig&&s.as_orig!=s.columnid_orig?n[s.columnid_orig]=s.as_orig:n[s.columnid_orig]||(n[s.columnid_orig]=s.columnid_orig),n),{}),r=this.fetch_attributes.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]||(n[i]={}),n[i][t[s.attribute]]=null,n},{});for(let n of this.fetch_attributes){let s=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,i={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]};try{i.search_attribute=n.attribute,i.search_value="*";let o=await mc.getDataByValue(i);for(let[c,l]of o)this.data[s].__merged_data[c]||(l[n.attribute]===void 0&&(l[n.attribute]=null),this.data[s].__merged_data[c]=Object.assign({},r[s])),this.data[s].__merged_data[c][t[n.attribute]]=l[n.attribute]??null}catch(o){throw de.error("There was an error when processing this SQL operation. Check your logs"),de.error(o),new Error(ns)}}return Object.values(Object.values(this.data)[0].__merged_data)}};PD.exports=zT});var nr=T((pTe,UD)=>{"use strict";var $4=Rw();UD.exports={searchByConditions:Y4,searchByHash:K4,searchByValue:W4,search:Q4};var JT=Cn(),{transformReq:XT}=K(),V4=MD();async function Y4(e){return XT(e),JT.searchByConditions(e)}a(Y4,"searchByConditions");async function K4(e){XT(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of JT.searchByHash(e))r&&t.push(r);return t}a(K4,"searchByHash");async function W4(e){XT(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of JT.searchByValue(e))t.push(r);return t}a(W4,"searchByValue");function Q4(e,t){try{let r=new $4(e);r.validate(),new V4(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(Q4,"search")});var li=T((STe,qD)=>{"use strict";var Ou=require("crypto"),j4=X(),{CONFIG_PARAMS:z4}=C(),BD="aes-256-cbc",J4=32,X4=16,ZT=64,HD=32,Z4=ZT+HD,vD=new Map;qD.exports={encrypt:e3,decrypt:t3,createNatsTableStreamName:r3};function e3(e){let t=Ou.randomBytes(J4),r=Ou.randomBytes(X4),n=Ou.createCipheriv(BD,Buffer.from(t),r),s=n.update(e);s=Buffer.concat([s,n.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=s.toString("hex");return i+o+c}a(e3,"encrypt");function t3(e){let t=e.substr(0,ZT),r=e.substr(ZT,HD),n=e.substr(Z4,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Ou.createDecipheriv(BD,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(t3,"decrypt");function r3(e,t){let r=j4.get(z4.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=vD.get(r);return n||(n=Ou.createHash("md5").update(r).digest("hex"),vD.set(r,n)),n}a(r3,"createNatsTableStreamName")});var zi=T((RTe,xD)=>{"use strict";var gTe=nr(),jf=x(),GD=wf(),n3=li(),zf=K(),{handleHDBError:Jf,hdb_errors:s3}=ie(),{HDB_ERROR_MSGS:Xf,HTTP_STATUS_CODES:eg}=s3,i3=X();i3.initSync();var{getDatabases:tg}=(ge(),oe(Fe));xD.exports={describeAll:o3,describeTable:Zf,describeSchema:a3};async function o3(e){try{let t=zf.isEmptyOrZeroLength(e),r,n;t||(r=e.hdb_user.role.permission,n=r.super_user||r.cluster_user);let s=tg(),i={},o={},c=[],l=e?.exact_count;for(let u in s){i[u]=!0,!t&&!n&&(o[u]=e.hdb_user.role.permission[u].describe);let d=s[u];for(let f in d)try{let E;if(t||n)E=await Zf({schema:u,table:f,exact_count:l});else if(r&&r[u].describe&&r[u].tables[f].describe){let h=r[u].tables[f].attribute_permissions;E=await Zf({schema:u,table:f,exact_count:l},h)}E&&c.push(E)}catch(E){jf.error(E)}}let _={};for(let u in c)t||n?(_[c[u].schema]==null&&(_[c[u].schema]={}),_[c[u].schema][c[u].name]=c[u],i[c[u].schema]&&delete i[c[u].schema]):o[c[u].schema]&&(_[c[u].schema]==null&&(_[c[u].schema]={}),_[c[u].schema][c[u].name]=c[u],i[c[u].schema]&&delete i[c[u].schema]);for(let u in i)t||n?_[u]={}:o[u]&&(_[u]={});return _}catch(t){return jf.error("Got an error in describeAll"),jf.error(t),Jf(new Error,Xf.DESCRIBE_ALL_ERR)}}a(o3,"describeAll");async function Zf(e,t){zf.transformReq(e);let{schema:r,table:n}=e;r=r?.toString(),n=n?.toString();let s=t;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(s=e.hdb_user.role.permission[r].tables[n].attribute_permissions);let i=GD.describe_table(e);if(i)throw i;let c=tg()[r];if(!c)throw Jf(new Error,Xf.SCHEMA_NOT_FOUND(e.schema),eg.NOT_FOUND);let l=c[n];if(!l)throw Jf(new Error,Xf.TABLE_NOT_FOUND(e.schema,e.table),eg.NOT_FOUND);function _(f){u.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 u=[];if(s){let f={};s.forEach(E=>{E.describe&&(f[E.attribute_name]=!0)}),l.attributes.forEach(E=>{f[E.name]&&_(E)})}else l.attributes?.forEach(f=>_(f));let d={schema:r,name:l.tableName,hash_attribute:l.attributes.find(f=>f.isPrimaryKey||f.is_hash_attribute)?.name,audit:l.audit,schema_defined:l.schemaDefined,attributes:u};d.clustering_stream_name=n3.createNatsTableStreamName(d.schema,d.name);try{let f=l.getRecordCount({exactCount:e.exact_count==="true"});d.record_count=f.recordCount,d.estimated_record_range=f.estimatedRange;let E=l.auditStore;if(E)for(let h of E.getKeys({reverse:!0,limit:1}))d.last_updated_record=h[0];if(!d.last_updated_record&&l.indices.__updatedtime__)for(let h of l.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))d.last_updated_record=h}catch(f){jf.warn(`unable to stat table dbi due to ${f}`)}return d}a(Zf,"descTable");async function a3(e){zf.transformReq(e);let t=GD.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 n=e.schema.toString(),i=tg()[n];if(!i)throw Jf(new Error,Xf.SCHEMA_NOT_FOUND(e.schema),eg.NOT_FOUND);let o={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),zf.isEmpty(l)||l.describe){let _=await Zf({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(a3,"describeSchema")});var Ln=T((bTe,YD)=>{var c3=ri(),{callbackify:kD,promisify:l3}=require("util"),{getDatabases:$D}=(ge(),oe(Fe));YD.exports={setSchemaDataToGlobal:FD,getTableSchema:u3,getSystemSchema:_3,setSchemaDataToGlobalAsync:l3(FD)};var VD=zi(),OTe=kD(VD.describeAll),NTe=kD(VD.describeTable);function FD(e){global.hdb_schema=$D(),e&&e()}a(FD,"setSchemaDataToGlobal");function u3(e,t,r){let n=$D()[e];if(!n)return r(`schema ${e} does not exist`);let s=n[t];return s?r(null,{schema:e,name:t,hash_attribute:s.primaryKey}):r(`table ${e}.${t} does not exist`)}a(u3,"getTableSchema");function _3(){return c3}a(_3,"getSystemSchema")});var br=T((ITe,jD)=>{"use strict";var tE=nT(),zt=K(),d3=require("util"),rE=Cn(),f3=Ln(),KD=x(),{handleHDBError:Jo,hdb_errors:E3}=ie(),{HTTP_STATUS_CODES:Xo}=E3,h3=d3.promisify(f3.getTableSchema),p3="updated",WD="inserted",QD="upserted";jD.exports={insert:S3,update:T3,upsert:g3,validation:m3,flush:R3};async function m3(e){if(zt.isEmpty(e))throw new Error("invalid update parameters defined.");if(zt.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(zt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await h3(e.schema,e.table),r=tE(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let n=t.hash_attribute,s=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&zt.isEmptyOrZeroLength(c[n]))throw KD.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(!zt.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw KD.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!zt.isEmpty(c[n])&&c[n]!==""&&s.has(zt.autoCast(c[n]))&&(c.skip=!0),s.add(zt.autoCast(c[n]));for(let l in c)i[l]=1}),i[n]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(i)}}a(m3,"validation");async function S3(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=tE(e);if(t)throw Jo(new Error,t.message,Xo.BAD_REQUEST);zt.transformReq(e);let r=zt.checkSchemaTableExist(e.schema,e.table);if(r)throw Jo(new Error,r,Xo.BAD_REQUEST);let n=await rE.createRecords(e);return eE(WD,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(S3,"insertData");async function T3(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=tE(e);if(t)throw Jo(new Error,t.message,Xo.BAD_REQUEST);zt.transformReq(e);let r=zt.checkSchemaTableExist(e.schema,e.table);if(r)throw Jo(new Error,r,Xo.BAD_REQUEST);let n=await rE.updateRecords(e);return zt.isEmpty(n.existing_rows)?eE(p3,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):eE(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(T3,"updateData");async function g3(e){if(e.operation!=="upsert")throw Jo(new Error,"invalid operation, must be upsert",Xo.INTERNAL_SERVER_ERROR);let t=tE(e);if(t)throw Jo(new Error,t.message,Xo.BAD_REQUEST);zt.transformReq(e);let r=zt.checkSchemaTableExist(e.schema,e.table);if(r)throw Jo(new Error,r,Xo.BAD_REQUEST);let n=await rE.upsertRecords(e);return eE(QD,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(g3,"upsertData");function eE(e,t,r,n,s,i){let o={message:`${e} ${t.length} of ${t.length+n.length} records`,new_attributes:s,txn_time:i};return e===WD?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===QD?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(eE,"returnObject");function R3(e){return zt.transformReq(e),rE.flush(e.schema,e.table)}a(R3,"flush")});var ng=T((CTe,XD)=>{var A3=rt(),rg=require("joi"),{hdb_table:O3,hdb_database:zD}=ys(),JD={schema:zD,database:zD,table:O3},N3={date:rg.date().iso().required()},b3={timestamp:rg.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};XD.exports=function(e,t){let r=t==="timestamp"?{...JD,...b3}:{...JD,...N3},n=rg.object(r);return A3.validateBySchema(e,n)}});var tP=T((LTe,eP)=>{var y3=rt(),sg=require("joi"),{hdb_table:I3,hdb_database:ZD}=ys(),w3=sg.object({schema:ZD,database:ZD,table:I3,hash_values:sg.array().required(),ids:sg.array()});eP.exports=function(e){return y3.validateBySchema(e,w3)}});var cg=T((DTe,rP)=>{"use strict";var ig=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i){this.operation=t,this.schema=r,this.table=n,this.hash_attribute=s,this.records=i}},og=class{static{a(this,"NoSQLSeachObject")}constructor(t,r,n,s,i,o){this.schema=t,this.table=r,this.search_attribute=n,this.hash_attribute=s,this.get_attributes=i,this.search_value=o}},ag=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};rP.exports={InsertObject:ig,NoSQLSeachObject:og,DeleteResponseObject:ag}});var ta=T((MTe,aP)=>{"use strict";var sP=ng(),C3=tP(),Zo=K(),nP=require("moment"),iP=x(),{promisify:L3,callbackify:D3}=require("util"),ea=C(),P3=Ln(),lg=L3(P3.getTableSchema),ug=Cn(),{DeleteResponseObject:M3}=cg(),{handleHDBError:Ji,hdb_errors:U3}=ie(),{HDB_ERROR_MSGS:nE,HTTP_STATUS_CODES:Xi}=U3,v3="records successfully deleted",B3=D3(oP);aP.exports={delete:B3,deleteRecord:oP,deleteFilesBefore:H3,deleteAuditLogsBefore:q3};async function H3(e){let t=sP(e,"date");if(t)throw Ji(t,t.message,Xi.BAD_REQUEST,void 0,void 0,!0);if(Zo.transformReq(e),!nP(e.date,nP.ISO_8601).isValid())throw Ji(new Error,nE.INVALID_DATE,Xi.BAD_REQUEST,ea.LOG_LEVELS.ERROR,nE.INVALID_DATE,!0);let n=Zo.checkSchemaTableExist(e.schema,e.table);if(n)throw Ji(new Error,n,Xi.NOT_FOUND,ea.LOG_LEVELS.ERROR,n,!0);let s=await ug.deleteRecordsBefore(e);if(await lg(e.schema,e.table),iP.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(H3,"deleteFilesBefore");async function q3(e){let t=sP(e,"timestamp");if(t)throw Ji(t,t.message,Xi.BAD_REQUEST,void 0,void 0,!0);if(Zo.transformReq(e),isNaN(e.timestamp))throw Ji(new Error,nE.INVALID_VALUE("Timestamp"),Xi.BAD_REQUEST,ea.LOG_LEVELS.ERROR,nE.INVALID_VALUE("Timestamp"),!0);let r=Zo.checkSchemaTableExist(e.schema,e.table);if(r)throw Ji(new Error,r,Xi.NOT_FOUND,ea.LOG_LEVELS.ERROR,r,!0);let n=await ug.deleteAuditLogsBefore(e);return await lg(e.schema,e.table),iP.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(q3,"deleteAuditLogsBefore");async function oP(e){e.ids&&(e.hash_values=e.ids);let t=C3(e);if(t)throw Ji(t,t.message,Xi.BAD_REQUEST,void 0,void 0,!0);Zo.transformReq(e);let r=Zo.checkSchemaTableExist(e.schema,e.table);if(r)throw Ji(new Error,r,Xi.NOT_FOUND,ea.LOG_LEVELS.ERROR,r,!0);try{await lg(e.schema,e.table);let n=await ug.deleteRecords(e);return Zo.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${v3}`),n}catch(n){if(n.message===ea.SEARCH_NOT_FOUND_MESSAGE){let s=new M3;return s.message=ea.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(oP,"deleteRecord")});var sE=T((vTe,uP)=>{var G3=require("crypto"),cP=9;function x3(e){let t=k3(cP),r=lP(e+t);return t+r}a(x3,"createHash");function F3(e,t){let r=e?.substr(0,cP),n=r+lP(t+r);return e===n}a(F3,"validateHash");function k3(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,n="";for(let s=0;s<e;s++){let i=Math.floor(Math.random()*r);n+=t[i]}return n}a(k3,"generateSalt");function lP(e){return G3.createHash("md5").update(e).digest("hex")}a(lP,"md5");uP.exports={hash:x3,validate:F3}});var dP=T((HTe,_P)=>{var _g=rt(),sr={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 $3(e){return sr.password.presence=!0,sr.username.presence=!0,sr.role.presence=!0,sr.active.presence=!0,_g.validateObject(e,sr)}a($3,"addUserValidation");function V3(e){return sr.password.presence=!1,sr.username.presence=!0,sr.role.presence=!1,sr.active.presence=!1,_g.validateObject(e,sr)}a(V3,"alterUserValidation");function Y3(e){return sr.password.presence=!1,sr.username.presence=!0,sr.role.presence=!1,sr.active.presence=!1,_g.validateObject(e,sr)}a(Y3,"dropUserValidation");_P.exports={addUserValidation:$3,alterUserValidation:V3,dropUserValidation:Y3}});var et=T((xTe,EP)=>{"use strict";var{platform:GTe}=require("os"),K3="nats-server.zip",dg="nats-server",W3=process.platform==="win32"?`${dg}.exe`:dg,Q3=/^[^\s.,*>]+$/,fP="__request__",j3=a(e=>`${e}.${fP}`,"REQUEST_SUBJECT"),z3={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},J3={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},X3={HUB:"hub.pid",LEAF:"leaf.pid"},Z3={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},eX={SUCCESS:"success",ERROR:"error"},tX={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},rX={TXN:"txn",MSGID:"msgid"},Sc={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},nX={[Sc.ERR]:1,[Sc.WRN]:2,[Sc.INF]:3,[Sc.DBG]:4,[Sc.TRC]:5},sX={debug:"-D",trace:"-DVV"};EP.exports={NATS_SERVER_ZIP:K3,NATS_SERVER_NAME:dg,NATS_BINARY_NAME:W3,PID_FILES:X3,NATS_CONFIG_FILES:J3,SERVER_SUFFIX:Z3,NATS_TERM_CONSTRAINTS_RX:Q3,REQUEST_SUFFIX:fP,UPDATE_REMOTE_RESPONSE_STATUSES:eX,CLUSTER_STATUS_STATUSES:tX,REQUEST_SUBJECT:j3,SUBJECT_PREFIXES:rX,MSG_HEADERS:z3,LOG_LEVELS:Sc,LOG_LEVEL_FLAGS:sX,LOG_LEVEL_HIERARCHY:nX}});var fg=T((kTe,hP)=>{"use strict";var iX={key:"-----BEGIN RSA PRIVATE KEY-----\rMIIEowIBAAKCAQEArBFJQRfFiJku/KwhV1Ssp7cX61vvuKmd4Rp6A9jB2QLgx8nj\r/+Xhp2hPRkISnOA8BuAxr4dMD9syGJwX4kNy9mbZ5Q0fWZCiEGBpVcU1J+k+N5K4\rSuZ2SqgxeN2IN2RLzt3GyQY4imcdHgNv7aHoXUrEwBx0MeYEw3IIDXtrYKCR2D8I\rvWBfwMUgWa24G8lpWILWA5hd9srRz9NxlAiHSjhbgT7B0xruEpHRCHSyKjvaIJVt\rWBR+amejYsAKVrD/hgrqjsA1123Y6++YqvU6vwg64xhS2kz5r3dkNKhvwbWgpZdI\rIaRvsiB77f4kLGo0vi8RFgJ1ZRjGg3RRK2w1LQIDAQABAoIBAQCEOmh78EOpnGZC\rYBjjHrvrysVD5gvLcfVUtl8Ls7gMB60re1eOIF+PoZZCHKZnDd6zPfiQtj1adg0C\rYnnsM/8VoaZS4gm0b3RLd3ubIQifWhuo40RissY2yxfxlPSH9LhZCY8ojnJG0cTL\resK579E8WCfopjUY33XLqEbN7Ylv39J+DSqInjqV3efJZUa+HqUJ98VxxzodcKMD\rP3bwUU4gHoSSp4pAsOFH5sQhaIWH1IcNjrAwpee2cJQuh4G157RRIuuUpagtaEG/\rXJIiAyBguJyu3JQFnIBQF01N5+omJgXYJ1L0m54543/iIRThmF3zDCDgCyUzmOk+\rH6As9fv1AoGBANOpOtOZLSAScjGsgJamT3ceJ2wCa86g2j8Oxu8lJUmUp5s3tA0v\rBFW5O3S4KR1EXwkLMBUMrfFM8YvzHWxsXBI6XV8azGLvyqPHxr65OhmpGYkGZMXu\rn9okgjkqlewnY2I073gvyK7ppX51UL5y9fF1vlsk+UlW+Rgx/vMHbdcjAoGBANAc\rxRUsxs4QJpbS4zD3JOkHjr24a97TrS3kCybAHUMpR2NrEHPZw9zex0/aphOJUHfL\rIMkOZdpfDqMfxWy4FAEmqBEMkO2SB+h0Wp4P+qp81ax4vGFiB0cD3wtixr11U1tt\rlZ/ZTdv4VDpDFNK1KaplhTDeyuCjeYfS3/GJia9vAoGAcOsAgjBevZR5rXx84WH6\rVO8WUu37u7FenXNxt9VWTinrPMh72uixZFY8nOk+rely1e1NCn3IMko9Ns9NbDFm\r8SaH95vhXArXTYbfxZIlp9jp0YtCqcHDL+p4Oq04bFMbFyJseu7rHj1x18QYfnHw\rOY/6LL/N6k1m+Hx7qgXVmIcCgYB/w0nTCBw84XlvWqSTqQaF8VfWbWP79mP5KmkW\rLxdH5g2noVEGbohqDnK6OXd/wusdwByukiJBf94Skyy25AOT+VFwthA7aU1ljhkb\rtJ+lDuJ28eBkwLPLCzthWBC+u0qjdJFJAzVjd/7tjcU43nNn4s90AzL12iaAFhvZ\rwyA+DQKBgGc/4cdyGJ3YkcA8150gQBawgJZ7q8V1JND87ggWA8wnK3cHn7rMZQl2\r3emDp9HEFXFex5dbGDDqZFAoesZCDxjknIn9oNfW4PvaWS8q7b6ZKLZG1p03Pu7/\rtYaD0kPbo0kysfFT/co+NgHbdykvIyboomfGdNLTUjYuy6lpwpvs\r-----END RSA PRIVATE KEY-----\r".replace(/\r/g,`\r
|
|
6
6
|
`),cert:"-----BEGIN CERTIFICATE-----\rMIIDXDCCAkSgAwIBAgIFNTE4MzQwDQYJKoZIhvcNAQELBQAwXTEXMBUGA1UEAxMO\rSGFycGVyREIsIEluYy4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UE\rBxMGRGVudmVyMRcwFQYDVQQKEw5IYXJwZXJEQiwgSW5jLjAeFw0yMjAzMTEyMzAz\rNDlaFw0yNzAzMTAyMzAzNDlaMF0xFzAVBgNVBAMTDkhhcnBlckRCLCBJbmMuMQsw\rCQYDVQQGEwJVUzELMAkGA1UECBMCQ08xDzANBgNVBAcTBkRlbnZlcjEXMBUGA1UE\rChMOSGFycGVyREIsIEluYy4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB\rAQCsEUlBF8WImS78rCFXVKyntxfrW++4qZ3hGnoD2MHZAuDHyeP/5eGnaE9GQhKc\r4DwG4DGvh0wP2zIYnBfiQ3L2ZtnlDR9ZkKIQYGlVxTUn6T43krhK5nZKqDF43Yg3\rZEvO3cbJBjiKZx0eA2/toehdSsTAHHQx5gTDcggNe2tgoJHYPwi9YF/AxSBZrbgb\ryWlYgtYDmF32ytHP03GUCIdKOFuBPsHTGu4SkdEIdLIqO9oglW1YFH5qZ6NiwApW\rsP+GCuqOwDXXbdjr75iq9Tq/CDrjGFLaTPmvd2Q0qG/BtaCll0ghpG+yIHvt/iQs\rajS+LxEWAnVlGMaDdFErbDUtAgMBAAGjIzAhMA8GA1UdEwEB/wQFMAMBAf8wDgYD\rVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBCwUAA4IBAQASR4YW/rPK7PNArHVe9zzM\rb0rKNX/2T9/0nybRhmE/+hdlSgliTAeebmwkUS2APckmekYt/q2ZY2NS65Fo/jjp\rG8TJrtcF4h+ylVqUp0ZXQLFtIsr7r2JZA7hJ6njW6G4DHSZ0gxtECLi4CBlTjzm5\rNmnmIDObvGRTuqmcdAZmXeObbta/He2XIzietukPAYX062pNM+G5XT5UM1eG/Vlp\rN86vjhpyI+ffKy+C60SJqxmKM3ydgN7oLscE7+2wLPN25XqN4W99OwGsp5dTdu/f\r5lPtFayXdJ55e/sNQKmGN+UGLrL05c2MWgjb8U/LFilnupUianceoeSERZmVjzKX\r-----END CERTIFICATE-----\r".replace(/\r/g,`\r
|
|
7
|
-
`)},C3="certificate.pem",L3="privateKey.pem",D3="ca.pem";kD.exports={CERTIFICATE_VALUES:w3,CERTIFICATE_PEM_NAME:C3,PRIVATEKEY_PEM_NAME:L3,CA_PEM_NAME:D3}});var eg=T((uTe,WD)=>{"use strict";var KD=require("fs-extra"),_e=require("joi"),P3=require("os"),{boolean:qe,string:wn,number:Yt,array:ZT}=_e.types(),{totalmem:$D}=require("os"),ta=require("path"),M3=q(),Jf=Y(),lTe=XT(),VD=C(),U3=rt(),YD="log",v3="components",B3="Invalid logging.rotation.maxSize unit. Available units are G, M or K",H3="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",q3="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",x3="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",G3="rootPath config parameter is undefined",F3="clustering.enabled config parameter is undefined",ra=Yt.min(0).required(),Xf=ZT.items({host:wn.required(),port:ra}).empty(null),Ls;WD.exports={configValidator:k3,routesValidator:Q3,route_constraints:Xf};function k3(e){if(Ls=e.rootPath,Jf.isEmpty(Ls))throw G3;let t=qe.required(),r=Yt.min(0).max(1e3).empty(null).default(W3),n=wn.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(bu),s=wn.optional().empty(null),i=wn.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),o=_e.string().empty(null).default(bu),c=_e.custom(V3).empty(null).default(bu),l=e.clustering?.enabled;if(Jf.isEmpty(l))throw F3;let _;return l===!0?_=_e.object({enabled:t,hubServer:_e.object({cluster:_e.object({name:_e.required().empty(null),network:_e.object({port:ra,routes:Xf}).required()}).required(),leafNodes:_e.object({network:_e.object({port:ra}).required()}).required(),network:_e.object({port:ra}).required()}).required(),leafServer:_e.object({network:_e.object({port:ra,routes:Xf}).required(),streams:_e.object({maxAge:Yt.min(120).allow(null).optional(),maxBytes:Yt.min(1).allow(null).optional(),maxMsgs:Yt.min(1).allow(null).optional(),path:o}).required()}).required(),logLevel:_e.valid("error","warn","info","debug","trace"),nodeName:i,republishMessages:qe.optional(),databaseLevel:qe.optional(),tls:_e.object({certificate:s,certificateAuthority:s,privateKey:s,insecure:qe.required(),verify:qe.optional()}),user:wn.optional().empty(null)}).required():_=_e.object({enabled:t,tls:_e.object({certificate:s,certificateAuthority:s,privateKey:s,insecure:qe.required()})}).required(),_e.object({authentication:_e.object({authorizeLocal:qe,cacheTTL:Yt.required(),enableSessions:qe}),analytics:_e.object({aggregatePeriod:Yt}),componentsRoot:n.optional(),clustering:_,localStudio:_e.object({enabled:t}).required(),logging:_e.object({auditAuthEvents:_e.object({logFailed:qe,logSuccessful:qe}),file:qe.required(),level:_e.valid("notify","fatal","error","warn","info","debug","trace"),rotation:_e.object({enabled:qe.optional(),compress:qe.optional(),interval:wn.custom(K3).optional().empty(null),maxSize:wn.custom(Y3).optional().empty(null),path:wn.optional().empty(null).default(bu)}).required(),root:n,stdStreams:qe.required(),auditLog:qe.required()}).required(),operationsApi:_e.object({network:_e.object({cors:qe.optional(),corsAccessList:ZT.optional(),headersTimeout:Yt.min(1).optional(),keepAliveTimeout:Yt.min(1).optional(),port:Yt.optional().empty(null),domainSocket:_e.optional().empty("hdb/operations-server").default(bu),securePort:Yt.optional().empty(null),timeout:Yt.min(1).optional()}).optional(),tls:_e.object({certificate:s,certificateAuthority:s,privateKey:s})}).required(),rootPath:wn.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:_e.object({network:_e.object({port:ra,securePort:ra,mtls:_e.alternatives([qe.optional(),_e.object({user:wn.optional(),certificateAuthority:s})])}).required(),webSocket:qe.optional(),requireAuthentication:qe.optional()}),http:_e.object({compressionThreshold:Yt.optional(),cors:qe.optional(),corsAccessList:ZT.optional(),headersTimeout:Yt.min(1).optional(),port:Yt.min(0).optional().empty(null),securePort:Yt.min(0).optional().empty(null)}).required(),threads:r.optional(),maxHeapMemory:Yt.min(0).optional(),storage:_e.object({writeAsync:qe.required(),overlappingSync:qe.optional(),caching:qe.optional(),compression:qe.optional(),noReadAhead:qe.optional(),path:c,prefetchWrites:qe.optional()}).required(),ignoreScripts:qe.optional(),tls:_e.object({certificate:s.optional(),certificateAuthority:s.optional(),privateKey:s.optional(),ciphers:wn.optional()})}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(k3,"configValidator");function $3(e){return KD.existsSync(e)?null:`Specified path ${e} does not exist.`}a($3,"doesPathExist");function V3(e,t){_e.assert(e,wn.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=$3(e);if(r)return t.message(r)}a(V3,"validatePath");function Y3(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(B3);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(q3):e}a(Y3,"validateRotationMaxSize");function K3(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(H3);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(x3):e}a(K3,"validateRotationInterval");function W3(e,t){let r=t.state.path.join("."),n=P3.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||$D();return i=Math.round(Math.min(i,$D())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),M3.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(W3,"setDefaultThreads");function bu(e,t){let r=t.state.path.join(".");if(!Jf.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(Jf.isEmpty(Ls))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return ta.join(Ls,v3);case"logging.root":return ta.join(Ls,YD);case"clustering.leafServer.streams.path":return ta.join(Ls,"clustering","leaf");case"storage.path":let n=ta.join(Ls,VD.LEGACY_DATABASES_DIR_NAME);return KD.existsSync(n)?n:ta.join(Ls,VD.DATABASES_DIR_NAME);case"logging.rotation.path":return ta.join(Ls,YD);case"operationsApi.network.domainSocket":return r==null?null:ta.join(Ls,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(bu,"setDefaultRoot");function Q3(e){let t=_e.object({routes:Xf});return U3.validateBySchema({routes:e},t)}a(Q3,"routesValidator")});var St=T((fTe,rP)=>{"use strict";var rn=C(),Kt=Y(),Bt=q(),{configValidator:j3,routesValidator:QD}=eg(),br=require("fs-extra"),z3=require("yaml"),is=require("path"),J3=require("is-number"),zD=require("properties-reader"),X3=require("lodash"),{handleHDBError:Z3}=te(),{HTTP_STATUS_CODES:eX,HDB_ERROR_MSGS:Zf}=Qr(),dTe=require("minimist"),{server:tX}=(hr(),re(vo)),{DATABASES_PARAM_CONFIG:yu,CONFIG_PARAMS:tn,CONFIG_PARAM_MAP:os}=rn,rX="Unable to get config value because config is uninitialized",nX="Config successfully initialized",sX="Error backing up config file",iX="Empty parameter sent to getConfigValue",JD=is.join(rn.PACKAGE_ROOT,"config","yaml",rn.HDB_DEFAULT_CONFIG_FILE),oX="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",jD={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"},eE,Ht,tE;rP.exports={createConfigFile:aX,getDefaultConfig:cX,getConfigValue:ZD,initConfig:rg,flattenConfig:Sc,updateConfigValue:eP,updateConfigObject:uX,getConfiguration:fX,setConfiguration:EX,readConfigFile:sg,getClusteringRoutes:hX,initOldConfig:tP,getConfigFromFile:mX,getConfigFilePath:na,addConfig:pX,deleteConfigFromFile:SX,getConfigObj:TX};function aX(e){let t=Ji(JD);eE=Sc(t.toJSON());let r;for(let o in e){let c=os[o.toLowerCase()];if(c===tn.DATABASES){r=e[o];continue}if(!c&&o.endsWith("_package")&&(c=o),c!==void 0){let l=c.split("_"),_=tg(c,e[o]);c==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{t.setIn([...l],_)}catch(u){Bt.error(u)}}}r&&XD(t,r),ng(t);let n=t.toJSON();Ht=Sc(n);let s=t.getIn(["rootPath"]),i=is.join(s,rn.HDB_CONFIG_FILE);br.createFileSync(i),br.writeFileSync(i,String(t)),Bt.trace(`Config file written to ${i}`)}a(aX,"createConfigFile");function XD(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!Kt.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(yu.TABLES))for(let i in n[s][yu.TABLES])for(let o in n[s][yu.TABLES][i]){let c=n[s][yu.TABLES][i][o],l=[tn.DATABASES,s,yu.TABLES,i,o];e.hasIn(l)?e.setIn(l,c):e.addIn(l,c)}else for(let i in n[s]){let o=n[s][i],c=[tn.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){Bt.error("Error parsing schemas CLI/env config arguments",n)}}a(XD,"setSchemasConfig");function cX(e){if(eE===void 0){let r=Ji(JD);eE=Sc(r.toJSON())}let t=os[e.toLowerCase()];if(t!==void 0)return eE[t.toLowerCase()]}a(cX,"getDefaultConfig");function ZD(e){if(e==null){Bt.error(iX);return}if(Ht===void 0){Bt.trace(rX);return}let t=os[e.toLowerCase()];if(t!==void 0)return Ht[t.toLowerCase()]}a(ZD,"getConfigValue");function na(e=Kt.getPropsFilePath()){let t=Kt.getEnvCliRootPath();return t?is.join(t,rn.HDB_CONFIG_FILE):zD(e).get(rn.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(na,"getConfigFilePath");function rg(e=!1){if(Ht===void 0||e){let t;if(!Kt.noBootFile()){t=Kt.getPropsFilePath();try{br.accessSync(t,br.constants.F_OK|br.constants.R_OK)}catch(i){throw Bt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=na(t),n;if(r.includes("config/settings.js"))try{tP(r);return}catch(i){if(i.code!==rn.NODE_ERROR_CODES.ENOENT)throw i}try{n=Ji(r)}catch(i){if(i.code===rn.NODE_ERROR_CODES.ENOENT){Bt.trace(`HarperDB config file not found at ${r}.
|
|
8
|
-
This can occur during early stages of install where the config file has not yet been created`);return}else throw Bt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}lX(n,r),ng(n);let s=n.toJSON();if(tX.config=s,Ht=Sc(s),Ht.logging_rotation_rotate)for(let i in jD)Ht[i]&&Bt.error(`Config ${jD[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);Bt.trace(nX)}}a(rg,"initConfig");function lX(e,t){let r=e.getIn(["rootPath"]),n=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],is.join(r,"database")),n=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],is.join(r,"clustering","leaf")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],is.join(r,"log")),n=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),n=!0),n&&(Bt.trace("Updating config file with missing config params"),br.writeFileSync(t,String(e)))}a(lX,"checkForUpdatedConfig");function ng(e){let t=e.toJSON();t.componentsRoot=t.componentsRoot??t?.customFunctions?.root,t.threads=t.threads??t?.http?.threads;let r=j3(t);if(r.error)throw Zf.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),e.setIn(["operationsApi","network","domainSocket"],r.value?.operationsApi?.network?.domainSocket)}a(ng,"validateConfig");function uX(e,t){Ht===void 0&&(Ht={});let r=os[e.toLowerCase()];if(r===void 0){Bt.trace(`Unable to update config object because config param '${e}' does not exist`);return}Ht[r.toLowerCase()]=t}a(uX,"updateConfigObject");function eP(e,t,r=void 0,n=!1,s=!1,i=!1){Ht===void 0&&rg();let o=ZD(os.hdb_root),c=is.join(o,rn.HDB_CONFIG_FILE),l=Ji(c),_;if(r===void 0&&e.toLowerCase()===tn.DATABASES)_=t;else if(r===void 0){let f;if(i)f=e;else if(f=os[e.toLowerCase()],f===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=f.split("_"),h=tg(f,t);l.setIn([...E],h)}else for(let f in r){let E=os[f.toLowerCase()];if(E===tn.HTTP_SECUREPORT&&r[f]===Ht[tn.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),E===tn.OPERATIONSAPI_NETWORK_SECUREPORT&&r[f]===Ht[tn.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),E===tn.DATABASES){_=r[f];continue}if(!E&&f.endsWith("_package")&&(E=f),E!==void 0){let h=E.split("_"),p=rn.LEGACY_CONFIG_PARAMS[f.toUpperCase()];p&&p.startsWith("customFunctions")&&l.hasIn(p.split("_"))&&(E=p,h=p.split("_"));let S=tg(E,r[f]);E==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{h.length>1&&typeof l.getIn(h.slice(0,-1))=="boolean"&&l.deleteIn(h.slice(0,-1)),l.setIn([...h],S)}catch(A){Bt.error(A)}}}_&&XD(l,_),ng(l);let u=l.getIn(["rootPath"]),d=is.join(u,rn.HDB_CONFIG_FILE);n===!0&&_X(c,u),br.writeFileSync(d,String(l)),s&&(Ht=Sc(l.toJSON())),Bt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(eP,"updateConfigValue");function _X(e,t){try{let r=is.join(t,"backup",`${rn.HDB_CONFIG_FILE}.bak`);br.copySync(e,r),Bt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){Bt.error(sX),Bt.error(r)}}a(_X,"backupConfigFile");var dX=["databases"];function Sc(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)),tE=e,r(e);function r(n){let s={};for(let i in n)if(n.hasOwnProperty(i))if(typeof n[i]=="object"&&n[i]!==null&&!Array.isArray(n[i])&&!dX.includes(i)){let o=r(n[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let l=i+"_"+c;!tn[l.toUpperCase()]&&os[l]&&(s[os[l].toLowerCase()]=o[c]),s[l]=o[c]}}else s[i.toLowerCase()]=n[i];return s}a(r,"squashObj")}a(Sc,"flattenConfig");function tg(e,t){if(e===tn.CLUSTERING_NODENAME||e===tn.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(J3(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Kt.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 Kt.autoCast(t)}a(tg,"castConfigValue");function fX(){let e=Kt.getPropsFilePath(),t=na(e);return Ji(t).toJSON()}a(fX,"getConfiguration");async function EX(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return eP(void 0,void 0,s,!0),oX}catch(i){throw typeof i=="string"||i instanceof String?Z3(i,i,eX.BAD_REQUEST,void 0,void 0,!0):i}}a(EX,"setConfiguration");function sg(){let e=Kt.getPropsFilePath();try{br.accessSync(e,br.constants.F_OK|br.constants.R_OK)}catch(n){if(!Kt.noBootFile())throw Bt.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=na(e);return Ji(t).toJSON()}a(sg,"readConfigFile");function Ji(e){return z3.parseDocument(br.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Ji,"parseYamlDoc");function hX(){let e=sg(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Kt.isEmptyOrZeroLength(t)?[]:t;let r=QD(t);if(r)throw Zf.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Kt.isEmptyOrZeroLength(n)?[]:n;let s=QD(n);if(s)throw Zf.CONFIG_VALIDATION(s.message);if(!Kt.isEmptyOrZeroLength(n)&&!Kt.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!Kt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Zf.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(hX,"getClusteringRoutes");function tP(e){let t=zD(e);Ht={};for(let r in os){let n=t.get(r.toUpperCase());if(Kt.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=os[r].toLowerCase();s===tn.LOGGING_ROOT?Ht[s]=is.dirname(n):Ht[s]=n}return Ht}a(tP,"initOldConfig");function mX(e){let t=sg();return X3.get(t,e.replaceAll("_","."))}a(mX,"getConfigFromFile");async function pX(e,t){let r=Ji(na());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await br.writeFile(na(),String(r))}a(pX,"addConfig");function SX(e){let t=na(Kt.getPropsFilePath()),r=Ji(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=is.join(n,rn.HDB_CONFIG_FILE);br.writeFileSync(s,String(r))}a(SX,"deleteConfigFromFile");function TX(){return tE||(rg(),tE)}a(TX,"getConfigObj")});var sP=T((hTe,nP)=>{"use strict";var rE=C(),nE=class{static{a(this,"BaseLicense")}constructor(t=0,r=rE.RAM_ALLOCATION_ENUM.DEFAULT,n=rE.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},ig=class extends nE{static{a(this,"ExtendedLicense")}constructor(t=0,r=rE.RAM_ALLOCATION_ENUM.DEFAULT,n=rE.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};nP.exports={BaseLicense:nE,ExtendedLicense:ig}});var sa=T((pTe,uP)=>{"use strict";var gc=require("fs-extra"),oP=zf(),aP=require("crypto"),gX=require("moment"),RX=require("uuid").v4,or=q(),ag=require("path"),AX=Y(),Xi=C(),{totalmem:iP}=require("os"),OX=sP().ExtendedLicense,Tc="invalid license key format",NX="061183",bX="mofi25",yX="aes-256-cbc",IX=16,wX=32,cP=J();cP.initSync();var og;uP.exports={validateLicense:lP,generateFingerPrint:LX,licenseSearch:ug,getLicense:MX,checkMemoryLimit:UX};function cg(){return ag.join(cP.getHdbBasePath(),Xi.LICENSE_KEY_DIR_NAME,Xi.LICENSE_FILE_NAME)}a(cg,"getLicenseDirPath");function CX(){let e=cg();return ag.join(e,Xi.LICENSE_FILE_NAME)}a(CX,"getLicenseFilePath");function lg(){let e=cg();return ag.join(e,Xi.REG_KEY_FILE_NAME)}a(lg,"getFingerPrintFilePath");async function LX(){let e=lg();try{return await gc.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await DX();throw or.error(`Error writing fingerprint file to ${e}`),or.error(t),new Error("There was an error generating the fingerprint")}}a(LX,"generateFingerPrint");async function DX(){let e=RX(),t=oP.hash(e),r=lg();try{await gc.mkdirp(cg()),await gc.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw or.error(`Error writing fingerprint file to ${r}`),or.error(n),new Error("There was an error generating the fingerprint")}return t}a(DX,"writeFingerprint");function lP(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:Xi.RAM_ALLOCATION_ENUM.DEFAULT,version:Xi.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return or.error("empty license key passed to validate."),r;let n=lg(),s=!1;try{s=gc.statSync(n)}catch(i){or.error(i)}if(s){let i;try{i=gc.readFileSync(n,"utf8")}catch{or.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(bX),c=o[1];c=Buffer.concat([Buffer.from(c)],IX);let l=Buffer.concat([Buffer.from(i)],wX),_=aP.createDecipheriv(yX,l,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let u=null;try{u=_.update(o[0],"hex","utf8"),u.trim(),u+=_.final("utf8")}catch{let E=PX(o[0],i);if(E)u=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Tc),or.error(Tc),new Error(Tc)}let d;if(isNaN(u))try{d=JSON.parse(u),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(Tc),or.error(Tc),new Error(Tc)}else r.exp_date=u;r.exp_date<gX().valueOf()&&(r.valid_date=!1),oP.validate(o[1],`${NX}${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||or.error("Invalid licence"),r}a(lP,"validateLicense");function PX(e,t){try{let r=aP.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{or.warn("Check old license failed")}}a(PX,"checkOldLicense");function ug(){let e=new OX,t=[];try{t=gc.readFileSync(CX(),"utf-8").split(Xi.NEW_LINE)}catch(r){r.code==="ENOENT"?or.info("no license file found"):or.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(AX.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=lP(s.license_key,s.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(s){or.error("There was an error parsing the license string."),or.error(s),e.ram_allocation=Xi.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return og=e,e}a(ug,"licenseSearch");async function MX(){return og||await ug(),og}a(MX,"getLicense");function UX(){let e=ug().ram_allocation,t=process.constrainedMemory?.()||iP();if(t=Math.round(Math.min(t,iP())/2**20),t>e)return`This server has more memory (${t}MB) than HarperDB is licensed for (${e}MB), this should only be used for educational and development purposes.`}a(UX,"checkMemoryLimit")});var yr=T((ATe,yP)=>{"use strict";var EP="username is required",hP="nothing to update, must supply active, role or password to update",mP="password cannot be an empty string",pP="If role is specified, it cannot be empty.",SP="active must be true or false";yP.exports={addUser:$X,alterUser:VX,dropUser:KX,getSuperUser:zX,userInfo:WX,listUsers:iE,listUsersExternal:QX,setUsersToGlobal:Ac,findAndValidateUser:NP,getClusterUser:JX,USERNAME_REQUIRED:EP,ALTERUSER_NOTHING_TO_UPDATE:hP,EMPTY_PASSWORD:mP,EMPTY_ROLE:pP,ACTIVE_BOOLEAN:SP};var TP=Nr(),vX=ea(),fg=zf(),gP=xD(),RP=Or(),Eg=ii(),nn=Y(),AP=require("validate.js"),Ae=q(),{promisify:BX}=require("util"),hg=li(),_P=C(),dP=Ze(),HX=St(),TTe=J(),gTe=sa(),qX=ri(),{table:RTe}=(Re(),re(xe)),{handleHDBError:Ds,hdb_errors:xX}=te(),{HTTP_STATUS_CODES:Ps,AUTHENTICATION_ERROR_MSGS:_g,HDB_ERROR_MSGS:Rc}=xX,{UserEventMsg:mg}=Zn(),dg=require("lodash"),{server:pg}=(hr(),re(vo)),GX=q();pg.getUser=(e,t)=>NP(e,t,t!=null);var OP={username:!0,active:!0,role:!0,password:!0},fP=new Map,sE=RP.searchByValue,FX=RP.searchByHash,kX=BX(vX.delete);async function $X(e){let t=AP.cleanAttributes(e,OP),r=gP.addUserValidation(t);if(r)throw Ds(new Error,r.message,Ps.BAD_REQUEST,void 0,void 0,!0);let n={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},s;try{s=await sE(n),s=s&&Array.from(s)}catch(l){throw Ae.error("There was an error searching for a role in add user"),Ae.error(l),l}if(!s||s.length<1)throw Ds(new Error,Rc.ROLE_NAME_NOT_FOUND(t.role),Ps.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw Ds(new Error,Rc.DUP_ROLES_FOUND(t.role),Ps.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=hg.encrypt(t.password)),t.password=fg.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await TP.insert(i)}catch(l){throw Ae.error("There was an error searching for a user."),Ae.error(l),l}Ae.debug(o);try{await Ac()}catch(l){throw Ae.error("Got an error setting users to global"),Ae.error(l),l}if(o.skipped_hashes.length===1)throw Ds(new Error,Rc.USER_ALREADY_EXISTS(t.username),Ps.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=s[0],Eg.signalUserChange(new mg(process.pid)),`${c.username} successfully added`}a($X,"addUser");async function VX(e){let t=AP.cleanAttributes(e,OP);if(nn.isEmptyOrZeroLength(t.username))throw new Error(EP);if(nn.isEmptyOrZeroLength(t.password)&&nn.isEmptyOrZeroLength(t.role)&&nn.isEmptyOrZeroLength(t.active))throw new Error(hP);if(!nn.isEmpty(t.password)&&nn.isEmptyOrZeroLength(t.password.trim()))throw new Error(mP);if(!nn.isEmpty(t.active)&&!nn.isBoolean(t.active))throw new Error(SP);let r=YX(t.username);if(!nn.isEmpty(t.password)&&!nn.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=hg.encrypt(t.password)),t.password=fg.hash(t.password)),t.role==="")throw new Error(pP);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 sE(i)||[])}catch(c){throw Ae.error("Got an error searching for a role."),Ae.error(c),c}if(!o||o.length===0){let c=Rc.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Ae.error(c),Ds(new Error,c,Ps.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=Rc.ALTER_USER_DUP_ROLES(t.role);throw Ae.error(c),Ds(new Error,c,Ps.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let n={operation:"update",schema:"system",table:"hdb_user",records:[t]},s;try{s=await TP.update(n)}catch(i){throw Ae.error("Error during update."),Ae.error(i),i}try{await Ac()}catch(i){throw Ae.error("Got an error setting users to global"),Ae.error(i),i}return Eg.signalUserChange(new mg(process.pid)),s}a(VX,"alterUser");function YX(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(YX,"isClusterUser");async function KX(e){try{let t=gP.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(nn.isEmpty(global.hdb_users.get(e.username)))throw Ds(new Error,Rc.USER_NOT_EXIST(e.username),Ps.NOT_FOUND,void 0,void 0,!0);let n;try{n=await kX(r)}catch(s){throw Ae.error("Got an error deleting a user."),Ae.error(s),s}Ae.debug(n);try{await Ac()}catch(s){throw Ae.error("Got an error setting users to global."),Ae.error(s),s}return Eg.signalUserChange(new mg(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(KX,"dropUser");async function WX(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=dg.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await FX(r)}catch(s){throw Ae.error("Got an error searching for a role."),Ae.error(s),s}t.role=n[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Ae.error(r),r}return t}a(WX,"userInfo");async function QX(){let e;try{e=await iE()}catch(t){throw Ae.error("Got an error listing users."),Ae.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(QX,"listUsersExternal");async function iE(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await sE(e)}catch(o){throw Ae.error("Got an error searching for roles."),Ae.error(o),o}let r={};for(let o of t)r[o.id]=dg.cloneDeep(o);if(Object.keys(r).length===0)return null;let n={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},s;try{s=await sE(n)}catch(o){throw Ae.error("Got an error searching for users."),Ae.error(o),o}let i=new Map;for(let o of s)o=dg.cloneDeep(o),o.role=r[o.role],jX(o.role),i.set(o.username,o);return i}catch(e){throw Ae.error("got an error listing users"),Ae.error(e),nn.errorizeMessage(e)}return null}a(iE,"listUsers");function jX(e){try{if(!e){Ae.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(qX)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Ae.error("Got an error trying to set system permissions."),Ae.error(t)}}a(jX,"appendSystemTablesToRole");async function Ac(){try{let e=await iE();global.hdb_users=e}catch(e){throw Ae.error(e),e}}a(Ac,"setUsersToGlobal");async function NP(e,t,r=!0){global.hdb_users||await Ac();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw Ds(new Error,_g.GENERIC_AUTH_FAIL,Ps.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw Ds(new Error,_g.USER_INACTIVE,Ps.UNAUTHORIZED,void 0,void 0,!0);let s={active:n.active,username:n.username};if(n.refresh_token&&(s.refresh_token=n.refresh_token),n.role&&(s.role=n.role),r===!0){if(fP.get(t)===n.password)return s;if(fg.validate(n.password,t))fP.set(t,n.password);else throw Ds(new Error,_g.GENERIC_AUTH_FAIL,Ps.UNAUTHORIZED,void 0,void 0,!0)}return s}a(NP,"findAndValidateUser");async function zX(){global.hdb_users||await Ac();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(zX,"getSuperUser");async function JX(){let e=await iE(),t=HX.getConfigFromFile(_P.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!nn.isEmpty(r)&&r?.role?.role===_P.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=hg.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+dP.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+dP.SERVER_SUFFIX.ADMIN,r}a(JX,"getClusterUser");var bP=[];pg.invalidateUser=function(e){for(let t of bP)try{t(e)}catch(r){GX.error("Error invalidating user",r)}};pg.onInvalidatedUser=function(e){bP.push(e)}});var wu=T((yTe,LP)=>{"use strict";var ia=q(),sn=C(),XX=BI(),NTe=In(),bTe=Qi(),ZX=yr(),{validateEvent:IP}=Zn(),Iu=yn(),eZ=require("process"),{resetDatabases:tZ}=(Re(),re(xe)),rZ={[sn.ITC_EVENT_TYPES.SCHEMA]:nZ,[sn.ITC_EVENT_TYPES.USER]:CP};async function nZ(e){let t=IP(e);if(t){ia.error(t);return}ia.trace("ITC schemaHandler received schema event:",e),await XX(e.message),await sZ(e.message)}a(nZ,"schemaHandler");async function sZ(e){try{Iu.resetReadTxn(sn.SYSTEM_SCHEMA_NAME,sn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Iu.resetReadTxn(sn.SYSTEM_SCHEMA_NAME,sn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Iu.resetReadTxn(sn.SYSTEM_SCHEMA_NAME,sn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=tZ();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){ia.error(t)}}a(sZ,"syncSchemaMetadata");var wP=[];async function CP(e){try{try{Iu.resetReadTxn(sn.SYSTEM_SCHEMA_NAME,sn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Iu.resetReadTxn(sn.SYSTEM_SCHEMA_NAME,sn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){ia.warn(r)}let t=IP(e);if(t){ia.error(t);return}ia.trace(`ITC userHandler ${sn.HDB_ITC_CLIENT_PREFIX}${eZ.pid} received user event:`,e),await ZX.setUsersToGlobal();for(let r of wP)r()}catch(t){ia.error(t)}}a(CP,"userHandler");CP.addListener=function(e){wP.push(e)};LP.exports=rZ});var Zn=T((PTe,PP)=>{"use strict";var wTe=q(),Sg=Y(),iZ=C(),{ITC_ERRORS:Cu}=Qr(),{parentPort:CTe,threadId:oZ,isMainThread:aZ,workerData:LTe}=require("worker_threads"),{onMessageFromWorkers:cZ,broadcast:DTe,broadcastWithAcknowledgement:lZ}=et();PP.exports={sendItcEvent:uZ,validateEvent:DP,SchemaEventMsg:_Z,UserEventMsg:dZ};var oE;cZ(async(e,t)=>{oE=oE||wu(),DP(e),oE[e.type]&&await oE[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function uZ(e){return!aZ&&e.message&&(e.message.originator=oZ),lZ(e)}a(uZ,"sendItcEvent");function DP(e){if(typeof e!="object")return Cu.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||Sg.isEmpty(e.type))return Cu.MISSING_TYPE;if(!e.hasOwnProperty("message")||Sg.isEmpty(e.message))return Cu.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||Sg.isEmpty(e.message.originator))return Cu.MISSING_ORIGIN;if(iZ.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Cu.INVALID_EVENT(e.type)}a(DP,"validateEvent");function _Z(e,t,r,n=void 0,s=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=n,this.attribute=s}a(_Z,"SchemaEventMsg");function dZ(e){this.originator=e}a(dZ,"UserEventMsg")});var ii=T((vTe,BP)=>{"use strict";var MP=C(),UTe=Y(),aE=q(),UP=SI(),Oc,{sendItcEvent:vP}=Zn();function fZ(e){try{aE.trace("signalSchemaChange called with message:",e),Oc=Oc||wu();let t=new UP(MP.ITC_EVENT_TYPES.SCHEMA,e);return Oc.schema(t),vP(t)}catch(t){aE.error(t)}}a(fZ,"signalSchemaChange");function EZ(e){try{aE.trace("signalUserChange called with message:",e),Oc=Oc||wu();let t=new UP(MP.ITC_EVENT_TYPES.USER,e);return Oc.user(t),vP(t)}catch(t){aE.error(t)}}a(EZ,"signalUserChange");BP.exports={signalSchemaChange:fZ,signalUserChange:EZ}});var Mu={};Fe(Mu,{addAnalyticsListener:()=>Pu,recordAction:()=>on,recordActionBinary:()=>Cn,setAnalyticsEnabled:()=>hZ});function hZ(e){KP=e}function on(e,t,r,n,s){if(!KP)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=uE.get(i);if(o)if(typeof e=="number"){let c=o.values,l=c.index++;if(l>=c.length){let _=c;o.values=c=new Float32Array(l*2),c.set(_),c.index=l+1}c[l]=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:n,type:s},uE.set(i,o)}cE||mZ()}function Cn(e,t,r,n,s){on(!!e,t,r,n,s)}function Pu(e){jP.push(e)}function mZ(){cE=performance.now(),setTimeout(async()=>{let e=performance.now()-cE;cE=0;let t=[],r={time:Date.now(),period:e,threadId:oa.threadId,metrics:t};for(let[s,i]of uE){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,l=0,_=[],u;for(let d of zP){let f=Math.floor(c*d),E=o[f-1];if(f>l){let h=f-l;if(E===u){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),u=E;l=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 JP()}let n=process.memoryUsage();t.push({metric:"memory",threadId:oa.threadId,byThread:!0,...n});for(let s of jP)s(t);uE=new Map,oa.parentPort?oa.parentPort.postMessage({type:QP,report:r}):eM({report:r})},WP).unref()}async function pZ(e,t=6e4){let r=Rg(),n=XP(),s;for(let h of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(h.value?.time){s=h.value.time;break}if(Date.now()-t<s)return;let i,o=new Map,c=new Map,l=[],_;for(let{key:h,value:p}of r.primaryStore.getRange({start:s||!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 g of S||[]){let{path:I,method:v,type:F,metric:G,count:U,total:Q,distribution:V,threads:z,...se}=g;U||(U=1);let Ce=G+(I?"-"+I:"");v!==void 0&&(Ce+="-"+v),F!==void 0&&(Ce+="-"+F);let ie=o.get(Ce);if(ie){if(ie.threads){let Ee=ie.threads[A];if(Ee)ie=Ee;else{ie.threads[A]=Object.assign({},se);continue}}ie.count||(ie.count=1);let dt=ie.count;for(let Ee in se){let ft=se[Ee];typeof ft=="number"&&(ie[Ee]=(ie[Ee]*dt+ft*U)/(dt+U))}ie.count+=U,Q>=0&&(ie.total+=Q,ie.ratio=ie.total/ie.count)}else ie=Object.assign({period:t},g),delete ie.distribution,o.set(Ce,ie),ie.byThread&&(ie.threads=[],ie.threads[A]=Object.assign({},se),l.push(ie));if(V){V=V.map(Ee=>typeof Ee=="number"?{value:Ee,count:1}:Ee);let dt=c.get(Ce);dt?dt.push(...V):c.set(Ce,V)}}await JP()}for(let h of l){let{path:p,method:S,type:A,metric:g,count:I,total:v,distribution:F,threads:G,...U}=h;G=G.filter(Q=>Q);for(let Q in U){if(typeof h[Q]!="number")continue;let V=0;for(let z of G){let se=z[Q];typeof se=="number"&&(V+=se)}h[Q]=V}h.count=G.length,delete h.threads,delete h.byThread}for(let[h,p]of c){let S=o.get(h);p.sort((Ee,ft)=>Ee.value>ft.value?1:-1);let A=S.count-1,g=[],I=0,v=0,F;for(let Ee of zP){let ft=A*Ee;for(;I<ft;)F=p[v++],I+=F.count,v===1&&I--;let Yn=p[v>1?v-2:0];F||(F=p[0]),g.push(F.value-(F.value-Yn.value)*(I-ft)/F.count)}let[G,U,Q,V,z,se,Ce,ie,dt]=g;Object.assign(S,{p1:G,p10:U,p25:Q,median:V,p75:z,p90:se,p95:Ce,p99:ie,p999:dt})}let u;for(let[h,p]of o)p.id=(0,lE.getNextMonotonicTime)(),p.time=_,n.primaryStore.put(p.id,p,{append:!0}).then(S=>{S||n.primaryStore.put(p.id,p)}),u=!0;let d=Date.now(),{idle:f,active:E}=performance.eventLoopUtilization();if(u||E*10>f){let h=(0,lE.getNextMonotonicTime)(),p={id:h,metric:"main-thread-utilization",idle:f-HP,active:E-qP,time:d,...process.memoryUsage()};n.primaryStore.put(h,p,{append:!0}).then(S=>{S||n.primaryStore.put(h,p)})}HP=f,qP=E}async function xP(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function Rg(){return GP||(GP=pt({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function XP(){return FP||(FP=pt({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function gZ(){ZP=!0;let e=(0,Du.get)(gg.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await pZ(WP,e),await xP(Rg(),SZ),await xP(XP(),TZ)},Math.min(e/2,2147483647)).unref()}function eM(e,t){let r=e.report;r.threadId=t?.threadId||oa.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(kP+=n.mean*n.count);r.totalBytesProcessed=kP,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization($P.get(t))}),$P.set(t,t.performance.eventLoopUtilization())),r.id=(0,lE.getNextMonotonicTime)(),Rg().primaryStore.put(r.id,r),ZP||gZ(),RZ&&(tM=OZ(r))}async function OZ(e){if(await tM,!Zi){let r=(0,Lu.dirname)((0,YP.getLogFilePath)());try{Zi=await(0,Tg.open)((0,Lu.join)(r,"analytics.log"),"r+")}catch{Zi=await(0,Tg.open)((0,Lu.join)(r,"analytics.log"),"w+")}}let t=(await Zi.stat()).size;if(t>AZ){let r=Buffer.alloc(t);await Zi.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await Zi.write(r,{position:0}),await Zi.truncate(r.length),t=r.length}await Zi.write(JSON.stringify(e)+`
|
|
9
|
-
`,t)}var oa,VP,YP,Lu,Tg,lE,Du,gg,uE,KP,cE,WP,QP,jP,zP,HP,qP,JP,SZ,TZ,GP,FP,ZP,kP,$P,RZ,tM,Zi,AZ,ui=Ne(()=>{oa=require("worker_threads"),VP=B(et());Re();YP=B(q()),Lu=require("path"),Tg=require("fs/promises"),lE=B(pr()),Du=B(J()),gg=B(C());hr();(0,Du.initSync)();uE=new Map,KP=(0,Du.get)(gg.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(hZ,"setAnalyticsEnabled");a(on,"recordAction");Et.recordAnalytics=on;a(Cn,"recordActionBinary");cE=0,WP=1e3,QP="analytics-report",jP=[];a(Pu,"addAnalyticsListener");zP=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(mZ,"sendAnalytics");a(pZ,"aggregation");HP=0,qP=0,JP=a(()=>new Promise(setImmediate),"rest");a(xP,"cleanup");SZ=36e5,TZ=31536e6;a(Rg,"getRawAnalyticsTable");a(XP,"getAnalyticsTable");(0,VP.setChildListenerByType)(QP,eM);a(gZ,"startScheduledTasks");kP=0,$P=new Map,RZ=!1;a(eM,"recordAnalytics");AZ=1e6;a(OZ,"logAnalytics")});var bg={};Fe(bg,{coerceType:()=>_E,makeTable:()=>EE,setServerUtilities:()=>PZ,updateResource:()=>dE});function EE(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:o,databaseName:c,auditStore:l,schemaDefined:_,dbisDB:u}=e,{expirationMS:d,evictionMS:f,audit:E,trackDeletes:h}=e,{attributes:p}=e;p||(p=[]),hI(i,l);let S=Yp(i,n,l),A=0,g,I,v,F={},G=Promise.resolve(),U,Q,V;for(let K of p)(K.assignCreatedTime||K.name==="__createdtime__")&&(U=K),(K.assignUpdatedTime||K.name==="__updatedtime__")&&(Q=K),K.expiresAt&&(V=K),K.isPrimaryKey&&(F=K);let z,se=[],Ce=[],ie=1,dt=2,Ee={},ft={},Yn=864e5,gb,Nd,Bi,Rb=!1,mp,D$=i.getRange({start:!1,end:!1}).constructor,P$=10,M$=6;E&&Nb();class Je extends jt{static name=s;static primaryStore=i;static auditStore=l;static primaryKey=t;static tableName=s;static indices=r;static audit=E;static databasePath=o;static databaseName=c;static attributes=p;static expirationTimer;static createdTimeProperty=U;static updatedTimeProperty=Q;static propertyResolvers;static sources=[];static get expirationMS(){return d}static dbisDB=u;static schemaDefined=_;static sourcedFrom(m,R){R&&(this.sourceOptions=R,(R.expiration||R.eviction||R.scanInterval)&&this.setTTLExpiration(R)),R?.intermediateSource?(m.intermediateSource=!0,this.sources.unshift(m)):this.sources.push(m),I=m.get&&(!m.get.reliesOnPrototype||m.prototype.get);let y=a(b=>{let w=this.sources.slice(0,-1);if(w=w.filter(D=>D[b]&&(!D[b].reliesOnPrototype||D.prototype[b])),w.length>0)if(w.length===1){let D=w[0];return(P,M,x)=>{if(P?.source!==D)return D[b](M,x,P)}}else return(D,P,M)=>{let x=[];for(let j of w){if(D?.source===j)break;x.push(j[b](P,M,D))}return Promise.all(x)}},"getApplyToIntermediateSource"),O=this.sources[this.sources.length-1],N=a(b=>{if(O[b]&&(!O[b].reliesOnPrototype||O.prototype[b]))return(w,D,P)=>{if(!w?.source)return O[b](D,P,w)}},"getApplyToCanonicalSource");return Ee={put:N("put"),patch:N("patch"),delete:N("delete"),publish:N("publish")},ft={put:y("put"),patch:y("patch"),delete:y("delete"),publish:y("publish"),invalidate:y("invalidate")},(async()=>{let b=!1,w=a(async(D,P)=>{let M=D.value,x=D.table?at[c][D.table]:Je;if(c===as.SYSTEM_SCHEMA_NAME&&(D.table===as.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||D.table===as.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(b=!0),D.id===void 0&&(D.id=M[x.primaryKey],D.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(D));D.source=m;let j=await x.getResource(D.id,P,Nc);switch(D.type){case"put":return j._writeUpdate(M,!0,Nc);case"patch":return j._writeUpdate(M,!1,Nc);case"delete":return j._writeDelete(Nc);case"publish":return j._writePublish(M,Nc);case"invalidate":return j.invalidate(Nc);default:nt.error("Unknown operation",D.type,D.id)}},"writeUpdate");try{let D=m.subscribe;D&&h==null&&(h=!0);let P=m.subscribeOnThisThread?m.subscribeOnThisThread((0,aa.getWorkerIndex)()):(0,aa.getWorkerIndex)()===0,M=D&&P&&await m.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(M){let x;for await(let j of M)try{if(!(j.type==="transaction"?j.writes[0]:j)){nt.error("Bad subscription event",j);continue}if(j.source=m,x)if(j.beginTxn)x.resolve();else{w(j,x);continue}if(j.type==="end_txn")continue;let de=Xe(j,()=>{if(j.type==="transaction"){let ne=[];for(let oe of j.writes)try{ne.push(w(oe,j))}catch(Ge){throw Ge.message+=" writing "+JSON.stringify(oe)+" of event "+JSON.stringify(j),Ge}return Promise.all(ne)}else if(j.type==="define_schema"){let ne=this.attributes.slice(0),oe;for(let Ge of j.attributes)ne.find(ae=>ae.name===Ge.name)||(ne.push(Ge),oe=!0);oe&&(pt({table:s,database:c,attributes:ne,origin:"cluster"}),Gu.signalSchemaChange(new Fu.SchemaEventMsg(process.pid,as.OPERATIONS_ENUM.CREATE_TABLE,c,s)))}else return j.beginTxn?(x=j,w(j,j),new Promise(ne=>{x.resolve=ne})):w(j,j)});b&&(await de,Gu.signalUserChange(new Fu.UserEventMsg(process.pid))),j.onCommit&&(de?.then?de.then(j.onCommit):j.onCommit())}catch(ge){nt.error("error in subscription handler",ge)}}}catch(D){nt.error(D)}})(),this}static getResource(m,R,y){let O=super.getResource(m,R,y);if(m!=null){Ol(m);try{if(O.hasOwnProperty(be))return O;if(typeof m=="object"&&m&&!Array.isArray(m))throw new Error(`Invalid id ${JSON.stringify(m)}`);let N=!y?.async||i.cache?.get(m),b=Kr(R),w=b.getReadTxn();if(w?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return pp(m,R,{transaction:w},N,D=>{if(D?dE(O,D):O[be]=null,R.onlyIfCached&&R.noCacheStore){if(!O.doesExist())throw new Ln.ServerError("Entry is not cached",504)}else if(y?.ensureLoaded){let P=Sp(m,D,R,O);if(P)return b?.disregardReadTxn(),O[Ag]=!0,Ng(P,M=>(dE(O,M),O))}return O})}catch(N){throw N.message.includes("Unable to serialize object")&&(N.message+=": "+JSON.stringify(m)),N}}return O}ensureLoaded(){let m=Sp(this[De],this[an],this[Oe]);if(m)return this[Ag]=!0,Ng(m,R=>{this[an]=R,this[be]=R.value,this[qu]=R.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,Yn=m.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(d<0)throw new Error("Expiration can not be negative");Yn=Yn||(d+f)/4,gp()}static enableAuditing(m=!0){E=m,m&&Nb(),Je.audit=m}static coerceId(m){return m===""?null:_E(m,F)}static async dropTable(){if(delete at[c][s],c===o){for(let m of p)u.remove(Je.tableName+"/"+m.name),r[m.name]?.drop();u.remove(Je.tableName+"/"),i.drop(),await u.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));Gu.signalSchemaChange(new Fu.SchemaEventMsg(process.pid,as.OPERATIONS_ENUM.DROP_TABLE,c,s))}get(m){if(typeof m=="string")return this.getProperty(m);if(this[Nn])return this.search(m);if(this[De]===null){if(m?.conditions)return this.search(m);let R=Je.getRecordCount();return{recordCount:R.recordCount,estimatedRecordRange:R.estimatedRange,records:"./",name:s,database:c,attributes:p}}if(m?.property)return this.getProperty(m.property);if(this.doesExist()||m?.ensureLoaded===!1||this[Oe]?.returnNonexistent)return this}allowRead(m,R){let y=yd(m);if(y?.read){if(y.isSuperUser)return!0;let O=y.attribute_permissions,N=R?.select;if(O?.length>0||Rb&&N){if(R||(R={}),N){let b=O?.length>0&&Og(O,"read");R.select=N.map(w=>{let D=w.name||w;if(!b||b[D]){let P=Bi[D]?.definition?.tableClass;if(P){if(w.name||(w={name:w}),!P.prototype.allowRead.call(null,m,w))return!1;if(!w.select)return w.name}return w}}).filter(Boolean)}else R.select=O.filter(b=>b.read&&!Bi[b.attribute_name]).map(b=>b.attribute_name);return R}else return!0}}allowUpdate(m,R){let y=yd(m);if(y?.update){let O=y.attribute_permissions;if(O?.length>0){let N=Og(O,"update");for(let b in R)if(!N[b])return!1;for(let b of O){let w=b.attribute_name;!b.update&&!(w in R)&&(R[w]=this.getProperty(w))}}return!0}}allowCreate(m,R){if(this[Nn]){let y=yd(m);if(y?.insert){let O=y.attribute_permissions;if(O?.length>0){let N=Og(O,"insert");for(let b in R)if(!N[b])return!1}else return!0}}else return this.allowUpdate(m,{})}allowDelete(m){return yd(m)?.delete}update(m,R){if(!Kr(this[Oe]))throw new Error("Can not update a table resource outside of a transaction");if(m===!1)return this;let O;return typeof m=="object"&&m&&(R?(Object.isFrozen(m)&&(m=Object.assign({},m)),this[be]={},this[vt]=m):(O=this[vt],O&&(m=Object.assign(O,m)),this[vt]=O=m)),this._writeUpdate(this[vt],R),this}addTo(m,R){if(typeof R=="number")this[Uu]===nM?this.set(m,(+this.getProperty(m)||0)+R):(this[Uu]||this.update(),this.set(m,new tf(R)));else throw new Error("Can not add a non-numeric value")}subtractFrom(m,R){if(typeof R=="number")return this.addTo(m,-R);throw new Error("Can not subtract a non-numeric value")}invalidate(m){let R=this[Oe],y=this[De];Ol(y),Kr(this[Oe]).addWrite({key:y,store:i,invalidated:!0,entry:this[an],nodeName:this[Oe]?.nodeName,before:Ee.invalidate?.bind(this,R,y),beforeIntermediate:ft.invalidate?.bind(this,R,y),commit:(N,b)=>{if(b?.version>N)return;let w=null;for(let D in r)w||(w={}),w[D]=this.getProperty(D);S(y,w,this[an],N,vu,E,this[Oe],0,"invalidate")}})}static evict(m,R,y){let O=this.Source,N;if(!((I||E)&&(!R||(N=i.getEntry(m),!N||!R)||N.version!==y))){if(I){if(i.hasLock(m,N.version))return;let b;for(let w in r)b||(b={}),b[w]=R[w];if(b)return S(m,b,N,y,Bu,null,null,0,null,!0)}return i.ifVersion(y,()=>{bd(m,R,null)}),E?S(m,null,N,y,Bu,null,null,0,null,!0):i.remove(m,y)}}lock(){throw new Error("Not yet implemented")}static operation(m,R){return m.table||=s,m.schema||=c,lM.operation(m,R)}put(m){this.update(m,!0)}patch(m){this.update(m,!1)}_writeUpdate(m,R,y){let O=this[Oe],N=Kr(O),b=this[De];Ol(b);let w=this[an];this[Uu]=R?nM:CZ;let D={key:b,store:i,entry:w,nodeName:O?.nodeName,validate:P=>{m||(m=this[vt]),R||m&&Zd(m)?(this.validate(m,!R),O?.source||(Q&&(m[Q.name]=Q.type==="Date"?new Date(P):Q.type==="String"?new Date(P).toISOString():P),R&&(t&&m[t]!==b&&(m[t]=b),U&&(w?.value?m[U.name]=w?.value[U.name]:m[U.name]=U.type==="Date"?new Date(P):U.type==="String"?new Date(P).toISOString():P),m=xo(m)))):N.removeWrite(D)},before:R?Ee.put?()=>Ee.put(O,b,m):null:Ee.patch?()=>Ee.patch(O,b,m):Ee.put?()=>Ee.put(O,b,xo(this)):null,beforeIntermediate:R?ft.put?()=>ft.put(O,b,m):null:ft.patch?()=>ft.patch(O,b,m):ft.put?()=>ft.put(O,b,xo(this)):null,commit:(P,M,x)=>{x&&(O&&M?.version>(O.lastModified||0)&&(O.lastModified=M.version),this[an]=M,R||(this[be]=M?.value??null)),this[vt]=m,this[qu]=P;let j=M?.value,ge=m;if(this[Uu]=0,M?.version>P)if(E){let Ge=M.localTime,ae=M.version;for(;ge&&(Ge>P||ae>P&&Ge>0);){let fe=l.get(Ge),Qe=Vt(fe);if(ae=Qe.version,ae>P)if(Qe.type==="patch"){let ve=Qe.getValue(i);ge=Jd(ge,ve)}else(Qe.type==="put"||Qe.type==="delete")&&(ge=null);Ge=Qe.previousLocalTime}}else R?ge=null:ge=Jd(ge,j);let de=xo(this,ge);this[be]=de;let ne;R||(ne=m),bd(b,j,de);let oe=R?"put":"patch";S(b,de,M,P,0,E,O,O.expiresAt||(d?d+Date.now():0),oe,!1,ne)}};N.addWrite(D)}async delete(m){if(typeof m=="string")return this.deleteProperty(m);if(this[Nn]){for await(let R of this.search(m))(await Je.getResource(R[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(m);return}return this[be]?this._writeDelete(m):!1}_writeDelete(m){let R=Kr(this[Oe]),y=this[De];Ol(y);let O=this[Oe];return R.addWrite({key:y,store:i,resource:this,nodeName:O?.nodeName,before:Ee.delete?.bind(this,O,y),beforeIntermediate:ft.delete?.bind(this,O,y),commit:(N,b,w)=>{let D=b?.value;w&&(O&&b?.version>(O.lastModified||0)&&(O.lastModified=b.version),dE(this,b)),!(b?.version>N)&&(bd(this[De],D),nt.trace("Write delete entry",y,N),E||h?(S(y,null,this[an],N,0,E,this[Oe],0,"delete"),E||gp()):i.remove(this[De]))}}),!0}search(m){let R=this[Oe],y=Kr(R);if(!m)throw new Error("No query provided");let O=m.conditions;O?O.length===void 0&&(O=O[Symbol.iterator]?Array.from(O):[O]):O=Array.isArray(m)?m:m[Symbol.iterator]?Array.from(m):[],this[De]&&(O=[{attribute:null,comparator:"prefix",value:this[De]}].concat(O));let N,b={};function w(ce,Mt){let it;switch(Mt){case"and":case void 0:if(ce.length<1)throw new Error('An "and" operator requires at least one condition');it=!0;break;case"or":if(ce.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+Mt)}let $t=it&&{},Kn;for(let Be of ce){if(Be.conditions){Be.conditions=w(Be.conditions,Be.operator);continue}let ot=Be[0]??Be.attribute,Wn=ot==null?F:ti(p,ot);if(Wn){if(it){let Lo=ki(ot),Ts=$t[Lo];Ts?(Ts.push(Be),Kn=!0):$t[Lo]=[Be]}Wn.type&&(Be[1]===void 0?Be.value=P(Be.value,Wn):Be[1]=P(Be[1],Wn))}else if(ot!=null)throw(0,Ln.handleHDBError)(new Error,`${ot} is not a defined attribute`,404)}if(m.enforceExecutionOrder)return ce;if(Kn)for(let Be in $t){let ot=$t[Be],Wn=ot.length;if(Wn>1)for(let Lo=0;Lo<Wn;Lo++){let Ts=ot[Lo];if(Ts.comparator==="ge"||Ts.comparator==="greater_than_equal")for(let Hi=0;Hi<Wn;Hi++){let za=ot[Hi];(za.comparator==="le"||za.comparator==="less_than_equal")&&(Ts.comparator="between",Ts.value=[Ts.value,za.value],ce.splice(ce.indexOf(za),1))}if(Ts.comparator==="equals"||!Ts.comparator){for(let Hi=0;Hi<Wn;Hi++)if(Hi!==Lo){let za=ot[Hi];ce.splice(ce.indexOf(za),1)}break}}}return ce}a(w,"prepareConditions");function D(ce,Mt){if(m.enforceExecutionOrder)return ce;for(let it of ce)it.conditions&&(it.conditions=D(it.conditions,it.operator));return ce.length>1&&Mt!=="or"?(0,cM.sortBy)(ce,sS(Je)):ce}a(D,"orderConditions");function P(ce,Mt){return Array.isArray(ce)?ce.map(it=>_E(it,Mt)):_E(ce,Mt)}a(P,"coerceTypedValues");let M=m.operator;(O.length>0||M)&&(O=w(O,M));let x=typeof m.sort=="object"&&m.sort,j;if(x&&M!=="or"){let ce=x.attribute;if(N=O.find(Mt=>ki(Mt.attribute)===ki(ce)),!N){if(!ti(p,ce))throw(0,Ln.handleHDBError)(new Error,`${Array.isArray(ce)?ce.join("."):ce} is not a defined attribute`,404);N={attribute:ce},O.push(N)}N.descending=!!x.descending}O=D(O,M),x&&(O[0]===N?x.next&&(j={dbOrderedAttribute:x.attribute,attribute:x.next.attribute,descending:x.next.descending,next:x.next.next}):(N&&O.splice(O.indexOf(N),1),j=x));function ge(ce,Mt){let it=ce[0];if(Mt==="or"){let $t=ne(it);for(let Be=1;Be<ce.length;Be++){let ot=ce[Be],Wn=ne(ot);$t=$t.concat(Wn)}let Kn=new Set;return $t.filter(Be=>{let ot=Be.key??Be;return Kn.has(ot)?!1:(Kn.add(ot),!0)})}else{let $t=ne(it),Kn=ce.slice(1).map(Be=>Kl(Be,Je,R,b)).filter(Boolean);return Kn.length>0?Ab($t,oe,R,Kn):$t}}a(ge,"executeConditions");let de=m.reverse===!0;function ne(ce){return ce.conditions?ge(ce.conditions,ce.operator):Yl(ce,y,ce.descending||de,Je,m.allowFullScan,b)}a(ne,"executeCondition");let oe=m.select;if(O.length===0&&(O=[{attribute:t,comparator:"greater_than",value:!0}]),m.explain)return{conditions:O,operator:M,postOrdering:j,selectApplied:!!oe};let Ge=y.useReadTxn(),ae=ge(O,M);(m.offset||m.limit!==void 0)&&(ae=ae.slice(m.offset,m.limit!==void 0?(m.offset||0)+m.limit:void 0));let fe=m.ensureLoaded!==!1,Qe=Je.transformEntryForSelect(oe,R,b,fe,!0),ve=Je.transformToOrderedSelect(ae,oe,j,R,Qe);return ve.onDone=()=>{ve.results=null,y.doneReadTxn()},ve.selectApplied=!0,ve}static transformToOrderedSelect(m,R,y,O,N){let b=new D$;if(y){m=Ab(m,R,O,null);let w;b.iterate=function(){let P,M=m[Symbol.asyncIterator]?m[Symbol.asyncIterator]():m[Symbol.iterator](),x,j=y.dbOrderedAttribute,ge,de,ne=!0;function oe(ae){let fe=ae.next&&oe(ae.next),Qe=ae.descending;return(ve,ce)=>{let Mt=Tp(ve,ae.attribute,O),it=Tp(ce,ae.attribute,O),$t=Qe?(0,ca.compareKeys)(it,Mt):(0,ca.compareKeys)(Mt,it);return $t===0?fe?.(ve,ce)||0:$t}}a(oe,"createComparator");let Ge=oe(y);return{async next(){let ae;if(P)if(ae=P.next(),ae.done){if(x)return b.onDone&&b.onDone(),ae}else return{value:await N(ae.value)};w=[],ge&&w.push(ge);do if(ae=await M.next(),ae.done){if(x=!0,w.length)break;return b.onDone&&b.onDone(),ae}else{let fe=ae.value;if(fe?.then&&(fe=await fe),j){let Qe=Tp(fe,j,O);if(ne)ne=!1,de=Qe;else if(Qe!==de){de=Qe,ge=fe;break}}w.push(fe)}while(!0);return y.isGrouped,w.sort(Ge),P=w[Symbol.iterator](),ae=P.next(),ae.done?(b.onDone&&b.onDone(),ae):{value:await N(ae.value)}},return(){b.onDone&&b.onDone(),M.return()},throw(){b.onDone&&b.onDone(),M.throw()}}};let D=a(P=>{if(typeof R=="object"&&Array.isArray(P.attribute))for(let M=0;M<R.length;M++){let x=R[M],j;if(x.name===P.attribute[0]){for(j=x.sort||(x.sort={});j.next;)j=j.next;j.attribute=P.attribute.slice(1),j.descending=P.descending}else x===P.attribute[0]&&(R[M]=j={name:x,sort:{attribute:P.attribute.slice(1),descending:P.descending}})}P.next&&D(P.next)},"applySortingOnSelect");D(y)}else b.iterate=(m[Symbol.asyncIterator]||m[Symbol.iterator]).bind(m),b=b.map(N);return b}static transformEntryForSelect(m,R,y,O,N){if(m&&(m===t||m?.length===1&&m[0]===t)){let P=a(M=>M?.key??M,"transform");return m===t?P:m.asArray?M=>[P(M)]:M=>({[t]:P(M)})}let b;O&&I&&!m?.every(P=>{let M;return typeof P=="object"?M=P.name:M=P,r[M]||M===t})&&(b=!0);let w,D=a(P=>{let M;if(P){if(mp=P,M=P.value||P.deref?.(),!M&&(P.key===void 0||P.deref)){if(P=pp(P.key??P,R,{transaction:Kr(R).getReadTxn(),lazy:m?.length<4},!1,x=>x),P?.then)return P.then(D);M=P?.value}if(b&&(P.metadataFlags&(vu|Bu)||P.expiresAt&&P.expiresAt<Date.now())){let x=Sp(P.key??P,P,R);if(x?.then)return x.then(D)}}if(M==null)return N?bc.SKIP:M;if(m&&!(m[0]==="*"&&m.length===1)){let x,j=a((de,ne)=>{let oe;typeof de=="object"?oe=de.name:oe=de;let Ge=Bi?.[oe],ae;if(Ge){let fe=y?.[oe];if(fe)if(fe.fromRecord)ae=fe.fromRecord(M);else{let ve=ki(P.key);ae=fe.get(ve),ae||(ae=[])}else ae=Ge(M,R,P);let Qe=a(ve=>{if(ve&&typeof ve=="object"){let ce=Ge.definition?.tableClass||Je;w||(w={});let Mt=w[oe]||(w[oe]=ce.transformEntryForSelect(oe===de?null:de.select||(Array.isArray(de)?de:null),R,fe,O));if(Array.isArray(ve)){let it=[],$t=ce.transformToOrderedSelect(ve,de.select,typeof de.sort=="object"&&de.sort,R,Mt)[Symbol.asyncIterator](),Kn=a(ot=>{for(;!ot.done;){if(ot?.then)return ot.then(Kn);it.push(ot.value),ot=$t.next()}ne(it,oe)},"nextValue"),Be=Kn($t.next());Be&&(x||(x=[]),x.push(Be));return}else if(ve=Mt(ve),ve?.then){x||(x=[]),x.push(ve.then(it=>ne(it,oe)));return}}ne(ve,oe)},"handleResolvedValue");ae?.then?(x||(x=[]),x.push(ae.then(Qe))):Qe(ae);return}else ae=M[oe],ae&&typeof ae=="object"&&oe!==de&&(ae=this.transformEntryForSelect(de.select||de,R,null)({value:ae}));ne(ae,oe)},"selectAttribute"),ge;if(typeof m=="string")j(m,de=>{ge=de});else if(Array.isArray(m))if(m.asArray)ge=[],m.forEach((de,ne)=>{de==="*"?m[ne]=M:j(de,oe=>ge[ne]=oe)});else{ge={};let de=m.forceNulls;for(let ne of m)if(ne==="*")for(let oe in M)ge[oe]=M[oe];else j(ne,(oe,Ge)=>{oe===void 0&&de&&(oe=null),ge[Ge]=oe})}else throw new Ln.ClientError("Invalid select"+m);return x?Promise.all(x).then(()=>ge):ge}return M},"transform");return D}async subscribe(m){if(!l)throw new Error("Can not subscribe to a table without an audit log");E||pt({table:s,database:c,schemaDefined:_,attributes:p,audit:!0}),m||(m={});let R=!m.rawEvents,y=fI(Je,this[De]??null,function(w,D,P,M){try{let x=D.getValue?.(i,R);if(!x&&D.type==="patch"&&R){let j=i.getEntry(w);j?.version===D.version?x=j.value:x=D.getValue?.(i,!0,P)}this.send({id:w,timestamp:P,value:x,version:D.version,type:D.type,beginTxn:M})}catch(x){nt.error(x)}},m.startTime||0,this[Nn]);this[Nn]&&(y.includeDescendants=!0,m.onlyChildren&&(y.onlyChildren=!0)),m.crossThreads===!1&&(y.crossThreads=!1),m.supportsTransactions&&(y.supportsTransactions=!0);let O=this[De],N=m.previousCount;N>1e3&&(N=1e3);let b=m.startTime;if(this[Nn]){if(b){if(N)throw new Ln.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:w,value:D}of l.getRange({start:b,exclusiveStart:!0})){let P=Vt(D);if(P.tableId!==n)continue;let M=P.recordId;(O==null||oM(O,M))&&y.send({id:M,timestamp:w,...P}),y.startTime=w}}else if(N){let w=[];for(let{key:D,value:P}of l.getRange({start:"z",end:!1,reverse:!0}))try{let M=Vt(P);if(M.tableId!==n)continue;let x=M.recordId;if(O==null||oM(O,x)){let j=M.getValue(i,R,D);if(w.push({id:x,timestamp:D,value:j,version:M.version,type:M.type}),--N<=0)break}}catch(M){nt.error("Error getting history entry",D,M)}for(let D=w.length;D>0;)y.send(w[--D]);w[0]&&(y.startTime=w[0].timestamp)}else if(!m.omitCurrent)for(let{key:w,value:D,version:P,localTime:M}of i.getRange({start:O??!1,end:O==null?void 0:[O,ca.MAXIMUM_KEY],versions:!0}))D&&y.send({id:w,version:P,timestamp:M,value:D})}else{N&&!b&&(b=0);let w=this[an]?.localTime;if(w===Vp&&(i.cache?.delete(O),this[an]=i.getEntry(O),nt.warn("re-retrieved record",w,this[an]?.localTime),w=this[an]?.localTime),nt.trace("Subscription from",b,"from",O,w),b<w){let D=[],P=w;do{let M=l.get(P);if(M){m.omitCurrent=!0;let x=Vt(M),j=x.getValue(i,R,P);D.push({id:O,value:j,timestamp:P,...x}),P=x.previousLocalTime}else break;N&&N--}while(P>b&&N!==0);for(let M=D.length;M>0;)y.send(D[--M]);y.startTime=w}!m.omitCurrent&&this.doesExist()&&y.send({id:O,version:this[qu],timestamp:w,value:this})}return m.listener&&y.on("data",m.listener),y}doesExist(){return!!(this[be]||this[Uu])}publish(m,R){this._writePublish(m,R)}_writePublish(m,R){let y=Kr(this[Oe]),O=this[De]||null;Ol(O);let N=this[Oe];y.addWrite({key:O,store:i,entry:this[an],nodeName:N?.nodeName,validate:()=>{this.validate(m)},before:Ee.publish?.bind(this,N,O,m),beforeIntermediate:ft.publish?.bind(this,N,O,m),commit:(b,w,D)=>{w===void 0&&h&&!E&&gp(),S(O,w?.value??null,w,w?.version||b,0,!0,N,w?.expiresAt,"message",!1,m)}})}validate(m,R){let y,O=a((N,b,w)=>{if(b.type&&N!=null)if(R&&N.__op__&&(N=N.value),b.properties){typeof N!="object"&&(y||(y=[])).push(`Property ${w} must be an object${b.type?" ("+b.type+")":""}`);let D=b.properties;for(let P=0,M=D.length;P<M;P++){let x=D[P],j=O(N[x.name],x,w+"."+x.name);j&&(N[x.name]=j)}}else switch(b.type){case"Int":(typeof N!="number"||N>>0!==N)&&(y||(y=[])).push(`Property ${w} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof N!="number"||!(Math.floor(N)===N&&Math.abs(N)<=9007199254740992))&&(y||(y=[])).push(`Property ${w} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof N!="number"&&(y||(y=[])).push(`Property ${w} must be a number`);break;case"ID":typeof N=="string"||N?.length>0&&N.every?.(D=>typeof D=="string")||(y||(y=[])).push(`Property ${w} must be a string, or an array of strings`);break;case"String":typeof N!="string"&&(y||(y=[])).push(`Property ${w} must be a string`);break;case"Boolean":typeof N!="boolean"&&(y||(y=[])).push(`Property ${w} must be a boolean`);break;case"Date":if(!(N instanceof Date)){if(typeof N=="string"||typeof N=="number")return new Date(N);(y||(y=[])).push(`Property ${w} must be a Date`)}break;case"BigInt":if(typeof N!="bigint"){if(typeof N=="string"||typeof N=="number")return BigInt(N);(y||(y=[])).push(`Property ${w} must be a bigint`)}break;case"Bytes":N instanceof Uint8Array||(y||(y=[])).push(`Property ${w} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(N)){if(b.elements)for(let D=0,P=N.length;D<P;D++){let M=N[D],x=O(M,b.elements,w+"[*]");x&&(N[D]=x)}}else(y||(y=[])).push(`Property ${w} must be a Buffer or Uint8Array`);break}b.nullable===!1&&N==null&&(y||(y=[])).push(`Property ${w} is required (and not does not allow null values)`)},"validateValue");for(let N=0,b=p.length;N<b;N++){let w=p[N];if(!w.relationship&&(!R||w.name in m)){let D=O(m[w.name],w,w.name);D&&(m[w.name]=D)}}if(y)throw new Ln.ClientError(y.join(". "))}getUpdatedTime(){return this[qu]}wasLoadedFromSource(){return I?!!this[Ag]:void 0}static async addAttributes(m){let R=p.slice(0);for(let y of m){if(!y.name)throw new Ln.ClientError("Attribute name is required");if(y.name.match(/[`/]/))throw new Ln.ClientError("Attribute names cannot include backticks or forward slashes");R.push(y)}return pt({table:s,database:c,schemaDefined:_,attributes:R}),Je.indexingOperation}static async removeAttributes(m){let R=p.filter(y=>!m.includes(y.name));return pt({table:s,database:c,schemaDefined:_,attributes:R}),Je.indexingOperation}static getRecordCount(m){let R=i.getStats().entryCount,y=5e3,O=1e3,N;R>y&&!m?.exactCount&&(N=O);let b=0;for(let{value:w}of i.getRange({start:!0,lazy:!0,limit:N}))w!=null&&b++;if(N){let w=b;b=0;for(let{value:oe}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:N}))oe!=null&&b++;let D=N*2,P=(b+w)/D,M=Math.pow((b-w+1)/N/2,2)+P*(1-P)/D,x=Math.max(Math.sqrt(M)*R,1),j=Math.round(P*R),ge=Math.max(j-1.96*x,0),de=Math.min(j+1.96*x,R),ne=Math.pow(10,Math.round(Math.log10(x)));return ne>j&&(ne=ne/10),b=Math.round(j/ne)*ne,{recordCount:b,estimatedRange:[Math.round(ge),Math.round(de)]}}return{recordCount:b}}static updatedAttributes(){Bi=this.propertyResolvers={$id:(m,R,y)=>({value:y.key}),$updatedtime:(m,R,y)=>y.version,$record:(m,R,y)=>y?{value:m}:m};for(let m of this.attributes){m.resolve=null;let R=m.relationship;if(R)if(Rb=!0,R.to)m.elements?.definition?(Bi[m.name]=m.resolve=(y,O,N)=>{let b=y[R.from?R.from:t],w=m.elements.definition.tableClass;return N?Yl({attribute:R.to,value:b},Kr(O).getReadTxn(),!1,w).asArray:w.search([{attribute:R.to,value:b}],O).asArray},m.set=()=>{throw new Error("Setting a one-to-many relationship property is not supported")},m.resolve.definition=m.elements.definition):console.error(`The one-to-many/many-to-many relationship property "${m.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(R.from){let y=m.definition||m.elements?.definition;y?(Bi[m.name]=m.resolve=(O,N,b)=>{let w=O[R.from];if(w!==void 0){if(m.elements){let D,P=w.map(M=>{let x=b?y.tableClass.primaryStore.getEntry(M,{transaction:Kr(N).getReadTxn()}):y.tableClass.get(M,N);return x?.then&&(D=!0),x});return R.filterMissing?D?Promise.all(P).then(M=>M.filter(aM)):P.filter(aM):D?Promise.all(P):P}return b?y.tableClass.primaryStore.getEntry(w,{transaction:Kr(N).getReadTxn()}):y.tableClass.get(w,N)}},m.set=(O,N)=>{if(Array.isArray(N)){let b=N.map(w=>w[De]||w[y.tableClass.primaryKey]);O[R.from]=b}else{let b=N[De]||N[y.tableClass.primaryKey];O[R.from]=b}},m.resolve.definition=m.definition||m.elements?.definition):console.error(`The relationship property "${m.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${m.name}" in table "${s}" must use either "from" or "to" arguments`)}rf(this,this)}static async deleteHistory(m=0){let R;for(let{key:y,value:O}of l.getRange({start:0,end:m}))await Hu(),Vt(O).tableId===n&&(R=l.remove(y));await R}static async*getHistory(m=0,R=1/0){for(let{key:y,value:O}of l.getRange({start:m,end:R})){await Hu();let N=Vt(O);N.tableId===n&&(yield{id:N.recordId,localTime:y,version:N.version,type:N.type,value:N.getValue(i,!0,y),user:N.user})}}static async getHistoryOfRecord(m){let R=[];if(m==null)throw new Error("An id is required");let y=i.getEntry(m);if(!y)return R;let O=y.localTime;if(!O)throw new Error("The entry does not have a local audit time");let N=0;do{await Hu();let b=l.get(O);if(b){let w=Vt(b);R.push({id:w.recordId,localTime:O,version:w.version,type:w.type,value:w.getValue(i,!0,O),user:w.user}),O=w.previousLocalTime}else break}while(N<1e3&&O);return R.reverse()}static cleanup(){z?.remove()}}Je.updatedAttributes();let U$=Je.prototype;return U$[wZ]=!0,d&&Je.setTTLExpiration(d/1e3),V&&v$(),Je;function bd(K,m,R){let y;for(let O in r){let N=r[O],b=N.isIndexing,w=R?.[O],D=m?.[O];if(w===D&&!b)continue;y=!0;let P=N.indexNulls,M=(0,xu.getIndexedValues)(D,P);if(M){rM&&N.prefetch(M.map(x=>({key:x,value:K})),iM);for(let x=0,j=M.length;x<j;x++)N.remove(M[x],K)}if(M=(0,xu.getIndexedValues)(w,P),M){rM&&N.prefetch(M.map(x=>({key:x,value:K})),iM);for(let x=0,j=M.length;x<j;x++)N.put(M[x],K)}}return y}a(bd,"updateIndices");function Ol(K){switch(typeof K){case"number":return!0;case"string":if(K.length<659)return!0;if(K.length>sM)throw new Error("Primary key size is too large: "+K.length);break;case"object":if(K===null)return!0;break;case"bigint":if(K<2n**64n&&K>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof K)}if((0,ca.writeKey)(K,LZ,0)>sM)throw new Error("Primary key size is too large: "+K.length);return!0}a(Ol,"checkValidId");function pp(K,m,R,y,O){let N=a(()=>{if(m?.transaction?.stale&&(m.transaction.stale=!1),R.transaction?.isDone)return O(null,K);let b=i.getEntry(K,R);return b&&m&&(b?.version>(m.lastModified||0)&&(m.lastModified=b.version),b?.localTime&&!m.lastRefreshed&&(m.lastRefreshed=b.localTime)),O(b,K)},"whenPrefetched");return y?N():ie>0?(ie--,N()):new Promise((b,w)=>{ie===0?(ie--,i.prefetch([K],()=>{D(),P()})):(se.push(K),Ce.push(P),se.length>M$&&(ie--,D()));function D(){if(se.length>0){let M=Ce;i.prefetch(se,()=>{ie===-1?D():ie++;for(let x of M)x()}),se=[],Ce=[],dt>2&&dt--}else ie=dt,dt<P$&&dt++}a(D,"prefetch");function P(){try{b(N())}catch(M){w(M)}}a(P,"load")})}a(pp,"loadLocalRecord");function yd(K){if(!K?.role)return;let m=K.role.permission;if(m.super_user)return DZ;let R=m[c],y,O=R?.tables;if(O)return O[s];if(c==="data"&&(y=m[s])&&!y.tables)return y}a(yd,"getTablePermissions");function Sp(K,m,R,y){if(I){let O;if(R.noCache?O=!0:(m?(!m.value||m.metadataFlags&(vu|Bu)||m.expiresAt&&m.expiresAt<Date.now())&&(O=!0):O=!0,Cn(!O,"cache-hit",s)),O){let N=Ob(K,m,R).then(b=>(b?.value?.[be]&&nt.error("Can not assign a record with a record property"),R&&(b?.version>(R.lastModified||0)&&(R.lastModified=b.version),R.lastRefreshed=Date.now()),b));if(R?.onlyIfCached||m?.value&&y?.allowStaleWhileRevalidate?.(m,K)){if(N.catch(b=>nt.warn(b)),R?.onlyIfCached&&!y.doesExist())throw new Ln.ServerError("Entry is not cached",504);return}else return N}}}a(Sp,"ensureLoadedFromSource");function Kr(K){let m=K?.transaction;if(m){if(!m.lmdbDb)return m.lmdbDb=i,m;do{if(m.lmdbDb?.path===i.path)return m;let R=m.next;if(!R)return m=m.next=new Go,m.lmdbDb=i,m;m=R}while(!0)}else return new of}a(Kr,"txnForContext");function Tp(K,m,R){if(!K)return;mp=K;let y=K.value||K.deref?.()||(mp=i.getEntry(K.key))?.value;if(typeof m=="object"){let N=Bi,b=y;for(let w=0,D=m.length;w<D;w++){let P=m[w],M=N?.[P];b=M&&b?M(b,R,!0)?.value:b?.[P],N=M?.definition?.tableClass?.propertyResolvers}return b}let O=Bi[m];return O?O(y,R):y[m]}a(Tp,"getAttributeValue");function Ab(K,m,R,y){let O=Kr(R).getReadTxn(),N=y?.length,b={transaction:O,lazy:N>0||typeof m=="string"||m?.length<4,alwaysPrefetch:!0};function w(D,P){let M=D?.value;if(!M)return bc.SKIP;for(let x=0;x<N;x++)if(!y[x](M,D))return bc.SKIP;return P!==void 0&&(D.key=P),D}if(a(w,"processEntry"),N>0||!K.hasEntries){let D=K.map(P=>typeof P=="object"&&P.key!==void 0?N>0?w(P):P:P==null?bc.SKIP:pp(P,R,b,!1,w));return Array.isArray(K)&&(D=D.filter(P=>P!==bc.SKIP)),D.hasEntries=!0,D}return K}a(Ab,"transformToEntries");async function Ob(K,m,R){let y=m?.metadataFlags,O=m?.version,N,b;if(!i.attemptLock(K,O,()=>{clearTimeout(b);let M=i.getEntry(K);!M||!M.value||M.metadataFlags&(vu|Bu)?N(Ob(K,i.getEntry(K),R)):N(M)}))return new Promise(M=>{N=M,b=setTimeout(()=>{i.unlock(K,O)},IZ)});let w=m?.value,D={requestContext:R,replacingRecord:w,replacingVersion:O,source:null,resourceCache:R?.resourceCache},P=R?.responseHeaders;return new Promise((M,x)=>{let j;Ng(Xe(D,async ge=>{let de=performance.now(),ne,oe,Ge;try{for(let ve of Je.sources)if(ve.get&&(!ve.get.reliesOnPrototype||ve.prototype.get)&&(D.source=ve,ne=await ve.get(K,D),ne))break;Ge=y&vu;let fe=D.lastModified||Ge&&O;oe=Ge||fe>O||!w,fe||(fe=(0,xu.getNextMonotonicTime)());let Qe=performance.now()-de;if(on(Qe,"cache-resolution",s),P&&P.append("Server-Timing",`cache-resolve;dur=${Qe.toFixed(2)}`),ge.timestamp=fe,d&&!D.expiresAt&&(D.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]!==K&&(ne[t]=K)}j=!0,M({version:fe,value:ne})}catch(fe){fe.message+=` while resolving record ${K} for ${s}`,w&&((fe.code==="ECONNRESET"||fe.code==="ECONNREFUSED"||fe.code==="EAI_AGAIN")&&!R?.mustRevalidate||R?.staleIfError&&(fe.statusCode===500||fe.statusCode===502||fe.statusCode===503||fe.statusCode===504))?(M({version:O,value:w}),nt.trace(fe.message,"(returned stale record)")):x(fe),D.transaction.abort();return}if(R?.noCacheStore){D.transaction.abort();return}Kr(D).addWrite({key:K,store:i,entry:m,nodeName:"source",commit:(fe,Qe)=>{if(Qe?.version!==O)return;let ve=bd(K,w,ne);ne?(ft.put?.(D,K,ne),S(K,ne,Qe,fe,0,E&&oe||null,D,D.expiresAt,"put",!!Ge)):(ft.delete?.(D,K),E||h?S(K,null,Qe,fe,0,E&&oe||null,D,0,"delete",!!Ge):i.remove(K,O))}})}),()=>{i.unlock(K,O)},ge=>{i.unlock(K,O),j&&nt.error("Error committing cache update",ge)})})}a(Ob,"getFromSource");function gp(){if(Yn!==gb&&(gb=Yn,(0,aa.getWorkerIndex)()===(0,aa.getWorkerCount)()-1)){if(Nd&&clearTimeout(Nd),!Yn)return;let K=new Date;K.setMonth(0),K.setDate(1),K.setHours(0),K.setMinutes(0),K.setSeconds(0);let m=Math.ceil((Date.now()-K.getTime())/Yn)*Yn+K.getTime(),R=a(y=>{nt.trace(`Scheduled next cleanup scan at ${new Date(y)}ms`),Nd=setTimeout(()=>G=G.then(async()=>{if(R(Math.max(y+Yn,Date.now())),i.rootStore.status!=="open"){clearTimeout(Nd);return}let O=50,N=new Array(O),b=0;nt.trace(`Starting cleanup scan for ${s}`);try{let w=0;for(let{key:D,value:P,version:M,expiresAt:x}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let j;P===null&&!E&&M+yZ<Date.now()?j=i.remove(D,M):x&&x+f<Date.now()&&(j=Je.evict(D,P,M),w++),j&&(await N[b],N[b]=j.catch(ge=>{nt.error("Cleanup error",ge)}),++b>=O&&(b=0)),await Hu()}nt.trace(`Finished cleanup scan for ${s}, evicted ${w} entries`)}catch(w){nt.trace(`Error in cleanup scan for ${s}:`,w)}}),Math.min(y-Date.now(),2147483647)).unref()},"startNextTimer");R(m)}}a(gp,"scheduleCleanup");function Nb(){z=l?.addDeleteRemovalCallback(n,K=>{let m=i.getEntry(K);m?.value===null&&i.remove(K,m.version)})}a(Nb,"addDeleteRemoval");function v$(){(0,aa.getWorkerIndex)()===0&&setInterval(async()=>{try{let K=V.name,m=r[K];if(!m)throw new Error(`expiresAt attribute ${V} must be indexed`);for(let{value:R}of m.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let y=i.getEntry(R);y?.value?.[K]<Date.now()&&Je.evict(R,y.value,y.version),await Hu()}}catch(K){nt.error("Error in evicting old records",K)}},bZ).unref()}a(v$,"runRecordExpirationEviction")}function Og(e,t){let r=e.attr_object||(e.attr_object={}),n=r[t];if(n)return n;n=r[t]=Object.create(null);for(let s of e)n[s.attribute_name]=s[t];return n}function iM(){}function PZ(e){lM=e}function _E(e,t){let r=t?.type;return e===null?e:r==="Int"||r==="Long"?e==="null"?null:parseInt(e):r==="Float"?e==="null"?null:parseFloat(e):r==="BigInt"?e==="null"?null:BigInt(e):r==="Date"?(typeof e!="number"&&!MZ.test(e)&&(e+="Z"),e==="null"?null:new Date(e)):!r||r==="Any"?(0,fE.autoCast)(e):e}function oM(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 n=0;n<r;n++)if(t[n]!==e[n])return!1;return!0}return!1}else if(t[0]===e)return!0}function Ng(e,t,r){return e?.then?e.then(t,r):t(e)}function dE(e,t){e[an]=t,e[be]=t?.value??null,e[qu]=t?.version}function aM(e){return e!=null}var as,bc,xu,cM,ku,Ln,Gu,Fu,nt,ca,aa,fE,NZ,lM,bZ,yZ,rM,IZ,qu,wZ,an,Uu,nM,CZ,Ag,Nc,vu,Bu,LZ,sM,DZ,sge,MZ,Hu,hE=Ne(()=>{as=B(C()),bc=require("lmdb"),xu=B(pr()),cM=require("lodash");zn();rS();ku=B(J());mI();Ln=B(te()),Gu=B(ii()),Fu=B(Zn());Re();cf();nt=B(q());sf();Fo();ca=require("ordered-binary"),aa=B(et());Ho();fE=B(Y());kl();ui();jd();NZ=new Uint8Array(9);NZ[8]=192;bZ=6e4,yZ=864e5;ku.initSync();rM=ku.get(as.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),IZ=1e4,qu=Symbol.for("version"),wZ=Symbol.for("incremental-update"),an=Symbol("entry"),Uu=Symbol("is-saving"),nM=1,CZ=2,Ag=Symbol("loaded-from-source"),Nc={isNotification:!0,ensureLoaded:!1},vu=1,Bu=8,LZ=Buffer.allocUnsafeSlow(8192),sM=1978,DZ={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},sge=(0,fE.convertToMS)(ku.get(as.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(EE,"makeTable");a(Og,"attributesAsObject");a(iM,"noop");a(PZ,"setServerUtilities");MZ=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(_E,"coerceType");a(oM,"isDescendantId");Hu=a(()=>new Promise(setImmediate),"rest");a(Ng,"when");a(dE,"updateResource");a(aM,"exists")});var xe={};Fe(xe,{database:()=>gu,databases:()=>at,dropDatabase:()=>PT,dropTableMeta:()=>xZ,getDatabases:()=>rs,getTables:()=>UZ,onUpdatedTable:()=>Lg,readMetaDb:()=>$u,resetDatabases:()=>vZ,table:()=>pt,tables:()=>ln});function UZ(){return gE||rs(),ln||{}}function rs(){if(gE)return at;gE=!0,wc=new Map;let e=(0,ar.getHdbBasePath)()&&(0,st.join)((0,ar.getHdbBasePath)(),un.DATABASES_DIR_NAME),t=(0,ar.get)(un.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,ar.get)(un.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,cn.existsSync)(e)?e:(0,st.join)((0,ar.getHdbBasePath)(),un.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,cn.existsSync)(e))for(let r of(0,cn.readdirSync)(e,{withFileTypes:!0})){let n=(0,st.basename)(r.name,".mdb");r.isFile()&&(0,st.extname)(r.name).toLowerCase()===".mdb"&&!t[n]?.path&&$u((0,st.join)(e,r.name),null,n)}if((0,cn.existsSync)((0,Ic.getBaseSchemaPath)())){for(let r of(0,cn.readdirSync)((0,Ic.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,st.join)((0,Ic.getBaseSchemaPath)(),r.name),s=(0,st.join)((0,Ic.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,cn.readdirSync)(n,{withFileTypes:!0}))if(i.isFile()&&(0,st.extname)(i.name).toLowerCase()===".mdb"){let o=(0,st.join)(s,i.name);$u((0,st.join)(n,i.name),(0,st.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let n=t[r],s=n.path;if((0,cn.existsSync)(s))for(let o of(0,cn.readdirSync)(s,{withFileTypes:!0}))o.isFile()&&(0,st.extname)(o.name).toLowerCase()===".mdb"&&$u((0,st.join)(s,o.name),(0,st.basename)(o.name,".mdb"),r);let i=n.tables;if(i)for(let o in i){let c=i[o],l=(0,st.join)(c.path,(0,st.basename)(o+".mdb"));(0,cn.existsSync)(l)&&$u(l,o,r,null,!0)}}for(let r in at){let n=wc.get(r);if(n){let s=at[r];r.includes("delete")&&Dn.trace(`defined tables ${Array.from(n.keys())}`);for(let i in s)n.has(i)||(Dn.trace(`delete table class ${i}`),delete s[i])}else if(delete at[r],r==="data"){for(let s in ln)delete ln[s];delete ln[RE]}}return wc=null,at}}function vZ(){gE=!1;for(let[,e]of eo)e.needsDeletion=!0;rs();for(let[e,t]of eo)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),eo.delete(e));return at}function $u(e,t,r=wg,n,s){let i=new yg.default(e,!1);try{let o=eo.get(e);o?o.needsDeletion=!1:(o=(0,pE.open)(i),eo.set(e,o));let c=new la.default(!1),l=o.dbisDb||(o.dbisDb=o.openDB(mE.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(n?(0,cn.existsSync)(n)&&(i.path=n,_=(0,pE.open)(i),_.isLegacy=!0):_=Qd(o));let u=fM(r),d=u[RE],f=new Map;for(let{key:E,value:h}of l.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 z of p)if(z.is_hash_attribute||z.isPrimaryKey){S=z;break}if(!S){Dn.fatal(`Unable to find a primary key attribute on table ${E}, with attributes: ${JSON.stringify(p)}`);continue}}let A=u[E],g={},I=[],v,F,G=typeof S.audit=="boolean"?S.audit:(0,ar.get)(un.CONFIG_PARAMS.LOGGING_AUDITLOG),U=S.trackDeletes,Q=S.expiration,V=S.eviction;if(A)g=A.indices,I=A.attributes,A.schemaVersion++;else{v=S.tableId,v?v>=(l.get(yc)||0)&&l.putSync(yc,v+1):(S.tableId=v=l.get(yc),v||(v=1),l.putSync(yc,v+1),l.putSync(S.key,S));let z=new la.default(!S.is_hash_attribute,S.is_hash_attribute);F=Vd(o.openDB(S.key,z)),F.rootStore=o,F.tableId=v}for(let z of p){z.attribute=z.name;try{if(!z.is_hash_attribute&&(z.indexed||z.attribute&&!z.name)){if(!g[z.name]){let Ce=new la.default(!z.is_hash_attribute,z.is_hash_attribute);g[z.name]=o.openDB(z.key,Ce),g[z.name].indexNulls=z.indexNulls}let se=I.find(Ce=>Ce.name===z.name);se?I.splice(I.indexOf(se),1,z):I.push(z)}}catch(se){Dn.error("Error trying to update attribute",z,I,g,se)}}if(!A){A=EM(u,E,EE({primaryStore:F,auditStore:_,audit:G,expirationMS:Q&&Q*1e3,evictionMS:V&&V*1e3,trackDeletes:U,tableName:E,tableId:v,primaryKey:S.name,databasePath:s?r+"/"+E:r,databaseName:r,indices:g,attributes:p,schemaDefined:S.schemaDefined,dbisDB:l})),A.schemaVersion=1;for(let z of Cg)z(A)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function fM(e){let t=at[e];if(t||(e==="data"?t=at[e]=ln:e==="system"?Object.defineProperty(at,"system",{value:t=Object.create(null),configurable:!0}):t=at[e]=Object.create(null)),wc&&!wc.has(e)){let r=new Set;t[RE]=r,wc.set(e,r)}return t}function EM(e,t,r){return e[t]=r,r}function gu({database:e,table:t}){e||(e=wg),rs();let r=fM(e),n=(0,st.join)((0,ar.getHdbBasePath)(),un.DATABASES_DIR_NAME),s=(0,ar.get)(un.CONFIG_PARAMS.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(s.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&s[e]?.tables?.[t]?.path;n=i||s[e]?.path||process.env.STORAGE_PATH||(0,ar.get)(un.CONFIG_PARAMS.STORAGE_PATH)||((0,cn.existsSync)(n)?n:(0,st.join)((0,ar.getHdbBasePath)(),un.LEGACY_DATABASES_DIR_NAME));let o=(0,st.join)(n,(i?t:e)+".mdb"),c=eo.get(o);if(!c){let l=new yg.default(o,!1);c=(0,pE.open)(l),eo.set(o,c)}return c}async function PT(e){if(!at[e])throw new Error("Schema does not exist");let t=at[e];for(let r in t){let s=t[r].primaryStore.rootStore;eo.delete(s.path),s.status==="open"&&(await s.close(),await uM.remove(s.path))}if(e==="data"){for(let r in ln)delete ln[r];delete ln[RE]}delete at[e]}function pt({table:e,database:t,expiration:r,eviction:n,scanInterval:s,attributes:i,audit:o,trackDeletes:c,schemaDefined:l,origin:_}){t||(t=wg);let u=gu({database:t,table:e}),d=at[t],f=d?.[e];if(u.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let E,h,p,S;l==null&&(l=!0);let A=new la.default(!1);for(let U of i)U.attribute?(U.name=U.attribute,U.indexed=!0):U.attribute=U.name,U.expiresAt&&(U.indexed=!0);let g,I;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 U=u.auditStore;U||(U=Qd(u)),h=i.find(se=>se.isPrimaryKey)||{},E=h.name,h.is_hash_attribute=!0,h.schemaDefined=l,c&&(h.trackDeletes=!0),o=h.audit=typeof o=="boolean"?o:(0,ar.get)(un.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(h.expiration=r),n&&(h.eviction=n),_&&(h.origins?h.origins.includes(_)||h.origins.push(_):h.origins=[_]),Dn.trace(`${e} table loading, opening primary store`);let Q=new la.default(!1,!0),V=e+"/",z=Vd(u.openDB(V,Q));z.rootStore=u,S=u.dbisDb=u.openDB(mE.INTERNAL_DBIS_NAME,A),z.tableId=S.get(yc),z.tableId||(z.tableId=1),S.putSync(yc,z.tableId+1),h.tableId=z.tableId,f=EM(d,e,EE({primaryStore:z,auditStore:U,audit:o,trackDeletes:c,expirationMS:r&&r*1e3,evictionMS:n&&n*1e3,primaryKey:E,tableName:e,tableId:z.tableId,databasePath:t,databaseName:t,indices:{},attributes:i,schemaDefined:l,dbisDB:S})),f.schemaVersion=1,g=!0,G(),S.put(V,h)}p=f.indices,S=S||(u.dbisDb=u.openDB(mE.INTERNAL_DBIS_NAME,A)),f.dbisDB=S;let v=[];for(let{key:U,value:Q}of S.getRange({start:!0})){let[V,z]=U.toString().split("/");if(z===""&&(z=Q.name),z){if(V!==e)continue}else z=V;if(!i.find(Ce=>Ce.name===z)?.indexed&&Q.indexed&&!Q.isPrimaryKey){G(),g=!0,S.remove(U);let Ce=f.indices[V];Ce&&v.push(Ce)}}let F=[];try{for(let U of i||[]){if(U.relationship)continue;let Q=e+"/"+(U.name||"");Object.defineProperty(U,"key",{value:Q,configurable:!0});let V=S.get(Q);if(U.isPrimaryKey){if(V=V||S.get(Q=e+"/")||{},o!==f.audit||(+r||void 0)!==(+V.expiration||void 0)||(+n||void 0)!==(+V.eviction||void 0)){let se=Object.assign({},V);typeof o=="boolean"&&(o&&f.enableAuditing(o),se.audit=o),r&&(se.expiration=+r),n&&(se.eviction=+n),g=!0,G(),S.put(Q,se)}continue}V?.attribute&&!V.name&&(V.indexed=!0);let z=!V||V.type!==U.type||V.indexed!==U.indexed||JSON.stringify(V.attributes)!==JSON.stringify(U.attributes)||JSON.stringify(V.elements)!==JSON.stringify(U.elements);if(U.indexed){let se=new la.default(!0,!1),Ce=u.openDB(Q,se);(z||V.indexingPID&&V.indexingPID!==process.pid||V.restartNumber<Vu.workerData?.restartNumber)&&(g=!0,G(),V=S.get(Q),(z||V.indexingPID&&V.indexingPID!==process.pid||V.restartNumber<Vu.workerData?.restartNumber)&&(g=!0,U.lastIndexedKey=V?.lastIndexedKey||!1,U.indexingPID=process.pid,Ce.isIndexing=!0,Object.defineProperty(U,"dbi",{value:Ce}),U.indexNulls===void 0&&(U.indexNulls=!0),F.push(U)),S.put(Q,U)),V?.indexNulls&&U.indexNulls===void 0&&(U.indexNulls=!0),Ce.indexNulls=U.indexNulls,p[U.name]=Ce}else z&&(g=!0,G(),S.put(Q,U))}}finally{I&&I()}if(g&&(f.schemaVersion++,f.updatedAttributes()),Dn.trace(`${e} table loading, running index`),F.length>0||v.length>0?f.indexingOperation=qZ(f,F,v):g&&SE.signalSchemaChange(new TE.SchemaEventMsg(process.pid,"schema-change",f.databaseName,f.tableName)),f.origin=_,g)for(let U of Cg)U(f,_!=="cluster");return(r||n||s)&&f.setTTLExpiration({expiration:r,eviction:n,scanInterval:s}),Dn.trace(`${e} table loaded`),f;function G(){I||u.transactionSync(()=>({then(U){I=U}}))}a(G,"startTxn")}async function qZ(e,t,r){try{let n=e.schemaVersion;await SE.signalSchemaChange(new TE.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let l of r)s=l.drop();let i,o=0,c=t.length;if(await new Promise(l=>setImmediate(l)),c>0){let l=0;for(let{key:_,value:u,version:d}of e.primaryStore.getRange({start:t[0].lastIndexedKey,lazy:c<4,versions:!0,snapshot:!1}))if(u){if(l++,s=e.primaryStore.ifVersion(_,d,()=>{for(let f=0;f<c;f++){let E=t[f],h=E.name,p=(0,_M.getIndexedValues)(u[h]);if(p)for(let S=0,A=p.length;S<A;S++)E.dbi.put(p[S],_)}}),s.then(()=>l--,f=>{l--,Dn.error(f)}),Vu.workerData&&Vu.workerData.restartNumber!==dM.restartNumber&&(i=!0),++o%100===0||i){for(let f of t)f.lastIndexedKey=_,e.dbisDB.put(f.key,f);if(i)return}l>BZ?await s:l>HZ&&await new Promise(f=>setImmediate(f))}for(let _ of t)delete _.lastIndexedKey,delete _.indexingPID,_.dbi.isIndexing=!1,s=e.dbisDB.put(_.key,_)}await s,await SE.signalSchemaChange(new TE.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(n){Dn.error("Error in indexing",n)}}function xZ({table:e,database:t}){let r=gu({database:t,table:e}),n=[],s=r.dbisDb;for(let i of s.getKeys({start:e+"/",end:e+"0"}))n.push(s.remove(i));return Promise.all(n)}function Lg(e){Cg.push(e)}var ar,mE,pE,st,cn,Ic,la,yg,un,uM,Ig,_M,SE,TE,Vu,Dn,dM,wg,RE,ln,at,yc,Cg,gE,eo,wc,BZ,HZ,Re=Ne(()=>{ar=B(J()),mE=B(ht()),pE=require("lmdb"),st=require("path"),cn=require("fs"),Ic=B(je());hE();la=B(ff()),yg=B(hf()),un=B(C()),uM=B(require("fs-extra")),Ig=require("../index"),_M=B(pr()),SE=B(ii()),TE=B(Zn()),Vu=require("worker_threads"),Dn=B(q()),dM=B(et());Ho();kl();wg="data",RE=Symbol("defined-tables");(0,ar.initSync)();ln=Object.create(null),at=Object.create(null);(0,Ig._assignPackageExport)("databases",at);(0,Ig._assignPackageExport)("tables",ln);yc=Symbol.for("next-table-id"),Cg=[],eo=new Map;a(UZ,"getTables");a(rs,"getDatabases");a(vZ,"resetDatabases");a($u,"readMetaDb");a(fM,"ensureDB");a(EM,"setTable");a(gu,"database");a(PT,"dropDatabase");a(pt,"table");BZ=1e3,HZ=10;a(qZ,"runIndexing");a(xZ,"dropTableMeta");a(Lg,"onUpdatedTable")});var Y=T((fge,wM)=>{"use strict";var to=require("path"),TM=require("fs-extra"),Ir=q(),hM=require("fs-extra"),AE=require("os"),GZ=require("net"),FZ=require("recursive-iterator"),ct=C(),kZ=Up(),mM=require("papaparse"),OE=require("moment"),{inspect:$Z}=require("util"),pM=require("is-number"),dge=require("lodash"),VZ=require("minimist"),YZ=require("https"),KZ=require("http"),{hdb_errors:NE}=te(),WZ=/^((\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)))$/,gM=require("util").promisify(setTimeout),QZ=100,jZ=5,zZ="",JZ=4,SM={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};wM.exports={isEmpty:_n,isEmptyOrZeroLength:Ms,arrayHasEmptyValues:e5,arrayHasEmptyOrZeroLengthValues:t5,buildFolderPath:r5,isBoolean:RM,errorizeMessage:XZ,stripFileExtension:s5,autoCast:i5,autoCastJSON:AM,autoCastJSONDeep:Pg,removeDir:o5,compareVersions:a5,isCompatibleDataVersion:c5,escapeRawValue:l5,unescapeValue:u5,stringifyProps:_5,timeoutPromise:f5,isClusterOperation:h5,getClusterUser:p5,checkGlobalSchemaTable:m5,getHomeDir:NM,getPropsFilePath:d5,promisifyPapaParse:S5,removeBOM:bM,createEventPromise:T5,checkProcessRunning:g5,checkSchemaTableExist:R5,checkSchemaExists:yM,checkTableExists:IM,getStartOfTomorrowInSeconds:A5,getLimitKey:O5,isObject:n5,isNotEmptyAndHasValue:ZZ,autoCasterIsNumberCheck:OM,backtickASTSchemaItems:N5,isPortTaken:E5,createForkArgs:b5,autoCastBoolean:y5,async_set_timeout:gM,getTableHashAttribute:I5,doesSchemaExist:w5,doesTableExist:C5,stringifyObj:L5,ms_to_time:D5,changeExtension:P5,getEnvCliRootPath:Mg,noBootFile:M5,httpRequest:U5,transformReq:v5,convertToMS:B5,PACKAGE_ROOT:ct.PACKAGE_ROOT};function XZ(e){return e instanceof Error?e:new Error(e)}a(XZ,"errorizeMessage");function _n(e){return e==null}a(_n,"isEmpty");function ZZ(e){return!_n(e)&&(e||e===0||e===""||RM(e))}a(ZZ,"isNotEmptyAndHasValue");function Ms(e){return _n(e)||e.length===0||e.size===0}a(Ms,"isEmptyOrZeroLength");function e5(e){if(_n(e))return!0;for(let t=0;t<e.length;t++)if(_n(e[t]))return!0;return!1}a(e5,"arrayHasEmptyValues");function t5(e){if(Ms(e))return!0;for(let t=0;t<e.length;t++)if(Ms(e[t]))return!0;return!1}a(t5,"arrayHasEmptyOrZeroLengthValues");function r5(...e){try{return e.join(to.sep)}catch{console.error(e)}}a(r5,"buildFolderPath");function RM(e){return _n(e)?!1:e===!0||e===!1}a(RM,"isBoolean");function n5(e){return _n(e)?!1:typeof e=="object"}a(n5,"isObject");function s5(e){return Ms(e)?zZ:e.slice(0,-JZ)}a(s5,"stripFileExtension");function i5(e){return _n(e)||e===""||typeof e!="string"?e:SM[e]!==void 0?SM[e]:OM(e)===!0?Number(e):WZ.test(e)?new Date(e):e}a(i5,"autoCast");function AM(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(AM,"autoCastJSON");function Pg(e){if(e&&typeof e=="object"){if(Array.isArray(e))for(let t=0,r=e.length;t<r;t++){let n=e[t],s=Pg(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=Pg(r);n!==r&&(e[t]=n)}return e}else return AM(e)}a(Pg,"autoCastJSONDeep");function OM(e){if(e.startsWith("0.")&&pM(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&pM(e))}a(OM,"autoCasterIsNumberCheck");async function o5(e){if(Ms(e))throw new Error(`Directory path: ${e} does not exist`);try{await hM.emptyDir(e),await hM.remove(e)}catch(t){throw Ir.error(`Error removing files in ${e} -- ${t}`),t}}a(o5,"removeDir");function a5(e,t){if(Ms(e)){Ir.info("Invalid current version sent as parameter.");return}if(Ms(t)){Ir.info("Invalid upgrade version sent as parameter.");return}let r,n=/(\.0+)+$/,s=e.version?e.version:e,i=t.version?t.version:t,o=s.replace(n,"").split("."),c=i.replace(n,"").split("."),l=Math.min(o.length,c.length);for(let _=0;_<l;_++)if(r=parseInt(o[_],10)-parseInt(c[_],10),r)return r;return o.length-c.length}a(a5,"compareVersions");function c5(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(c5,"isCompatibleDataVersion");function l5(e){if(_n(e))return e;let t=String(e);return t==="."?ct.UNICODE_PERIOD:t===".."?ct.UNICODE_PERIOD+ct.UNICODE_PERIOD:t.replace(ct.FORWARD_SLASH_REGEX,ct.UNICODE_FORWARD_SLASH)}a(l5,"escapeRawValue");function u5(e){if(_n(e))return e;let t=String(e);return t===ct.UNICODE_PERIOD?".":t===ct.UNICODE_PERIOD+ct.UNICODE_PERIOD?"..":String(e).replace(ct.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(u5,"unescapeValue");function _5(e,t){if(_n(e))return Ir.info("Properties object is null"),"";let r="";return e.each(function(n,s){try{if(t&&t[n]){let i=t[n];for(let o of i)r+=";"+o+AE.EOL}!Ms(n)&&n[0]===";"?r+=" "+n+s+AE.EOL:Ms(n)||(r+=n+"="+s+AE.EOL)}catch{Ir.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(_5,"stringifyProps");function NM(){let e;try{e=AE.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(NM,"getHomeDir");function d5(){let e=to.join(NM(),ct.HDB_HOME_DIR_NAME,ct.BOOT_PROPS_FILE_NAME);return TM.existsSync(e)||(e=to.join(__dirname,"../","hdb_boot_properties.file")),e}a(d5,"getPropsFilePath");function f5(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:function(){clearTimeout(r)}}}a(f5,"timeoutPromise");async function E5(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=GZ.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a(E5,"isPortTaken");function h5(e){try{return ct.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){Ir.error(`Error checking operation against cluster ops ${t}`)}return!1}a(h5,"isClusterOperation");function m5(e,t){let r=(Re(),re(xe)).getDatabases();if(!r[e])return NE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return NE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(m5,"checkGlobalSchemaTable");function p5(e,t){if(_n(t)){Ir.warn("No CLUSTERING_USER defined, clustering disabled");return}if(_n(e)||Ms(e)){Ir.warn("No users to search.");return}let r;try{let n=e.get(t);n&&n.role.permission.cluster_user===!0&&n.active===!0&&(r=n)}catch(n){Ir.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){Ir.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(p5,"getClusterUser");function S5(){mM.parsePromise=function(e,t,r){return new Promise(function(n,s){mM.parse(e,{header:!0,transformHeader:bM,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(S5,"promisifyPapaParse");function bM(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(bM,"removeBOM");function T5(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;Ir.info(`Got cluster status event response: ${$Z(s)}`);try{i.cancel()}catch{Ir.error("Error trying to cancel timeout.")}n(s)})})}a(T5,"createEventPromise");async function g5(e){let t=!0,r=0;do await gM(QZ*r++),(await kZ.findPs(e)).length>0&&(t=!1);while(t&&r<jZ);if(t)throw new Error(`process ${e} was not started`)}a(g5,"checkProcessRunning");function R5(e,t){let r=yM(e);if(r)return r;let n=IM(e,t);if(n)return n}a(R5,"checkSchemaTableExist");function yM(e){let{getDatabases:t}=(Re(),re(xe));if(!t()[e])return NE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(yM,"checkSchemaExists");function IM(e,t){let{getDatabases:r}=(Re(),re(xe));if(!r()[e][t])return NE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(IM,"checkTableExists");function A5(){let e=OE().utc().add(1,ct.MOMENT_DAYS_TAG).startOf(ct.MOMENT_DAYS_TAG).unix(),t=OE().utc().unix();return e-t}a(A5,"getStartOfTomorrowInSeconds");function O5(){return OE().utc().format("DD-MM-YYYY")}a(O5,"getLimitKey");function N5(e){try{let t=new FZ(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){Ir.error("Got an error back ticking items."),Ir.error(t)}}a(N5,"backtickASTSchemaItems");function b5(e){return[e]}a(b5,"createForkArgs");function y5(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(y5,"autoCastBoolean");function I5(e,t){let{getDatabases:r}=(Re(),re(xe)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(I5,"getTableHashAttribute");function w5(e){let{getDatabases:t}=(Re(),re(xe));return t()[e]!==void 0}a(w5,"doesSchemaExist");function C5(e,t){let{getDatabases:r}=(Re(),re(xe));return r()[e]?.[t]!==void 0}a(C5,"doesTableExist");function L5(e){try{return JSON.stringify(e)}catch{return e}}a(L5,"stringifyObj");function D5(e){let t=OE.duration(e),r=t.seconds()>0?t.seconds()+"s":"",n=t.minutes()>0?t.minutes()+"m ":"",s=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+s+n+r}a(D5,"ms_to_time");function P5(e,t){let r=to.basename(e,to.extname(e));return to.join(to.dirname(e),r+t)}a(P5,"changeExtension");function Mg(){if(process.env[ct.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[ct.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=VZ(process.argv);if(e[ct.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[ct.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(Mg,"getEnvCliRootPath");var Dg;function M5(){if(Dg)return Dg;let e=Mg();Mg()&&TM.pathExistsSync(to.join(e,ct.HDB_CONFIG_FILE))&&(Dg=!0)}a(M5,"noBootFile");function U5(e,t){let r;return e.protocol==="http:"?r=KZ:r=YZ,new Promise((n,s)=>{let i=r.request(e,o=>{o.setEncoding("utf8");let c={body:"",headers:o.headers};o.on("data",l=>{c.body+=l}),o.on("end",()=>{n(c)})});i.on("error",o=>{s(o)}),i.write(JSON.stringify(t)),i.end()})}a(U5,"httpRequest");function v5(e){if(!e.schema&&!e.database){e.schema=ct.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(v5,"transformReq");function B5(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(B5,"convertToMS")});var J=T((hge,PM)=>{"use strict";var Ug=require("fs-extra"),ua=require("path"),CM=require("os"),H5=require("properties-reader"),Ku=q(),Yu=Y(),le=C(),bE=St(),q5="Error initializing environment manager",yE="BOOT_PROPS_FILE_PATH",LM=!1,x5={[le.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[le.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[le.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},_i={};PM.exports={BOOT_PROPS_FILE_PATH:yE,getHdbBasePath:G5,setHdbBasePath:F5,get:DM,initSync:$5,setProperty:Pe,initTestEnvironment:V5};function G5(){return _i[le.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(G5,"getHdbBasePath");function F5(e){_i[le.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(F5,"setHdbBasePath");function DM(e){let t=bE.getConfigValue(e);return t===void 0?_i[e]:t}a(DM,"get");function Pe(e,t){x5[e]&&(_i[e]=t),bE.updateConfigObject(e,t)}a(Pe,"setProperty");function k5(){let e;try{e=Yu.getPropsFilePath(),Ug.accessSync(e,Ug.constants.F_OK|Ug.constants.R_OK),LM=!0;let t=H5(e);return _i[le.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(le.HDB_SETTINGS_NAMES.INSTALL_USER),_i[le.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(le.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),_i[yE]=e,!0}catch{return Ku.trace(`Environment manager found no properties file at ${e}`),!1}}a(k5,"doesPropFileExist");function $5(e=!1){try{(LM||k5()||Yu.noBootFile())&&(bE.initConfig(e),_i[le.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=bE.getConfigValue(le.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Ku.error(q5),Ku.error(t),console.error(t),process.exit(1)}}a($5,"initSync");function V5(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:n,https_enabled:s,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,l=ua.join(__dirname,"../../","unitTests");_i[yE]=ua.join(l,"hdb_boot_properties.file"),Pe(le.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,ua.join(l,"settings.test")),Pe(le.HDB_SETTINGS_NAMES.INSTALL_USER,CM.userInfo()?CM.userInfo().username:void 0),Pe(le.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Pe(le.HDB_SETTINGS_NAMES.LOG_PATH_KEY,ua.join(l,"envDir","log")),Pe(le.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Pe(le.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Pe(le.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Pe(le.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,ua.join(l,"envDir")),Pe(le.CONFIG_PARAMS.STORAGE_PATH,ua.join(l,"envDir")),s&&(Pe(le.CONFIG_PARAMS.HTTP_SECUREPORT,DM(le.CONFIG_PARAMS.HTTP_PORT)),Pe(le.CONFIG_PARAMS.HTTP_PORT,null)),Pe(le.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),Pe(le.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Pe(le.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Yu.isEmpty(i)?!1:i),Pe(le.CONFIG_PARAMS.HTTP_CORS,Yu.isEmpty(i)?!1:i),Pe(le.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Pe(le.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Pe(le.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Pe(le.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Pe(le.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,ua.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Pe(le.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Yu.isEmpty(c)?!1:c),o&&(Pe("CORS_ACCESSLIST",o),Pe(le.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(Pe(le.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),Pe(le.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(Pe(le.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Pe(le.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(Pe(le.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Pe(le.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${yE}. Please check your boot props and settings files`;Ku.fatal(r),Ku.error(t)}}a(V5,"initTestEnvironment")});var Bg={};Fe(Bg,{loadGQLSchema:()=>W5,start:()=>vg,startOnMainThread:()=>K5});function vg({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:l,NamedTypeNode:_,StringValueNode:u}=await import("graphql"),d=o(new c(r.toString(),s)),f=new Map,E=[],h;for(let S of d.definitions)switch(S.kind){case l.OBJECT_TYPE_DEFINITION:let F=function(G){if(G.kind==="NonNullType"){let V=F(G.type);return V.nullable=!1,V}if(G.kind==="ListType")return{type:"array",elements:F(G.type)};let Q={type:G.name?.value};return Object.defineProperty(Q,"location",{value:G.loc.startToken}),Q};a(F,"getProperty");let A=S.name.value,g=[],I={table:null,database:null,properties:g};f.set(A,I);for(let G of S.directives){if(G.name.value==="table"){for(let U of G.arguments)I[U.name.value]=U.value.value;I.schema&&(I.database=I.schema),I.table||(I.table=A),I.audit&&(I.audit=I.audit!=="false"),I.attributes=I.properties,E.push(I)}if(G.name.value==="sealed"&&(I.sealed=!0),G.name.value==="export"){I.export=!0;for(let U of G.arguments)U.name.value==="name"&&(I.export={name:U.value.value})}}let v=!1;for(let G of S.fields){let U=F(G.type);U.name=G.name.value,g.push(U);for(let Q of G.directives)if(Q.name.value==="primaryKey")v?console.warn("Can not define two attributes as a primary key"):(U.isPrimaryKey=!0,v=!0);else if(Q.name.value==="indexed")U.indexed=!0;else if(Q.name.value==="relationship"){let V={};for(let z of Q.arguments)V[z.name.value]=z.value.value;U.relationship=V}else if(Q.name.value==="createdTime")U.assignCreatedTime=!0;else if(Q.name.value==="updatedTime")U.assignUpdatedTime=!0;else if(Q.name.value==="expiresAt")U.expiresAt=!0;else if(Q.name.value==="allow"){let V=U.authorizedRoles=[];for(let z of Q.arguments)z.name.value==="role"&&V.push(z.value.value)}}I.type=A,A==="Query"&&(h=I)}function p(S){let A=f.get(S.type);A?(Object.defineProperty(S,"properties",{value:A.properties}),Object.defineProperty(S,"definition",{value:A})):S.type==="array"?p(S.elements):Y5.includes(S.type)||(0,MM.getWorkerIndex)()===0&&console.error(`The type ${S.type} is unknown at line ${S.location.line}, column ${S.location.column}, in ${s}`)}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,IE.dirname)(n),S.tableClass):i.set((0,IE.dirname)(n)+"/"+(S.export.name||S.type),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,IE.dirname)(n)+"/"+S.name,A.tableClass)}}}var IE,MM,Y5,K5,W5,UM=Ne(()=>{IE=require("path");Re();MM=B(et()),Y5=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];a(vg,"start");K5=vg,W5=vg({ensureTable:pt}).handleFile});async function wE(e){return Q5?(Wu||(Wu=j5(J5)),(await(await Wu).import(e)).namespace):import(e)}async function j5(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Wu=new Compartment({console,Math,Date,fetch:z5,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,BM.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){Object.assign(s,{Resource:jt,tables:ln,databases:at})}};let n=await(0,vM.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)}}),Wu}function z5(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 J5(){return{Resource:jt,tables:ln}}var vM,BM,Q5,Wu,Hg=Ne(()=>{zn();Re();vM=require("fs/promises"),BM=require("path"),Q5=!1;a(wE,"secureImport");a(j5,"getCompartment");a(z5,"secureOnlyFetch");a(J5,"getGlobalVars")});var xg={};Fe(xg,{handleFile:()=>X5});async function X5(e,t,r,n){let s=new Map,i=(0,HM.pathToFileURL)(r).toString(),o=await wE(i);l(o.default)&&n.set((0,qg.dirname)(t),o.default),c(o,(0,qg.dirname)(t));function c(_,u){for(let d in _){let f=_[d];l(f)?n.set(u+"/"+d,f):typeof f=="object"&&c(f,u+"/"+d)}}a(c,"recurseForResources");function l(_){return typeof _=="function"&&(_.get||_.put||_.post||_.delete)}return a(l,"isResource"),s}var HM,qg,qM=Ne(()=>{HM=require("url");Hg();qg=require("path");a(X5,"handleFile")});var Fg={};Fe(Fg,{start:()=>Z5});function Z5({resources:e}){e.set("login",Gg),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var Gg,xM=Ne(()=>{zn();a(Z5,"start");Gg=class extends jt{static{a(this,"Login")}static async get(t,r,n){}static async post(t,r,n){let{username:s,password:i,redirect:o}=r;return{data:await n.login(s,i)}}}});var KM={};Fe(KM,{parse:()=>$g,streamAsJSON:()=>Qu,stringify:()=>_a});function Qu(e){return new kg({value:e})}function GM(e){return console.error(e),JSON.stringify(e.toString())}function FM(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function _a(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===VM)return YM(e);if(t.resolution)return t.resolution.then(()=>_a(e));throw t}}function YM(e){let t=typeof e;if(t==="object"){if(e===null)return"null";e.toJSON&&(e=e.toJSON());let r;if(Array.isArray(e)){r="[";for(let n=0;n<e.length;n++)n>0&&(r+=","),r+=YM(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+_a(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function $g(e){return r8.test(e)?e8.parse(e):JSON.parse(e)}var kM,$M,e8,t8,VM,kg,r8,Vg=Ne(()=>{kM=require("stream"),$M=B(require("json-bigint-fixes")),e8=(0,$M.default)({useNativeBigInt:!0}),t8=1e4,VM={};BigInt.prototype.toJSON=function(){throw VM};a(Qu,"streamAsJSON");kg=class extends kM.Readable{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],n=t[Symbol.iterator];if((n||r)&&!t.then){yield"[";let s=!0;if((r||n)&&!(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 s?s=!1:yield",",yield*this.serialize(o.value)}for(let i of t)s?s=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(s=>this.serialize(s),GM)}catch(s){yield GM(s)}else yield _a(t)}else yield _a(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);FM(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>t8?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 FM(this.readIterator(t.childIterator),n=>{if(n)return t.childIterator=null,this.readIterator(t)});do{let n=t.next();if(n.done)return!0;if(r=n.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(s=>{if(s&&typeof s.return=="function")return t.childIterator=s,this.readIterator(t);if(this.push(s+""))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 n of this.activeIterators)t?n.throw(t):n.return();r()}};a(GM,"handleError");a(FM,"when");a(_a,"stringify");a(YM,"jsStringify");r8=/-?\d{16,}/;a($g,"parse")});var CE=T((wge,WM)=>{"use strict";var n8=yn();WM.exports={writeTransaction:s8};function s8(e,t,r){return n8.writeTransaction(e,t,r)}a(s8,"writeTransaction")});var JM=T((Dge,zM)=>{"use strict";var i8=Or(),o8=In(),QM=q(),a8=Nr(),Lge=CE(),c8=require("clone"),Kg=require("alasql"),l8=xf(),jM=require("util"),u8=jM.promisify(o8.getTableSchema),_8=jM.promisify(i8.search),d8=C(),Yg=Y();l8(Kg);zM.exports={update:E8};var f8="There was a problem performing this update. Please check the logs and try again.";async function E8({statement:e,hdb_user:t}){let r=await u8(e.table.databaseid,e.table.tableid),n=h8(e.columns);Yg.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=c8(s),c=Yg.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,_=Kg.parse(l).statements[0],u=await _8(_),d=m8(n,u);return p8(o,d,t)}a(E8,"update");function h8(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=Kg.compile(`SELECT ${r.expression.toString()} AS [${d8.FUNC_VAL}] FROM ?`)}),t}catch(t){throw QM.error(t),new Error(f8)}}a(h8,"createUpdateRecord");function m8(e,t){return Yg.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(m8,"buildUpdateRecords");async function p8(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await a8.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){QM.error(`Error delete new_attributes from update response: ${i}`)}return s}a(p8,"updateRecords")});var ZM=T((vge,XM)=>{var S8=require("alasql"),T8=Or(),g8=q(),R8=yn(),Qg=require("util"),Wg=Y(),A8=C(),O8=In(),Mge=CE(),Uge=Nr(),N8="record",b8="successfully deleted",y8=Qg.callbackify(L8),I8=Qg.promisify(T8.search),w8=Qg.promisify(O8.getTableSchema);XM.exports={convertDelete:y8};function C8(e){return`${e.deleted_hashes.length} ${N8}${e.deleted_hashes.length===1?"":"s"} ${b8}`}a(C8,"generateReturnMessage");async function L8({statement:e,hdb_user:t}){let r=await w8(e.table.databaseid,e.table.tableid);Wg.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=Wg.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=S8.parse(o).statements[0],l={operation:A8.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await I8(c);let _=await R8.deleteRecords(l);return Wg.isEmptyOrZeroLength(_.message)&&(_.message=C8(_)),delete _.txn_time,_}catch(_){throw g8.error(_),_.hdb_code?_.message:_}}a(L8,"convertDelete")});var sU=T((Hge,nU)=>{"use strict";var D8=Qi(),{hdb_errors:eU}=te(),{getDatabases:tU}=(Re(),re(xe));nU.exports={checkSchemaExists:rU,checkSchemaTableExists:P8,schema_describe:D8};async function rU(e){if(!tU()[e])return eU.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(rU,"checkSchemaExists");async function P8(e,t){let r=await rU(e);if(r)return r;if(!tU()[e][t])return eU.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(P8,"checkSchemaTableExists")});var Tt=T(($ge,NU)=>{"use strict";var Jt=J();Jt.initSync();var M8=require("fs-extra"),U8=require("semver"),Ju=require("path"),{monotonicFactory:v8}=require("ulidx"),oU=v8(),B8=require("util"),aU=require("child_process"),H8=B8.promisify(aU.exec),q8=aU.spawn,ye=Ze(),Ue=C(),Xg=Y(),dn=q(),LE=li(),x8=CE(),ju=St(),{onMessageByType:G8}=et(),{isMainThread:F8}=require("worker_threads"),{Encoder:k8,decode:Zg}=require("msgpackr"),cU=new k8,{isEmpty:ha}=Xg,lU=yr(),$8=48*36e11,V8=5e9;F8&&G8(Ue.ITC_EVENT_TYPES.RESTART,()=>{Pn=void 0,Ea=void 0});var{connect:Y8,StorageType:uU,RetentionPolicy:_U,AckPolicy:DE,DeliverPolicy:PE,DiscardPolicy:K8,NatsConnection:xge,JetStreamManager:Gge,JetStreamClient:Fge,StringCodec:kge,JSONCodec:W8,createInbox:eR,headers:Q8,ErrorCode:iU}=require("nats"),{PACKAGE_ROOT:j8}=C(),z8=Mo(),{recordAction:J8}=(ui(),re(Mu)),dU=W8(),X8="clustering",Z8=z8.engines[ye.NATS_SERVER_NAME],e6=Ju.join(j8,"dependencies"),Jg=Ju.join(e6,`${process.platform}-${process.arch}`,ye.NATS_BINARY_NAME),jg,zg,zu,da,fa;NU.exports={runCommand:fU,checkNATSServerInstalled:t6,createConnection:tR,getConnection:ME,getJetStreamManager:Xu,getJetStream:hU,getNATSReferences:wr,getServerList:n6,createLocalStream:rR,listStreams:mU,deleteLocalStream:s6,getServerConfig:Zu,listRemoteStreams:i6,viewStream:o6,viewStreamIterator:a6,publishToStream:c6,createWorkQueueStream:l6,addSourceToWorkStream:SU,request:_6,removeSourceFromWorkStream:gU,reloadNATS:nR,reloadNATSHub:d6,reloadNATSLeaf:f6,extractServerName:TU,requestErrorHandler:E6,updateWorkStream:h6,createLocalTableStream:AU,createTableStreams:m6,purgeTableStream:OU,purgeSchemaTableStreams:p6,getStreamInfo:S6,updateLocalStreams:g6,closeConnection:r6,getJsmServerName:e_,addNatsMsgHeader:pU,updateIngestStreamConsumer:u6,clearClientCache:EU};async function fU(e,t=void 0){let{stdout:r,stderr:n}=await H8(e,{cwd:t});if(n)throw new Error(n.replace(`
|
|
7
|
+
`)},oX="certificate.pem",aX="privateKey.pem",cX="ca.pem";hP.exports={CERTIFICATE_VALUES:iX,CERTIFICATE_PEM_NAME:oX,PRIVATEKEY_PEM_NAME:aX,CA_PEM_NAME:cX}});var hg=T((VTe,gP)=>{"use strict";var TP=require("fs-extra"),ae=require("joi"),lX=require("os"),{boolean:Ie,string:yr,number:Pt,array:Eg}=ae.types(),{totalmem:pP}=require("os"),ra=require("path"),uX=x(),iE=K(),$Te=fg(),mP=C(),_X=rt(),SP="log",dX="components",fX="Invalid logging.rotation.maxSize unit. Available units are G, M or K",EX="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",hX="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",pX="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",mX="rootPath config parameter is undefined",SX="clustering.enabled config parameter is undefined",na=Pt.min(0).required(),oE=Eg.items({host:yr.required(),port:na}).empty(null),Ds;gP.exports={configValidator:TX,routesValidator:bX,route_constraints:oE};function TX(e){if(Ds=e.rootPath,iE.isEmpty(Ds))throw mX;let t=Ie.required(),r=Pt.min(0).max(1e3).empty(null).default(NX),n=yr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Nu),s=yr.optional().empty(null),i=yr.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),o=ae.string().empty(null).default(Nu),c=ae.custom(RX).empty(null).default(Nu),l=e.clustering?.enabled;if(iE.isEmpty(l))throw SX;let _;return l===!0?_=ae.object({enabled:t,hubServer:ae.object({cluster:ae.object({name:ae.required().empty(null),network:ae.object({port:na,routes:oE}).required()}).required(),leafNodes:ae.object({network:ae.object({port:na}).required()}).required(),network:ae.object({port:na}).required()}).required(),leafServer:ae.object({network:ae.object({port:na,routes:oE}).required(),streams:ae.object({maxAge:Pt.min(120).allow(null).optional(),maxBytes:Pt.min(1).allow(null).optional(),maxMsgs:Pt.min(1).allow(null).optional(),path:o}).required()}).required(),logLevel:ae.valid("error","warn","info","debug","trace"),nodeName:i,republishMessages:Ie.optional(),databaseLevel:Ie.optional(),tls:ae.object({certificate:s,certificateAuthority:s,privateKey:s,insecure:Ie.required(),verify:Ie.optional()}),user:yr.optional().empty(null)}).required():_=ae.object({enabled:t,tls:ae.object({certificate:s,certificateAuthority:s,privateKey:s,insecure:Ie.required()})}).required(),ae.object({authentication:ae.object({authorizeLocal:Ie,cacheTTL:Pt.required(),enableSessions:Ie}),analytics:ae.object({aggregatePeriod:Pt}),componentsRoot:n.optional(),clustering:_,localStudio:ae.object({enabled:t}).required(),logging:ae.object({auditAuthEvents:ae.object({logFailed:Ie,logSuccessful:Ie}),file:Ie.required(),level:ae.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ae.object({enabled:Ie.optional(),compress:Ie.optional(),interval:yr.custom(OX).optional().empty(null),maxSize:yr.custom(AX).optional().empty(null),path:yr.optional().empty(null).default(Nu)}).required(),root:n,stdStreams:Ie.required(),auditLog:Ie.required()}).required(),operationsApi:ae.object({network:ae.object({cors:Ie.optional(),corsAccessList:Eg.optional(),headersTimeout:Pt.min(1).optional(),keepAliveTimeout:Pt.min(1).optional(),port:Pt.optional().empty(null),domainSocket:ae.optional().empty("hdb/operations-server").default(Nu),securePort:Pt.optional().empty(null),timeout:Pt.min(1).optional()}).optional(),tls:ae.object({certificate:s,certificateAuthority:s,privateKey:s})}).required(),rootPath:yr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ae.object({network:ae.object({port:na,securePort:na,mtls:ae.alternatives([Ie.optional(),ae.object({user:yr.optional(),certificateAuthority:s,required:Ie.optional()})])}).required(),webSocket:Ie.optional(),requireAuthentication:Ie.optional()}),http:ae.object({compressionThreshold:Pt.optional(),cors:Ie.optional(),corsAccessList:Eg.optional(),headersTimeout:Pt.min(1).optional(),port:Pt.min(0).optional().empty(null),securePort:Pt.min(0).optional().empty(null),mtls:ae.alternatives([Ie.optional(),ae.object({user:yr.optional(),certificateAuthority:s,required:Ie.optional()})])}).required(),threads:ae.alternatives(r.optional(),ae.object({count:r.optional(),debug:ae.alternatives(Ie.optional(),ae.object({startingPort:Pt.min(1).optional(),host:yr.optional(),waitForDebugger:Ie.optional()})),maxHeapMemory:Pt.min(0).optional()})),storage:ae.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:ae.object({certificate:s.optional(),certificateAuthority:s.optional(),privateKey:s.optional(),ciphers:yr.optional()})}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(TX,"configValidator");function gX(e){return TP.existsSync(e)?null:`Specified path ${e} does not exist.`}a(gX,"doesPathExist");function RX(e,t){ae.assert(e,yr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=gX(e);if(r)return t.message(r)}a(RX,"validatePath");function AX(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(fX);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(hX):e}a(AX,"validateRotationMaxSize");function OX(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(EX);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(pX):e}a(OX,"validateRotationInterval");function NX(e,t){let r=t.state.path.join("."),n=lX.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||pP();return i=Math.round(Math.min(i,pP())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),uX.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(NX,"setDefaultThreads");function Nu(e,t){let r=t.state.path.join(".");if(!iE.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(iE.isEmpty(Ds))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return ra.join(Ds,dX);case"logging.root":return ra.join(Ds,SP);case"clustering.leafServer.streams.path":return ra.join(Ds,"clustering","leaf");case"storage.path":let n=ra.join(Ds,mP.LEGACY_DATABASES_DIR_NAME);return TP.existsSync(n)?n:ra.join(Ds,mP.DATABASES_DIR_NAME);case"logging.rotation.path":return ra.join(Ds,SP);case"operationsApi.network.domainSocket":return r==null?null:ra.join(Ds,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Nu,"setDefaultRoot");function bX(e){let t=ae.object({routes:oE});return _X.validateBySchema({routes:e},t)}a(bX,"routesValidator")});var Et=T((WTe,CP)=>{"use strict";var rn=C(),Ft=K(),Mt=x(),{configValidator:yX,routesValidator:RP}=hg(),Ir=require("fs-extra"),IX=require("yaml"),ss=require("path"),wX=require("is-number"),OP=require("properties-reader"),CX=require("lodash"),{handleHDBError:LX}=ie(),{HTTP_STATUS_CODES:DX,HDB_ERROR_MSGS:aE}=Wr(),KTe=require("minimist"),{server:PX}=(mr(),oe(Ho)),{DATABASES_PARAM_CONFIG:bu,CONFIG_PARAMS:tn,CONFIG_PARAM_MAP:is}=rn,MX="Unable to get config value because config is uninitialized",UX="Config successfully initialized",vX="Error backing up config file",BX="Empty parameter sent to getConfigValue",NP=ss.join(rn.PACKAGE_ROOT,"config","yaml",rn.HDB_DEFAULT_CONFIG_FILE),HX="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",AP={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"},cE,Ut,lE;CP.exports={createConfigFile:qX,getDefaultConfig:GX,getConfigValue:yP,initConfig:mg,flattenConfig:Tc,updateConfigValue:IP,updateConfigObject:FX,getConfiguration:VX,setConfiguration:YX,readConfigFile:Tg,getClusteringRoutes:KX,initOldConfig:wP,getConfigFromFile:WX,getConfigFilePath:sa,addConfig:QX,deleteConfigFromFile:jX,getConfigObj:zX};function qX(e){let t=Zi(NP);cE=Tc(t.toJSON());let r;for(let o in e){let c=is[o.toLowerCase()];if(c===tn.DATABASES){r=e[o];continue}if(!c&&o.endsWith("_package")&&(c=o),c!==void 0){let l=c.split("_"),_=pg(c,e[o]);c==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{t.setIn([...l],_)}catch(u){Mt.error(u)}}}r&&bP(t,r),Sg(t);let n=t.toJSON();Ut=Tc(n);let s=t.getIn(["rootPath"]),i=ss.join(s,rn.HDB_CONFIG_FILE);Ir.createFileSync(i),Ir.writeFileSync(i,String(t)),Mt.trace(`Config file written to ${i}`)}a(qX,"createConfigFile");function bP(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!Ft.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(bu.TABLES))for(let i in n[s][bu.TABLES])for(let o in n[s][bu.TABLES][i]){let c=n[s][bu.TABLES][i][o],l=[tn.DATABASES,s,bu.TABLES,i,o];e.hasIn(l)?e.setIn(l,c):e.addIn(l,c)}else for(let i in n[s]){let o=n[s][i],c=[tn.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){Mt.error("Error parsing schemas CLI/env config arguments",n)}}a(bP,"setSchemasConfig");function GX(e){if(cE===void 0){let r=Zi(NP);cE=Tc(r.toJSON())}let t=is[e.toLowerCase()];if(t!==void 0)return cE[t.toLowerCase()]}a(GX,"getDefaultConfig");function yP(e){if(e==null){Mt.error(BX);return}if(Ut===void 0){Mt.trace(MX);return}let t=is[e.toLowerCase()];if(t!==void 0)return Ut[t.toLowerCase()]}a(yP,"getConfigValue");function sa(e=Ft.getPropsFilePath()){let t=Ft.getEnvCliRootPath();return t?ss.join(t,rn.HDB_CONFIG_FILE):OP(e).get(rn.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(sa,"getConfigFilePath");function mg(e=!1){if(Ut===void 0||e){let t;if(!Ft.noBootFile()){t=Ft.getPropsFilePath();try{Ir.accessSync(t,Ir.constants.F_OK|Ir.constants.R_OK)}catch(i){throw Mt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=sa(t),n;if(r.includes("config/settings.js"))try{wP(r);return}catch(i){if(i.code!==rn.NODE_ERROR_CODES.ENOENT)throw i}try{n=Zi(r)}catch(i){if(i.code===rn.NODE_ERROR_CODES.ENOENT){Mt.trace(`HarperDB config file not found at ${r}.
|
|
8
|
+
This can occur during early stages of install where the config file has not yet been created`);return}else throw Mt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}xX(n,r),Sg(n);let s=n.toJSON();if(PX.config=s,Ut=Tc(s),Ut.logging_rotation_rotate)for(let i in AP)Ut[i]&&Mt.error(`Config ${AP[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);Mt.trace(UX)}}a(mg,"initConfig");function xX(e,t){let r=e.getIn(["rootPath"]),n=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],ss.join(r,"database")),n=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],ss.join(r,"clustering","leaf")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],ss.join(r,"log")),n=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),n=!0),n&&(Mt.trace("Updating config file with missing config params"),Ir.writeFileSync(t,String(e)))}a(xX,"checkForUpdatedConfig");function Sg(e){let t=e.toJSON();t.componentsRoot=t.componentsRoot??t?.customFunctions?.root,t?.http?.threads&&(t.threads=t?.http?.threads);let r=yX(t);if(r.error)throw aE.CONFIG_VALIDATION(r.error.message);typeof r.value.threads=="object"?e.setIn(["threads","count"],r.value.threads.count):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),e.setIn(["operationsApi","network","domainSocket"],r.value?.operationsApi?.network?.domainSocket)}a(Sg,"validateConfig");function FX(e,t){Ut===void 0&&(Ut={});let r=is[e.toLowerCase()];if(r===void 0){Mt.trace(`Unable to update config object because config param '${e}' does not exist`);return}Ut[r.toLowerCase()]=t}a(FX,"updateConfigObject");function IP(e,t,r=void 0,n=!1,s=!1,i=!1){Ut===void 0&&mg();let o=yP(is.hdb_root),c=ss.join(o,rn.HDB_CONFIG_FILE),l=Zi(c),_;if(r===void 0&&e.toLowerCase()===tn.DATABASES)_=t;else if(r===void 0){let f;if(i)f=e;else if(f=is[e.toLowerCase()],f===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=f.split("_"),h=pg(f,t);l.setIn([...E],h)}else for(let f in r){let E=is[f.toLowerCase()];if(E===tn.HTTP_SECUREPORT&&r[f]===Ut[tn.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),E===tn.OPERATIONSAPI_NETWORK_SECUREPORT&&r[f]===Ut[tn.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),E===tn.DATABASES){_=r[f];continue}if(E?.startsWith("threads_")){let h=l.getIn(["threads"]);h>=0&&(l.deleteIn(["threads"]),l.setIn(["threads","count"],h))}if(!E&&f.endsWith("_package")&&(E=f),E!==void 0){let h=E.split("_"),m=rn.LEGACY_CONFIG_PARAMS[f.toUpperCase()];m&&m.startsWith("customFunctions")&&l.hasIn(m.split("_"))&&(E=m,h=m.split("_"));let S=pg(E,r[f]);E==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{h.length>1&&typeof l.getIn(h.slice(0,-1))=="boolean"&&l.deleteIn(h.slice(0,-1)),l.setIn([...h],S)}catch(R){Mt.error(R)}}}_&&bP(l,_),Sg(l);let u=l.getIn(["rootPath"]),d=ss.join(u,rn.HDB_CONFIG_FILE);n===!0&&kX(c,u),Ir.writeFileSync(d,String(l)),s&&(Ut=Tc(l.toJSON())),Mt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(IP,"updateConfigValue");function kX(e,t){try{let r=ss.join(t,"backup",`${rn.HDB_CONFIG_FILE}.bak`);Ir.copySync(e,r),Mt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){Mt.error(vX),Mt.error(r)}}a(kX,"backupConfigFile");var $X=["databases"];function Tc(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)),lE=e,r(e);function r(n){let s={};for(let i in n)if(n.hasOwnProperty(i)){if(typeof n[i]=="object"&&n[i]!==null&&!Array.isArray(n[i])&&!$X.includes(i)){let o=r(n[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let l=i+"_"+c;!tn[l.toUpperCase()]&&is[l]&&(s[is[l].toLowerCase()]=o[c]),s[l]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(Tc,"flattenConfig");function pg(e,t){if(e===tn.CLUSTERING_NODENAME||e===tn.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(wX(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Ft.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 Ft.autoCast(t)}a(pg,"castConfigValue");function VX(){let e=Ft.getPropsFilePath(),t=sa(e);return Zi(t).toJSON()}a(VX,"getConfiguration");async function YX(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return IP(void 0,void 0,s,!0),HX}catch(i){throw typeof i=="string"||i instanceof String?LX(i,i,DX.BAD_REQUEST,void 0,void 0,!0):i}}a(YX,"setConfiguration");function Tg(){let e=Ft.getPropsFilePath();try{Ir.accessSync(e,Ir.constants.F_OK|Ir.constants.R_OK)}catch(n){if(!Ft.noBootFile())throw Mt.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=sa(e);return Zi(t).toJSON()}a(Tg,"readConfigFile");function Zi(e){return IX.parseDocument(Ir.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Zi,"parseYamlDoc");function KX(){let e=Tg(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Ft.isEmptyOrZeroLength(t)?[]:t;let r=RP(t);if(r)throw aE.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Ft.isEmptyOrZeroLength(n)?[]:n;let s=RP(n);if(s)throw aE.CONFIG_VALIDATION(s.message);if(!Ft.isEmptyOrZeroLength(n)&&!Ft.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!Ft.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw aE.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(KX,"getClusteringRoutes");function wP(e){let t=OP(e);Ut={};for(let r in is){let n=t.get(r.toUpperCase());if(Ft.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=is[r].toLowerCase();s===tn.LOGGING_ROOT?Ut[s]=ss.dirname(n):Ut[s]=n}return Ut}a(wP,"initOldConfig");function WX(e){let t=Tg();return CX.get(t,e.replaceAll("_","."))}a(WX,"getConfigFromFile");async function QX(e,t){let r=Zi(sa());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await Ir.writeFile(sa(),String(r))}a(QX,"addConfig");function jX(e){let t=sa(Ft.getPropsFilePath()),r=Zi(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=ss.join(n,rn.HDB_CONFIG_FILE);Ir.writeFileSync(s,String(r))}a(jX,"deleteConfigFromFile");function zX(){return lE||(mg(),lE)}a(zX,"getConfigObj")});var DP=T((jTe,LP)=>{"use strict";var uE=C(),_E=class{static{a(this,"BaseLicense")}constructor(t=0,r=uE.RAM_ALLOCATION_ENUM.DEFAULT,n=uE.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},gg=class extends _E{static{a(this,"ExtendedLicense")}constructor(t=0,r=uE.RAM_ALLOCATION_ENUM.DEFAULT,n=uE.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};LP.exports={BaseLicense:_E,ExtendedLicense:gg}});var ia=T((JTe,HP)=>{"use strict";var Rc=require("fs-extra"),MP=sE(),UP=require("crypto"),JX=require("moment"),XX=require("uuid").v4,ir=x(),Ag=require("path"),ZX=K(),eo=C(),{totalmem:PP}=require("os"),eZ=DP().ExtendedLicense,gc="invalid license key format",tZ="061183",rZ="mofi25",nZ="aes-256-cbc",sZ=16,iZ=32,vP=X();vP.initSync();var Rg;HP.exports={validateLicense:BP,generateFingerPrint:aZ,licenseSearch:bg,getLicense:uZ,checkMemoryLimit:_Z};function Og(){return Ag.join(vP.getHdbBasePath(),eo.LICENSE_KEY_DIR_NAME,eo.LICENSE_FILE_NAME)}a(Og,"getLicenseDirPath");function oZ(){let e=Og();return Ag.join(e,eo.LICENSE_FILE_NAME)}a(oZ,"getLicenseFilePath");function Ng(){let e=Og();return Ag.join(e,eo.REG_KEY_FILE_NAME)}a(Ng,"getFingerPrintFilePath");async function aZ(){let e=Ng();try{return await Rc.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await cZ();throw ir.error(`Error writing fingerprint file to ${e}`),ir.error(t),new Error("There was an error generating the fingerprint")}}a(aZ,"generateFingerPrint");async function cZ(){let e=XX(),t=MP.hash(e),r=Ng();try{await Rc.mkdirp(Og()),await Rc.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw ir.error(`Error writing fingerprint file to ${r}`),ir.error(n),new Error("There was an error generating the fingerprint")}return t}a(cZ,"writeFingerprint");function BP(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:eo.RAM_ALLOCATION_ENUM.DEFAULT,version:eo.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return ir.error("empty license key passed to validate."),r;let n=Ng(),s=!1;try{s=Rc.statSync(n)}catch(i){ir.error(i)}if(s){let i;try{i=Rc.readFileSync(n,"utf8")}catch{ir.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(rZ),c=o[1];c=Buffer.concat([Buffer.from(c)],sZ);let l=Buffer.concat([Buffer.from(i)],iZ),_=UP.createDecipheriv(nZ,l,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let u=null;try{u=_.update(o[0],"hex","utf8"),u.trim(),u+=_.final("utf8")}catch{let E=lZ(o[0],i);if(E)u=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(gc),ir.error(gc),new Error(gc)}let d;if(isNaN(u))try{d=JSON.parse(u),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(gc),ir.error(gc),new Error(gc)}else r.exp_date=u;r.exp_date<JX().valueOf()&&(r.valid_date=!1),MP.validate(o[1],`${tZ}${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||ir.error("Invalid licence"),r}a(BP,"validateLicense");function lZ(e,t){try{let r=UP.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{ir.warn("Check old license failed")}}a(lZ,"checkOldLicense");function bg(){let e=new eZ,t=[];try{t=Rc.readFileSync(oZ(),"utf-8").split(eo.NEW_LINE)}catch(r){r.code==="ENOENT"?ir.info("no license file found"):ir.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(ZX.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=BP(s.license_key,s.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(s){ir.error("There was an error parsing the license string."),ir.error(s),e.ram_allocation=eo.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return Rg=e,e}a(bg,"licenseSearch");async function uZ(){return Rg||await bg(),Rg}a(uZ,"getLicense");function _Z(){let e=bg().ram_allocation,t=process.constrainedMemory?.()||PP();if(t=Math.round(Math.min(t,PP())/2**20),t>e)return`This server has more memory (${t}MB) than HarperDB is licensed for (${e}MB), this should only be used for educational and development purposes.`}a(_Z,"checkMemoryLimit")});var wr=T((rge,ZP)=>{"use strict";var FP="username is required",kP="nothing to update, must supply active, role or password to update",$P="password cannot be an empty string",VP="If role is specified, it cannot be empty.",YP="active must be true or false";ZP.exports={addUser:gZ,alterUser:RZ,dropUser:OZ,getSuperUser:IZ,userInfo:NZ,listUsers:fE,listUsersExternal:bZ,setUsersToGlobal:Oc,findAndValidateUser:JP,getClusterUser:wZ,USERNAME_REQUIRED:FP,ALTERUSER_NOTHING_TO_UPDATE:kP,EMPTY_PASSWORD:$P,EMPTY_ROLE:VP,ACTIVE_BOOLEAN:YP};var KP=br(),dZ=ta(),wg=sE(),WP=dP(),QP=nr(),Cg=ii(),nn=K(),jP=require("validate.js"),Re=x(),{promisify:fZ}=require("util"),Lg=li(),qP=C(),GP=et(),EZ=Et(),ZTe=X(),ege=ia(),hZ=ri(),{table:tge}=(ge(),oe(Fe)),{handleHDBError:Ps,hdb_errors:pZ}=ie(),{HTTP_STATUS_CODES:Ms,AUTHENTICATION_ERROR_MSGS:yg,HDB_ERROR_MSGS:Ac}=pZ,{UserEventMsg:Dg}=Xn(),Ig=require("lodash"),{server:Pg}=(mr(),oe(Ho)),mZ=x();Pg.getUser=(e,t)=>JP(e,t,t!=null);var zP={username:!0,active:!0,role:!0,password:!0},xP=new Map,dE=QP.searchByValue,SZ=QP.searchByHash,TZ=fZ(dZ.delete);async function gZ(e){let t=jP.cleanAttributes(e,zP),r=WP.addUserValidation(t);if(r)throw Ps(new Error,r.message,Ms.BAD_REQUEST,void 0,void 0,!0);let n={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},s;try{s=await dE(n),s=s&&Array.from(s)}catch(l){throw Re.error("There was an error searching for a role in add user"),Re.error(l),l}if(!s||s.length<1)throw Ps(new Error,Ac.ROLE_NAME_NOT_FOUND(t.role),Ms.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw Ps(new Error,Ac.DUP_ROLES_FOUND(t.role),Ms.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=Lg.encrypt(t.password)),t.password=wg.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await KP.insert(i)}catch(l){throw Re.error("There was an error searching for a user."),Re.error(l),l}Re.debug(o);try{await Oc()}catch(l){throw Re.error("Got an error setting users to global"),Re.error(l),l}if(o.skipped_hashes.length===1)throw Ps(new Error,Ac.USER_ALREADY_EXISTS(t.username),Ms.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=s[0],Cg.signalUserChange(new Dg(process.pid)),`${c.username} successfully added`}a(gZ,"addUser");async function RZ(e){let t=jP.cleanAttributes(e,zP);if(nn.isEmptyOrZeroLength(t.username))throw new Error(FP);if(nn.isEmptyOrZeroLength(t.password)&&nn.isEmptyOrZeroLength(t.role)&&nn.isEmptyOrZeroLength(t.active))throw new Error(kP);if(!nn.isEmpty(t.password)&&nn.isEmptyOrZeroLength(t.password.trim()))throw new Error($P);if(!nn.isEmpty(t.active)&&!nn.isBoolean(t.active))throw new Error(YP);let r=AZ(t.username);if(!nn.isEmpty(t.password)&&!nn.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Lg.encrypt(t.password)),t.password=wg.hash(t.password)),t.role==="")throw new Error(VP);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 dE(i)||[])}catch(c){throw Re.error("Got an error searching for a role."),Re.error(c),c}if(!o||o.length===0){let c=Ac.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Re.error(c),Ps(new Error,c,Ms.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=Ac.ALTER_USER_DUP_ROLES(t.role);throw Re.error(c),Ps(new Error,c,Ms.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let n={operation:"update",schema:"system",table:"hdb_user",records:[t]},s;try{s=await KP.update(n)}catch(i){throw Re.error("Error during update."),Re.error(i),i}try{await Oc()}catch(i){throw Re.error("Got an error setting users to global"),Re.error(i),i}return Cg.signalUserChange(new Dg(process.pid)),s}a(RZ,"alterUser");function AZ(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(AZ,"isClusterUser");async function OZ(e){try{let t=WP.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(nn.isEmpty(global.hdb_users.get(e.username)))throw Ps(new Error,Ac.USER_NOT_EXIST(e.username),Ms.NOT_FOUND,void 0,void 0,!0);let n;try{n=await TZ(r)}catch(s){throw Re.error("Got an error deleting a user."),Re.error(s),s}Re.debug(n);try{await Oc()}catch(s){throw Re.error("Got an error setting users to global."),Re.error(s),s}return Cg.signalUserChange(new Dg(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(OZ,"dropUser");async function NZ(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=Ig.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await SZ(r)}catch(s){throw Re.error("Got an error searching for a role."),Re.error(s),s}t.role=n[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Re.error(r),r}return t}a(NZ,"userInfo");async function bZ(){let e;try{e=await fE()}catch(t){throw Re.error("Got an error listing users."),Re.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(bZ,"listUsersExternal");async function fE(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await dE(e)}catch(o){throw Re.error("Got an error searching for roles."),Re.error(o),o}let r={};for(let o of t)r[o.id]=Ig.cloneDeep(o);if(Object.keys(r).length===0)return null;let n={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},s;try{s=await dE(n)}catch(o){throw Re.error("Got an error searching for users."),Re.error(o),o}let i=new Map;for(let o of s)o=Ig.cloneDeep(o),o.role=r[o.role],yZ(o.role),i.set(o.username,o);return i}catch(e){throw Re.error("got an error listing users"),Re.error(e),nn.errorizeMessage(e)}return null}a(fE,"listUsers");function yZ(e){try{if(!e){Re.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(hZ)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Re.error("Got an error trying to set system permissions."),Re.error(t)}}a(yZ,"appendSystemTablesToRole");async function Oc(){try{let e=await fE();global.hdb_users=e}catch(e){throw Re.error(e),e}}a(Oc,"setUsersToGlobal");async function JP(e,t,r=!0){global.hdb_users||await Oc();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw Ps(new Error,yg.GENERIC_AUTH_FAIL,Ms.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw Ps(new Error,yg.USER_INACTIVE,Ms.UNAUTHORIZED,void 0,void 0,!0);let s={active:n.active,username:n.username};if(n.refresh_token&&(s.refresh_token=n.refresh_token),n.role&&(s.role=n.role),r===!0){if(xP.get(t)===n.password)return s;if(wg.validate(n.password,t))xP.set(t,n.password);else throw Ps(new Error,yg.GENERIC_AUTH_FAIL,Ms.UNAUTHORIZED,void 0,void 0,!0)}return s}a(JP,"findAndValidateUser");async function IZ(){global.hdb_users||await Oc();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(IZ,"getSuperUser");async function wZ(){let e=await fE(),t=EZ.getConfigFromFile(qP.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!nn.isEmpty(r)&&r?.role?.role===qP.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=Lg.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+GP.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+GP.SERVER_SUFFIX.ADMIN,r}a(wZ,"getClusterUser");var XP=[];Pg.invalidateUser=function(e){for(let t of XP)try{t(e)}catch(r){mZ.error("Error invalidating user",r)}};Pg.onInvalidatedUser=function(e){XP.push(e)}});var Iu=T((oge,nM)=>{"use strict";var oa=x(),sn=C(),CZ=cw(),sge=Ln(),ige=zi(),LZ=wr(),{validateEvent:eM}=Xn(),yu=Cn(),DZ=require("process"),{resetDatabases:PZ}=(ge(),oe(Fe)),MZ={[sn.ITC_EVENT_TYPES.SCHEMA]:UZ,[sn.ITC_EVENT_TYPES.USER]:rM};async function UZ(e){let t=eM(e);if(t){oa.error(t);return}oa.trace("ITC schemaHandler received schema event:",e),await CZ(e.message),await vZ(e.message)}a(UZ,"schemaHandler");async function vZ(e){try{yu.resetReadTxn(sn.SYSTEM_SCHEMA_NAME,sn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),yu.resetReadTxn(sn.SYSTEM_SCHEMA_NAME,sn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),yu.resetReadTxn(sn.SYSTEM_SCHEMA_NAME,sn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=PZ();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){oa.error(t)}}a(vZ,"syncSchemaMetadata");var tM=[];async function rM(e){try{try{yu.resetReadTxn(sn.SYSTEM_SCHEMA_NAME,sn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),yu.resetReadTxn(sn.SYSTEM_SCHEMA_NAME,sn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){oa.warn(r)}let t=eM(e);if(t){oa.error(t);return}oa.trace(`ITC userHandler ${sn.HDB_ITC_CLIENT_PREFIX}${DZ.pid} received user event:`,e),await LZ.setUsersToGlobal();for(let r of tM)r()}catch(t){oa.error(t)}}a(rM,"userHandler");rM.addListener=function(e){tM.push(e)};nM.exports=MZ});var Xn=T((dge,iM)=>{"use strict";var cge=x(),Mg=K(),BZ=C(),{ITC_ERRORS:wu}=Wr(),{parentPort:lge,threadId:HZ,isMainThread:qZ,workerData:uge}=require("worker_threads"),{onMessageFromWorkers:GZ,broadcast:_ge,broadcastWithAcknowledgement:xZ}=tt();iM.exports={sendItcEvent:FZ,validateEvent:sM,SchemaEventMsg:kZ,UserEventMsg:$Z};var EE;GZ(async(e,t)=>{EE=EE||Iu(),sM(e),EE[e.type]&&await EE[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function FZ(e){return!qZ&&e.message&&(e.message.originator=HZ),xZ(e)}a(FZ,"sendItcEvent");function sM(e){if(typeof e!="object")return wu.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||Mg.isEmpty(e.type))return wu.MISSING_TYPE;if(!e.hasOwnProperty("message")||Mg.isEmpty(e.message))return wu.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||Mg.isEmpty(e.message.originator))return wu.MISSING_ORIGIN;if(BZ.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return wu.INVALID_EVENT(e.type)}a(sM,"validateEvent");function kZ(e,t,r,n=void 0,s=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=n,this.attribute=s}a(kZ,"SchemaEventMsg");function $Z(e){this.originator=e}a($Z,"UserEventMsg")});var ii=T((hge,lM)=>{"use strict";var oM=C(),Ege=K(),hE=x(),aM=VI(),Nc,{sendItcEvent:cM}=Xn();function VZ(e){try{hE.trace("signalSchemaChange called with message:",e),Nc=Nc||Iu();let t=new aM(oM.ITC_EVENT_TYPES.SCHEMA,e);return Nc.schema(t),cM(t)}catch(t){hE.error(t)}}a(VZ,"signalSchemaChange");function YZ(e){try{hE.trace("signalUserChange called with message:",e),Nc=Nc||Iu();let t=new aM(oM.ITC_EVENT_TYPES.USER,e);return Nc.user(t),cM(t)}catch(t){hE.error(t)}}a(YZ,"signalUserChange");lM.exports={signalSchemaChange:VZ,signalUserChange:YZ}});var Mu={};$e(Mu,{addAnalyticsListener:()=>Pu,recordAction:()=>on,recordActionBinary:()=>Dn,setAnalyticsEnabled:()=>KZ});function KZ(e){SM=e}function on(e,t,r,n,s){if(!SM)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=SE.get(i);if(o)if(typeof e=="number"){let c=o.values,l=c.index++;if(l>=c.length){let _=c;o.values=c=new Float32Array(l*2),c.set(_),c.index=l+1}c[l]=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:n,type:s},SE.set(i,o)}pE||WZ()}function Dn(e,t,r,n,s){on(!!e,t,r,n,s)}function Pu(e){RM.push(e)}function WZ(){pE=performance.now(),setTimeout(async()=>{let e=performance.now()-pE;pE=0;let t=[],r={time:Date.now(),period:e,threadId:aa.threadId,metrics:t};for(let[s,i]of SE){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,l=0,_=[],u;for(let d of AM){let f=Math.floor(c*d),E=o[f-1];if(f>l){let h=f-l;if(E===u){let m=_[_.length-1];typeof m=="number"?_[_.length-1]={value:m,count:1+h}:m.count+=h}else _.push(h>1?{value:E,count:h}:E),u=E;l=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 OM()}let n=process.memoryUsage();t.push({metric:"memory",threadId:aa.threadId,byThread:!0,...n});for(let s of RM)s(t);SE=new Map,aa.parentPort?aa.parentPort.postMessage({type:gM,report:r}):yM({report:r})},TM).unref()}async function QZ(e,t=6e4){let r=Bg(),n=NM(),s=new Promise(m=>{let S=performance.now();setImmediate(()=>{let R=performance.now();R-S>5e3&&(0,Cu.warn)("Unusually high event queue latency on the main thread of "+Math.round(R-S)+"ms"),S=performance.now()}),n.primaryStore.prefetch([1],()=>{let R=performance.now();R-S>5e3&&(0,Cu.warn)("Unusually high task queue latency on the main thread of "+Math.round(R-S)+"ms"),m(R-S)})}),i;for(let m of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(m.value?.time){i=m.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,l=new Map,_=[],u;for(let{key:m,value:S}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!S)continue;if(o){if(m>o+t)break}else o=m;u=m;let{metrics:R,threadId:g}=S;for(let A of R||[]){let{path:P,method:v,type:U,metric:F,count:H,total:j,distribution:z,threads:J,...Ae}=A;H||(H=1);let ue=F+(P?"-"+P:"");v!==void 0&&(ue+="-"+v),U!==void 0&&(ue+="-"+U);let Ee=c.get(ue);if(Ee){if(Ee.threads){let qe=Ee.threads[g];if(qe)Ee=qe;else{Ee.threads[g]=Object.assign({},Ae);continue}}Ee.count||(Ee.count=1);let Me=Ee.count;for(let qe in Ae){let Gt=Ae[qe];typeof Gt=="number"&&(Ee[qe]=(Ee[qe]*Me+Gt*H)/(Me+H))}Ee.count+=H,j>=0&&(Ee.total+=j,Ee.ratio=Ee.total/Ee.count)}else Ee=Object.assign({period:t},A),delete Ee.distribution,c.set(ue,Ee),Ee.byThread&&(Ee.threads=[],Ee.threads[g]=Object.assign({},Ae),_.push(Ee));if(z){z=z.map(qe=>typeof qe=="number"?{value:qe,count:1}:qe);let Me=l.get(ue);Me?Me.push(...z):l.set(ue,z)}}await OM()}for(let m of _){let{path:S,method:R,type:g,metric:A,count:P,total:v,distribution:U,threads:F,...H}=m;F=F.filter(j=>j);for(let j in H){if(typeof m[j]!="number")continue;let z=0;for(let J of F){let Ae=J[j];typeof Ae=="number"&&(z+=Ae)}m[j]=z}m.count=F.length,delete m.threads,delete m.byThread}for(let[m,S]of l){let R=c.get(m);S.sort((qe,Gt)=>qe.value>Gt.value?1:-1);let g=R.count-1,A=[],P=0,v=0,U;for(let qe of AM){let Gt=g*qe;for(;P<Gt;)U=S[v++],P+=U.count,v===1&&P--;let yd=S[v>1?v-2:0];U||(U=S[0]),A.push(U.value-(U.value-yd.value)*(P-Gt)/U.count)}let[F,H,j,z,J,Ae,ue,Ee,Me]=A;Object.assign(R,{p1:F,p10:H,p25:j,median:z,p75:J,p90:Ae,p95:ue,p99:Ee,p999:Me})}let d;for(let[m,S]of c)S.id=(0,mE.getNextMonotonicTime)(),S.time=u,n.primaryStore.put(S.id,S,{append:!0}).then(R=>{R||n.primaryStore.put(S.id,S)}),d=!0;let f=Date.now(),{idle:E,active:h}=performance.eventLoopUtilization();if(d||h*10>E){let m=(0,mE.getNextMonotonicTime)(),S={id:m,metric:"main-thread-utilization",idle:E-uM,active:h-_M,taskQueueLatency:await s,time:f,...process.memoryUsage()};n.primaryStore.put(m,S,{append:!0}).then(R=>{R||n.primaryStore.put(m,S)})}uM=E,_M=h}async function dM(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function Bg(){return fM||(fM=ft({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function NM(){return EM||(EM=ft({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function JZ(){bM=!0;let e=(0,Du.get)(vg.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await QZ(TM,e),await dM(Bg(),jZ),await dM(NM(),zZ)},Math.min(e/2,2147483647)).unref()}function yM(e,t){let r=e.report;r.threadId=t?.threadId||aa.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(hM+=n.mean*n.count);r.totalBytesProcessed=hM,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(pM.get(t))}),pM.set(t,t.performance.eventLoopUtilization())),r.id=(0,mE.getNextMonotonicTime)(),Bg().primaryStore.put(r.id,r),bM||JZ(),XZ&&(IM=e5(r))}async function e5(e){if(await IM,!to){let r=(0,Lu.dirname)((0,Cu.getLogFilePath)());try{to=await(0,Ug.open)((0,Lu.join)(r,"analytics.log"),"r+")}catch{to=await(0,Ug.open)((0,Lu.join)(r,"analytics.log"),"w+")}}let t=(await to.stat()).size;if(t>ZZ){let r=Buffer.alloc(t);await to.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await to.write(r,{position:0}),await to.truncate(r.length),t=r.length}await to.write(JSON.stringify(e)+`
|
|
9
|
+
`,t)}var aa,mM,Cu,Lu,Ug,mE,Du,vg,SE,SM,pE,TM,gM,RM,AM,uM,_M,OM,jZ,zZ,fM,EM,bM,hM,pM,XZ,IM,to,ZZ,ui=Ne(()=>{aa=require("worker_threads"),mM=q(tt());ge();Cu=q(x()),Lu=require("path"),Ug=require("fs/promises"),mE=q(Tr()),Du=q(X()),vg=q(C());mr();(0,Du.initSync)();SE=new Map,SM=(0,Du.get)(vg.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(KZ,"setAnalyticsEnabled");a(on,"recordAction");it.recordAnalytics=on;a(Dn,"recordActionBinary");pE=0,TM=1e3,gM="analytics-report",RM=[];a(Pu,"addAnalyticsListener");AM=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(WZ,"sendAnalytics");a(QZ,"aggregation");uM=0,_M=0,OM=a(()=>new Promise(setImmediate),"rest");a(dM,"cleanup");jZ=36e5,zZ=31536e6;a(Bg,"getRawAnalyticsTable");a(NM,"getAnalyticsTable");(0,mM.setChildListenerByType)(gM,yM);a(JZ,"startScheduledTasks");hM=0,pM=new Map,XZ=!1;a(yM,"recordAnalytics");ZZ=1e6;a(e5,"logAnalytics")});var wM={};$e(wM,{Headers:()=>ro,appendHeader:()=>Hg});function Hg(e,t,r,n){if(e.append)e.append(t,r,n);else if(e.set){let s=e.get(t);if(s)if(n)r=(typeof s=="string"?s:s.join(", "))+", "+r;else if(typeof s=="string")r=[s,r];else{s.push(r);return}return e.set(t,r)}else e[t]=(e[t]?e[t]+", ":"")+r}var ro,Uu=Ne(()=>{ro=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 n=t.toLowerCase();if(!super.has(n))return super.set(n,[t,r])}append(t,r,n){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase(),i=super.get(s);if(i){let o=i[1];if(n)r=(typeof o=="string"?o:o.join(", "))+", "+r;else if(typeof o=="string")r=[o,r];else{o.push(r);return}}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}};a(Hg,"appendHeader")});var Fg={};$e(Fg,{coerceType:()=>TE,makeTable:()=>AE,setServerUtilities:()=>l5,updateResource:()=>gE});function AE(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:o,databaseName:c,auditStore:l,schemaDefined:_,dbisDB:u,sealed:d}=e,{expirationMS:f,evictionMS:E,audit:h,trackDeletes:m}=e,{attributes:S}=e;S||(S=[]),FI(i,l);let R=iS(i,n,l),g=0,A,P,v={},U=Promise.resolve(),F,H,j;for(let W of S)(W.assignCreatedTime||W.name==="__createdtime__")&&(F=W),(W.assignUpdatedTime||W.name==="__updatedtime__")&&(H=W),W.expiresAt&&(j=W),W.isPrimaryKey&&(v=W);let z,J=[],Ae=[],ue=1,Ee=2,Me={},qe={},Gt=864e5,yd,Id,Bi,Yb=!1,Cm,cV=i.getRange({start:!1,end:!1}).constructor,lV=10,uV=6;h&&Qb();class Xe extends jt{static name=s;static primaryStore=i;static auditStore=l;static primaryKey=t;static tableName=s;static indices=r;static audit=h;static databasePath=o;static databaseName=c;static attributes=S;static expirationTimer;static createdTimeProperty=F;static updatedTimeProperty=H;static propertyResolvers;static sources=[];static get expirationMS(){return f}static dbisDB=u;static schemaDefined=_;static sourcedFrom(p,N){N&&(this.sourceOptions=N,(N.expiration||N.eviction||N.scanInterval)&&this.setTTLExpiration(N)),N?.intermediateSource?(p.intermediateSource=!0,this.sources.unshift(p)):this.sources.push(p),P=p.get&&(!p.get.reliesOnPrototype||p.prototype.get);let I=a(D=>{let y=this.sources.slice(0,-1);if(y=y.filter(M=>M[D]&&(!M[D].reliesOnPrototype||M.prototype[D])),y.length>0)if(y.length===1){let M=y[0];return(k,L,B)=>{if(k?.source!==M)return M[D](L,B,k)}}else return(M,k,L)=>{let B=[];for(let $ of y){if(M?.source===$)break;B.push($[D](k,L,M))}return Promise.all(B)}},"getApplyToIntermediateSource"),b=this.sources[this.sources.length-1],O=a(D=>{if(b[D]&&(!b[D].reliesOnPrototype||b.prototype[D]))return(y,M,k)=>{if(!y?.source)return b[D](M,k,y)}},"getApplyToCanonicalSource");return Me={put:O("put"),patch:O("patch"),delete:O("delete"),publish:O("publish")},qe={put:I("put"),patch:I("patch"),delete:I("delete"),publish:I("publish"),invalidate:I("invalidate")},(async()=>{let D=!1,y=a(async(M,k)=>{let L=M.value,B=M.table?ot[c][M.table]:Xe;if(c===as.SYSTEM_SCHEMA_NAME&&(M.table===as.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||M.table===as.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(D=!0),M.id===void 0&&(M.id=L[B.primaryKey],M.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(M));M.source=p;let $=await B.getResource(M.id,k,bc);switch(M.type){case"put":return $._writeUpdate(L,!0,bc);case"patch":return $._writeUpdate(L,!1,bc);case"delete":return $._writeDelete(bc);case"publish":return $._writePublish(L,bc);case"invalidate":return $.invalidate(bc);default:nt.error("Unknown operation",M.type,M.id)}},"writeUpdate");try{let M=p.subscribe;M&&m==null&&(m=!0);let k=p.subscribeOnThisThread?p.subscribeOnThisThread((0,la.getWorkerIndex)()):(0,la.getWorkerIndex)()===0,L=M&&k&&await p.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(L){let B;for await(let $ of L)try{if(!($.type==="transaction"?$.writes[0]:$)){nt.error("Bad subscription event",$);continue}if($.source=p,B)if($.beginTxn)B.resolve();else{y($,B);continue}if($.type==="end_txn")continue;let ye=Ze($,()=>{if($.type==="transaction"){let te=[];for(let Be of $.writes)try{te.push(y(Be,$))}catch(le){throw le.message+=" writing "+JSON.stringify(Be)+" of event "+JSON.stringify($),le}return Promise.all(te)}else if($.type==="define_schema"){let te=this.attributes.slice(0),Be;for(let le of $.attributes)te.find(ke=>ke.name===le.name)||(te.push(le),Be=!0);Be&&(ft({table:s,database:c,attributes:te,origin:"cluster"}),Fu.signalSchemaChange(new ku.SchemaEventMsg(process.pid,as.OPERATIONS_ENUM.CREATE_TABLE,c,s)))}else return $.beginTxn?(B=$,y($,$),new Promise(te=>{B.resolve=te})):y($,$)});D&&(await ye,Fu.signalUserChange(new ku.UserEventMsg(process.pid))),$.onCommit&&(ye?.then?ye.then($.onCommit):$.onCommit())}catch(ce){nt.error("error in subscription handler",ce)}}}catch(M){nt.error(M)}})(),this}static getResource(p,N,I){let b=super.getResource(p,N,I);if(p!=null){yl(p);try{if(b.hasOwnProperty(fe))return b;if(typeof p=="object"&&p&&!Array.isArray(p))throw new Error(`Invalid id ${JSON.stringify(p)}`);let O=!I?.async||i.cache?.get(p),D=Yn(N),y=D.getReadTxn();if(y?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return Lm(p,N,{transaction:y},O,M=>{if(M?gE(b,M):b[fe]=null,N.onlyIfCached&&N.noCacheStore){if(!b.doesExist())throw new Pn.ServerError("Entry is not cached",504)}else if(I?.ensureLoaded){let k=Dm(p,M,N,b);if(k)return D?.disregardReadTxn(),b[qg]=!0,xg(k,L=>(gE(b,L),b))}return b})}catch(O){throw O.message.includes("Unable to serialize object")&&(O.message+=": "+JSON.stringify(p)),O}}return b}ensureLoaded(){let p=Dm(this[Ue],this[an],this[be]);if(p)return this[qg]=!0,xg(p,N=>{this[an]=N,this[fe]=N.value,this[Gu]=N.version})}static setTTLExpiration(p){if(typeof p=="number")f=p*1e3,E||(E=0);else if(p&&typeof p=="object")f=p.expiration*1e3,E=(p.eviction||0)*1e3,Gt=p.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(f<0)throw new Error("Expiration can not be negative");Gt=Gt||(f+E)/4,Mm()}static enableAuditing(p=!0){h=p,p&&Qb(),Xe.audit=p}static coerceId(p){return p===""?null:TE(p,v)}static async dropTable(){if(delete ot[c][s],c===o){for(let p of S)u.remove(Xe.tableName+"/"+p.name),r[p.name]?.drop();u.remove(Xe.tableName+"/"),i.drop(),await u.committed}else console.log("legacy dropTable"),await i.close(),await fs.remove(data_path),await fs.remove(data_path===standard_path?data_path+MDB_LOCK_FILE_SUFFIX:path.join(path.dirname(data_path),MDB_LEGACY_LOCK_FILE_NAME));Fu.signalSchemaChange(new ku.SchemaEventMsg(process.pid,as.OPERATIONS_ENUM.DROP_TABLE,c,s))}get(p){if(typeof p=="string")return this.getProperty(p);if(this[In])return this.search(p);if(this[Ue]===null){if(p?.conditions)return this.search(p);let N=Xe.getRecordCount();return{recordCount:N.recordCount,estimatedRecordRange:N.estimatedRange,records:"./",name:s,database:c,attributes:S}}if(p?.property)return this.getProperty(p.property);if(this.doesExist()||p?.ensureLoaded===!1||this[be]?.returnNonexistent)return this}allowRead(p,N){let I=Cd(p);if(I?.read){if(I.isSuperUser)return!0;let b=I.attribute_permissions,O=N?.select;if(b?.length>0||Yb&&O){if(N||(N={}),O){let D=b?.length>0&&Gg(b,"read");N.select=O.map(y=>{let M=y.name||y;if(!D||D[M]){let k=Bi[M]?.definition?.tableClass;if(k){if(y.name||(y={name:y}),!k.prototype.allowRead.call(null,p,y))return!1;if(!y.select)return y.name}return y}}).filter(Boolean)}else N.select=b.filter(D=>D.read&&!Bi[D.attribute_name]).map(D=>D.attribute_name);return N}else return!0}}allowUpdate(p,N){let I=Cd(p);if(I?.update){let b=I.attribute_permissions;if(b?.length>0){let O=Gg(b,"update");for(let D in N)if(!O[D])return!1;for(let D of b){let y=D.attribute_name;!D.update&&!(y in N)&&(N[y]=this.getProperty(y))}}return!0}}allowCreate(p,N){if(this[In]){let I=Cd(p);if(I?.insert){let b=I.attribute_permissions;if(b?.length>0){let O=Gg(b,"insert");for(let D in N)if(!O[D])return!1}else return!0}}else return this.allowUpdate(p,{})}allowDelete(p){return Cd(p)?.delete}update(p,N){if(!Yn(this[be]))throw new Error("Can not update a table resource outside of a transaction");if(p===!1)return this;let b;return typeof p=="object"&&p&&(N?(Object.isFrozen(p)&&(p=Object.assign({},p)),this[fe]={},this[Dt]=p):(b=this[Dt],b&&(p=Object.assign(b,p)),this[Dt]=b=p)),this._writeUpdate(this[Dt],N),this}addTo(p,N){if(typeof N=="number")this[vu]===LM?this.set(p,(+this.getProperty(p)||0)+N):(this[vu]||this.update(),this.set(p,new sf(N)));else throw new Error("Can not add a non-numeric value")}subtractFrom(p,N){if(typeof N=="number")return this.addTo(p,-N);throw new Error("Can not subtract a non-numeric value")}invalidate(p){let N=this[be],I=this[Ue];yl(I),Yn(this[be]).addWrite({key:I,store:i,invalidated:!0,entry:this[an],nodeName:this[be]?.nodeName,before:Me.invalidate?.bind(this,N,I),beforeIntermediate:qe.invalidate?.bind(this,N,I),commit:(O,D)=>{if(D?.version>O)return;let y=null;for(let M in r)y||(y={}),y[M]=this.getProperty(M);R(I,y,this[an],O,Bu,h,this[be],0,"invalidate")}})}static evict(p,N,I){let b=this.Source,O;if(!((P||h)&&(!N||(O=i.getEntry(p),!O||!N)||O.version!==I))){if(P){if(i.hasLock(p,O.version))return;let D;for(let y in r)D||(D={}),D[y]=N[y];if(D)return R(p,D,O,I,Hu,null,null,0,null,!0)}return i.ifVersion(p,I,()=>{wd(p,N,null)}),h?R(p,null,O,I,Hu,null,null,0,null,!0):i.remove(p,I)}}lock(){throw new Error("Not yet implemented")}static operation(p,N){return p.table||=s,p.schema||=c,BM.operation(p,N)}put(p){this.update(p,!0)}patch(p){this.update(p,!1)}_writeUpdate(p,N,I){let b=this[be],O=Yn(b),D=this[Ue];yl(D);let y=this[an];this[vu]=N?LM:o5;let M={key:D,store:i,entry:y,nodeName:b?.nodeName,validate:k=>{p||(p=this[Dt]),N||p&&rf(p)?b?.source||(O.checkOverloaded(),this.validate(p,!N),H&&(p[H.name]=H.type==="Date"?new Date(k):H.type==="String"?new Date(k).toISOString():k),N&&(t&&p[t]!==D&&(p[t]=D),F&&(y?.value?p[F.name]=y?.value[F.name]:p[F.name]=F.type==="Date"?new Date(k):F.type==="String"?new Date(k).toISOString():k),p=Fo(p))):O.removeWrite(M)},before:N?Me.put?()=>Me.put(b,D,p):null:Me.patch?()=>Me.patch(b,D,p):Me.put?()=>Me.put(b,D,Fo(this)):null,beforeIntermediate:N?qe.put?()=>qe.put(b,D,p):null:qe.patch?()=>qe.patch(b,D,p):qe.put?()=>qe.put(b,D,Fo(this)):null,commit:(k,L,B)=>{if(B){if(b&&L?.version>(b.lastModified||0)&&(b.lastModified=L.version),this[an]=L,L?.value?.[fe])throw new Error("Can not assign a record to a record, check for circular references");N||(this[fe]=L?.value??null)}this[Dt]=p,this[Gu]=k;let $=L?.value,ce=p;if(this[vu]=0,L?.version>=k)if(h){let le=L.localTime,ke=L.version;for(;ce&&(le>k||ke>=k&&le>0);){let ne=l.get(le),Z=xt(ne);if(ke=Z.version,ke>k){if(Z.type==="patch"){let Oe=Z.getValue(i);ce=ef(ce,Oe)}else if(Z.type==="put"||Z.type==="delete")return}else if(ke===k)return;le=Z.previousLocalTime}}else{if(N)return;ce=ef(ce,$)}let ye;if(N?ye=ce:(this[fe]=$,ye=N?ce:Fo(this,ce)),this[fe]=ye,ye?.[fe])throw new Error("Can not assign a record to a record, check for circular references");let te;N||(te=p),wd(D,$,ye);let Be=N?"put":"patch";R(D,ye,L,k,0,h,b,b.expiresAt||(f?f+Date.now():0),Be,!1,te)}};O.addWrite(M)}async delete(p){if(typeof p=="string")return this.deleteProperty(p);if(this[In]){for await(let N of this.search(p))(await Xe.getResource(N[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(p);return}return this[fe]?this._writeDelete(p):!1}_writeDelete(p){let N=Yn(this[be]),I=this[Ue];yl(I);let b=this[be];return N.addWrite({key:I,store:i,resource:this,nodeName:b?.nodeName,before:Me.delete?.bind(this,b,I),beforeIntermediate:qe.delete?.bind(this,b,I),commit:(O,D,y)=>{let M=D?.value;y&&(b&&D?.version>(b.lastModified||0)&&(b.lastModified=D.version),gE(this,D)),!(D?.version>O)&&(wd(this[Ue],M),nt.trace("Write delete entry",I,O),h||m?(R(I,null,this[an],O,0,h,this[be],0,"delete"),h||Mm()):i.remove(this[Ue]))}}),!0}search(p){let N=this[be],I=Yn(N);if(!p)throw new Error("No query provided");let b=p.conditions;b?b.length===void 0&&(b=b[Symbol.iterator]?Array.from(b):[b]):b=Array.isArray(p)?p:p[Symbol.iterator]?Array.from(p):[],this[Ue]&&(b=[{attribute:null,comparator:"prefix",value:this[Ue]}].concat(b));let O,D={};function y(Z,Oe){let Ge;switch(Oe){case"and":case void 0:if(Z.length<1)throw new Error('An "and" operator requires at least one condition');Ge=!0;break;case"or":if(Z.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+Oe)}let gs=Ge&&{},Hi;for(let je of Z){if(je.conditions){je.conditions=y(je.conditions,je.operator);continue}let Wt=je[0]??je.attribute,On=Wt==null?v:ti(S,Wt);if(On){if(Ge){let Rs=jn(Wt),Qt=gs[Rs];Qt?(Qt.push(je),Hi=!0):gs[Rs]=[je]}(On.type||SS[je.comparator])&&(je[1]===void 0?je.value=k(je.value,On):je[1]=k(je[1],On))}else if(Wt!=null)throw(0,Pn.handleHDBError)(new Error,`${Wt} is not a defined attribute`,404)}if(p.enforceExecutionOrder)return Z;if(Hi)for(let je in gs){let Wt=gs[je],On=Wt.length;if(On>1)for(let Rs=0;Rs<On;Rs++){let Qt=Wt[Rs];if(Qt.comparator==="ge"||Qt.comparator==="greater_than_equal")for(let qi=0;qi<On;qi++){let za=Wt[qi];(za.comparator==="le"||za.comparator==="less_than_equal")&&(Qt.comparator="between",Qt.value=[Qt.value,za.value],Z.splice(Z.indexOf(za),1))}if(Qt.comparator==="equals"||!Qt.comparator){for(let qi=0;qi<On;qi++)if(qi!==Rs){let za=Wt[qi];Z.splice(Z.indexOf(za),1)}break}}}return Z}a(y,"prepareConditions");function M(Z,Oe){if(p.enforceExecutionOrder)return Z;for(let Ge of Z)Ge.conditions&&(Ge.conditions=M(Ge.conditions,Ge.operator));return Z.length>1&&Oe!=="or"?(0,vM.sortBy)(Z,_f(Xe)):Z}a(M,"orderConditions");function k(Z,Oe){return Array.isArray(Z)?Z.map(Ge=>TE(Ge,Oe)):TE(Z,Oe)}a(k,"coerceTypedValues");let L=p.operator;(b.length>0||L)&&(b=y(b,L));let B=typeof p.sort=="object"&&p.sort,$;if(B&&L!=="or"){let Z=B.attribute;if(O=b.find(Oe=>jn(Oe.attribute)===jn(Z)),!O){if(!ti(S,Z))throw(0,Pn.handleHDBError)(new Error,`${Array.isArray(Z)?Z.join("."):Z} is not a defined attribute`,404);O={attribute:Z,comparator:"sort"},b.push(O)}O.descending=!!B.descending}b=M(b,L),B&&(b[0]===O?B.next&&($={dbOrderedAttribute:B.attribute,attribute:B.next.attribute,descending:B.next.descending,next:B.next.next}):(O&&b.splice(b.indexOf(O),1),$=B));let ce=p.select;if(b.length===0&&(b=[{attribute:t,comparator:"greater_than",value:!0}]),p.explain)return{conditions:b,operator:L,postOrdering:$,selectApplied:!!ce};let ye=I.useReadTxn(),te=TS(b,L,Xe,ye,p,N,(Z,Oe)=>Kb(Z,ce,N,ye,Oe),D),Be=p.ensureLoaded!==!1;$||(te=ne(te));let le=Xe.transformEntryForSelect(ce,N,ye,D,Be,!0),ke=Xe.transformToOrderedSelect(te,ce,$,ye,N,le);function ne(Z){return p.offset||p.limit!==void 0?Z.slice(p.offset,p.limit!==void 0?(p.offset||0)+p.limit:void 0):Z}return a(ne,"applyOffset"),$&&(ke=ne(ke)),ke.onDone=()=>{ke.onDone=null,I.doneReadTxn()},ke.selectApplied=!0,ke.getColumns=()=>{if(ce){let Z=[];for(let Oe of ce)Oe==="*"?Z.push(...S.map(Ge=>Ge.name)):Z.push(Oe.name||Oe);return Z}return S.map(Z=>Z.name)},ke}static transformToOrderedSelect(p,N,I,b,O,D){let y=new cV;if(I){p=Kb(p,N,b,O,null);let M;y.iterate=function(){let L,B=p[Symbol.asyncIterator]?p[Symbol.asyncIterator]():p[Symbol.iterator](),$,ce=I.dbOrderedAttribute,ye,te,Be=!0;function le(ne){let Z=ne.next&&le(ne.next),Oe=ne.descending;return(Ge,gs)=>{let Hi=Pm(Ge,ne.attribute,b),je=Pm(gs,ne.attribute,b),Wt=Oe?(0,ua.compareKeys)(je,Hi):(0,ua.compareKeys)(Hi,je);return Wt===0?Z?.(Ge,gs)||0:Wt}}a(le,"createComparator");let ke=le(I);return{async next(){let ne;if(L)if(ne=L.next(),ne.done){if($)return y.onDone&&y.onDone(),ne}else return{value:await D.call(this,ne.value)};M=[],ye&&M.push(ye);do if(ne=await B.next(),ne.done){if($=!0,M.length)break;return y.onDone&&y.onDone(),ne}else{let Z=ne.value;if(Z?.then&&(Z=await Z),ce){let Oe=Pm(Z,ce,b);if(Be)Be=!1,te=Oe;else if(Oe!==te){te=Oe,ye=Z;break}}M.push(Z)}while(!0);return I.isGrouped,M.sort(ke),L=M[Symbol.iterator](),ne=L.next(),ne.done?(y.onDone&&y.onDone(),ne):{value:await D.call(this,ne.value)}},return(){y.onDone&&y.onDone(),B.return()},throw(){y.onDone&&y.onDone(),B.throw()}}};let k=a(L=>{if(typeof N=="object"&&Array.isArray(L.attribute))for(let B=0;B<N.length;B++){let $=N[B],ce;if($.name===L.attribute[0]){for(ce=$.sort||($.sort={});ce.next;)ce=ce.next;ce.attribute=L.attribute.slice(1),ce.descending=L.descending}else $===L.attribute[0]&&(N[B]=ce={name:$,sort:{attribute:L.attribute.slice(1),descending:L.descending}})}L.next&&k(L.next)},"applySortingOnSelect");k(I)}else y.iterate=(p[Symbol.asyncIterator]||p[Symbol.iterator]).bind(p),y=y.map(D);return y}static transformEntryForSelect(p,N,I,b,O,D){if(p&&(p===t||p?.length===1&&p[0]===t)){let L=a(B=>B?.key??B,"transform");return p===t?L:p.asArray?B=>[L(B)]:B=>({[t]:L(B)})}let y;O&&P&&!p?.every(L=>{let B;return typeof L=="object"?B=L.name:B=L,r[B]||B===t})&&(y=!0);let M,k=a(function(L){let B;if(L!=null){if(Cm=L,B=L.value||L.deref?.(),!B&&(L.key===void 0||L.deref)){if(L=Lm(L.key??L,N,{transaction:I,lazy:p?.length<4},this.isSync,$=>$),L?.then)return L.then(k.bind(this));B=L?.value}if(y&&(L.metadataFlags&(Bu|Hu)||L.expiresAt&&L.expiresAt<Date.now())){let $=Dm(L.key??L,L,N);if($?.then)return $.then(k)}}if(B==null)return D?ca.SKIP:B;if(p&&!(p[0]==="*"&&p.length===1)){let $,ce=a((te,Be)=>{let le;typeof te=="object"?le=te.name:le=te;let ke=Bi?.[le],ne;if(ke){let Z=b?.[le];if(Z)if(Z.hasMappings){let Ge=ke.from?B[ke.from]:jn(L.key);ne=Z.get(Ge),ne||(ne=[])}else ne=Z.fromRecord?.(B);else ne=ke(B,N,L);let Oe=a(Ge=>{if(Ge&&typeof Ge=="object"){let gs=ke.definition?.tableClass||Xe;M||(M={});let Hi=M[le]||(M[le]=gs.transformEntryForSelect(le===te?null:te.select||(Array.isArray(te)?te:null),N,I,Z,O));if(Array.isArray(Ge)){let je=[],Wt=gs.transformToOrderedSelect(Ge,te.select,typeof te.sort=="object"&&te.sort,N,I,Hi)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),On=a(Qt=>{for(;!Qt.done;){if(Qt?.then)return Qt.then(On);je.push(Qt.value),Qt=Wt.next()}Be(je,le)},"nextValue"),Rs=On(Wt.next());Rs&&($||($=[]),$.push(Rs));return}else if(Ge=Hi.call(this,Ge),Ge?.then){$||($=[]),$.push(Ge.then(je=>Be(je,le)));return}}Be(Ge,le)},"handleResolvedValue");ne?.then?($||($=[]),$.push(ne.then(Oe))):Oe(ne);return}else ne=B[le],ne&&typeof ne=="object"&&le!==te&&(ne=Xe.transformEntryForSelect(te.select||te,N,I,null)({value:ne}));Be(ne,le)},"selectAttribute"),ye;if(typeof p=="string")ce(p,te=>{ye=te});else if(Array.isArray(p))if(p.asArray)ye=[],p.forEach((te,Be)=>{te==="*"?p[Be]=B:ce(te,le=>ye[Be]=le)});else{ye={};let te=p.forceNulls;for(let Be of p)if(Be==="*")for(let le in B)ye[le]=B[le];else ce(Be,(le,ke)=>{le===void 0&&te&&(le=null),ye[ke]=le})}else throw new Pn.ClientError("Invalid select"+p);return $?Promise.all($).then(()=>ye):ye}return B},"transform");return k}async subscribe(p){if(!l)throw new Error("Can not subscribe to a table without an audit log");h||ft({table:s,database:c,schemaDefined:_,attributes:S,audit:!0}),p||(p={});let N=!p.rawEvents,I=GI(Xe,this[Ue]??null,function(y,M,k,L){try{let B=M.getValue?.(i,N);if(!B&&M.type==="patch"&&N){let $=i.getEntry(y);$?.version===M.version?B=$.value:B=M.getValue?.(i,!0,k),M.type="put"}this.send({id:y,timestamp:k,value:B,version:M.version,type:M.type,beginTxn:L})}catch(B){nt.error(B)}},p.startTime||0,this[In]);this[In]&&(I.includeDescendants=!0,p.onlyChildren&&(I.onlyChildren=!0)),p.crossThreads===!1&&(I.crossThreads=!1),p.supportsTransactions&&(I.supportsTransactions=!0);let b=this[Ue],O=p.previousCount;O>1e3&&(O=1e3);let D=p.startTime;if(this[In]){if(D){if(O)throw new Pn.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:y,value:M}of l.getRange({start:D,exclusiveStart:!0})){let k=xt(M);if(k.tableId!==n)continue;let L=k.recordId;if(b==null||MM(b,L)){let B=k.getValue(i,N,y);I.send({id:L,timestamp:y,value:B,version:k.version,type:k.type})}I.startTime=y}}else if(O){let y=[];for(let{key:M,value:k}of l.getRange({start:"z",end:!1,reverse:!0}))try{let L=xt(k);if(L.tableId!==n)continue;let B=L.recordId;if(b==null||MM(b,B)){let $=L.getValue(i,N,M);if(y.push({id:B,timestamp:M,value:$,version:L.version,type:L.type}),--O<=0)break}}catch(L){nt.error("Error getting history entry",M,L)}for(let M=y.length;M>0;)I.send(y[--M]);y[0]&&(I.startTime=y[0].timestamp)}else if(!p.omitCurrent)for(let{key:y,value:M,version:k,localTime:L}of i.getRange({start:b??!1,end:b==null?void 0:[b,ua.MAXIMUM_KEY],versions:!0}))M&&I.send({id:y,timestamp:L,value:M,version:k,type:"put"})}else{O&&!D&&(D=0);let y=this[an]?.localTime;if(y===sS&&(i.cache?.delete(b),this[an]=i.getEntry(b),nt.trace("re-retrieved record",y,this[an]?.localTime),y=this[an]?.localTime),nt.trace("Subscription from",D,"from",b,y),D<y){let M=[],k=y;do{let L=l.get(k);if(L){p.omitCurrent=!0;let B=xt(L),$=B.getValue(i,N,k);N&&(B.type="put"),M.push({id:b,value:$,timestamp:k,...B}),k=B.previousLocalTime}else break;O&&O--}while(k>D&&O!==0);for(let L=M.length;L>0;)I.send(M[--L]);I.startTime=y}!p.omitCurrent&&this.doesExist()&&I.send({id:b,timestamp:y,value:this,version:this[Gu],type:"put"})}return p.listener&&I.on("data",p.listener),I}doesExist(){return!!(this[fe]||this[vu])}publish(p,N){this._writePublish(p,N)}_writePublish(p,N){let I=Yn(this[be]),b=this[Ue]||null;yl(b);let O=this[be];I.addWrite({key:b,store:i,entry:this[an],nodeName:O?.nodeName,validate:()=>{O?.source||(I.checkOverloaded(),this.validate(p))},before:Me.publish?.bind(this,O,b,p),beforeIntermediate:qe.publish?.bind(this,O,b,p),commit:(D,y,M)=>{y===void 0&&m&&!h&&Mm(),R(b,y?.value??null,y,y?.version||D,0,!0,O,y?.expiresAt,"message",!1,p)}})}validate(p,N){let I,b=a((O,D,y)=>{if(D.type&&O!=null)if(N&&O.__op__&&(O=O.value),D.properties){typeof O!="object"&&(I||(I=[])).push(`Value ${os(O)} in property ${y} must be an object${D.type?" ("+D.type+")":""}`);let M=D.properties;for(let k=0,L=M.length;k<L;k++){let B=M[k],$=b(O[B.name],B,y+"."+B.name);$&&(O[B.name]=$)}if(D.sealed&&O!=null&&typeof O=="object")for(let k in O)M.find(L=>L.name===k)||(I||(I=[])).push(`Property ${k} is not allowed within object in property ${y}`)}else switch(D.type){case"Int":(typeof O!="number"||O>>0!==O)&&(I||(I=[])).push(`Value ${os(O)} in property ${y} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof O!="number"||!(Math.floor(O)===O&&Math.abs(O)<=9007199254740992))&&(I||(I=[])).push(`Value ${os(O)} in property ${y} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof O!="number"&&(I||(I=[])).push(`Value ${os(O)} in property ${y} must be a number`);break;case"ID":typeof O=="string"||O?.length>0&&O.every?.(M=>typeof M=="string")||(I||(I=[])).push(`Value ${os(O)} in property ${y} must be a string, or an array of strings`);break;case"String":typeof O!="string"&&(I||(I=[])).push(`Value ${os(O)} in property ${y} must be a string`);break;case"Boolean":typeof O!="boolean"&&(I||(I=[])).push(`Value ${os(O)} in property ${y} must be a boolean`);break;case"Date":if(!(O instanceof Date)){if(typeof O=="string"||typeof O=="number")return new Date(O);(I||(I=[])).push(`Value ${os(O)} in property ${y} must be a Date`)}break;case"BigInt":if(typeof O!="bigint"){if(typeof O=="string"||typeof O=="number")return BigInt(O);(I||(I=[])).push(`Value ${os(O)} in property ${y} must be a bigint`)}break;case"Bytes":O instanceof Uint8Array||(I||(I=[])).push(`Value ${os(O)} in property ${y} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(O)){if(D.elements)for(let M=0,k=O.length;M<k;M++){let L=O[M],B=b(L,D.elements,y+"[*]");B&&(O[M]=B)}}else(I||(I=[])).push(`Value ${os(O)} in property ${y} must be a Buffer or Uint8Array`);break}D.nullable===!1&&O==null&&(I||(I=[])).push(`Property ${y} is required (and not does not allow null values)`)},"validateValue");for(let O=0,D=S.length;O<D;O++){let y=S[O];if(!y.relationship&&(!N||y.name in p)){let M=b(p[y.name],y,y.name);M&&(p[y.name]=M)}}if(d)for(let O in p)S.find(D=>D.name===O)||(I||(I=[])).push(`Property ${O} is not allowed`);if(I)throw new Pn.ClientError(I.join(". "))}getUpdatedTime(){return this[Gu]}wasLoadedFromSource(){return P?!!this[qg]:void 0}static async addAttributes(p){let N=S.slice(0);for(let I of p){if(!I.name)throw new Pn.ClientError("Attribute name is required");if(I.name.match(/[`/]/))throw new Pn.ClientError("Attribute names cannot include backticks or forward slashes");N.push(I)}return ft({table:s,database:c,schemaDefined:_,attributes:N}),Xe.indexingOperation}static async removeAttributes(p){let N=S.filter(I=>!p.includes(I.name));return ft({table:s,database:c,schemaDefined:_,attributes:N}),Xe.indexingOperation}static getRecordCount(p){let N=i.getStats().entryCount,I=5e3,b=1e3,O;N>I&&!p?.exactCount&&(O=b);let D=0;for(let{value:y}of i.getRange({start:!0,lazy:!0,limit:O}))y!=null&&D++;if(O){let y=D;D=0;for(let{value:Be}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:O}))Be!=null&&D++;let M=O*2,k=(D+y)/M,L=Math.pow((D-y+1)/O/2,2)+k*(1-k)/M,B=Math.max(Math.sqrt(L)*N,1),$=Math.round(k*N),ce=Math.max($-1.96*B,0),ye=Math.min($+1.96*B,N),te=Math.pow(10,Math.round(Math.log10(B)));return te>$&&(te=te/10),D=Math.round($/te)*te,{recordCount:D,estimatedRange:[Math.round(ce),Math.round(ye)]}}return{recordCount:D}}static updatedAttributes(){Bi=this.propertyResolvers={$id:(p,N,I)=>({value:I.key}),$updatedtime:(p,N,I)=>I.version,$record:(p,N,I)=>I?{value:p}:p};for(let p of this.attributes){p.resolve=null;let N=p.relationship;if(N)if(p.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),Yb=!0,N.to)p.elements?.definition?(Bi[p.name]=p.resolve=(I,b,O)=>{let D=I[N.from?N.from:t],y=p.elements.definition.tableClass;return O?ic({attribute:N.to,value:D},Yn(b).getReadTxn(),!1,y,!1).asArray:y.search([{attribute:N.to,value:D}],b).asArray},p.set=()=>{throw new Error("Setting a one-to-many relationship property is not supported")},p.resolve.definition=p.elements.definition,N.from&&(p.resolve.from=N.from)):console.error(`The one-to-many/many-to-many relationship property "${p.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(N.from){let I=p.definition||p.elements?.definition;I?(Bi[p.name]=p.resolve=(b,O,D)=>{let y=b[N.from];if(y!==void 0){if(p.elements){let M,k=y.map(L=>{let B=D?I.tableClass.primaryStore.getEntry(L,{transaction:Yn(O).getReadTxn()}):I.tableClass.get(L,O);return B?.then&&(M=!0),B});return N.filterMissing?M?Promise.all(k).then(L=>L.filter(UM)):k.filter(UM):M?Promise.all(k):k}return D?I.tableClass.primaryStore.getEntry(y,{transaction:Yn(O).getReadTxn()}):I.tableClass.get(y,O)}},p.set=(b,O)=>{if(Array.isArray(O)){let D=O.map(y=>y[Ue]||y[I.tableClass.primaryKey]);b[N.from]=D}else{let D=O[Ue]||O[I.tableClass.primaryKey];b[N.from]=D}},p.resolve.definition=p.definition||p.elements?.definition,p.resolve.from=N.from):console.error(`The relationship property "${p.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${p.name}" in table "${s}" must use either "from" or "to" arguments`)}of(this,this)}static async deleteHistory(p=0){let N;for(let{key:I,value:b}of l.getRange({start:0,end:p}))await qu(),xt(b).tableId===n&&(N=l.remove(I));await N}static async*getHistory(p=0,N=1/0){for(let{key:I,value:b}of l.getRange({start:p,end:N})){await qu();let O=xt(b);O.tableId===n&&(yield{id:O.recordId,localTime:I,version:O.version,type:O.type,value:O.getValue(i,!0,I),user:O.user})}}static async getHistoryOfRecord(p){let N=[];if(p==null)throw new Error("An id is required");let I=i.getEntry(p);if(!I)return N;let b=I.localTime;if(!b)throw new Error("The entry does not have a local audit time");let O=0;do{await qu();let D=l.get(b);if(D){let y=xt(D);N.push({id:y.recordId,localTime:b,version:y.version,type:y.type,value:y.getValue(i,!0,b),user:y.user}),b=y.previousLocalTime}else break}while(O<1e3&&b);return N.reverse()}static cleanup(){z?.remove()}}Xe.updatedAttributes();let _V=Xe.prototype;return _V[i5]=!0,f&&Xe.setTTLExpiration(f/1e3),j&&dV(),Xe;function wd(W,p,N){let I;for(let b in r){let O=r[b],D=O.isIndexing,y=N?.[b],M=p?.[b];if(y===M&&!D)continue;I=!0;let k=O.indexNulls,L=(0,xu.getIndexedValues)(M,k);if(L){CM&&O.prefetch(L.map(B=>({key:B,value:W})),PM);for(let B=0,$=L.length;B<$;B++)O.remove(L[B],W)}if(L=(0,xu.getIndexedValues)(y,k),L){CM&&O.prefetch(L.map(B=>({key:B,value:W})),PM);for(let B=0,$=L.length;B<$;B++)O.put(L[B],W)}}return I}a(wd,"updateIndices");function yl(W){switch(typeof W){case"number":return!0;case"string":if(W.length<659)return!0;if(W.length>DM)throw new Error("Primary key size is too large: "+W.length);break;case"object":if(W===null)return!0;break;case"bigint":if(W<2n**64n&&W>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof W)}if((0,ua.writeKey)(W,a5,0)>DM)throw new Error("Primary key size is too large: "+W.length);return!0}a(yl,"checkValidId");function Lm(W,p,N,I,b){let O=a(()=>{if(p?.transaction?.stale&&(p.transaction.stale=!1),N.transaction?.isDone)return b(null,W);let D=i.getEntry(W,N);return D&&p&&(D?.version>(p.lastModified||0)&&(p.lastModified=D.version),D?.localTime&&!p.lastRefreshed&&(p.lastRefreshed=D.localTime)),b(D,W)},"whenPrefetched");return I?O():ue>0?(ue--,O()):new Promise((D,y)=>{ue===0?(ue--,i.prefetch([W],()=>{M(),k()})):(J.push(W),Ae.push(k),J.length>uV&&(ue--,M()));function M(){if(J.length>0){let L=Ae;i.prefetch(J,()=>{ue===-1?M():ue++;for(let B of L)B()}),J=[],Ae=[],Ee>2&&Ee--}else ue=Ee,Ee<lV&&Ee++}a(M,"prefetch");function k(){try{D(O())}catch(L){y(L)}}a(k,"load")})}a(Lm,"loadLocalRecord");function Cd(W){if(!W?.role)return;let p=W.role.permission;if(p.super_user)return c5;let N=p[c],I,b=N?.tables;if(b)return b[s];if(c==="data"&&(I=p[s])&&!I.tables)return I}a(Cd,"getTablePermissions");function Dm(W,p,N,I){if(P){let b;if(N.noCache?b=!0:(p?(!p.value||p.metadataFlags&(Bu|Hu)||p.expiresAt&&p.expiresAt<Date.now())&&(b=!0):b=!0,Dn(!b,"cache-hit",s)),b){let O=Wb(W,p,N).then(D=>(D?.value?.[fe]&&nt.error("Can not assign a record with a record property"),N&&(D?.version>(N.lastModified||0)&&(N.lastModified=D.version),N.lastRefreshed=Date.now()),D));if(N?.onlyIfCached||p?.value&&I?.allowStaleWhileRevalidate?.(p,W)){if(O.catch(D=>nt.warn(D)),N?.onlyIfCached&&!I.doesExist())throw new Pn.ServerError("Entry is not cached",504);return}else return O}}}a(Dm,"ensureLoadedFromSource");function Yn(W){let p=W?.transaction;if(p){if(!p.lmdbDb)return p.lmdbDb=i,p;do{if(p.lmdbDb?.path===i.path)return p;let N=p.next;if(!N)return p=p.next=new ko,p.lmdbDb=i,p;p=N}while(!0)}else return new lf}a(Yn,"txnForContext");function Pm(W,p,N){if(!W)return;Cm=W;let I=W.value||W.deref?.()||(Cm=i.getEntry(W.key))?.value;if(typeof p=="object"){let O=Bi,D=I;for(let y=0,M=p.length;y<M;y++){let k=p[y],L=O?.[k];D=L&&D?L(D,N,!0)?.value:D?.[k],O=L?.definition?.tableClass?.propertyResolvers}return D}let b=Bi[p];return b?b(I,N):I[p]}a(Pm,"getAttributeValue");function Kb(W,p,N,I,b){let O=b?.length,D={transaction:I,lazy:O>0||typeof p=="string"||p?.length<4,alwaysPrefetch:!0},y;function M(k,L){let B=k?.value;if(!B)return ca.SKIP;for(let $=0;$<O;$++)if(!y?.includes($)&&!b[$](B,k))return ca.SKIP;return L!==void 0&&(k.key=L),k}if(a(M,"processEntry"),O>0||!W.hasEntries){let k=W.map(L=>{if(y=null,typeof L=="object"&&L.key!==void 0)return O>0?M(L):L;if(L==null)return ca.SKIP;for(let B=0;B<O;B++){let ce=b[B].idFilter;if(ce){if(!ce(L))return ca.SKIP;y||(y=[]),y.push(B)}}return Lm(L,N,D,!1,M)});return Array.isArray(W)&&(k=k.filter(L=>L!==ca.SKIP)),k.hasEntries=!0,k}return W}a(Kb,"transformToEntries");async function Wb(W,p,N){let I=p?.metadataFlags,b=p?.version,O,D;if(!i.attemptLock(W,b,()=>{clearTimeout(D);let L=i.getEntry(W);!L||!L.value||L.metadataFlags&(Bu|Hu)?O(Wb(W,i.getEntry(W),N)):O(L)}))return new Promise(L=>{O=L,D=setTimeout(()=>{i.unlock(W,b)},s5)});let y=p?.value,M={requestContext:N,replacingRecord:y,replacingVersion:b,source:null,resourceCache:N?.resourceCache},k=N?.responseHeaders;return new Promise((L,B)=>{let $;xg(Ze(M,async ce=>{let ye=performance.now(),te,Be,le;try{for(let Oe of Xe.sources)if(Oe.get&&(!Oe.get.reliesOnPrototype||Oe.prototype.get)&&(M.source=Oe,te=await Oe.get(W,M),te))break;le=I&Bu;let ne=M.lastModified||le&&b;Be=le||ne>b||!y,ne||(ne=(0,xu.getNextMonotonicTime)());let Z=performance.now()-ye;if(on(Z,"cache-resolution",s),k&&Hg(k,"Server-Timing",`cache-resolve;dur=${Z.toFixed(2)}`,!0),ce.timestamp=ne,f&&!M.expiresAt&&(M.expiresAt=Date.now()+f),te){if(typeof te!="object")throw new Error("Only objects can be cached and stored in tables");typeof te.toJSON=="function"&&(te=te.toJSON()),t&&te[t]!==W&&(te[t]=W)}$=!0,L({version:ne,value:te})}catch(ne){ne.message+=` while resolving record ${W} for ${s}`,y&&((ne.code==="ECONNRESET"||ne.code==="ECONNREFUSED"||ne.code==="EAI_AGAIN")&&!N?.mustRevalidate||N?.staleIfError&&(ne.statusCode===500||ne.statusCode===502||ne.statusCode===503||ne.statusCode===504))?(L({version:b,value:y}),nt.trace(ne.message,"(returned stale record)")):B(ne),M.transaction.abort();return}if(N?.noCacheStore){M.transaction.abort();return}Yn(M).addWrite({key:W,store:i,entry:p,nodeName:"source",commit:(ne,Z)=>{if(Z?.version!==b)return;let Oe=wd(W,y,te);te?(qe.put?.(M,W,te),R(W,te,Z,ne,0,h&&Be||null,M,M.expiresAt,"put",!!le)):(qe.delete?.(M,W),h||m?R(W,null,Z,ne,0,h&&Be||null,M,0,"delete",!!le):i.remove(W,b))}})}),()=>{i.unlock(W,b)},ce=>{i.unlock(W,b),$&&nt.error("Error committing cache update",ce)})})}a(Wb,"getFromSource");function Mm(){if(Gt!==yd&&(yd=Gt,(0,la.getWorkerIndex)()===(0,la.getWorkerCount)()-1)){if(Id&&clearTimeout(Id),!Gt)return;let W=new Date;W.setMonth(0),W.setDate(1),W.setHours(0),W.setMinutes(0),W.setSeconds(0);let p=Math.ceil((Date.now()-W.getTime())/Gt)*Gt+W.getTime(),N=a(I=>{nt.trace(`Scheduled next cleanup scan at ${new Date(I)}ms`),Id=setTimeout(()=>U=U.then(async()=>{if(N(Math.max(I+Gt,Date.now())),i.rootStore.status!=="open"){clearTimeout(Id);return}let b=50,O=new Array(b),D=0;nt.trace(`Starting cleanup scan for ${s}`);try{let y=0;for(let{key:M,value:k,version:L,expiresAt:B}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let $;k===null&&!h&&L+n5<Date.now()?$=i.remove(M,L):B&&B+E<Date.now()&&($=Xe.evict(M,k,L),y++),$&&(await O[D],O[D]=$.catch(ce=>{nt.error("Cleanup error",ce)}),++D>=b&&(D=0)),await qu()}nt.trace(`Finished cleanup scan for ${s}, evicted ${y} entries`)}catch(y){nt.trace(`Error in cleanup scan for ${s}:`,y)}}),Math.min(I-Date.now(),2147483647)).unref()},"startNextTimer");N(p)}}a(Mm,"scheduleCleanup");function Qb(){z=l?.addDeleteRemovalCallback(n,W=>{let p=i.getEntry(W);p?.value===null&&i.remove(W,p.version)})}a(Qb,"addDeleteRemoval");function dV(){(0,la.getWorkerIndex)()===0&&setInterval(async()=>{try{let W=j.name,p=r[W];if(!p)throw new Error(`expiresAt attribute ${j} must be indexed`);for(let{key:N,value:I}of p.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let b=i.getEntry(I);b?.value?b.value[W]<Date.now()&&Xe.evict(I,b.value,b.version):i.ifVersion(I,b?.version,()=>p.remove(N,I)),await qu()}}catch(W){nt.error("Error in evicting old records",W)}},r5).unref()}a(dV,"runRecordExpirationEviction")}function Gg(e,t){let r=e.attr_object||(e.attr_object={}),n=r[t];if(n)return n;n=r[t]=Object.create(null);for(let s of e)n[s.attribute_name]=s[t];return n}function PM(){}function l5(e){BM=e}function TE(e,t){let r=t?.type;return e===null?e:e===""&&r&&r!=="String"&&r!=="Any"?null:r==="Int"||r==="Long"?e==="null"?null:parseInt(e):r==="Float"?e==="null"?null:parseFloat(e):r==="BigInt"?e==="null"?null:BigInt(e):r==="Boolean"?e==="true"?!0:e==="false"?!1:e:r==="Date"?(typeof e!="number"&&!u5.test(e)&&(e+="Z"),e==="null"?null:new Date(e)):!r||r==="Any"?(0,RE.autoCast)(e):e}function MM(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 n=0;n<r;n++)if(t[n]!==e[n])return!1;return!0}return!1}else if(t[0]===e)return!0}function xg(e,t,r){return e?.then?e.then(t,r):t(e)}function gE(e,t){e[an]=t,e[fe]=t?.value??null,e[Gu]=t?.version}function UM(e){return e!=null}function os(e){try{return JSON.stringify(e)}catch{return e}}var as,ca,xu,vM,$u,Pn,Fu,ku,nt,ua,la,RE,t5,BM,r5,n5,CM,s5,Gu,i5,an,vu,LM,o5,qg,bc,Bu,Hu,a5,DM,c5,kge,u5,qu,OE=Ne(()=>{as=q(C()),ca=require("lmdb"),xu=q(Tr()),vM=require("lodash");Qn();pS();$u=q(X());kI();Pn=q(ie()),Fu=q(ii()),ku=q(Xn());ge();ff();nt=q(x());cf();$o();ua=require("ordered-binary"),la=q(tt());Go();RE=q(K());Yl();ui();Xd();Uu();t5=new Uint8Array(9);t5[8]=192;r5=6e4,n5=864e5;$u.initSync();CM=$u.get(as.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),s5=1e4,Gu=Symbol.for("version"),i5=Symbol.for("incremental-update"),an=Symbol("entry"),vu=Symbol("is-saving"),LM=1,o5=2,qg=Symbol("loaded-from-source"),bc={isNotification:!0,ensureLoaded:!1},Bu=1,Hu=8,a5=Buffer.allocUnsafeSlow(8192),DM=1978,c5={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},kge=(0,RE.convertToMS)($u.get(as.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(AE,"makeTable");a(Gg,"attributesAsObject");a(PM,"noop");a(l5,"setServerUtilities");u5=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(TE,"coerceType");a(MM,"isDescendantId");qu=a(()=>new Promise(setImmediate),"rest");a(xg,"when");a(gE,"updateResource");a(UM,"exists");a(os,"stringify")});var Fe={};$e(Fe,{database:()=>Tu,databases:()=>ot,dropDatabase:()=>QT,dropTableMeta:()=>p5,getDatabases:()=>ts,getTables:()=>_5,onUpdatedTable:()=>Kg,readMetaDb:()=>Vu,resetDatabases:()=>d5,table:()=>ft,tables:()=>ln});function _5(){return wE||ts(),ln||{}}function ts(){if(wE)return ot;wE=!0,wc=new Map;let e=(0,or.getHdbBasePath)()&&(0,st.join)((0,or.getHdbBasePath)(),un.DATABASES_DIR_NAME),t=(0,or.get)(un.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,or.get)(un.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,cn.existsSync)(e)?e:(0,st.join)((0,or.getHdbBasePath)(),un.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,cn.existsSync)(e))for(let r of(0,cn.readdirSync)(e,{withFileTypes:!0})){let n=(0,st.basename)(r.name,".mdb");r.isFile()&&(0,st.extname)(r.name).toLowerCase()===".mdb"&&!t[n]?.path&&Vu((0,st.join)(e,r.name),null,n)}if((0,cn.existsSync)((0,Ic.getBaseSchemaPath)())){for(let r of(0,cn.readdirSync)((0,Ic.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,st.join)((0,Ic.getBaseSchemaPath)(),r.name),s=(0,st.join)((0,Ic.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,cn.readdirSync)(n,{withFileTypes:!0}))if(i.isFile()&&(0,st.extname)(i.name).toLowerCase()===".mdb"){let o=(0,st.join)(s,i.name);Vu((0,st.join)(n,i.name),(0,st.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let n=t[r],s=n.path;if((0,cn.existsSync)(s))for(let o of(0,cn.readdirSync)(s,{withFileTypes:!0}))o.isFile()&&(0,st.extname)(o.name).toLowerCase()===".mdb"&&Vu((0,st.join)(s,o.name),(0,st.basename)(o.name,".mdb"),r);let i=n.tables;if(i)for(let o in i){let c=i[o],l=(0,st.join)(c.path,(0,st.basename)(o+".mdb"));(0,cn.existsSync)(l)&&Vu(l,o,r,null,!0)}}for(let r in ot){let n=wc.get(r);if(n){let s=ot[r];r.includes("delete")&&Mn.trace(`defined tables ${Array.from(n.keys())}`);for(let i in s)n.has(i)||(Mn.trace(`delete table class ${i}`),delete s[i])}else if(delete ot[r],r==="data"){for(let s in ln)delete ln[s];delete ln[CE]}}return wc=null,ot}}function d5(){wE=!1;for(let[,e]of no)e.needsDeletion=!0;ts();for(let[e,t]of no)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),no.delete(e));return ot}function Vu(e,t,r=Vg,n,s){let i=new kg.default(e,!1);try{let o=no.get(e);o?o.needsDeletion=!1:(o=(0,bE.open)(i),no.set(e,o));let c=new _a.default(!1),l=o.dbisDb||(o.dbisDb=o.openDB(NE.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(n?(0,cn.existsSync)(n)&&(i.path=n,_=(0,bE.open)(i),_.isLegacy=!0):_=Jd(o));let u=xM(r),d=u[CE],f=new Map;for(let{key:E,value:h}of l.getRange({start:!1})){let[m,S]=E.toString().split("/");S===""?S=h.name:S||(S=m,m=t,h.name||(h.name=S,h.indexed=!h.is_hash_attribute)),d?.add(m);let R=f.get(m);R||f.set(m,R={attributes:[]}),(S==null||h.is_hash_attribute)&&(R.primary=h),S!=null&&R.attributes.push(h),Object.defineProperty(h,"key",{value:E,configurable:!0})}for(let[E,h]of f){let{attributes:m,primary:S}=h;if(!S){for(let J of m)if(J.is_hash_attribute||J.isPrimaryKey){S=J;break}if(!S){Mn.fatal(`Unable to find a primary key attribute on table ${E}, with attributes: ${JSON.stringify(m)}`);continue}}let R=u[E],g={},A=[],P,v,U=typeof S.audit=="boolean"?S.audit:(0,or.get)(un.CONFIG_PARAMS.LOGGING_AUDITLOG),F=S.trackDeletes,H=S.expiration,j=S.eviction,z=S.sealed;if(R)g=R.indices,A=R.attributes,R.schemaVersion++;else{P=S.tableId,P?P>=(l.get(yc)||0)&&l.putSync(yc,P+1):(S.tableId=P=l.get(yc),P||(P=1),l.putSync(yc,P+1),l.putSync(S.key,S));let J=new _a.default(!S.is_hash_attribute,S.is_hash_attribute);v=Wd(o.openDB(S.key,J)),v.rootStore=o,v.tableId=P}for(let J of m){J.attribute=J.name;try{if(!J.is_hash_attribute&&(J.indexed||J.attribute&&!J.name)){if(!g[J.name]){let ue=new _a.default(!J.is_hash_attribute,J.is_hash_attribute);g[J.name]=o.openDB(J.key,ue),g[J.name].indexNulls=J.indexNulls}let Ae=A.find(ue=>ue.name===J.name);Ae?A.splice(A.indexOf(Ae),1,J):A.push(J)}}catch(Ae){Mn.error("Error trying to update attribute",J,A,g,Ae)}}if(!R){R=FM(u,E,AE({primaryStore:v,auditStore:_,audit:U,sealed:z,expirationMS:H&&H*1e3,evictionMS:j&&j*1e3,trackDeletes:F,tableName:E,tableId:P,primaryKey:S.name,databasePath:s?r+"/"+E:r,databaseName:r,indices:g,attributes:m,schemaDefined:S.schemaDefined,dbisDB:l})),R.schemaVersion=1;for(let J of Yg)J(R)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function xM(e){let t=ot[e];if(t||(e==="data"?t=ot[e]=ln:e==="system"?Object.defineProperty(ot,"system",{value:t=Object.create(null),configurable:!0}):t=ot[e]=Object.create(null)),wc&&!wc.has(e)){let r=new Set;t[CE]=r,wc.set(e,r)}return t}function FM(e,t,r){return e[t]=r,r}function Tu({database:e,table:t}){e||(e=Vg),ts();let r=xM(e),n=(0,st.join)((0,or.getHdbBasePath)(),un.DATABASES_DIR_NAME),s=(0,or.get)(un.CONFIG_PARAMS.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(s.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&s[e]?.tables?.[t]?.path;n=i||s[e]?.path||process.env.STORAGE_PATH||(0,or.get)(un.CONFIG_PARAMS.STORAGE_PATH)||((0,cn.existsSync)(n)?n:(0,st.join)((0,or.getHdbBasePath)(),un.LEGACY_DATABASES_DIR_NAME));let o=(0,st.join)(n,(i?t:e)+".mdb"),c=no.get(o);if(!c){let l=new kg.default(o,!1);c=(0,bE.open)(l),no.set(o,c)}return c}async function QT(e){if(!ot[e])throw new Error("Schema does not exist");let t=ot[e];for(let r in t){let s=t[r].primaryStore.rootStore;no.delete(s.path),s.status==="open"&&(await s.close(),await HM.remove(s.path))}if(e==="data"){for(let r in ln)delete ln[r];delete ln[CE]}delete ot[e]}function ft({table:e,database:t,expiration:r,eviction:n,scanInterval:s,attributes:i,audit:o,sealed:c,trackDeletes:l,schemaDefined:_,origin:u}){t||(t=Vg);let d=Tu({database:t,table:e}),f=ot[t],E=f?.[e];if(d.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let h,m,S,R;_==null&&(_=!0);let g=new _a.default(!1);for(let H of i)H.attribute?(H.name=H.attribute,H.indexed=!0):H.attribute=H.name,H.expiresAt&&(H.indexed=!0);let A,P;if(E){if(h=E.primaryKey,E.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${e} class`);E.attributes.splice(0,E.attributes.length,...i)}else{let H=d.auditStore;H||(H=Jd(d)),m=i.find(Ae=>Ae.isPrimaryKey)||{},h=m.name,m.is_hash_attribute=!0,m.schemaDefined=_,l&&(m.trackDeletes=!0),o=m.audit=typeof o=="boolean"?o:(0,or.get)(un.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(m.expiration=r),n&&(m.eviction=n),typeof c=="boolean"&&(m.sealed=c),u&&(m.origins?m.origins.includes(u)||m.origins.push(u):m.origins=[u]),Mn.trace(`${e} table loading, opening primary store`);let j=new _a.default(!1,!0),z=e+"/",J=Wd(d.openDB(z,j));J.rootStore=d,R=d.dbisDb=d.openDB(NE.INTERNAL_DBIS_NAME,g),J.tableId=R.get(yc),J.tableId||(J.tableId=1),R.putSync(yc,J.tableId+1),m.tableId=J.tableId,E=FM(f,e,AE({primaryStore:J,auditStore:H,audit:o,sealed:c,trackDeletes:l,expirationMS:r&&r*1e3,evictionMS:n&&n*1e3,primaryKey:h,tableName:e,tableId:J.tableId,databasePath:t,databaseName:t,indices:{},attributes:i,schemaDefined:_,dbisDB:R})),E.schemaVersion=1,A=!0,F(),R.put(z,m)}S=E.indices,R=R||(d.dbisDb=d.openDB(NE.INTERNAL_DBIS_NAME,g)),E.dbisDB=R;let v=[];for(let{key:H,value:j}of R.getRange({start:!0})){let[z,J]=H.toString().split("/");if(J===""&&(J=j.name),J){if(z!==e)continue}else J=z;if(!i.find(ue=>ue.name===J)?.indexed&&j.indexed&&!j.isPrimaryKey){F(),A=!0,R.remove(H);let ue=E.indices[z];ue&&v.push(ue)}}let U=[];try{for(let H of i||[]){if(H.relationship)continue;let j=e+"/"+(H.name||"");Object.defineProperty(H,"key",{value:j,configurable:!0});let z=R.get(j);if(H.isPrimaryKey){if(z=z||R.get(j=e+"/")||{},o!==E.audit||c!==c||(+r||void 0)!==(+z.expiration||void 0)||(+n||void 0)!==(+z.eviction||void 0)){let Ae=Object.assign({},z);typeof o=="boolean"&&(o&&E.enableAuditing(o),Ae.audit=o),r&&(Ae.expiration=+r),n&&(Ae.eviction=+n),c!==void 0&&(Ae.sealed=c),A=!0,F(),R.put(j,Ae)}continue}z?.attribute&&!z.name&&(z.indexed=!0);let J=!z||z.type!==H.type||z.indexed!==H.indexed||z.nullable!==H.nullable||JSON.stringify(z.attributes)!==JSON.stringify(H.attributes)||JSON.stringify(z.elements)!==JSON.stringify(H.elements);if(H.indexed){let Ae=new _a.default(!0,!1),ue=d.openDB(j,Ae);(J||z.indexingPID&&z.indexingPID!==process.pid||z.restartNumber<Yu.workerData?.restartNumber)&&(A=!0,F(),z=R.get(j),(J||z.indexingPID&&z.indexingPID!==process.pid||z.restartNumber<Yu.workerData?.restartNumber)&&(A=!0,H.lastIndexedKey=z?.lastIndexedKey||!1,H.indexingPID=process.pid,ue.isIndexing=!0,Object.defineProperty(H,"dbi",{value:ue}),H.indexNulls===void 0&&(H.indexNulls=!0),U.push(H)),R.put(j,H)),z?.indexNulls&&H.indexNulls===void 0&&(H.indexNulls=!0),ue.indexNulls=H.indexNulls,S[H.name]=ue}else J&&(A=!0,F(),R.put(j,H))}}finally{P&&P()}if(A&&(E.schemaVersion++,E.updatedAttributes()),Mn.trace(`${e} table loading, running index`),U.length>0||v.length>0?E.indexingOperation=h5(E,U,v):A&&yE.signalSchemaChange(new IE.SchemaEventMsg(process.pid,"schema-change",E.databaseName,E.tableName)),E.origin=u,A)for(let H of Yg)H(E,u!=="cluster");return(r||n||s)&&E.setTTLExpiration({expiration:r,eviction:n,scanInterval:s}),Mn.trace(`${e} table loaded`),E;function F(){P||d.transactionSync(()=>({then(H){P=H}}))}a(F,"startTxn")}async function h5(e,t,r){try{let n=e.schemaVersion;await yE.signalSchemaChange(new IE.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let l of r)s=l.drop();let i,o=0,c=t.length;if(await new Promise(l=>setImmediate(l)),c>0){let l=0;for(let{key:_,value:u,version:d}of e.primaryStore.getRange({start:t[0].lastIndexedKey,lazy:c<4,versions:!0,snapshot:!1}))if(u){if(l++,s=e.primaryStore.ifVersion(_,d,()=>{for(let f=0;f<c;f++){let E=t[f],h=E.name,m=(0,qM.getIndexedValues)(u[h]);if(m)for(let S=0,R=m.length;S<R;S++)E.dbi.put(m[S],_)}}),s.then(()=>l--,f=>{l--,Mn.error(f)}),Yu.workerData&&Yu.workerData.restartNumber!==GM.restartNumber&&(i=!0),++o%100===0||i){for(let f of t)f.lastIndexedKey=_,e.dbisDB.put(f.key,f);if(i)return}l>f5?await s:l>E5&&await new Promise(f=>setImmediate(f))}for(let _ of t)delete _.lastIndexedKey,delete _.indexingPID,_.dbi.isIndexing=!1,s=e.dbisDB.put(_.key,_)}await s,await yE.signalSchemaChange(new IE.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(n){Mn.error("Error in indexing",n)}}function p5({table:e,database:t}){let r=Tu({database:t,table:e}),n=[],s=r.dbisDb;for(let i of s.getKeys({start:e+"/",end:e+"0"}))n.push(s.remove(i));return Promise.all(n)}function Kg(e){Yg.push(e)}var or,NE,bE,st,cn,Ic,_a,kg,un,HM,$g,qM,yE,IE,Yu,Mn,GM,Vg,CE,ln,ot,yc,Yg,wE,no,wc,f5,E5,ge=Ne(()=>{or=q(X()),NE=q(_t()),bE=require("lmdb"),st=require("path"),cn=require("fs"),Ic=q(ze());OE();_a=q(Sf()),kg=q(gf()),un=q(C()),HM=q(require("fs-extra")),$g=require("../index"),qM=q(Tr()),yE=q(ii()),IE=q(Xn()),Yu=require("worker_threads"),Mn=q(x()),GM=q(tt());Go();Yl();Vg="data",CE=Symbol("defined-tables");(0,or.initSync)();ln=Object.create(null),ot=Object.create(null);(0,$g._assignPackageExport)("databases",ot);(0,$g._assignPackageExport)("tables",ln);yc=Symbol.for("next-table-id"),Yg=[],no=new Map;a(_5,"getTables");a(ts,"getDatabases");a(d5,"resetDatabases");a(Vu,"readMetaDb");a(xM,"ensureDB");a(FM,"setTable");a(Tu,"database");a(QT,"dropDatabase");a(ft,"table");f5=1e3,E5=10;a(h5,"runIndexing");a(p5,"dropTableMeta");a(Kg,"onUpdatedTable")});var K=T((Jge,tU)=>{"use strict";var so=require("path"),KM=require("fs-extra"),Cr=x(),kM=require("fs-extra"),LE=require("os"),m5=require("net"),S5=require("recursive-iterator"),at=C(),T5=Wm(),$M=require("papaparse"),DE=require("moment"),{inspect:g5}=require("util"),VM=require("is-number"),zge=require("lodash"),R5=require("minimist"),A5=require("https"),O5=require("http"),{hdb_errors:PE}=ie(),N5=/^((\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)))$/,WM=require("util").promisify(setTimeout),b5=100,y5=5,I5="",w5=4,YM={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};tU.exports={isEmpty:_n,isEmptyOrZeroLength:Us,arrayHasEmptyValues:D5,arrayHasEmptyOrZeroLengthValues:P5,buildFolderPath:M5,isBoolean:QM,errorizeMessage:C5,stripFileExtension:v5,autoCast:B5,autoCastJSON:jM,autoCastJSONDeep:Qg,removeDir:H5,compareVersions:q5,isCompatibleDataVersion:G5,escapeRawValue:x5,unescapeValue:F5,stringifyProps:k5,timeoutPromise:V5,isClusterOperation:K5,getClusterUser:Q5,checkGlobalSchemaTable:W5,getHomeDir:JM,getPropsFilePath:$5,promisifyPapaParse:j5,removeBOM:XM,createEventPromise:z5,checkProcessRunning:J5,checkSchemaTableExist:X5,checkSchemaExists:ZM,checkTableExists:eU,getStartOfTomorrowInSeconds:Z5,getLimitKey:e6,isObject:U5,isNotEmptyAndHasValue:L5,autoCasterIsNumberCheck:zM,backtickASTSchemaItems:t6,isPortTaken:Y5,createForkArgs:r6,autoCastBoolean:n6,async_set_timeout:WM,getTableHashAttribute:s6,doesSchemaExist:i6,doesTableExist:o6,stringifyObj:a6,ms_to_time:c6,changeExtension:l6,getEnvCliRootPath:jg,noBootFile:u6,httpRequest:_6,transformReq:d6,convertToMS:f6,PACKAGE_ROOT:at.PACKAGE_ROOT};function C5(e){return e instanceof Error?e:new Error(e)}a(C5,"errorizeMessage");function _n(e){return e==null}a(_n,"isEmpty");function L5(e){return!_n(e)&&(e||e===0||e===""||QM(e))}a(L5,"isNotEmptyAndHasValue");function Us(e){return _n(e)||e.length===0||e.size===0}a(Us,"isEmptyOrZeroLength");function D5(e){if(_n(e))return!0;for(let t=0;t<e.length;t++)if(_n(e[t]))return!0;return!1}a(D5,"arrayHasEmptyValues");function P5(e){if(Us(e))return!0;for(let t=0;t<e.length;t++)if(Us(e[t]))return!0;return!1}a(P5,"arrayHasEmptyOrZeroLengthValues");function M5(...e){try{return e.join(so.sep)}catch{console.error(e)}}a(M5,"buildFolderPath");function QM(e){return _n(e)?!1:e===!0||e===!1}a(QM,"isBoolean");function U5(e){return _n(e)?!1:typeof e=="object"}a(U5,"isObject");function v5(e){return Us(e)?I5:e.slice(0,-w5)}a(v5,"stripFileExtension");function B5(e){return _n(e)||e===""||typeof e!="string"?e:YM[e]!==void 0?YM[e]:zM(e)===!0?Number(e):N5.test(e)?new Date(e):e}a(B5,"autoCast");function jM(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(jM,"autoCastJSON");function Qg(e){if(e&&typeof e=="object"){if(Array.isArray(e))for(let t=0,r=e.length;t<r;t++){let n=e[t],s=Qg(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=Qg(r);n!==r&&(e[t]=n)}return e}else return jM(e)}a(Qg,"autoCastJSONDeep");function zM(e){if(e.startsWith("0.")&&VM(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&VM(e))}a(zM,"autoCasterIsNumberCheck");async function H5(e){if(Us(e))throw new Error(`Directory path: ${e} does not exist`);try{await kM.emptyDir(e),await kM.remove(e)}catch(t){throw Cr.error(`Error removing files in ${e} -- ${t}`),t}}a(H5,"removeDir");function q5(e,t){if(Us(e)){Cr.info("Invalid current version sent as parameter.");return}if(Us(t)){Cr.info("Invalid upgrade version sent as parameter.");return}let r,n=/(\.0+)+$/,s=e.version?e.version:e,i=t.version?t.version:t,o=s.replace(n,"").split("."),c=i.replace(n,"").split("."),l=Math.min(o.length,c.length);for(let _=0;_<l;_++)if(r=parseInt(o[_],10)-parseInt(c[_],10),r)return r;return o.length-c.length}a(q5,"compareVersions");function G5(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(G5,"isCompatibleDataVersion");function x5(e){if(_n(e))return e;let t=String(e);return t==="."?at.UNICODE_PERIOD:t===".."?at.UNICODE_PERIOD+at.UNICODE_PERIOD:t.replace(at.FORWARD_SLASH_REGEX,at.UNICODE_FORWARD_SLASH)}a(x5,"escapeRawValue");function F5(e){if(_n(e))return e;let t=String(e);return t===at.UNICODE_PERIOD?".":t===at.UNICODE_PERIOD+at.UNICODE_PERIOD?"..":String(e).replace(at.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(F5,"unescapeValue");function k5(e,t){if(_n(e))return Cr.info("Properties object is null"),"";let r="";return e.each(function(n,s){try{if(t&&t[n]){let i=t[n];for(let o of i)r+=";"+o+LE.EOL}!Us(n)&&n[0]===";"?r+=" "+n+s+LE.EOL:Us(n)||(r+=n+"="+s+LE.EOL)}catch{Cr.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(k5,"stringifyProps");function JM(){let e;try{e=LE.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(JM,"getHomeDir");function $5(){let e=so.join(JM(),at.HDB_HOME_DIR_NAME,at.BOOT_PROPS_FILE_NAME);return KM.existsSync(e)||(e=so.join(__dirname,"../","hdb_boot_properties.file")),e}a($5,"getPropsFilePath");function V5(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:function(){clearTimeout(r)}}}a(V5,"timeoutPromise");async function Y5(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=m5.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a(Y5,"isPortTaken");function K5(e){try{return at.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){Cr.error(`Error checking operation against cluster ops ${t}`)}return!1}a(K5,"isClusterOperation");function W5(e,t){let r=(ge(),oe(Fe)).getDatabases();if(!r[e])return PE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return PE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(W5,"checkGlobalSchemaTable");function Q5(e,t){if(_n(t)){Cr.warn("No CLUSTERING_USER defined, clustering disabled");return}if(_n(e)||Us(e)){Cr.warn("No users to search.");return}let r;try{let n=e.get(t);n&&n.role.permission.cluster_user===!0&&n.active===!0&&(r=n)}catch(n){Cr.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){Cr.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(Q5,"getClusterUser");function j5(){$M.parsePromise=function(e,t,r){return new Promise(function(n,s){$M.parse(e,{header:!0,transformHeader:XM,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(j5,"promisifyPapaParse");function XM(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(XM,"removeBOM");function z5(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;Cr.info(`Got cluster status event response: ${g5(s)}`);try{i.cancel()}catch{Cr.error("Error trying to cancel timeout.")}n(s)})})}a(z5,"createEventPromise");async function J5(e){let t=!0,r=0;do await WM(b5*r++),(await T5.findPs(e)).length>0&&(t=!1);while(t&&r<y5);if(t)throw new Error(`process ${e} was not started`)}a(J5,"checkProcessRunning");function X5(e,t){let r=ZM(e);if(r)return r;let n=eU(e,t);if(n)return n}a(X5,"checkSchemaTableExist");function ZM(e){let{getDatabases:t}=(ge(),oe(Fe));if(!t()[e])return PE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(ZM,"checkSchemaExists");function eU(e,t){let{getDatabases:r}=(ge(),oe(Fe));if(!r()[e][t])return PE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(eU,"checkTableExists");function Z5(){let e=DE().utc().add(1,at.MOMENT_DAYS_TAG).startOf(at.MOMENT_DAYS_TAG).unix(),t=DE().utc().unix();return e-t}a(Z5,"getStartOfTomorrowInSeconds");function e6(){return DE().utc().format("DD-MM-YYYY")}a(e6,"getLimitKey");function t6(e){try{let t=new S5(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(t6,"backtickASTSchemaItems");function r6(e){return[e]}a(r6,"createForkArgs");function n6(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(n6,"autoCastBoolean");function s6(e,t){let{getDatabases:r}=(ge(),oe(Fe)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(s6,"getTableHashAttribute");function i6(e){let{getDatabases:t}=(ge(),oe(Fe));return t()[e]!==void 0}a(i6,"doesSchemaExist");function o6(e,t){let{getDatabases:r}=(ge(),oe(Fe));return r()[e]?.[t]!==void 0}a(o6,"doesTableExist");function a6(e){try{return JSON.stringify(e)}catch{return e}}a(a6,"stringifyObj");function c6(e){let t=DE.duration(e),r=t.seconds()>0?t.seconds()+"s":"",n=t.minutes()>0?t.minutes()+"m ":"",s=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+s+n+r}a(c6,"ms_to_time");function l6(e,t){let r=so.basename(e,so.extname(e));return so.join(so.dirname(e),r+t)}a(l6,"changeExtension");function jg(){if(process.env[at.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[at.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=R5(process.argv);if(e[at.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[at.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(jg,"getEnvCliRootPath");var Wg;function u6(){if(Wg)return Wg;let e=jg();jg()&&KM.pathExistsSync(so.join(e,at.HDB_CONFIG_FILE))&&(Wg=!0)}a(u6,"noBootFile");function _6(e,t){let r;return e.protocol==="http:"?r=O5:r=A5,new Promise((n,s)=>{let i=r.request(e,o=>{o.setEncoding("utf8");let c={body:"",headers:o.headers};o.on("data",l=>{c.body+=l}),o.on("end",()=>{n(c)})});i.on("error",o=>{s(o)}),i.write(JSON.stringify(t)),i.end()})}a(_6,"httpRequest");function d6(e){if(!e.schema&&!e.database){e.schema=at.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(d6,"transformReq");function f6(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(f6,"convertToMS")});var X=T((Zge,iU)=>{"use strict";var zg=require("fs-extra"),da=require("path"),rU=require("os"),E6=require("properties-reader"),Wu=x(),Ku=K(),_e=C(),ME=Et(),h6="Error initializing environment manager",UE="BOOT_PROPS_FILE_PATH",nU=!1,p6={[_e.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},_i={};iU.exports={BOOT_PROPS_FILE_PATH:UE,getHdbBasePath:m6,setHdbBasePath:S6,get:sU,initSync:g6,setProperty:ve,initTestEnvironment:R6};function m6(){return _i[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(m6,"getHdbBasePath");function S6(e){_i[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(S6,"setHdbBasePath");function sU(e){let t=ME.getConfigValue(e);return t===void 0?_i[e]:t}a(sU,"get");function ve(e,t){p6[e]&&(_i[e]=t),ME.updateConfigObject(e,t)}a(ve,"setProperty");function T6(){let e;try{e=Ku.getPropsFilePath(),zg.accessSync(e,zg.constants.F_OK|zg.constants.R_OK),nU=!0;let t=E6(e);return _i[_e.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(_e.HDB_SETTINGS_NAMES.INSTALL_USER),_i[_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),_i[UE]=e,!0}catch{return Wu.trace(`Environment manager found no properties file at ${e}`),!1}}a(T6,"doesPropFileExist");function g6(e=!1){try{(nU||T6()||Ku.noBootFile())&&(ME.initConfig(e),_i[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=ME.getConfigValue(_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Wu.error(h6),Wu.error(t),console.error(t),process.exit(1)}}a(g6,"initSync");function R6(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:n,https_enabled:s,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,l=da.join(__dirname,"../../","unitTests");_i[UE]=da.join(l,"hdb_boot_properties.file"),ve(_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,da.join(l,"settings.test")),ve(_e.HDB_SETTINGS_NAMES.INSTALL_USER,rU.userInfo()?rU.userInfo().username:void 0),ve(_e.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),ve(_e.HDB_SETTINGS_NAMES.LOG_PATH_KEY,da.join(l,"envDir","log")),ve(_e.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),ve(_e.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),ve(_e.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),ve(_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,da.join(l,"envDir")),ve(_e.CONFIG_PARAMS.STORAGE_PATH,da.join(l,"envDir")),s&&(ve(_e.CONFIG_PARAMS.HTTP_SECUREPORT,sU(_e.CONFIG_PARAMS.HTTP_PORT)),ve(_e.CONFIG_PARAMS.HTTP_PORT,null)),ve(_e.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),ve(_e.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),ve(_e.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Ku.isEmpty(i)?!1:i),ve(_e.CONFIG_PARAMS.HTTP_CORS,Ku.isEmpty(i)?!1:i),ve(_e.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),ve(_e.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),ve(_e.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),ve(_e.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),ve(_e.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,da.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),ve(_e.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Ku.isEmpty(c)?!1:c),o&&(ve("CORS_ACCESSLIST",o),ve(_e.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(ve(_e.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),ve(_e.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(ve(_e.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),ve(_e.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(ve(_e.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),ve(_e.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${UE}. Please check your boot props and settings files`;Wu.fatal(r),Wu.error(t)}}a(R6,"initTestEnvironment")});var Zg={};$e(Zg,{loadGQLSchema:()=>N6,start:()=>Xg,startOnMainThread:()=>O6});function Xg({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:l,NamedTypeNode:_,StringValueNode:u}=await import("graphql"),d=o(new c(r.toString(),s)),f=new Map,E=[],h;for(let S of d.definitions)switch(S.kind){case l.OBJECT_TYPE_DEFINITION:let v=function(U){if(U.kind==="NonNullType"){let j=v(U.type);return j.nullable=!1,j}if(U.kind==="ListType")return{type:"array",elements:v(U.type)};let H={type:U.name?.value};return Object.defineProperty(H,"location",{value:U.loc.startToken}),H};a(v,"getProperty");let R=S.name.value,g=[],A={table:null,database:null,properties:g};f.set(R,A);for(let U of S.directives){if(U.name.value==="table"){for(let F of U.arguments)A[F.name.value]=F.value.value;A.schema&&(A.database=A.schema),A.table||(A.table=R),A.audit&&(A.audit=A.audit!=="false"),A.attributes=A.properties,E.push(A)}if(U.name.value==="sealed"&&(A.sealed=!0),U.name.value==="export"){A.export=!0;for(let F of U.arguments)F.name.value==="name"&&(A.export={name:F.value.value})}}let P=!1;for(let U of S.fields){let F=v(U.type);F.name=U.name.value,g.push(F);for(let H of U.directives)if(H.name.value==="primaryKey")P?console.warn("Can not define two attributes as a primary key"):(F.isPrimaryKey=!0,P=!0);else if(H.name.value==="indexed")F.indexed=!0;else if(H.name.value==="relationship"){let j={};for(let z of H.arguments)j[z.name.value]=z.value.value;F.relationship=j}else if(H.name.value==="createdTime")F.assignCreatedTime=!0;else if(H.name.value==="updatedTime")F.assignUpdatedTime=!0;else if(H.name.value==="expiresAt")F.expiresAt=!0;else if(H.name.value==="allow"){let j=F.authorizedRoles=[];for(let z of H.arguments)z.name.value==="role"&&j.push(z.value.value)}}A.type=R,R==="Query"&&(h=A)}function m(S){let R=f.get(S.type);R?(Object.defineProperty(S,"properties",{value:R.properties}),Object.defineProperty(S,"definition",{value:R})):S.type==="array"?m(S.elements):A6.includes(S.type)||(0,oU.getWorkerIndex)()===0&&console.error(`The type ${S.type} is unknown at line ${S.location.line}, column ${S.location.column}, in ${s}`)}a(m,"connectPropertyType");for(let S of f.values())for(let R of S.properties)m(R);for(let S of E)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,Jg.dirname)(n),S.tableClass):i.set((0,Jg.dirname)(n)+"/"+(S.export.name||S.type),S.tableClass))}}var Jg,oU,A6,O6,N6,aU=Ne(()=>{Jg=require("path");ge();oU=q(tt()),A6=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];a(Xg,"start");O6=Xg,N6=Xg({ensureTable:ft}).handleFile});async function vE(e){return b6?(Qu||(Qu=y6(w6)),(await(await Qu).import(e)).namespace):import(e)}async function y6(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Qu=new Compartment({console,Math,Date,fetch:I6,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,lU.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){Object.assign(s,{Resource:jt,tables:ln,databases:ot})}};let n=await(0,cU.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)}}),Qu}function I6(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 w6(){return{Resource:jt,tables:ln}}var cU,lU,b6,Qu,eR=Ne(()=>{Qn();ge();cU=require("fs/promises"),lU=require("path"),b6=!1;a(vE,"secureImport");a(y6,"getCompartment");a(I6,"secureOnlyFetch");a(w6,"getGlobalVars")});var rR={};$e(rR,{handleFile:()=>C6});async function C6(e,t,r,n){let s=new Map,i=(0,uU.pathToFileURL)(r).toString(),o=await vE(i);l(o.default)&&n.set((0,tR.dirname)(t),o.default),c(o,(0,tR.dirname)(t));function c(_,u){for(let d in _){let f=_[d];l(f)?n.set(u+"/"+d,f):typeof f=="object"&&c(f,u+"/"+d)}}a(c,"recurseForResources");function l(_){return typeof _=="function"&&(_.get||_.put||_.post||_.delete)}return a(l,"isResource"),s}var uU,tR,_U=Ne(()=>{uU=require("url");eR();tR=require("path");a(C6,"handleFile")});var sR={};$e(sR,{start:()=>L6});function L6({resources:e}){e.set("login",nR),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var nR,dU=Ne(()=>{Qn();a(L6,"start");nR=class extends jt{static{a(this,"Login")}static async get(t,r,n){}static async post(t,r,n){let{username:s,password:i,redirect:o}=r;return{data:await n.login(s,i)}}}});var TU={};$e(TU,{parse:()=>oR,streamAsJSON:()=>ju,stringify:()=>fa});function ju(e){return new iR({value:e})}function fU(e){return console.error(e),JSON.stringify(e.toString())}function EU(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function fa(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===mU)return SU(e);if(t.resolution)return t.resolution.then(()=>fa(e));throw t}}function SU(e){let t=typeof e;if(t==="object"){if(e===null)return"null";e.toJSON&&(e=e.toJSON());let r;if(Array.isArray(e)){r="[";for(let n=0;n<e.length;n++)n>0&&(r+=","),r+=SU(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+fa(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function oR(e){return M6.test(e)?D6.parse(e):JSON.parse(e)}var hU,pU,D6,P6,mU,iR,M6,aR=Ne(()=>{hU=require("stream"),pU=q(require("json-bigint-fixes")),D6=(0,pU.default)({useNativeBigInt:!0}),P6=1e4,mU={};BigInt.prototype.toJSON=function(){throw mU};a(ju,"streamAsJSON");iR=class extends hU.Readable{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],n=t[Symbol.iterator];if((n||r)&&!t.then){yield"[";let s=!0;if((r||n)&&!(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 s?s=!1:yield",",yield*this.serialize(o.value)}for(let i of t)s?s=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(s=>this.serialize(s),fU)}catch(s){yield fU(s)}else yield fa(t)}else yield fa(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);EU(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>P6?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 EU(this.readIterator(t.childIterator),n=>{if(n)return t.childIterator=null,this.readIterator(t)});do{let n=t.next();if(n.done)return!0;if(r=n.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(s=>{if(s&&typeof s.return=="function")return t.childIterator=s,this.readIterator(t);if(this.push(s+""))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 n of this.activeIterators)t?n.throw(t):n.return();r()}};a(fU,"handleError");a(EU,"when");a(fa,"stringify");a(SU,"jsStringify");M6=/-?\d{16,}/;a(oR,"parse")});var BE=T((dRe,gU)=>{"use strict";var U6=Cn();gU.exports={writeTransaction:v6};function v6(e,t,r){return U6.writeTransaction(e,t,r)}a(v6,"writeTransaction")});var NU=T((hRe,OU)=>{"use strict";var B6=nr(),H6=Ln(),RU=x(),q6=br(),ERe=BE(),G6=require("clone"),lR=require("alasql"),x6=Wf(),AU=require("util"),F6=AU.promisify(H6.getTableSchema),k6=AU.promisify(B6.search),$6=C(),cR=K();x6(lR);OU.exports={update:Y6};var V6="There was a problem performing this update. Please check the logs and try again.";async function Y6({statement:e,hdb_user:t}){let r=await F6(e.table.databaseid,e.table.tableid),n=K6(e.columns);cR.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=G6(s),c=cR.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,_=lR.parse(l).statements[0],u=await k6(_),d=W6(n,u);return Q6(o,d,t)}a(Y6,"update");function K6(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=lR.compile(`SELECT ${r.expression.toString()} AS [${$6.FUNC_VAL}] FROM ?`)}),t}catch(t){throw RU.error(t),new Error(V6)}}a(K6,"createUpdateRecord");function W6(e,t){return cR.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(W6,"buildUpdateRecords");async function Q6(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await q6.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){RU.error(`Error delete new_attributes from update response: ${i}`)}return s}a(Q6,"updateRecords")});var yU=T((TRe,bU)=>{var j6=require("alasql"),z6=nr(),J6=x(),X6=Cn(),_R=require("util"),uR=K(),Z6=C(),e8=Ln(),mRe=BE(),SRe=br(),t8="record",r8="successfully deleted",n8=_R.callbackify(a8),s8=_R.promisify(z6.search),i8=_R.promisify(e8.getTableSchema);bU.exports={convertDelete:n8};function o8(e){return`${e.deleted_hashes.length} ${t8}${e.deleted_hashes.length===1?"":"s"} ${r8}`}a(o8,"generateReturnMessage");async function a8({statement:e,hdb_user:t}){let r=await i8(e.table.databaseid,e.table.tableid);uR.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=uR.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=j6.parse(o).statements[0],l={operation:Z6.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await s8(c);let _=await X6.deleteRecords(l);return uR.isEmptyOrZeroLength(_.message)&&(_.message=o8(_)),delete _.txn_time,_}catch(_){throw J6.error(_),_.hdb_code?_.message:_}}a(a8,"convertDelete")});var DU=T((RRe,LU)=>{"use strict";var c8=zi(),{hdb_errors:IU}=ie(),{getDatabases:wU}=(ge(),oe(Fe));LU.exports={checkSchemaExists:CU,checkSchemaTableExists:l8,schema_describe:c8};async function CU(e){if(!wU()[e])return IU.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(CU,"checkSchemaExists");async function l8(e,t){let r=await CU(e);if(r)return r;if(!wU()[e][t])return IU.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(l8,"checkSchemaTableExists")});var mR=T((bRe,FU)=>{"use strict";var{decode:u8}=require("msgpackr"),{isMainThread:ORe,parentPort:_8,threadId:NRe}=require("worker_threads"),zu=ht(),Cc=et(),ER=C(),ar=x(),fR=X(),MU=C(),{onMessageByType:d8}=tt(),UU=li(),{recordAction:f8,recordActionBinary:E8}=(ui(),oe(Mu)),{publishToStream:h8}=zu,{ConsumerEvents:p8}=require("nats"),m8=nr(),{promisify:S8}=require("util"),vU=S8(setTimeout),GE=1e4,xE,qE,T8,g8,BU,Ju=new Map,Lc=new Map;FU.exports={initialize:hR,ingestConsumer:pR,setSubscription:R8,setIgnoreOrigin:N8,getDatabaseSubscriptions:O8,updateConsumer:HU};async function hR(){d8(ER.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await HU(n)}),BU=!0,ar.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await zu.getNATSReferences();xE=e,qE=e.info.server_name,T8=t,g8=r}a(hR,"initialize");async function HU(e){if(e.status==="start"){let{js:t,jsm:r}=await qU(e.node_domain_name);pR(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=Ju.get(e.stream_name+e.node_domain_name);t&&(ar.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),Ju.set(e.stream_name+e.node_domain_name,"close")),Lc.get(e.node_domain_name)==="failed"&&Lc.set(e.node_domain_name,"close")}}a(HU,"updateConsumer");var FE=new Map;function R8(e,t,r){let n=FE.get(e);n||FE.set(e,n=new Map),n.set(t,r),BU||hR().then(A8)}a(R8,"setSubscription");async function A8(){let e=await m8.searchByValue({database:"system",table:"hdb_nodes",search_attribute:"name",search_value:"*"});for await(let t of e){let r=t.name+Cc.SERVER_SUFFIX.LEAF,{js:n,jsm:s}=await qU(r);if(s){for(let i of t.subscriptions)if(i.subscribe===!0){let{schema:o,table:c}=i,l=UU.createNatsTableStreamName(o,c);pR(l,n,s,r)}}}}a(A8,"accessConsumers");async function qU(e){let t,r,n=1;for(;!r;)try{t=await xE.jetstream({domain:e,timeout:6e4}),r=await xE.jetstreamManager({domain:e,timeout:6e4})}catch(s){if(Lc.get(e)==="close")break;Lc.set(e,"failed"),n%10===1&&ar.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<GE?n++*100:GE;await vU(i)}return{js:t,jsm:r}}a(qU,"connectToRemoteJS");function O8(){return FE}a(O8,"getDatabaseSubscriptions");var GU;function N8(e){GU=e}a(N8,"setIgnoreOrigin");var xU=100,PU=new Array(xU),HE=0;async function pR(e,t,r,n){let{connection:s}=await zu.getNATSReferences();xE=s,qE=s.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,qE),ar.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(_){if(Lc.get(n)==="close")break;o%10===1&&ar.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",_.message),_.code==="404"&&(ar.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await zu.createConsumer(r,e,qE,new Date(Date.now()).toISOString()));let u=o++*100<GE?o++*100:GE;await vU(u)}let c=!1,l;for(_8?.on("message",async _=>{let{type:u}=_;u===MU.ITC_EVENT_TYPES.SHUTDOWN&&(c=!0,l&&l.close?.()&&l.close())});!c;){if(Ju.get(e+n)==="close"||Lc.get(n)==="close"){Ju.delete(e+n),c=!0;continue}l=await i.consume({max_messages:fR.get(ER.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100}),Ju.set(e+n,l);let _=!1;(async()=>{for await(let u of await l.status())if(u.type===p8.HeartbeatsMissed){let d=u.data;ar.trace(`${d} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),d===2&&(ar.warn(`Restarting clustering ingest consumer due to missed heartbeat threshold being met, node: ${n} stream: ${l.consumer.stream}`),l.stop(),_=!0)}})();try{for await(let u of l)await PU[HE],PU[HE]=b8(u).catch(d=>{ar.error(d)}),++HE>=xU&&(HE=0)}catch(u){u.message==="consumer deleted"?(ar.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):ar.error("Error consuming clustering ingest, restarting consumer",u)}zu.clearClientCache(),!c&&_&&await hR()}}a(pR,"ingestConsumer");async function b8(e){let t=u8(e.data);f8(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),ar.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=fR.get(ER.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Cc.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Cc.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(Cc.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!GU),E8(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(Cc.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:l,table:_,records:u,hash_values:d,__origin:f,expiresAt:E}=t;ar.trace("processing message:",o,c,_,(u?"records: "+u.map(P=>P?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),ar.trace(`messageProcessor nats msg id: ${e.headers.get(Cc.MSG_HEADERS.NATS_MSG_ID)}`);let h;u||(u=d);let m=new Promise(P=>h=P),{timestamp:S,user:R,node_name:g}=f||{},A=FE.get(c)?.get(_);if(!A)throw new Error("Missing table for replication message",_);if(o==="define_schema")t.type=o,t.onCommit=h,A.send(t);else if(u.length===1&&!l)A.send({type:dR(o),value:u[0],id:d?.[0],expiresAt:E,timestamp:S,table:_,onCommit:h,user:R,nodeName:g});else{let P=u.map((v,U)=>({type:dR(o),value:v,expiresAt:E,id:d?.[U],table:_}));for(;l;)P.push({type:dR(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;A.send({type:"transaction",writes:P,table:_,timestamp:S,onCommit:h,user:R,nodeName:g})}fR.get(MU.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&h8(e.subject.split(".").slice(0,-1).join("."),UU.createNatsTableStreamName(c,_),e.headers,e.data),await m}catch(o){ar.error(o)}e.ack()}a(b8,"messageProcessor");function dR(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(dR,"convertOperation")});var ht=T((PRe,sv)=>{"use strict";var kt=X();kt.initSync();var y8=require("fs-extra"),I8=require("semver"),e_=require("path"),{monotonicFactory:w8}=require("ulidx"),$U=w8(),C8=require("util"),VU=require("child_process"),L8=C8.promisify(VU.exec),D8=VU.spawn,Jt=et(),De=C(),kE=K(),cs=x(),$E=li(),P8=BE(),Xu=Et(),{broadcast:M8,onMessageByType:U8,getWorkerIndex:v8}=tt(),{isMainThread:YU}=require("worker_threads"),{Encoder:B8,decode:RR}=require("msgpackr"),KU=new B8,{isEmpty:ma}=kE,WU=wr(),IRe=48*36e11;YU&&U8(De.ITC_EVENT_TYPES.RESTART,()=>{Lr=void 0,pa=void 0});var{connect:H8,StorageType:q8,RetentionPolicy:G8,AckPolicy:AR,DeliverPolicy:OR,DiscardPolicy:x8,NatsConnection:wRe,JetStreamManager:CRe,JetStreamClient:LRe,StringCodec:DRe,JSONCodec:F8,createInbox:NR,headers:k8,ErrorCode:kU}=require("nats"),{PACKAGE_ROOT:$8}=C(),V8=Bo(),{recordAction:Y8}=(ui(),oe(Mu)),QU=F8(),K8="clustering",W8=V8.engines[Jt.NATS_SERVER_NAME],Q8=e_.join($8,"dependencies"),gR=e_.join(Q8,`${process.platform}-${process.arch}`,Jt.NATS_BINARY_NAME),SR,TR,Zu,Ea,ha;sv.exports={runCommand:jU,checkNATSServerInstalled:j8,createConnection:bR,getConnection:VE,getJetStreamManager:t_,getJetStream:JU,getNATSReferences:ls,getServerList:J8,createLocalStream:yR,listStreams:XU,deleteLocalStream:X8,getServerConfig:r_,listRemoteStreams:Z8,viewStream:e9,viewStreamIterator:t9,publishToStream:r9,request:i9,reloadNATS:IR,reloadNATSHub:o9,reloadNATSLeaf:a9,extractServerName:s9,requestErrorHandler:c9,createLocalTableStream:rv,createTableStreams:_9,purgeTableStream:nv,purgeSchemaTableStreams:d9,getStreamInfo:f9,updateLocalStreams:h9,closeConnection:z8,getJsmServerName:YE,addNatsMsgHeader:ZU,clearClientCache:zU,updateRemoteConsumer:l9,createConsumer:ev,updateConsumerIterator:u9};async function jU(e,t=void 0){let{stdout:r,stderr:n}=await L8(e,{cwd:t});if(n)throw new Error(n.replace(`
|
|
10
10
|
`,""));return r.replace(`
|
|
11
|
-
`,"")}a(fU,"runCommand");async function t6(){try{await M8.access(Jg)}catch{return!1}let e=await fU(`${Jg} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return U8.eq(t,Z8)}a(t6,"checkNATSServerInstalled");async function tR(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await lU.getClusterUser();if(ha(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}dn.trace("create nats connection called");let i=await Y8({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:Jt.get(Ue.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Jt.get(Ue.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Jt.get(Ue.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),dn.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&dn.error("Error with Nats client connection, connection closed",o),EU()}),i}a(tR,"createConnection");function EU(){Pn=void 0,da=void 0,fa=void 0,Ea=void 0}a(EU,"clearClientCache");async function r6(){Pn&&(await Pn.drain(),Pn=void 0,da=void 0,fa=void 0,Ea=void 0)}a(r6,"closeConnection");var Pn,Ea;async function ME(){return Ea||(Ea=tR(Jt.get(Ue.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),Pn=await Ea),Pn||Ea}a(ME,"getConnection");async function Xu(){if(da)return da;ha(Pn)&&await ME();let{domain:e}=Zu(Ue.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(ha(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return da=await Pn.jetstreamManager({domain:e,timeout:6e4}),da}a(Xu,"getJetStreamManager");async function hU(){if(fa)return fa;ha(Pn)&&await ME();let{domain:e}=Zu(Ue.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(ha(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return fa=Pn.jetstream({domain:e,timeout:6e4}),fa}a(hU,"getJetStream");async function wr(){let e=Pn||await ME(),t=da||await Xu(),r=fa||await hU();return{connection:e,jsm:t,js:r}}a(wr,"getNATSReferences");async function n6(e){let t=Jt.get(Ue.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await lU.getClusterUser(),s=await tR(t,r,n),i=eR(),o=s.subscribe(i),c=[],l,_=(async()=>{for await(let u of o){let d=dU.decode(u.data);d.response_time=Date.now()-l,c.push(d)}})();return l=Date.now(),await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await s.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await s.flush(),await Xg.async_set_timeout(e),await o.drain(),await s.close(),await _,c}a(n6,"getServerList");async function rR(e,t){let{jsm:r}=await wr(),n=Jt.get(Ue.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Jt.get(Ue.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=Jt.get(Ue.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:uU.File,retention:_U.Limits,subjects:t,discard:K8.Old,max_msgs:s,max_bytes:i,max_age:n})}a(rR,"createLocalStream");async function mU(){let{jsm:e}=await wr(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(mU,"listStreams");async function s6(e){let{jsm:t}=await wr();await t.streams.delete(e)}a(s6,"deleteLocalStream");async function i6(e){let{connection:t}=await wr(),r=[],n=eR(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(dU.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:n}),await t.flush(),await s.drain(),await i,r}a(i6,"listRemoteStreams");async function o6(e,t=void 0,r=void 0){let{jsm:n,js:s}=await wr(),i=oU(),o={durable_name:i,ack_policy:DE.Explicit};t&&(o.deliver_policy=PE.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let _=[];for await(let u of l){let d=Zg(u.data),f={nats_timestamp:u.info.timestampNanos,nats_sequence:u.info.streamSequence,entry:d};if(u.headers&&(f.origin=u.headers.get(ye.MSG_HEADERS.ORIGIN)),_.push(f),u.ack(),u.info.pending===0)break}return await c.delete(),_}a(o6,"viewStream");async function*a6(e,t=void 0,r=void 0){let{jsm:n,js:s}=await wr(),i=oU(),o={durable_name:i,ack_policy:DE.Explicit};t&&(o.deliver_policy=PE.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let _ of l){let u=Zg(_.data);u[0]||(u=[u]);for(let d of u){let f={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};_.headers&&(f.origin=_.headers.get(ye.MSG_HEADERS.ORIGIN)),yield f}if(_.ack(),_.info.pending===0)break}await c.delete()}a(a6,"viewStreamIterator");async function c6(e,t,r,n){dn.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=pU(n,r);let{js:s}=await wr(),i=await e_(),o=`${e}.${i}`,c=n instanceof Uint8Array?n:cU.encode(n);try{dn.trace(`publishToStream publishing to subject: ${o}`),J8(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(o,c,{headers:r})}catch(l){if(l.code&&l.code.toString()==="503")return RU(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){dn.trace(`publishToStream creating stream: ${t}`);let u=o.split(".");u[2]="*",await rR(t,[o]),await s.publish(o,c,{headers:r})}else throw l}});throw l}}a(c6,"publishToStream");function pU(e,t){t===void 0&&(t=Q8());let r=Jt.get(Ue.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(ye.MSG_HEADERS.ORIGIN)&&r&&t.append(ye.MSG_HEADERS.ORIGIN,r),t}a(pU,"addNatsMsgHeader");function Zu(e){e=e.toLowerCase();let t=Ju.join(Jt.get(Ue.CONFIG_PARAMS.ROOTPATH),X8);if(e===Ue.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return ha(zg)&&(zg={port:ju.getConfigFromFile(Ue.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:ju.getConfigFromFile(Ue.CONFIG_PARAMS.CLUSTERING_NODENAME)+ye.SERVER_SUFFIX.HUB,config_file:ye.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Ju.join(t,ye.PID_FILES.HUB),hdb_nats_path:t}),zg;if(e===Ue.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return ha(jg)&&(jg={port:ju.getConfigFromFile(Ue.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:ju.getConfigFromFile(Ue.CONFIG_PARAMS.CLUSTERING_NODENAME)+ye.SERVER_SUFFIX.LEAF,config_file:ye.NATS_CONFIG_FILES.LEAF_SERVER,domain:ju.getConfigFromFile(Ue.CONFIG_PARAMS.CLUSTERING_NODENAME)+ye.SERVER_SUFFIX.LEAF,pid_file_path:Ju.join(t,ye.PID_FILES.LEAF),hdb_nats_path:t}),jg;dn.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Zu,"getServerConfig");async function l6(e){let{jsm:t}=await wr(),r=await e_();try{await t.streams.add({name:e.stream_name,storage:uU.File,retention:_U.Limits,max_age:$8,max_bytes:V8,subjects:[`${ye.SUBJECT_PREFIXES.TXN}.${e.stream_name}.${r}`]})}catch(n){if(n.code!=="400")throw n}try{await t.consumers.info(e.stream_name,e.durable_name)}catch(n){if(n.code.toString()==="404")await t.consumers.add(e.stream_name,{ack_policy:DE.Explicit,durable_name:e.durable_name,deliver_policy:PE.All,max_ack_pending:1e4});else throw n}}a(l6,"createWorkQueueStream");async function u6(){let{jsm:e}=await wr();(await e.consumers.info(ye.WORK_QUEUE_CONSUMER_NAMES.stream_name,ye.WORK_QUEUE_CONSUMER_NAMES.durable_name)).config.deliver_subject&&(dn.info("Removing old nats push consumer from ingest stream"),await e.consumers.delete(ye.WORK_QUEUE_CONSUMER_NAMES.stream_name,ye.WORK_QUEUE_CONSUMER_NAMES.durable_name),dn.info("Adding pull consumer to ingest stream"),await e.consumers.add(ye.WORK_QUEUE_CONSUMER_NAMES.stream_name,{ack_policy:DE.Explicit,durable_name:ye.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:PE.All,max_ack_pending:1e4}))}a(u6,"updateIngestStreamConsumer");async function SU(e,t,r){let{jsm:n}=await wr(),s=await n.streams.info(t),i=TU(n.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:l}=r,_=LE.createNatsTableStreamName(c,l),u=i===e,d,f,E=!1;if(!Array.isArray(s.config.sources)||s.config.sources.length===0)s.config.sources=[];else for(let p=0,S=s.config.sources.length;p<S;p++)if(d=s.config.sources[p],f=p,u&&d.name===_||!u&&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}.${l}.${e}`;await n.streams.purge(t,{filter:p}),s.config.sources.splice(f,1),await n.streams.update(t,s.config)}let h={name:_,opt_start_time:o,filter_subject:`${ye.SUBJECT_PREFIXES.TXN}.>`};u||(h.external={api:`$JS.${e}.API`,deliver:""}),s.config.sources.push(h),await n.streams.update(t,s.config)}a(SU,"addSourceToWorkStream");function TU(e){return e.split(".")[1]}a(TU,"extractServerName");async function gU(e,t,r){let{jsm:n}=await wr(),{schema:s,table:i}=r,o=`txn.${s}.${i}.${e}`;await n.streams.purge(t,{filter:o});let c=LE.createNatsTableStreamName(s,i),l=await n.streams.info(t);if(!Array.isArray(l.config.sources)||l.config.sources.length===0)return;let _=l.config.sources.length,u;for(;_--;)if(u=l.config.sources[_],u.name===c&&u.external.api===`$JS.${e}.API`){l.config.sources.splice(_,1);break}await n.streams.update(t,l.config)}a(gU,"removeSourceFromWorkStream");async function _6(e,t,r=6e4,n=eR()){if(!Xg.isObject(t))throw new Error("data param must be an object");let s=cU.encode(t),{connection:i}=await wr(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return Zg(c.data)}a(_6,"request");function nR(e){return new Promise(async(t,r)=>{let n=q8(Jg,["--signal",`reload=${e}`],{cwd:__dirname}),s,i;n.on("error",o=>{r(o)}),n.stdout.on("data",o=>{i+=o.toString()}),n.stderr.on("data",o=>{s+=o.toString()}),n.stderr.on("close",o=>{s&&r(s),t(i)})})}a(nR,"reloadNATS");async function d6(){let{pid_file_path:e}=Zu(Ue.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await nR(e)}a(d6,"reloadNATSHub");async function f6(){let{pid_file_path:e}=Zu(Ue.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await nR(e)}a(f6,"reloadNATSLeaf");function E6(e,t,r){let n;switch(e.code){case iU.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case iU.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(E6,"requestErrorHandler");async function h6(e,t){let r=t+ye.SERVER_SUFFIX.LEAF;await RU(async()=>{e.subscribe===!0?await SU(r,ye.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await gU(r,ye.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(h6,"updateWorkStream");function RU(e){return x8.writeTransaction(Ue.SYSTEM_SCHEMA_NAME,Ue.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(RU,"exclusiveLock");async function AU(e,t){let r=LE.createNatsTableStreamName(e,t),n=await e_(),s=T6(e,t,n);await rR(r,[s])}a(AU,"createLocalTableStream");async function m6(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await AU(n,s)}}a(m6,"createTableStreams");async function OU(e,t,r=!1){if(Jt.get(Ue.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=LE.createNatsTableStreamName(e,t),{jsm:s}=await wr();r?await s.streams.purge(ye.WORK_QUEUE_CONSUMER_NAMES.stream_name):await s.streams.purge(n)}catch(n){if(n.message==="stream not found")dn.warn(n);else throw n}}a(OU,"purgeTableStream");async function p6(e,t){if(Jt.get(Ue.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await OU(e,t[r])}a(p6,"purgeSchemaTableStreams");async function S6(e){return(await Xu()).streams.info(e)}a(S6,"getStreamInfo");function T6(e,t,r){return`${ye.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(T6,"createSubjectName");async function e_(){if(zu)return zu;if(zu=(await Xu())?.nc?.info?.server_name,zu===void 0)throw new Error("Unable to get jetstream manager server name");return zu}a(e_,"getJsmServerName");async function g6(){let e=await Xu(),t=await e_(),r=await mU();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=R6(n),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(s.name===ye.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let _=`${ye.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;dn.trace(`Updating stream subject name from: ${i} to: ${_}`),s.subjects[0]=_}else if(s.name===ye.WORK_QUEUE_CONSUMER_NAMES.stream_name){let _=`${ye.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;dn.trace(`Updating stream subject name from: ${i} to: ${_}`),s.subjects[0]=_}else{let _=i.split(".");_[_.length-1]=t;let u=_.join(".");dn.trace(`Updating stream subject name from: ${i} to: ${u}`),s.subjects[0]=u}await e.streams.update(s.name,s)}}}a(g6,"updateLocalStreams");function R6(e){let{config:t}=e,r=!1;if(t.name===ye.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===ye.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let n=Jt.get(Ue.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Jt.get(Ue.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=Jt.get(Ue.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,n!==t.max_age&&(t.max_age=n,r=!0),s!==t.max_bytes&&(t.max_bytes=s,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(R6,"updateStreamLimits")});var HE=T((Kge,wU)=>{"use strict";var Cc=Of(),Lc=sU(),A6=q(),O6=require("uuid").v4,Yge=require("clone"),vE=ii(),Dc=C(),N6=require("util"),ro=yn(),{handleHDBError:Cr,hdb_errors:b6}=te(),{HDB_ERROR_MSGS:UE,HTTP_STATUS_CODES:Lr}=b6,{SchemaEventMsg:BE}=Zn(),bU=Tt(),{getDatabases:y6}=(Re(),re(xe)),{transformReq:Pc}=Y();wU.exports={createSchema:I6,createSchemaStructure:yU,createTable:w6,createTableStructure:IU,createAttribute:M6,dropSchema:C6,dropTable:L6,dropAttribute:D6,getBackup:U6};async function I6(e){let t=await yU(e);return vE.signalSchemaChange(new BE(process.pid,e.operation,e.schema)),t}a(I6,"createSchema");async function yU(e){let t=Cc.schema_object(e);if(t)throw Cr(t,t.message,Lr.BAD_REQUEST,void 0,void 0,!0);if(Pc(e),!await Lc.checkSchemaExists(e.schema))throw Cr(new Error,UE.SCHEMA_EXISTS_ERR(e.schema),Lr.BAD_REQUEST,Dc.LOG_LEVELS.ERROR,UE.SCHEMA_EXISTS_ERR(e.schema),!0);return await ro.createSchema(e),`database '${e.schema}' successfully created`}a(yU,"createSchemaStructure");async function w6(e){return Pc(e),e.hash_attribute=e.primary_key??e.hash_attribute,await IU(e)}a(w6,"createTable");async function IU(e){let t=Cc.create_table_object(e);if(t)throw Cr(t,t.message,Lr.BAD_REQUEST,void 0,void 0,!0);if(Cc.validateTableResidence(e.residence),!await Lc.checkSchemaTableExists(e.schema,e.table))throw Cr(new Error,UE.TABLE_EXISTS_ERR(e.schema,e.table),Lr.BAD_REQUEST,Dc.LOG_LEVELS.ERROR,UE.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:O6(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await ro.createTable(n,e);else throw Cr(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Lr.BAD_REQUEST);else await ro.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(IU,"createTableStructure");async function C6(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=Cc.schema_object(e),n=t??r;if(n)throw Cr(n,n.message,Lr.BAD_REQUEST,void 0,void 0,!0);Pc(e);let s=await Lc.checkSchemaExists(e.schema);if(s)throw Cr(new Error,s,Lr.NOT_FOUND,Dc.LOG_LEVELS.ERROR,s,!0);let i=await Lc.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await ro.dropSchema(e),vE.signalSchemaChange(new BE(process.pid,e.operation,e.schema)),await bU.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(C6,"dropSchema");async function L6(e){let t=Cc.table_object(e);if(t)throw Cr(t,t.message,Lr.BAD_REQUEST,void 0,void 0,!0);Pc(e);let r=await Lc.checkSchemaTableExists(e.schema,e.table);if(r)throw Cr(new Error,r,Lr.NOT_FOUND,Dc.LOG_LEVELS.ERROR,r,!0);return await ro.dropTable(e),await bU.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(L6,"dropTable");async function D6(e){let t=Cc.attribute_object(e);if(t)throw Cr(t,t.message,Lr.BAD_REQUEST,void 0,void 0,!0);Pc(e);let r=await Lc.checkSchemaTableExists(e.schema,e.table);if(r)throw Cr(new Error,r,Lr.NOT_FOUND,Dc.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw Cr(new Error,"You cannot drop a hash attribute",Lr.BAD_REQUEST,void 0,void 0,!0);if(Dc.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw Cr(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Lr.BAD_REQUEST,void 0,void 0,!0);try{return await ro.dropAttribute(e),P6(e),vE.signalSchemaChange(new BE(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw A6.error(`Got an error deleting attribute ${N6.inspect(e)}.`),n}}a(D6,"dropAttribute");function P6(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(P6,"dropAttributeFromGlobal");async function M6(e){Pc(e);let t=y6()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw Cr(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Lr.BAD_REQUEST,void 0,void 0,!0);return await ro.createAttribute(e),vE.signalSchemaChange(new BE(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(M6,"createAttribute");function U6(e){return ro.getBackup(e)}a(U6,"getBackup")});var LU=T((Qge,CU)=>{"use strict";var{OPERATIONS_ENUM:v6}=C(),sR=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=v6.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};CU.exports=sR});var iR=T((Jge,vU)=>{"use strict";var B6=yn(),zge=LU(),qE=Y(),xE=C(),H6=J(),{handleHDBError:DU,hdb_errors:q6}=te(),{HDB_ERROR_MSGS:PU,HTTP_STATUS_CODES:MU}=q6,x6=Object.values(xE.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),UU="To use this operation audit log must be enabled in harperdb-config.yaml";vU.exports=G6;async function G6(e){if(qE.isEmpty(e.schema))throw new Error(PU.SCHEMA_REQUIRED_ERR);if(qE.isEmpty(e.table))throw new Error(PU.TABLE_REQUIRED_ERR);if(!H6.get(xE.CONFIG_PARAMS.LOGGING_AUDITLOG))throw DU(new Error,UU,MU.BAD_REQUEST,xE.LOG_LEVELS.ERROR,UU,!0);let t=qE.checkSchemaTableExist(e.schema,e.table);if(t)throw DU(new Error,t,MU.NOT_FOUND,xE.LOG_LEVELS.ERROR,t,!0);if(!qE.isEmpty(e.search_type)&&x6.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await B6.readAuditLog(e)}a(G6,"readAuditLog")});var HU=T((Zge,BU)=>{"use strict";var{OPERATIONS_ENUM:F6}=C(),oR=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=F6.GET_BACKUP,this.schema=t,this.table=r}};BU.exports=oR});var GU=T((nRe,xU)=>{"use strict";var k6=yn(),tRe=HU(),aR=Y(),$6=C(),rRe=J(),{handleHDBError:V6,hdb_errors:Y6}=te(),{HDB_ERROR_MSGS:qU,HTTP_STATUS_CODES:K6}=Y6;xU.exports=W6;async function W6(e){if(aR.isEmpty(e.schema))throw new Error(qU.SCHEMA_REQUIRED_ERR);if(aR.isEmpty(e.table))throw new Error(qU.TABLE_REQUIRED_ERR);let t=aR.checkSchemaTableExist(e.schema,e.table);if(t)throw V6(new Error,t,K6.NOT_FOUND,$6.LOG_LEVELS.ERROR,t,!0);return await k6.getBackup(read_audit_log_object)}a(W6,"getBackup")});var KU=T((iRe,YU)=>{var no=require("validate.js"),kU=rt(),Mc=C(),{handleHDBError:Q6,hdb_errors:j6}=te(),{HDB_ERROR_MSGS:gt,HTTP_STATUS_CODES:z6}=j6,cR=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),J6={STRUCTURE_USER:"structure_user"},FU=Object.values(Mc.ROLE_TYPES_ENUM),X6="attribute_permissions",Z6="attribute_name",{PERMS_CRUD_ENUM:Uc}=Mc,e9=[X6,...Object.values(Uc)],$U=[Uc.READ,Uc.INSERT,Uc.UPDATE],t9=[Z6,...$U];function r9(e){let t=cR();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,VU(e,t)}a(r9,"addRoleValidation");function n9(e){let t=cR();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,VU(e,t)}a(n9,"alterRoleValidation");function s9(e){let t=cR();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,kU.validateObject(e,t)}a(s9,"dropRoleValidation");var i9=["operation","role","id","permission","hdb_user","hdb_auth_header"];function VU(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)i9.includes(n[o])||s.push(n[o]);s.length>0&&yt(gt.INVALID_ROLE_JSON_KEYS(s),r);let i=kU.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{yt(o,r)}),e.permission){let o=o9(e);o&&yt(o,r),FU.forEach(c=>{e.permission[c]&&!no.isBoolean(e.permission[c])&&yt(gt.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(FU.indexOf(o)<0){if(o===J6.STRUCTURE_USER){let l=e.permission[o];if(typeof l=="boolean")continue;if(Array.isArray(l)){for(let _=0,u=l.length;_<u;_++){let d=l[_];global.hdb_schema[d]||yt(gt.SCHEMA_NOT_FOUND(d),r)}continue}yt(gt.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){yt(gt.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let l in c.tables){let _=c.tables[l];if(!l||!global.hdb_schema[o][l]){yt(gt.TABLE_NOT_FOUND(o,l),r);continue}if(Object.keys(_).forEach(u=>{e9.includes(u)||yt(gt.INVALID_PERM_KEY(u),r,o,l)}),Object.values(Uc).forEach(u=>{no.isDefined(_[u])?no.isBoolean(_[u])||yt(gt.TABLE_PERM_NOT_BOOLEAN(u),r,o,l):yt(gt.TABLE_PERM_MISSING(u),r,o,l)}),no.isDefined(_.attribute_permissions)){if(!no.isArray(_.attribute_permissions)){yt(gt.ATTR_PERMS_NOT_ARRAY,r,o,l);continue}}else{yt(gt.ATTR_PERMS_ARRAY_MISSING,r,o,l);continue}if(_.attribute_permissions){let u=global.hdb_schema[o][l].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=>{!t9.includes(p)&&p!==Uc.DELETE&&yt(gt.INVALID_ATTR_PERM_KEY(p),r,o,l)}),!no.isDefined(E.attribute_name)){yt(gt.ATTR_PERM_MISSING_NAME,r,o,l);continue}let h=E.attribute_name;if(!u.includes(h)){yt(gt.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,l);continue}$U.forEach(p=>{no.isDefined(E[p])?no.isBoolean(E[p])||yt(gt.ATTR_PERM_NOT_BOOLEAN(p,h),r,o,l):yt(gt.ATTR_PERM_MISSING(p,h),r,o,l)}),!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}.${l}`;yt(gt.MISMATCHED_TABLE_ATTR_PERMS(f),r,o,l)}}}}return a9(r)}a(VU,"customValidate");YU.exports={addRoleValidation:r9,alterRoleValidation:n9,dropRoleValidation:s9};function o9(e){let{operation:t,permission:r}=e;if(t===Mc.OPERATIONS_ENUM.ADD_ROLE||t===Mc.OPERATIONS_ENUM.ALTER_ROLE){let n=r.super_user===!0,s=r.cluster_user===!0;if(Object.keys(r).length>1&&(n||s)){if(s&&n)return gt.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Mc.ROLE_TYPES_ENUM.SUPER_USER:Mc.ROLE_TYPES_ENUM.CLUSTER_USER;return gt.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(o9,"validateNoSUPerms");function a9(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:gt.ROLE_PERMS_ERROR,...e};return Q6(new Error,n,z6.BAD_REQUEST)}else return null}a(a9,"generateRolePermResponse");function yt(e,t,r,n){if(!r)t.main_permissions.push(e);else{let s=n?r+"_"+n:r;t.schema_permissions[s]?t.schema_permissions[s].push(e):t.schema_permissions[s]=[e]}}a(yt,"addPermError")});var FE=T((aRe,zU)=>{"use strict";var WU=Nr(),QU=Or(),c9=ea(),uR=KU(),_R=ii(),l9=require("uuid").v4,u9=require("util"),GE=C(),_9=Y(),dR=QU.searchByValue,d9=QU.searchByHash,f9=u9.promisify(c9.delete),E9=es(),h9=Ec(),{hdb_errors:m9,handleHDBError:ma}=te(),{HDB_ERROR_MSGS:jU,HTTP_STATUS_CODES:t_}=m9,{UserEventMsg:fR}=Zn();zU.exports={addRole:p9,alterRole:S9,dropRole:T9,listRoles:g9};function lR(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(lR,"scrubRoleDetails");async function p9(e){let t=uR.addRoleValidation(e);if(t)throw t;e=lR(e);let r={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await dR(r)||[])}catch(i){throw ma(i)}if(n&&n.length>0)throw ma(new Error,jU.ROLE_ALREADY_EXISTS(e.role),t_.CONFLICT,void 0,void 0,!0);e.id||(e.id=l9());let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await WU.insert(s),_R.signalUserChange(new fR(process.pid)),e=lR(e),e}a(p9,"addRole");async function S9(e){let t=uR.alterRoleValidation(e);if(t)throw t;e=lR(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await WU.update(r)}catch(s){throw ma(s)}if(n&&n?.message==="updated 0 of 1 records")throw ma(new Error,"Invalid role id",t_.BAD_REQUEST,void 0,void 0,!0);return await _R.signalUserChange(new fR(process.pid)),e}a(S9,"alterRole");async function T9(e){let t=uR.dropRoleValidation(e);if(t)throw ma(new Error,t,t_.BAD_REQUEST,void 0,void 0,!0);let r=new h9(GE.SYSTEM_SCHEMA_NAME,GE.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await d9(r));if(n.length===0)throw ma(new Error,jU.ROLE_NOT_FOUND,t_.NOT_FOUND,void 0,void 0,!0);let s=new E9(GE.SYSTEM_SCHEMA_NAME,GE.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await dR(s)),o=!1;if(_9.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){o=!0;break}}if(o===!0)throw ma(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,t_.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await f9(c),_R.signalUserChange(new fR(process.pid)),`${n[0].role} successfully deleted`}a(T9,"dropRole");async function g9(){return dR({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(g9,"listRoles")});var ev=T((lRe,ZU)=>{"use strict";var R9=J(),so=require("joi"),A9=rt(),JU=require("moment"),O9=require("fs-extra"),ER=require("path"),N9=require("lodash"),r_=C(),{LOG_LEVELS:pa}=C(),b9="YYYY-MM-DD hh:mm:ss",y9=ER.resolve(__dirname,"../logs");ZU.exports=function(e){return A9.validateBySchema(e,I9)};var I9=so.object({from:so.custom(XU),until:so.custom(XU),level:so.valid(pa.NOTIFY,pa.FATAL,pa.ERROR,pa.WARN,pa.INFO,pa.DEBUG,pa.TRACE),order:so.valid("asc","desc"),limit:so.number().min(1),start:so.number().min(0),log_name:so.custom(w9)});function XU(e,t){if(JU(e,JU.ISO_8601).format(b9)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(XU,"validateDatetime");function w9(e,t){if(N9.invert(r_.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=R9.get(r_.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?r_.LOG_NAMES.HDB:e,i=s===r_.LOG_NAMES.INSTALL?ER.join(y9,r_.LOG_NAMES.INSTALL):ER.join(n,s);return O9.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(w9,"validateReadLogPath")});var mR=T((_Re,rv)=>{"use strict";var kE=C(),C9=q(),L9=J(),D9=ev(),hR=require("path"),tv=require("fs-extra"),{once:P9}=require("events"),{handleHDBError:M9,hdb_errors:U9}=te(),{PACKAGE_ROOT:v9}=C(),B9=hR.join(v9,"logs"),H9=1e3,q9=200;rv.exports=x9;async function x9(e){let t=D9(e);if(t)throw M9(t,t.message,U9.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=L9.get(kE.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e.log_name===void 0?kE.LOG_NAMES.HDB:e.log_name,s=n===kE.LOG_NAMES.INSTALL?hR.join(B9,kE.LOG_NAMES.INSTALL):hR.join(r,n),i=e.level!==void 0,o=i?e.level:void 0,c=e.from!==void 0,l=c?new Date(e.from):void 0,_=e.until!==void 0,u=_?new Date(e.until):void 0,d=e.limit===void 0?H9: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"&&!l&&!u&&(p=Math.max(tv.statSync(s).size-(h+5)*q9,0));let S=tv.createReadStream(s,{start:p});S.on("error",G=>{C9.error(G)});let A=0,g=[],I="",v;S.on("data",G=>{let U=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;G=I+G;let Q=0,V;for(;(V=U.exec(G))&&!S.destroyed;){v&&(v.message=G.slice(Q,V.index),F(v));let[z,se,Ce]=V,ie=Ce.split("] ["),dt=ie[0],Ee=ie[1];ie.splice(0,2),v={timestamp:se,thread:dt,level:Ee,tags:ie,message:""},Q=V.index+z.length}I=G.slice(Q)}),S.on("end",G=>{S.destroyed||v&&(v.message=I.trim(),F(v))}),S.resume();function F(G){let U,Q,V;switch(!0){case(i&&c&&_):U=new Date(G.timestamp),Q=new Date(l),V=new Date(u),G.level===o&&U>=Q&&U<=V&&A<E?A++:G.level===o&&U>=Q&&U<=V&&(io(G,f,g),A++,A===h&&S.destroy());break;case(i&&c):U=new Date(G.timestamp),Q=new Date(l),G.level===o&&U>=Q&&A<E?A++:G.level===o&&U>=Q&&(io(G,f,g),A++,A===h&&S.destroy());break;case(i&&_):U=new Date(G.timestamp),V=new Date(u),G.level===o&&U<=V&&A<E?A++:G.level===o&&U<=V&&(io(G,f,g),A++,A===h&&S.destroy());break;case(c&&_):U=new Date(G.timestamp),Q=new Date(l),V=new Date(u),U>=Q&&U<=V&&A<E?A++:U>=Q&&U<=V&&(io(G,f,g),A++,A===h&&S.destroy());break;case i:G.level===o&&A<E?A++:G.level===o&&(io(G,f,g),A++,A===h&&S.destroy());break;case c:U=new Date(G.timestamp),Q=new Date(l),U>=Q&&A<E?A++:U>=Q&&A>=E&&(io(G,f,g),A++,A===h&&S.destroy());break;case _:U=new Date(G.timestamp),V=new Date(u),U<=V&&A<E?A++:U<=V&&A>=E&&(io(G,f,g),A++,A===h&&S.destroy());break;default:A<E?A++:(io(G,f,g),A++,A===h&&S.destroy())}}return a(F,"onLogMessage"),await P9(S,"close"),g}a(x9,"readLog");function io(e,t,r){t==="desc"?G9(e,r):t==="asc"?F9(e,r):r.push(e)}a(io,"pushLineToResult");function G9(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)>r?n=i+1:s=i}t.splice(n,0,e)}a(G9,"insertDescending");function F9(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)<r?n=i+1:s=i}t.splice(n,0,e)}a(F9,"insertAscending")});var $E=T((mRe,ov)=>{"use strict";var pR=require("joi"),{string:n_,boolean:nv,date:k9}=pR.types(),$9=rt(),{validateSchemaExists:fRe,validateTableExists:ERe,validateSchemaName:hRe}=bs(),V9=C(),Y9=Ze(),sv=J();sv.initSync();var K9=n_.invalid(sv.get(V9.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(Y9.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(),iv={operation:n_.valid("add_node","update_node","set_node_replication"),node_name:K9,subscriptions:pR.array().items({table:n_.optional(),schema:n_.optional(),database:n_.optional(),subscribe:nv.required(),publish:nv.required().custom(Q9),start_time:k9.iso()}).min(1).required()};function W9(e){return $9.validateBySchema(e,pR.object(iv))}a(W9,"addUpdateNodeValidator");function Q9(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(Q9,"checkForFalsy");ov.exports={addUpdateNodeValidator:W9,validation_schema:iv}});var cv=T((SRe,av)=>{var j9=rt(),z9={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};av.exports=function(e){return j9.validateObject(e,z9)}});var VE=T((TRe,lv)=>{"use strict";var J9=C().OPERATIONS_ENUM,SR=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=J9.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};lv.exports=SR});var _v=T((RRe,uv)=>{"use strict";var X9={OPERATION:"operation",REFRESH:"refresh"},TR=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},gR=class{static{a(this,"JWTRSAKeys")}constructor(t,r,n){this.public_key=t,this.private_key=r,this.passphrase=n}};uv.exports={JWTTokens:TR,TOKEN_TYPE_ENUM:X9,JWTRSAKeys:gR}});var o_=T((ORe,hv)=>{"use strict";var i_=require("jsonwebtoken"),RR=require("fs-extra"),AR=Y(),Mn=C(),{handleHDBError:Dr,hdb_errors:Z9}=te(),{HTTP_STATUS_CODES:Pr,AUTHENTICATION_ERROR_MSGS:Mr}=Z9,s_=q(),dv=zf(),bR=yr(),e7=Nr().update,t7=VE(),r7=ii(),{UserEventMsg:n7}=Zn(),oo=J();oo.initSync();var OR=require("path"),{JWTTokens:s7,JWTRSAKeys:i7,TOKEN_TYPE_ENUM:YE}=_v(),o7=oo.get(Mn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?oo.get(Mn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",a7=oo.get(Mn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?oo.get(Mn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",KE="RS256",NR;hv.exports={createTokens:c7,validateOperationToken:u7,refreshOperationToken:l7,validateRefreshToken:Ev};async function c7(e){if(AR.isEmpty(e)||typeof e!="object")throw Dr(new Error,Mr.INVALID_AUTH_OBJECT,Pr.BAD_REQUEST,void 0,void 0,!0);if(AR.isEmpty(e.username))throw Dr(new Error,Mr.USERNAME_REQUIRED,Pr.BAD_REQUEST,void 0,void 0,!0);if(AR.isEmpty(e.password))throw Dr(new Error,Mr.PASSWORD_REQUIRED,Pr.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await bR.findAndValidateUser(e.username,e.password),!t)throw Dr(new Error,Mr.INVALID_CREDENTIALS,Pr.UNAUTHORIZED,void 0,void 0,!0)}catch(f){throw s_.error(f),Dr(new Error,Mr.INVALID_CREDENTIALS,Pr.UNAUTHORIZED,void 0,void 0,!0)}let r=await WE(),n=!1,s=!1;t.role&&t.role.permission&&(n=t.role.permission.super_user===!0,s=t.role.permission.cluster_user===!0);let i={username:e.username,super_user:n,cluster_user:s},o=await fv(i,r.private_key,r.passphrase),c=await i_.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:a7,algorithm:KE,subject:YE.REFRESH}),l=dv.hash(c),_=new t7(Mn.SYSTEM_SCHEMA_NAME,Mn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:l}]),u,d;try{u=await e7(_)}catch(f){s_.error(f),d=f}if(d!==void 0||u.skipped_hashes.length>0)throw Dr(new Error,Mr.REFRESH_TOKEN_SAVE_FAILED,Pr.INTERNAL_SERVER_ERROR);return r7.signalUserChange(new n7(process.pid)),new s7(o,c)}a(c7,"createTokens");async function fv(e,t,r){return await i_.sign(e,{key:t,passphrase:r},{expiresIn:o7,algorithm:KE,subject:YE.OPERATION})}a(fv,"signOperationToken");async function WE(){if(NR===void 0)try{let e=OR.join(oo.getHdbBasePath(),Mn.LICENSE_KEY_DIR_NAME,Mn.JWT_ENUM.JWT_PASSPHRASE_NAME),t=OR.join(oo.getHdbBasePath(),Mn.LICENSE_KEY_DIR_NAME,Mn.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=OR.join(oo.getHdbBasePath(),Mn.LICENSE_KEY_DIR_NAME,Mn.JWT_ENUM.JWT_PUBLIC_KEY_NAME),n=(await RR.readFile(e)).toString(),s=(await RR.readFile(t)).toString(),i=(await RR.readFile(r)).toString();NR=new i7(i,s,n)}catch(e){throw s_.error(e),Dr(new Error,Mr.NO_ENCRYPTION_KEYS,Pr.INTERNAL_SERVER_ERROR)}return NR}a(WE,"getJWTRSAKeys");async function l7(e){if(!e)throw Dr(new Error,Mr.INVALID_BODY,Pr.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw Dr(new Error,Mr.REFRESH_TOKEN_REQUIRED,Pr.BAD_REQUEST,void 0,void 0,!0);await Ev(e.refresh_token);let t=await WE(),r=await i_.decode(e.refresh_token);return{operation_token:await fv({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(l7,"refreshOperationToken");async function u7(e){try{let t=await WE(),r=await i_.verify(e,t.public_key,{algorithms:KE,subject:YE.OPERATION});return await bR.findAndValidateUser(r.username,void 0,!1)}catch(t){throw s_.warn(t),t.name&&t.name==="TokenExpiredError"?Dr(new Error,Mr.TOKEN_EXPIRED,Pr.FORBIDDEN):Dr(new Error,Mr.INVALID_TOKEN,Pr.UNAUTHORIZED)}}a(u7,"validateOperationToken");async function Ev(e){let t;try{let r=await WE(),n=await i_.verify(e,r.public_key,{algorithms:KE,subject:YE.REFRESH});t=await bR.findAndValidateUser(n.username,void 0,!1)}catch(r){throw s_.warn(r),r.name&&r.name==="TokenExpiredError"?Dr(new Error,Mr.TOKEN_EXPIRED,Pr.FORBIDDEN):Dr(new Error,Mr.INVALID_TOKEN,Pr.UNAUTHORIZED)}if(!dv.validate(t.refresh_token,e))throw Dr(new Error,Mr.INVALID_TOKEN,Pr.UNAUTHORIZED);return t}a(Ev,"validateRefreshToken")});var yR=T((yRe,Sv)=>{"use strict";var _7=cv(),vc=require("passport"),d7=require("passport-local").Strategy,f7=require("passport-http").BasicStrategy,E7=require("util"),h7=yr(),pv=E7.callbackify(h7.findAndValidateUser),bRe=Qr(),m7=C(),mv=o_();vc.use(new d7(function(e,t,r){pv(e,t,r)}));vc.use(new f7(function(e,t,r){pv(e,t,r)}));vc.serializeUser(function(e,t){t(null,e)});vc.deserializeUser(function(e,t){t(null,e)});function p7(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let n,s;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");n=o[0],s=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("Must login")}switch(a(i,"handleResponse"),n){case"Basic":vc.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===m7.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?mv.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):mv.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:vc.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(p7,"authorize");function S7(e,t){let r=_7(e);if(r){t(r);return}let n={authorized:!0,messages:[]},s=e.user.role;if(!s?.permission)return t("Invalid role");let i=JSON.parse(s.permission);if(i.super_user)return t(null,n);if(!i[e.schema])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.schema} schema`),t(null,n);if(!i[e.schema].tables[e.table])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.table} table`),t(null,n);if(!i[e.schema].tables[e.table][e.operation])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return n.authorized=!1,n.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,n);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]&&(n.authorized=!1,n.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,n)}a(S7,"checkPermissions");Sv.exports={authorize:p7,checkPermissions:S7}});var Bc=T((wRe,Tv)=>{"use strict";var IR=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},wR=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};Tv.exports={Node:IR,NodeSubscription:wR}});var Rv=T((LRe,gv)=>{"use strict";var T7=C().OPERATIONS_ENUM,CR=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=T7.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};gv.exports=CR});var a_=T((PRe,Av)=>{"use strict";var LR=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},DR=class{static{a(this,"RemotePayloadSubscription")}constructor(t,r,n,s,i,o,c){this.schema=t,this.table=r,this.hash_attribute=n,this.publish=s,this.subscribe=i,this.start_time=o,c!==void 0&&(this.attributes=c)}};Av.exports={RemotePayloadObject:LR,RemotePayloadSubscription:DR}});var Nv=T((URe,Ov)=>{"use strict";var PR=class{static{a(this,"TableSizeObject")}constructor(t,r,n=0,s=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=n,this.record_count=s,this.transaction_log_size=i,this.transaction_log_record_count=o}};Ov.exports=PR});var Iv=T((xRe,yv)=>{"use strict";var g7=Nv(),BRe=ht(),bv=ke(),R7=q(),{getSchemaPath:HRe,getTransactionAuditStorePath:qRe}=je(),{getDatabases:A7}=(Re(),re(xe));yv.exports=O7;async function O7(e){let t=new g7;try{let r=A7()[e.schema]?.[e.name],n=r.primaryStore.getStats(),s=r.auditStore?.getStats(),i=await bv.environmentDataSize(schema_path,e.name),o=await bv.environmentDataSize(txn_path,e.name);t.schema=e.schema,t.table=e.name,t.table_size=i,t.record_count=n.entryCount,t.transaction_log_size=o,t.transaction_log_record_count=s.entryCount}catch(r){R7.warn(`unable to stat table dbi due to ${r}`)}return t}a(O7,"lmdbGetTableSize")});var Cv=T((FRe,wv)=>{"use strict";var MR=class{static{a(this,"SystemInformationObject")}constructor(t,r,n,s,i,o,c){this.system=t,this.time=r,this.cpu=n,this.memory=s,this.disk=i,this.network=o,this.harperdb_processes=c}};wv.exports=MR});var di=T((YRe,Mv)=>{"use strict";var N7=require("fs-extra"),b7=require("path"),cr=require("systeminformation"),ao=q(),y7=Tt(),UR=Ze(),jE=C(),I7=Iv(),Pv=Qi(),{getThreadInfo:Lv}=et(),VR=J();VR.initSync();var w7=Cv(),{openEnvironment:$Re}=ke(),{getSchemaPath:VRe}=je(),{database:C7}=(Re(),re(xe)),QE;Mv.exports={getHDBProcessInfo:qR,getNetworkInfo:GR,getDiskInfo:xR,getMemoryInfo:HR,getCPUInfo:BR,getTimeInfo:vR,getSystemInformation:FR,systemInformation:L7,getTableSize:kR,getMetrics:$R};function vR(){return cr.time()}a(vR,"getTimeInfo");async function BR(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:l,cache:_,...u}=await cr.cpu();u.cpu_speed=await cr.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,...g}=await cr.currentLoad();return g.cpus=[],A.forEach(I=>{let{raw_load:v,raw_load_idle:F,raw_load_irq:G,raw_load_nice:U,raw_load_system:Q,raw_load_user:V,...z}=I;g.cpus.push(z)}),u.current_load=g,u}catch(e){return ao.error(`error in getCPUInfo: ${e}`),{}}}a(BR,"getCPUInfo");async function HR(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await cr.mem();return Object.assign(s,process.memoryUsage())}catch(e){return ao.error(`error in getMemoryInfo: ${e}`),{}}}a(HR,"getMemoryInfo");async function qR(){let e={core:[],clustering:[]};try{let t=await cr.processes(),r;try{r=Number.parseInt(await N7.readFile(b7.join(VR.get(jE.CONFIG_PARAMS.ROOTPATH),jE.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===jE.NODE_ERROR_CODES.ENOENT)ao.error("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB");else throw n}t.list.forEach(n=>{n.pid===r?e.core.push(n):n.name==="nats-server"&&e.clustering.push(n)});for(let n of e.core)for(let s of t.list)s.pid===n.parentPid&&(s.name==="PM2"||s.command==="PM2")&&(n.parent="PM2");return e}catch(t){return ao.error(`error in getHDBProcessInfo: ${t}`),e}}a(qR,"getHDBProcessInfo");async function xR(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await cr.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:l,..._}=await cr.fsStats();return e.read_write=_,e.size=await cr.fsSize(),e}catch(t){return ao.error(`error in getDiskInfo: ${t}`),e}}a(xR,"getDiskInfo");async function GR(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await cr.networkInterfaceDefault(),e.latency=await cr.inetChecksite("google.com"),(await cr.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:o,dhcp:c,dnsSuffix:l,ieee8021xAuth:_,ieee8021xState:u,carrier_changes:d,...f}=n;e.interfaces.push(f)}),(await cr.networkStats()).forEach(n=>{let{rx_sec:s,tx_sec:i,ms:o,...c}=n;e.stats.push(c)}),e}catch(t){return ao.error(`error in getNetworkInfo: ${t}`),e}}a(GR,"getNetworkInfo");async function FR(){if(QE!==void 0)return QE;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await cr.osInfo();e=c;let l=await cr.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,QE=e,QE}catch(t){return ao.error(`error in getSystemInformation: ${t}`),e}}a(FR,"getSystemInformation");async function kR(){let e=[],t=await Pv.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await I7(n));return e}a(kR,"getTableSize");async function $R(){let e=await Pv.describeAll(),t={};for(let r in e){let n=t[r]={};for(let s in e[r])try{let i=C7({database:r,table:s}),o=i.getStats();o.readers=i.readerList().split(/\n\s+/).slice(1).map(c=>{let[l,_,u]=c.trim().split(" ");return{pid:l,thread:_,txnid:u}}),n[s]=o}catch(i){ao.notify(`Error getting stats for table ${s}: ${i}`)}}return t}a($R,"getMetrics");async function Dv(){if(VR.get(jE.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await y7.getNATSReferences(),r=await t.streams.info(UR.WORK_QUEUE_CONSUMER_NAMES.stream_name),n=await e.consumers.get(UR.WORK_QUEUE_CONSUMER_NAMES.stream_name,UR.WORK_QUEUE_CONSUMER_NAMES.durable_name),s={ingest:{stream:{...r.state},consumer:{num_ack_pending:n._info.num_ack_pending,num_redelivered:n._info.num_redelivered,num_waiting:n._info.num_waiting,num_pending:n._info.num_pending}}};return r.sources&&(s.ingest.stream.sources=r.sources),s}}a(Dv,"getNatsStreamInfo");async function L7(e){let t=new w7;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await FR(),t.time=vR(),t.cpu=await BR(),t.memory=await HR(),t.disk=await xR(),t.network=await GR(),t.harperdb_processes=await qR(),t.table_size=await kR(),t.metrics=await $R(),t.threads=await Lv(),t.replication=await Dv(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await FR();break;case"time":t.time=vR();break;case"cpu":t.cpu=await BR();break;case"memory":t.memory=await HR();break;case"disk":t.disk=await xR();break;case"network":t.network=await GR();break;case"harperdb_processes":t.harperdb_processes=await qR();break;case"table_size":t.table_size=await kR();break;case"database_metrics":case"metrics":t.metrics=await $R();break;case"threads":t.threads=await Lv();break;case"replication":t.replication=await Dv();break;default:break}return t}a(L7,"systemInformation")});var fi=T((jRe,Hv)=>{"use strict";var D7=Nr(),YR=Y(),P7=require("util"),Sa=C(),Uv=J();Uv.initSync();var M7=yR(),vv=Or(),{Node:WRe,NodeSubscription:QRe}=Bc(),U7=Ec(),v7=Rv(),{RemotePayloadObject:B7,RemotePayloadSubscription:H7}=a_(),{handleHDBError:q7,hdb_errors:x7}=te(),{HTTP_STATUS_CODES:G7,HDB_ERROR_MSGS:F7}=x7,k7=es(),$7=di(),V7=Uo(),{getDatabases:Y7}=(Re(),re(xe)),K7=P7.promisify(M7.authorize),W7=vv.searchByHash,Q7=vv.searchByValue;Hv.exports={authHeaderToUser:j7,isEmpty:z7,getNodeRecord:J7,upsertNodeRecord:X7,buildNodePayloads:Z7,checkClusteringEnabled:eee,getAllNodeRecords:tee,getSystemInfo:ree,reverseSubscription:Bv};async function j7(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await K7(t,null),e}a(j7,"authHeaderToUser");function z7(e){return e==null}a(z7,"isEmpty");async function J7(e){let t=new U7(Sa.SYSTEM_SCHEMA_NAME,Sa.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return W7(t)}a(J7,"getNodeRecord");async function X7(e){let t=new v7(Sa.SYSTEM_SCHEMA_NAME,Sa.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return D7.upsert(t)}a(X7,"upsertNodeRecord");function Bv(e){if(YR.isEmpty(e.subscribe)||YR.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:n}=e,s={schema:t,table:r,hash_attribute:n};return e.subscribe===!0&&e.publish===!1?(s.subscribe=!1,s.publish=!0):e.subscribe===!1&&e.publish===!0?(s.subscribe=!0,s.publish=!1):(s.subscribe=e.subscribe,s.publish=e.publish),s}a(Bv,"reverseSubscription");function Z7(e,t,r,n){let s=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:l,table:_}=c,u=YR.getTableHashAttribute(l,_),{subscribe:d,publish:f}=Bv(c),E=Y7()[l]?.[_],h=new H7(l,_,u,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);s.push(h)}return new B7(r,t,s,n)}a(Z7,"buildNodePayloads");function eee(){if(!Uv.get(Sa.CONFIG_PARAMS.CLUSTERING_ENABLED))throw q7(new Error,F7.CLUSTERING_NOT_ENABLED,G7.BAD_REQUEST,void 0,void 0,!0)}a(eee,"checkClusteringEnabled");async function tee(){let e=new k7(Sa.SYSTEM_SCHEMA_NAME,Sa.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await Q7(e))}a(tee,"getAllNodeRecords");async function ree(){let e=await $7.getSystemInformation();return{hdb_version:V7.version(),node_version:e.node_version,platform:e.platform}}a(ree,"getSystemInfo")});var KR=T((JRe,Yv)=>{"use strict";var zE=Tt(),qv=Y(),xv=Ze(),Gv=C(),JE=q(),Fv=HE(),nee=mu(),{RemotePayloadObject:see}=a_(),{handleHDBError:kv,hdb_errors:iee}=te(),{HTTP_STATUS_CODES:$v}=iee,{NodeSubscription:Vv}=Bc();Yv.exports=oee;async function oee(e,t){let r;try{r=await zE.request(`${t}.${xv.REQUEST_SUFFIX}`,new see(Gv.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),JE.trace("Response from remote describe all request:",r)}catch(o){JE.error(`addNode received error from describe all request to remote node: ${o}`);let c=zE.requestErrorHandler(o,"add_node",t);throw kv(new Error,c,$v.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===xv.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw kv(new Error,o,$v.INTERNAL_SERVER_ERROR,"error",o)}let n=r.message,s=[],i=[];for(let o of e){let{table:c}=o,l=o.database??o.schema??"data";if(l===Gv.SYSTEM_SCHEMA_NAME){await zE.createLocalTableStream(l,c);let h=new Vv(l,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=qv.doesSchemaExist(l),u=n[l]!==void 0,d=c?qv.doesTableExist(l,c):!0,f=c?n?.[l]?.[c]!==void 0:!0;if(!_&&!u||!d&&!f){s.push(o);continue}if(!_&&u&&(JE.trace(`addNode creating schema: ${l}`),await Fv.createSchema({operation:"create_schema",schema:l})),!d&&f){JE.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let h=new nee(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(h.attributes=n[l][c].attributes),await Fv.createTable(h)}await zE.createLocalTableStream(l,c);let E=new Vv(l,c,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:s}}a(oee,"reviewSubscriptions")});var u_=T((ZRe,Qv)=>{"use strict";var{handleHDBError:XE,hdb_errors:aee}=te(),{HTTP_STATUS_CODES:ZE}=aee,{addUpdateNodeValidator:cee}=$E(),c_=q(),Wv=C(),Kv=Ze(),lee=Y(),WR=Tt(),l_=fi(),uee=J(),_ee=KR(),{Node:dee,NodeSubscription:fee}=Bc(),{broadcast:Eee}=et(),hee="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",mee="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",pee=uee.get(Wv.CONFIG_PARAMS.CLUSTERING_NODENAME);Qv.exports=See;async function See(e,t=!1){c_.trace("addNode called with:",e),l_.checkClusteringEnabled();let r=cee(e);if(r)throw XE(r,r.message,ZE.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let d=await l_.getNodeRecord(n);if(!lee.isEmptyOrZeroLength(d))throw XE(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,ZE.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await _ee(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=hee,o;let c=l_.buildNodePayloads(s,pee,Wv.OPERATIONS_ENUM.ADD_NODE,await l_.getSystemInfo());c_.trace("addNode sending remote payload:",c);let l;try{l=await WR.request(`${n}.${Kv.REQUEST_SUFFIX}`,c)}catch(d){c_.error(`addNode received error from request: ${d}`);let f=WR.requestErrorHandler(d,"add_node",n);throw XE(new Error,f,ZE.INTERNAL_SERVER_ERROR,"error",f)}if(l.status===Kv.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${n}: ${l.message}`;throw XE(new Error,d,ZE.INTERNAL_SERVER_ERROR,"error",d)}c_.trace(l);let _=[];for(let d=0,f=s.length;d<f;d++){let E=s[d];c_.trace("Add node updating work stream for node:",n,"subscriptions:",E),await WR.updateWorkStream(E,n),s[d].start_time===void 0&&delete s[d].start_time,_.push(new fee(E.schema,E.table,E.publish,E.subscribe))}let u=new dee(n,_,l.system_info);return await l_.upsertNodeRecord(u),Eee({type:"nats_update"}),i.length>0?o.message=mee:o.message=`Successfully added '${n}' to manifest`,o}a(See,"addNode")});var JR=T((rAe,Jv)=>{"use strict";var{handleHDBError:QR,hdb_errors:Tee}=te(),{HTTP_STATUS_CODES:jR}=Tee,{addUpdateNodeValidator:gee}=$E(),__=q(),zv=C(),jv=Ze(),tAe=Y(),zR=Tt(),d_=fi(),Ree=J(),{cloneDeep:Aee}=require("lodash"),Oee=KR(),{Node:Nee,NodeSubscription:bee}=Bc(),{broadcast:yee}=et(),Iee="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",wee="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Cee=Ree.get(zv.CONFIG_PARAMS.CLUSTERING_NODENAME);Jv.exports=Lee;async function Lee(e){__.trace("updateNode called with:",e),d_.checkClusteringEnabled();let t=gee(e);if(t)throw QR(t,t.message,jR.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await d_.getNodeRecord(r);s.length>0&&(n=Aee(s));let{added:i,skipped:o}=await Oee(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=Iee,c;let l=d_.buildNodePayloads(i,Cee,zv.OPERATIONS_ENUM.UPDATE_NODE,await d_.getSystemInfo());__.trace("updateNode sending remote payload:",l);let _;try{_=await zR.request(`${r}.${jv.REQUEST_SUFFIX}`,l)}catch(u){__.error(`updateNode received error from request: ${u}`);let d=zR.requestErrorHandler(u,"update_node",r);throw QR(new Error,d,jR.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===jv.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let u=`Error returned from remote node ${r}: ${_.message}`;throw QR(new Error,u,jR.INTERNAL_SERVER_ERROR,"error",u)}__.trace(_);for(let u=0,d=i.length;u<d;u++){let f=i[u];__.trace(`updateNode updating work stream for node: ${r} subscription:`,f),await zR.updateWorkStream(f,r),i[u].start_time===void 0&&delete i[u].start_time}return n||(n=[new Nee(r,[],_.system_info)]),await Dee(n[0],i,_.system_info),o.length>0?c.message=wee:c.message=`Successfully updated '${r}'`,c}a(Lee,"updateNode");async function Dee(e,t,r){let n=e;for(let s=0,i=t.length;s<i;s++){let o=t[s],c=!1;for(let l=0,_=e.subscriptions.length;l<_;l++){let u=n.subscriptions[l];if(u.schema===o.schema&&u.table===o.table){u.publish=o.publish,u.subscribe=o.subscribe,c=!0;break}}c||n.subscriptions.push(new bee(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await d_.upsertNodeRecord(n),yee({type:"nats_update"})}a(Dee,"updateNodeTable")});var rB=T((sAe,tB)=>{"use strict";var eB=require("joi"),{string:Xv}=eB.types(),Pee=rt(),Zv=C(),Mee=J(),Uee=Ze();tB.exports=vee;function vee(e){let t=Xv.invalid(Mee.get(Zv.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(Uee.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=eB.object({operation:Xv.valid(Zv.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return Pee.validateBySchema(e,r)}a(vee,"removeNodeValidator")});var th=T((oAe,cB)=>{"use strict";var{handleHDBError:nB,hdb_errors:Bee}=te(),{HTTP_STATUS_CODES:sB}=Bee,Hee=rB(),f_=q(),iB=fi(),qee=Y(),eh=C(),oB=Ze(),aB=Tt(),xee=J(),{RemotePayloadObject:Gee}=a_(),{NodeSubscription:Fee}=Bc(),kee=hu(),$ee=ea(),{broadcast:Vee}=et(),Yee=xee.get(eh.CONFIG_PARAMS.CLUSTERING_NODENAME);cB.exports=Kee;async function Kee(e){f_.trace("removeNode called with:",e),iB.checkClusteringEnabled();let t=Hee(e);if(t)throw nB(t,t.message,sB.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await iB.getNodeRecord(r);if(qee.isEmptyOrZeroLength(n))throw nB(new Error,`Node '${r}' was not found.`,sB.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new Gee(eh.OPERATIONS_ENUM.REMOVE_NODE,Yee,[]),i,o=!1;try{i=await aB.request(`${r}.${oB.REQUEST_SUFFIX}`,s),f_.trace("Remove node reply from remote node:",r,i)}catch(l){f_.error("removeNode received error from request:",l),o=!0}for(let l=0,_=n.subscriptions.length;l<_;l++){let u=n.subscriptions[l];f_.trace(`Remove node removing subscription: ${u.schema}.${u.table} for node: ${r}`);let d=new Fee(u.schema,u.table,!1,!1);await aB.updateWorkStream(d,r)}let c=new kee(eh.SYSTEM_SCHEMA_NAME,eh.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await $ee.deleteRecord(c),Vee({type:"nats_update"}),i?.status===oB.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(f_.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(Kee,"removeNode")});var _B=T((cAe,uB)=>{"use strict";var lB=require("joi"),{string:Wee,array:Qee}=lB.types(),jee=rt(),zee=$E();uB.exports=Jee;function Jee(e){let t=lB.object({operation:Wee.valid("configure_cluster").required(),connections:Qee.items(zee.validation_schema).required()});return jee.validateBySchema(e,t)}a(Jee,"configureClusterValidator")});var nh=T((uAe,mB)=>{"use strict";var Xee=C(),rh=q(),Zee=Y(),ete=th(),tte=u_(),dB=fi(),rte=_B(),{handleHDBError:fB,hdb_errors:nte}=te(),{HTTP_STATUS_CODES:EB}=nte,ste="Configure cluster complete.",ite="Failed to configure the cluster. Check the logs for more details.",ote="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";mB.exports=ate;async function ate(e){rh.trace("configure cluster called with:",e),dB.checkClusteringEnabled();let t=rte(e);if(t)throw fB(t,t.message,EB.BAD_REQUEST,void 0,void 0,!0);let r=await dB.getAllNodeRecords(),n=[];for(let f=0,E=r.length;f<E;f++)n.push(hB(ete,{operation:Xee.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name));let s=await Promise.allSettled(n);rh.trace("All results from configure_cluster remove node:",s);let i=[],o=e.connections.length;for(let f=0;f<o;f++){let E=e.connections[f];i.push(hB(tte,E,E.node_name))}let c=await Promise.allSettled(i);rh.trace("All results from configure_cluster add node:",c);let l=[],_=[],u=!1,d=s.concat(c);for(let f=0,E=d.length;f<E;f++){let h=d[f];h.status==="rejected"&&(rh.error(h.reason),l.includes(h.reason.node_name)||l.push(h.reason.node_name)),h.status==="fulfilled"&&(u=!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(Zee.isEmptyOrZeroLength(l))return{message:ste,connections:_};if(u)return{message:ote,failed_nodes:l,connections:_};throw fB(new Error,ite,EB.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(ate,"configureCluster");async function hB(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){throw{node_name:r,error:n}}}a(hB,"functionWrapper")});var SB=T((dAe,pB)=>{"use strict";var sh=require("joi"),cte=rt(),{validateSchemaExists:lte,validateTableExists:ute,validateSchemaName:_te}=bs(),dte=sh.object({operation:sh.string().valid("purge_stream"),schema:sh.string().custom(lte).custom(_te).required(),table:sh.string().custom(ute).required()});function fte(e){return cte.validateBySchema(e,dte)}a(fte,"purgeStreamValidator");pB.exports=fte});var XR=T((EAe,TB)=>{"use strict";var{handleHDBError:Ete,hdb_errors:hte}=te(),{HTTP_STATUS_CODES:mte}=hte,pte=SB(),Ste=Tt(),Tte=fi();TB.exports=gte;async function gte(e){if(e.purge_ingest!==!0){let s=pte(e);if(s)throw Ete(s,s.message,mte.BAD_REQUEST,void 0,void 0,!0)}Tte.checkClusteringEnabled();let{schema:t,table:r,purge_ingest:n}=e;return await Ste.purgeTableStream(t,r,n),n?"Successfully purged ingest":`Successfully purged table '${t}.${r}'`}a(gte,"purgeStream")});var oh=T((mAe,bB)=>{"use strict";var eA=fi(),Rte=Tt(),AB=J(),ih=C(),Ta=Ze(),Ate=Y(),ZR=q(),{RemotePayloadObject:Ote}=a_(),{ErrorCode:gB}=require("nats"),RB=AB.get(ih.CONFIG_PARAMS.CLUSTERING_ENABLED),OB=AB.get(ih.CONFIG_PARAMS.CLUSTERING_NODENAME);bB.exports={clusterStatus:Nte,buildNodeStatus:NB};async function Nte(){let e={node_name:OB,is_enabled:RB,connections:[]};if(!RB)return e;let t=await eA.getAllNodeRecords();if(Ate.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(NB(t[n],e.connections));return await Promise.allSettled(r),e}a(Nte,"clusterStatus");async function NB(e,t){let r=e.name,n=new Ote(ih.OPERATIONS_ENUM.CLUSTER_STATUS,OB,void 0,await eA.getSystemInfo()),s,i,o=Ta.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await Rte.request(Ta.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===Ta.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Ta.CLUSTER_STATUS_STATUSES.CLOSED,ZR.error(`Error getting node status from ${r} `,s))}catch(l){ZR.warn(`Error getting node status from ${r}`,l),l.code===gB.NoResponders?o=Ta.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===gB.Timeout?o=Ta.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Ta.CLUSTER_STATUS_STATUSES.CLOSED}let c=new bte(r,o,s?.message?.ports?.clustering,s?.message?.ports?.operations_api,i,s?.message?.uptime,e.subscriptions,s?.message?.system_info);try{let l={name:r,system_info:s?.message?.system_info};e.system_info?.hdb_version!==ih.PRE_4_0_0_VERSION&&await eA.upsertNodeRecord(l)}catch(l){ZR.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}a(NB,"buildNodeStatus");function bte(e,t,r,n,s,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:n},this.latency_ms=s,this.uptime=i,this.subscriptions=o,this.system_info=c}a(bte,"NodeStatusObject")});var ch=T((SAe,yB)=>{"use strict";var{handleHDBError:yte,hdb_errors:Ite}=te(),{HTTP_STATUS_CODES:wte}=Ite,Cte=Tt(),Lte=fi(),tA=Y(),ah=require("joi"),Dte=rt(),Pte=2e3,Mte=ah.object({timeout:ah.number().min(1),connected_nodes:ah.boolean(),routes:ah.boolean()});yB.exports=Ute;async function Ute(e){Lte.checkClusteringEnabled();let t=Dte.validateBySchema(e,Mte);if(t)throw yte(t,t.message,wte.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||tA.autoCastBoolean(n),o=s===void 0||tA.autoCastBoolean(s),c={nodes:[]},l=await Cte.getServerList(r??Pte),_={};if(i)for(let u=0,d=l.length;u<d;u++){let f=l[u].statsz;f&&(_[l[u].server.name]=f.routes)}for(let u=0,d=l.length;u<d;u++){if(l[u].statsz)continue;let f=l[u].server,E=l[u].data;if(f.name.endsWith("-hub")){let h={name:f.name.slice(0,-4),response_time:l[u].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:tA.autoCast(p.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(Ute,"clusterNetwork")});var LB=T((gAe,CB)=>{"use strict";var rA=require("joi"),IB=rt(),{route_constraints:wB}=eg();CB.exports={setRoutesValidator:vte,deleteRoutesValidator:Bte};function vte(e){let t=rA.object({server:rA.valid("hub","leaf").required(),routes:wB.required()});return IB.validateBySchema(e,t)}a(vte,"setRoutesValidator");function Bte(e){let t=rA.object({routes:wB.required()});return IB.validateBySchema(e,t)}a(Bte,"deleteRoutesValidator")});var uh=T((AAe,UB)=>{"use strict";var ga=St(),nA=Y(),lh=C(),DB=LB(),{handleHDBError:PB,hdb_errors:Hte}=te(),{HTTP_STATUS_CODES:MB}=Hte,qte="cluster routes successfully set",xte="cluster routes successfully deleted";UB.exports={setRoutes:Gte,getRoutes:Fte,deleteRoutes:kte};function Gte(e){let t=DB.setRoutesValidator(e);if(t)throw PB(t,t.message,MB.BAD_REQUEST,void 0,void 0,!0);let r=ga.getClusteringRoutes(),n=e.server==="hub"?r.hub_routes:r.leaf_routes,s=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],o=[];for(let c=0,l=e.routes.length;c<l;c++){let _=e.routes[c];_.port=nA.autoCast(_.port);let u=n.some(f=>f.host===_.host&&f.port===_.port),d=s.some(f=>f.host===_.host&&f.port===_.port);u||d?i.push(_):(n.push(_),o.push(_))}return e.server==="hub"?ga.updateConfigValue(lh.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n):ga.updateConfigValue(lh.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n),{message:qte,set:o,skipped:i}}a(Gte,"setRoutes");function Fte(){let e=ga.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(Fte,"getRoutes");function kte(e){let t=DB.deleteRoutesValidator(e);if(t)throw PB(t,t.message,MB.BAD_REQUEST,void 0,void 0,!0);let r=ga.getClusteringRoutes(),n=r.hub_routes,s=r.leaf_routes,i=[],o=[],c=!1,l=!1;for(let _=0,u=e.routes.length;_<u;_++){let d=e.routes[_],f=!1;for(let E=0,h=n.length;E<h;E++){let p=n[E];if(d.host===p.host&&d.port===p.port){n.splice(E,1),f=!0,c=!0,i.push(d);break}}if(!f){let E=!0;for(let h=0,p=s.length;h<p;h++){let S=s[h];if(d.host===S.host&&d.port===S.port){s.splice(h,1),l=!0,E=!1,i.push(d);break}}E&&o.push(d)}}return c&&(n=nA.isEmptyOrZeroLength(n)?null:n,ga.updateConfigValue(lh.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n)),l&&(s=nA.isEmptyOrZeroLength(s)?null:s,ga.updateConfigValue(lh.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s)),{message:xte,deleted:i,skipped:o}}a(kte,"deleteRoutes")});var BB=T((NAe,vB)=>{"use strict";var E_=require("alasql"),Ra=require("recursive-iterator"),cs=q(),$te=Y(),h_=C(),sA=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,Yte(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(s=>h_.SEARCH_WILDCARDS.includes(s.columnid));if(r.length===0)return this.ast;let n=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(s=>!h_.SEARCH_WILDCARDS.includes(s.columnid)),r.forEach(s=>{let i=this.table_to_schema_lookup.has(s.tableid)?this.table_to_schema_lookup.get(s.tableid):n,o=this.table_lookup.has(s.tableid)?this.table_lookup.get(s.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][h_.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=Vte(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(_=>({attribute_name:_.attribute}));let l=this.affected_attributes.get(i).get(o).filter(_=>!h_.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let u=new E_.yy.Column({columnid:_});s.tableid&&(u.tableid=s.tableid),this.ast.columns.push(u),l.includes(_)||l.push(_)}),this.affected_attributes.get(i).set(o,l)}}),this.ast}};function Vte(e){return e.filter(t=>t[h_.PERMS_CRUD_ENUM.READ])}a(Vte,"filterReadRestrictedAttrs");function Yte(e,t,r,n,s){Kte(e,t,r,n,s)}a(Yte,"interpretAST");function m_(e,t,r,n,s){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),n&&!n.has(e.as)&&n.set(e.as,e.databaseid)),s)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),s.set(o,i)}}a(m_,"addSchemaTableToMap");function Kte(e,t,r,n,s){if(!e){cs.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof E_.yy.Insert?zte(e,t,r):e instanceof E_.yy.Select?Wte(e,t,r,n,s):e instanceof E_.yy.Update?Qte(e,t,r):e instanceof E_.yy.Delete?jte(e,t,r):cs.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(Kte,"getRecordAttributesAST");function Wte(e,t,r,n,s){if(!e){cs.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if($te.isEmptyOrZeroLength(i)){cs.error("No schema specified");return}e.from.forEach(c=>{m_(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),m_(c.table,t,r,n,s)});let o=new Ra(e.columns);for(let{node:c}of o)if(c&&c.columnid){let l=c.tableid,_=n.has(l)?n.get(l):i;if(l||(l=e.from[0].tableid),!t.get(_).has(l))if(r.has(l))l=r.get(l);else{cs.info(`table specified as ${l} not found.`);return}t.get(_).get(l).indexOf(c.columnid)<0&&t.get(_).get(l).push(c.columnid)}if(e.where){let c=new Ra(e.where),l=e.from[0].tableid;for(let{node:_}of c)if(_&&_.columnid){let u=_.tableid?_.tableid:l;if(!t.get(i).has(u))if(r.has(u))u=r.get(u);else{cs.info(`table specified as ${u} not found.`);continue}t.get(i).get(u).indexOf(_.columnid)<0&&t.get(i).get(u).push(_.columnid)}}if(e.joins&&e.joins.forEach(c=>{let l=new Ra(c.on);for(let{node:_}of l)if(_&&_.columnid){let u=_.tableid,d=s.get(u);if(!t.get(d).has(u))if(r.has(u))u=r.get(u);else{cs.info(`table specified as ${u} not found.`);continue}t.get(d).get(u).indexOf(_.columnid)<0&&t.get(d).get(u).push(_.columnid)}}),e.order){let c=new Ra(e.order);for(let{node:l}of c)if(l&&l.columnid){let _=l.tableid,u=n.has(_)?n.get(_):i;if(_||(_=e.from[0].tableid),!t.get(u).has(_))if(r.has(_))_=r.get(_);else{cs.info(`table specified as ${_} not found.`);return}t.get(u).get(_).indexOf(l.columnid)<0&&t.get(u).get(_).push(l.columnid)}}}a(Wte,"getSelectAttributes");function Qte(e,t,r){if(!e){cs.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new Ra(e.columns),s=e.table.databaseid;m_(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&iA(e.table.tableid,s,i.columnid,t,r)}a(Qte,"getUpdateAttributes");function jte(e,t,r){if(!e){cs.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new Ra(e.where),s=e.table.databaseid;m_(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&iA(e.table.tableid,s,i.columnid,t,r)}a(jte,"getDeleteAttributes");function zte(e,t,r){if(!e){cs.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new Ra(e.columns),s=e.into.databaseid;m_(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&iA(e.into.tableid,s,i.columnid,t,r)}a(zte,"getInsertAttributes");function iA(e,t,r,n,s){if(!n.get(t))return;let i=e;n.get(t).has(i)||(i=s.get(i)),n.get(t).get(i).push(r)}a(iA,"pushAttribute");vB.exports=sA});var dh=T((yAe,GB)=>{var _h=sa(),HB=require("chalk"),fn=q(),qB=require("prompt"),{promisify:Jte}=require("util"),oA=C(),Xte=require("fs-extra"),Zte=require("path"),ere=Y(),tre=Uo(),xB=J();xB.initSync();var rre=require("moment"),nre=Jte(qB.get),sre=Zte.join(xB.getHdbBasePath(),oA.LICENSE_KEY_DIR_NAME,oA.LICENSE_FILE_NAME,oA.LICENSE_FILE_NAME);GB.exports={getFingerprint:ore,setLicense:ire,parseLicense:aA,register:are,getRegistrationInfo:lre};async function ire(e){if(e&&e.key&&e.company){try{fn.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await aA(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw fn.error(r),fn.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(ire,"setLicense");async function ore(){let e={};try{e=await _h.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw fn.error(r),fn.error(t),new Error(r)}return e}a(ore,"getFingerprint");async function aA(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");fn.info("Validating license input...");let r=_h.validateLicense(e,t);if(fn.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(fn.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(fn.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{fn.info("writing license to disk"),await Xte.writeFile(sre,JSON.stringify({license_key:e,company:t}))}catch(n){throw fn.error("Failed to write License"),n}return"Registration successful."}a(aA,"parseLicense");async function are(){let e=await cre();return aA(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(are,"register");async function cre(){let e=await _h.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:HB.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:HB.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{qB.start()}catch(n){fn.error(n)}let r;try{r=await nre(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(cre,"promptForRegistration");async function lre(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await _h.getLicense()}catch(r){throw fn.error(`There was an error when searching licenses due to: ${r.message}`),r}if(ere.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=tre.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=rre.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(lre,"getRegistrationInfo")});var kB=T((wAe,FB)=>{"use strict";var ure=Ze(),cA=class{static{a(this,"HubConfigObject")}constructor(t,r,n,s,i,o,c,l,_,u,d,f,E,h){this.port=t,o===null&&(o=void 0),this.server_name=r+ure.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!1},this.tls={cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l},this.leafnodes={port:_,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c}},this.cluster={name:u,port:d,routes:f,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l}},this.accounts={SYS:{users:E},HDB:{users:h}},this.system_account="SYS"}};FB.exports=cA});var YB=T((LAe,VB)=>{"use strict";var $B=Ze(),lA=class{static{a(this,"LeafConfigObject")}constructor(t,r,n,s,i,o,c,l,_,u,d){this.port=t,d===null&&(d=void 0),this.server_name=r+$B.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+$B.SERVER_SUFFIX.LEAF},this.tls={cert_file:_,key_file:u,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:l,jetstream:"enabled"}},this.system_account="SYS"}};VB.exports=lA});var WB=T((PAe,KB)=>{"use strict";var uA=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};KB.exports=uA});var jB=T((UAe,QB)=>{"use strict";var _re=Ze(),_A=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+_re.SERVER_SUFFIX.ADMIN,this.password=r}};QB.exports=_A});var ph=T((BAe,XB)=>{"use strict";var Hc=require("path"),hh=require("fs-extra"),dre=kB(),fre=YB(),Ere=WB(),hre=jB(),dA=yr(),xc=Y(),Ur=St(),Eh=C(),p_=Ze(),{CONFIG_PARAMS:Rt}=Eh,S_=q(),T_=J(),zB=li(),fA=Tt(),qc="clustering",mre=1e4,JB=5;XB.exports={generateNatsConfig:Sre,removeNatsConfig:Tre,getHubConfigPath:pre};function pre(){let e=T_.get(Rt.ROOTPATH);return Hc.join(e,qc,p_.NATS_CONFIG_FILES.HUB_SERVER)}a(pre,"getHubConfigPath");async function Sre(e=!1,t=void 0){T_.initSync();let r=T_.get(Rt.ROOTPATH),n=Hc.join(r,qc,p_.PID_FILES.HUB),s=Hc.join(r,qc,p_.PID_FILES.LEAF),i=Ur.getConfigFromFile(Rt.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=Hc.join(r,qc,p_.NATS_CONFIG_FILES.HUB_SERVER),c=Hc.join(r,qc,p_.NATS_CONFIG_FILES.LEAF_SERVER),l=Ur.getConfigFromFile(Rt.CLUSTERING_TLS_CERTIFICATE),_=Ur.getConfigFromFile(Rt.CLUSTERING_TLS_PRIVATEKEY),u=Ur.getConfigFromFile(Rt.CLUSTERING_TLS_CERT_AUTH),d=Ur.getConfigFromFile(Rt.CLUSTERING_TLS_INSECURE),f=Ur.getConfigFromFile(Rt.CLUSTERING_TLS_VERIFY),E=Ur.getConfigFromFile(Rt.CLUSTERING_NODENAME),h=Ur.getConfigFromFile(Rt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await fA.checkNATSServerInstalled()||mh("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let p=await dA.listUsers(),S=Ur.getConfigFromFile(Rt.CLUSTERING_USER),A=await dA.getClusterUser();(xc.isEmpty(A)||A.active!==!0)&&mh(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await fh(Rt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await fh(Rt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await fh(Rt.CLUSTERING_HUBSERVER_NETWORK_PORT),await fh(Rt.CLUSTERING_LEAFSERVER_NETWORK_PORT));let g=[],I=[];for(let[z,se]of p.entries())se.role.role===Eh.ROLE_TYPES_ENUM.CLUSTER_USER&&se.active&&(g.push(new hre(se.username,zB.decrypt(se.hash))),I.push(new Ere(se.username,zB.decrypt(se.hash))));let v=[],{hub_routes:F}=Ur.getClusteringRoutes();if(!xc.isEmptyOrZeroLength(F))for(let z of F)v.push(`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@${z.host}:${z.port}`);let G=new dre(Ur.getConfigFromFile(Rt.CLUSTERING_HUBSERVER_NETWORK_PORT),E,n,l,_,u,d,f,h,Ur.getConfigFromFile(Rt.CLUSTERING_HUBSERVER_CLUSTER_NAME),Ur.getConfigFromFile(Rt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),v,g,I);u==null&&(delete G.tls.ca_file,delete G.leafnodes.tls.ca_file),t=xc.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===Eh.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await hh.writeJson(o,G),S_.trace(`Hub server config written to ${o}`));let U=`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@0.0.0.0:${h}`,Q=`tls://${A.uri_encoded_name}:${A.uri_encoded_d_hash}@0.0.0.0:${h}`,V=new fre(Ur.getConfigFromFile(Rt.CLUSTERING_LEAFSERVER_NETWORK_PORT),E,s,i,[U],[Q],g,I,l,_,u,d);u==null&&delete V.tls.ca_file,(t===void 0||t===Eh.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await hh.writeJson(c,V),S_.trace(`Leaf server config written to ${c}`))}a(Sre,"generateNatsConfig");async function fh(e){let t=T_.get(e);return xc.isEmpty(t)&&mh(`port undefined for '${e}'`),await xc.isPortTaken(t)&&mh(`'${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(fh,"isPortAvailable");function mh(e){let t=`Error generating clustering config: ${e}`;S_.error(t),console.error(t),process.exit(1)}a(mh,"generateNatsConfigError");async function Tre(e){let{port:t,config_file:r}=fA.getServerConfig(e),{username:n,decrypt_hash:s}=await dA.getClusterUser(),i=0,o=2e3;for(;i<JB;){try{let _=await fA.createConnection(t,n,s,!1);if(_.protocol.connected===!0){_.close();break}}catch(_){S_.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${_}`)}if(i++,i>=JB)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 xc.async_set_timeout(o*(i*2))}let c="0".repeat(mre),l=Hc.join(T_.get(Rt.ROOTPATH),qc,r);await hh.writeFile(l,c),await hh.remove(l),S_.notify(e,"started.")}a(Tre,"removeNatsConfig")});var s0=T((qAe,n0)=>{"use strict";var En=J(),gre=sa(),pe=C(),g_=Ze(),Ei=require("path"),{PACKAGE_ROOT:Th}=C(),ZB=J(),Sh=Y(),Gc="/dev/null",Rre=Ei.join(Th,"launchServiceScripts"),e0=Ei.join(Th,"utility/scripts"),Are=Ei.join(e0,pe.HDB_RESTART_SCRIPT),t0=Ei.resolve(Th,"dependencies",`${process.platform}-${process.arch}`,g_.NATS_BINARY_NAME);function r0(){let t=gre.licenseSearch().ram_allocation||pe.RAM_ALLOCATION_ENUM.DEFAULT,r=pe.MEM_SETTING_KEY+t,n={[pe.PROCESS_NAME_ENV_PROP]:pe.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return Sh.noBootFile()&&(n[pe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Sh.getEnvCliRootPath()),{name:pe.PROCESS_DESCRIPTORS.HDB,script:pe.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:Th}}a(r0,"generateMainServerConfig");var Ore=9930;function Nre(){En.initSync(!0);let e=En.get(pe.CONFIG_PARAMS.ROOTPATH),t=Ei.join(e,"clustering",g_.NATS_CONFIG_FILES.HUB_SERVER),r=Ei.join(En.get(pe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),pe.LOG_NAMES.HDB),n=ZB.get(pe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=g_.LOG_LEVEL_FLAGS[En.get(pe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:pe.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==Ore?"-"+n:""),script:t0,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[pe.PROCESS_NAME_ENV_PROP]:pe.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return En.get(pe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Gc,i.error_file=Gc),i}a(Nre,"generateNatsHubServerConfig");var bre=9940;function yre(){En.initSync(!0);let e=En.get(pe.CONFIG_PARAMS.ROOTPATH),t=Ei.join(e,"clustering",g_.NATS_CONFIG_FILES.LEAF_SERVER),r=Ei.join(En.get(pe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),pe.LOG_NAMES.HDB),n=ZB.get(pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=g_.LOG_LEVEL_FLAGS[En.get(pe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:pe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==bre?"-"+n:""),script:t0,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[pe.PROCESS_NAME_ENV_PROP]:pe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return En.get(pe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Gc,i.error_file=Gc),i}a(yre,"generateNatsLeafServerConfig");function Ire(){En.initSync();let e=Ei.join(En.get(pe.CONFIG_PARAMS.LOGGING_ROOT),pe.LOG_NAMES.HDB),t={name:pe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:pe.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[pe.PROCESS_NAME_ENV_PROP]:pe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Rre,autorestart:!1};return En.get(pe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Gc,t.error_file=Gc),t}a(Ire,"generateClusteringUpgradeV4ServiceConfig");function wre(){let e={[pe.PROCESS_NAME_ENV_PROP]:pe.PROCESS_DESCRIPTORS.RESTART_HDB};return Sh.noBootFile()&&(e[pe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Sh.getEnvCliRootPath()),{...{name:pe.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:e0},script:Are}}a(wre,"generateRestart");function Cre(){return{apps:[r0()]}}a(Cre,"generateAllServiceConfigs");n0.exports={generateAllServiceConfigs:Cre,generateMainServerConfig:r0,generateRestart:wre,generateNatsHubServerConfig:Nre,generateNatsLeafServerConfig:yre,generateClusteringUpgradeV4ServiceConfig:Ire}});var Fc=T((FAe,p0)=>{"use strict";var Me=C(),Lre=Y(),hi=ph(),R_=Tt(),Us=Ze(),co=s0(),gh=J(),lo=q(),Dre=fi(),{startWorker:i0,onMessageFromWorkers:Pre}=et(),Mre=di(),GAe=require("util"),Ure=require("child_process"),vre=require("fs"),{execFile:Bre}=Ure,Ie;p0.exports={enterPM2Mode:Hre,start:uo,stop:EA,reload:a0,restart:c0,list:hA,describe:u0,connect:mi,kill:kre,startAllServices:$re,startService:mA,getUniqueServicesList:_0,restartAllServices:Vre,isServiceRegistered:d0,reloadStopStart:f0,restartHdb:l0,deleteProcess:Gre,startClusteringProcesses:h0,startClusteringThreads:m0,isHdbRestartRunning:Fre,isClusteringRunning:Kre,stopClustering:Yre,reloadClustering:Wre};var A_=!1;Pre(e=>{e.type==="restart"&&gh.initSync(!0)});function Hre(){A_=!0}a(Hre,"enterPM2Mode");function mi(){return Ie||(Ie=require("pm2")),new Promise((e,t)=>{Ie.connect((r,n)=>{lo.setupConsoleLogging(),r&&t(r),e(n)})})}a(mi,"connect");var vr,qre=10,o0;function uo(e,t=!1){if(A_)return xre(e);let r=Bre(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=vr.indexOf(r);o>-1&&vr.splice(o,1),!o0&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<qre&&(vre.existsSync(hi.getHubConfigPath())?uo(e):(await hi.generateNatsConfig(!0),uo(e),await new Promise(c=>setTimeout(c,3e3)),await hi.removeNatsConfig(Me.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await hi.removeNatsConfig(Me.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let o=gh.get(Me.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,l,_=0,u;for(;l=c.exec(i);){if(l.index&&Us.LOG_LEVEL_HIERARCHY[o]>=Us.LOG_LEVEL_HIERARCHY[u||"info"]){let E=u===Us.LOG_LEVELS.ERR||u===Us.LOG_LEVELS.WRN?lo.OUTPUTS.STDERR:lo.OUTPUTS.STDOUT;lo.logCustomLevel(u||"info",E,n,i.slice(_,l.index).trim())}let[d,f]=l;_=l.index+d.length,u=Us.LOG_LEVELS[f]}if(Us.LOG_LEVEL_HIERARCHY[o]>=Us.LOG_LEVEL_HIERARCHY[u||"info"]){let d=u===Us.LOG_LEVELS.ERR||u===Us.LOG_LEVELS.WRN?lo.OUTPUTS.STDERR:lo.OUTPUTS.STDOUT;lo.logCustomLevel(u||"info",d,n,i.slice(_).trim())}}if(a(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),vr=[],!vr&&!t){let i=a(()=>{o0=!0,vr&&(vr.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)}vr.push(r)}a(uo,"start");function xre(e){return new Promise(async(t,r)=>{try{await mi()}catch(n){r(n)}Ie.start(e,(n,s)=>{n&&(Ie.disconnect(),r(n)),Ie.disconnect(),t(s)})})}a(xre,"startWithPM2");function EA(e){if(!A_){for(let t of vr||[])t.name===e&&(vr.splice(vr.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await mi()}catch(n){r(n)}Ie.stop(e,async(n,s)=>{n&&(Ie.disconnect(),r(n)),Ie.delete(e,(i,o)=>{i&&(Ie.disconnect(),r(n)),Ie.disconnect(),t(o)})})})}a(EA,"stop");function a0(e){return new Promise(async(t,r)=>{try{await mi()}catch(n){r(n)}Ie.reload(e,(n,s)=>{n&&(Ie.disconnect(),r(n)),Ie.disconnect(),t(s)})})}a(a0,"reload");function c0(e){if(!A_)for(let t of vr||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await mi()}catch(n){r(n)}Ie.restart(e,(n,s)=>{Ie.disconnect(),t(s)})})}a(c0,"restart");function Gre(e){return new Promise(async(t,r)=>{try{await mi()}catch(n){r(n)}Ie.delete(e,(n,s)=>{n&&(Ie.disconnect(),r(n)),Ie.disconnect(),t(s)})})}a(Gre,"deleteProcess");async function l0(){await uo(co.generateRestart())}a(l0,"restartHdb");async function Fre(){let e=await hA();for(let t in e)if(e[t].name===Me.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(Fre,"isHdbRestartRunning");function hA(){return new Promise(async(e,t)=>{try{await mi()}catch(r){t(r)}Ie.list((r,n)=>{r&&(Ie.disconnect(),t(r)),Ie.disconnect(),e(n)})})}a(hA,"list");function u0(e){return new Promise(async(t,r)=>{try{await mi()}catch(n){r(n)}Ie.describe(e,(n,s)=>{n&&(Ie.disconnect(),r(n)),Ie.disconnect(),t(s)})})}a(u0,"describe");function kre(){if(!A_){for(let e of vr||[])e.kill();vr=[];return}return new Promise(async(e,t)=>{try{await mi()}catch(r){t(r)}Ie.killDaemon((r,n)=>{r&&(Ie.disconnect(),t(r)),Ie.disconnect(),e(n)})})}a(kre,"kill");async function $re(){try{await h0(),await m0(),await uo(co.generateAllServiceConfigs())}catch(e){throw Ie?.disconnect(),e}}a($re,"startAllServices");async function mA(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case Me.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=co.generateMainServerConfig();break;case Me.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=co.generateNatsIngestServiceConfig();break;case Me.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=co.generateNatsReplyServiceConfig();break;case Me.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=co.generateNatsHubServerConfig(),await uo(r,t),await hi.removeNatsConfig(e);return;case Me.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=co.generateNatsLeafServerConfig(),await uo(r,t),await hi.removeNatsConfig(e);return;case Me.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=co.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await uo(r)}catch(r){throw Ie?.disconnect(),r}}a(mA,"startService");async function _0(){try{let e=await hA(),t={};for(let r=0,n=e.length;r<n;r++){let s=e[r];t[s.name]===void 0&&(t[s.name]={name:s.name,exec_mode:s.pm2_env.exec_mode})}return t}catch(e){throw Ie?.disconnect(),e}}a(_0,"getUniqueServicesList");async function Vre(e=[]){try{let t=!1,r=await _0();for(let n=0,s=Object.values(r).length;n<s;n++){let o=Object.values(r)[n].name;e.includes(o)||(o===Me.PROCESS_DESCRIPTORS.HDB?t=!0:await c0(o))}t&&await f0(Me.PROCESS_DESCRIPTORS.HDB)}catch(t){throw Ie?.disconnect(),t}}a(Vre,"restartAllServices");async function d0(e){if(vr?.find(r=>r.name===e))return!0;let t=await Mre.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(d0,"isServiceRegistered");async function f0(e){let t=e===Me.PROCESS_DESCRIPTORS.HDB?gh.get(Me.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):gh.get(Me.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await u0(e),n=Lre.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await EA(e),await mA(e)):e===Me.PROCESS_DESCRIPTORS.HDB?await l0():await a0(e)}a(f0,"reloadStopStart");var E0;async function h0(e=!1){for(let t in Me.CLUSTERING_PROCESSES){let r=Me.CLUSTERING_PROCESSES[t];await mA(r,e)}}a(h0,"startClusteringProcesses");async function m0(){E0=i0(Me.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Me.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await R_.createWorkQueueStream(Us.WORK_QUEUE_CONSUMER_NAMES),await R_.updateIngestStreamConsumer(),await R_.updateLocalStreams();let e=await Dre.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Me.PRE_4_0_0_VERSION){lo.info("Starting clustering upgrade 4.0.0 process"),i0(Me.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(m0,"startClusteringThreads");async function Yre(){for(let e in Me.CLUSTERING_PROCESSES)if(e!==Me.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===Me.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await E0.terminate();else{let t=Me.CLUSTERING_PROCESSES[e];await EA(t)}}a(Yre,"stopClustering");async function Kre(){for(let e in Me.CLUSTERING_PROCESSES){let t=Me.CLUSTERING_PROCESSES[e];if(await d0(t)===!1)return!1}return!0}a(Kre,"isClusteringRunning");async function Wre(){await hi.generateNatsConfig(!0),await R_.reloadNATSHub(),await R_.reloadNATSLeaf(),await hi.removeNatsConfig(Me.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await hi.removeNatsConfig(Me.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(Wre,"reloadClustering")});var Aa=T(($Ae,N0)=>{"use strict";var Qre=require("minimist"),{isMainThread:TA,parentPort:g0}=require("worker_threads"),lt=C(),{PROCESS_DESCRIPTORS_VALIDATE:O_}=lt,vs=q(),gA=Y(),Rh=ph(),kc=Tt(),pA=Ze(),R0=St(),Bs=Fc(),S0=di(),jre=Do(),{restartWorkers:Ah,onMessageByType:zre}=et(),{handleHDBError:Jre,hdb_errors:Xre}=te(),{HTTP_STATUS_CODES:Zre}=Xre,Oh=J();Oh.initSync();var N_=`Restarting HarperDB. This may take up to ${lt.RESTART_TIMEOUT_MS/1e3} seconds.`,ene="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",T0="Clustering is not enabled so cannot be restarted",tne="Invalid service",$c,Un;N0.exports={restart:A0,restartService:RA};TA&&zre(lt.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?RA({service:e.workerType}):A0({operation:"restart"})});async function A0(e){Un=Object.keys(e).length===0,$c=await Bs.isServiceRegistered(lt.HDB_PROC_DESCRIPTOR);let t=Qre(process.argv);if(t.service){await RA(t);return}if(Un&&!$c){console.error(ene);return}if(Un&&console.log(N_),$c){Bs.enterPM2Mode(),vs.notify(N_);let r=jre(Object.keys(lt.CONFIG_PARAM_MAP),!0);return gA.isEmptyOrZeroLength(Object.keys(r))||R0.updateConfigValue(void 0,void 0,r,!0,!0),nne(),N_}return TA?(vs.notify(N_),setTimeout(()=>{Ah()},50)):g0.postMessage({type:lt.ITC_EVENT_TYPES.RESTART}),N_}a(A0,"restart");async function RA(e){let{service:t}=e;if(lt.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw Jre(new Error,tne,Zre.BAD_REQUEST,void 0,void 0,!0);if($c=await Bs.isServiceRegistered(lt.HDB_PROC_DESCRIPTOR),!TA)return g0.postMessage({type:lt.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case O_.clustering:if(!Oh.get(lt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=T0;break}Un&&console.log("Restarting clustering"),vs.notify("Restarting clustering"),await O0();break;case O_.clustering_config:case O_["clustering config"]:if(!Oh.get(lt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=T0;break}Un&&console.log("Restarting clustering_config"),vs.notify("Restarting clustering_config"),await Bs.reloadClustering();break;case"custom_functions":case"custom functions":case O_.harperdb:case O_.http_workers:if(Un&&!$c){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}Un&&console.log("Restarting http_workers"),vs.notify("Restarting http_workers"),Un?await Bs.restart(lt.HDB_PROC_DESCRIPTOR):setTimeout(()=>{Ah("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(vs.error(r),Un&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(RA,"restartService");async function rne(){await kc.publishToStream(`${pA.SUBJECT_PREFIXES.TXN}.${pA.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,pA.WORK_QUEUE_CONSUMER_NAMES.stream_name,kc.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(rne,"postDummyNatsMsg");async function nne(){await O0(),await Bs.restart(lt.HDB_PROC_DESCRIPTOR),await gA.async_set_timeout(2e3),Oh.get(lt.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await SA(),Un&&(await kc.closeConnection(),process.exit(0))}a(nne,"restartPM2Mode");async function O0(){if(!R0.getConfigFromFile(lt.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await S0.getHDBProcessInfo()).clustering.length===0)vs.trace("Clustering not running, restart will start clustering services"),await Rh.generateNatsConfig(!0),await Bs.startClusteringProcesses(),await Bs.startClusteringThreads(),await SA(),Un&&await kc.closeConnection();else{await rne(),await Rh.generateNatsConfig(!0),$c?(vs.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await Bs.restart(lt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Bs.restart(lt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await S0.getHDBProcessInfo()).clustering.forEach(s=>{vs.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await gA.async_set_timeout(3e3),await SA(),await kc.updateLocalStreams(),Un&&await kc.closeConnection(),vs.trace("Restart clustering restarting ingest and reply service threads");let t=Ah(lt.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=Ah(lt.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(O0,"restartClustering");async function SA(){await Rh.removeNatsConfig(lt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Rh.removeNatsConfig(lt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(SA,"removeNatsConfig")});var v0=T((KAe,U0)=>{"use strict";var YAe=require("lodash"),Br=C(),{handleHDBError:b0,hdb_errors:sne}=te(),{HDB_ERROR_MSGS:ine,HTTP_STATUS_CODES:one}=sne,AA=q();U0.exports={getRolePermissions:cne};var Oa=Object.create(null),ane=a(e=>({key:e,perms:{}}),"perms_template_obj"),C0=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),L0=a((e=!1,t=!1,r=!1,n=!1)=>({[Br.PERMS_CRUD_ENUM.READ]:e,[Br.PERMS_CRUD_ENUM.INSERT]:t,[Br.PERMS_CRUD_ENUM.UPDATE]:r,[Br.PERMS_CRUD_ENUM.DELETE]:n}),"permissions_template"),OA=a((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...L0(t,r,n,s)}),"table_perms_template"),y0=a((e,t=L0())=>({attribute_name:e,describe:M0(t),[b_]:t[b_],[NA]:t[NA],[bA]:t[bA]}),"attr_perms_template"),I0=a((e,t=!1)=>({attribute_name:e,describe:t,[b_]:t}),"timestamp_attr_perms_template"),{READ:b_,INSERT:NA,UPDATE:bA}=Br.PERMS_CRUD_ENUM,D0=Object.values(Br.PERMS_CRUD_ENUM),P0=[b_,NA,bA];function cne(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[Br.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(Oa[t]&&Oa[t].key===n)return Oa[t].perms;let s=lne(e,r);return Oa[t]?Oa[t].key=n:Oa[t]=ane(n),Oa[t].perms=s,s}catch(r){if(!e[Br.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Br.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Br.PERMS_UPDATE_RELEASE_TIMESTAMP){let n=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw AA.error(n),AA.debug(r),b0(new Error,ine.OUTDATED_PERMS_TRANSLATION_ERROR,one.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
|
|
12
|
-
${r.stack}`;throw AA.error(n),b0(new Error)}}}a(cne,"getRolePermissions");function lne(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[Br.SYSTEM_SCHEMA_NAME]=n[Br.SYSTEM_SCHEMA_NAME],r.structure_user=n.structure_user;let s=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(s===!0||s.indexOf(i)>-1){r[i]=une(t[i]);return}r[i]=C0(),n[i]?(n[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(n[i].tables[o]){let c=n[i].tables[o],l=t[i][o],_=_ne(c,l);r[i].describe||D0.forEach(u=>{_[u]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=OA()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=OA()})}),r}a(lne,"translateRolePermissions");function une(e){let t=C0(!0);return Object.keys(e).forEach(r=>{t.tables[r]=OA(!0,!0,!0,!0,!0)}),t}a(une,"createStructureUserPermissions");function _ne(e,t){let{attribute_permissions:r}=e;if(r.length>0){let s=Object.assign({},e);s.attribute_permissions=[];let i=r.reduce((_,u)=>{let{attribute_name:d}=u,f=u;return Br.TIME_STAMP_NAMES.includes(d)&&(f=I0(d,u[b_])),_[d]=f,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],l=y0(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let u=i[_];u.describe=M0(u),s.attribute_permissions.push(u),c||dne(u,l)}else if(_!==o){let u;Br.TIME_STAMP_NAMES.includes(_)?u=I0(_):u=y0(_),s.attribute_permissions.push(u)}}),c||s.attribute_permissions.push(l),s.describe=w0(s),s}else return e.describe=w0(e),e}a(_ne,"getTableAttrPerms");function w0(e){return D0.filter(t=>e[t]).length>0}a(w0,"getSchemaTableDescribePerm");function M0(e){return P0.filter(t=>e[t]).length>0}a(M0,"getAttributeDescribePerm");function dne(e,t){P0.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(dne,"checkForHashPerms")});var B0={};Fe(B0,{Headers:()=>_o});var _o,Nh=Ne(()=>{_o=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 n=t.toLowerCase();if(!super.has(n))return super.set(n,[t,r])}append(t,r,n){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase(),i=super.get(s);if(i){let o=i[1];n?r=(typeof o=="string"?o:o.join(", "))+", "+r:typeof o=="string"?r=[o,r]:o.push(r)}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}}});var y_={};Fe(y_,{authentication:()=>V0,bypassAuth:()=>Tne,login:()=>Rne,logout:()=>Ane,start:()=>gne});function Tne(){$0=!0}async function V0(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,o=[];try{if(i){let E=e.isOperationsServer?mne?hne:[]:Ene?fne:[];if(E.includes(i)||E.includes("*")){if(e.method==="OPTIONS"){let h=new _o([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return bh&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),bh&&o.push("Access-Control-Allow-Credentials","true")}}let l,_;if(bh){let E=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=s?.indexOf(E);if(h>=0){let p=s.indexOf(";",h),S=s.indexOf("=",h);l=s.slice(S+1,p===-1?s.length:p),_=await q0.get(l)}e.session=_||(_={})}e.user=null;let u=a((E,h,p)=>{let S=new Ih.AuthAuditLog(E,h,Xt.AUTH_AUDIT_TYPES.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);S.auth_strategy=p,l&&(S.session_id=l),r.referer&&(S.referer=r.referer),r.origin&&(S.origin=r.origin),h===Xt.AUTH_AUDIT_STATUS.SUCCESS?H0.notify(S):H0.error(S)},"authAuditLog"),d;if(n){if(d=Na.get(n),!d){let[E,h]=n.split(" "),p,S;try{switch(E){case"Basic":[p,S]=atob(h).split(":"),d=p||S?await Et.getUser(p,S,e):null;break;case"Bearer":try{d=await(0,yh.validateOperationToken)(h)}catch(A){if(A.message==="invalid token")try{return await(0,yh.validateRefreshToken)(h),c({status:-1})}catch{throw A}}break}}catch(A){return Sne&&(Na.get(h)||(Na.set(h,h),u(p,Xt.AUTH_AUDIT_STATUS.FAILURE,E))),c({status:401,body:fo({error:A.message},e)})}Na.set(n,d),pne&&u(d.username,Xt.AUTH_AUDIT_STATUS.SUCCESS,E)}e.user=d}else _?.user?e.user=await Et.getUser(_.user,null,e):($0&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,G0.getSuperUser)());bh&&(e.session.update=function(E){if(!l){l=(0,F0.v4)();let p=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${l}; Path=/; Expires=Tue, 01 Oct 8307 19:33:20 GMT; HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",p):f?.headers?.set&&f.headers.set("Set-Cookie",p)}return e.protocol==="https"&&(o?(i&&o.push("Access-Control-Expose-Headers","X-Hdb-Session"),o.push("X-Hdb-Session","Secure")):f?.headers?.set&&(i&&f.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),f.headers.set("X-Hdb-Session","Secure"))),E.id=l,q0.put(E)},e.login=async function(E,h){e.user=await Et.getUser(E,h,e),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")&&$i.loginPath?(f.status=302,f.headers.set("Location",$i.loginPath(e))):f.headers.set("WWW-Authenticate","Basic")),c(f))}catch(l){throw c(l)}function c(l){let _=o.length;if(_>0){let u=l.headers;u||(l.headers=u=new _o);for(let d=0;d<_;){let f=o[d++];u.set(f,o[d++])}}return o=null,l}a(c,"applyResponseHeaders")}function gne({server:e,port:t}){e.request(V0,{port:t||"all"}),x0||(x0=!0,setInterval(()=>{Na=new Map},vn.get(Xt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),k0.user.addListener(()=>{Na=new Map}))}async function Rne(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 Ane(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var G0,yh,F0,vn,Xt,Ih,k0,H0,fne,Ene,hne,mne,q0,bh,$0,pne,Sne,Na,x0,wh=Ne(()=>{G0=B(yr());hr();Ql();yh=B(o_());Re();F0=require("uuid"),vn=B(J()),Xt=B(C()),Ih=B(q()),k0=B(wu());Nh();Vc();H0=(0,Ih.loggerWithTag)("auth-event");vn.initSync();fne=vn.get(Xt.CONFIG_PARAMS.HTTP_CORSACCESSLIST),Ene=vn.get(Xt.CONFIG_PARAMS.HTTP_CORS),hne=vn.get(Xt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),mne=vn.get(Xt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),q0=pt({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),bh=vn.get(Xt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,$0=vn.get(Xt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,pne=vn.get(Xt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,Sne=vn.get(Xt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,Na=new Map;Et.onInvalidatedUser(()=>{Na=new Map});a(Tne,"bypassAuth");a(V0,"authentication");a(gne,"start");a(Rne,"login");a(Ane,"logout")});var J0=T((tOe,z0)=>{"use strict";var we=require("joi"),Y0=require("fs-extra"),K0=require("path"),Si=rt(),W0=J(),Q0=C(),j0=q(),{hdb_errors:One}=te(),{HDB_ERROR_MSGS:lr}=One,pi=/^[a-zA-Z0-9-_]+$/;z0.exports={getDropCustomFunctionValidator:bne,setCustomFunctionValidator:yne,addComponentValidator:Lne,dropCustomFunctionProjectValidator:Dne,packageComponentValidator:Pne,deployComponentValidator:Mne,setComponentFileValidator:Ine,getComponentFileValidator:Cne,dropComponentFileValidator:wne};function Ch(e,t,r){try{let n=W0.get(Q0.CONFIG_PARAMS.COMPONENTSROOT),s=K0.join(n,t);return Y0.existsSync(s)?e?t:r.message(lr.PROJECT_EXISTS):e?r.message(lr.NO_PROJECT):t}catch(n){return j0.error(n),r.message(lr.VALIDATION_ERR)}}a(Ch,"checkProjectExists");function I_(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(I_,"checkFilePath");function Nne(e,t,r,n){try{let s=W0.get(Q0.CONFIG_PARAMS.COMPONENTSROOT),i=K0.join(s,e,t,r+".js");return Y0.existsSync(i)?r:n.message(lr.NO_FILE)}catch(s){return j0.error(s),n.message(lr.VALIDATION_ERR)}}a(Nne,"checkFileExists");function bne(e){let t=we.object({project:we.string().pattern(pi).custom(Ch.bind(null,!0)).required().messages({"string.pattern.base":lr.BAD_PROJECT_NAME}),type:we.string().valid("helpers","routes").required(),file:we.string().pattern(pi).custom(Nne.bind(null,e.project,e.type)).custom(I_).required().messages({"string.pattern.base":lr.BAD_FILE_NAME})});return Si.validateBySchema(e,t)}a(bne,"getDropCustomFunctionValidator");function yne(e){let t=we.object({project:we.string().pattern(pi).custom(Ch.bind(null,!0)).required().messages({"string.pattern.base":lr.BAD_PROJECT_NAME}),type:we.string().valid("helpers","routes").required(),file:we.string().custom(I_).required(),function_content:we.string().required()});return Si.validateBySchema(e,t)}a(yne,"setCustomFunctionValidator");function Ine(e){let t=we.object({project:we.string().pattern(pi).required().messages({"string.pattern.base":lr.BAD_PROJECT_NAME}),file:we.string().custom(I_).required(),payload:we.string().allow("").optional(),encoding:we.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Si.validateBySchema(e,t)}a(Ine,"setComponentFileValidator");function wne(e){let t=we.object({project:we.string().pattern(pi).required().messages({"string.pattern.base":lr.BAD_PROJECT_NAME}),file:we.string().custom(I_).optional()});return Si.validateBySchema(e,t)}a(wne,"dropComponentFileValidator");function Cne(e){let t=we.object({project:we.string().required(),file:we.string().custom(I_).required(),encoding:we.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Si.validateBySchema(e,t)}a(Cne,"getComponentFileValidator");function Lne(e){let t=we.object({project:we.string().pattern(pi).custom(Ch.bind(null,!1)).required().messages({"string.pattern.base":lr.BAD_PROJECT_NAME})});return Si.validateBySchema(e,t)}a(Lne,"addComponentValidator");function Dne(e){let t=we.object({project:we.string().pattern(pi).custom(Ch.bind(null,!0)).required().messages({"string.pattern.base":lr.BAD_PROJECT_NAME})});return Si.validateBySchema(e,t)}a(Dne,"dropCustomFunctionProjectValidator");function Pne(e){let t=we.object({project:we.string().pattern(pi).required().messages({"string.pattern.base":lr.BAD_PROJECT_NAME}),skip_node_modules:we.boolean()});return Si.validateBySchema(e,t)}a(Pne,"packageComponentValidator");function Mne(e){let t=we.object({project:we.string().pattern(pi).required().messages({"string.pattern.base":lr.BAD_PROJECT_NAME}),payload:we.string().optional().messages({"string.pattern.base":lr.BAD_PACKAGE}),package:we.string().optional()});return Si.validateBySchema(e,t)}a(Mne,"deployComponentValidator")});var Mh=T((nOe,sH)=>{"use strict";var Lh=require("joi"),Dh=require("path"),X0=require("fs-extra"),{exec:Une}=require("child_process"),vne=require("util"),Z0=vne.promisify(Une),w_=C(),{handleHDBError:Yc,hdb_errors:Bne}=te(),{HTTP_STATUS_CODES:Kc}=Bne,C_=J(),Hne=rt(),Wc=q();C_.initSync();var yA=C_.get(w_.CONFIG_PARAMS.COMPONENTSROOT),eH="npm install --omit=dev --json",qne=`${eH} --dry-run`;sH.exports={installModules:kne,auditModules:$ne,installAllRootModules:xne,uninstallRootModule:Gne,linkHarperdb:Fne};async function xne(e=!1){await Ph(),await L_(e?"npm install --ignore-scripts":"npm install",C_.get(w_.CONFIG_PARAMS.ROOTPATH))}a(xne,"installAllRootModules");async function Gne(e){await L_(`npm uninstall ${e}`,C_.get(w_.CONFIG_PARAMS.ROOTPATH))}a(Gne,"uninstallRootModule");async function Fne(){await Ph(),await L_(`npm link ${w_.PACKAGE_ROOT}`,C_.get(w_.CONFIG_PARAMS.ROOTPATH))}a(Fne,"linkHarperdb");async function L_(e,t=void 0){let r,n;try{({stdout:r,stderr:n}=await Z0(e,{cwd:t}))}catch(s){throw new Error(s.stderr.replace(`
|
|
13
|
-
`,""))}return n&&!n.includes("Debugger listening")&&
|
|
14
|
-
`,"")}a(
|
|
11
|
+
`,"")}a(jU,"runCommand");async function j8(){try{await y8.access(gR)}catch{return!1}let e=await jU(`${gR} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return I8.eq(t,W8)}a(j8,"checkNATSServerInstalled");async function bR(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await WU.getClusterUser();if(ma(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}cs.trace("create nats connection called");let i=await H8({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:kt.get(De.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:kt.get(De.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:kt.get(De.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),cs.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&cs.error("Error with Nats client connection, connection closed",o),zU()}),i}a(bR,"createConnection");function zU(){Lr=void 0,Ea=void 0,ha=void 0,pa=void 0}a(zU,"clearClientCache");async function z8(){Lr&&(await Lr.drain(),Lr=void 0,Ea=void 0,ha=void 0,pa=void 0)}a(z8,"closeConnection");var Lr,pa;async function VE(){return pa||(pa=bR(kt.get(De.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),Lr=await pa),Lr||pa}a(VE,"getConnection");async function t_(){if(Ea)return Ea;ma(Lr)&&await VE();let{domain:e}=r_(De.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(ma(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Ea=await Lr.jetstreamManager({domain:e,timeout:6e4}),Ea}a(t_,"getJetStreamManager");async function JU(){if(ha)return ha;ma(Lr)&&await VE();let{domain:e}=r_(De.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(ma(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return ha=Lr.jetstream({domain:e,timeout:6e4}),ha}a(JU,"getJetStream");async function ls(){let e=Lr||await VE(),t=Ea||await t_(),r=ha||await JU();return{connection:e,jsm:t,js:r}}a(ls,"getNATSReferences");async function J8(e){let t=kt.get(De.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await WU.getClusterUser(),s=await bR(t,r,n),i=NR(),o=s.subscribe(i),c=[],l,_=(async()=>{for await(let u of o){let d=QU.decode(u.data);d.response_time=Date.now()-l,c.push(d)}})();return l=Date.now(),await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await s.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await s.flush(),await kE.async_set_timeout(e),await o.drain(),await s.close(),await _,c}a(J8,"getServerList");async function yR(e,t){let{jsm:r}=await ls(),n=kt.get(De.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=kt.get(De.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=kt.get(De.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:q8.File,retention:G8.Limits,subjects:t,discard:x8.Old,max_msgs:s,max_bytes:i,max_age:n})}a(yR,"createLocalStream");async function XU(){let{jsm:e}=await ls(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(XU,"listStreams");async function X8(e){let{jsm:t}=await ls();await t.streams.delete(e)}a(X8,"deleteLocalStream");async function Z8(e){let{connection:t}=await ls(),r=[],n=NR(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(QU.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:n}),await t.flush(),await s.drain(),await i,r}a(Z8,"listRemoteStreams");async function e9(e,t=void 0,r=void 0){let{jsm:n,js:s}=await ls(),i=$U(),o={durable_name:i,ack_policy:AR.Explicit};t&&(o.deliver_policy=OR.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let _=[];for await(let u of l){let d=RR(u.data),f={nats_timestamp:u.info.timestampNanos,nats_sequence:u.info.streamSequence,entry:d};if(u.headers&&(f.origin=u.headers.get(Jt.MSG_HEADERS.ORIGIN)),_.push(f),u.ack(),u.info.pending===0)break}return await c.delete(),_}a(e9,"viewStream");async function*t9(e,t=void 0,r=void 0){let{jsm:n,js:s}=await ls(),i=$U(),o={durable_name:i,ack_policy:AR.Explicit};t&&(o.deliver_policy=OR.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let _ of l){let u=RR(_.data);u[0]||(u=[u]);for(let d of u){let f={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};_.headers&&(f.origin=_.headers.get(Jt.MSG_HEADERS.ORIGIN)),yield f}if(_.ack(),_.info.pending===0)break}await c.delete()}a(t9,"viewStreamIterator");async function r9(e,t,r,n){cs.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=ZU(n,r);let{js:s}=await ls(),i=await YE(),o=`${e}.${i}`,c=n instanceof Uint8Array?n:KU.encode(n);try{cs.trace(`publishToStream publishing to subject: ${o}`),Y8(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(o,c,{headers:r})}catch(l){if(l.code&&l.code.toString()==="503")return tv(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){cs.trace(`publishToStream creating stream: ${t}`);let u=o.split(".");u[2]="*",await yR(t,[o]),await s.publish(o,c,{headers:r})}else throw l}});throw l}}a(r9,"publishToStream");function ZU(e,t){t===void 0&&(t=k8());let r=kt.get(De.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Jt.MSG_HEADERS.ORIGIN)&&r&&t.append(Jt.MSG_HEADERS.ORIGIN,r),t}a(ZU,"addNatsMsgHeader");function r_(e){e=e.toLowerCase();let t=e_.join(kt.get(De.CONFIG_PARAMS.ROOTPATH),K8);if(e===De.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return ma(TR)&&(TR={port:Xu.getConfigFromFile(De.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Xu.getConfigFromFile(De.CONFIG_PARAMS.CLUSTERING_NODENAME)+Jt.SERVER_SUFFIX.HUB,config_file:Jt.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:e_.join(t,Jt.PID_FILES.HUB),hdb_nats_path:t}),TR;if(e===De.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return ma(SR)&&(SR={port:Xu.getConfigFromFile(De.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Xu.getConfigFromFile(De.CONFIG_PARAMS.CLUSTERING_NODENAME)+Jt.SERVER_SUFFIX.LEAF,config_file:Jt.NATS_CONFIG_FILES.LEAF_SERVER,domain:Xu.getConfigFromFile(De.CONFIG_PARAMS.CLUSTERING_NODENAME)+Jt.SERVER_SUFFIX.LEAF,pid_file_path:e_.join(t,Jt.PID_FILES.LEAF),hdb_nats_path:t}),SR;cs.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(r_,"getServerConfig");async function ev(e,t,r,n){try{await e.consumers.add(t,{ack_policy:AR.Explicit,durable_name:r,deliver_policy:OR.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(ev,"createConsumer");async function n9(e,t,r){await e.consumers.delete(t,r)}a(n9,"removeConsumer");function s9(e){return e.split(".")[1]}a(s9,"extractServerName");async function i9(e,t,r=6e4,n=NR()){if(!kE.isObject(t))throw new Error("data param must be an object");let s=KU.encode(t),{connection:i}=await ls(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return RR(c.data)}a(i9,"request");function IR(e){return new Promise(async(t,r)=>{let n=D8(gR,["--signal",`reload=${e}`],{cwd:__dirname}),s,i;n.on("error",o=>{r(o)}),n.stdout.on("data",o=>{i+=o.toString()}),n.stderr.on("data",o=>{s+=o.toString()}),n.stderr.on("close",o=>{s&&r(s),t(i)})})}a(IR,"reloadNATS");async function o9(){let{pid_file_path:e}=r_(De.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await IR(e)}a(o9,"reloadNATSHub");async function a9(){let{pid_file_path:e}=r_(De.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await IR(e)}a(a9,"reloadNATSLeaf");function c9(e,t,r){let n;switch(e.code){case kU.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case kU.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(c9,"requestErrorHandler");async function l9(e,t){let r=t+Jt.SERVER_SUFFIX.LEAF,{connection:n}=await ls(),{jsm:s}=await m9(r),{schema:i,table:o}=e,c=$E.createNatsTableStreamName(i,o),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await tv(async()=>{if(e.subscribe===!0)await ev(s,c,n.info.server_name,l);else try{await n9(s,c,n.info.server_name)}catch(_){cs.trace(_)}})}a(l9,"updateRemoteConsumer");async function u9(e,t,r,n){let s=$E.createNatsTableStreamName(e,t),i=r+Jt.SERVER_SUFFIX.LEAF,o={type:De.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!YU&&v8()<kt.get(De.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=mR();await c(o)}await M8(o),n==="stop"&&await kE.async_set_timeout(1e3)}a(u9,"updateConsumerIterator");function tv(e){return P8.writeTransaction(De.SYSTEM_SCHEMA_NAME,De.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(tv,"exclusiveLock");async function rv(e,t){let r=$E.createNatsTableStreamName(e,t),n=await YE(),s=E9(e,t,n);await yR(r,[s])}a(rv,"createLocalTableStream");async function _9(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await rv(n,s)}}a(_9,"createTableStreams");async function nv(e,t){if(kt.get(De.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=$E.createNatsTableStreamName(e,t),{jsm:n}=await ls();await n.streams.purge(r)}catch(r){if(r.message==="stream not found")cs.warn(r);else throw r}}a(nv,"purgeTableStream");async function d9(e,t){if(kt.get(De.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await nv(e,t[r])}a(d9,"purgeSchemaTableStreams");async function f9(e){return(await t_()).streams.info(e)}a(f9,"getStreamInfo");function E9(e,t,r){return`${Jt.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(E9,"createSubjectName");async function YE(){if(Zu)return Zu;if(Zu=(await t_())?.nc?.info?.server_name,Zu===void 0)throw new Error("Unable to get jetstream manager server name");return Zu}a(YE,"getJsmServerName");async function h9(){let e=await t_(),t=await YE(),r=await XU();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=p9(n),c=i.split(".");if(c[c.length-1]===t&&!o||s.name==="__HARPERDB_WORK_QUEUE__")continue;let _=i.split(".");_[_.length-1]=t;let u=_.join(".");cs.trace(`Updating stream subject name from: ${i} to: ${u}`),s.subjects[0]=u,await e.streams.update(s.name,s)}}a(h9,"updateLocalStreams");function p9(e){let{config:t}=e,r=!1,n=kt.get(De.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=kt.get(De.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=kt.get(De.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,n!==t.max_age&&(t.max_age=n,r=!0),s!==t.max_bytes&&(t.max_bytes=s,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(p9,"updateStreamLimits");async function m9(e){let t,r;try{t=await Lr.jetstream({domain:e,timeout:6e4}),r=await Lr.jetstreamManager({domain:e,timeout:6e4})}catch(n){throw cs.error("Unable to connect to:",e),n}return{js:t,jsm:r}}a(m9,"connectToRemoteJS")});var jE=T((vRe,cv)=>{"use strict";var Dc=wf(),Pc=DU(),S9=x(),T9=require("uuid").v4,URe=require("clone"),WE=ii(),Mc=C(),g9=require("util"),io=Cn(),{handleHDBError:Dr,hdb_errors:R9}=ie(),{HDB_ERROR_MSGS:KE,HTTP_STATUS_CODES:Pr}=R9,{SchemaEventMsg:QE}=Xn(),iv=ht(),{getDatabases:A9}=(ge(),oe(Fe)),{transformReq:Uc}=K();cv.exports={createSchema:O9,createSchemaStructure:ov,createTable:N9,createTableStructure:av,createAttribute:C9,dropSchema:b9,dropTable:y9,dropAttribute:I9,getBackup:L9};async function O9(e){let t=await ov(e);return WE.signalSchemaChange(new QE(process.pid,e.operation,e.schema)),t}a(O9,"createSchema");async function ov(e){let t=Dc.schema_object(e);if(t)throw Dr(t,t.message,Pr.BAD_REQUEST,void 0,void 0,!0);if(Uc(e),!await Pc.checkSchemaExists(e.schema))throw Dr(new Error,KE.SCHEMA_EXISTS_ERR(e.schema),Pr.BAD_REQUEST,Mc.LOG_LEVELS.ERROR,KE.SCHEMA_EXISTS_ERR(e.schema),!0);return await io.createSchema(e),`database '${e.schema}' successfully created`}a(ov,"createSchemaStructure");async function N9(e){return Uc(e),e.hash_attribute=e.primary_key??e.hash_attribute,await av(e)}a(N9,"createTable");async function av(e){let t=Dc.create_table_object(e);if(t)throw Dr(t,t.message,Pr.BAD_REQUEST,void 0,void 0,!0);if(Dc.validateTableResidence(e.residence),!await Pc.checkSchemaTableExists(e.schema,e.table))throw Dr(new Error,KE.TABLE_EXISTS_ERR(e.schema,e.table),Pr.BAD_REQUEST,Mc.LOG_LEVELS.ERROR,KE.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:T9(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await io.createTable(n,e);else throw Dr(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Pr.BAD_REQUEST);else await io.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(av,"createTableStructure");async function b9(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=Dc.schema_object(e),n=t??r;if(n)throw Dr(n,n.message,Pr.BAD_REQUEST,void 0,void 0,!0);Uc(e);let s=await Pc.checkSchemaExists(e.schema);if(s)throw Dr(new Error,s,Pr.NOT_FOUND,Mc.LOG_LEVELS.ERROR,s,!0);let i=await Pc.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await io.dropSchema(e),WE.signalSchemaChange(new QE(process.pid,e.operation,e.schema)),await iv.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(b9,"dropSchema");async function y9(e){let t=Dc.table_object(e);if(t)throw Dr(t,t.message,Pr.BAD_REQUEST,void 0,void 0,!0);Uc(e);let r=await Pc.checkSchemaTableExists(e.schema,e.table);if(r)throw Dr(new Error,r,Pr.NOT_FOUND,Mc.LOG_LEVELS.ERROR,r,!0);return await io.dropTable(e),await iv.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(y9,"dropTable");async function I9(e){let t=Dc.attribute_object(e);if(t)throw Dr(t,t.message,Pr.BAD_REQUEST,void 0,void 0,!0);Uc(e);let r=await Pc.checkSchemaTableExists(e.schema,e.table);if(r)throw Dr(new Error,r,Pr.NOT_FOUND,Mc.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw Dr(new Error,"You cannot drop a hash attribute",Pr.BAD_REQUEST,void 0,void 0,!0);if(Mc.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw Dr(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Pr.BAD_REQUEST,void 0,void 0,!0);try{return await io.dropAttribute(e),w9(e),WE.signalSchemaChange(new QE(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw S9.error(`Got an error deleting attribute ${g9.inspect(e)}.`),n}}a(I9,"dropAttribute");function w9(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(w9,"dropAttributeFromGlobal");async function C9(e){Uc(e);let t=A9()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw Dr(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Pr.BAD_REQUEST,void 0,void 0,!0);return await io.createAttribute(e),WE.signalSchemaChange(new QE(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(C9,"createAttribute");function L9(e){return io.getBackup(e)}a(L9,"getBackup")});var uv=T((HRe,lv)=>{"use strict";var{OPERATIONS_ENUM:D9}=C(),wR=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=D9.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};lv.exports=wR});var CR=T((xRe,hv)=>{"use strict";var P9=Cn(),GRe=uv(),zE=K(),JE=C(),M9=X(),{handleHDBError:_v,hdb_errors:U9}=ie(),{HDB_ERROR_MSGS:dv,HTTP_STATUS_CODES:fv}=U9,v9=Object.values(JE.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),Ev="To use this operation audit log must be enabled in harperdb-config.yaml";hv.exports=B9;async function B9(e){if(zE.isEmpty(e.schema))throw new Error(dv.SCHEMA_REQUIRED_ERR);if(zE.isEmpty(e.table))throw new Error(dv.TABLE_REQUIRED_ERR);if(!M9.get(JE.CONFIG_PARAMS.LOGGING_AUDITLOG))throw _v(new Error,Ev,fv.BAD_REQUEST,JE.LOG_LEVELS.ERROR,Ev,!0);let t=zE.checkSchemaTableExist(e.schema,e.table);if(t)throw _v(new Error,t,fv.NOT_FOUND,JE.LOG_LEVELS.ERROR,t,!0);if(!zE.isEmpty(e.search_type)&&v9.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await P9.readAuditLog(e)}a(B9,"readAuditLog")});var mv=T((kRe,pv)=>{"use strict";var{OPERATIONS_ENUM:H9}=C(),LR=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=H9.GET_BACKUP,this.schema=t,this.table=r}};pv.exports=LR});var gv=T((KRe,Tv)=>{"use strict";var q9=Cn(),VRe=mv(),DR=K(),G9=C(),YRe=X(),{handleHDBError:x9,hdb_errors:F9}=ie(),{HDB_ERROR_MSGS:Sv,HTTP_STATUS_CODES:k9}=F9;Tv.exports=$9;async function $9(e){if(DR.isEmpty(e.schema))throw new Error(Sv.SCHEMA_REQUIRED_ERR);if(DR.isEmpty(e.table))throw new Error(Sv.TABLE_REQUIRED_ERR);let t=DR.checkSchemaTableExist(e.schema,e.table);if(t)throw x9(new Error,t,k9.NOT_FOUND,G9.LOG_LEVELS.ERROR,t,!0);return await q9.getBackup(read_audit_log_object)}a($9,"getBackup")});var yv=T((QRe,bv)=>{var oo=require("validate.js"),Av=rt(),vc=C(),{handleHDBError:V9,hdb_errors:Y9}=ie(),{HDB_ERROR_MSGS:pt,HTTP_STATUS_CODES:K9}=Y9,PR=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),W9={STRUCTURE_USER:"structure_user"},Rv=Object.values(vc.ROLE_TYPES_ENUM),Q9="attribute_permissions",j9="attribute_name",{PERMS_CRUD_ENUM:Bc}=vc,z9=[Q9,...Object.values(Bc)],Ov=[Bc.READ,Bc.INSERT,Bc.UPDATE],J9=[j9,...Ov];function X9(e){let t=PR();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,Nv(e,t)}a(X9,"addRoleValidation");function Z9(e){let t=PR();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,Nv(e,t)}a(Z9,"alterRoleValidation");function e7(e){let t=PR();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,Av.validateObject(e,t)}a(e7,"dropRoleValidation");var t7=["operation","role","id","permission","hdb_user","hdb_auth_header"];function Nv(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)t7.includes(n[o])||s.push(n[o]);s.length>0&&At(pt.INVALID_ROLE_JSON_KEYS(s),r);let i=Av.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{At(o,r)}),e.permission){let o=r7(e);o&&At(o,r),Rv.forEach(c=>{e.permission[c]&&!oo.isBoolean(e.permission[c])&&At(pt.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(Rv.indexOf(o)<0){if(o===W9.STRUCTURE_USER){let l=e.permission[o];if(typeof l=="boolean")continue;if(Array.isArray(l)){for(let _=0,u=l.length;_<u;_++){let d=l[_];global.hdb_schema[d]||At(pt.SCHEMA_NOT_FOUND(d),r)}continue}At(pt.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){At(pt.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let l in c.tables){let _=c.tables[l];if(!l||!global.hdb_schema[o][l]){At(pt.TABLE_NOT_FOUND(o,l),r);continue}if(Object.keys(_).forEach(u=>{z9.includes(u)||At(pt.INVALID_PERM_KEY(u),r,o,l)}),Object.values(Bc).forEach(u=>{oo.isDefined(_[u])?oo.isBoolean(_[u])||At(pt.TABLE_PERM_NOT_BOOLEAN(u),r,o,l):At(pt.TABLE_PERM_MISSING(u),r,o,l)}),oo.isDefined(_.attribute_permissions)){if(!oo.isArray(_.attribute_permissions)){At(pt.ATTR_PERMS_NOT_ARRAY,r,o,l);continue}}else{At(pt.ATTR_PERMS_ARRAY_MISSING,r,o,l);continue}if(_.attribute_permissions){let u=global.hdb_schema[o][l].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(m=>{!J9.includes(m)&&m!==Bc.DELETE&&At(pt.INVALID_ATTR_PERM_KEY(m),r,o,l)}),!oo.isDefined(E.attribute_name)){At(pt.ATTR_PERM_MISSING_NAME,r,o,l);continue}let h=E.attribute_name;if(!u.includes(h)){At(pt.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,l);continue}Ov.forEach(m=>{oo.isDefined(E[m])?oo.isBoolean(E[m])||At(pt.ATTR_PERM_NOT_BOOLEAN(m,h),r,o,l):At(pt.ATTR_PERM_MISSING(m,h),r,o,l)}),!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}.${l}`;At(pt.MISMATCHED_TABLE_ATTR_PERMS(f),r,o,l)}}}}return n7(r)}a(Nv,"customValidate");bv.exports={addRoleValidation:X9,alterRoleValidation:Z9,dropRoleValidation:e7};function r7(e){let{operation:t,permission:r}=e;if(t===vc.OPERATIONS_ENUM.ADD_ROLE||t===vc.OPERATIONS_ENUM.ALTER_ROLE){let n=r.super_user===!0,s=r.cluster_user===!0;if(Object.keys(r).length>1&&(n||s)){if(s&&n)return pt.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?vc.ROLE_TYPES_ENUM.SUPER_USER:vc.ROLE_TYPES_ENUM.CLUSTER_USER;return pt.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(r7,"validateNoSUPerms");function n7(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:pt.ROLE_PERMS_ERROR,...e};return V9(new Error,n,K9.BAD_REQUEST)}else return null}a(n7,"generateRolePermResponse");function At(e,t,r,n){if(!r)t.main_permissions.push(e);else{let s=n?r+"_"+n:r;t.schema_permissions[s]?t.schema_permissions[s].push(e):t.schema_permissions[s]=[e]}}a(At,"addPermError")});var ZE=T((zRe,Lv)=>{"use strict";var Iv=br(),wv=nr(),s7=ta(),UR=yv(),vR=ii(),i7=require("uuid").v4,o7=require("util"),XE=C(),a7=K(),BR=wv.searchByValue,c7=wv.searchByHash,l7=o7.promisify(s7.delete),u7=Zn(),_7=hc(),{hdb_errors:d7,handleHDBError:Sa}=ie(),{HDB_ERROR_MSGS:Cv,HTTP_STATUS_CODES:n_}=d7,{UserEventMsg:HR}=Xn();Lv.exports={addRole:f7,alterRole:E7,dropRole:h7,listRoles:p7};function MR(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(MR,"scrubRoleDetails");async function f7(e){let t=UR.addRoleValidation(e);if(t)throw t;e=MR(e);let r={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await BR(r)||[])}catch(i){throw Sa(i)}if(n&&n.length>0)throw Sa(new Error,Cv.ROLE_ALREADY_EXISTS(e.role),n_.CONFLICT,void 0,void 0,!0);e.id||(e.id=i7());let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await Iv.insert(s),vR.signalUserChange(new HR(process.pid)),e=MR(e),e}a(f7,"addRole");async function E7(e){let t=UR.alterRoleValidation(e);if(t)throw t;e=MR(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await Iv.update(r)}catch(s){throw Sa(s)}if(n&&n?.message==="updated 0 of 1 records")throw Sa(new Error,"Invalid role id",n_.BAD_REQUEST,void 0,void 0,!0);return await vR.signalUserChange(new HR(process.pid)),e}a(E7,"alterRole");async function h7(e){let t=UR.dropRoleValidation(e);if(t)throw Sa(new Error,t,n_.BAD_REQUEST,void 0,void 0,!0);let r=new _7(XE.SYSTEM_SCHEMA_NAME,XE.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await c7(r));if(n.length===0)throw Sa(new Error,Cv.ROLE_NOT_FOUND,n_.NOT_FOUND,void 0,void 0,!0);let s=new u7(XE.SYSTEM_SCHEMA_NAME,XE.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await BR(s)),o=!1;if(a7.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){o=!0;break}}if(o===!0)throw Sa(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,n_.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await l7(c),vR.signalUserChange(new HR(process.pid)),`${n[0].role} successfully deleted`}a(h7,"dropRole");async function p7(){return BR({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(p7,"listRoles")});var Uv=T((XRe,Mv)=>{"use strict";var m7=X(),ao=require("joi"),S7=rt(),Dv=require("moment"),T7=require("fs-extra"),qR=require("path"),g7=require("lodash"),s_=C(),{LOG_LEVELS:Ta}=C(),R7="YYYY-MM-DD hh:mm:ss",A7=qR.resolve(__dirname,"../logs");Mv.exports=function(e){return S7.validateBySchema(e,O7)};var O7=ao.object({from:ao.custom(Pv),until:ao.custom(Pv),level:ao.valid(Ta.NOTIFY,Ta.FATAL,Ta.ERROR,Ta.WARN,Ta.INFO,Ta.DEBUG,Ta.TRACE),order:ao.valid("asc","desc"),limit:ao.number().min(1),start:ao.number().min(0),log_name:ao.custom(N7)});function Pv(e,t){if(Dv(e,Dv.ISO_8601).format(R7)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(Pv,"validateDatetime");function N7(e,t){if(g7.invert(s_.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=m7.get(s_.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?s_.LOG_NAMES.HDB:e,i=s===s_.LOG_NAMES.INSTALL?qR.join(A7,s_.LOG_NAMES.INSTALL):qR.join(n,s);return T7.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(N7,"validateReadLogPath")});var xR=T((eAe,Bv)=>{"use strict";var eh=C(),b7=x(),y7=X(),I7=Uv(),GR=require("path"),vv=require("fs-extra"),{once:w7}=require("events"),{handleHDBError:C7,hdb_errors:L7}=ie(),{PACKAGE_ROOT:D7}=C(),P7=GR.join(D7,"logs"),M7=1e3,U7=200;Bv.exports=v7;async function v7(e){let t=I7(e);if(t)throw C7(t,t.message,L7.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=y7.get(eh.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e.log_name===void 0?eh.LOG_NAMES.HDB:e.log_name,s=n===eh.LOG_NAMES.INSTALL?GR.join(P7,eh.LOG_NAMES.INSTALL):GR.join(r,n),i=e.level!==void 0,o=i?e.level:void 0,c=e.from!==void 0,l=c?new Date(e.from):void 0,_=e.until!==void 0,u=_?new Date(e.until):void 0,d=e.limit===void 0?M7:e.limit,f=e.order===void 0?void 0:e.order,E=e.start===void 0?0:e.start,h=E+d,m=0;f==="desc"&&!l&&!u&&(m=Math.max(vv.statSync(s).size-(h+5)*U7,0));let S=vv.createReadStream(s,{start:m});S.on("error",U=>{b7.error(U)});let R=0,g=[],A="",P;S.on("data",U=>{let F=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;U=A+U;let H=0,j;for(;(j=F.exec(U))&&!S.destroyed;){P&&(P.message=U.slice(H,j.index),v(P));let[z,J,Ae]=j,ue=Ae.split("] ["),Ee=ue[0],Me=ue[1];ue.splice(0,2),P={timestamp:J,thread:Ee,level:Me,tags:ue,message:""},H=j.index+z.length}A=U.slice(H)}),S.on("end",U=>{S.destroyed||P&&(P.message=A.trim(),v(P))}),S.resume();function v(U){let F,H,j;switch(!0){case(i&&c&&_):F=new Date(U.timestamp),H=new Date(l),j=new Date(u),U.level===o&&F>=H&&F<=j&&R<E?R++:U.level===o&&F>=H&&F<=j&&(co(U,f,g),R++,R===h&&S.destroy());break;case(i&&c):F=new Date(U.timestamp),H=new Date(l),U.level===o&&F>=H&&R<E?R++:U.level===o&&F>=H&&(co(U,f,g),R++,R===h&&S.destroy());break;case(i&&_):F=new Date(U.timestamp),j=new Date(u),U.level===o&&F<=j&&R<E?R++:U.level===o&&F<=j&&(co(U,f,g),R++,R===h&&S.destroy());break;case(c&&_):F=new Date(U.timestamp),H=new Date(l),j=new Date(u),F>=H&&F<=j&&R<E?R++:F>=H&&F<=j&&(co(U,f,g),R++,R===h&&S.destroy());break;case i:U.level===o&&R<E?R++:U.level===o&&(co(U,f,g),R++,R===h&&S.destroy());break;case c:F=new Date(U.timestamp),H=new Date(l),F>=H&&R<E?R++:F>=H&&R>=E&&(co(U,f,g),R++,R===h&&S.destroy());break;case _:F=new Date(U.timestamp),j=new Date(u),F<=j&&R<E?R++:F<=j&&R>=E&&(co(U,f,g),R++,R===h&&S.destroy());break;default:R<E?R++:(co(U,f,g),R++,R===h&&S.destroy())}}return a(v,"onLogMessage"),await w7(S,"close"),g}a(v7,"readLog");function co(e,t,r){t==="desc"?B7(e,r):t==="asc"?H7(e,r):r.push(e)}a(co,"pushLineToResult");function B7(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)>r?n=i+1:s=i}t.splice(n,0,e)}a(B7,"insertDescending");function H7(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)<r?n=i+1:s=i}t.splice(n,0,e)}a(H7,"insertAscending")});var th=T((iAe,xv)=>{"use strict";var FR=require("joi"),{string:i_,boolean:Hv,date:q7}=FR.types(),G7=rt(),{validateSchemaExists:rAe,validateTableExists:nAe,validateSchemaName:sAe}=ys(),x7=C(),F7=et(),qv=X();qv.initSync();var k7=i_.invalid(qv.get(x7.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(F7.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(),Gv={operation:i_.valid("add_node","update_node","set_node_replication"),node_name:k7,subscriptions:FR.array().items({table:i_.optional(),schema:i_.optional(),database:i_.optional(),subscribe:Hv.required(),publish:Hv.required().custom(V7),start_time:q7.iso()}).min(1).required()};function $7(e){return G7.validateBySchema(e,FR.object(Gv))}a($7,"addUpdateNodeValidator");function V7(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(V7,"checkForFalsy");xv.exports={addUpdateNodeValidator:$7,validation_schema:Gv}});var kv=T((aAe,Fv)=>{var Y7=rt(),K7={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};Fv.exports=function(e){return Y7.validateObject(e,K7)}});var rh=T((cAe,$v)=>{"use strict";var W7=C().OPERATIONS_ENUM,kR=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=W7.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};$v.exports=kR});var Yv=T((uAe,Vv)=>{"use strict";var Q7={OPERATION:"operation",REFRESH:"refresh"},$R=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},VR=class{static{a(this,"JWTRSAKeys")}constructor(t,r,n){this.public_key=t,this.private_key=r,this.passphrase=n}};Vv.exports={JWTTokens:$R,TOKEN_TYPE_ENUM:Q7,JWTRSAKeys:VR}});var c_=T((dAe,jv)=>{"use strict";var a_=require("jsonwebtoken"),YR=require("fs-extra"),KR=K(),Un=C(),{handleHDBError:Mr,hdb_errors:j7}=ie(),{HTTP_STATUS_CODES:Ur,AUTHENTICATION_ERROR_MSGS:vr}=j7,o_=x(),Kv=sE(),jR=wr(),z7=br().update,J7=rh(),X7=ii(),{UserEventMsg:Z7}=Xn(),lo=X();lo.initSync();var WR=require("path"),{JWTTokens:eee,JWTRSAKeys:tee,TOKEN_TYPE_ENUM:nh}=Yv(),ree=lo.get(Un.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?lo.get(Un.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",nee=lo.get(Un.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?lo.get(Un.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",sh="RS256",QR;jv.exports={createTokens:see,validateOperationToken:oee,refreshOperationToken:iee,validateRefreshToken:Qv};async function see(e){if(KR.isEmpty(e)||typeof e!="object")throw Mr(new Error,vr.INVALID_AUTH_OBJECT,Ur.BAD_REQUEST,void 0,void 0,!0);if(KR.isEmpty(e.username))throw Mr(new Error,vr.USERNAME_REQUIRED,Ur.BAD_REQUEST,void 0,void 0,!0);if(KR.isEmpty(e.password))throw Mr(new Error,vr.PASSWORD_REQUIRED,Ur.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await jR.findAndValidateUser(e.username,e.password),!t)throw Mr(new Error,vr.INVALID_CREDENTIALS,Ur.UNAUTHORIZED,void 0,void 0,!0)}catch(f){throw o_.error(f),Mr(new Error,vr.INVALID_CREDENTIALS,Ur.UNAUTHORIZED,void 0,void 0,!0)}let r=await ih(),n=!1,s=!1;t.role&&t.role.permission&&(n=t.role.permission.super_user===!0,s=t.role.permission.cluster_user===!0);let i={username:e.username,super_user:n,cluster_user:s},o=await Wv(i,r.private_key,r.passphrase),c=await a_.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:nee,algorithm:sh,subject:nh.REFRESH}),l=Kv.hash(c),_=new J7(Un.SYSTEM_SCHEMA_NAME,Un.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:l}]),u,d;try{u=await z7(_)}catch(f){o_.error(f),d=f}if(d!==void 0||u.skipped_hashes.length>0)throw Mr(new Error,vr.REFRESH_TOKEN_SAVE_FAILED,Ur.INTERNAL_SERVER_ERROR);return X7.signalUserChange(new Z7(process.pid)),new eee(o,c)}a(see,"createTokens");async function Wv(e,t,r){return await a_.sign(e,{key:t,passphrase:r},{expiresIn:ree,algorithm:sh,subject:nh.OPERATION})}a(Wv,"signOperationToken");async function ih(){if(QR===void 0)try{let e=WR.join(lo.getHdbBasePath(),Un.LICENSE_KEY_DIR_NAME,Un.JWT_ENUM.JWT_PASSPHRASE_NAME),t=WR.join(lo.getHdbBasePath(),Un.LICENSE_KEY_DIR_NAME,Un.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=WR.join(lo.getHdbBasePath(),Un.LICENSE_KEY_DIR_NAME,Un.JWT_ENUM.JWT_PUBLIC_KEY_NAME),n=(await YR.readFile(e)).toString(),s=(await YR.readFile(t)).toString(),i=(await YR.readFile(r)).toString();QR=new tee(i,s,n)}catch(e){throw o_.error(e),Mr(new Error,vr.NO_ENCRYPTION_KEYS,Ur.INTERNAL_SERVER_ERROR)}return QR}a(ih,"getJWTRSAKeys");async function iee(e){if(!e)throw Mr(new Error,vr.INVALID_BODY,Ur.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw Mr(new Error,vr.REFRESH_TOKEN_REQUIRED,Ur.BAD_REQUEST,void 0,void 0,!0);await Qv(e.refresh_token);let t=await ih(),r=await a_.decode(e.refresh_token);return{operation_token:await Wv({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(iee,"refreshOperationToken");async function oee(e){try{let t=await ih(),r=await a_.verify(e,t.public_key,{algorithms:sh,subject:nh.OPERATION});return await jR.findAndValidateUser(r.username,void 0,!1)}catch(t){throw o_.warn(t),t.name&&t.name==="TokenExpiredError"?Mr(new Error,vr.TOKEN_EXPIRED,Ur.FORBIDDEN):Mr(new Error,vr.INVALID_TOKEN,Ur.UNAUTHORIZED)}}a(oee,"validateOperationToken");async function Qv(e){let t;try{let r=await ih(),n=await a_.verify(e,r.public_key,{algorithms:sh,subject:nh.REFRESH});t=await jR.findAndValidateUser(n.username,void 0,!1)}catch(r){throw o_.warn(r),r.name&&r.name==="TokenExpiredError"?Mr(new Error,vr.TOKEN_EXPIRED,Ur.FORBIDDEN):Mr(new Error,vr.INVALID_TOKEN,Ur.UNAUTHORIZED)}if(!Kv.validate(t.refresh_token,e))throw Mr(new Error,vr.INVALID_TOKEN,Ur.UNAUTHORIZED);return t}a(Qv,"validateRefreshToken")});var zR=T((hAe,Xv)=>{"use strict";var aee=kv(),Hc=require("passport"),cee=require("passport-local").Strategy,lee=require("passport-http").BasicStrategy,uee=require("util"),_ee=wr(),Jv=uee.callbackify(_ee.findAndValidateUser),EAe=Wr(),dee=C(),zv=c_();Hc.use(new cee(function(e,t,r){Jv(e,t,r)}));Hc.use(new lee(function(e,t,r){Jv(e,t,r)}));Hc.serializeUser(function(e,t){t(null,e)});Hc.deserializeUser(function(e,t){t(null,e)});function fee(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let n,s;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");n=o[0],s=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("Must login")}switch(a(i,"handleResponse"),n){case"Basic":Hc.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===dee.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?zv.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):zv.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Hc.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(fee,"authorize");function Eee(e,t){let r=aee(e);if(r){t(r);return}let n={authorized:!0,messages:[]},s=e.user.role;if(!s?.permission)return t("Invalid role");let i=JSON.parse(s.permission);if(i.super_user)return t(null,n);if(!i[e.schema])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.schema} schema`),t(null,n);if(!i[e.schema].tables[e.table])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.table} table`),t(null,n);if(!i[e.schema].tables[e.table][e.operation])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return n.authorized=!1,n.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,n);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]&&(n.authorized=!1,n.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,n)}a(Eee,"checkPermissions");Xv.exports={authorize:fee,checkPermissions:Eee}});var qc=T((mAe,Zv)=>{"use strict";var JR=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},XR=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};Zv.exports={Node:JR,NodeSubscription:XR}});var t0=T((TAe,e0)=>{"use strict";var hee=C().OPERATIONS_ENUM,ZR=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=hee.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};e0.exports=ZR});var l_=T((RAe,r0)=>{"use strict";var eA=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},tA=class{static{a(this,"RemotePayloadSubscription")}constructor(t,r,n,s,i,o,c){this.schema=t,this.table=r,this.hash_attribute=n,this.publish=s,this.subscribe=i,this.start_time=o,c!==void 0&&(this.attributes=c)}};r0.exports={RemotePayloadObject:eA,RemotePayloadSubscription:tA}});var s0=T((OAe,n0)=>{"use strict";var rA=class{static{a(this,"TableSizeObject")}constructor(t,r,n=0,s=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=n,this.record_count=s,this.transaction_log_size=i,this.transaction_log_record_count=o}};n0.exports=rA});var a0=T((wAe,o0)=>{"use strict";var pee=s0(),bAe=_t(),i0=Ve(),mee=x(),{getSchemaPath:yAe,getTransactionAuditStorePath:IAe}=ze(),{getDatabases:See}=(ge(),oe(Fe));o0.exports=Tee;async function Tee(e){let t=new pee;try{let r=See()[e.schema]?.[e.name],n=r.primaryStore.getStats(),s=r.auditStore?.getStats(),i=await i0.environmentDataSize(schema_path,e.name),o=await i0.environmentDataSize(txn_path,e.name);t.schema=e.schema,t.table=e.name,t.table_size=i,t.record_count=n.entryCount,t.transaction_log_size=o,t.transaction_log_record_count=s.entryCount}catch(r){mee.warn(`unable to stat table dbi due to ${r}`)}return t}a(Tee,"lmdbGetTableSize")});var l0=T((LAe,c0)=>{"use strict";var nA=class{static{a(this,"SystemInformationObject")}constructor(t,r,n,s,i,o,c){this.system=t,this.time=r,this.cpu=n,this.memory=s,this.disk=i,this.network=o,this.harperdb_processes=c}};c0.exports=nA});var di=T((vAe,E0)=>{"use strict";var gee=require("fs-extra"),Ree=require("path"),cr=require("systeminformation"),uo=x(),u0=ht(),PAe=et(),ah=C(),Aee=a0(),f0=zi(),{getThreadInfo:_0}=tt(),fA=X();fA.initSync();var Oee=l0(),{openEnvironment:MAe}=Ve(),{getSchemaPath:UAe}=ze(),{database:Nee}=(ge(),oe(Fe)),oh;E0.exports={getHDBProcessInfo:aA,getNetworkInfo:lA,getDiskInfo:cA,getMemoryInfo:oA,getCPUInfo:iA,getTimeInfo:sA,getSystemInformation:uA,systemInformation:bee,getTableSize:_A,getMetrics:dA};function sA(){return cr.time()}a(sA,"getTimeInfo");async function iA(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:l,cache:_,...u}=await cr.cpu();u.cpu_speed=await cr.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:f,raw_currentload_irq:E,raw_currentload_nice:h,raw_currentload_system:m,raw_currentload_user:S,cpus:R,...g}=await cr.currentLoad();return g.cpus=[],R.forEach(A=>{let{raw_load:P,raw_load_idle:v,raw_load_irq:U,raw_load_nice:F,raw_load_system:H,raw_load_user:j,...z}=A;g.cpus.push(z)}),u.current_load=g,u}catch(e){return uo.error(`error in getCPUInfo: ${e}`),{}}}a(iA,"getCPUInfo");async function oA(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await cr.mem();return Object.assign(s,process.memoryUsage())}catch(e){return uo.error(`error in getMemoryInfo: ${e}`),{}}}a(oA,"getMemoryInfo");async function aA(){let e={core:[],clustering:[]};try{let t=await cr.processes(),r;try{r=Number.parseInt(await gee.readFile(Ree.join(fA.get(ah.CONFIG_PARAMS.ROOTPATH),ah.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===ah.NODE_ERROR_CODES.ENOENT)uo.error("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB");else throw n}t.list.forEach(n=>{n.pid===r?e.core.push(n):n.name==="nats-server"&&e.clustering.push(n)});for(let n of e.core)for(let s of t.list)s.pid===n.parentPid&&(s.name==="PM2"||s.command==="PM2")&&(n.parent="PM2");return e}catch(t){return uo.error(`error in getHDBProcessInfo: ${t}`),e}}a(aA,"getHDBProcessInfo");async function cA(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await cr.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:l,..._}=await cr.fsStats();return e.read_write=_,e.size=await cr.fsSize(),e}catch(t){return uo.error(`error in getDiskInfo: ${t}`),e}}a(cA,"getDiskInfo");async function lA(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await cr.networkInterfaceDefault(),e.latency=await cr.inetChecksite("google.com"),(await cr.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:o,dhcp:c,dnsSuffix:l,ieee8021xAuth:_,ieee8021xState:u,carrier_changes:d,...f}=n;e.interfaces.push(f)}),(await cr.networkStats()).forEach(n=>{let{rx_sec:s,tx_sec:i,ms:o,...c}=n;e.stats.push(c)}),e}catch(t){return uo.error(`error in getNetworkInfo: ${t}`),e}}a(lA,"getNetworkInfo");async function uA(){if(oh!==void 0)return oh;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await cr.osInfo();e=c;let l=await cr.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,oh=e,oh}catch(t){return uo.error(`error in getSystemInformation: ${t}`),e}}a(uA,"getSystemInformation");async function _A(){let e=[],t=await f0.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await Aee(n));return e}a(_A,"getTableSize");async function dA(){let e=await f0.describeAll(),t={};for(let r in e){let n=t[r]={};for(let s in e[r])try{let i=Nee({database:r,table:s}),o=i.getStats();o.readers=i.readerList().split(/\n\s+/).slice(1).map(c=>{let[l,_,u]=c.trim().split(" ");return{pid:l,thread:_,txnid:u}}),n[s]=o}catch(i){uo.notify(`Error getting stats for table ${s}: ${i}`)}}return t}a(dA,"getMetrics");async function d0(){if(fA.get(ah.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await u0.getNATSReferences(),t=await u0.listStreams(),r=[];for(let n of t){let s=[],i=await e.consumers.list(n.config.name);for await(let c of i)s.push({name:c.name,created:c.created,num_ack_pending:c.num_ack_pending,num_redelivered:c.num_redelivered,num_waiting:c.num_waiting,num_pending:c.num_pending});let o={stream_name:n.config.name,database:n.config.subjects[0].split(".")[1],table:n.config.subjects[0].split(".")[2],state:n.state,consumers:s};r.push(o)}return r}}a(d0,"getNatsStreamInfo");async function bee(e){let t=new Oee;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await uA(),t.time=sA(),t.cpu=await iA(),t.memory=await oA(),t.disk=await cA(),t.network=await lA(),t.harperdb_processes=await aA(),t.table_size=await _A(),t.metrics=await dA(),t.threads=await _0(),t.replication=await d0(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await uA();break;case"time":t.time=sA();break;case"cpu":t.cpu=await iA();break;case"memory":t.memory=await oA();break;case"disk":t.disk=await cA();break;case"network":t.network=await lA();break;case"harperdb_processes":t.harperdb_processes=await aA();break;case"table_size":t.table_size=await _A();break;case"database_metrics":case"metrics":t.metrics=await dA();break;case"threads":t.threads=await _0();break;case"replication":t.replication=await d0();break;default:break}return t}a(bee,"systemInformation")});var fi=T((GAe,S0)=>{"use strict";var yee=br(),EA=K(),Iee=require("util"),ga=C(),h0=X();h0.initSync();var wee=zR(),p0=nr(),{Node:HAe,NodeSubscription:qAe}=qc(),Cee=hc(),Lee=t0(),{RemotePayloadObject:Dee,RemotePayloadSubscription:Pee}=l_(),{handleHDBError:Mee,hdb_errors:Uee}=ie(),{HTTP_STATUS_CODES:vee,HDB_ERROR_MSGS:Bee}=Uee,Hee=Zn(),qee=di(),Gee=Fi(),{getDatabases:xee}=(ge(),oe(Fe)),Fee=Iee.promisify(wee.authorize),kee=p0.searchByHash,$ee=p0.searchByValue;S0.exports={authHeaderToUser:Vee,isEmpty:Yee,getNodeRecord:Kee,upsertNodeRecord:Wee,buildNodePayloads:Qee,checkClusteringEnabled:jee,getAllNodeRecords:zee,getSystemInfo:Jee,reverseSubscription:m0};async function Vee(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await Fee(t,null),e}a(Vee,"authHeaderToUser");function Yee(e){return e==null}a(Yee,"isEmpty");async function Kee(e){let t=new Cee(ga.SYSTEM_SCHEMA_NAME,ga.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return kee(t)}a(Kee,"getNodeRecord");async function Wee(e){let t=new Lee(ga.SYSTEM_SCHEMA_NAME,ga.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return yee.upsert(t)}a(Wee,"upsertNodeRecord");function m0(e){if(EA.isEmpty(e.subscribe)||EA.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:n}=e,s={schema:t,table:r,hash_attribute:n};return e.subscribe===!0&&e.publish===!1?(s.subscribe=!1,s.publish=!0):e.subscribe===!1&&e.publish===!0?(s.subscribe=!0,s.publish=!1):(s.subscribe=e.subscribe,s.publish=e.publish),s}a(m0,"reverseSubscription");function Qee(e,t,r,n){let s=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:l,table:_}=c,u=EA.getTableHashAttribute(l,_),{subscribe:d,publish:f}=m0(c),E=xee()[l]?.[_],h=new Pee(l,_,u,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);s.push(h)}return new Dee(r,t,s,n)}a(Qee,"buildNodePayloads");function jee(){if(!h0.get(ga.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Mee(new Error,Bee.CLUSTERING_NOT_ENABLED,vee.BAD_REQUEST,void 0,void 0,!0)}a(jee,"checkClusteringEnabled");async function zee(){let e=new Hee(ga.SYSTEM_SCHEMA_NAME,ga.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await $ee(e))}a(zee,"getAllNodeRecords");async function Jee(){let e=await qee.getSystemInformation();return{hdb_version:Gee.version(),node_version:e.node_version,platform:e.platform}}a(Jee,"getSystemInfo")});var hA=T((FAe,y0)=>{"use strict";var ch=ht(),T0=K(),g0=et(),R0=C(),lh=x(),A0=jE(),Xee=hu(),{RemotePayloadObject:Zee}=l_(),{handleHDBError:O0,hdb_errors:ete}=ie(),{HTTP_STATUS_CODES:N0}=ete,{NodeSubscription:b0}=qc();y0.exports=tte;async function tte(e,t){let r;try{r=await ch.request(`${t}.${g0.REQUEST_SUFFIX}`,new Zee(R0.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),lh.trace("Response from remote describe all request:",r)}catch(o){lh.error(`addNode received error from describe all request to remote node: ${o}`);let c=ch.requestErrorHandler(o,"add_node",t);throw O0(new Error,c,N0.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===g0.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw O0(new Error,o,N0.INTERNAL_SERVER_ERROR,"error",o)}let n=r.message,s=[],i=[];for(let o of e){let{table:c}=o,l=o.database??o.schema??"data";if(l===R0.SYSTEM_SCHEMA_NAME){await ch.createLocalTableStream(l,c);let h=new b0(l,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=T0.doesSchemaExist(l),u=n[l]!==void 0,d=c?T0.doesTableExist(l,c):!0,f=c?n?.[l]?.[c]!==void 0:!0;if(!_&&!u||!d&&!f){s.push(o);continue}if(!_&&u&&(lh.trace(`addNode creating schema: ${l}`),await A0.createSchema({operation:"create_schema",schema:l})),!d&&f){lh.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let h=new Xee(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(h.attributes=n[l][c].attributes),await A0.createTable(h)}await ch.createLocalTableStream(l,c);let E=new b0(l,c,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:s}}a(tte,"reviewSubscriptions")});var d_=T(($Ae,C0)=>{"use strict";var{handleHDBError:uh,hdb_errors:rte}=ie(),{HTTP_STATUS_CODES:_h}=rte,{addUpdateNodeValidator:nte}=th(),dh=x(),w0=C(),I0=et(),ste=K(),u_=ht(),__=fi(),ite=X(),ote=hA(),{Node:ate,NodeSubscription:cte}=qc(),{broadcast:lte}=tt(),ute="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",_te="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",dte=ite.get(w0.CONFIG_PARAMS.CLUSTERING_NODENAME);C0.exports=fte;async function fte(e,t=!1){dh.trace("addNode called with:",e),__.checkClusteringEnabled();let r=nte(e);if(r)throw uh(r,r.message,_h.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let d=await __.getNodeRecord(n);if(!ste.isEmptyOrZeroLength(d))throw uh(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,_h.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await ote(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=ute,o;let c=__.buildNodePayloads(s,dte,w0.OPERATIONS_ENUM.ADD_NODE,await __.getSystemInfo()),l=[];for(let d=0,f=s.length;d<f;d++){let E=s[d];s[d].start_time===void 0&&delete s[d].start_time,l.push(new cte(E.schema,E.table,E.publish,E.subscribe))}dh.trace("addNode sending remote payload:",c);let _;try{_=await u_.request(`${n}.${I0.REQUEST_SUFFIX}`,c)}catch(d){dh.error(`addNode received error from request: ${d}`);for(let E=0,h=s.length;E<h;E++){let m=s[E];m.publish=!1,m.subscribe=!1,await u_.updateRemoteConsumer(m,n)}let f=u_.requestErrorHandler(d,"add_node",n);throw uh(new Error,f,_h.INTERNAL_SERVER_ERROR,"error",f)}if(_.status===I0.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${n}: ${_.message}`;throw uh(new Error,d,_h.INTERNAL_SERVER_ERROR,"error",d)}dh.trace(_);for(let d=0,f=s.length;d<f;d++){let E=s[d];await u_.updateRemoteConsumer(E,n),E.subscribe===!0&&await u_.updateConsumerIterator(E.schema,E.table,n,"start")}let u=new ate(n,l,_.system_info);return await __.upsertNodeRecord(u),lte({type:"nats_update"}),i.length>0?o.message=_te:o.message=`Successfully added '${n}' to manifest`,o}a(fte,"addNode")});var SA=T((KAe,P0)=>{"use strict";var{handleHDBError:pA,hdb_errors:Ete}=ie(),{HTTP_STATUS_CODES:mA}=Ete,{addUpdateNodeValidator:hte}=th(),f_=x(),D0=C(),L0=et(),YAe=K(),E_=ht(),h_=fi(),pte=X(),{cloneDeep:mte}=require("lodash"),Ste=hA(),{Node:Tte,NodeSubscription:gte}=qc(),{broadcast:Rte}=tt(),Ate="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",Ote="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Nte=pte.get(D0.CONFIG_PARAMS.CLUSTERING_NODENAME);P0.exports=bte;async function bte(e){f_.trace("updateNode called with:",e),h_.checkClusteringEnabled();let t=hte(e);if(t)throw pA(t,t.message,mA.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await h_.getNodeRecord(r);s.length>0&&(n=mte(s));let{added:i,skipped:o}=await Ste(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=Ate,c;let l=h_.buildNodePayloads(i,Nte,D0.OPERATIONS_ENUM.UPDATE_NODE,await h_.getSystemInfo());for(let u=0,d=i.length;u<d;u++){let f=i[u];f_.trace(`updateNode updating work stream for node: ${r} subscription:`,f),i[u].start_time===void 0&&delete i[u].start_time}f_.trace("updateNode sending remote payload:",l);let _;try{_=await E_.request(`${r}.${L0.REQUEST_SUFFIX}`,l)}catch(u){f_.error(`updateNode received error from request: ${u}`);let d=E_.requestErrorHandler(u,"update_node",r);throw pA(new Error,d,mA.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===L0.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let u=`Error returned from remote node ${r}: ${_.message}`;throw pA(new Error,u,mA.INTERNAL_SERVER_ERROR,"error",u)}f_.trace(_);for(let u=0,d=i.length;u<d;u++){let f=i[u];await E_.updateRemoteConsumer(f,r),f.subscribe===!0?await E_.updateConsumerIterator(f.schema,f.table,r,"start"):await E_.updateConsumerIterator(f.schema,f.table,r,"stop")}return n||(n=[new Tte(r,[],_.system_info)]),await yte(n[0],i,_.system_info),o.length>0?c.message=Ote:c.message=`Successfully updated '${r}'`,c}a(bte,"updateNode");async function yte(e,t,r){let n=e;for(let s=0,i=t.length;s<i;s++){let o=t[s],c=!1;for(let l=0,_=e.subscriptions.length;l<_;l++){let u=n.subscriptions[l];if(u.schema===o.schema&&u.table===o.table){u.publish=o.publish,u.subscribe=o.subscribe,c=!0;break}}c||n.subscriptions.push(new gte(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await h_.upsertNodeRecord(n),Rte({type:"nats_update"})}a(yte,"updateNodeTable")});var H0=T((QAe,B0)=>{"use strict";var v0=require("joi"),{string:M0}=v0.types(),Ite=rt(),U0=C(),wte=X(),Cte=et();B0.exports=Lte;function Lte(e){let t=M0.invalid(wte.get(U0.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(Cte.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=v0.object({operation:M0.valid(U0.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return Ite.validateBySchema(e,r)}a(Lte,"removeNodeValidator")});var Eh=T((zAe,k0)=>{"use strict";var{handleHDBError:q0,hdb_errors:Dte}=ie(),{HTTP_STATUS_CODES:G0}=Dte,Pte=H0(),p_=x(),x0=fi(),Mte=K(),fh=C(),F0=et(),TA=ht(),Ute=X(),{RemotePayloadObject:vte}=l_(),{NodeSubscription:Bte}=qc(),Hte=Eu(),qte=ta(),{broadcast:Gte}=tt(),xte=Ute.get(fh.CONFIG_PARAMS.CLUSTERING_NODENAME);k0.exports=Fte;async function Fte(e){p_.trace("removeNode called with:",e),x0.checkClusteringEnabled();let t=Pte(e);if(t)throw q0(t,t.message,G0.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await x0.getNodeRecord(r);if(Mte.isEmptyOrZeroLength(n))throw q0(new Error,`Node '${r}' was not found.`,G0.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new vte(fh.OPERATIONS_ENUM.REMOVE_NODE,xte,[]),i,o=!1;for(let l=0,_=n.subscriptions.length;l<_;l++){let u=n.subscriptions[l];u.subscribe===!0&&await TA.updateConsumerIterator(u.schema,u.table,r,"stop");try{await TA.updateRemoteConsumer(new Bte(u.schema,u.table,!1,!1),r)}catch(d){p_.error(d)}}try{i=await TA.request(`${r}.${F0.REQUEST_SUFFIX}`,s),p_.trace("Remove node reply from remote node:",r,i)}catch(l){p_.error("removeNode received error from request:",l),o=!0}let c=new Hte(fh.SYSTEM_SCHEMA_NAME,fh.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await qte.deleteRecord(c),Gte({type:"nats_update"}),i?.status===F0.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(p_.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(Fte,"removeNode")});var Y0=T((XAe,V0)=>{"use strict";var $0=require("joi"),{string:kte,array:$te}=$0.types(),Vte=rt(),Yte=th();V0.exports=Kte;function Kte(e){let t=$0.object({operation:kte.valid("configure_cluster").required(),connections:$te.items(Yte.validation_schema).required()});return Vte.validateBySchema(e,t)}a(Kte,"configureClusterValidator")});var ph=T((eOe,z0)=>{"use strict";var Wte=C(),hh=x(),Qte=K(),jte=Eh(),zte=d_(),K0=fi(),Jte=Y0(),{handleHDBError:W0,hdb_errors:Xte}=ie(),{HTTP_STATUS_CODES:Q0}=Xte,Zte="Configure cluster complete.",ere="Failed to configure the cluster. Check the logs for more details.",tre="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";z0.exports=rre;async function rre(e){hh.trace("configure cluster called with:",e),K0.checkClusteringEnabled();let t=Jte(e);if(t)throw W0(t,t.message,Q0.BAD_REQUEST,void 0,void 0,!0);let r=await K0.getAllNodeRecords(),n=[];for(let f=0,E=r.length;f<E;f++)n.push(j0(jte,{operation:Wte.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name));let s=await Promise.allSettled(n);hh.trace("All results from configure_cluster remove node:",s);let i=[],o=e.connections.length;for(let f=0;f<o;f++){let E=e.connections[f];i.push(j0(zte,E,E.node_name))}let c=await Promise.allSettled(i);hh.trace("All results from configure_cluster add node:",c);let l=[],_=[],u=!1,d=s.concat(c);for(let f=0,E=d.length;f<E;f++){let h=d[f];h.status==="rejected"&&(hh.error(h.reason),l.includes(h.reason.node_name)||l.push(h.reason.node_name)),h.status==="fulfilled"&&(u=!0);let m=h?.value?.result;typeof m=="string"&&m.includes("Successfully removed")||h.status==="rejected"||_.push({node_name:h?.value?.node_name,subscriptions:h?.value?.result})}if(Qte.isEmptyOrZeroLength(l))return{message:Zte,connections:_};if(u)return{message:tre,failed_nodes:l,connections:_};throw W0(new Error,ere,Q0.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(rre,"configureCluster");async function j0(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){throw{node_name:r,error:n}}}a(j0,"functionWrapper")});var X0=T((rOe,J0)=>{"use strict";var mh=require("joi"),nre=rt(),{validateSchemaExists:sre,validateTableExists:ire,validateSchemaName:ore}=ys(),are=mh.object({operation:mh.string().valid("purge_stream"),schema:mh.string().custom(sre).custom(ore).required(),table:mh.string().custom(ire).required()});function cre(e){return nre.validateBySchema(e,are)}a(cre,"purgeStreamValidator");J0.exports=cre});var gA=T((sOe,Z0)=>{"use strict";var{handleHDBError:lre,hdb_errors:ure}=ie(),{HTTP_STATUS_CODES:_re}=ure,dre=X0(),fre=ht(),Ere=fi();Z0.exports=hre;async function hre(e){if(e.purge_ingest!==!0){let s=dre(e);if(s)throw lre(s,s.message,_re.BAD_REQUEST,void 0,void 0,!0)}Ere.checkClusteringEnabled();let{schema:t,table:r,purge_ingest:n}=e;return await fre.purgeTableStream(t,r,n),n?"Successfully purged ingest":`Successfully purged table '${t}.${r}'`}a(hre,"purgeStream")});var Th=T((oOe,iB)=>{"use strict";var AA=fi(),pre=ht(),rB=X(),Sh=C(),Ra=et(),mre=K(),RA=x(),{RemotePayloadObject:Sre}=l_(),{ErrorCode:eB}=require("nats"),tB=rB.get(Sh.CONFIG_PARAMS.CLUSTERING_ENABLED),nB=rB.get(Sh.CONFIG_PARAMS.CLUSTERING_NODENAME);iB.exports={clusterStatus:Tre,buildNodeStatus:sB};async function Tre(){let e={node_name:nB,is_enabled:tB,connections:[]};if(!tB)return e;let t=await AA.getAllNodeRecords();if(mre.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(sB(t[n],e.connections));return await Promise.allSettled(r),e}a(Tre,"clusterStatus");async function sB(e,t){let r=e.name,n=new Sre(Sh.OPERATIONS_ENUM.CLUSTER_STATUS,nB,void 0,await AA.getSystemInfo()),s,i,o=Ra.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await pre.request(Ra.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===Ra.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Ra.CLUSTER_STATUS_STATUSES.CLOSED,RA.error(`Error getting node status from ${r} `,s))}catch(l){RA.warn(`Error getting node status from ${r}`,l),l.code===eB.NoResponders?o=Ra.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===eB.Timeout?o=Ra.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Ra.CLUSTER_STATUS_STATUSES.CLOSED}let c=new gre(r,o,s?.message?.ports?.clustering,s?.message?.ports?.operations_api,i,s?.message?.uptime,e.subscriptions,s?.message?.system_info);try{let l={name:r,system_info:s?.message?.system_info};e.system_info?.hdb_version!==Sh.PRE_4_0_0_VERSION&&await AA.upsertNodeRecord(l)}catch(l){RA.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}a(sB,"buildNodeStatus");function gre(e,t,r,n,s,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:n},this.latency_ms=s,this.uptime=i,this.subscriptions=o,this.system_info=c}a(gre,"NodeStatusObject")});var Rh=T((cOe,oB)=>{"use strict";var{handleHDBError:Rre,hdb_errors:Are}=ie(),{HTTP_STATUS_CODES:Ore}=Are,Nre=ht(),bre=fi(),OA=K(),gh=require("joi"),yre=rt(),Ire=2e3,wre=gh.object({timeout:gh.number().min(1),connected_nodes:gh.boolean(),routes:gh.boolean()});oB.exports=Cre;async function Cre(e){bre.checkClusteringEnabled();let t=yre.validateBySchema(e,wre);if(t)throw Rre(t,t.message,Ore.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||OA.autoCastBoolean(n),o=s===void 0||OA.autoCastBoolean(s),c={nodes:[]},l=await Nre.getServerList(r??Ire),_={};if(i)for(let u=0,d=l.length;u<d;u++){let f=l[u].statsz;f&&(_[l[u].server.name]=f.routes)}for(let u=0,d=l.length;u<d;u++){if(l[u].statsz)continue;let f=l[u].server,E=l[u].data;if(f.name.endsWith("-hub")){let h={name:f.name.slice(0,-4),response_time:l[u].response_time};i&&(h.connected_nodes=[],_[f.name]&&_[f.name].forEach(m=>{h.connected_nodes.includes(m.name.slice(0,-4))||h.connected_nodes.push(m.name.slice(0,-4))})),o&&(h.routes=E.cluster?.urls?E.cluster?.urls.map(m=>({host:m.split(":")[0],port:OA.autoCast(m.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(Cre,"clusterNetwork")});var uB=T((uOe,lB)=>{"use strict";var NA=require("joi"),aB=rt(),{route_constraints:cB}=hg();lB.exports={setRoutesValidator:Lre,deleteRoutesValidator:Dre};function Lre(e){let t=NA.object({server:NA.valid("hub","leaf").required(),routes:cB.required()});return aB.validateBySchema(e,t)}a(Lre,"setRoutesValidator");function Dre(e){let t=NA.object({routes:cB.required()});return aB.validateBySchema(e,t)}a(Dre,"deleteRoutesValidator")});var Oh=T((dOe,EB)=>{"use strict";var Aa=Et(),bA=K(),Ah=C(),_B=uB(),{handleHDBError:dB,hdb_errors:Pre}=ie(),{HTTP_STATUS_CODES:fB}=Pre,Mre="cluster routes successfully set",Ure="cluster routes successfully deleted";EB.exports={setRoutes:vre,getRoutes:Bre,deleteRoutes:Hre};function vre(e){let t=_B.setRoutesValidator(e);if(t)throw dB(t,t.message,fB.BAD_REQUEST,void 0,void 0,!0);let r=Aa.getClusteringRoutes(),n=e.server==="hub"?r.hub_routes:r.leaf_routes,s=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],o=[];for(let c=0,l=e.routes.length;c<l;c++){let _=e.routes[c];_.port=bA.autoCast(_.port);let u=n.some(f=>f.host===_.host&&f.port===_.port),d=s.some(f=>f.host===_.host&&f.port===_.port);u||d?i.push(_):(n.push(_),o.push(_))}return e.server==="hub"?Aa.updateConfigValue(Ah.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n):Aa.updateConfigValue(Ah.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n),{message:Mre,set:o,skipped:i}}a(vre,"setRoutes");function Bre(){let e=Aa.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(Bre,"getRoutes");function Hre(e){let t=_B.deleteRoutesValidator(e);if(t)throw dB(t,t.message,fB.BAD_REQUEST,void 0,void 0,!0);let r=Aa.getClusteringRoutes(),n=r.hub_routes,s=r.leaf_routes,i=[],o=[],c=!1,l=!1;for(let _=0,u=e.routes.length;_<u;_++){let d=e.routes[_],f=!1;for(let E=0,h=n.length;E<h;E++){let m=n[E];if(d.host===m.host&&d.port===m.port){n.splice(E,1),f=!0,c=!0,i.push(d);break}}if(!f){let E=!0;for(let h=0,m=s.length;h<m;h++){let S=s[h];if(d.host===S.host&&d.port===S.port){s.splice(h,1),l=!0,E=!1,i.push(d);break}}E&&o.push(d)}}return c&&(n=bA.isEmptyOrZeroLength(n)?null:n,Aa.updateConfigValue(Ah.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n)),l&&(s=bA.isEmptyOrZeroLength(s)?null:s,Aa.updateConfigValue(Ah.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s)),{message:Ure,deleted:i,skipped:o}}a(Hre,"deleteRoutes")});var pB=T((EOe,hB)=>{"use strict";var m_=require("alasql"),Oa=require("recursive-iterator"),us=x(),qre=K(),S_=C(),yA=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,xre(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(s=>S_.SEARCH_WILDCARDS.includes(s.columnid));if(r.length===0)return this.ast;let n=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(s=>!S_.SEARCH_WILDCARDS.includes(s.columnid)),r.forEach(s=>{let i=this.table_to_schema_lookup.has(s.tableid)?this.table_to_schema_lookup.get(s.tableid):n,o=this.table_lookup.has(s.tableid)?this.table_lookup.get(s.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][S_.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=Gre(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(_=>({attribute_name:_.attribute}));let l=this.affected_attributes.get(i).get(o).filter(_=>!S_.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let u=new m_.yy.Column({columnid:_});s.tableid&&(u.tableid=s.tableid),this.ast.columns.push(u),l.includes(_)||l.push(_)}),this.affected_attributes.get(i).set(o,l)}}),this.ast}};function Gre(e){return e.filter(t=>t[S_.PERMS_CRUD_ENUM.READ])}a(Gre,"filterReadRestrictedAttrs");function xre(e,t,r,n,s){Fre(e,t,r,n,s)}a(xre,"interpretAST");function T_(e,t,r,n,s){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),n&&!n.has(e.as)&&n.set(e.as,e.databaseid)),s)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),s.set(o,i)}}a(T_,"addSchemaTableToMap");function Fre(e,t,r,n,s){if(!e){us.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof m_.yy.Insert?Yre(e,t,r):e instanceof m_.yy.Select?kre(e,t,r,n,s):e instanceof m_.yy.Update?$re(e,t,r):e instanceof m_.yy.Delete?Vre(e,t,r):us.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(Fre,"getRecordAttributesAST");function kre(e,t,r,n,s){if(!e){us.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(qre.isEmptyOrZeroLength(i)){us.error("No schema specified");return}e.from.forEach(c=>{T_(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),T_(c.table,t,r,n,s)});let o=new Oa(e.columns);for(let{node:c}of o)if(c&&c.columnid){let l=c.tableid,_=n.has(l)?n.get(l):i;if(l||(l=e.from[0].tableid),!t.get(_).has(l))if(r.has(l))l=r.get(l);else{us.info(`table specified as ${l} not found.`);return}t.get(_).get(l).indexOf(c.columnid)<0&&t.get(_).get(l).push(c.columnid)}if(e.where){let c=new Oa(e.where),l=e.from[0].tableid;for(let{node:_}of c)if(_&&_.columnid){let u=_.tableid?_.tableid:l;if(!t.get(i).has(u))if(r.has(u))u=r.get(u);else{us.info(`table specified as ${u} not found.`);continue}t.get(i).get(u).indexOf(_.columnid)<0&&t.get(i).get(u).push(_.columnid)}}if(e.joins&&e.joins.forEach(c=>{let l=new Oa(c.on);for(let{node:_}of l)if(_&&_.columnid){let u=_.tableid,d=s.get(u);if(!t.get(d).has(u))if(r.has(u))u=r.get(u);else{us.info(`table specified as ${u} not found.`);continue}t.get(d).get(u).indexOf(_.columnid)<0&&t.get(d).get(u).push(_.columnid)}}),e.order){let c=new Oa(e.order);for(let{node:l}of c)if(l&&l.columnid){let _=l.tableid,u=n.has(_)?n.get(_):i;if(_||(_=e.from[0].tableid),!t.get(u).has(_))if(r.has(_))_=r.get(_);else{us.info(`table specified as ${_} not found.`);return}t.get(u).get(_).indexOf(l.columnid)<0&&t.get(u).get(_).push(l.columnid)}}}a(kre,"getSelectAttributes");function $re(e,t,r){if(!e){us.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new Oa(e.columns),s=e.table.databaseid;T_(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&IA(e.table.tableid,s,i.columnid,t,r)}a($re,"getUpdateAttributes");function Vre(e,t,r){if(!e){us.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new Oa(e.where),s=e.table.databaseid;T_(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&IA(e.table.tableid,s,i.columnid,t,r)}a(Vre,"getDeleteAttributes");function Yre(e,t,r){if(!e){us.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new Oa(e.columns),s=e.into.databaseid;T_(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&IA(e.into.tableid,s,i.columnid,t,r)}a(Yre,"getInsertAttributes");function IA(e,t,r,n,s){if(!n.get(t))return;let i=e;n.get(t).has(i)||(i=s.get(i)),n.get(t).get(i).push(r)}a(IA,"pushAttribute");hB.exports=yA});var bh=T((pOe,gB)=>{var Nh=ia(),mB=require("chalk"),dn=x(),SB=require("prompt"),{promisify:Kre}=require("util"),wA=C(),Wre=require("fs-extra"),Qre=require("path"),jre=K(),zre=Fi(),TB=X();TB.initSync();var Jre=require("moment"),Xre=Kre(SB.get),Zre=Qre.join(TB.getHdbBasePath(),wA.LICENSE_KEY_DIR_NAME,wA.LICENSE_FILE_NAME,wA.LICENSE_FILE_NAME);gB.exports={getFingerprint:tne,setLicense:ene,parseLicense:CA,register:rne,getRegistrationInfo:sne};async function ene(e){if(e&&e.key&&e.company){try{dn.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await CA(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw dn.error(r),dn.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(ene,"setLicense");async function tne(){let e={};try{e=await Nh.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw dn.error(r),dn.error(t),new Error(r)}return e}a(tne,"getFingerprint");async function CA(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");dn.info("Validating license input...");let r=Nh.validateLicense(e,t);if(dn.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(dn.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(dn.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{dn.info("writing license to disk"),await Wre.writeFile(Zre,JSON.stringify({license_key:e,company:t}))}catch(n){throw dn.error("Failed to write License"),n}return"Registration successful."}a(CA,"parseLicense");async function rne(){let e=await nne();return CA(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(rne,"register");async function nne(){let e=await Nh.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:mB.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:mB.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{SB.start()}catch(n){dn.error(n)}let r;try{r=await Xre(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(nne,"promptForRegistration");async function sne(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await Nh.getLicense()}catch(r){throw dn.error(`There was an error when searching licenses due to: ${r.message}`),r}if(jre.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=zre.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=Jre.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(sne,"getRegistrationInfo")});var AB=T((SOe,RB)=>{"use strict";var ine=et(),LA=class{static{a(this,"HubConfigObject")}constructor(t,r,n,s,i,o,c,l,_,u,d,f,E,h){this.port=t,o===null&&(o=void 0),this.server_name=r+ine.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!1},this.tls={cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l},this.leafnodes={port:_,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c}},this.cluster={name:u,port:d,routes:f,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l}},this.accounts={SYS:{users:E},HDB:{users:h}},this.system_account="SYS"}};RB.exports=LA});var bB=T((gOe,NB)=>{"use strict";var OB=et(),DA=class{static{a(this,"LeafConfigObject")}constructor(t,r,n,s,i,o,c,l,_,u,d){this.port=t,d===null&&(d=void 0),this.server_name=r+OB.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+OB.SERVER_SUFFIX.LEAF},this.tls={cert_file:_,key_file:u,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:l,jetstream:"enabled"}},this.system_account="SYS"}};NB.exports=DA});var IB=T((AOe,yB)=>{"use strict";var PA=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};yB.exports=PA});var CB=T((NOe,wB)=>{"use strict";var one=et(),MA=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+one.SERVER_SUFFIX.ADMIN,this.password=r}};wB.exports=MA});var Lh=T((yOe,PB)=>{"use strict";var Gc=require("path"),wh=require("fs-extra"),ane=AB(),cne=bB(),lne=IB(),une=CB(),UA=wr(),Fc=K(),Br=Et(),Ih=C(),g_=et(),{CONFIG_PARAMS:mt}=Ih,R_=x(),A_=X(),LB=li(),vA=ht(),xc="clustering",_ne=1e4,DB=5;PB.exports={generateNatsConfig:fne,removeNatsConfig:Ene,getHubConfigPath:dne};function dne(){let e=A_.get(mt.ROOTPATH);return Gc.join(e,xc,g_.NATS_CONFIG_FILES.HUB_SERVER)}a(dne,"getHubConfigPath");async function fne(e=!1,t=void 0){A_.initSync();let r=A_.get(mt.ROOTPATH),n=Gc.join(r,xc,g_.PID_FILES.HUB),s=Gc.join(r,xc,g_.PID_FILES.LEAF),i=Br.getConfigFromFile(mt.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=Gc.join(r,xc,g_.NATS_CONFIG_FILES.HUB_SERVER),c=Gc.join(r,xc,g_.NATS_CONFIG_FILES.LEAF_SERVER),l=Br.getConfigFromFile(mt.CLUSTERING_TLS_CERTIFICATE),_=Br.getConfigFromFile(mt.CLUSTERING_TLS_PRIVATEKEY),u=Br.getConfigFromFile(mt.CLUSTERING_TLS_CERT_AUTH),d=Br.getConfigFromFile(mt.CLUSTERING_TLS_INSECURE),f=Br.getConfigFromFile(mt.CLUSTERING_TLS_VERIFY),E=Br.getConfigFromFile(mt.CLUSTERING_NODENAME),h=Br.getConfigFromFile(mt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await vA.checkNATSServerInstalled()||Ch("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let m=await UA.listUsers(),S=Br.getConfigFromFile(mt.CLUSTERING_USER),R=await UA.getClusterUser();(Fc.isEmpty(R)||R.active!==!0)&&Ch(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await yh(mt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await yh(mt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await yh(mt.CLUSTERING_HUBSERVER_NETWORK_PORT),await yh(mt.CLUSTERING_LEAFSERVER_NETWORK_PORT));let g=[],A=[];for(let[z,J]of m.entries())J.role.role===Ih.ROLE_TYPES_ENUM.CLUSTER_USER&&J.active&&(g.push(new une(J.username,LB.decrypt(J.hash))),A.push(new lne(J.username,LB.decrypt(J.hash))));let P=[],{hub_routes:v}=Br.getClusteringRoutes();if(!Fc.isEmptyOrZeroLength(v))for(let z of v)P.push(`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@${z.host}:${z.port}`);let U=new ane(Br.getConfigFromFile(mt.CLUSTERING_HUBSERVER_NETWORK_PORT),E,n,l,_,u,d,f,h,Br.getConfigFromFile(mt.CLUSTERING_HUBSERVER_CLUSTER_NAME),Br.getConfigFromFile(mt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),P,g,A);u==null&&(delete U.tls.ca_file,delete U.leafnodes.tls.ca_file),t=Fc.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===Ih.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await wh.writeJson(o,U),R_.trace(`Hub server config written to ${o}`));let F=`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,H=`tls://${R.uri_encoded_name}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,j=new cne(Br.getConfigFromFile(mt.CLUSTERING_LEAFSERVER_NETWORK_PORT),E,s,i,[F],[H],g,A,l,_,u,d);u==null&&delete j.tls.ca_file,(t===void 0||t===Ih.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await wh.writeJson(c,j),R_.trace(`Leaf server config written to ${c}`))}a(fne,"generateNatsConfig");async function yh(e){let t=A_.get(e);return Fc.isEmpty(t)&&Ch(`port undefined for '${e}'`),await Fc.isPortTaken(t)&&Ch(`'${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(yh,"isPortAvailable");function Ch(e){let t=`Error generating clustering config: ${e}`;R_.error(t),console.error(t),process.exit(1)}a(Ch,"generateNatsConfigError");async function Ene(e){let{port:t,config_file:r}=vA.getServerConfig(e),{username:n,decrypt_hash:s}=await UA.getClusterUser(),i=0,o=2e3;for(;i<DB;){try{let _=await vA.createConnection(t,n,s,!1);if(_.protocol.connected===!0){_.close();break}}catch(_){R_.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${_}`)}if(i++,i>=DB)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 Fc.async_set_timeout(o*(i*2))}let c="0".repeat(_ne),l=Gc.join(A_.get(mt.ROOTPATH),xc,r);await wh.writeFile(l,c),await wh.remove(l),R_.notify(e,"started.")}a(Ene,"removeNatsConfig")});var qB=T((wOe,HB)=>{"use strict";var fn=X(),hne=ia(),me=C(),O_=et(),Ei=require("path"),{PACKAGE_ROOT:Ph}=C(),MB=X(),Dh=K(),kc="/dev/null",pne=Ei.join(Ph,"launchServiceScripts"),UB=Ei.join(Ph,"utility/scripts"),mne=Ei.join(UB,me.HDB_RESTART_SCRIPT),vB=Ei.resolve(Ph,"dependencies",`${process.platform}-${process.arch}`,O_.NATS_BINARY_NAME);function BB(){let t=hne.licenseSearch().ram_allocation||me.RAM_ALLOCATION_ENUM.DEFAULT,r=me.MEM_SETTING_KEY+t,n={[me.PROCESS_NAME_ENV_PROP]:me.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return Dh.noBootFile()&&(n[me.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Dh.getEnvCliRootPath()),{name:me.PROCESS_DESCRIPTORS.HDB,script:me.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:Ph}}a(BB,"generateMainServerConfig");var Sne=9930;function Tne(){fn.initSync(!0);let e=fn.get(me.CONFIG_PARAMS.ROOTPATH),t=Ei.join(e,"clustering",O_.NATS_CONFIG_FILES.HUB_SERVER),r=Ei.join(fn.get(me.HDB_SETTINGS_NAMES.LOG_PATH_KEY),me.LOG_NAMES.HDB),n=MB.get(me.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=O_.LOG_LEVEL_FLAGS[fn.get(me.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:me.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==Sne?"-"+n:""),script:vB,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[me.PROCESS_NAME_ENV_PROP]:me.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return fn.get(me.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=kc,i.error_file=kc),i}a(Tne,"generateNatsHubServerConfig");var gne=9940;function Rne(){fn.initSync(!0);let e=fn.get(me.CONFIG_PARAMS.ROOTPATH),t=Ei.join(e,"clustering",O_.NATS_CONFIG_FILES.LEAF_SERVER),r=Ei.join(fn.get(me.HDB_SETTINGS_NAMES.LOG_PATH_KEY),me.LOG_NAMES.HDB),n=MB.get(me.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=O_.LOG_LEVEL_FLAGS[fn.get(me.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:me.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==gne?"-"+n:""),script:vB,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[me.PROCESS_NAME_ENV_PROP]:me.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return fn.get(me.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=kc,i.error_file=kc),i}a(Rne,"generateNatsLeafServerConfig");function Ane(){fn.initSync();let e=Ei.join(fn.get(me.CONFIG_PARAMS.LOGGING_ROOT),me.LOG_NAMES.HDB),t={name:me.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:me.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[me.PROCESS_NAME_ENV_PROP]:me.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:pne,autorestart:!1};return fn.get(me.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=kc,t.error_file=kc),t}a(Ane,"generateClusteringUpgradeV4ServiceConfig");function One(){let e={[me.PROCESS_NAME_ENV_PROP]:me.PROCESS_DESCRIPTORS.RESTART_HDB};return Dh.noBootFile()&&(e[me.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Dh.getEnvCliRootPath()),{...{name:me.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:UB},script:mne}}a(One,"generateRestart");function Nne(){return{apps:[BB()]}}a(Nne,"generateAllServiceConfigs");HB.exports={generateAllServiceConfigs:Nne,generateMainServerConfig:BB,generateRestart:One,generateNatsHubServerConfig:Tne,generateNatsLeafServerConfig:Rne,generateClusteringUpgradeV4ServiceConfig:Ane}});var $c=T((DOe,JB)=>{"use strict";var He=C(),bne=K(),pi=Lh(),Mh=ht(),hi=et(),_o=qB(),Uh=X(),fo=x(),yne=fi(),{startWorker:GB,onMessageFromWorkers:Ine}=tt(),wne=di(),LOe=require("util"),Cne=require("child_process"),Lne=require("fs"),{execFile:Dne}=Cne,we;JB.exports={enterPM2Mode:Pne,start:Eo,stop:BA,reload:FB,restart:kB,list:HA,describe:VB,connect:mi,kill:Hne,startAllServices:qne,startService:qA,getUniqueServicesList:YB,restartAllServices:Gne,isServiceRegistered:KB,reloadStopStart:WB,restartHdb:$B,deleteProcess:vne,startClusteringProcesses:jB,startClusteringThreads:zB,isHdbRestartRunning:Bne,isClusteringRunning:Fne,stopClustering:xne,reloadClustering:kne};var N_=!1;Ine(e=>{e.type==="restart"&&Uh.initSync(!0)});function Pne(){N_=!0}a(Pne,"enterPM2Mode");function mi(){return we||(we=require("pm2")),new Promise((e,t)=>{we.connect((r,n)=>{fo.setupConsoleLogging(),r&&t(r),e(n)})})}a(mi,"connect");var Hr,Mne=10,xB;function Eo(e,t=!1){if(N_)return Une(e);let r=Dne(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=Hr.indexOf(r);o>-1&&Hr.splice(o,1),!xB&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<Mne&&(Lne.existsSync(pi.getHubConfigPath())?Eo(e):(await pi.generateNatsConfig(!0),Eo(e),await new Promise(c=>setTimeout(c,3e3)),await pi.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await pi.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let o=Uh.get(He.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,l,_=0,u;for(;l=c.exec(i);){if(l.index&&hi.LOG_LEVEL_HIERARCHY[o]>=hi.LOG_LEVEL_HIERARCHY[u||"info"]){let E=u===hi.LOG_LEVELS.ERR||u===hi.LOG_LEVELS.WRN?fo.OUTPUTS.STDERR:fo.OUTPUTS.STDOUT;fo.logCustomLevel(u||"info",E,n,i.slice(_,l.index).trim())}let[d,f]=l;_=l.index+d.length,u=hi.LOG_LEVELS[f]}if(hi.LOG_LEVEL_HIERARCHY[o]>=hi.LOG_LEVEL_HIERARCHY[u||"info"]){let d=u===hi.LOG_LEVELS.ERR||u===hi.LOG_LEVELS.WRN?fo.OUTPUTS.STDERR:fo.OUTPUTS.STDOUT;fo.logCustomLevel(u||"info",d,n,i.slice(_).trim())}}if(a(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),Hr=[],!Hr&&!t){let i=a(()=>{xB=!0,Hr&&(Hr.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)}Hr.push(r)}a(Eo,"start");function Une(e){return new Promise(async(t,r)=>{try{await mi()}catch(n){r(n)}we.start(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(Une,"startWithPM2");function BA(e){if(!N_){for(let t of Hr||[])t.name===e&&(Hr.splice(Hr.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await mi()}catch(n){r(n)}we.stop(e,async(n,s)=>{n&&(we.disconnect(),r(n)),we.delete(e,(i,o)=>{i&&(we.disconnect(),r(n)),we.disconnect(),t(o)})})})}a(BA,"stop");function FB(e){return new Promise(async(t,r)=>{try{await mi()}catch(n){r(n)}we.reload(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(FB,"reload");function kB(e){if(!N_)for(let t of Hr||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await mi()}catch(n){r(n)}we.restart(e,(n,s)=>{we.disconnect(),t(s)})})}a(kB,"restart");function vne(e){return new Promise(async(t,r)=>{try{await mi()}catch(n){r(n)}we.delete(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(vne,"deleteProcess");async function $B(){await Eo(_o.generateRestart())}a($B,"restartHdb");async function Bne(){let e=await HA();for(let t in e)if(e[t].name===He.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(Bne,"isHdbRestartRunning");function HA(){return new Promise(async(e,t)=>{try{await mi()}catch(r){t(r)}we.list((r,n)=>{r&&(we.disconnect(),t(r)),we.disconnect(),e(n)})})}a(HA,"list");function VB(e){return new Promise(async(t,r)=>{try{await mi()}catch(n){r(n)}we.describe(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(VB,"describe");function Hne(){if(!N_){for(let e of Hr||[])e.kill();Hr=[];return}return new Promise(async(e,t)=>{try{await mi()}catch(r){t(r)}we.killDaemon((r,n)=>{r&&(we.disconnect(),t(r)),we.disconnect(),e(n)})})}a(Hne,"kill");async function qne(){try{await jB(),await zB(),await Eo(_o.generateAllServiceConfigs())}catch(e){throw we?.disconnect(),e}}a(qne,"startAllServices");async function qA(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case He.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=_o.generateMainServerConfig();break;case He.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=_o.generateNatsIngestServiceConfig();break;case He.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=_o.generateNatsReplyServiceConfig();break;case He.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=_o.generateNatsHubServerConfig(),await Eo(r,t),await pi.removeNatsConfig(e);return;case He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=_o.generateNatsLeafServerConfig(),await Eo(r,t),await pi.removeNatsConfig(e);return;case He.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=_o.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Eo(r)}catch(r){throw we?.disconnect(),r}}a(qA,"startService");async function YB(){try{let e=await HA(),t={};for(let r=0,n=e.length;r<n;r++){let s=e[r];t[s.name]===void 0&&(t[s.name]={name:s.name,exec_mode:s.pm2_env.exec_mode})}return t}catch(e){throw we?.disconnect(),e}}a(YB,"getUniqueServicesList");async function Gne(e=[]){try{let t=!1,r=await YB();for(let n=0,s=Object.values(r).length;n<s;n++){let o=Object.values(r)[n].name;e.includes(o)||(o===He.PROCESS_DESCRIPTORS.HDB?t=!0:await kB(o))}t&&await WB(He.PROCESS_DESCRIPTORS.HDB)}catch(t){throw we?.disconnect(),t}}a(Gne,"restartAllServices");async function KB(e){if(Hr?.find(r=>r.name===e))return!0;let t=await wne.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(KB,"isServiceRegistered");async function WB(e){let t=Uh.get(He.CONFIG_PARAMS.THREADS_COUNT)??Uh.get(He.CONFIG_PARAMS.THREADS),r=await VB(e),n=bne.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await BA(e),await qA(e)):e===He.PROCESS_DESCRIPTORS.HDB?await $B():await FB(e)}a(WB,"reloadStopStart");var QB;async function jB(e=!1){for(let t in He.CLUSTERING_PROCESSES){let r=He.CLUSTERING_PROCESSES[t];await qA(r,e)}}a(jB,"startClusteringProcesses");async function zB(){QB=GB(He.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:He.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await Mh.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await Mh.updateLocalStreams();let e=await yne.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===He.PRE_4_0_0_VERSION){fo.info("Starting clustering upgrade 4.0.0 process"),GB(He.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(zB,"startClusteringThreads");async function xne(){for(let e in He.CLUSTERING_PROCESSES)if(e!==He.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===He.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await QB.terminate();else{let t=He.CLUSTERING_PROCESSES[e];await BA(t)}}a(xne,"stopClustering");async function Fne(){for(let e in He.CLUSTERING_PROCESSES){let t=He.CLUSTERING_PROCESSES[e];if(await KB(t)===!1)return!1}return!0}a(Fne,"isClusteringRunning");async function kne(){await pi.generateNatsConfig(!0),await Mh.reloadNATSHub(),await Mh.reloadNATSLeaf(),await pi.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await pi.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(kne,"reloadClustering")});var Na=T((UOe,sH)=>{"use strict";var $ne=require("minimist"),{isMainThread:xA,parentPort:eH}=require("worker_threads"),ct=C(),{PROCESS_DESCRIPTORS_VALIDATE:b_}=ct,vs=x(),FA=K(),Bh=Lh(),vh=ht(),MOe=et(),tH=Et(),Bs=$c(),XB=di(),Vne=Uo(),{restartWorkers:Hh,onMessageByType:Yne}=tt(),{handleHDBError:Kne,hdb_errors:Wne}=ie(),{HTTP_STATUS_CODES:Qne}=Wne,qh=X();qh.initSync();var y_=`Restarting HarperDB. This may take up to ${ct.RESTART_TIMEOUT_MS/1e3} seconds.`,jne="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",ZB="Clustering is not enabled so cannot be restarted",zne="Invalid service",Vc,vn;sH.exports={restart:rH,restartService:kA};xA&&Yne(ct.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?kA({service:e.workerType}):rH({operation:"restart"})});async function rH(e){vn=Object.keys(e).length===0,Vc=await Bs.isServiceRegistered(ct.HDB_PROC_DESCRIPTOR);let t=$ne(process.argv);if(t.service){await kA(t);return}if(vn&&!Vc){console.error(jne);return}if(vn&&console.log(y_),Vc){Bs.enterPM2Mode(),vs.notify(y_);let r=Vne(Object.keys(ct.CONFIG_PARAM_MAP),!0);return FA.isEmptyOrZeroLength(Object.keys(r))||tH.updateConfigValue(void 0,void 0,r,!0,!0),Jne(),y_}return xA?(vs.notify(y_),setTimeout(()=>{Hh()},50)):eH.postMessage({type:ct.ITC_EVENT_TYPES.RESTART}),y_}a(rH,"restart");async function kA(e){let{service:t}=e;if(ct.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw Kne(new Error,zne,Qne.BAD_REQUEST,void 0,void 0,!0);if(Vc=await Bs.isServiceRegistered(ct.HDB_PROC_DESCRIPTOR),!xA)return eH.postMessage({type:ct.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case b_.clustering:if(!qh.get(ct.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=ZB;break}vn&&console.log("Restarting clustering"),vs.notify("Restarting clustering"),await nH();break;case b_.clustering_config:case b_["clustering config"]:if(!qh.get(ct.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=ZB;break}vn&&console.log("Restarting clustering_config"),vs.notify("Restarting clustering_config"),await Bs.reloadClustering();break;case"custom_functions":case"custom functions":case b_.harperdb:case b_.http_workers:if(vn&&!Vc){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}vn&&console.log("Restarting http_workers"),vs.notify("Restarting http_workers"),vn?await Bs.restart(ct.HDB_PROC_DESCRIPTOR):setTimeout(()=>{Hh("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(vs.error(r),vn&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(kA,"restartService");async function Jne(){await nH(),await Bs.restart(ct.HDB_PROC_DESCRIPTOR),await FA.async_set_timeout(2e3),qh.get(ct.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await GA(),vn&&(await vh.closeConnection(),process.exit(0))}a(Jne,"restartPM2Mode");async function nH(){if(!tH.getConfigFromFile(ct.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await XB.getHDBProcessInfo()).clustering.length===0)vs.trace("Clustering not running, restart will start clustering services"),await Bh.generateNatsConfig(!0),await Bs.startClusteringProcesses(),await Bs.startClusteringThreads(),await GA(),vn&&await vh.closeConnection();else{await Bh.generateNatsConfig(!0),Vc?(vs.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await Bs.restart(ct.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Bs.restart(ct.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await XB.getHDBProcessInfo()).clustering.forEach(s=>{vs.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await FA.async_set_timeout(3e3),await GA(),await vh.updateLocalStreams(),vn&&await vh.closeConnection(),vs.trace("Restart clustering restarting ingest and reply service threads");let t=Hh(ct.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=Hh(ct.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(nH,"restartClustering");async function GA(){await Bh.removeNatsConfig(ct.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Bh.removeNatsConfig(ct.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(GA,"removeNatsConfig")});var hH=T((HOe,EH)=>{"use strict";var BOe=require("lodash"),qr=C(),{handleHDBError:iH,hdb_errors:Xne}=ie(),{HDB_ERROR_MSGS:Zne,HTTP_STATUS_CODES:ese}=Xne,$A=x();EH.exports={getRolePermissions:rse};var ba=Object.create(null),tse=a(e=>({key:e,perms:{}}),"perms_template_obj"),lH=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),uH=a((e=!1,t=!1,r=!1,n=!1)=>({[qr.PERMS_CRUD_ENUM.READ]:e,[qr.PERMS_CRUD_ENUM.INSERT]:t,[qr.PERMS_CRUD_ENUM.UPDATE]:r,[qr.PERMS_CRUD_ENUM.DELETE]:n}),"permissions_template"),VA=a((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...uH(t,r,n,s)}),"table_perms_template"),oH=a((e,t=uH())=>({attribute_name:e,describe:fH(t),[I_]:t[I_],[YA]:t[YA],[KA]:t[KA]}),"attr_perms_template"),aH=a((e,t=!1)=>({attribute_name:e,describe:t,[I_]:t}),"timestamp_attr_perms_template"),{READ:I_,INSERT:YA,UPDATE:KA}=qr.PERMS_CRUD_ENUM,_H=Object.values(qr.PERMS_CRUD_ENUM),dH=[I_,YA,KA];function rse(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[qr.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(ba[t]&&ba[t].key===n)return ba[t].perms;let s=nse(e,r);return ba[t]?ba[t].key=n:ba[t]=tse(n),ba[t].perms=s,s}catch(r){if(!e[qr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[qr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<qr.PERMS_UPDATE_RELEASE_TIMESTAMP){let n=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw $A.error(n),$A.debug(r),iH(new Error,Zne.OUTDATED_PERMS_TRANSLATION_ERROR,ese.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
|
|
12
|
+
${r.stack}`;throw $A.error(n),iH(new Error)}}}a(rse,"getRolePermissions");function nse(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[qr.SYSTEM_SCHEMA_NAME]=n[qr.SYSTEM_SCHEMA_NAME],r.structure_user=n.structure_user;let s=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(s===!0||s.indexOf(i)>-1){r[i]=sse(t[i]);return}r[i]=lH(),n[i]?(n[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(n[i].tables[o]){let c=n[i].tables[o],l=t[i][o],_=ise(c,l);r[i].describe||_H.forEach(u=>{_[u]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=VA()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=VA()})}),r}a(nse,"translateRolePermissions");function sse(e){let t=lH(!0);return Object.keys(e).forEach(r=>{t.tables[r]=VA(!0,!0,!0,!0,!0)}),t}a(sse,"createStructureUserPermissions");function ise(e,t){let{attribute_permissions:r}=e;if(r.length>0){let s=Object.assign({},e);s.attribute_permissions=[];let i=r.reduce((_,u)=>{let{attribute_name:d}=u,f=u;return qr.TIME_STAMP_NAMES.includes(d)&&(f=aH(d,u[I_])),_[d]=f,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],l=oH(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let u=i[_];u.describe=fH(u),s.attribute_permissions.push(u),c||ose(u,l)}else if(_!==o){let u;qr.TIME_STAMP_NAMES.includes(_)?u=aH(_):u=oH(_),s.attribute_permissions.push(u)}}),c||s.attribute_permissions.push(l),s.describe=cH(s),s}else return e.describe=cH(e),e}a(ise,"getTableAttrPerms");function cH(e){return _H.filter(t=>e[t]).length>0}a(cH,"getSchemaTableDescribePerm");function fH(e){return dH.filter(t=>e[t]).length>0}a(fH,"getAttributeDescribePerm");function ose(e,t){dH.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(ose,"checkForHashPerms")});var w_={};$e(w_,{authentication:()=>OH,bypassAuth:()=>fse,login:()=>hse,logout:()=>pse,start:()=>Ese});function fse(){AH=!0}async function OH(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,o=[];try{if(i){let E=e.isOperationsServer?use?lse:[]:cse?ase:[];if(E.includes(i)||E.includes("*")){if(e.method==="OPTIONS"){let h=new ro([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return Gh&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),Gh&&o.push("Access-Control-Allow-Credentials","true")}}let l,_;if(Gh){let E=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=s?.indexOf(E);if(h>=0){let m=s.indexOf(";",h),S=s.indexOf("=",h);l=s.slice(S+1,m===-1?s.length:m),_=await mH.get(l)}e.session=_||(_={})}e.user=null;let u=a((E,h,m)=>{let S=new Yc.AuthAuditLog(E,h,$t.AUTH_AUDIT_TYPES.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);S.auth_strategy=m,l&&(S.session_id=l),r.referer&&(S.referer=r.referer),r.origin&&(S.origin=r.origin),h===$t.AUTH_AUDIT_STATUS.SUCCESS?pH.notify(S):pH.error(S)},"authAuditLog");if(e.mtlsConfig&&e.authorized){let E=e.mtlsConfig.user;E!==null?((E===void 0||E==="Common Name"||E==="CN")&&(E=e.peerCertificate.subject.CN),e.user=await it.getUser(E,null,null),u(E,$t.AUTH_AUDIT_STATUS.SUCCESS,"mTLS")):(0,Yc.debug)("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let d;if(!e.user)if(n){if(d=ya.get(n),!d){let[E,h]=n.split(" "),m,S;try{switch(E){case"Basic":[m,S]=atob(h).split(":"),d=m||S?await it.getUser(m,S,e):null;break;case"Bearer":try{d=await(0,xh.validateOperationToken)(h)}catch(R){if(R.message==="invalid token")try{return await(0,xh.validateRefreshToken)(h),c({status:-1})}catch{throw R}}break}}catch(R){return dse&&(ya.get(h)||(ya.set(h,h),u(m,$t.AUTH_AUDIT_STATUS.FAILURE,E))),c({status:401,body:ho({error:R.message},e)})}ya.set(n,d),_se&&u(d.username,$t.AUTH_AUDIT_STATUS.SUCCESS,E)}e.user=d}else _?.user?e.user=await it.getUser(_.user,null,e):(AH&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,TH.getSuperUser)());Gh&&(e.session.update=function(E){if(!l){l=(0,gH.v4)();let m=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${l}; Path=/; Expires=Tue, 01 Oct 8307 19:33:20 GMT; HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",m):f?.headers?.set&&f.headers.set("Set-Cookie",m)}return e.protocol==="https"&&(o?(i&&o.push("Access-Control-Expose-Headers","X-Hdb-Session"),o.push("X-Hdb-Session","Secure")):f?.headers?.set&&(i&&f.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),f.headers.set("X-Hdb-Session","Secure"))),E.id=l,mH.put(E)},e.login=async function(E,h){e.user=await it.getUser(E,h,e),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")&&Yi.loginPath?(f.status=302,f.headers.set("Location",Yi.loginPath(e))):f.headers.set("WWW-Authenticate","Basic")),c(f))}catch(l){throw c(l)}function c(l){let _=o.length;if(_>0){let u=l.headers;u||(l.headers=u=new ro);for(let d=0;d<_;){let f=o[d++];u.set(f,o[d++])}}return o=null,l}a(c,"applyResponseHeaders")}function Ese({server:e,port:t}){e.request(OH,{port:t||"all"}),SH||(SH=!0,setInterval(()=>{ya=new Map},Bn.get($t.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),RH.user.addListener(()=>{ya=new Map}))}async function hse(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 pse(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var TH,xh,gH,Bn,$t,Yc,RH,pH,ase,cse,lse,use,mH,Gh,AH,_se,dse,ya,SH,Fh=Ne(()=>{TH=q(wr());mr();zl();xh=q(c_());ge();gH=require("uuid"),Bn=q(X()),$t=q(C()),Yc=q(x()),RH=q(Iu());Uu();Kc();pH=(0,Yc.loggerWithTag)("auth-event");Bn.initSync();ase=Bn.get($t.CONFIG_PARAMS.HTTP_CORSACCESSLIST),cse=Bn.get($t.CONFIG_PARAMS.HTTP_CORS),lse=Bn.get($t.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),use=Bn.get($t.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),mH=ft({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),Gh=Bn.get($t.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,AH=Bn.get($t.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,_se=Bn.get($t.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,dse=Bn.get($t.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,ya=new Map;it.onInvalidatedUser(()=>{ya=new Map});a(fse,"bypassAuth");a(OH,"authentication");a(Ese,"start");a(hse,"login");a(pse,"logout")});var LH=T((YOe,CH)=>{"use strict";var Ce=require("joi"),NH=require("fs-extra"),bH=require("path"),Ti=rt(),yH=X(),IH=C(),wH=x(),{hdb_errors:mse}=ie(),{HDB_ERROR_MSGS:lr}=mse,Si=/^[a-zA-Z0-9-_]+$/;CH.exports={getDropCustomFunctionValidator:Tse,setCustomFunctionValidator:gse,addComponentValidator:Nse,dropCustomFunctionProjectValidator:bse,packageComponentValidator:yse,deployComponentValidator:Ise,setComponentFileValidator:Rse,getComponentFileValidator:Ose,dropComponentFileValidator:Ase};function kh(e,t,r){try{let n=yH.get(IH.CONFIG_PARAMS.COMPONENTSROOT),s=bH.join(n,t);return NH.existsSync(s)?e?t:r.message(lr.PROJECT_EXISTS):e?r.message(lr.NO_PROJECT):t}catch(n){return wH.error(n),r.message(lr.VALIDATION_ERR)}}a(kh,"checkProjectExists");function C_(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(C_,"checkFilePath");function Sse(e,t,r,n){try{let s=yH.get(IH.CONFIG_PARAMS.COMPONENTSROOT),i=bH.join(s,e,t,r+".js");return NH.existsSync(i)?r:n.message(lr.NO_FILE)}catch(s){return wH.error(s),n.message(lr.VALIDATION_ERR)}}a(Sse,"checkFileExists");function Tse(e){let t=Ce.object({project:Ce.string().pattern(Si).custom(kh.bind(null,!0)).required().messages({"string.pattern.base":lr.BAD_PROJECT_NAME}),type:Ce.string().valid("helpers","routes").required(),file:Ce.string().pattern(Si).custom(Sse.bind(null,e.project,e.type)).custom(C_).required().messages({"string.pattern.base":lr.BAD_FILE_NAME})});return Ti.validateBySchema(e,t)}a(Tse,"getDropCustomFunctionValidator");function gse(e){let t=Ce.object({project:Ce.string().pattern(Si).custom(kh.bind(null,!0)).required().messages({"string.pattern.base":lr.BAD_PROJECT_NAME}),type:Ce.string().valid("helpers","routes").required(),file:Ce.string().custom(C_).required(),function_content:Ce.string().required()});return Ti.validateBySchema(e,t)}a(gse,"setCustomFunctionValidator");function Rse(e){let t=Ce.object({project:Ce.string().pattern(Si).required().messages({"string.pattern.base":lr.BAD_PROJECT_NAME}),file:Ce.string().custom(C_).required(),payload:Ce.string().allow("").optional(),encoding:Ce.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Ti.validateBySchema(e,t)}a(Rse,"setComponentFileValidator");function Ase(e){let t=Ce.object({project:Ce.string().pattern(Si).required().messages({"string.pattern.base":lr.BAD_PROJECT_NAME}),file:Ce.string().custom(C_).optional()});return Ti.validateBySchema(e,t)}a(Ase,"dropComponentFileValidator");function Ose(e){let t=Ce.object({project:Ce.string().required(),file:Ce.string().custom(C_).required(),encoding:Ce.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Ti.validateBySchema(e,t)}a(Ose,"getComponentFileValidator");function Nse(e){let t=Ce.object({project:Ce.string().pattern(Si).custom(kh.bind(null,!1)).required().messages({"string.pattern.base":lr.BAD_PROJECT_NAME})});return Ti.validateBySchema(e,t)}a(Nse,"addComponentValidator");function bse(e){let t=Ce.object({project:Ce.string().pattern(Si).custom(kh.bind(null,!0)).required().messages({"string.pattern.base":lr.BAD_PROJECT_NAME})});return Ti.validateBySchema(e,t)}a(bse,"dropCustomFunctionProjectValidator");function yse(e){let t=Ce.object({project:Ce.string().pattern(Si).required().messages({"string.pattern.base":lr.BAD_PROJECT_NAME}),skip_node_modules:Ce.boolean()});return Ti.validateBySchema(e,t)}a(yse,"packageComponentValidator");function Ise(e){let t=Ce.object({project:Ce.string().pattern(Si).required().messages({"string.pattern.base":lr.BAD_PROJECT_NAME}),payload:Ce.string().optional().messages({"string.pattern.base":lr.BAD_PACKAGE}),package:Ce.string().optional()});return Ti.validateBySchema(e,t)}a(Ise,"deployComponentValidator")});var Kh=T((WOe,HH)=>{"use strict";var $h=require("joi"),Vh=require("path"),DH=require("fs-extra"),{exec:wse}=require("child_process"),Cse=require("util"),PH=Cse.promisify(wse),L_=C(),{handleHDBError:Wc,hdb_errors:Lse}=ie(),{HTTP_STATUS_CODES:Qc}=Lse,D_=X(),Dse=rt(),jc=x();D_.initSync();var WA=D_.get(L_.CONFIG_PARAMS.COMPONENTSROOT),MH="npm install --omit=dev --json",Pse=`${MH} --dry-run`;HH.exports={installModules:Bse,auditModules:Hse,installAllRootModules:Mse,uninstallRootModule:Use,linkHarperdb:vse};async function Mse(e=!1){await Yh(),await P_(e?"npm install --ignore-scripts":"npm install",D_.get(L_.CONFIG_PARAMS.ROOTPATH))}a(Mse,"installAllRootModules");async function Use(e){await P_(`npm uninstall ${e}`,D_.get(L_.CONFIG_PARAMS.ROOTPATH))}a(Use,"uninstallRootModule");async function vse(){await Yh(),await P_(`npm link ${L_.PACKAGE_ROOT}`,D_.get(L_.CONFIG_PARAMS.ROOTPATH))}a(vse,"linkHarperdb");async function P_(e,t=void 0){let r,n;try{({stdout:r,stderr:n}=await PH(e,{cwd:t}))}catch(s){throw new Error(s.stderr.replace(`
|
|
13
|
+
`,""))}return n&&!n.includes("Debugger listening")&&jc.error("Error running NPM command:",e,n),jc.trace(r,n),r?.replace(`
|
|
14
|
+
`,"")}a(P_,"runCommand");async function Bse(e){jc.info(`starting installModules for request: ${e}`);let t=BH(e);if(t)throw Wc(t,t.message,Qc.BAD_REQUEST);let{projects:r,dry_run:n}=e,s=n===!0?Pse:MH;await Yh(),await vH(r);let i={};for(let o=0,c=r.length;o<c;o++){let l=r[o];i[l]={npm_output:null,npm_error:null};let _=Vh.join(WA,l),u,d=null;try{let{stdout:f,stderr:E}=await PH(s,{cwd:_});u=f?f.replace(`
|
|
15
15
|
`,""):null,d=E?E.replace(`
|
|
16
|
-
`,""):null}catch(f){f.stderr?i[l].npm_error=
|
|
17
|
-
`);return r>-1&&n>-1?JSON.parse(e.substring(r+t.length-1,n+1)):e}a(tH,"parseNPMStdErr");async function $ne(e){Wc.info(`starting auditModules for request: ${e}`);let t=nH(e);if(t)throw Yc(t,t.message,Kc.BAD_REQUEST);let{projects:r}=e;await Ph(),await rH(r);let n={};for(let s=0,i=r.length;s<i;s++){let o=r[s],c=Dh.join(yA,o);n[o]={npm_output:null,npm_error:null};try{let l=await L_("npm audit --json",c);n[o].npm_output=JSON.parse(l)}catch(l){n[o].npm_error=tH(l.stderr)}}return Wc.info(`finished auditModules with response ${n}`),n}a($ne,"auditModules");async function Ph(){try{return await L_("npm -v"),!0}catch{throw Yc(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",Kc.BAD_REQUEST,void 0,void 0,!0)}}a(Ph,"checkNPMInstalled");async function rH(e){if(!Array.isArray(e)||e.length===0)throw Yc(new Error,"projects argument must be an array with at least 1 element",Kc.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n],o=Dh.join(yA,i.toString());if(!await X0.pathExists(o)){t.push(i);continue}let l=Dh.join(o,"package.json");await X0.pathExists(l)||r.push(i)}if(t.length>0)throw Yc(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Kc.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Yc(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Kc.BAD_REQUEST,void 0,void 0,!0)}a(rH,"checkProjectPaths");function nH(e){let t=Lh.object({projects:Lh.array().min(1).items(Lh.string()).required(),dry_run:Lh.boolean().default(!1)});return Hne.validateBySchema(e,t)}a(nH,"modulesValidator")});var wA=T((iOe,lH)=>{"use strict";var Qc=require("fs-extra"),IA=require("path"),Uh=q(),iH=Y(),vh=C(),cH=J(),Vne=St();lH.exports=Yne;async function Yne(){let e=Kne(),t=cH.get(vh.CONFIG_PARAMS.ROOTPATH),r=IA.join(t,"package.json"),n={dependencies:{harperdb:"file:"+vh.PACKAGE_ROOT}},s=IA.join(t,"node_modules");await Qc.ensureDir(s);let i,o=!0,c=!1;try{i=await Qc.readJson(r)}catch(l){if(iH.isEmptyOrZeroLength(e))return;if(l.code!==vh.NODE_ERROR_CODES.ENOENT)throw l;o=!1}if(!iH.isEmptyOrZeroLength(e)){for(let{name:l,package:_}of e){let u=await oH(_);n.dependencies[l]=u+_}if(!o){Uh.notify("Installing components"),await aH(r,n,null);return}for(let{name:l,package:_}of e){let u=i.dependencies[l],d=await oH(_);if(u===void 0||u!==d+_){c=!0;break}}}for(let l in i.dependencies)n.dependencies[l]===void 0&&(Uh.notify("Removing component",l),c=!0);c&&(Uh.notify("Updating components."),await aH(r,n,i))}a(Yne,"installComponents");function Kne(){let e=Vne.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(Kne,"getComponentsConfig");async function oH(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":IA.extname(e)||await Qc.pathExists(e)?"file:":"github:"}a(oH,"getPkgPrefix");async function aH(e,t,r){Uh.trace("npm installing components package.json",t),await Qc.writeFile(e,JSON.stringify(t,null," "));try{await Mh().installAllRootModules(cH.get(vh.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(n){throw r?await Qc.writeFile(e,JSON.stringify(r,null," ")):await Qc.unlink(e),n}}a(aH,"installPackages")});var Bh=T((cOe,fH)=>{"use strict";var $e=require("fs-extra"),CA=require("fast-glob"),Te=require("path"),_H=require("tar-fs"),aOe=require("uuid").v4,LA=require("normalize-path"),Hs=J0(),qt=q(),ze=C(),It=J(),D_=St(),Wne=Y(),{PACKAGE_ROOT:Qne}=C(),{handleHDBError:Wt,hdb_errors:jne}=te(),{basename:zne}=require("path"),Jne=wA(),dH=J(),Xne=C(),{Readable:Zne}=require("stream"),{isMainThread:ese}=require("worker_threads"),{HDB_ERROR_MSGS:ba,HTTP_STATUS_CODES:Qt}=jne,tse=Te.join(Qne,"application-template"),uH=Te.join(It.get(ze.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function rse(){qt.trace("getting custom api status");let e={};try{e={port:It.get(ze.CONFIG_PARAMS.HTTP_PORT),directory:It.get(ze.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Wt(new Error,ba.FUNCTION_STATUS,Qt.INTERNAL_SERVER_ERROR,qt.ERR,t)}return e}a(rse,"customFunctionsStatus");function nse(){qt.trace("getting custom api endpoints");let e={},t=It.get(ze.CONFIG_PARAMS.COMPONENTSROOT);try{CA.sync(LA(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:CA.sync(LA(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:CA.sync(LA(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Wt(new Error,ba.GET_FUNCTIONS,Qt.INTERNAL_SERVER_ERROR,qt.ERR,r)}return e}a(nse,"getCustomFunctions");function sse(e){e.project&&(e.project=Te.parse(e.project).name),e.file&&(e.file=Te.parse(e.file).name);let t=Hs.getDropCustomFunctionValidator(e);if(t)throw Wt(t,t.message,Qt.BAD_REQUEST);qt.trace("getting custom api endpoint file content");let r=It.get(ze.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,o=Te.join(r,n,s,i+".js");try{return $e.readFileSync(o,{encoding:"utf8"})}catch(c){throw Wt(new Error,ba.GET_FUNCTION,Qt.INTERNAL_SERVER_ERROR,qt.ERR,c)}}a(sse,"getCustomFunction");function ise(e){e.project&&(e.project=Te.parse(e.project).name),e.file&&(e.file=Te.parse(e.file).name);let t=Hs.setCustomFunctionValidator(e);if(t)throw Wt(t,t.message,Qt.BAD_REQUEST);qt.trace("setting custom function file content");let r=It.get(ze.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:o}=e;try{return $e.outputFileSync(Te.join(r,n,s,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw Wt(new Error,ba.SET_FUNCTION,Qt.INTERNAL_SERVER_ERROR,qt.ERR,c)}}a(ise,"setCustomFunction");function ose(e){e.project&&(e.project=Te.parse(e.project).name),e.file&&(e.file=Te.parse(e.file).name);let t=Hs.getDropCustomFunctionValidator(e);if(t)throw Wt(t,t.message,Qt.BAD_REQUEST);qt.trace("dropping custom function file");let r=It.get(ze.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{return $e.unlinkSync(Te.join(r,n,s,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw Wt(new Error,ba.DROP_FUNCTION,Qt.INTERNAL_SERVER_ERROR,qt.ERR,o)}}a(ose,"dropCustomFunction");function ase(e){e.project&&(e.project=Te.parse(e.project).name);let t=Hs.addComponentValidator(e);if(t)throw Wt(t,t.message,Qt.BAD_REQUEST);qt.trace("adding component");let r=It.get(ze.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;try{let s=Te.join(r,n);return $e.mkdirSync(s,{recursive:!0}),$e.copySync(tse,s),`Successfully added project: ${n}`}catch(s){throw Wt(new Error,ba.ADD_FUNCTION,Qt.INTERNAL_SERVER_ERROR,qt.ERR,s)}}a(ase,"addComponent");function cse(e){e.project&&(e.project=Te.parse(e.project).name);let t=Hs.dropCustomFunctionProjectValidator(e);if(t)throw Wt(t,t.message,Qt.BAD_REQUEST);qt.trace("dropping custom function project");let r=It.get(ze.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=It.get(ze.CONFIG_PARAMS.APPS);if(!Wne.isEmptyOrZeroLength(s)){let i=!1;for(let[o,c]of s.entries())if(c.name===n){s.splice(o,1),i=!0;break}if(i)return D_.updateConfigValue(ze.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=Te.join(r,n);return $e.rmSync(i,{recursive:!0}),`Successfully deleted project: ${n}`}catch(i){throw Wt(new Error,ba.DROP_FUNCTION_PROJECT,Qt.INTERNAL_SERVER_ERROR,qt.ERR,i)}}a(cse,"dropCustomFunctionProject");async function lse(e){e.project&&(e.project=Te.parse(e.project).name);let t=Hs.packageComponentValidator(e);if(t)throw Wt(t,t.message,Qt.BAD_REQUEST);let r=It.get(ze.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;qt.trace("packaging component",n);let s;try{s=await $e.realpath(Te.join(r,n))}catch(l){if(l.code!==ze.NODE_ERROR_CODES.ENOENT)throw l;try{s=await $e.realpath(Te.join(It.get(ze.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(_){if(_.code===ze.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}await $e.ensureDir(uH);let i=Te.join(uH,`${n}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:l=>l.includes(Te.join(s,"node_modules"))}),_H.pack(s,o).pipe($e.createWriteStream(i,{overwrite:!0})),await new Promise(l=>setTimeout(l,2e3));let c=$e.readFileSync(i,{encoding:"base64"});return await $e.remove(i),{project:n,payload:c}}a(lse,"packageComponent");async function use(e){e.project&&(e.project=Te.parse(e.project).name);let t=Hs.deployComponentValidator(e);if(t)throw Wt(t,t.message,Qt.BAD_REQUEST);let r=It.get(ze.CONFIG_PARAMS.COMPONENTSROOT),{project:n,payload:s,package:i}=e;if(qt.trace("deploying component",n),!s&&!i)throw new Error("'payload' or 'package' must be provided");let o;if(s){o=Te.join(r,n),i="file:"+o,await $e.ensureDir(o);let f=Zne.from(Buffer.from(s,"base64"));await new Promise((h,p)=>{f.pipe(_H.extract(o,{finish:h})).on("error",p)});let E=await $e.readdir(o);E.length===1&&E[0]==="package"&&(await $e.copy(Te.join(o,"package"),o),await $e.remove(Te.join(o,"package")))}if(await D_.addConfig(n,{package:i}),!s){await Jne();let f=dH.get(Xne.CONFIG_PARAMS.ROOTPATH);o=Te.join(f,"node_modules",n)}if(ese)return;let c=new Map;c.isWorker=!0;let l=(qh(),re(Hh)),_;l.setErrorReporter(f=>_=f);let u=zne(o),d=l.component_errors.get(u);try{await l.loadComponent(o,c)}finally{l.component_errors.set(u,d)}if(_)throw _;return qt.info("Installed component"),`Successfully deployed: ${n}`}a(use,"deployComponent");async function _se(){let e=D_.getConfiguration(),t=[];for(let o in e)if(e[o]?.package){if(e[o].package.startsWith("file:"))continue;t.push(Object.assign({},e[o],{name:o}))}let r=a(async(o,c)=>{try{let l=await $e.readdir(o,{withFileTypes:!0});for(let _ of l){let u=_.name;if(u.startsWith(".")||u==="node_modules")continue;let d=Te.join(o,u);if(_.isDirectory()||_.isSymbolicLink()){let f={name:u,entries:[]};c.entries.push(f),await r(d,f)}else{let f=await $e.stat(d),E={name:Te.basename(u),mtime:f.mtime,size:f.size};c.entries.push(E)}}return c}catch(l){return qt.warn("Error loading package",l),{error:l.toString(),entries:[]}}},"walk_dir"),n=await r(It.get(ze.CONFIG_PARAMS.COMPONENTSROOT),{name:It.get(ze.CONFIG_PARAMS.COMPONENTSROOT).split(Te.sep).slice(-1).pop(),entries:t});for(let o of n.entries)if(o.package){let c=await r(Te.join(It.get(ze.CONFIG_PARAMS.ROOTPATH),"node_modules",o.name),{name:o.name,entries:[]});Object.assign(o,c)}let i=(qh(),re(Hh)).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 n}a(_se,"getComponents");async function dse(e){let t=Hs.getComponentFileValidator(e);if(t)throw Wt(t,t.message,Qt.BAD_REQUEST);let n=D_.getConfigObj()[e.project]||e.project==="harperdb"?Te.join(dH.get(ze.CONFIG_PARAMS.ROOTPATH),"node_modules"):It.get(ze.CONFIG_PARAMS.COMPONENTSROOT),s=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await $e.stat(Te.join(n,e.project,e.file));return{message:await $e.readFile(Te.join(n,e.project,e.file),s),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===ze.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${Te.join(e.project,e.file)}'`):i}}a(dse,"getComponentFile");async function fse(e){let t=Hs.setComponentFileValidator(e);if(t)throw Wt(t,t.message,Qt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=Te.join(It.get(ze.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);return e.payload!==void 0?(await $e.ensureFile(n),await $e.outputFile(n,e.payload,r)):await $e.ensureDir(n),"Successfully set component: "+e.file}a(fse,"setComponentFile");async function Ese(e){let t=Hs.dropComponentFileValidator(e);if(t)throw Wt(t,t.message,Qt.BAD_REQUEST);let r=e.file?Te.join(e.project,e.file):e.project,n=Te.join(It.get(ze.CONFIG_PARAMS.COMPONENTSROOT),r);return await $e.pathExists(n)&&await $e.remove(n),D_.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(Ese,"dropComponent");fH.exports={customFunctionsStatus:rse,getCustomFunctions:nse,getCustomFunction:sse,setCustomFunction:ise,dropCustomFunction:ose,addComponent:ase,dropCustomFunctionProject:cse,packageComponent:lse,deployComponent:use,getComponents:_se,getComponentFile:dse,setComponentFile:fse,dropComponent:Ese}});var DA=T((uOe,hH)=>{"use strict";var qs=require("joi"),EH=rt();hH.exports={readTransactionLogValidator:hse,deleteTransactionLogsBeforeValidator:mse};function hse(e){let t=qs.object({schema:qs.string().required(),table:qs.string().required(),from:qs.date().timestamp(),to:qs.date().timestamp(),limit:qs.number().min(1)});return EH.validateBySchema(e,t)}a(hse,"readTransactionLogValidator");function mse(e){let t=qs.object({schema:qs.string().required(),table:qs.string().required(),timestamp:qs.date().timestamp().required()});return EH.validateBySchema(e,t)}a(mse,"deleteTransactionLogsBeforeValidator")});var Gh=T((dOe,gH)=>{"use strict";var PA=C(),xh=Tt(),mH=Y(),pH=J(),SH=li(),{handleHDBError:jc,hdb_errors:pse}=te(),{HTTP_STATUS_CODES:zc}=pse,{readTransactionLogValidator:Sse,deleteTransactionLogsBeforeValidator:Tse}=DA(),TH="This operation relies on clustering and cannot run with it disable.",gse="Logs successfully deleted from transaction log.",Rse="All logs successfully deleted from transaction log.";gH.exports={readTransactionLog:Ase,deleteTransactionLogsBefore:Ose};async function*Ase(e){let t=Sse(e);if(t)throw jc(t,t.message,zc.BAD_REQUEST,void 0,void 0,!0);if(!pH.get(PA.CONFIG_PARAMS.CLUSTERING_ENABLED))throw jc(new Error,TH,zc.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n}=e,s=mH.checkSchemaTableExist(r,n);if(s)throw jc(new Error,s,zc.NOT_FOUND,void 0,void 0,!0);let i=SH.createNatsTableStreamName(r,n),o=await xh.viewStreamIterator(i,parseInt(e.from),e.limit);for await(let c of o){let l=Math.floor(c?.nats_timestamp/1e6);if(e.to&&l>e.to)break;let _={operation:c?.entry?.operation,user:c?.entry?.__origin?.user,timestamp:l,records:c?.entry?.records,attributes:c?.entry?.attributes};c?.entry?.operation===PA.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(Ase,"readTransactionLog");async function Ose(e){let t=Tse(e);if(t)throw jc(t,t.message,zc.BAD_REQUEST,void 0,void 0,!0);if(!pH.get(PA.CONFIG_PARAMS.CLUSTERING_ENABLED))throw jc(new Error,TH,zc.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n,timestamp:s}=e,i=mH.checkSchemaTableExist(r,n);if(i)throw jc(new Error,i,zc.NOT_FOUND,void 0,void 0,!0);let o=SH.createNatsTableStreamName(r,n),{jsm:c}=await xh.getNATSReferences(),l=await xh.getStreamInfo(o),_=new Date(l.state.first_ts).getTime();if(s<=_)return`No transactions exist before: ${s}`;let u=gse,d,f=new Date(l.state.last_ts).getTime();return s>f?(d=l.state.last_seq+1,u=Rse):d=(await xh.viewStream(o,parseInt(s),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),u}a(Ose,"deleteTransactionLogsBefore")});var AH=T((EOe,RH)=>{"use strict";var MA=class{static{a(this,"PermissionTableResponseObject")}constructor(t,r,n=[],s=[]){this.schema=t,this.table=r,this.required_table_permissions=n,this.required_attribute_permissions=s}};RH.exports=MA});var NH=T((mOe,OH)=>{"use strict";var UA=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};OH.exports=UA});var BA=T((SOe,yH)=>{"use strict";var bH=AH(),Nse=NH(),{HDB_ERROR_MSGS:bse}=Qr(),vA=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=bse.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,n){if(r&&n){let s=`${r}_${n}`;if(this.unauthorized_access[s])return}this.invalid_schema_items.push(t)}addUnauthorizedTable(t,r,n){let s=new bH(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new Nse(c,s[c]);i.push(l)});let o=`${r}_${n}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new bH(r,n,[],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}};yH.exports=vA});var Vh=T((gOe,kH)=>{"use strict";var HA=Nr(),Fh=Or(),Hn=HE(),U_=Qi(),qA=ea(),yse=iR(),Ise=GU(),v_=yr(),kh=FE(),xt=q(),wse=mR(),Cse=u_(),Lse=JR(),Dse=th(),Pse=nh(),Mse=XR(),Use=oh(),vse=ch(),xA=uh(),Ti=Y(),Bse=BB(),GA=dh(),CH=Aa(),Bn=C(),LH=v0(),Hse=di(),DH=o_(),PH=(wh(),re(y_)),MH=St(),hn=Bh(),qse=require("alasql"),UH=Gh(),vH=Mh(),BH=BA(),{handleHDBError:Hr,hdb_errors:HH}=te(),{HDB_ERROR_MSGS:Zt,HTTP_STATUS_CODES:P_}=HH,k=new Map,qH="delete",Eo="insert",gi="read",ya="update",M_="describe",IH=U_.describeSchema.name,wH=U_.describeTable.name,xH={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},xse="catchup",Gse="handleGetJob",Fse="handleGetJobsByStartDate",$h={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},kse=[Hn.createTable.name,Hn.createAttribute.name,Hn.dropTable.name,Hn.dropAttribute.name],GH={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},W=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};k.set(HA.insert.name,new W(!1,[Eo]));k.set(HA.update.name,new W(!1,[ya]));k.set(HA.upsert.name,new W(!1,[Eo,ya]));k.set(Fh.searchByConditions.name,new W(!1,[gi]));k.set(Fh.searchByHash.name,new W(!1,[gi]));k.set(Fh.searchByValue.name,new W(!1,[gi]));k.set(Fh.search.name,new W(!1,[gi]));k.set(Hn.createSchema.name,new W(!0,[]));k.set(Hn.createTable.name,new W(!0,[]));k.set(Hn.createAttribute.name,new W(!1,[Eo]));k.set(Hn.dropSchema.name,new W(!0,[]));k.set(Hn.dropTable.name,new W(!0,[]));k.set(Hn.dropAttribute.name,new W(!0,[]));k.set(U_.describeSchema.name,new W(!1,[gi]));k.set(U_.describeTable.name,new W(!1,[gi]));k.set(qA.deleteRecord.name,new W(!1,[qH]));k.set(v_.addUser.name,new W(!0,[]));k.set(v_.alterUser.name,new W(!0,[]));k.set(v_.dropUser.name,new W(!0,[]));k.set(v_.listUsersExternal.name,new W(!0,[]));k.set(kh.listRoles.name,new W(!0,[]));k.set(kh.addRole.name,new W(!0,[]));k.set(kh.alterRole.name,new W(!0,[]));k.set(kh.dropRole.name,new W(!0,[]));k.set(wse.name,new W(!0,[]));k.set(Cse.name,new W(!0,[]));k.set(Lse.name,new W(!0,[]));k.set(Dse.name,new W(!0,[]));k.set(Pse.name,new W(!0,[]));k.set(Mse.name,new W(!0,[]));k.set(xA.setRoutes.name,new W(!0,[]));k.set(xA.getRoutes.name,new W(!0,[]));k.set(xA.deleteRoutes.name,new W(!0,[]));k.set(MH.setConfiguration.name,new W(!0,[]));k.set(Use.clusterStatus.name,new W(!0,[]));k.set(vse.name,new W(!0,[]));k.set(GA.getFingerprint.name,new W(!0,[]));k.set(GA.setLicense.name,new W(!0,[]));k.set(qA.deleteFilesBefore.name,new W(!0,[]));k.set(qA.deleteAuditLogsBefore.name,new W(!0,[]));k.set(CH.restart.name,new W(!0,[]));k.set(CH.restartService.name,new W(!0,[]));k.set(yse.name,new W(!0,[]));k.set(Ise.name,new W(!0,[gi]));k.set(Hse.systemInformation.name,new W(!0,[]));k.set(MH.getConfiguration.name,new W(!0,[]));k.set(UH.readTransactionLog.name,new W(!0,[]));k.set(UH.deleteTransactionLogsBefore.name,new W(!0,[]));k.set(vH.installModules.name,new W(!0,[]));k.set(vH.auditModules.name,new W(!0,[]));k.set(DH.createTokens.name,new W(!1,[]));k.set(DH.refreshOperationToken.name,new W(!1,[]));k.set(PH.login.name,new W(!1,[]));k.set(PH.logout.name,new W(!1,[]));k.set(hn.customFunctionsStatus.name,new W(!0,[]));k.set(hn.getCustomFunctions.name,new W(!0,[]));k.set(hn.getComponents.name,new W(!0,[]));k.set(hn.getComponentFile.name,new W(!0,[]));k.set(hn.setComponentFile.name,new W(!0,[]));k.set(hn.dropComponent.name,new W(!0,[]));k.set(hn.getCustomFunction.name,new W(!0,[]));k.set(hn.setCustomFunction.name,new W(!0,[]));k.set(hn.dropCustomFunction.name,new W(!0,[]));k.set(hn.addComponent.name,new W(!0,[]));k.set(hn.dropCustomFunctionProject.name,new W(!0,[]));k.set(hn.packageComponent.name,new W(!0,[]));k.set(hn.deployComponent.name,new W(!0,[]));k.set(GA.getRegistrationInfo.name,new W(!1,[]));k.set(v_.userInfo.name,new W(!1,[]));k.set(U_.describeAll.name,new W(!1,[]));k.set(Gse,new W(!1,[]));k.set(Fse,new W(!0,[]));k.set(xse,new W(!0,[]));k.set($h.CSV_DATA_LOAD,new W(!1,[Eo,ya]));k.set($h.CSV_URL_LOAD,new W(!1,[Eo,ya]));k.set($h.CSV_FILE_LOAD,new W(!1,[Eo,ya]));k.set($h.IMPORT_FROM_S3,new W(!1,[Eo,ya]));k.set(GH.EXPORT_TO_S3,new W(!0,[]));k.set(GH.EXPORT_LOCAL,new W(!0,[]));k.set(Bn.VALID_SQL_OPS_ENUM.DELETE,new W(!1,[qH]));k.set(Bn.VALID_SQL_OPS_ENUM.SELECT,new W(!1,[gi]));k.set(Bn.VALID_SQL_OPS_ENUM.INSERT,new W(!1,[Eo]));k.set(Bn.VALID_SQL_OPS_ENUM.UPDATE,new W(!1,[ya]));kH.exports={verifyPerms:Vse,verifyPermsAst:$se,verifyBulkLoadAttributePerms:Kse};function $se(e,t,r){if(Ti.isEmptyOrZeroLength(e))throw xt.info("verify_perms_ast has an empty user parameter"),Hr(new Error);if(Ti.isEmptyOrZeroLength(t))throw xt.info("verify_perms_ast has an empty user parameter"),Hr(new Error);if(Ti.isEmptyOrZeroLength(r))throw xt.info("verify_perms_ast has a null operation parameter"),Hr(new Error);try{let n=new BH,s=new Bse(e),i=s.getSchemas(),o=new Map;if((!i||i.length===0)&&s.affected_attributes&&s.affected_attributes.size>0)throw xt.info("No schemas defined in verifyPermsAst(), will not continue."),Hr(new Error);let c=!!t.role.permission.super_user,l=i.includes("system");if(l&&xH[r])throw Hr(new Error,Zt.DROP_SYSTEM,P_.FORBIDDEN);if(c&&!l)return null;let _=LH.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof qse.yy.Select&&(e=s.updateAttributeWildcardsForRolePerms(_));for(let d=0;d<i.length;d++){let f=s.getTablesBySchemaName(i[d]);f&&o.set(i[d],f)}let u=FH(t,r,o,n);return u||(o.forEach((d,f)=>{for(let E=0;E<d.length;E++){let h=s.getAttributesBySchemaTableName(f,d[E]),p=kA(t.role.permission,f,d[E]);FA(h,p,r,d[E],f,n)}}),n.getPermsResponse())}catch(n){throw Hr(n)}}a($se,"verifyPermsAst");function Vse(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw xt.info("null required parameter in verifyPerms"),Hr(new Error,Zt.DEFAULT_INVALID_REQUEST,P_.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let n=e.action,s=e.schema??e.database,i=e.table,o=new Map;s&&i&&o.set(s,[i]);let c=new BH;if(Ti.isEmptyOrZeroLength(e.hdb_user.role)||Ti.isEmptyOrZeroLength(e.hdb_user.role.permission))return xt.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(Zt.USER_HAS_NO_PERMS(e.hdb_user.username));let l=!!e.hdb_user.role.permission.super_user,_=e.hdb_user.role.permission.structure_user,u=o.has(Bn.SYSTEM_SCHEMA_NAME)||s===Bn.SYSTEM_SCHEMA_NAME;if(u&&xH[r])throw Hr(new Error,Zt.DROP_SYSTEM,P_.FORBIDDEN);if(l&&!u||_===!0&&(r===Hn.createSchema.name||r===Hn.dropSchema.name))return null;if(kse.indexOf(r)>=0&&(_===!0||Array.isArray(_)))return _===!0||_.indexOf(s)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${s}'`);let d=LH.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===IH||r===wH){if(s===Bn.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Zt.SCHEMA_PERM_ERROR(s));if(!d.super_user){if(r===IH&&(!d[s]||!d[s][M_]))return c.handleInvalidItem(Zt.SCHEMA_NOT_FOUND(s));if(r===wH&&(!d[s]||!d[s].tables[i]||!d[s].tables[i][M_]))return c.handleInvalidItem(Zt.TABLE_NOT_FOUND(s,i))}}let f=FH(e.hdb_user,r,o,c,n);if(f)return f;if(k.get(r)&&k.get(r).perms.length===0)return null;if(!l&&e.get_attributes&&Bn.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let p=[],S=d[s].tables[i];S[Bn.PERMS_CRUD_ENUM.READ]&&(S.attribute_permissions.length>0?S.attribute_permissions.filter(g=>g[Bn.PERMS_CRUD_ENUM.READ]).forEach(g=>{p.push(g.attribute_name)}):p=global.hdb_schema[s][i].attributes.map(A=>A.attribute),e.get_attributes=p)}let E=Yse(e),h=kA(e.hdb_user.role.permission,s,i);return FA(E,h,r,i,s,c,n),c.getPermsResponse()}a(Vse,"verifyPerms");function FH(e,t,r,n,s){if(Ti.arrayHasEmptyValues([e,t,r]))throw xt.info("hasPermissions has an invalid parameter"),Hr(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||k.get(t).requires_su))return null;if(!k.get(t))throw xt.info(`operation ${t} not found.`),Hr(new Error,Zt.OP_NOT_FOUND(t),P_.BAD_REQUEST);if(k.get(t)&&k.get(t).requires_su)return xt.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(Zt.OP_IS_SU_ONLY(t));let c=r.keys();for(let l of c){try{if(l&&!o[l]||o[l][M_]===!1){n.addInvalidItem(Zt.SCHEMA_NOT_FOUND(l));continue}}catch{n.addInvalidItem(Zt.SCHEMA_NOT_FOUND(l));continue}let _=r.get(l);for(let u of _){let d=o[l].tables[u];if(!d||d[M_]===!1)n.addInvalidItem(Zt.TABLE_NOT_FOUND(l,u));else try{let f=[],E=k.get(t).perms;!Ti.isEmpty(s)&&E.includes(s)&&(E=[s]);for(let h=0;h<E.length;h++){let p=E[h],S=d[p];(S==null||S===!1)&&(xt.info(`Required ${p} permission not found for ${t} ${s?`${s} `:""}operation in role ${e.role.id}`),f.push(p))}f.length>0&&n.addUnauthorizedTable(l,u,f)}catch(f){let E=Zt.UNKNOWN_OP_AUTH_ERROR(t,l,u);throw xt.error(E),xt.error(f),Hr(HH.CHECK_LOGS_WRAPPER(E))}}}return r.size<2?n.getPermsResponse():null}a(FH,"hasPermissions");function FA(e,t,r,n,s,i,o){if(!e||!t)throw xt.info("no attributes specified in checkAttributePerms."),Hr(new Error);let c=k.get(r).perms;if(!c||c==="")throw xt.info(`no permissions found for ${r} in checkAttributePerms().`),Hr(new Error);if(Ti.isEmptyOrZeroLength(t))return xt.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let l={};for(let u of e){let d=t.get(u);if(d){if(d[M_]===!1){i.addInvalidItem(Zt.ATTR_NOT_FOUND(s,n,u),s,n);continue}if(c)for(let f of c){if(Bn.TIME_STAMP_NAMES.includes(d.attribute_name)&&f!==gi)throw Hr(new Error,Zt.SYSTEM_TIMESTAMP_PERMS_ERR,P_.FORBIDDEN);d[f]===!1&&(l[d.attribute_name]?l[d.attribute_name].push(f):l[d.attribute_name]=[f])}}else i.addInvalidItem(Zt.ATTR_NOT_FOUND(s,n,u),s,n)}let _=Object.keys(l);_.length>0&&i.addUnauthorizedAttributes(_,s,n,l)}a(FA,"checkAttributePerms");function Yse(e){let t=new Set;try{if(e.action)return t;if(e.operation===Bn.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 n=Object.keys(e.records[r]);for(let s=0;s<n.length;s++)t.add(n[s])}}catch(r){xt.info(r)}return t}a(Yse,"getRecordAttributes");function kA(e,t,r){let n=new Map;if(Ti.isEmpty(e))return xt.info("no hdb_user specified in getAttributePermissions"),n;if(e.super_user||!t||!r)return n;try{e[t].tables[r].attribute_permissions.forEach(s=>{n.has(s.attribute_name)||n.set(s.attribute_name,s)})}catch{xt.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}a(kA,"getAttributePermissions");function Kse(e,t,r,n,s,i,o){let c=new Set(i),l=kA(e,n,s);FA(c,l,t,s,n,o,r)}a(Kse,"verifyBulkLoadAttributePerms")});var Kh=T((AOe,WH)=>{"use strict";WH.exports={evaluateSQL:iie,processAST:KH,convertSQLToAST:YH,checkASTPermissions:VH};var Wse=Nr(),$H=require("util"),Qse=$H.callbackify(Wse.insert),jse=Or().search,zse=JM().update,Jse=$H.callbackify(zse),Xse=ZM().convertDelete,ho=require("alasql"),Zse=Vh(),Yh=q(),eie=xf(),tie=Y(),B_=C(),{hdb_errors:rie,handleHDBError:$A}=te(),{HTTP_STATUS_CODES:VA}=rie;eie(ho);var nie=403,sie="There was a problem performing this insert. Please check the logs and try again.",YA=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function iie(e,t){let r=e.parsed_sql_object;if(!r){r=YH(e.sql);let n,s=r.ast.statements[0];if(s instanceof ho.yy.Insert?n=s.into.databaseid:s instanceof ho.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof ho.yy.Update||s instanceof ho.yy.Delete?n=s.table.databaseid:Yh.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof ho.yy.Select)&&tie.isEmptyOrZeroLength(n))return t("No schema specified",null)}KH(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}a(iie,"evaluateSQL");function VH(e,t){let r;try{r=Zse.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}a(VH,"checkASTPermissions");function YH(e){let t=new YA;if(!e)throw $A(new Error,"The 'sql' parameter is missing from the request body",VA.BAD_REQUEST);try{let r=e.trim(),n=ho.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
|
|
18
|
-
`);throw n[1]?$A(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,VA.BAD_REQUEST):$A(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",VA.BAD_REQUEST)}return t}a(YH,"convertSQLToAST");function KH(e,t,r){try{let n=oie;if(!e.bypass_auth&&!t.permissions_checked){let i=VH(e,t);if(i&&i.length>0)return r(nie,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case B_.VALID_SQL_OPS_ENUM.SELECT:n=jse,s=t.ast.statements[0];break;case B_.VALID_SQL_OPS_ENUM.INSERT:n=aie;break;case B_.VALID_SQL_OPS_ENUM.UPDATE:n=Jse;break;case B_.VALID_SQL_OPS_ENUM.DELETE:n=Xse;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}n(s,(i,o)=>{if(i){r(i);return}r(null,o)})}catch(n){return r(n)}}a(KH,"processAST");function oie(e,t){Yh.info(e),t("unknown sql statement")}a(oie,"nullFunction");function aie({statement:e,hdb_user:t},r){let n=e.into,s={schema:n.databaseid,table:n.tableid,operation:"insert",hdb_user:t},i=e.columns.map(o=>o.columnid);try{s.records=cie(i,e.values)}catch(o){return r(o)}Qse(s,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(l){Yh.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}a(aie,"convertInsert");function cie(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 n={};return r.forEach((s,i)=>{if(s.columnid)throw"cannot use a column in insert value";"value"in s?n[e[i]]=s.value:n[e[i]]=ho.compile(`SELECT ${s.toString()} AS [${B_.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw Yh.error(r),new Error(sie)}}a(cie,"createDataObjects")});var KA=T((NOe,jH)=>{"use strict";var{S3:lie,GetObjectCommand:uie}=require("@aws-sdk/client-s3");jH.exports={getFileStreamFromS3:_ie,getS3AuthObj:QH};async function _ie(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await QH(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new uie(r))).Body}a(_ie,"getFileStreamFromS3");function QH(e,t,r){return new lie({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(QH,"getS3AuthObj")});var Wh=T((yOe,sq)=>{"use strict";var QA=Or(),die=Kh(),fie=KA(),{AsyncParser:Eie,Transform:hie}=require("json2csv"),q_=require("stream"),mn=Y(),WA=require("fs-extra"),mie=require("path"),qn=q(),{promisify:XH}=require("util"),H_=Y(),{handleHDBError:wt,hdb_errors:pie}=te(),{HDB_ERROR_MSGS:qr,HTTP_STATUS_CODES:Ct}=pie,{streamAsJSON:Sie}=(Vg(),re(KM)),{Upload:Tie}=require("@aws-sdk/lib-storage"),zH=["search_by_value","search_by_hash","sql","search_by_conditions"],JH=["json","csv"],ZH="json",eq="csv",gie="Successfully exported JSON locally.",Rie="Successfully exported CSV locally.",Aie=1e3,Oie=QA.searchByHash,Nie=QA.searchByValue,bie=XH(die.evaluateSQL),yie=XH(q_.finished);sq.exports={export_to_s3:Lie,export_local:Iie,toCsvStream:tq};async function Iie(e){qn.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=rq(e);if(!mn.isEmpty(t))throw qn.error(t),wt(new Error,t,Ct.BAD_REQUEST,void 0,void 0,!0);if(mn.isEmpty(e.path))throw qn.error(qr.MISSING_VALUE("path")),wt(new Error,qr.MISSING_VALUE("path"),Ct.BAD_REQUEST,void 0,void 0,!0);let r=(mn.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(mie.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=mn.buildFolderPath(e.path,r);await wie(e.path);let s=await nq(e);return await Cie(n,e.format,s)}a(Iie,"export_local");async function wie(e){if(qn.trace("in confirmPath"),mn.isEmptyOrZeroLength(e))throw wt(new Error,`Invalid path: ${e}`,Ct.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await WA.stat(e)}catch(r){let n;throw r.code==="ENOENT"?n=`path '${e}' does not exist`:r.code==="EACCES"?n=`access to path '${e}' is denied`:n=r.message,qn.error(n),wt(new Error,n,Ct.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 qn.error(r),wt(new Error,r,Ct.BAD_REQUEST,void 0,void 0,!0)}return!0}a(wie,"confirmPath");async function Cie(e,t,r){if(qn.trace("in saveToLocal"),H_.isEmptyOrZeroLength(e))throw wt(new Error,qr.INVALID_VALUE("file_path"),Ct.BAD_REQUEST,void 0,void 0,!0);if(H_.isEmptyOrZeroLength(t))throw wt(new Error,qr.INVALID_VALUE("Source format"),Ct.BAD_REQUEST,void 0,void 0,!0);if(H_.isEmpty(r))throw wt(new Error,qr.NOT_FOUND("Data"),Ct.BAD_REQUEST,void 0,void 0,!0);if(t===ZH){let n=WA.createWriteStream(e);return Sie(r).pipe(n),await yie(n),{message:gie,path:e}}else if(t===eq){let n=WA.createWriteStream(e),s=q_.Readable.from(r),i={},o={objectMode:!0};return await new Eie(i,o).fromInput(s).toOutput(n).promise(!1),{message:Rie,path:e}}throw wt(new Error,qr.INVALID_VALUE("format"),Ct.BAD_REQUEST)}a(Cie,"saveToLocal");async function Lie(e){if(!e.s3||Object.keys(e.s3).length===0)throw wt(new Error,qr.MISSING_VALUE("S3 object"),Ct.BAD_REQUEST);if(mn.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw wt(new Error,qr.MISSING_VALUE("aws_access_key_id"),Ct.BAD_REQUEST);if(mn.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw wt(new Error,qr.MISSING_VALUE("aws_secret_access_key"),Ct.BAD_REQUEST);if(mn.isEmptyOrZeroLength(e.s3.bucket))throw wt(new Error,qr.MISSING_VALUE("bucket"),Ct.BAD_REQUEST);if(mn.isEmptyOrZeroLength(e.s3.key))throw wt(new Error,qr.MISSING_VALUE("key"),Ct.BAD_REQUEST);if(mn.isEmptyOrZeroLength(e.s3.region))throw wt(new Error,qr.MISSING_VALUE("region"),Ct.BAD_REQUEST);let t=rq(e);if(!mn.isEmpty(t))throw wt(new Error,t,Ct.BAD_REQUEST);qn.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await nq(e)}catch(l){throw qn.error(l),l}let n,s=await fie.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new q_.PassThrough;if(e.format===eq){i=e.s3.key+".csv";let l=tq(r);l.on("error",_=>{throw _}),l.pipe(o)}else if(e.format===ZH){i=e.s3.key+".json";let l=new q_.Readable;l.pipe(o),l.on("error",d=>{throw d}),l.push("[");let _=r.length,u="";for(let[d,f]of r.entries()){let E=d===_-1?JSON.stringify(f):JSON.stringify(f)+",";u+=E,d!==0&&d%Aie===0&&(l.push(u),u="")}u.length!==0&&l.push(u),l.push("]"),l.push(null)}else throw wt(new Error,qr.INVALID_VALUE("format"),Ct.BAD_REQUEST);return new Tie({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(Lie,"export_to_s3");function tq(e){let t=q_.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),r={},n={objectMode:!0},s=new hie(r,n);return t.pipe(s)}a(tq,"toCsvStream");function rq(e){if(qn.trace("in exportCoreValidation"),mn.isEmpty(e.format))return"format missing";if(JH.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${JH.join(", ")}`;let t=e.search_operation.operation;if(mn.isEmpty(t))return"search_operation.operation missing";if(zH.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${zH.join(", ")}`}a(rq,"exportCoreValidation");async function nq(e){qn.trace("in getRecords");let t,r;if(H_.isEmpty(e.search_operation)||H_.isEmptyOrZeroLength(e.search_operation.operation))throw wt(new Error,qr.INVALID_VALUE("Search operation"),Ct.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=Nie;break;case"search_by_hash":t=Oie;break;case"search_by_conditions":t=QA.searchByConditions;break;case"sql":t=bie;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,qn.error(r),wt(new Error,r,Ct.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(nq,"getRecords")});var _q={};Fe(_q,{contentTypes:()=>ZA,findBestSerializer:()=>jh,getDeserializer:()=>wa,registerContentHandlers:()=>eO,serialize:()=>zh,serializeMessage:()=>fo});function Die(e){try{return e?.[0]===123?XA(e):e}catch{return e}}function eO(e){e.register(Mie,{serializers:[{regex:/^application\/json$/,serializer:Qu},{regex:/^application\/cbor$/,serializer:function(t){return new Ia.EncoderStream(G_).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?Qh.Readable.from((0,xs.encodeIter)(t,G_)):(0,xs.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,jA.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,xs.unpack)(r))}catch(s){s.statusCode=400,n(s)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Ia.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function jh(e){let r=(e.headers.asObject||e.headers).accept,n,s=0,i,o,c=r?r.toLowerCase().split(/\s*,\s*/):[];for(let l of c){let[_,...u]=l.split(/\s*;\s*/),d=1,f={q:1};for(let h of u){let p=h.indexOf("=");f[h.substring(0,p)]=h.substring(p+1)}d=+f.q;let E=er.get(_);if(E){let h=(E.q||1)*d;h>s&&(n=E,i=E.type||_,s=h,o=f)}}if(!n){if(r)return{serializer(){this.code(406).send("No supported content types found in Accept header, supported types include: "+Array.from(er.keys()).join(", "))}};n=er.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:o}}function zh(e,t,r){let n=oq&&t.headers.asObject?.["accept-encoding"]?.includes("br"),s;if(e?.contentType!=null&&e.data!=null)r.headers.set("Content-Type",e.contentType),r.headers.set("Vary","Accept-Encoding"),s=e.data;else if(e instanceof Uint8Array)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),s=e;else{let i=jh(t);if(i.serializer.compressible===!1&&(n=!1),r.headers.set("Vary","Accept, Accept-Encoding"),r.headers.set("Content-Type",i.type),typeof e=="object"&&(e[Symbol.iterator]||e[Symbol.asyncIterator])&&i.serializer.serializeStream){let o=i.serializer.serializeStream(e);return n&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,Ri.createBrotliCompress)({params:{[Ri.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?Ri.constants.BROTLI_MODE_TEXT:Ri.constants.BROTLI_MODE_GENERIC,[Ri.constants.BROTLI_PARAM_QUALITY]:2}}))),o}s=i.serializer.serialize(e)}return n&&s?.length>oq?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,Ri.brotliCompress)(s,(c,l)=>{c?o(c):i(l)}))):s}function fo(e,t){if(e?.contentType!=null&&e.data!=null)return e.data;if(!t)return x_(e);let r=t.serialize;if(r)return r(e);let n=jh(t);return r=t.serialize=n.serializer.serialize,r(e)}function Uie(e){return new Promise((t,r)=>{let n=[];e.on("data",s=>n.push(s)),e.on("end",()=>t(Buffer.concat(n))),e.on("error",r)})}function wa(e,t){e||(e="");let r=e.indexOf(";"),n;r>-1&&(n=e.slice(r+1),e=e.slice(0,r));let s=er.get(e);if(t){if(s?.deserializeStream)return s.deserializeStream;let i=er.get(e)?.deserialize||aq(e,n);return o=>Uie(o).then(i)}return e&&er.get(e)?.deserialize||aq(e,n)}function aq(e,t){if(e.startsWith("text/")){let r=t?.match(/charset=(.+)/)?.[1]||"utf-8";return n=>({contentType:e,data:n.toString(r)})}else return e==="application/octet-stream"?r=>r:r=>{if(!e)try{if(r?.[0]===123)return XA(r)}catch{}return{contentType:e||"application/octet-stream",data:r}}}function vie(e,t){return{[Symbol.asyncIterator](){let r=e[Symbol.asyncIterator]?e[Symbol.asyncIterator]():e[Symbol.iterator]();return{next(){let n=r.next();return n.then?n.then(s=>({value:t(s.value),done:s.done})):{value:t(n.value),done:n.done}},return(n){return r.return(n)},throw(n){return r.throw(n)}}}}}var jA,xs,Ia,Ri,Qh,cq,zA,JA,lq,x_,XA,G_,er,ZA,iq,uq,Pie,Mie,oq,Vc=Ne(()=>{Vg();jA=B(Wh()),xs=require("msgpackr"),Ia=require("cbor-x"),Ri=require("zlib"),Qh=require("stream");hr();cq=require("../index"),zA=B(J()),JA=B(C()),lq=zA.default.get(JA.CONFIG_PARAMS.SERIALIZATION_BIGINT)!==!1,x_=lq?_a:JSON.stringify,XA=lq?$g:JSON.parse,G_={useRecords:!1,useToJSON:!0},er=new Map,ZA=er;Et.contentTypes=ZA;(0,cq._assignPackageExport)("contentTypes",ZA);er.set("application/json",{serializeStream:Qu,serialize:x_,deserialize:XA,q:.8});iq=new Ia.Encoder(G_);er.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new Ia.EncoderStream(G_).end(e)},serialize:iq.encode,deserialize:iq.decode,q:1});er.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?Qh.Readable.from((0,xs.encodeIter)(e,G_)):(0,xs.pack)(e)},serialize:xs.pack,deserialize:xs.unpack,q:.9});er.set("text/csv",{serializeStream(e){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,jA.toCsvStream)(e)},q:.1});er.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});er.set("text/event-stream",{serializeStream:function(e){return Qh.Readable.from(vie(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+`
|
|
19
|
-
`),e.data){let r=e.data;typeof r=="object"&&(r=
|
|
16
|
+
`,""):null}catch(f){f.stderr?i[l].npm_error=UH(f.stderr):i[l].npm_error=f.message;continue}try{i[l].npm_output=JSON.parse(u)}catch{i[l].npm_output=u}try{i[l].npm_error=JSON.parse(d)}catch{i[l].npm_error=d}}return jc.info(`finished installModules with response ${i}`),i}a(Bse,"installModules");function UH(e){let t='"error": {',r=e.indexOf('"error": {'),n=e.indexOf(`}
|
|
17
|
+
`);return r>-1&&n>-1?JSON.parse(e.substring(r+t.length-1,n+1)):e}a(UH,"parseNPMStdErr");async function Hse(e){jc.info(`starting auditModules for request: ${e}`);let t=BH(e);if(t)throw Wc(t,t.message,Qc.BAD_REQUEST);let{projects:r}=e;await Yh(),await vH(r);let n={};for(let s=0,i=r.length;s<i;s++){let o=r[s],c=Vh.join(WA,o);n[o]={npm_output:null,npm_error:null};try{let l=await P_("npm audit --json",c);n[o].npm_output=JSON.parse(l)}catch(l){n[o].npm_error=UH(l.stderr)}}return jc.info(`finished auditModules with response ${n}`),n}a(Hse,"auditModules");async function Yh(){try{return await P_("npm -v"),!0}catch{throw Wc(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",Qc.BAD_REQUEST,void 0,void 0,!0)}}a(Yh,"checkNPMInstalled");async function vH(e){if(!Array.isArray(e)||e.length===0)throw Wc(new Error,"projects argument must be an array with at least 1 element",Qc.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n],o=Vh.join(WA,i.toString());if(!await DH.pathExists(o)){t.push(i);continue}let l=Vh.join(o,"package.json");await DH.pathExists(l)||r.push(i)}if(t.length>0)throw Wc(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Qc.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Wc(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Qc.BAD_REQUEST,void 0,void 0,!0)}a(vH,"checkProjectPaths");function BH(e){let t=$h.object({projects:$h.array().min(1).items($h.string()).required(),dry_run:$h.boolean().default(!1)});return Dse.validateBySchema(e,t)}a(BH,"modulesValidator")});var jA=T((jOe,kH)=>{"use strict";var zc=require("fs-extra"),QA=require("path"),Wh=x(),qH=K(),Qh=C(),FH=X(),qse=Et();kH.exports=Gse;async function Gse(){let e=xse(),t=FH.get(Qh.CONFIG_PARAMS.ROOTPATH),r=QA.join(t,"package.json"),n={dependencies:{harperdb:"file:"+Qh.PACKAGE_ROOT}},s=QA.join(t,"node_modules");await zc.ensureDir(s);let i,o=!0,c=!1;try{i=await zc.readJson(r)}catch(l){if(qH.isEmptyOrZeroLength(e))return;if(l.code!==Qh.NODE_ERROR_CODES.ENOENT)throw l;o=!1}if(!qH.isEmptyOrZeroLength(e)){for(let{name:l,package:_}of e){let u=await GH(_);n.dependencies[l]=u+_}if(!o){Wh.notify("Installing components"),await xH(r,n,null);return}for(let{name:l,package:_}of e){let u=i.dependencies[l],d=await GH(_);if(u===void 0||u!==d+_){c=!0;break}}}for(let l in i.dependencies)n.dependencies[l]===void 0&&(Wh.notify("Removing component",l),c=!0);c&&(Wh.notify("Updating components."),await xH(r,n,i))}a(Gse,"installComponents");function xse(){let e=qse.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(xse,"getComponentsConfig");async function GH(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":QA.extname(e)||await zc.pathExists(e)?"file:":"github:"}a(GH,"getPkgPrefix");async function xH(e,t,r){Wh.trace("npm installing components package.json",t),await zc.writeFile(e,JSON.stringify(t,null," "));try{await Kh().installAllRootModules(FH.get(Qh.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(n){throw r?await zc.writeFile(e,JSON.stringify(r,null," ")):await zc.unlink(e),n}}a(xH,"installPackages")});var jh=T((XOe,KH)=>{"use strict";var Ye=require("fs-extra"),zA=require("fast-glob"),Te=require("path"),VH=require("tar-fs"),JOe=require("uuid").v4,JA=require("normalize-path"),Hs=LH(),vt=x(),Je=C(),Ot=X(),M_=Et(),Fse=K(),{PACKAGE_ROOT:kse}=C(),{handleHDBError:Vt,hdb_errors:$se}=ie(),{basename:Vse}=require("path"),Yse=jA(),YH=X(),Kse=C(),{Readable:Wse}=require("stream"),{isMainThread:Qse}=require("worker_threads"),{HDB_ERROR_MSGS:Ia,HTTP_STATUS_CODES:Yt}=$se,jse=Te.join(kse,"application-template"),$H=Te.join(Ot.get(Je.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function zse(){vt.trace("getting custom api status");let e={};try{e={port:Ot.get(Je.CONFIG_PARAMS.HTTP_PORT),directory:Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Vt(new Error,Ia.FUNCTION_STATUS,Yt.INTERNAL_SERVER_ERROR,vt.ERR,t)}return e}a(zse,"customFunctionsStatus");function Jse(){vt.trace("getting custom api endpoints");let e={},t=Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT);try{zA.sync(JA(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:zA.sync(JA(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:zA.sync(JA(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Vt(new Error,Ia.GET_FUNCTIONS,Yt.INTERNAL_SERVER_ERROR,vt.ERR,r)}return e}a(Jse,"getCustomFunctions");function Xse(e){e.project&&(e.project=Te.parse(e.project).name),e.file&&(e.file=Te.parse(e.file).name);let t=Hs.getDropCustomFunctionValidator(e);if(t)throw Vt(t,t.message,Yt.BAD_REQUEST);vt.trace("getting custom api endpoint file content");let r=Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,o=Te.join(r,n,s,i+".js");try{return Ye.readFileSync(o,{encoding:"utf8"})}catch(c){throw Vt(new Error,Ia.GET_FUNCTION,Yt.INTERNAL_SERVER_ERROR,vt.ERR,c)}}a(Xse,"getCustomFunction");function Zse(e){e.project&&(e.project=Te.parse(e.project).name),e.file&&(e.file=Te.parse(e.file).name);let t=Hs.setCustomFunctionValidator(e);if(t)throw Vt(t,t.message,Yt.BAD_REQUEST);vt.trace("setting custom function file content");let r=Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:o}=e;try{return Ye.outputFileSync(Te.join(r,n,s,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw Vt(new Error,Ia.SET_FUNCTION,Yt.INTERNAL_SERVER_ERROR,vt.ERR,c)}}a(Zse,"setCustomFunction");function eie(e){e.project&&(e.project=Te.parse(e.project).name),e.file&&(e.file=Te.parse(e.file).name);let t=Hs.getDropCustomFunctionValidator(e);if(t)throw Vt(t,t.message,Yt.BAD_REQUEST);vt.trace("dropping custom function file");let r=Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{return Ye.unlinkSync(Te.join(r,n,s,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw Vt(new Error,Ia.DROP_FUNCTION,Yt.INTERNAL_SERVER_ERROR,vt.ERR,o)}}a(eie,"dropCustomFunction");function tie(e){e.project&&(e.project=Te.parse(e.project).name);let t=Hs.addComponentValidator(e);if(t)throw Vt(t,t.message,Yt.BAD_REQUEST);vt.trace("adding component");let r=Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;try{let s=Te.join(r,n);return Ye.mkdirSync(s,{recursive:!0}),Ye.copySync(jse,s),`Successfully added project: ${n}`}catch(s){throw Vt(new Error,Ia.ADD_FUNCTION,Yt.INTERNAL_SERVER_ERROR,vt.ERR,s)}}a(tie,"addComponent");function rie(e){e.project&&(e.project=Te.parse(e.project).name);let t=Hs.dropCustomFunctionProjectValidator(e);if(t)throw Vt(t,t.message,Yt.BAD_REQUEST);vt.trace("dropping custom function project");let r=Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=Ot.get(Je.CONFIG_PARAMS.APPS);if(!Fse.isEmptyOrZeroLength(s)){let i=!1;for(let[o,c]of s.entries())if(c.name===n){s.splice(o,1),i=!0;break}if(i)return M_.updateConfigValue(Je.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=Te.join(r,n);return Ye.rmSync(i,{recursive:!0}),`Successfully deleted project: ${n}`}catch(i){throw Vt(new Error,Ia.DROP_FUNCTION_PROJECT,Yt.INTERNAL_SERVER_ERROR,vt.ERR,i)}}a(rie,"dropCustomFunctionProject");async function nie(e){e.project&&(e.project=Te.parse(e.project).name);let t=Hs.packageComponentValidator(e);if(t)throw Vt(t,t.message,Yt.BAD_REQUEST);let r=Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;vt.trace("packaging component",n);let s;try{s=await Ye.realpath(Te.join(r,n))}catch(l){if(l.code!==Je.NODE_ERROR_CODES.ENOENT)throw l;try{s=await Ye.realpath(Te.join(Ot.get(Je.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(_){if(_.code===Je.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}await Ye.ensureDir($H);let i=Te.join($H,`${n}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:l=>l.includes(Te.join(s,"node_modules"))}),VH.pack(s,o).pipe(Ye.createWriteStream(i,{overwrite:!0})),await new Promise(l=>setTimeout(l,2e3));let c=Ye.readFileSync(i,{encoding:"base64"});return await Ye.remove(i),{project:n,payload:c}}a(nie,"packageComponent");async function sie(e){e.project&&(e.project=Te.parse(e.project).name);let t=Hs.deployComponentValidator(e);if(t)throw Vt(t,t.message,Yt.BAD_REQUEST);let r=Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{project:n,payload:s,package:i}=e;if(vt.trace("deploying component",n),!s&&!i)throw new Error("'payload' or 'package' must be provided");let o;if(s){o=Te.join(r,n),i="file:"+o,await Ye.ensureDir(o);let f=Wse.from(Buffer.from(s,"base64"));await new Promise((h,m)=>{f.pipe(VH.extract(o,{finish:h})).on("error",m)});let E=await Ye.readdir(o);E.length===1&&E[0]==="package"&&(await Ye.copy(Te.join(o,"package"),o),await Ye.remove(Te.join(o,"package")))}if(await M_.addConfig(n,{package:i}),!s){await Yse();let f=YH.get(Kse.CONFIG_PARAMS.ROOTPATH);o=Te.join(f,"node_modules",n)}if(Qse)return;let c=new Map;c.isWorker=!0;let l=(Jh(),oe(zh)),_;l.setErrorReporter(f=>_=f);let u=Vse(o),d=l.component_errors.get(u);try{await l.loadComponent(o,c)}finally{l.component_errors.set(u,d)}if(_)throw _;return vt.info("Installed component"),`Successfully deployed: ${n}`}a(sie,"deployComponent");async function iie(){let e=M_.getConfiguration(),t=[];for(let o in e)if(e[o]?.package){if(e[o].package.startsWith("file:"))continue;t.push(Object.assign({},e[o],{name:o}))}let r=a(async(o,c)=>{try{let l=await Ye.readdir(o,{withFileTypes:!0});for(let _ of l){let u=_.name;if(u.startsWith(".")||u==="node_modules")continue;let d=Te.join(o,u);if(_.isDirectory()||_.isSymbolicLink()){let f={name:u,entries:[]};c.entries.push(f),await r(d,f)}else{let f=await Ye.stat(d),E={name:Te.basename(u),mtime:f.mtime,size:f.size};c.entries.push(E)}}return c}catch(l){return vt.warn("Error loading package",l),{error:l.toString(),entries:[]}}},"walk_dir"),n=await r(Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{name:Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT).split(Te.sep).slice(-1).pop(),entries:t});for(let o of n.entries)if(o.package){let c=await r(Te.join(Ot.get(Je.CONFIG_PARAMS.ROOTPATH),"node_modules",o.name),{name:o.name,entries:[]});Object.assign(o,c)}let i=(Jh(),oe(zh)).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 n}a(iie,"getComponents");async function oie(e){let t=Hs.getComponentFileValidator(e);if(t)throw Vt(t,t.message,Yt.BAD_REQUEST);let n=M_.getConfigObj()[e.project]||e.project==="harperdb"?Te.join(YH.get(Je.CONFIG_PARAMS.ROOTPATH),"node_modules"):Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),s=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await Ye.stat(Te.join(n,e.project,e.file));return{message:await Ye.readFile(Te.join(n,e.project,e.file),s),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===Je.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${Te.join(e.project,e.file)}'`):i}}a(oie,"getComponentFile");async function aie(e){let t=Hs.setComponentFileValidator(e);if(t)throw Vt(t,t.message,Yt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=Te.join(Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);return e.payload!==void 0?(await Ye.ensureFile(n),await Ye.outputFile(n,e.payload,r)):await Ye.ensureDir(n),"Successfully set component: "+e.file}a(aie,"setComponentFile");async function cie(e){let t=Hs.dropComponentFileValidator(e);if(t)throw Vt(t,t.message,Yt.BAD_REQUEST);let r=e.file?Te.join(e.project,e.file):e.project,n=Te.join(Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),r);return await Ye.pathExists(n)&&await Ye.remove(n),M_.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(cie,"dropComponent");KH.exports={customFunctionsStatus:zse,getCustomFunctions:Jse,getCustomFunction:Xse,setCustomFunction:Zse,dropCustomFunction:eie,addComponent:tie,dropCustomFunctionProject:rie,packageComponent:nie,deployComponent:sie,getComponents:iie,getComponentFile:oie,setComponentFile:aie,dropComponent:cie}});var XA=T((eNe,QH)=>{"use strict";var qs=require("joi"),WH=rt();QH.exports={readTransactionLogValidator:lie,deleteTransactionLogsBeforeValidator:uie};function lie(e){let t=qs.object({schema:qs.string().required(),table:qs.string().required(),from:qs.date().timestamp(),to:qs.date().timestamp(),limit:qs.number().min(1)});return WH.validateBySchema(e,t)}a(lie,"readTransactionLogValidator");function uie(e){let t=qs.object({schema:qs.string().required(),table:qs.string().required(),timestamp:qs.date().timestamp().required()});return WH.validateBySchema(e,t)}a(uie,"deleteTransactionLogsBeforeValidator")});var Zh=T((rNe,ZH)=>{"use strict";var ZA=C(),Xh=ht(),jH=K(),zH=X(),JH=li(),{handleHDBError:Jc,hdb_errors:_ie}=ie(),{HTTP_STATUS_CODES:Xc}=_ie,{readTransactionLogValidator:die,deleteTransactionLogsBeforeValidator:fie}=XA(),XH="This operation relies on clustering and cannot run with it disable.",Eie="Logs successfully deleted from transaction log.",hie="All logs successfully deleted from transaction log.";ZH.exports={readTransactionLog:pie,deleteTransactionLogsBefore:mie};async function*pie(e){let t=die(e);if(t)throw Jc(t,t.message,Xc.BAD_REQUEST,void 0,void 0,!0);if(!zH.get(ZA.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Jc(new Error,XH,Xc.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n}=e,s=jH.checkSchemaTableExist(r,n);if(s)throw Jc(new Error,s,Xc.NOT_FOUND,void 0,void 0,!0);let i=JH.createNatsTableStreamName(r,n),o=await Xh.viewStreamIterator(i,parseInt(e.from),e.limit);for await(let c of o){let l=Math.floor(c?.nats_timestamp/1e6);if(e.to&&l>e.to)break;let _={operation:c?.entry?.operation,user:c?.entry?.__origin?.user,timestamp:l,records:c?.entry?.records,attributes:c?.entry?.attributes};c?.entry?.operation===ZA.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(pie,"readTransactionLog");async function mie(e){let t=fie(e);if(t)throw Jc(t,t.message,Xc.BAD_REQUEST,void 0,void 0,!0);if(!zH.get(ZA.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Jc(new Error,XH,Xc.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n,timestamp:s}=e,i=jH.checkSchemaTableExist(r,n);if(i)throw Jc(new Error,i,Xc.NOT_FOUND,void 0,void 0,!0);let o=JH.createNatsTableStreamName(r,n),{jsm:c}=await Xh.getNATSReferences(),l=await Xh.getStreamInfo(o),_=new Date(l.state.first_ts).getTime();if(s<=_)return`No transactions exist before: ${s}`;let u=Eie,d,f=new Date(l.state.last_ts).getTime();return s>f?(d=l.state.last_seq+1,u=hie):d=(await Xh.viewStream(o,parseInt(s),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),u}a(mie,"deleteTransactionLogsBefore")});var tq=T((sNe,eq)=>{"use strict";var eO=class{static{a(this,"PermissionTableResponseObject")}constructor(t,r,n=[],s=[]){this.schema=t,this.table=r,this.required_table_permissions=n,this.required_attribute_permissions=s}};eq.exports=eO});var nq=T((oNe,rq)=>{"use strict";var tO=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};rq.exports=tO});var nO=T((cNe,iq)=>{"use strict";var sq=tq(),Sie=nq(),{HDB_ERROR_MSGS:Tie}=Wr(),rO=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=Tie.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,n){if(r&&n){let s=`${r}_${n}`;if(this.unauthorized_access[s])return}this.invalid_schema_items.push(t)}addUnauthorizedTable(t,r,n){let s=new sq(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new Sie(c,s[c]);i.push(l)});let o=`${r}_${n}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new sq(r,n,[],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}};iq.exports=rO});var np=T((uNe,Rq)=>{"use strict";var sO=br(),ep=nr(),qn=jE(),B_=zi(),iO=ta(),gie=CR(),Rie=gv(),H_=wr(),tp=ZE(),Bt=x(),Aie=xR(),Oie=d_(),Nie=SA(),bie=Eh(),yie=ph(),Iie=gA(),wie=Th(),Cie=Rh(),oO=Oh(),gi=K(),Lie=pB(),aO=bh(),cq=Na(),Hn=C(),lq=hH(),Die=di(),uq=c_(),_q=(Fh(),oe(w_)),dq=Et(),En=jh(),Pie=require("alasql"),fq=Zh(),Eq=Kh(),hq=nO(),{handleHDBError:Gr,hdb_errors:pq}=ie(),{HDB_ERROR_MSGS:Xt,HTTP_STATUS_CODES:U_}=pq,V=new Map,mq="delete",po="insert",Ri="read",wa="update",v_="describe",oq=B_.describeSchema.name,aq=B_.describeTable.name,Sq={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},Mie="catchup",Uie="handleGetJob",vie="handleGetJobsByStartDate",rp={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},Bie=[qn.createTable.name,qn.createAttribute.name,qn.dropTable.name,qn.dropAttribute.name],Tq={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},Q=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};V.set(sO.insert.name,new Q(!1,[po]));V.set(sO.update.name,new Q(!1,[wa]));V.set(sO.upsert.name,new Q(!1,[po,wa]));V.set(ep.searchByConditions.name,new Q(!1,[Ri]));V.set(ep.searchByHash.name,new Q(!1,[Ri]));V.set(ep.searchByValue.name,new Q(!1,[Ri]));V.set(ep.search.name,new Q(!1,[Ri]));V.set(qn.createSchema.name,new Q(!0,[]));V.set(qn.createTable.name,new Q(!0,[]));V.set(qn.createAttribute.name,new Q(!1,[po]));V.set(qn.dropSchema.name,new Q(!0,[]));V.set(qn.dropTable.name,new Q(!0,[]));V.set(qn.dropAttribute.name,new Q(!0,[]));V.set(B_.describeSchema.name,new Q(!1,[Ri]));V.set(B_.describeTable.name,new Q(!1,[Ri]));V.set(iO.deleteRecord.name,new Q(!1,[mq]));V.set(H_.addUser.name,new Q(!0,[]));V.set(H_.alterUser.name,new Q(!0,[]));V.set(H_.dropUser.name,new Q(!0,[]));V.set(H_.listUsersExternal.name,new Q(!0,[]));V.set(tp.listRoles.name,new Q(!0,[]));V.set(tp.addRole.name,new Q(!0,[]));V.set(tp.alterRole.name,new Q(!0,[]));V.set(tp.dropRole.name,new Q(!0,[]));V.set(Aie.name,new Q(!0,[]));V.set(Oie.name,new Q(!0,[]));V.set(Nie.name,new Q(!0,[]));V.set(bie.name,new Q(!0,[]));V.set(yie.name,new Q(!0,[]));V.set(Iie.name,new Q(!0,[]));V.set(oO.setRoutes.name,new Q(!0,[]));V.set(oO.getRoutes.name,new Q(!0,[]));V.set(oO.deleteRoutes.name,new Q(!0,[]));V.set(dq.setConfiguration.name,new Q(!0,[]));V.set(wie.clusterStatus.name,new Q(!0,[]));V.set(Cie.name,new Q(!0,[]));V.set(aO.getFingerprint.name,new Q(!0,[]));V.set(aO.setLicense.name,new Q(!0,[]));V.set(iO.deleteFilesBefore.name,new Q(!0,[]));V.set(iO.deleteAuditLogsBefore.name,new Q(!0,[]));V.set(cq.restart.name,new Q(!0,[]));V.set(cq.restartService.name,new Q(!0,[]));V.set(gie.name,new Q(!0,[]));V.set(Rie.name,new Q(!0,[Ri]));V.set(Die.systemInformation.name,new Q(!0,[]));V.set(dq.getConfiguration.name,new Q(!0,[]));V.set(fq.readTransactionLog.name,new Q(!0,[]));V.set(fq.deleteTransactionLogsBefore.name,new Q(!0,[]));V.set(Eq.installModules.name,new Q(!0,[]));V.set(Eq.auditModules.name,new Q(!0,[]));V.set(uq.createTokens.name,new Q(!1,[]));V.set(uq.refreshOperationToken.name,new Q(!1,[]));V.set(_q.login.name,new Q(!1,[]));V.set(_q.logout.name,new Q(!1,[]));V.set(En.customFunctionsStatus.name,new Q(!0,[]));V.set(En.getCustomFunctions.name,new Q(!0,[]));V.set(En.getComponents.name,new Q(!0,[]));V.set(En.getComponentFile.name,new Q(!0,[]));V.set(En.setComponentFile.name,new Q(!0,[]));V.set(En.dropComponent.name,new Q(!0,[]));V.set(En.getCustomFunction.name,new Q(!0,[]));V.set(En.setCustomFunction.name,new Q(!0,[]));V.set(En.dropCustomFunction.name,new Q(!0,[]));V.set(En.addComponent.name,new Q(!0,[]));V.set(En.dropCustomFunctionProject.name,new Q(!0,[]));V.set(En.packageComponent.name,new Q(!0,[]));V.set(En.deployComponent.name,new Q(!0,[]));V.set(aO.getRegistrationInfo.name,new Q(!1,[]));V.set(H_.userInfo.name,new Q(!1,[]));V.set(B_.describeAll.name,new Q(!1,[]));V.set(Uie,new Q(!1,[]));V.set(vie,new Q(!0,[]));V.set(Mie,new Q(!0,[]));V.set(rp.CSV_DATA_LOAD,new Q(!1,[po,wa]));V.set(rp.CSV_URL_LOAD,new Q(!1,[po,wa]));V.set(rp.CSV_FILE_LOAD,new Q(!1,[po,wa]));V.set(rp.IMPORT_FROM_S3,new Q(!1,[po,wa]));V.set(Tq.EXPORT_TO_S3,new Q(!0,[]));V.set(Tq.EXPORT_LOCAL,new Q(!0,[]));V.set(Hn.VALID_SQL_OPS_ENUM.DELETE,new Q(!1,[mq]));V.set(Hn.VALID_SQL_OPS_ENUM.SELECT,new Q(!1,[Ri]));V.set(Hn.VALID_SQL_OPS_ENUM.INSERT,new Q(!1,[po]));V.set(Hn.VALID_SQL_OPS_ENUM.UPDATE,new Q(!1,[wa]));Rq.exports={verifyPerms:qie,verifyPermsAst:Hie,verifyBulkLoadAttributePerms:xie};function Hie(e,t,r){if(gi.isEmptyOrZeroLength(e))throw Bt.info("verify_perms_ast has an empty user parameter"),Gr(new Error);if(gi.isEmptyOrZeroLength(t))throw Bt.info("verify_perms_ast has an empty user parameter"),Gr(new Error);if(gi.isEmptyOrZeroLength(r))throw Bt.info("verify_perms_ast has a null operation parameter"),Gr(new Error);try{let n=new hq,s=new Lie(e),i=s.getSchemas(),o=new Map;if((!i||i.length===0)&&s.affected_attributes&&s.affected_attributes.size>0)throw Bt.info("No schemas defined in verifyPermsAst(), will not continue."),Gr(new Error);let c=!!t.role.permission.super_user,l=i.includes("system");if(l&&Sq[r])throw Gr(new Error,Xt.DROP_SYSTEM,U_.FORBIDDEN);if(c&&!l)return null;let _=lq.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof Pie.yy.Select&&(e=s.updateAttributeWildcardsForRolePerms(_));for(let d=0;d<i.length;d++){let f=s.getTablesBySchemaName(i[d]);f&&o.set(i[d],f)}let u=gq(t,r,o,n);return u||(o.forEach((d,f)=>{for(let E=0;E<d.length;E++){let h=s.getAttributesBySchemaTableName(f,d[E]),m=lO(t.role.permission,f,d[E]);cO(h,m,r,d[E],f,n)}}),n.getPermsResponse())}catch(n){throw Gr(n)}}a(Hie,"verifyPermsAst");function qie(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Bt.info("null required parameter in verifyPerms"),Gr(new Error,Xt.DEFAULT_INVALID_REQUEST,U_.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let n=e.action,s=e.schema??e.database,i=e.table,o=new Map;s&&i&&o.set(s,[i]);let c=new hq;if(gi.isEmptyOrZeroLength(e.hdb_user.role)||gi.isEmptyOrZeroLength(e.hdb_user.role.permission))return Bt.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(Xt.USER_HAS_NO_PERMS(e.hdb_user.username));let l=!!e.hdb_user.role.permission.super_user,_=e.hdb_user.role.permission.structure_user,u=o.has(Hn.SYSTEM_SCHEMA_NAME)||s===Hn.SYSTEM_SCHEMA_NAME;if(u&&Sq[r])throw Gr(new Error,Xt.DROP_SYSTEM,U_.FORBIDDEN);if(l&&!u||_===!0&&(r===qn.createSchema.name||r===qn.dropSchema.name))return null;if(Bie.indexOf(r)>=0&&(_===!0||Array.isArray(_)))return _===!0||_.indexOf(s)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${s}'`);let d=lq.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===oq||r===aq){if(s===Hn.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Xt.SCHEMA_PERM_ERROR(s));if(!d.super_user){if(r===oq&&(!d[s]||!d[s][v_]))return c.handleInvalidItem(Xt.SCHEMA_NOT_FOUND(s));if(r===aq&&(!d[s]||!d[s].tables[i]||!d[s].tables[i][v_]))return c.handleInvalidItem(Xt.TABLE_NOT_FOUND(s,i))}}let f=gq(e.hdb_user,r,o,c,n);if(f)return f;if(V.get(r)&&V.get(r).perms.length===0)return null;if(!l&&e.get_attributes&&Hn.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let m=[],S=d[s].tables[i];S[Hn.PERMS_CRUD_ENUM.READ]&&(S.attribute_permissions.length>0?S.attribute_permissions.filter(g=>g[Hn.PERMS_CRUD_ENUM.READ]).forEach(g=>{m.push(g.attribute_name)}):m=global.hdb_schema[s][i].attributes.map(R=>R.attribute),e.get_attributes=m)}let E=Gie(e),h=lO(e.hdb_user.role.permission,s,i);return cO(E,h,r,i,s,c,n),c.getPermsResponse()}a(qie,"verifyPerms");function gq(e,t,r,n,s){if(gi.arrayHasEmptyValues([e,t,r]))throw Bt.info("hasPermissions has an invalid parameter"),Gr(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 Bt.info(`operation ${t} not found.`),Gr(new Error,Xt.OP_NOT_FOUND(t),U_.BAD_REQUEST);if(V.get(t)&&V.get(t).requires_su)return Bt.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(Xt.OP_IS_SU_ONLY(t));let c=r.keys();for(let l of c){try{if(l&&!o[l]||o[l][v_]===!1){n.addInvalidItem(Xt.SCHEMA_NOT_FOUND(l));continue}}catch{n.addInvalidItem(Xt.SCHEMA_NOT_FOUND(l));continue}let _=r.get(l);for(let u of _){let d=o[l].tables[u];if(!d||d[v_]===!1)n.addInvalidItem(Xt.TABLE_NOT_FOUND(l,u));else try{let f=[],E=V.get(t).perms;!gi.isEmpty(s)&&E.includes(s)&&(E=[s]);for(let h=0;h<E.length;h++){let m=E[h],S=d[m];(S==null||S===!1)&&(Bt.info(`Required ${m} permission not found for ${t} ${s?`${s} `:""}operation in role ${e.role.id}`),f.push(m))}f.length>0&&n.addUnauthorizedTable(l,u,f)}catch(f){let E=Xt.UNKNOWN_OP_AUTH_ERROR(t,l,u);throw Bt.error(E),Bt.error(f),Gr(pq.CHECK_LOGS_WRAPPER(E))}}}return r.size<2?n.getPermsResponse():null}a(gq,"hasPermissions");function cO(e,t,r,n,s,i,o){if(!e||!t)throw Bt.info("no attributes specified in checkAttributePerms."),Gr(new Error);let c=V.get(r).perms;if(!c||c==="")throw Bt.info(`no permissions found for ${r} in checkAttributePerms().`),Gr(new Error);if(gi.isEmptyOrZeroLength(t))return Bt.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let l={};for(let u of e){let d=t.get(u);if(d){if(d[v_]===!1){i.addInvalidItem(Xt.ATTR_NOT_FOUND(s,n,u),s,n);continue}if(c)for(let f of c){if(Hn.TIME_STAMP_NAMES.includes(d.attribute_name)&&f!==Ri)throw Gr(new Error,Xt.SYSTEM_TIMESTAMP_PERMS_ERR,U_.FORBIDDEN);d[f]===!1&&(l[d.attribute_name]?l[d.attribute_name].push(f):l[d.attribute_name]=[f])}}else i.addInvalidItem(Xt.ATTR_NOT_FOUND(s,n,u),s,n)}let _=Object.keys(l);_.length>0&&i.addUnauthorizedAttributes(_,s,n,l)}a(cO,"checkAttributePerms");function Gie(e){let t=new Set;try{if(e.action)return t;if(e.operation===Hn.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 n=Object.keys(e.records[r]);for(let s=0;s<n.length;s++)t.add(n[s])}}catch(r){Bt.info(r)}return t}a(Gie,"getRecordAttributes");function lO(e,t,r){let n=new Map;if(gi.isEmpty(e))return Bt.info("no hdb_user specified in getAttributePermissions"),n;if(e.super_user||!t||!r)return n;try{e[t].tables[r].attribute_permissions.forEach(s=>{n.has(s.attribute_name)||n.set(s.attribute_name,s)})}catch{Bt.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}a(lO,"getAttributePermissions");function xie(e,t,r,n,s,i,o){let c=new Set(i),l=lO(e,n,s);cO(c,l,t,s,n,o,r)}a(xie,"verifyBulkLoadAttributePerms")});var ip=T((dNe,yq)=>{"use strict";yq.exports={evaluateSQL:Zie,processAST:bq,convertSQLToAST:Nq,checkASTPermissions:Oq};var Fie=br(),Aq=require("util"),kie=Aq.callbackify(Fie.insert),$ie=nr().search,Vie=NU().update,Yie=Aq.callbackify(Vie),Kie=yU().convertDelete,mo=require("alasql"),Wie=np(),sp=x(),Qie=Wf(),jie=K(),q_=C(),{hdb_errors:zie,handleHDBError:uO}=ie(),{HTTP_STATUS_CODES:_O}=zie;Qie(mo);var Jie=403,Xie="There was a problem performing this insert. Please check the logs and try again.",dO=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function Zie(e,t){let r=e.parsed_sql_object;if(!r){r=Nq(e.sql);let n,s=r.ast.statements[0];if(s instanceof mo.yy.Insert?n=s.into.databaseid:s instanceof mo.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof mo.yy.Update||s instanceof mo.yy.Delete?n=s.table.databaseid:sp.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof mo.yy.Select)&&jie.isEmptyOrZeroLength(n))return t("No schema specified",null)}bq(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}a(Zie,"evaluateSQL");function Oq(e,t){let r;try{r=Wie.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}a(Oq,"checkASTPermissions");function Nq(e){let t=new dO;if(!e)throw uO(new Error,"The 'sql' parameter is missing from the request body",_O.BAD_REQUEST);try{let r=e.trim(),n=mo.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
|
|
18
|
+
`);throw n[1]?uO(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,_O.BAD_REQUEST):uO(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",_O.BAD_REQUEST)}return t}a(Nq,"convertSQLToAST");function bq(e,t,r){try{let n=eoe;if(!e.bypass_auth&&!t.permissions_checked){let i=Oq(e,t);if(i&&i.length>0)return r(Jie,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case q_.VALID_SQL_OPS_ENUM.SELECT:n=$ie,s=t.ast.statements[0];break;case q_.VALID_SQL_OPS_ENUM.INSERT:n=toe;break;case q_.VALID_SQL_OPS_ENUM.UPDATE:n=Yie;break;case q_.VALID_SQL_OPS_ENUM.DELETE:n=Kie;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}n(s,(i,o)=>{if(i){r(i);return}r(null,o)})}catch(n){return r(n)}}a(bq,"processAST");function eoe(e,t){sp.info(e),t("unknown sql statement")}a(eoe,"nullFunction");function toe({statement:e,hdb_user:t},r){let n=e.into,s={schema:n.databaseid,table:n.tableid,operation:"insert",hdb_user:t},i=e.columns.map(o=>o.columnid);try{s.records=roe(i,e.values)}catch(o){return r(o)}kie(s,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(l){sp.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}a(toe,"convertInsert");function roe(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 n={};return r.forEach((s,i)=>{if(s.columnid)throw"cannot use a column in insert value";"value"in s?n[e[i]]=s.value:n[e[i]]=mo.compile(`SELECT ${s.toString()} AS [${q_.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw sp.error(r),new Error(Xie)}}a(roe,"createDataObjects")});var fO=T((ENe,wq)=>{"use strict";var{S3:noe,GetObjectCommand:soe}=require("@aws-sdk/client-s3");wq.exports={getFileStreamFromS3:ioe,getS3AuthObj:Iq};async function ioe(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await Iq(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new soe(r))).Body}a(ioe,"getFileStreamFromS3");function Iq(e,t,r){return new noe({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(Iq,"getS3AuthObj")});var op=T((pNe,Hq)=>{"use strict";var hO=nr(),ooe=ip(),aoe=fO(),{AsyncParser:coe,Transform:loe}=require("json2csv"),x_=require("stream"),hn=K(),EO=require("fs-extra"),uoe=require("path"),Gn=x(),{promisify:Dq}=require("util"),G_=K(),{handleHDBError:Nt,hdb_errors:_oe}=ie(),{HDB_ERROR_MSGS:xr,HTTP_STATUS_CODES:bt}=_oe,{streamAsJSON:doe}=(aR(),oe(TU)),{Upload:foe}=require("@aws-sdk/lib-storage"),Cq=["search_by_value","search_by_hash","sql","search_by_conditions"],Lq=["json","csv"],Pq="json",Mq="csv",Eoe="Successfully exported JSON locally.",hoe="Successfully exported CSV locally.",poe=1e3,moe=hO.searchByHash,Soe=hO.searchByValue,Toe=Dq(ooe.evaluateSQL),goe=Dq(x_.finished);Hq.exports={export_to_s3:Noe,export_local:Roe,toCsvStream:Uq};async function Roe(e){Gn.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=vq(e);if(!hn.isEmpty(t))throw Gn.error(t),Nt(new Error,t,bt.BAD_REQUEST,void 0,void 0,!0);if(hn.isEmpty(e.path))throw Gn.error(xr.MISSING_VALUE("path")),Nt(new Error,xr.MISSING_VALUE("path"),bt.BAD_REQUEST,void 0,void 0,!0);let r=(hn.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(uoe.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=hn.buildFolderPath(e.path,r);await Aoe(e.path);let s=await Bq(e);return await Ooe(n,e.format,s)}a(Roe,"export_local");async function Aoe(e){if(Gn.trace("in confirmPath"),hn.isEmptyOrZeroLength(e))throw Nt(new Error,`Invalid path: ${e}`,bt.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await EO.stat(e)}catch(r){let n;throw r.code==="ENOENT"?n=`path '${e}' does not exist`:r.code==="EACCES"?n=`access to path '${e}' is denied`:n=r.message,Gn.error(n),Nt(new Error,n,bt.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 Gn.error(r),Nt(new Error,r,bt.BAD_REQUEST,void 0,void 0,!0)}return!0}a(Aoe,"confirmPath");async function Ooe(e,t,r){if(Gn.trace("in saveToLocal"),G_.isEmptyOrZeroLength(e))throw Nt(new Error,xr.INVALID_VALUE("file_path"),bt.BAD_REQUEST,void 0,void 0,!0);if(G_.isEmptyOrZeroLength(t))throw Nt(new Error,xr.INVALID_VALUE("Source format"),bt.BAD_REQUEST,void 0,void 0,!0);if(G_.isEmpty(r))throw Nt(new Error,xr.NOT_FOUND("Data"),bt.BAD_REQUEST,void 0,void 0,!0);if(t===Pq){let n=EO.createWriteStream(e);return doe(r).pipe(n),await goe(n),{message:Eoe,path:e}}else if(t===Mq){let n=EO.createWriteStream(e),s=x_.Readable.from(r),i={},o=r.getColumns?.();o&&(i.fields=o.map(u=>({label:u,value:u})));let c={objectMode:!0};return await new coe(i,c).fromInput(s).toOutput(n).promise(!1),{message:hoe,path:e}}throw Nt(new Error,xr.INVALID_VALUE("format"),bt.BAD_REQUEST)}a(Ooe,"saveToLocal");async function Noe(e){if(!e.s3||Object.keys(e.s3).length===0)throw Nt(new Error,xr.MISSING_VALUE("S3 object"),bt.BAD_REQUEST);if(hn.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw Nt(new Error,xr.MISSING_VALUE("aws_access_key_id"),bt.BAD_REQUEST);if(hn.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw Nt(new Error,xr.MISSING_VALUE("aws_secret_access_key"),bt.BAD_REQUEST);if(hn.isEmptyOrZeroLength(e.s3.bucket))throw Nt(new Error,xr.MISSING_VALUE("bucket"),bt.BAD_REQUEST);if(hn.isEmptyOrZeroLength(e.s3.key))throw Nt(new Error,xr.MISSING_VALUE("key"),bt.BAD_REQUEST);if(hn.isEmptyOrZeroLength(e.s3.region))throw Nt(new Error,xr.MISSING_VALUE("region"),bt.BAD_REQUEST);let t=vq(e);if(!hn.isEmpty(t))throw Nt(new Error,t,bt.BAD_REQUEST);Gn.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await Bq(e)}catch(l){throw Gn.error(l),l}let n,s=await aoe.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new x_.PassThrough;if(e.format===Mq){i=e.s3.key+".csv";let l=Uq(r,r.getColumns?.());l.on("error",_=>{throw _}),l.pipe(o)}else if(e.format===Pq){i=e.s3.key+".json";let l=new x_.Readable;l.pipe(o),l.on("error",d=>{throw d}),l.push("[");let _=r.length,u="";for(let[d,f]of r.entries()){let E=d===_-1?JSON.stringify(f):JSON.stringify(f)+",";u+=E,d!==0&&d%poe===0&&(l.push(u),u="")}u.length!==0&&l.push(u),l.push("]"),l.push(null)}else throw Nt(new Error,xr.INVALID_VALUE("format"),bt.BAD_REQUEST);return new foe({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(Noe,"export_to_s3");function Uq(e,t){let r=x_.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),n={};t&&(n.fields=t.map(o=>({label:o,value:o})));let s={objectMode:!0},i=new loe(n,s);return r.pipe(i)}a(Uq,"toCsvStream");function vq(e){if(Gn.trace("in exportCoreValidation"),hn.isEmpty(e.format))return"format missing";if(Lq.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${Lq.join(", ")}`;let t=e.search_operation.operation;if(hn.isEmpty(t))return"search_operation.operation missing";if(Cq.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${Cq.join(", ")}`}a(vq,"exportCoreValidation");async function Bq(e){Gn.trace("in getRecords");let t,r;if(G_.isEmpty(e.search_operation)||G_.isEmptyOrZeroLength(e.search_operation.operation))throw Nt(new Error,xr.INVALID_VALUE("Search operation"),bt.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=Soe;break;case"search_by_hash":t=moe;break;case"search_by_conditions":t=hO.searchByConditions;break;case"sql":t=Toe;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Gn.error(r),Nt(new Error,r,bt.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(Bq,"getRecords")});var Yq={};$e(Yq,{contentTypes:()=>gO,findBestSerializer:()=>cp,getDeserializer:()=>La,registerContentHandlers:()=>RO,serialize:()=>lp,serializeMessage:()=>ho});function boe(e){try{return e?.[0]===123?TO(e):e}catch{return e}}function RO(e){e.register(Ioe,{serializers:[{regex:/^application\/json$/,serializer:ju},{regex:/^application\/cbor$/,serializer:function(t){return new Ca.EncoderStream(k_).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?ap.Readable.from((0,Gs.encodeIter)(t,k_)):(0,Gs.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,pO.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Gs.unpack)(r))}catch(s){s.statusCode=400,n(s)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Ca.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function cp(e){let r=(e.headers.asObject||e.headers).accept,n,s=0,i,o,c=r?r.toLowerCase().split(/\s*,\s*/):[];for(let l of c){let[_,...u]=l.split(/\s*;\s*/),d=1,f={q:1};for(let h of u){let m=h.indexOf("=");f[h.substring(0,m)]=h.substring(m+1)}d=+f.q;let E=Kt.get(_);if(E){let h=(E.q||1)*d;h>s&&(n=E,i=E.type||_,s=h,o=f)}}if(!n){if(r)return{serializer(){this.code(406).send("No supported content types found in Accept header, supported types include: "+Array.from(Kt.keys()).join(", "))}};n=Kt.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:o}}function lp(e,t,r){let n=Gq&&t.headers.asObject?.["accept-encoding"]?.includes("br"),s;if(e?.contentType!=null&&e.data!=null)r.headers.set("Content-Type",e.contentType),r.headers.set("Vary","Accept-Encoding"),s=e.data;else if(e instanceof Uint8Array)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),s=e;else{let i=cp(t);if(i.serializer.compressible===!1&&(n=!1),r.headers.set("Vary","Accept, Accept-Encoding"),r.headers.set("Content-Type",i.type),typeof e=="object"&&(e[Symbol.iterator]||e[Symbol.asyncIterator])&&i.serializer.serializeStream){let o=i.serializer.serializeStream(e,r);return n&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,Ai.createBrotliCompress)({params:{[Ai.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?Ai.constants.BROTLI_MODE_TEXT:Ai.constants.BROTLI_MODE_GENERIC,[Ai.constants.BROTLI_PARAM_QUALITY]:2}}))),o}s=i.serializer.serialize(e,r)}return n&&s?.length>Gq?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,Ai.brotliCompress)(s,(c,l)=>{c?o(c):i(l)}))):s}function ho(e,t){if(e?.contentType!=null&&e.data!=null)return e.data;if(!t)return F_(e);let r=t.serialize;if(r)return r(e);let n=cp(t);return r=t.serialize=n.serializer.serialize,r(e)}function woe(e){return new Promise((t,r)=>{let n=[];e.on("data",s=>n.push(s)),e.on("end",()=>t(Buffer.concat(n))),e.on("error",r)})}function La(e,t){e||(e="");let r=e.indexOf(";"),n;r>-1&&(n=e.slice(r+1),e=e.slice(0,r));let s=Kt.get(e);if(t){if(s?.deserializeStream)return s.deserializeStream;let i=Kt.get(e)?.deserialize||xq(e,n);return o=>woe(o).then(i)}return e&&Kt.get(e)?.deserialize||xq(e,n)}function xq(e,t){if(e.startsWith("text/")){let r=t?.match(/charset=(.+)/)?.[1]||"utf-8";return n=>({contentType:e,data:n.toString(r)})}else return e==="application/octet-stream"?r=>r:r=>{if(!e)try{if(r?.[0]===123)return TO(r)}catch{}return{contentType:e||"application/octet-stream",data:r}}}function Coe(e,t){return{[Symbol.asyncIterator](){let r=e[Symbol.asyncIterator]?e[Symbol.asyncIterator]():e[Symbol.iterator]();return{next(){let n=r.next();return n.then?n.then(s=>({value:t(s.value),done:s.done})):{value:t(n.value),done:n.done}},return(n){return r.return(n)},throw(n){return r.throw(n)}}}}}var pO,Gs,Ca,Ai,ap,Fq,mO,SO,kq,$q,F_,TO,k_,Kt,gO,qq,Vq,yoe,Ioe,Gq,Kc=Ne(()=>{aR();pO=q(op()),Gs=require("msgpackr"),Ca=require("cbor-x"),Ai=require("zlib"),ap=require("stream");mr();Fq=require("../index"),mO=q(X()),SO=q(C()),kq=q(require("yaml")),$q=mO.default.get(SO.CONFIG_PARAMS.SERIALIZATION_BIGINT)!==!1,F_=$q?fa:JSON.stringify,TO=$q?oR:JSON.parse,k_={useRecords:!1,useToJSON:!0},Kt=new Map,gO=Kt;it.contentTypes=gO;(0,Fq._assignPackageExport)("contentTypes",gO);Kt.set("application/json",{serializeStream:ju,serialize:F_,deserialize:TO,q:.8});qq=new Ca.Encoder(k_);Kt.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new Ca.EncoderStream(k_).end(e)},serialize:qq.encode,deserialize:qq.decode,q:1});Kt.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?ap.Readable.from((0,Gs.encodeIter)(e,k_)):(0,Gs.pack)(e)},serialize:Gs.pack,deserialize:Gs.unpack,q:.9});Kt.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),(0,pO.toCsvStream)(e,e?.getColumns?.())},q:.1});Kt.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});Kt.set("text/yaml",{serialize(e){return kq.stringify(e,{aliasDuplicateObjects:!1})},q:.7});Kt.set("text/event-stream",{serializeStream:function(e){return ap.Readable.from(Coe(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+`
|
|
19
|
+
`),e.data){let r=e.data;typeof r=="object"&&(r=F_(r)),t+="data: "+r+`
|
|
20
20
|
`}return e.id&&(t+="id: "+e.id+`
|
|
21
21
|
`),e.retry&&(t+="retry: "+e.retry+`
|
|
22
22
|
`),t+`
|
|
23
|
-
`}else return typeof e=="object"?`data: ${
|
|
23
|
+
`}else return typeof e=="object"?`data: ${F_(e)}
|
|
24
24
|
|
|
25
25
|
`:`data: ${e}
|
|
26
26
|
|
|
27
|
-
`},compressible:!1,q:.8});er.set("application/x-www-form-urlencoded",{deserialize(e){let t={};for(let[r,n]of new URLSearchParams(e))if(t.hasOwnProperty(r)){let s=t[r];Array.isArray(s)?s.push(n):t.key=[s,n]}else t[r]=n},serialize(e){let t=new URLSearchParams;for(let r in e)t.set(r,e);return t.toString()}});uq={type:"application/json",serializeStream:Qu,serialize:x_,deserialize:Die,q:.8};er.set("*/*",uq);er.set("",uq);a(Die,"tryJSONParse");a(eO,"registerContentHandlers");Pie=require("fastify-plugin"),Mie=Pie(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=jh(n.raw);s.type(c),s.serializer(o.serializeStream||o.serialize)}),r()},{name:"content-type-negotiation"});a(jh,"findBestSerializer");oq=zA.default.get(JA.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(zh,"serialize");a(fo,"serializeMessage");a(Uie,"streamToBuffer");a(wa,"getDeserializer");a(aq,"deserializerUnknownType");a(vie,"transformIterable")});var Jh={};Fe(Jh,{start:()=>qie});async function Hie(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&af(e);let s=new _o;try{e.responseHeaders=s;let i=e.url.slice(1),o=rO.getMatch(i);if(!o)return t(e);e.handlerPath=o.path;let c={url:o.relativeURL,async:!0},l=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 u=await Xe(e,()=>{if(n==="POST"||n==="PUT"||n==="PATCH"||n==="QUERY")try{e.data=wa(r["content-type"],!0)(e.body)}catch(p){throw new k_.ClientError(p,400)}switch(e.authorize=!0,n){case"GET":case"HEAD":return l.get(c,e);case"POST":return l.post(c,e.data,e);case"PUT":return l.put(c,e.data,e);case"DELETE":return l.delete(c,e);case"PATCH":return l.patch(c,e.data,e);case"OPTIONS":s.setIfNone("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return l.connect(c,null,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return l.query(c,e.data,e);case"COPY":return l.copy(c,r.destination,e);case"MOVE":return l.move(c,r.destination,e);case"BREW":throw new k_.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new k_.ServerError(`Method ${n} is not recognized`,501)}}),d=200,f;if(u==null)d=n==="GET"||n==="HEAD"?404:204,tO.lastModified&&e.lastModified&&s.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(f=e.lastModified){Bie[0]=f;let p=String.fromCharCode(34,(tr[0]&63)+62,(tr[0]>>6)+(tr[1]<<2&63)+62,(tr[1]>>4)+(tr[2]<<4&63)+62,(tr[2]>>2)+62,(tr[3]&63)+62,(tr[3]>>6)+(tr[4]<<2&63)+62,(tr[4]>>4)+(tr[5]<<4&63)+62,(tr[5]>>2)+62,(tr[6]&63)+62,(tr[6]>>6)+(tr[7]<<2&63)+62,34),S=r["if-none-match"];S&&p==S?(u?.onDone&&u.onDone(),d=304,u=void 0):s.setIfNone("ETag",p),tO.lastModified&&s.setIfNone("Last-Modified",new Date(f).toUTCString())}e.createdResource&&(d=201),e.newLocation&&s.setIfNone("Location",e.newLocation);let E={status:d,headers:s,body:void 0},h=u?.wasLoadedFromSource?.();return h!==void 0&&(E.wasCacheMiss=h,!h&&f&&s.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||f))/1e3))),u!==void 0&&(E.body=zh(u,e,E),n==="HEAD"&&(E.body=void 0)),E}catch(i){i.statusCode?i.statusCode===500?Ca.warn(i):Ca.info(i):Ca.error(i),i.statusCode===405&&(i.method&&(i.message+=` to handle HTTP method ${i.method.toUpperCase()||""}`),i.allow&&(i.allow.push("trace","head","options"),s.setIfNone("Allow",i.allow.map(c=>c.toUpperCase()).join(", "))));let o={status:i.statusCode||500,headers:s,body:void 0};return o.body=zh(i.contentType?i:i.toString(),e,o),o}}function qie(e){tO=e,!dq&&(dq=!0,rO=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return Hie(t,r)}),e.server.ws(async(t,r,n)=>{F_++;let s=new jn;fq||(fq=!0,Pu(u=>{F_>0&&u.push({metric:"ws-connections",connections:F_,byThread:!0})}));let i;t.on("error",u=>{i=!0,Ca.warn(u)});let o;t.on("message",a(function(d){o||(o=wa(r.headers.asObject["content-type"]));let f=o(d);s.push(f)},"message"));let c;t.on("close",()=>{F_--,Cn(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()}),await n;let l=r.url.slice(1),_=rO.getMatch(l);if(Cn(!!_,"connection","ws","connect"),!_)t.send(fo(`No resource was found to handle ${r.pathname}`,r));else{r.handlerPath=_.path,on(h=>({count:h.count,total:F_}),"connections",r.handlerPath,"connect","ws");let u={url:_.relativeURL,async:!0},d=_.Resource;c=(await Xe(r,()=>d.connect(u,s,r)))[Symbol.asyncIterator]();let E;for(;!(E=await c.next()).done;){let h=fo(E.value,r);t.send(h),on(h.length,"bytes-sent",r.handlerPath,"message","ws")}}t.close()}))}var Ca,k_,tr,Bie,tO,dq,rO,fq,F_,Eq=Ne(()=>{Vc();ui();Ca=B(q()),k_=B(te());cf();ql();Fo();Nh();tr=new Uint8Array(8),Bie=new Float64Array(tr.buffer,0,1),tO={};a(Hie,"http");F_=0;a(qie,"start")});var nO=T((qOe,hq)=>{var{recordAction:Xh,recordActionBinary:xie}=(ui(),re(Mu)),Gie=require("fastify-plugin"),Fie=200;hq.exports=Gie(function(e,t,r){e.addHook("onResponse",async(n,s)=>{s.getResponseTime()}),e.addHook("onSend",async(n,s,i)=>{let o=s.getResponseTime(),c=performance.now(),l=s.request.routeOptions,_,u,d;l.config?.isOperation?(_=n.body?.operation,u="operation"):(_=l.url,u="fastify-route",d=l.method),Xh(o,"duration",_,d,u),xie(s.raw.statusCode<400,"success",_,d,u);let f=Fie;i?.pipe?(i.on("data",h=>{f+=h.length}),i.on("end",()=>{Xh(performance.now()-c,"transfer",_,d,u),Xh(f,"bytes-sent",_,d,u)})):(f+=i?.length||0,Xh(f,"bytes-sent",_,d,u));let E=o.toFixed(3);s.header("Server-Timing",`db;dur=${E}`)}),r()},{name:"hdb-request-time"})});var aO=T((xOe,gq)=>{var nm=require("clone"),sm=rt(),kie=Y(),tm=C(),$ie=q(),Zh=require("fs"),sO=require("joi"),{string:rm}=sO.types(),{hdb_errors:Vie,handleHDBError:$_}=te(),{HDB_ERROR_MSGS:Yie,HTTP_STATUS_CODES:em}=Vie,{common_validators:Jc}=bs(),mq=1e9,pq=" is required",Kie=["insert","update","upsert"],iO={database:{presence:!1,format:Jc.schema_format,length:Jc.schema_length},schema:{presence:!1,format:Jc.schema_format,length:Jc.schema_length},table:{presence:!0,format:Jc.schema_format,length:Jc.schema_length},action:{inclusion:{within:Kie,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},Wie={schema:rm.required(),table:rm.required(),action:rm.valid("insert","update","upsert")},{AWS_ACCESS_KEY:Qie,AWS_SECRET:jie,AWS_BUCKET:zie,AWS_FILE_KEY:Jie,REGION:Xie}=tm.S3_BUCKET_AUTH_KEYS,Zie={s3:{presence:!0},[`s3.${Qie}`]:{presence:!0,type:"String"},[`s3.${jie}`]:{presence:!0,type:"String"},[`s3.${zie}`]:{presence:!0,type:"String"},[`s3.${Jie}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${Xie}`]:{presence:!0,type:"String"}},Sq=nm(iO);Sq.data.presence={message:pq};var Tq=nm(iO);Tq.file_path.presence={message:pq};var eoe=Object.assign(nm(iO),Zie),oO=nm(Wie);oO.csv_url=rm.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();oO.passthrough_headers=sO.object();function toe(e){let t=sm.validateObject(e,Sq);return im(e,t)}a(toe,"dataObject");function roe(e){let t=sm.validateBySchema(e,sO.object(oO));return im(e,t)}a(roe,"urlObject");function noe(e){let t=sm.validateObject(e,Tq);return im(e,t)}a(noe,"fileObject");function soe(e){let t=sm.validateObject(e,eoe);return im(e,t)}a(soe,"s3FileObject");function im(e,t){if(!t){let r=kie.checkGlobalSchemaTable(e.schema,e.table);if(r)return $_(new Error,r,em.BAD_REQUEST);if(e.operation===tm.OPERATIONS_ENUM.CSV_FILE_LOAD){try{Zh.accessSync(e.file_path,Zh.constants.R_OK|Zh.constants.F_OK)}catch(n){return n.code===tm.NODE_ERROR_CODES.ENOENT?$_(n,`No such file or directory ${n.path}`,em.BAD_REQUEST):n.code===tm.NODE_ERROR_CODES.EACCES?$_(n,`Permission denied ${n.path}`,em.BAD_REQUEST):$_(n)}try{let n=Zh.statSync(e.file_path).size;if(n>mq)return $_(new Error,Yie.MAX_FILE_SIZE_ERR(n,mq),em.BAD_REQUEST)}catch(n){$ie.error(n),console.error(n)}}}return t}a(im,"postValidateChecks");gq.exports={dataObject:toe,urlObject:roe,fileObject:noe,s3FileObject:soe}});var cO=T((FOe,Rq)=>{"use strict";var V_=q(),om=C();async function ioe(e,t,r,n=void 0){if(!e||typeof e!="function")throw new Error("Invalid function parameter");let s;try{return s=await e(t),r&&await r(t,s,n),t.operation===om.OPERATIONS_ENUM.INSERT||t.operation===om.OPERATIONS_ENUM.UPDATE||t.operation===om.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===om.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(V_.info(i.message),i):i.http_resp_msg?(V_.error(`Error calling operation: ${e.name}`),V_.error(i.http_resp_msg),i):(V_.error(`Error calling operation: ${e.name}`),V_.error(i),i)}}a(ioe,"callOperationFunctionAsAwait");Rq.exports={callOperationFunctionAsAwait:ioe}});var Oq=T(($Oe,Aq)=>{"use strict";var lO=class{static{a(this,"BulkLoadFileObject")}constructor(t,r,n,s,i,o,c=null){this.op=t,this.action=r,this.schema=n,this.table=s,this.file_path=i,this.file_type=o,this.role_perms=c}},uO=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};Aq.exports={BulkLoadFileObject:lO,BulkLoadDataObject:uO}});var bq=T((YOe,Nq)=>{"use strict";var _O=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};Nq.exports=_O});var pO=T((JOe,kq)=>{"use strict";var am=Nr(),lm=aO(),ooe=require("needle"),ls=C(),WOe=Ze(),Xc=Y(),{handleHDBError:ut,hdb_errors:Uq}=te(),{HTTP_STATUS_CODES:rr,HDB_ERROR_MSGS:Gt,CHECK_LOGS_WRAPPER:Da}=Uq,Zc=q(),dO=require("papaparse");Xc.promisifyPapaParse();var us=require("fs-extra"),aoe=require("path"),{chain:yq}=require("stream-chain"),Iq=require("stream-json/streamers/StreamArray"),wq=require("stream-json/utils/Batch"),Cq=require("stream-chain/utils/comp"),{finished:Lq}=require("stream"),coe=J(),vq=cO(),loe=KA(),{BulkLoadFileObject:EO,BulkLoadDataObject:uoe}=Oq(),hO=BA(),{verifyBulkLoadAttributePerms:Bq}=Vh(),QOe=bq(),jOe=Tt(),zOe=li(),{databases:_oe}=(Re(),re(xe)),{coerceType:doe}=(hE(),re(bg)),Dq="No records parsed from csv file.",La=`${coe.get("HDB_ROOT")}/tmp`,{schema_regex:foe}=bs(),Pq=1024*1024*2,Mq=5e3,Eoe={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};kq.exports={csvDataLoad:hoe,csvURLLoad:moe,csvFileLoad:poe,importFromS3:Soe};async function hoe(e,t){let r=lm.dataObject(e);if(r)throw ut(r,r.message,rr.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=xq(e.schema,e.table),i=dO.parse(e.data,{header:!0,skipEmptyLines:!0,transform:fO.bind(null,s),dynamicTyping:!1}),o=new hO;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&Bq(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 ut(new Error,c,rr.BAD_REQUEST,void 0,void 0,!0);let l=new uoe(e.action,e.schema,e.table,i.data);return n=await vq.callOperationFunctionAsAwait(Gq,l,null),n.message===Dq?Dq:Fq(n.records,n.number_written)}catch(s){throw Pa(s)}}a(hoe,"csvDataLoad");async function moe(e){let t=lm.urlObject(e);if(t)throw ut(t,t.message,rr.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${La}/${r}`;try{await Toe(e,r)}catch(s){throw Zc.error(Gt.DOWNLOAD_FILE_ERR(r)+" - "+s),ut(s,Da(Gt.DOWNLOAD_FILE_ERR(r)))}try{let s=new EO(this.job_operation_function.name,e.action,e.schema,e.table,n,ls.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await mO(s);return await cm(n),i}catch(s){throw await cm(n),Pa(s)}}a(moe,"csvURLLoad");async function poe(e){let t=lm.fileObject(e);if(t)throw ut(t,t.message,rr.BAD_REQUEST,void 0,void 0,!0);let r=new EO(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,ls.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await mO(r)}catch(n){throw Pa(n)}}a(poe,"csvFileLoad");async function Soe(e){let t=lm.s3FileObject(e);if(t)throw ut(t,t.message,rr.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=aoe.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${La}/${s}`;let i=new EO(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user.role.permission);await goe(s,e);let o=await mO(i);return await cm(r),o}catch(n){throw await cm(r),Pa(n)}}a(Soe,"importFromS3");async function Toe(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await ooe("get",e.csv_url,n)}catch(n){let s=`Error downloading CSV file from ${e.csv_url}, status code: ${n.statusCode}. Check the log for more information.`;throw ut(n,s,n.statusCode,ls.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}Aoe(r,e.csv_url),await Roe(t,r.raw)}a(Toe,"downloadCSVFile");async function goe(e,t){try{let r=`${La}/${e}`;await us.mkdirp(La),await us.writeFile(`${La}/${e}`,"",{flag:"a+"});let n=await us.createWriteStream(r),s=await loe.getFileStreamFromS3(t);await new Promise((i,o)=>{s.on("error",function(c){o(c)}),s.pipe(n).on("error",function(c){o(c)}).on("close",function(){Zc.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw Zc.error(Gt.S3_DOWNLOAD_ERR+" - "+r),ut(r,Da(Gt.S3_DOWNLOAD_ERR))}}a(goe,"downloadFileFromS3");async function Roe(e,t){try{await us.mkdirp(La),await us.writeFile(`${La}/${e}`,t)}catch(r){throw Zc.error(Gt.WRITE_TEMP_FILE_ERR),ut(r,Da(Gt.DEFAULT_BULK_LOAD_ERR))}}a(Roe,"writeFileToTempFolder");async function cm(e){if(e)try{await us.access(e),await us.unlink(e)}catch{Zc.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(cm,"deleteTempFile");function Aoe(e,t){if(e.statusCode!==Uq.HTTP_STATUS_CODES.OK)throw ut(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,rr.BAD_REQUEST);if(!Eoe[e.headers["content-type"]])throw ut(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,rr.BAD_REQUEST);if(!e.raw)throw ut(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,rr.BAD_REQUEST)}a(Aoe,"validateURLResponse");async function mO(e){try{let t;switch(e.file_type){case ls.VALID_S3_FILE_TYPES.CSV:t=await Ooe(e);break;case ls.VALID_S3_FILE_TYPES.JSON:t=await Noe(e);break;default:throw ut(new Error,Gt.DEFAULT_BULK_LOAD_ERR,rr.BAD_REQUEST,ls.LOG_LEVELS.ERROR,Gt.INVALID_FILE_EXT_ERR(e))}return Fq(t.records,t.number_written)}catch(t){throw Pa(t)}}a(mO,"fileLoad");async function Hq(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;s&&s.pause();let o={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await am.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&Bq(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let l=ut(c);r(l)}}a(Hq,"validateChunk");async function qq(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;Xc.autoCastJSONDeep(i),s&&s.pause();let o=n.meta?n.meta.fields:null;if(o)i.forEach(c=>{!Xc.isEmpty(c)&&!Xc.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(l=>{Object.keys(l).forEach(_=>c.add(_))}),o=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},l=await vq.callOperationFunctionAsAwait(Gq,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=ut(c,Da(Gt.INSERT_CSV_ERR),rr.INTERNAL_SERVER_ERROR,ls.LOG_LEVELS.ERROR,Gt.INSERT_CSV_ERR+" - "+c);r(l)}}a(qq,"insertChunk");async function Ooe(e){let t={records:0,number_written:0},r=xq(e.schema,e.table);try{let n=new hO,s=us.createReadStream(e.file_path,{highWaterMark:Pq});s.setEncoding("utf8"),await dO.parsePromise(s,Hq.bind(null,e,n),fO.bind(null,r));let i=n.getPermsResponse();if(i)throw ut(new Error,i,rr.BAD_REQUEST);return s=us.createReadStream(e.file_path,{highWaterMark:Pq}),s.setEncoding("utf8"),await dO.parsePromise(s,qq.bind(null,e,t),fO.bind(null,r)),s.destroy(),t}catch(n){throw ut(n,Da(Gt.PAPA_PARSE_ERR),rr.INTERNAL_SERVER_ERROR,ls.LOG_LEVELS.ERROR,Gt.PAPA_PARSE_ERR+n)}}a(Ooe,"callPapaParse");function xq(e,t){let r=_oe[e][t].attributes,n=new Map;for(let s of r)s.type&&n.set(s.name,i=>doe(i,s));return n}a(xq,"createTransformMap");function fO(e,t,r){let n=e.get(r);return n?n(t):Xc.autoCast(t)}a(fO,"typeFunction");async function Noe(e){let t={records:0,number_written:0},r=a(n=>{throw n},"throwErr");try{let n=new hO,s=yq([us.createReadStream(e.file_path,{encoding:"utf-8"}),Iq.withParser(),c=>c.value,new wq({batchSize:Mq}),Cq(async c=>{await Hq(e,n,r,c)})]);await new Promise((c,l)=>{Lq(s,_=>{_?l(_):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw ut(new Error,i,rr.BAD_REQUEST);let o=yq([us.createReadStream(e.file_path,{encoding:"utf-8"}),Iq.withParser(),c=>c.value,new wq({batchSize:Mq}),Cq(async c=>{await qq(e,t,r,c)})]);return await new Promise((c,l)=>{Lq(o,_=>{_?l(_):c()}),o.resume()}),t}catch(n){throw ut(n,Da(Gt.INSERT_JSON_ERR),rr.INTERNAL_SERVER_ERROR,ls.LOG_LEVELS.ERROR,Gt.INSERT_JSON_ERR+n)}}a(Noe,"insertJson");async function Gq(e){let t={};try{e.data&&e.data.length>0&&boe(e.data[0])?t=await yoe(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",Zc.info(t.message))}catch(r){throw Pa(r)}return t}a(Gq,"callBulkFileLoad");function boe(e){let t=Object.keys(e);for(let r of t)if(!foe.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(boe,"validateColumnNames");async function yoe(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=am.insert;break;case"update":i=am.update;break;case"upsert":i=am.upsert;break;default:throw ut(new Error,Gt.INVALID_ACTION_PARAM_ERR(n),rr.BAD_REQUEST,ls.LOG_LEVELS.ERROR,Gt.INVALID_ACTION_PARAM_ERR(n))}try{let o=await i(s),c;switch(n){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 u=global.hdb_schema[t][r].hash_attribute,d=e.length;for(;d--;)o.skipped_hashes.indexOf(e[d][u])>=0&&e.splice(d,1)}let l=Xc.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:o.new_attributes}}catch(o){throw Pa(o)}}a(yoe,"bulkFileLoad");function Fq(e,t){return`successfully loaded ${t} of ${e} records`}a(Fq,"buildResponseMsg");function Pa(e){return ut(e,Da(Gt.DEFAULT_BULK_LOAD_ERR),rr.INTERNAL_SERVER_ERROR,ls.LOG_LEVELS.ERROR,Gt.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(Pa,"buildTopLevelErrMsg")});var Vq=T((ZOe,$q)=>{"use strict";var SO=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};$q.exports=SO});var Wq=T((tNe,Kq)=>{"use strict";var Ioe=C(),Yq=require("moment"),woe=require("uuid").v4,TO=class{static{a(this,"JobObject")}constructor(){this.id=woe(),this.type=void 0,this.start_datetime=Yq().valueOf(),this.created_datetime=Yq().valueOf(),this.end_datetime=void 0,this.status=Ioe.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};Kq.exports=TO});var gO=T((nNe,Zq)=>{"use strict";var Coe=require("uuid").v4,zq=Nr(),Jq=Or(),Loe=es(),Doe=Ec(),Poe=Vq(),_t=C(),Moe=Wq(),Uoe=VE(),xn=q(),voe=nu(),el=Y(),{promisify:Boe}=require("util"),Ma=require("moment"),Hoe=Kh(),um=aO(),Qq=FT(),{deleteTransactionLogsBeforeValidator:qoe}=DA(),{handleHDBError:xoe,hdb_errors:Goe}=te(),{HTTP_STATUS_CODES:Foe}=Goe,jq=Jq.searchByValue,koe=Jq.searchByHash,$oe=zq.insert,Voe=Boe(Hoe.evaluateSQL),Yoe=zq.update;Zq.exports={addJob:Qoe,updateJob:zoe,handleGetJob:Koe,handleGetJobsByStartDate:Woe,getJobById:Xq};async function Koe(e){try{let t=await Xq(e.id);return el.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 xn.error("There was an error getting job",t),new Error(r)}}a(Koe,"handleGetJob");async function Woe(e){try{let t=await joe(e);if(xn.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=Ma(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=Ma(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 xn.error(r),new Error(r)}}a(Woe,"handleGetJobsByStartDate");async function Qoe(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||el.isEmptyOrZeroLength(e.operation)){let u="job parameter is invalid";return xn.info(u),t.error=u,t}if(!_t.JOB_TYPE_ENUM[e.operation])return xn.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case _t.OPERATIONS_ENUM.CSV_FILE_LOAD:n=um.fileObject(e);break;case _t.OPERATIONS_ENUM.CSV_URL_LOAD:n=um.urlObject(e);break;case _t.OPERATIONS_ENUM.CSV_DATA_LOAD:n=um.dataObject(e);break;case _t.OPERATIONS_ENUM.IMPORT_FROM_S3:n=um.s3FileObject(e);break;case _t.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case _t.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=Qq(e,"date");break;case _t.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=Qq(e,"timestamp");break;case _t.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=qoe(e);break;default:break}if(n)throw xoe(n,n.message,Foe.BAD_REQUEST,void 0,void 0,!0);let s=new Moe;s.type=e.operation===_t.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?_t.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user.username;let i=new Loe(_t.SYSTEM_SCHEMA_NAME,_t.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),o;try{o=Array.from(await jq(i))}catch(u){let d=`There was an error inserting a new job: ${u}`;return xn.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){s.id=Coe();try{o=await jq(i)}catch(u){let d=`There was an error inserting a new job: ${u}`;return xn.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return xn.error("Error creating a job, could not find a unique job id."),t}s.request=e;let l=new voe(_t.SYSTEM_SCHEMA_NAME,_t.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),_;try{_=await $oe(l)}catch(u){return xn.error(`There was an error inserting a job for job type: ${e.operation} -- ${u}`),t.success=!1,t}if(_.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${s.operation} and id ${s.id}`;else{let u=`Created a job with type ${s.type} and id ${s.id}`;t.message=u,t.createdJob=s,t.success=!0,xn.trace(u)}return t}a(Qoe,"addJob");async function joe(e){let t=Ma(e.from_date,Ma.ISO_8601),r=Ma(e.to_date,Ma.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 n=`select * from system.hdb_job where start_datetime > '${t.valueOf()}' and start_datetime < '${r.valueOf()}'`,s=new Poe(n,e.hdb_user);try{return await Voe(s)}catch(i){throw xn.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(joe,"getJobsInDateRange");async function Xq(e){if(el.isEmptyOrZeroLength(e))return el.errorizeMessage("Invalid job ID specified.");let t=new Doe(_t.SYSTEM_SCHEMA_NAME,_t.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await koe(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return xn.error(n),el.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(Xq,"getJobById");async function zoe(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(el.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===_t.JOB_STATUS_ENUM.COMPLETE||e.status===_t.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=Ma().valueOf());let t=new Uoe(_t.SYSTEM_SCHEMA_NAME,_t.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await Yoe(t),r}a(zoe,"updateJob")});var ix=T((iNe,sx)=>{"use strict";var ex=Y(),xr=C(),Joe=require("moment"),_m=pO(),dm=q(),tx=gO(),rx=Wh(),nx=ea(),Xoe=et(),Zoe=Gh(),RO=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function eae(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(ex.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(ex.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case xr.JOB_TYPE_ENUM.csv_file_load:await Ai(e,_m.csvFileLoad);break;case xr.JOB_TYPE_ENUM.csv_url_load:await Ai(e,_m.csvURLLoad);break;case xr.JOB_TYPE_ENUM.csv_data_load:await Ai(e,_m.csvDataLoad);break;case xr.JOB_TYPE_ENUM.import_from_s3:await Ai(e,_m.importFromS3);break;case xr.JOB_TYPE_ENUM.empty_trash:break;case xr.JOB_TYPE_ENUM.export_local:await Ai(e,rx.export_local);break;case xr.JOB_TYPE_ENUM.export_to_s3:await Ai(e,rx.export_to_s3);break;case xr.JOB_TYPE_ENUM.delete_files_before:case xr.JOB_TYPE_ENUM.delete_records_before:await Ai(e,nx.deleteFilesBefore);break;case xr.JOB_TYPE_ENUM.delete_audit_logs_before:await Ai(e,nx.deleteAuditLogsBefore);break;case xr.JOB_TYPE_ENUM.delete_transaction_logs_before:await Ai(e,Zoe.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(eae,"parseMessage");async function Ai(e,t){try{e.job.status=xr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=Joe().valueOf(),await tx.updateJob(e.job),await tae(e.job.id)}catch(r){let n=r.message!==void 0?r.message:r;typeof n=="string"?(n=`There was an error running ${t.name} job with id ${e.job.id} - ${n}`,r.message=n):dm.error(`There was an error running ${t.name} job with id ${e.job.id}`),dm.error(n),e.job.message=n,e.job.status=xr.JOB_STATUS_ENUM.ERROR;try{await tx.updateJob(e.job)}catch(s){throw dm.error(`Unable to update job with id ${e.job.id}`),s}throw r}}a(Ai,"runJob");async function tae(e){dm.trace("launching job thread:",e),Xoe.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[xr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(tae,"launchJobThread");sx.exports={parseMessage:eae,RunnerMessage:RO}});var ax=T((aNe,ox)=>{"use strict";var AO=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};ox.exports=AO});var Nx=T((lNe,wO)=>{"use strict";var mm=Or(),bO=Kh(),fm=pO(),Oi=HE(),Em=Qi(),K_=ea(),rae=iR(),Y_=yr(),hm=FE(),nr=Bh(),Ft=q(),nae=mR(),sae=u_(),cx=JR(),iae=th(),oae=nh(),aae=XR(),cae=oh(),lae=ch(),OO=uh(),lx=Wh(),uae=Vh(),yO=gO(),H=C(),{hdb_errors:Q_,handleHDBError:W_}=te(),{HTTP_STATUS_CODES:ux}=Q_,NO=dh(),_x=Aa(),gx=require("util"),tl=Nr(),_ae=In(),dae=di(),dx=ix(),fx=o_(),Ex=(wh(),re(y_)),hx=St(),mx=Gh(),px=Mh(),{setServerUtilities:fae}=(hE(),re(bg)),{CONTEXT:Eae}=(zn(),re(aS)),{_assignPackageExport:hae}=require("../index"),{transformReq:mae}=Y(),{server:pae}=(hr(),re(vo)),Sae=cO(),Sx=mm.searchByHash,Tae=mm.searchByValue,gae=gx.promisify(mm.search),Rae=gx.promisify(bO.evaluateSQL),Aae={[H.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[H.OPERATIONS_ENUM.CREATE_TABLE]:!0,[H.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[H.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[H.OPERATIONS_ENUM.DROP_TABLE]:!0,[H.OPERATIONS_ENUM.DROP_SCHEMA]:!0},$=ax();async function Rx(e,t){try{if(e.body.operation!=="read_log"&&(Ft.log_level===H.LOG_LEVELS.INFO||Ft.log_level===H.LOG_LEVELS.DEBUG||Ft.log_level===H.LOG_LEVELS.TRACE)){let{hdb_user:n,hdb_auth_header:s,password:i,...o}=e.body;Ft.info(o)}}catch(n){Ft.error(n)}let r=await Sae.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return Aae[e.body.operation]&&_ae.setSchemaDataToGlobal(n=>{n&&Ft.error(n)}),r}a(Rx,"processLocalTransaction");var Tx=Nae();wO.exports={chooseOperation:Ax,getOperationFunction:Ox,operation:IO,processLocalTransaction:Rx};fae(wO.exports);pae.operation=IO;function Ax(e){let t;try{t=Ox(e)}catch(s){throw Ft.error(`Error when selecting operation function - ${s}`),s}let{operation_function:r,job_operation_function:n}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let s=e.operation==="sql"?e.sql:e.search_operation.sql,i=bO.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let o=bO.checkASTPermissions(e,i);if(o)throw Ft.error(`${ux.FORBIDDEN} from operation ${e.operation}`),Ft.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),W_(new Error,o,Q_.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==H.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==H.OPERATIONS_ENUM.LOGIN&&e.operation!==H.OPERATIONS_ENUM.LOGOUT){let s=n===void 0?r:n,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=uae.verifyPerms(i,s);if(o)throw Ft.error(`${ux.FORBIDDEN} from operation ${e.operation}`),Ft.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),W_(new Error,o,Q_.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw W_(s,"There was an error when trying to choose an operation path")}return r}a(Ax,"chooseOperation");function Ox(e){if(Ft.trace(`getOperationFunction with operation: ${e.operation}`),Tx.has(e.operation))return Tx.get(e.operation);throw W_(new Error,Q_.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),Q_.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(Ox,"getOperationFunction");hae("operation",IO);function IO(e,t){e.hdb_user=this[Eae]?.user,e.bypass_auth=!t;let r=Ax(e);return Rx({body:e},r)}a(IO,"operation");async function Oae(e){Ft.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),n=r[0],s=r[1];for(let i of t.transactions)try{i.schema=n,i.table=s,i[H.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case H.OPERATIONS_ENUM.INSERT:o=await tl.insert(i);break;case H.OPERATIONS_ENUM.UPDATE:o=await tl.update(i);break;case H.OPERATIONS_ENUM.UPSERT:o=await tl.upsert(i);break;case H.OPERATIONS_ENUM.DELETE:o=await K_.deleteRecord(i);break;default:Ft.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){Ft.info("Invalid operation in transaction"),Ft.error(o)}}a(Oae,"catchup");async function Gs(e){mae(e);let t,r;try{r=await yO.addJob(e),t=r.createdJob,Ft.info("addJob result",r);let n=new dx.RunnerMessage(t,e);return await dx.parseMessage(n),{message:`Starting job with id ${t.id}`,job_id:t.id}}catch(n){let s=`There was an error executing job: ${n.http_resp_msg?n.http_resp_msg:n}`;throw Ft.error(s),W_(n,s)}}a(Gs,"executeJob");function Nae(){let e=new Map;return e.set(H.OPERATIONS_ENUM.INSERT,new $(tl.insert)),e.set(H.OPERATIONS_ENUM.UPDATE,new $(tl.update)),e.set(H.OPERATIONS_ENUM.UPSERT,new $(tl.upsert)),e.set(H.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new $(mm.searchByConditions)),e.set(H.OPERATIONS_ENUM.SEARCH_BY_HASH,new $(Sx)),e.set(H.OPERATIONS_ENUM.SEARCH_BY_ID,new $(Sx)),e.set(H.OPERATIONS_ENUM.SEARCH_BY_VALUE,new $(Tae)),e.set(H.OPERATIONS_ENUM.SEARCH,new $(gae)),e.set(H.OPERATIONS_ENUM.SQL,new $(Rae)),e.set(H.OPERATIONS_ENUM.CSV_DATA_LOAD,new $(Gs,fm.csvDataLoad)),e.set(H.OPERATIONS_ENUM.CSV_FILE_LOAD,new $(Gs,fm.csvFileLoad)),e.set(H.OPERATIONS_ENUM.CSV_URL_LOAD,new $(Gs,fm.csvURLLoad)),e.set(H.OPERATIONS_ENUM.IMPORT_FROM_S3,new $(Gs,fm.importFromS3)),e.set(H.OPERATIONS_ENUM.CREATE_SCHEMA,new $(Oi.createSchema)),e.set(H.OPERATIONS_ENUM.CREATE_DATABASE,new $(Oi.createSchema)),e.set(H.OPERATIONS_ENUM.CREATE_TABLE,new $(Oi.createTable)),e.set(H.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new $(Oi.createAttribute)),e.set(H.OPERATIONS_ENUM.DROP_SCHEMA,new $(Oi.dropSchema)),e.set(H.OPERATIONS_ENUM.DROP_DATABASE,new $(Oi.dropSchema)),e.set(H.OPERATIONS_ENUM.DROP_TABLE,new $(Oi.dropTable)),e.set(H.OPERATIONS_ENUM.DROP_ATTRIBUTE,new $(Oi.dropAttribute)),e.set(H.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new $(Em.describeSchema)),e.set(H.OPERATIONS_ENUM.DESCRIBE_DATABASE,new $(Em.describeSchema)),e.set(H.OPERATIONS_ENUM.DESCRIBE_TABLE,new $(Em.describeTable)),e.set(H.OPERATIONS_ENUM.DESCRIBE_ALL,new $(Em.describeAll)),e.set(H.OPERATIONS_ENUM.DELETE,new $(K_.deleteRecord)),e.set(H.OPERATIONS_ENUM.ADD_USER,new $(Y_.addUser)),e.set(H.OPERATIONS_ENUM.ALTER_USER,new $(Y_.alterUser)),e.set(H.OPERATIONS_ENUM.DROP_USER,new $(Y_.dropUser)),e.set(H.OPERATIONS_ENUM.LIST_USERS,new $(Y_.listUsersExternal)),e.set(H.OPERATIONS_ENUM.LIST_ROLES,new $(hm.listRoles)),e.set(H.OPERATIONS_ENUM.ADD_ROLE,new $(hm.addRole)),e.set(H.OPERATIONS_ENUM.ALTER_ROLE,new $(hm.alterRole)),e.set(H.OPERATIONS_ENUM.DROP_ROLE,new $(hm.dropRole)),e.set(H.OPERATIONS_ENUM.USER_INFO,new $(Y_.userInfo)),e.set(H.OPERATIONS_ENUM.READ_LOG,new $(nae)),e.set(H.OPERATIONS_ENUM.ADD_NODE,new $(sae)),e.set(H.OPERATIONS_ENUM.UPDATE_NODE,new $(cx)),e.set(H.OPERATIONS_ENUM.SET_NODE_REPLICATION,new $(cx)),e.set(H.OPERATIONS_ENUM.REMOVE_NODE,new $(iae)),e.set(H.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new $(oae)),e.set(H.OPERATIONS_ENUM.PURGE_STREAM,new $(aae)),e.set(H.OPERATIONS_ENUM.SET_CONFIGURATION,new $(hx.setConfiguration)),e.set(H.OPERATIONS_ENUM.CLUSTER_STATUS,new $(cae.clusterStatus)),e.set(H.OPERATIONS_ENUM.CLUSTER_NETWORK,new $(lae)),e.set(H.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new $(OO.setRoutes)),e.set(H.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new $(OO.getRoutes)),e.set(H.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new $(OO.deleteRoutes)),e.set(H.OPERATIONS_ENUM.EXPORT_TO_S3,new $(Gs,lx.export_to_s3)),e.set(H.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new $(Gs,K_.deleteFilesBefore)),e.set(H.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new $(Gs,K_.deleteFilesBefore)),e.set(H.OPERATIONS_ENUM.EXPORT_LOCAL,new $(Gs,lx.export_local)),e.set(H.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new $(yO.handleGetJobsByStartDate)),e.set(H.OPERATIONS_ENUM.GET_JOB,new $(yO.handleGetJob)),e.set(H.OPERATIONS_ENUM.GET_FINGERPRINT,new $(NO.getFingerprint)),e.set(H.OPERATIONS_ENUM.SET_LICENSE,new $(NO.setLicense)),e.set(H.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new $(NO.getRegistrationInfo)),e.set(H.OPERATIONS_ENUM.RESTART,new $(_x.restart)),e.set(H.OPERATIONS_ENUM.RESTART_SERVICE,new $(_x.restartService)),e.set(H.OPERATIONS_ENUM.CATCHUP,new $(Oae)),e.set(H.OPERATIONS_ENUM.SYSTEM_INFORMATION,new $(dae.systemInformation)),e.set(H.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new $(Gs,K_.deleteAuditLogsBefore)),e.set(H.OPERATIONS_ENUM.READ_AUDIT_LOG,new $(rae)),e.set(H.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new $(fx.createTokens)),e.set(H.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new $(fx.refreshOperationToken)),e.set(H.OPERATIONS_ENUM.LOGIN,new $(Ex.login)),e.set(H.OPERATIONS_ENUM.LOGOUT,new $(Ex.logout)),e.set(H.OPERATIONS_ENUM.GET_CONFIGURATION,new $(hx.getConfiguration)),e.set(H.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new $(nr.customFunctionsStatus)),e.set(H.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new $(nr.getCustomFunctions)),e.set(H.OPERATIONS_ENUM.GET_COMPONENT_FILE,new $(nr.getComponentFile)),e.set(H.OPERATIONS_ENUM.GET_COMPONENTS,new $(nr.getComponents)),e.set(H.OPERATIONS_ENUM.SET_COMPONENT_FILE,new $(nr.setComponentFile)),e.set(H.OPERATIONS_ENUM.DROP_COMPONENT,new $(nr.dropComponent)),e.set(H.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new $(nr.getCustomFunction)),e.set(H.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new $(nr.setCustomFunction)),e.set(H.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new $(nr.dropCustomFunction)),e.set(H.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new $(nr.addComponent)),e.set(H.OPERATIONS_ENUM.ADD_COMPONENT,new $(nr.addComponent)),e.set(H.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new $(nr.dropCustomFunctionProject)),e.set(H.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new $(nr.packageComponent)),e.set(H.OPERATIONS_ENUM.PACKAGE_COMPONENT,new $(nr.packageComponent)),e.set(H.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new $(nr.deployComponent)),e.set(H.OPERATIONS_ENUM.DEPLOY_COMPONENT,new $(nr.deployComponent)),e.set(H.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new $(mx.readTransactionLog)),e.set(H.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new $(Gs,mx.deleteTransactionLogsBefore)),e.set(H.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new $(px.installModules)),e.set(H.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new $(px.auditModules)),e.set(H.OPERATIONS_ENUM.GET_BACKUP,new $(Oi.getBackup)),e}a(Nae,"initializeOperationFunctionMap")});var Sm=T((_Ne,Ix)=>{"use strict";var CO=C(),bae=Y(),j_=q(),{handleHDBError:LO,hdb_errors:pm}=te(),{isMainThread:yae}=require("worker_threads"),{Readable:Iae}=require("stream"),bx=require("os"),wae=require("util"),Cae=yR(),Lae=wae.promisify(Cae.authorize),yx=Nx(),{createGzip:Dae,constants:Pae}=require("zlib");function Mae(e){let t=`Found an uncaught exception with message: ${e.message}. ${bx.EOL}Stack: ${e.stack} ${bx.EOL}Terminating ${yae?"HDB":"thread"}.`;console.error(t),j_.fatal(t),process.exit(1)}a(Mae,"handleServerUncaughtException");function Uae(e,t,r){if(j_[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 n=e.statusCode?e.statusCode:pm.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(n).send({error:e}):r.code(n).send(e.message?{error:e.message}:e)}a(Uae,"serverErrorHandler");function vae(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=LO(new Error,"Invalid JSON.",pm.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(bae.isEmpty(e.body.operation)){let n=LO(new Error,"Request body must include an 'operation' property.",pm.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}a(vae,"reqBodyValidationHandler");function Bae(e,t,r){let n;e.body.operation!==CO.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==CO.OPERATIONS_ENUM.LOGIN&&e.body.operation!==CO.OPERATIONS_ENUM.LOGOUT?Lae(e,t).then(s=>{n=s,e.body.hdb_user=n,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(s=>{j_.warn(s),j_.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${s.stack}"`);let i=typeof s=="string"?{error:s}:{error:s.message};r(LO(s,i,pm.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(Bae,"authHandler");async function Hae(e,t,r=!1){let n;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),n=yx.chooseOperation(e.body);let s=await yx.processLocalTransaction(e,n);if(s instanceof Iae&&s.headers){for(let[i,o]of s.headers)t.header(i,o);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),s=s.pipe(Dae({level:Pae.Z_BEST_SPEED})))}return s}catch(s){throw j_.error(s),s}}a(Hae,"handlePostRequest");Ix.exports={authHandler:Bae,handlePostRequest:Hae,handleServerUncaughtException:Mae,serverErrorHandler:Uae,reqBodyValidationHandler:vae}});var Dx=T((fNe,Lx)=>{"use strict";var qae=require("fastify-plugin"),{handlePostRequest:wx,authHandler:xae,reqBodyValidationHandler:Gae}=Sm();async function Fae(e){e.decorate("hdbCore",{preValidation:[Gae,xae],request:t=>Cx(wx(t,response)),requestWithoutAuthentication:(t,r)=>Cx(wx(t,r,!0))})}a(Fae,"hdbCore");async function Cx(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(Cx,"convertAsyncIterators");Lx.exports=qae(Fae)});var Ux=T((mNe,Mx)=>{"use strict";var hNe=require("fs"),DO=J();DO.initSync();var{CONFIG_PARAMS:Px}=C(),kae=1024*1024*1024;function $ae(e){let t=DO.get(Px.HTTP_TIMEOUT),r=DO.get(Px.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:kae,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,https:e}}a($ae,"getServerOptions");Mx.exports=$ae});var Hx=T((SNe,Bx)=>{"use strict";var PO=J();PO.initSync();var{CONFIG_PARAMS:vx}=C();function Vae(){let e=PO.get(vx.HTTP_CORSACCESSLIST),t=PO.get(vx.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=(n,s)=>s(null,e.indexOf(n)!==-1))),r}a(Vae,"getCORSOptions");Bx.exports=Vae});var Gx=T((gNe,xx)=>{"use strict";var qx=J();qx.initSync();var Yae=C();function Kae(){return qx.get(Yae.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(Kae,"getHeaderTimeoutConfig");xx.exports=Kae});var UO={};Fe(UO,{customFunctionsServer:()=>jae,ready:()=>tG,start:()=>Qae});function Qae(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){Ni||(Ni=eG(t),Et.http((await Ni).server));let o=await Ni,c=(0,MO.dirname)(s),l=(0,MO.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!Fx.has(c)){Fx.add(c);try{o.register(Jae(c,l))}catch(_){if(_.message==="Root plugin has already booted")Ve.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw _}}},ready:tG}}async function jae(){try{Ve.info("In Custom Functions Fastify server"+process.cwd()),Ve.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Ve.debug(`Custom Functions server process ${process.pid} starting up.`),await zae();let e=Wx.get(Qx.CONFIG_PARAMS.HTTP_SECUREPORT)>0,t;try{t=Ni=await eG(e)}catch(r){throw Ve.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw Ve.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){Ve.error(`Custom Functions ${process.pid} Error: ${e}`),Ve.error(e),process.exit(1)}}async function zae(){try{Ve.info("Custom Functions starting configuration."),await jx.setUsersToGlobal(),Ve.info("Custom Functions completed configuration.")}catch(e){Ve.error(e)}}function Jae(e,t){return async function(r){try{Ve.info("Custom Functions starting buildRoutes"),Ve.trace("Loading fastify routes folder "+e),(0,kx.existsSync)(e)&&r.register(Kx.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:Ve.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,o)=>{s?.message?Ve.error(s.message):s&&Ve.error(s),o()})}catch(n){Ve.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function eG(e){Ve.info("Custom Functions starting buildServer.");let t=(0,zx.default)(e),r=(0,$x.default)(t);r.server.headersTimeout=(0,Xx.default)(),r.setErrorHandler(Zx.serverErrorHandler);let n=(0,Jx.default)();return n&&r.register(Vx.default,n),r.register(function(s,i,o){s.setNotFoundHandler(function(c,l){r.server.emit("unhandled",c.raw,l.raw)}),o()}),r.register(Yx.default),await r.register(Wae),await r.after(),eO(r),Ve.info("Custom Functions completed buildServer."),r}function tG(){if(Ni)return Ni.then?Ni.then(e=>e.ready()):Ni.ready()}var MO,kx,$x,Vx,Yx,Kx,Wx,Qx,Ve,Wae,jx,zx,Jx,Xx,Zx,Ni,Fx,rG=Ne(()=>{MO=require("path"),kx=require("fs"),$x=B(require("fastify")),Vx=B(require("@fastify/cors")),Yx=B(nO()),Kx=B(require("@fastify/autoload")),Wx=B(J()),Qx=B(C()),Ve=B(q()),Wae=B(Dx()),jx=B(yr()),zx=B(Ux()),Jx=B(Hx()),Xx=B(Gx()),Zx=B(Sm());Vc();hr();Fx=new Set;a(Qae,"start");a(jae,"customFunctionsServer");a(zae,"setUp");a(Jae,"buildRouteFolder");a(eG,"buildServer");a(tG,"ready")});var vO={};Fe(vO,{start:()=>Xae});function Xae(e){return{handleDirectory(t,r){if(t==="/"){let n=(0,aG.default)(r,e);return e.server.http(async(s,i)=>{if(!s.isWebSocket)return new Promise(o=>n(s._nodeRequest,s._nodeResponse,()=>{o(i(s))}))}),!0}},handleFile(t,r,n){sG||(sG=!0,e.server.http(async(s,i)=>{if(!s.isWebSocket){let o=nG.get(s.pathname);if(o)return{handlesHeaders:!0,body:(0,iG.default)(s,(0,oG.realpathSync)(o))}}return i(s)},{runFirst:!0})),nG.set(r,n)}}}var iG,oG,aG,nG,sG,cG=Ne(()=>{iG=B(require("send")),oG=require("fs"),aG=B(require("serve-static")),nG=new Map;a(Xae,"start")});var xO={};Fe(xO,{Request:()=>BO,createReuseportFd:()=>Tm});var lG,BO,HO,qO,Tm,gm=Ne(()=>{lG=require("os"),BO=class{static{a(this,"Request")}#e;constructor(t,r){this.method=t.method;let n=t.url;this._nodeRequest=t,this._nodeResponse=r,this.url=n,this.headers=new qO(t.headers)}get absoluteURL(){return this.protocol+"://"+this.host+this.url}get pathname(){let t=this.url.indexOf("?");return t>-1?this.url.slice(0,t):this.url}set pathname(t){let r=this.url.indexOf("?");r>-1?this.url=t+this.url.slice(r):this.url=t}get protocol(){return this._nodeRequest.socket.encrypted?"https":"http"}get ip(){return this._nodeRequest.socket.remoteAddress}get body(){return this.#e||(this.#e=new HO(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}},HO=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}},qO=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,n]of this)t(n,r,this)}};(0,lG.platform)()!="win32"&&(Tm=require("node-unix-socket").createReuseportFd)});var fG=T((PNe,dG)=>{"use strict";var Zae=require("cluster"),Ua=J();Ua.initSync();var _G=C(),INe=require("util"),bi=q(),wNe=require("fs"),ece=require("fastify"),CNe=Mo(),tce=require("@fastify/cors"),rce=require("@fastify/compress"),nce=require("@fastify/static"),sce=nO(),ice=require("path"),{PACKAGE_ROOT:oce}=C(),ace=In(),cce=Y(),lce=yr(),uce=sa(),{server:_ce}=(hr(),re(vo)),{node_request_key:LNe}=(gm(),re(xO)),{authHandler:dce,handlePostRequest:fce,serverErrorHandler:Ece,reqBodyValidationHandler:hce}=Sm(),DNe=require("net"),{registerContentHandlers:mce}=(Vc(),re(_q)),pce=6e4,Sce=1024*1024*1024,Tce="TRUE",{CONFIG_PARAMS:z_}=_G,rl;dG.exports={hdbServer:uG,start:uG};async function uG(e){try{bi.info("In Fastify server"+process.cwd()),bi.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),bi.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=Zae.isMaster,await gce();let t=e.securePort>0;rl=Rce(t),await rl.ready(),e||(e={}),e.isOperationsServer=!0;try{_ce.http(rl.server,e),rl.server.closeIdleConnections||await rl.listen({port:0,host:"::"})}catch(r){throw rl.close(),bi.error(r),bi.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),bi.fatal(t),process.exit(1)}}a(uG,"operationsServer");async function gce(){bi.trace("Configuring HarperDB process."),ace.setSchemaDataToGlobal(),await lce.setUsersToGlobal(),await uce.getLicense()}a(gce,"setUp");function Rce(e){bi.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=Ace(e),r=ece(t);r.server.headersTimeout=Nce(),r.setErrorHandler(Ece);let n=Oce();n&&r.register(tce,n),r.register(function(i,o,c){i.setNotFoundHandler(function(l,_){r.server.emit("unhandled",l.raw,_.raw)}),c()}),r.register(sce),r.register(rce),r.register(nce,{root:ice.join(oce,"studio/build-local")}),mce(r);let s=Ua.get(_G.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!cce.isEmpty(s)&&s.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[hce,dce],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),fce(i,o)}),r.get("/health",()=>"HarperDB is running."),bi.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(Rce,"buildServer");function Ace(e){let t=Ua.get(z_.OPERATIONSAPI_NETWORK_TIMEOUT),r=Ua.get(z_.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:Sce,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}a(Ace,"getServerOptions");function Oce(){let e=Ua.get(z_.OPERATIONSAPI_NETWORK_CORS),t=Ua.get(z_.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===Tce)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(n,s)=>s(null,t.indexOf(n)!==-1))),r}a(Oce,"getCORSOpts");function Nce(){return Ua.get(z_.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??pce}a(Nce,"getHeaderTimeoutConfig")});var OG=T((HNe,AG)=>{"use strict";var{decode:bce}=require("msgpackr"),{isMainThread:UNe,parentPort:yce,threadId:vNe}=require("worker_threads"),FO=Tt(),yi=Ze(),Ice=C(),mo=q(),EG=J(),mG=C();et();var wce=li(),{recordAction:Cce,recordActionBinary:Lce}=(ui(),re(Mu)),{publishToStream:Dce}=FO,{ConsumerEvents:Pce}=require("nats"),BNe={durable:yi.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:yi.WORK_QUEUE_CONSUMER_NAMES.deliver_group},Mce,Uce,vce,pG,SG;AG.exports={initialize:kO,workQueueListener:RG,setSubscription:Bce,setIgnoreOrigin:qce,getDatabaseSubscriptions:Hce};async function kO(){SG=!0,mo.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await FO.getNATSReferences();Mce=e,Uce=e.info.server_name,vce=t,pG=r}a(kO,"initialize");var Am=new Map;function Bce(e,t,r){let n=Am.get(e);n||Am.set(e,n=new Map),n.set(t,r),SG||kO().then(RG)}a(Bce,"setSubscription");function Hce(){return Am}a(Hce,"getDatabaseSubscriptions");var TG;function qce(e){TG=e}a(qce,"setIgnoreOrigin");var gG=100,hG=new Array(gG),Rm=0;async function RG(){let e=await pG.consumers.get(yi.WORK_QUEUE_CONSUMER_NAMES.stream_name,yi.WORK_QUEUE_CONSUMER_NAMES.durable_name),t=!1,r;for(yce?.on("message",async n=>{let{type:s}=n;s===mG.ITC_EVENT_TYPES.SHUTDOWN&&(t=!0,r&&r.close?.()&&r.close())});!t;){r=await e.consume(),(async()=>{for await(let n of await r.status())if(n.type===Pce.HeartbeatsMissed){let s=n.data;mo.trace(`${s} clustering ingest consumer heartbeats missed`),s===2&&(mo.warn("Restarting clustering ingest consumer due to missed heartbeat threshold being met"),r.stop())}})();try{for await(let n of r)await hG[Rm],hG[Rm]=xce(n).catch(s=>{mo.error(s)}),++Rm>=gG&&(Rm=0)}catch(n){mo.error("Error consuming clustering ingest, restarting consumer",n)}FO.clearClientCache(),await kO()}}a(RG,"workQueueListener");async function xce(e){let t=bce(e.data);Cce(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let r=e.headers,n=!1,s=EG.get(Ice.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(yi.MSG_HEADERS.TRANSACTED_NODES)&&r.values(yi.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(yi.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!TG),Lce(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(yi.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:l,table:_,records:u,hash_values:d,__origin:f,expiresAt:E}=t;mo.trace("processing message:",o,c,_,(u?"records: "+u.map(I=>I?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),mo.trace(`messageProcessor nats msg id: ${e.headers.get(yi.MSG_HEADERS.NATS_MSG_ID)}`);let h;u||(u=d);let{timestamp:p,user:S,node_name:A}=f||{},g=Am.get(c)?.get(_);if(!g)throw new Error("Missing table for replication message",_);if(o==="define_schema")t.type=o,g.send(t);else if(u.length===1&&!l)g.send({type:GO(o),value:u[0],id:d?.[0],expiresAt:E,timestamp:p,table:_,onCommit:h,user:S,nodeName:A});else{let I=u.map((v,F)=>({type:GO(o),value:v,expiresAt:E,id:d?.[F],table:_}));for(;l;)I.push({type:GO(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;g.send({type:"transaction",writes:I,table:_,timestamp:p,onCommit:h,user:S,nodeName:A})}EG.get(mG.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&Dce(e.subject.split(".").slice(0,-1).join("."),wce.createNatsTableStreamName(c,_),e.headers,e.data)}catch(o){mo.error(o)}e.ack()}a(xce,"messageProcessor");function GO(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(GO,"convertOperation")});var QO={};Fe(QO,{disableNATS:()=>Fce,publishToStream:()=>Im,setNATSReplicator:()=>$O,setPublishToStream:()=>kce,setSubscription:()=>WO,start:()=>Gce});function Gce(){Nm.default.get(bm.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Vce()}function Fce(e=!0){wG=e}function kce(e,t){Im=e,WO=t}function Vce(){if(wG||process.env._DISABLE_NATS)return;let e=rs(),t=Object.keys(e);t.push("system");for(let r of t){let n=e[r];for(let s in n){let i=n[s];$O(s,r,i)}}Lg((r,n)=>{$O(r.tableName,r.databaseName,r),n&&LG(r)}),!NG&&(NG=!0)}function $O(e,t,r){if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.sources.some(s=>s?.isNATSReplicator))return;r.sourcedFrom(class extends jt{static{a(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[De],record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[De]})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[De],record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this[De],record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[De]})}static defineSchema(i){LG(i)}static subscribe(){let i=new jn;return WO(t,e,i),i}static subscribeOnThisThread(i){return i<$ce}static isEqual(i){return i.isNATSReplicator}static isNATSReplicator=!0;static shouldReceiveInvalidations=!0},{intermediateSource:!0});function n(s){let i=s?.transaction?.nats;if(!i)if(s?.transaction){s.transaction.nats=i=new Om(s.transaction,s);let o=s.transaction;for(;o.next;)o=o.next;o.next=s.transaction.nats,i.user=s.user,i.context=s}else i=CG;return i}a(n,"getNATSTransaction")}function LG(e){let t=Nm.default.get(bm.default.CONFIG_PARAMS.CLUSTERING_NODENAME);Im(`${YO.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,KO.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 bG,YO,KO,yG,IG,Nm,bm,ym,wG,Im,WO,$ce,CG,NG,Om,VO,DG=Ne(()=>{Re();zn();bG=B(Tt()),YO=B(Ze()),KO=B(li());ql();yG=B(OG()),IG=B(pr()),Nm=B(J()),bm=B(C()),ym=B(q());a(Gce,"start");a(Fce,"disableNATS");Im=bG.publishToStream,WO=yG.setSubscription;a(kce,"setPublishToStream");$ce=2;a(Vce,"assignReplicationSource");a($O,"setNATSReplicator");a(LG,"publishSchema");Om=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 n=this.writes_by_db.get(t);n||this.writes_by_db.set(t,n=[]),n.push(r)}commit({timestamp:t}){let r=Nm.default.get(bm.default.CONFIG_PARAMS.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writes_by_db){let o=[],c=[],l,_;for(let u of i){let d=u.table,f=u.operation=="put"?"upsert":u.operation;l||(ym.trace(`Sending transaction event ${f}`),_=l={operation:f,schema:s,table:d,__origin:{user:this.user?.username,timestamp:t,node_name:r}},l.hash_values=c,f!=="delete"&&f!=="invalidate"&&(l.records=o)),l.table===d&&l.operation===f?(o.push(u.record),c.push(u.id)):_=_.next={operation:f,table:d,id:u.id,record:u.record},u.expiresAt&&(_.expiresAt=u.expiresAt)}l&&n.push(Im(`${YO.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,KO.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(u=>{throw ym.error("An error has occurred trying to replicate transaction",l,u),u.statusCode=504,u}))}return Promise.all(n)}},VO=class extends Om{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,IG.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};CG=new VO});var tN=T(Ba=>{"use strict";var{isMainThread:Yce,parentPort:Z_,threadId:J_}=require("worker_threads"),{Socket:Kce,createServer:Wce}=require("net"),{createServer:Qce,IncomingMessage:jce}=require("http"),{createServer:zce}=require("https"),{readFileSync:nl,unlinkSync:PG,existsSync:Jce}=require("fs"),_s=q(),Ye=J(),Gr=C(),{server:Lm}=(hr(),re(vo)),{WebSocketServer:Xce}=require("ws"),{createServer:Zce}=require("tls"),{getTicketKeys:ele,restartNumber:tle,getWorkerIndex:MG}=et(),{Headers:qG}=(Nh(),re(B0)),{recordAction:X_,recordActionBinary:rle}=(ui(),re(Mu)),{Request:xG,createReuseportFd:UG}=(gm(),re(xO)),{checkMemoryLimit:nle}=sa(),GG=require("tls"),vG=GG.createSecureContext;GG.createSecureContext=function(e){if(!e.cert||!e.key)return vG(e);let t={...e};delete t.key,delete t.cert;let r=vG(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};if(process.env.DEV_MODE)try{require("inspector").open(9229)}catch(e){tle<=1&&_s.trace("Could not start debugging on port 9229, you may already be debugging:",e.message)}process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});var{HDB_SETTINGS_NAMES:VNe,CONFIG_PARAMS:sle}=Gr;Ye.initSync();var ile=Ye.get(sle.HTTP_SESSIONAFFINITY),Fs={};Ba.registerServer=ZO;Ba.httpServer=eN;Ba.deliverSocket=XO;Ba.startServers=FG;Ba.when_components_loaded=null;Lm.http=eN;Lm.request=lle;Lm.socket=ule;Lm.ws=_le;var jO=[],wm=[],ole,va={},Cm={},ale=[],zO=[];function FG(){return Ba.when_components_loaded=Dm().loadRootComponents(!0).then(()=>{Z_?.on("message",t=>{let{port:r,fd:n,data:s}=t;if(n)XO(n,r,s);else if(t.requestId)cle(t);else if(t.type===Gr.ITC_EVENT_TYPES.SHUTDOWN){_s.trace("received shutdown request",J_);for(let i in Fs){let o=Fs[i],c;o.closeIdleConnections&&(setInterval(()=>{o.closeIdleConnections()},25).unref(),setTimeout(()=>{o.closeAllConnections(),_s.info("Closed all http connections",i,J_)},4e3).unref()),o.close?.(()=>{if(Ye.get(Gr.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&MG()==0)try{PG(Ye.get(Gr.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET))}catch{}clearInterval(c),setTimeout(()=>{console.log("forced close server",i,J_),o.cantCleanupProperly||_s.warn("Had to forcefully exit the thread",J_),process.exit(0)},5e3).unref()})}if(process.env.DEV_MODE)try{require("inspector").close()}catch(i){console.error("Could not close debugger",i)}}}).ref();let e=[];if(UG&&!ile)for(let t in Fs){let r=Fs[t];if(isNaN(t)&&MG()==0){Jce(t)&&PG(t),e.push(new Promise((s,i)=>{r.listen({path:t},()=>{s(),_s.info("Domain socket listening on "+t)}).on("error",i)}));continue}let n;try{n=UG(+t,"::")}catch(s){console.error(`Unable to bind to port ${t}`,s);continue}e.push(new Promise((s,i)=>{r.listen({fd:n},()=>{s(),_s.trace("Listening on port "+t,J_)}).on("error",i)}))}Promise.all(e).then(()=>{Z_?.postMessage({type:Gr.ITC_EVENT_TYPES.CHILD_STARTED})})})}a(FG,"startServers");Yce||FG();function XO(e,t,r){let n=e?.read?e:new Kce({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=Fs[t];if(s.isSecure&&(n.startTime=performance.now()),s)typeof s=="function"?s(n):s.emit("connection",n),r&&n.emit("data",r);else{let i=a(o=>{setTimeout(()=>{let c=Fs[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):o<5?i(o+1):(_s.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}a(XO,"deliverSocket");var BG=new Map;function cle(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=BG.get(s),r){case"connection":i=XO(void 0,t),BG.set(s,i),i.write=(c,l,_)=>(Z_.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),_&&_(),!0),i.end=(c,l,_)=>(Z_.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),_&&_(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),Z_.postMessage({requestId:s,event:"destroy"})};break;case"data":i._readableState.destroyed||i.emit("data",Buffer.from(n,"latin1"));break;case"drain":i._readableState.destroyed||i.emit("drain",{});break;case"end":i._readableState.destroyed||i.emit("end",{});break;case"error":i._readableState.destroyed||i.emit("error",{});break}}a(cle,"proxyRequest");function ZO(e,t,r=!0){!+t&&t!==Ye.get(Gr.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&(t=parseInt(Ye.get(Gr.CONFIG_PARAMS.HTTP_PORT),10));let n=Fs[t];if(n){let s=n.lastServer||n;if(s===e)throw new Error(`Can not register the same server twice for the same port ${t}`);if(r&&!!s.sessionIdContext!=!!e.sessionIdContext&&+t)throw new Error(`Can not mix secure HTTPS and insecure HTTP on the same port ${t}`);s.off("unhandled",HG),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else Fs[t]=e;e.on("unhandled",HG)}a(ZO,"registerServer");function kG(e){let t=[],r=parseInt(e?.securePort);return r&&t.push({port:r,secure:!0}),r=parseInt(e?.port),r&&t.push({port:r,secure:!1}),t.length===0&&(t=[],Ye.get(Gr.CONFIG_PARAMS.HTTP_PORT)!=null&&t.push({port:Ye.get(Gr.CONFIG_PARAMS.HTTP_PORT),secure:Ye.get(Gr.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),Ye.get(Gr.CONFIG_PARAMS.HTTP_SECUREPORT)!=null&&t.push({port:Ye.get(Gr.CONFIG_PARAMS.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&Ye.get(Gr.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:Ye.get(Gr.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET),secure:!1}),t}a(kG,"getPorts");function eN(e,t){for(let{port:r,secure:n}of kG(t))$G(r,n,t?.isOperationsServer),typeof e=="function"?zO[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||r}):(e.isSecure=n,ZO(e,r,!1)),Cm[r]=JO(zO,r),ole=JO(ale,r)}a(eN,"httpServer");function $G(e,t,r){if(!va[e]){let n=r?"operationsApi_network":"http",s={keepAliveTimeout:Ye.get(n+"_keepAliveTimeout"),headersTimeout:Ye.get(n+"_headersTimeout"),requestTimeout:Ye.get(n+"_timeout")},i=Ye.get(n+"_mtls");if(t){n=r?"operationsApi_":"";let c=Ye.get(n+"tls_privateKey"),l=Ye.get(n+"tls_certificate"),_=Ye.get(n+"tls_certificateAuthority");Object.assign(s,{allowHTTP1:!0,key:nl(c),ciphers:Ye.get("tls_ciphers"),cert:nl(l),ca:_&&nl(_),requestCert:!!i,ticketKeys:ele()})}let o=nle();va[e]=(t?zce:Qce)(s,async(c,l)=>{try{let u=performance.now(),d=new xG(c,l);r&&(d.isOperationsServer=!0);let f=await Cm[e](d);if(!f){if(d._nodeResponse.statusCode)return;f=VG(d)}if(o?f.headers?.set?.("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"):f.headers?.set?.("Server","HarperDB"),f.status===-1){for(let v of f.headers||[])l.setHeader(v[0],v[1]);return c.baseRequest=d,l.baseResponse=f,va[e].emit("unhandled",c,l)}let E=f.status||200,h=performance.now(),p=h-u,S=f.body,A;if(!f.handlesHeaders){let v=f.headers||new qG;if(S?S.length>=0&&(typeof S=="string"?v.set("Content-Length",Buffer.byteLength(S)):v.set("Content-Length",S.length),A=!0):(v.set("Content-Length","0"),A=!0),v.append){let F=`hdb;dur=${p.toFixed(2)}`;f.wasCacheMiss&&(F+=", miss"),v.append("Server-Timing",F,!0)}l.writeHead(E,v&&(v[Symbol.iterator]?Array.from(v):v)),A&&l.end(S)}let g=d.handlerPath,I=d.method;if(X_(p,"duration",g,I,f.wasCacheMiss==null?void 0:f.wasCacheMiss?"cache-miss":"cache-hit"),rle(E<400,"success",g,I),!A)if(S?.pipe){S.pipe(l),S.destroy&&l.on("close",()=>{S.destroy()});let v=0;S.on("data",F=>{v+=F.length}),S.on("end",()=>{X_(performance.now()-h,"transfer",g,I),X_(v,"bytes-sent",g,I)})}else S?.then?S.then(v=>{l.end(v)},_):l.end(S)}catch(u){_(u)}function _(u){let d=u.headers;l.writeHead(u.statusCode||500,d&&(d[Symbol.iterator]?Array.from(d):d)),l.end(u.toString()),u.statusCode?u.statusCode===500?_s.warn(u):_s.info(u):_s.error(u)}a(_,"onError")}),t&&(va[e].on("secureConnection",c=>{c._parent.startTime&&X_(performance.now()-c._parent.startTime,"tls-handshake",e),X_(c.isSessionReused(),"tls-reused",e)}),va[e].isSecure=!0),ZO(va[e],e)}return va[e]}a($G,"getHTTPServer");function JO(e,t){let r=VG;for(let n=e.length;n>0;){let{listener:s,port:i}=e[--n];if(i===t||i==="all"){let o=r;r=a(c=>s(c,o),"next_callback")}}return r}a(JO,"makeCallbackChain");function VG(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new qG}}a(VG,"unhandled");function lle(e,t){eN(e,{requestOnly:!0,...t})}a(lle,"onRequest");function ule(e,t){let r;if(t.securePort){let n=Ye.get("tls_privateKey"),s=Ye.get("tls_certificate"),i=t.mtls?.certificateAuthority||Ye.get("tls_certificateAuthority");r=Zce({ciphers:Ye.get("tls_ciphers"),key:nl(n),cert:nl(s),ca:i&&nl(i),requestCert:!!t.mtls},e),Fs[t.securePort]=r}return t.port&&(r=Wce(e),Fs[t.port]=r),r}a(ule,"onSocket");Object.defineProperty(jce.prototype,"upgrade",{get(){return"connection"in this.headers&&"upgrade"in this.headers&&this.headers.connection.startsWith("Upgrade")&&this.headers.upgrade.toLowerCase()=="websocket"},set(e){}});function _le(e,t){for(let{port:r,secure:n}of kG(t)){wm[r]||(wm[r]=new Xce({server:$G(r,n)}),wm[r].on("connection",async(i,o)=>{try{let c=new xG(o);c.isWebSocket=!0;let l=Cm[r](c),_=o.headers["sec-websocket-protocol"]||"";for(let u=0;u<jO.length;u++){let d=jO[u];if(d.protocol){if(d.protocol===_){d.listener(i,c,l);break}}else d.listener(i,c,l)}}catch(c){_s.warn("Error handling WebSocket connection",c)}}),wm[r].on("error",i=>{console.log("Error in setting up WebSocket server",i)}));let s=t?.subProtocol||"";jO.push({listener:e,protocol:s}),Cm[r]=JO(zO,r)}}a(_le,"onWebSocket");function HG(e,t){t.writeHead(404),t.end(`Not found
|
|
28
|
-
`)}a(HG,"defaultNotFound")});async function QG({clientId:e,user:t,clean:r,will:n}){let s;if(e&&!r){let i=await rN.getResource(e,{});s=new iN(e,t,i),i&&(s.sessionWasPresent=!0)}else{if(e){let i=await rN.get(e);i&&i.delete()}s=new Mm(e,t)}return n&&(n.id=e,n.user={username:t?.username},ed.put(n)),s}function nN(){return Pm++,Pm>65500&&(Pm=1),Pm}function sN(e,t,r=e){let{topic:n,retain:s}=e;e.data=t,e.async=!0,e.authorize=!0;let i=$i.getMatch(n);if(!i)throw new Error(`Can not publish to topic ${n} as it does not exist, no resource has been defined to handle this topic`);e.url=i.relativeURL;let o=i.Resource;return Xe(r,()=>s?t===void 0?o.delete(e,r):o.put(e,e.data,r):o.publish(e,e.data,r))}var YG,Ha,KG,WG,rN,ed,Pm,Mm,iN,jG=Ne(()=>{Re();Ql();YG=B(pr()),Ha=B(q());Fo();KG=B(et()),WG=B(tN());hr();rN=pt({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"}]}}]}),ed=pt({database:"system",table:"hdb_session_will",attributes:[{name:"id",isPrimaryKey:!0},{name:"topic",type:"string"},{name:"data"},{name:"qos",type:"number"},{name:"retain",type:"boolean"},{name:"user",type:"any"}]});(0,KG.getWorkerIndex)()===0&&(async()=>{await WG.when_components_loaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of ed.search({})){let t=e.data,r=Object.assign({},e);r.user?.username&&(r.user=await Et.getUser(r.user.username)),Xe(r,()=>{try{sN(r,t)}finally{ed.delete(e.id,r)}})}})();a(QG,"getSession");Pm=1;a(nN,"getNextMessageId");Mm=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;subscriptions=[];awaitingAcks;sessionWasPresent;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,n){let{topic:s,rh:i,startTime:o}=t,c=s.indexOf("?"),l,_;if(c>-1?(l=s.slice(c),_=s.slice(0,c)):_=s,!_)throw new Error("No topic provided");if(_.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");let u=this.subscriptions.find(A=>A.topic===s),d;u?(d=i>0,u.end(),this.subscriptions.splice(this.subscriptions.indexOf(u),1)):d=i===2;let f={search:l,async:!0,authorize:!0,user:this.user,startTime:o,omitCurrent:d,url:""};o&&(0,Ha.trace)("Resuming subscription from",s,"from",o);let E=$i.getMatch(_);if(!E){let A=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw A.statusCode=404,A}if(f.url=E.relativeURL,f.url.indexOf("+")>-1||f.url.indexOf("#")>-1){let A=f.url.slice(1);if(A.indexOf("#")>-1&&A.indexOf("#")!==A.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(f.isCollection=!0,A.indexOf("+")===A.length-1)f.onlyChildren=!0,f.url="/"+A.slice(0,A.length-1);else{let g=A.split("/"),I;for(let G=0;G<g.length;G++)if(g[G].indexOf("+")>-1)if(g[G]==="+")I=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&I)throw new Error("Filters can not be combined");let v=!0;g[g.length-1]==="#"&&(g.length--,v=!1),I&&(n=a(G=>{let U=G.id;if(!Array.isArray(U)||v&&U.length!==g.length)return!1;for(let Q=0;Q<g.length;Q++)if(g[Q]!=="+"&&g[Q]!==U[Q])return!1;return!0},"filter"));let F=g.indexOf("+");f.url="/"+(F>-1?g.slice(0,F):g).concat("").join("/")}}let h=E.path,p=E.Resource,S=await Xe(f,async()=>{let A=await p.subscribe(f);if(!A)throw new Error(`No subscription was returned from subscribe for topic ${s}`);if(!A[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);return(async()=>{for await(let g of A)try{let I;if(g.type&&g.type!=="put"&&g.type!=="delete"&&g.type!=="message"&&g.type!=="patch"||n&&!n(g))continue;r?(g.topic=s,I=this.needsAcknowledge(g)):(g.acknowledge?.(),I=nN());let v=g.id;Array.isArray(v)&&(v=ic(v)),v==null&&(v=""),this.listener(h+"/"+v,g.value,I,t)}catch(I){(0,Ha.warn)(I)}})(),A});return S.topic=s,S.qos=t.qos,this.subscriptions.push(S),S}resume(){}needsAcknowledge(t){let r=nN();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(n=>n.topic===t);if(r)return r.end(),!0}async publish(t,r){return t.user=this.user,sN(t,r)}setListener(t){this.listener=t}disconnect(t){let r={};Xe(r,async()=>{if(!t){let n=await ed.get(this.sessionId,r);n?.doesExist()&&await sN(n,n.data,r)}await ed.delete(this.sessionId,r)}).catch(n=>{(0,Ha.warn)(`Error publishing MQTT will for ${this.sessionId}`,n)});for(let n of this.subscriptions)n.end();this.subscriptions=[]}};a(sN,"publish");iN=class extends Mm{static{a(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,n){super(t,r),this.sessionRecord=n||{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,n){return super.addSubscription(t,r,n)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=nN(),n={topic:t.topic,timestamp:t.timestamp};return t.acknowledge&&(n.acknowledge=t.acknowledge),this.awaitingAcks.set(r,n),r}acknowledge(t){let r=this.awaitingAcks.get(t);this.awaitingAcks.delete(t),r.acknowledge?.();let n=r.topic;for(let[,s]of this.awaitingAcks)if(s.topic===n&&s.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===n){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,Ha.trace)("Received ack",n,r.timestamp),this.sessionRecord.update();return}}for(let s of this.sessionRecord.subscriptions)s.topic===n&&(s.startTime=r.timestamp);this.sessionRecord.update()}async addSubscription(t,r){await this.resumeSubscription(t,r);let{qos:n,startTime:s}=t;return n>0&&!s&&(this.sessionRecord.subscriptions=this.subscriptions.map(i=>{let o=i.startTime;return o||(o=i.startTime=(0,YG.getNextMonotonicTime)()),(0,Ha.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),rN.put(this.sessionRecord)),t.qos}}});var oN={};Fe(oN,{bypassAuth:()=>dle,start:()=>fle});function dle(){eF=!0}function fle({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){let o=e.mqtt={requireAuthentication:i},c,l=r?.mtls;return n&&(c=e.ws((_,u,d)=>{if(_.protocol==="mqtt"){let{onMessage:f,onClose:E}=XG(_,(h,p)=>{if(_.send(h),p&&_._socket.writableNeedDrain)return new Promise(S=>this._socket.once("drain",S))},u,Promise.resolve(d).then(()=>u?.user),o);_.on("message",f),_.on("close",E),_.on("error",h=>{(0,Fr.info)("WebSocket error",h)})}},{subProtocol:"mqtt"})),(t||s)&&(c=e.socket(async _=>{let u;if(l)if(_.authorized)try{let E=l.user;u!==null&&((E===void 0||E==="Common Name"||E==="CN")&&(E=_.getPeerCertificate().subject.CN),u=await e.getUser(E,null,null))}catch(E){(0,Fr.error)(E)}else return(0,Fr.info)(`Unauthorized connection attempt, no authorized client certificate provided, error: ${_.authorizationError}`),_.end();!u&&eF&&_.remoteAddress.includes("127.0.0.1")&&(u=await(0,ZG.getSuperUser)());let{onMessage:d,onClose:f}=XG(_,E=>_.write(E),null,u,o);_.on("data",d),_.on("close",f),_.on("error",E=>{(0,Fr.info)("Socket error",E)})},{port:t,securePort:s,mtls:l})),c}function XG(e,t,r,n,s){JG||(JG=!0,Pu(d=>{Um>0&&d.push({metric:"mqtt-connections",connections:Um,byThread:!0})}));let i;Um++;let o,c={protocolVersion:4},l=(0,Bm.parser)({protocolVersion:5});function _(d){l.parse(d)}a(_,"onMessage");function u(){Um--,i||(i=!0,o?.disconnect(),Cn(!1,"connection","mqtt","disconnect"))}return a(u,"onClose"),l.on("packet",async d=>{n?.then&&(n=await n),o?.then&&await o;try{switch(d.cmd){case"connect":if(c.protocolVersion=d.protocolVersion,d.username)try{n=await Et.getUser(d.username,d.password.toString(),r),(0,vm.get)(ks.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&zG.notify({username:n.username,status:ks.AUTH_AUDIT_STATUS.SUCCESS,type:ks.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,vm.get)(ks.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&zG.error({username:n.username,status:ks.AUTH_AUDIT_STATUS.FAILURE,type:ks.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),f({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return Cn(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(d,n),d.will){let I=e.deserialize||(e.deserialize=wa(r?.headers.get?.("content-type")));d.will.data=d.will.payload?.length>0?I(d.will.payload):void 0,delete d.will.payload}o=QG({user:n,...d}),o=await o}catch(I){return(0,Fr.error)(I),Cn(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:I.code||5,returnCode:I.code||128})}Cn(!0,"connection","mqtt","connect"),f({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((I,v,F,G)=>{try{let U=I.indexOf("/",1),Q=U>0?I.slice(0,U):I;f({cmd:"publish",topic:I,payload:E(v),messageId:F||Math.floor(Math.random()*1e8),qos:G.qos},Q)}catch(U){(0,Fr.error)(U),o?.disconnect()}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let h=[];for(let I of d.subscriptions){let v;try{v=(await o.addSubscription(I,I.qos>=1)).qos||0}catch(F){(0,Fr.error)(F),v=c.protocolVersion<5?128:F.statusCode===403?135:F.statusCode===404?143:128}h.push(v)}await o.committed,f({cmd:"suback",granted:h,messageId:d.messageId});break;case"unsubscribe":{let I=[];for(let v of d.unsubscriptions)I.push(o.removeSubscription(v)?0:17);f({cmd:"unsuback",granted:I,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=wa(r?.headers.get?.("content-type"))),A=d.payload?.length>0?S(d.payload):void 0,g;try{g=await o.publish(d,A)}catch(I){(0,Fr.warn)(I),d.qos>0&&f({cmd:p,messageId:d.messageId,reasonCode:128},d.topic);break}d.qos>0&&f({cmd:p,messageId:d.messageId,reasonCode:g===!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(!0),Cn(!0,"connection","mqtt","disconnect"),e.close?e.close():e.end();break}}catch(h){(0,Fr.error)(h),f({cmd:"disconnect"})}function f(h,p){let S=(0,Bm.generate)(h,c);t(S),on(S.length,"bytes-sent",p,h.cmd,"mqtt")}a(f,"sendPacket");function E(h){return fo(h,r)}a(E,"serialize")}),{onMessage:_,onClose:u}}var Bm,ZG,vm,ks,Fr,zG,eF,JG,Um,tF=Ne(()=>{Bm=require("mqtt-packet");jG();ZG=B(yr());Vc();ui();hr();vm=B(J()),ks=B(C()),Fr=B(q()),zG=(0,Fr.loggerWithTag)("auth-event"),eF=(0,vm.get)(ks.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(dle,"bypassAuth");a(fle,"start");Um=0;a(XG,"onSocket")});var Hh={};Fe(Hh,{component_errors:()=>il,loadComponent:()=>Hm,loadComponentDirectories:()=>uF,setErrorReporter:()=>ple});function uF(e,t){t&&(cN=t),e&&(lN=e);let r=[];if((0,ds.existsSync)(aN)){let s=(0,ds.readdirSync)(aN,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Lt.join)(aN,o);r.push(Hm(c,cN,"hdb",!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(Hm(n,cN,n,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{lF=!0})}function ple(e){rd=e}async function Hm(e,t,r,n,s,i){if(!nF.has(e)){nF.set(e,!0),s&&(lN=s);try{let o;n&&(il=new Map);let c=(0,Lt.join)(e,n?"harperdb-config.yaml":"config.yaml");(0,ds.existsSync)(c)?o=n?(0,cF.getConfigObj)():(0,sF.parseDocument)((0,ds.readFileSync)(c,"utf8"),{simpleKeys:!0}).toJSON():o=uN;let l=[],_=n;for(let u in o){let d=o[u];if(il.set(n?u:(0,Lt.basename)(e),!1),!d)continue;let f,E=d.package;try{if(E){let g=e,I;for(;!(0,ds.existsSync)(I=(0,Lt.join)(g,"node_modules",u));)if(g=(0,Lt.dirname)(g),g.length<(0,aF.getHdbBasePath)().length){I=null;break}if(I)f=await Hm(I,t,r,!1),_=!0;else throw new Error(`Unable to find package ${u}:${E}`)}else f=mle[u];if(!f)continue;l.push(f);let h=a(g=>(g.origin=r,pt(g)),"ensureTable"),p=d.network||(d.port||d.securePort)&&d,S=p?.securePort||p?.https&&p.port,A=!p?.https&&p?.port;if(sl.isMainThread&&(f=await f.startOnMainThread?.({server:Et,ensureTable:h,port:A,securePort:S,resources:t,...d})||f,n&&p))for(let g of[A,S])try{if(+g&&!rF.includes(g)){let I=_N.get(dN.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);I&&td.default.warn("Session affinity is not recommended and may cause memory leaks"),(I||!Tm)&&(rF.push(g),fN(g,I))}}catch(I){console.error("Error listening on socket",g,I,u)}if(t.isWorker&&(f=await f.start?.({server:Et,ensureTable:h,port:A,securePort:S,resources:t,...d})||f),lN.set(f,!0),(f.handleFile||f.handleDirectory)&&d.files){if(d.files.includes(".."))throw(0,oF.handleHDBError)("Can not reference parent directories");let g=(0,Lt.join)(e,d.files).replace(/\\/g,"/"),I=g.indexOf("/*");if(I>-1&&d.files!==uN[u]?.files&&!(0,ds.existsSync)(g.slice(0,I)))throw new Error(`The path '${g.slice(0,I)}' does not exist and cannot be used as the base of the resolved 'files' path value '${d.files}'`);let v=(0,Lt.basename)(e),F=d.path||"/";F=F.startsWith("/")?F:F.startsWith("./")?"/"+v+F.slice(2):F==="."?"/"+v:"/"+v+"/"+F;let G,U,Q;if(d.root){let z=d.root;z.startsWith("/")&&(z=z.slice(1)),z.endsWith("/")&&(z=z.slice(0,-1)),z+="/",U=(0,Lt.join)(e,z)}else(Q=g.indexOf("/*"))>-1&&(U=g.slice(0,Q+1),G=(0,Lt.relative)(e,U));let V=!1;if(sl.isMainThread&&f.setupDirectory&&(V=await f.setupDirectory?.(F,U,t)),t.isWorker&&f.handleDirectory&&(V=await f.handleDirectory?.(F,U,t)),V)continue;for(let z of await(0,iF.default)(g,{onlyFiles:!1,objectMode:!0})){let{path:se,dirent:Ce}=z;_=!0;let ie=(0,Lt.relative)(e,se).replace(/\\/g,"/");if(G)if(ie.startsWith(G))ie=ie.slice(G.length+1);else throw new Error(`The root path '${d.root}' does not reference a valid part of the file path '${ie}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`);let dt=F+(F.endsWith("/")?"":"/")+ie;try{if(Ce.isFile()){let Ee=await hle(se);sl.isMainThread&&await f.setupFile?.(Ee,dt,se,t),t.isWorker&&await f.handleFile?.(Ee,dt,se,t)}else sl.isMainThread&&await f.setupDirectory?.(dt,se,t),t.isWorker&&await f.handleDirectory?.(dt,se,t)}catch(Ee){Ee.message=`Could not load ${Ce.isFile()?"file":"directory"} '${se}'${d.module?" using '"+d.module+"'":""} for application '${e}' due to: ${Ee.message}`,rd?.(Ee),((0,ol.getWorkerIndex)()===0?console:td.default).error(Ee),t.set(d.path||"/",new nd(Ee)),il.set(n?u:(0,Lt.basename)(e),Ee.message)}}}}catch(h){h.message=`Could not load component '${u}' for application '${(0,Lt.basename)(e)}' due to: ${h.message}`,rd?.(h),((0,ol.getWorkerIndex)()===0?console:td.default).error(h),t.set(d.path||"/",new nd(h),null,!0),il.set(n?u:(0,Lt.basename)(e),h.message)}}if(sl.isMainThread&&!lF&&i&&(0,ol.watchDir)(e,async()=>uF()),o.extensionModule)return await wE((0,Lt.join)(e,o.extensionModule));if(!_&&t.isWorker){let u=`${e} did not load any modules, resources, or files, is this a valid component?`;rd?.(new Error(u)),((0,ol.getWorkerIndex)()===0?console:td.default).error(u),il.set((0,Lt.basename)(e),u)}}catch(o){console.error(`Could not load application directory ${e}`,o),o.message=`Could not load application due to ${o.message}`,rd?.(o),t.set("",new nd(o))}}}var ds,Lt,sl,sF,_N,dN,iF,ol,td,oF,aF,Ele,cF,hle,aN,lN,lF,cN,il,mle,uN,rF,nF,rd,nd,qh=Ne(()=>{ds=require("fs"),Lt=require("path"),sl=require("worker_threads"),sF=require("yaml"),_N=B(J()),dN=B(C());UM();qM();xM();Eq();rG();cG();iF=B(require("fast-glob")),ol=B(et()),td=B(q());Hg();hr();oF=B(te());zn();Re();qm();aF=B(J()),Ele=B(fG());wh();DG();tF();cF=B(St());gm();({readFile:hle}=ds.promises),aN=_N.get(dN.CONFIG_PARAMS.COMPONENTSROOT),lN=new Map,il=new Map;a(uF,"loadComponentDirectories");mle={REST:Jh,rest:Jh,graphqlSchema:Bg,jsResource:xg,fastifyRoutes:UO,login:Fg,static:vO,operationsApi:Ele,customFunctions:{},http:{},clustering:QO,authentication:y_,mqtt:oN},uN={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(uN,"static",{value:{files:"web/**"}});rF=[],nF=new Map;a(ple,"setErrorReporter");a(Hm,"loadComponent");nd=class extends jt{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 Dm=T((mbe,dF)=>{var{isMainThread:_F}=require("worker_threads"),{getTables:Sle}=(Re(),re(xe)),{loadComponentDirectories:Tle,loadComponent:gle}=(qh(),re(Hh)),{resetResources:Rle}=(Ql(),re(_I)),Ale=wA(),Ole=St(),{dirname:Nle}=require("path"),{getConnection:ble}=Tt(),yle=J(),Ile=C(),EN=new Map;async function wle(e=!1){!_F&&yle.get(Ile.CONFIG_PARAMS.CLUSTERING_ENABLED)&&ble();try{_F&&await Ale()}catch(n){console.error(n)}let t=Rle();Sle(),t.isWorker=e,await gle(Nle(Ole.getConfigFilePath()),t,"hdb",!0,EN),await Tle(EN,t);let r=[];for(let[n]of EN)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}a(wle,"loadRootComponents");dF.exports.loadRootComponents=wle});var et=T((Sbe,So)=>{"use strict";var{Worker:Cle,MessageChannel:Lle,parentPort:$s,isMainThread:TN,threadId:Dle,workerData:Ii}=require("worker_threads"),{PACKAGE_ROOT:Ple}=C(),{join:mF,isAbsolute:Mle,extname:Ule}=require("path"),{server:pF}=(hr(),re(vo)),{watch:vle,readdir:Ble}=require("fs/promises"),{totalmem:fF}=require("os"),sd=C(),SF=J(),wi=q(),{randomBytes:Hle}=require("crypto"),{_assignPackageExport:qle}=require("../index"),xle=C(),EF=1024*1024,po=[],Gn=[],Gle=50,gN=1e4,Fle="restart",TF="request_thread_info",gF="resource_report",RF="thread_info",AF="added-port",kle="ack",hN;qle("threads",Gn);So.exports={startWorker:mN,restartWorkers:AN,shutdownWorkers:Wle,workers:po,setMonitorListener:tue,onMessageFromWorkers:Qle,onMessageByType:wF,broadcast:zle,broadcastWithAcknowledgement:Xle,setChildListenerByType:Kle,getWorkerIndex:OF,getWorkerCount:NF,getTicketKeys:bF,setMainIsWorker:Vle,setTerminateTimeout:$le,restartNumber:Ii?.restartNumber||1};Gn.onMessageByType=wF;Gn.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=Gn.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};var RN;function $le(e){gN=e}a($le,"setTerminateTimeout");function OF(){return Ii?Ii.workerIndex:RN?0:void 0}a(OF,"getWorkerIndex");function NF(){return Ii?Ii.workerCount:RN?1:void 0}a(NF,"getWorkerCount");function Vle(e){RN=e}a(Vle,"setMainIsWorker");var xm;function bF(){return xm||(xm=TN?Hle(48):Ii.ticketKeys,xm)}a(bF,"getTicketKeys");Object.defineProperty(pF,"workerIndex",{get(){return OF()}});Object.defineProperty(pF,"workerCount",{get(){return NF()}});var yF={[TF](e,t){Zle(t)},[gF](e,t){eue(t,e)}};function mN(e,t={}){let r=process.constrainedMemory?.()||fF();r=Math.min(r,fF(),2e4*EF);let n=SF.get(sd.CONFIG_PARAMS.MAXHEAPMEMORY)??Math.max(Math.floor(r/EF/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],o=[];for(let l of Gn){let _=new Lle;_.existingPort=l,i.push(_),o.push(_.port2)}Ule(e)||(e+=".js");let c=new Cle(Mle(e)?e:mF(Ple,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:["--enable-source-maps"],argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(l=>l.existingPort.threadId),workerIndex:t.workerIndex,workerCount:t.threadCount,name:t.name,restartNumber:So.exports.restartNumber,ticketKeys:bF()},transferList:o},t));for(let{port1:l,existingPort:_}of i)_.postMessage({type:AF,port:l,threadId:c.threadId},[l]);return Fm(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>mN(e,t),c.on("error",l=>{console.error("Worker error:",l),wi.error("Worker error:",l)}),c.on("exit",l=>{po.splice(po.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<Gle?(t.unexpectedRestarts=c.unexpectedRestarts+1,mN(e,t)):wi.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",l=>{yF[l.type]?.(l,c)}),po.push(c),nue(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(mN,"startWorker");var Yle=[sd.THREAD_TYPES.HTTP];async function AN(e=null,t=2,r=!0){if(TN){if(r){let{loadRootComponents:o}=Dm();await o()}So.exports.restartNumber++,t<1&&(t=t*po.length);let n=[],s=[];for(let o of po.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;wi.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:So.exports.restartNumber,type:sd.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=Yle.indexOf(o.name)>-1,l=new Promise(_=>{let u=setTimeout(()=>o.terminate(),gN*2).unref();o.on("exit",()=>{clearTimeout(u),n.splice(n.indexOf(l)),!c&&r&&o.startCopy(),_()})});if(n.push(l),c&&r){let _=o.startCopy(),u=new Promise(d=>{let f=a(E=>{E.type===xle.ITC_EVENT_TYPES.CHILD_STARTED&&(wi.trace("Worker has started",_.threadId),d(),s.splice(s.indexOf(u)),_.off("message",f))},"startListener");wi.trace("Waiting for worker to start",_.threadId),_.on("message",f)});s.push(u),n.length>=t&&await Promise.race(n),s.length>=t&&await Promise.race(s)}}await Promise.all(n),await Promise.all(s);let{restartService:i}=Aa();r&&(e==="http"||!e)&&SF.get(sd.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else $s.postMessage({type:Fle,workerType:e})}a(AN,"restartWorkers");function Kle(e,t){yF[e]=t}a(Kle,"setChildListenerByType");function Wle(e){return AN(e,1/0,!1)}a(Wle,"shutdownWorkers");var IF=[];function Qle(e){IF.push(e)}a(Qle,"onMessageFromWorkers");var pN=new Map;function wF(e,t){let r=pN.get(e);r||pN.set(e,r=[]),r.push(t)}a(wF,"onMessageByType");var jle=10;async function zle(e){let t=0;for(let r of Gn)try{r.postMessage(e),t++>jle&&(t=0,await new Promise(setImmediate))}catch(n){wi.error("Unable to send message to worker",n)}}a(zle,"broadcast");var Gm=new Map,Jle=1;function Xle(e){return new Promise(t=>{let r=0;for(let n of Gn)try{let s=Jle++,i=a(()=>{Gm.delete(s),--r===0&&t(),n!==$s&&--n.refCount===0&&n.unref()},"ack_handler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,Gm.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,o]of Gm)o.port===n&&o()})),n.postMessage(e),r++}catch(s){wi.error("Unable to send message to worker",s)}r===0&&t()})}a(Xle,"broadcastWithAcknowledgement");function Zle(e){e.postMessage({type:RF,workers:CF()})}a(Zle,"sendThreadInfo");function CF(){let e=Date.now();return po.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(CF,"getChildWorkerInfo");function eue(e,t){e.resources=t,e.resources.updated=Date.now()}a(eue,"recordResourceReport");var SN;function tue(e){SN=e}a(tue,"setMonitorListener");var rue=1e3,hF=!1;function nue(){hF||(hF=!0,setInterval(()=>{for(let e of po){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}SN&&SN()},rue).unref())}a(nue,"startMonitoring");var sue=1e3;if($s){Fm($s);for(let e=0,t=Ii.addPorts.length;e<t;e++){let r=Ii.addPorts[e];r.threadId=Ii.addThreadIds[e],Fm(r)}setInterval(()=>{let e=process.memoryUsage();$s.postMessage({type:gF,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},sue).unref(),hN=a(()=>new Promise((e,t)=>{$s.on("message",r),$s.postMessage({type:TF});function r(n){n.type===RF&&($s.off("message",r),e(n.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else hN=CF;So.exports.getThreadInfo=hN;function Fm(e,t){Gn.push(e),e.on("message",r=>{if(r.type===AF)r.port.threadId=r.threadId,Fm(r.port);else if(r.type===kle){let n=Gm.get(r.id);n&&n()}else{for(let s of IF)s(r,e);let n=pN.get(r.type);if(n)for(let s of n)try{s(r,e)}catch(i){wi.error(i)}}}).on("close",()=>{Gn.splice(Gn.indexOf(e),1)}).on("exit",()=>{Gn.splice(Gn.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(Fm,"addPort");if(TN){let e,t,r=a(async(n,s)=>{s&&(e=s);for(let i of await Ble(n,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(mF(n,i.name));try{for await(let{filename:i}of vle(n,{persistent:!1}))t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await AN(),console.log("Reloaded HarperDB components")},100)}catch(i){console.warn("Error trying to watch component directory",n,i)}},"watch_dir");So.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else $s.on("message",async e=>{let{type:t}=e;t===sd.ITC_EVENT_TYPES.SHUTDOWN&&(So.exports.restartNumber=e.restartNumber,$s.unref(),setTimeout(()=>{wi.warn("Thread did not voluntarily terminate",Dle),process.exit(0)},gN).unref())})});var IN={};Fe(IN,{startHTTPThreads:()=>oue,startSocketServer:()=>fN,updateWorkerIdleness:()=>BF});async function oue(e=2,t){if(t)NN(0,1,!0);else{let{loadRootComponents:n}=Dm();if(e===0)return(0,To.setMainIsWorker)(!0),await tN().startServers(),Promise.resolve([]);await n()}let r=(0,MF.checkMemoryLimit)();r&&!process.env.DEV_MODE&&(console.error(r),setInterval(()=>{Ym.notify(r)},iue).unref());for(let n=0;n<e;n++)NN(n,e);return Promise.all(vF)}function NN(e,t=1,r){if(ON++,(0,To.startWorker)("server/threads/threadServer.js",{name:Vm.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((o,c)=>{function l(_){_.type===Vm.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(n.removeListener("message",l),o(n))}a(l,"onMessage"),n.on("message",l),n.on("error",c)});vF.push(s),await s,al.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",o=>{if(o.requestId){let c=$m.get(o.requestId);c&&c(o)}}),n.on("exit",i),n.on("shutdown",i);function i(){let o=al.indexOf(n);o>-1&&al.splice(o,1)}if(a(i,"removeWorker"),cl){let o=cl;cl=[];for(let c of o)UF[c.localPort](null,c)}}}),r){let n=setInterval(()=>{bN?bN=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,To.shutdownWorkers)(),ON=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function fN(e=0,t){if(typeof e=="string")try{(0,Km.existsSync)(e)&&(0,Km.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=aue:r=cue(t):r=yN;let n=(0,ll.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(n._handle){n._handle.onconnection=UF[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),bN=!0,r(o,(c,l)=>{if(!c){if(LF){let u=o._socket||new ll.Socket({handle:o,writable:!0,readable:!0});LF.deliverSocket(u,e,l),u.resume()}else ON>0?(cl.length===0&&setTimeout(()=>{cl.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,cl.push(o)):(console.log("start up a dynamic thread to handle request"),NN(0));on(!1,"socket-routed");return}c.requests++;let _=o.fd;if(_>=0)c.postMessage({port:e,fd:_,data:l});else{let u=o._socket||new ll.Socket({handle:o,writable:!0,readable:!0});_ue(u,c,e)}on(!0,"socket-routed")})};let s=Mo();Ym.info(`HarperDB ${s.version} Server running on port ${e}`)}return n.on("error",s=>{console.error("Error in socket server",s)}),process.env._UNREF_SERVER&&n.unref(),n}function yN(e,t){let r,n=0;for(let s of al){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=km)return km=i,t(r);n=i}km=0,t(r)}function aue(e,t){let r={};e.getpeername(r);let n=r.address,s=ul.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);yN(e,o=>{ul.set(n,{worker:o,lastUsed:i}),t(o)})}function cue(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new ll.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",o=>{n.readStop();let l=o.toString("latin1").match(t)?.[1],_=ul.get(l),u=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=u,s(_.worker);yN(n,d=>{ul.set(l,{worker:d,lastUsed:u}),s(d,o)})})}a(r,"findByHeaderAffinity")}function BF(){km=0;for(let e of al)e.expectedIdle=e.recentELU.idle+lue,e.requests=1;al.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function _ue(e,t,r){let n=uue++;t.postMessage({port:r,requestId:n,event:"connection"}),e.on("data",s=>{let i=s.toString("latin1");t.postMessage({port:r,requestId:n,data:i,event:"data"})}).on("close",s=>{t.postMessage({port:r,requestId:n,event:"close",hadError:s})}).on("error",s=>{t.postMessage({port:r,requestId:n,event:"error",error:s})}).on("drain",s=>{t.postMessage({port:r,requestId:n,event:"drain",error:s})}).on("end",()=>{t.postMessage({port:r,requestId:n,event:"end"})}).resume(),$m.set(n,s=>{s.event=="data"&&e.write(Buffer.from(s.data,"latin1")),s.event=="end"&&(e.end(s.data&&Buffer.from(s.data,"latin1")),$m.delete(n)),s.event=="destroy"&&(e.destroy(),$m.delete(n))})}var To,ll,Vm,Ym,Km,PF,MF,al,cl,UF,LF,ON,vF,iue,bN,km,DF,ul,lue,$m,uue,qm=Ne(()=>{To=B(et()),ll=require("net"),Vm=B(C()),Ym=B(q()),Km=require("fs");ui();PF=require("worker_threads"),MF=B(sa()),al=[],cl=[],UF=[],ON=0,vF=[];PF.isMainThread&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});iue=6e5;a(oue,"startHTTPThreads");a(NN,"startHTTPWorker");a(fN,"startSocketServer");km=0;a(yN,"findMostIdleWorker");DF=36e5,ul=new Map;a(aue,"findByRemoteAddressAffinity");a(cue,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of ul)r.lastUsed+DF<e&&ul.delete(t)},DF).unref();lue=1e3;a(BF,"updateWorkerIdleness");(0,To.setMonitorListener)(BF);$m=new Map,uue=1;a(_ue,"proxySocket")});var xF=T((Abe,qF)=>{"use strict";var Qm=J();Qm.initSync();var Wm=C(),{httpRequest:due}=Y(),fue=require("path"),HF=require("fs-extra"),Eue=require("yaml"),hue={describe_table:!0,describe_all:!0,describe_database:!0,list_users:!0,list_roles:!0,drop_role:!0,add_user:!0,alter_user:!0,drop_user:!0,restart_service:!0,restart:!0,create_database:!0,drop_database:!0,create_table:!0,drop_table:!0,create_attribute:!0,drop_attribute:!0,search_by_id:!0,delete:!0,search_by_value:!0,csv_file_load:!0,csv_url_load:!0,cluster_get_routes:!0,cluster_network:!0,cluster_status:!0,remove_node:!0,add_component:!0,deploy_component:!0,package_component:!0,drop_component:!0,get_components:!0,get_component_file:!0,set_component_file:!0,registration_info:!0,get_fingerprint:!0,set_license:!0,get_job:!0,search_jobs_by_start_date:!0,read_log:!0,read_transaction_log:!0,read_audit_log:!0,delete_transaction_logs_before:!0,purge_stream:!0,delete_records_before:!0,install_node_modules:!0,set_configuration:!0,get_configuration:!0,create_authentication_tokens:!0,refresh_operation_token:!0,system_information:!0,sql:!0};qF.exports={cliOperations:pue,buildRequest:mue};function mue(){let e={};for(let t of process.argv){if(hue[t]){e.operation=t;continue}if(t.includes("=")){let[r,...n]=t.split("=");n=n.join("=");try{n=JSON.parse(n)}catch{}e[r]=n}}return e}a(mue,"buildRequest");async function pue(e){await HF.exists(fue.join(Qm.get(Wm.CONFIG_PARAMS.ROOTPATH),Wm.HDB_PID_FILE))||(console.error("HarperDB must be running to perform this operation"),process.exit()),await HF.exists(Qm.get(Wm.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET))||(console.error("No domain socket found, unable to perform this operation"),process.exit());try{let t=await due({method:"POST",protocol:"http:",socketPath:Qm.get(Wm.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET),headers:{"Content-Type":"application/json"}},e);t=JSON.parse(t.body),e.json?console.log(JSON.stringify(t,null,2)):console.log(Eue.stringify(t).trim())}catch(t){let r="Error: ";t?.response?.data?.error?r+=t.response.data.error:t?.response?.data?r+=t?.response?.data:r+=t.message,console.error(r)}}a(pue,"cliOperations")});var CN=T((Nbe,GF)=>{"use strict";var id=J();id.initSync();var _l=require("fs-extra"),wN=require("path"),dl=C(),Sue=require("crypto"),Tue=require("uuid").v4;GF.exports=gue;function gue(){if(id.getHdbBasePath()!==void 0){let e=wN.join(id.getHdbBasePath(),dl.LICENSE_KEY_DIR_NAME,dl.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=wN.join(id.getHdbBasePath(),dl.LICENSE_KEY_DIR_NAME,dl.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=wN.join(id.getHdbBasePath(),dl.LICENSE_KEY_DIR_NAME,dl.JWT_ENUM.JWT_PASSPHRASE_NAME);try{_l.accessSync(r),_l.accessSync(e),_l.accessSync(t)}catch(n){if(n.code==="ENOENT"){let s=Tue(),i=Sue.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:s}});_l.writeFileSync(r,s),_l.writeFileSync(e,i.privateKey),_l.writeFileSync(t,i.publicKey)}else throw n}}}a(gue,"checkJWTTokenExist")});var kF=T((ybe,FF)=>{"use strict";var LN=class{static{a(this,"HdbInfoInsertObject")}constructor(t,r,n){this.info_id=t,this.data_version_num=r,this.hdb_version_num=n}};FF.exports={HdbInfoInsertObject:LN}});var YF=T((wbe,VF)=>{"use strict";var $F=C(),DN=class{static{a(this,"UpgradeObject")}constructor(t,r){this[$F.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[$F.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};VF.exports={UpgradeObject:DN}});var jm=T((Lbe,WF)=>{"use strict";var Fn=require("prompt"),fl=require("chalk"),KF=q(),Es=require("os"),PN=Do(),MN=["yes","y"];async function Rue(e){let t=`${Es.EOL}`+fl.bold.green("Your current HarperDB version requires that we complete an update process.")+`${Es.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Es.EOL}${Es.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${Es.EOL}`;Fn.override=PN(["CONFIRM_UPGRADE"]),Fn.start(),Fn.message=t;let r={properties:{CONFIRM_UPGRADE:{description:fl.magenta(`${Es.EOL}[CONFIRM_UPGRADE] Do you want to upgrade your HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n;try{n=await Fn.get([r])}catch(s){return KF.error("There was an error when prompting user about an upgrade."),KF.error(s),!1}return MN.includes(n.CONFIRM_UPGRADE)}a(Rue,"forceUpdatePrompt");async function Aue(e){let t=`${Es.EOL}`+fl.bold.green(`Your installed HarperDB version is older than the version used to create your data. Downgrading is not recommended as it is not tested and guaranteed to work. However, if you need to downgrade, and a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Es.EOL}`);Fn.override=PN(["CONFIRM_DOWNGRADE"]),Fn.start(),Fn.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:fl.magenta(`${Es.EOL}[CONFIRM_DOWNGRADE] Do you want to proceed with using your downgraded HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n=await Fn.get([r]);return MN.includes(n.CONFIRM_DOWNGRADE)}a(Aue,"forceDowngradePrompt");async function Oue(){let e=`${Es.EOL}`+fl.bold.green("We now require a Certifacte Authority certificate. HarperDB can generate all new certificates for you (your existing certificates will be backed up) or you can keep any existing certificates and add your own CA certificate. To add your own CA certificate set the <certificateAuthority> parameter in harperdb-config.yaml");Fn.override=PN(["GENERATE_CERTS"]),Fn.start(),Fn.message=e;let t={properties:{GENERATE_CERTS:{description:fl.magenta(`${Es.EOL}[GENERATE_CERTS] Do you want HarperDB to generate all new certificates? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"yes",required:!0}}},r=await Fn.get([t]);return MN.includes(r.GENERATE_CERTS)}a(Oue,"upgradeCertsPrompt");WF.exports={forceUpdatePrompt:Rue,forceDowngradePrompt:Aue,upgradeCertsPrompt:Oue}});var vN=T((Pbe,QF)=>{"use strict";var UN=class{static{a(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};QF.exports=UN});var zF=T((qbe,jF)=>{"use strict";var Nue=Y(),bue=St(),Ube=q(),vbe=require("path"),Bbe=require("fs"),Hbe=C();jF.exports={getOldPropsValue:yue};function yue(e,t,r=!1){let n=t.getRaw(e);return Nue.isNotEmptyAndHasValue(n)?n:r?bue.getDefaultConfig(e):""}a(yue,"getOldPropsValue")});var ek=T((Gbe,ZF)=>{"use strict";var go=require("path"),Ro=require("fs-extra"),Iue=require("properties-reader"),wue=vN(),Dt=q(),{getOldPropsValue:Ke}=zF(),{HDB_SETTINGS_NAMES:ee,CONFIG_PARAMS:qa}=C(),xa=St(),zm=J(),JF=Y(),Vs=C(),BN=new wue("3.1.0"),XF=[];function Cue(){let e=Iue(zm.get(ee.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),Dt.info(t);let r=` ;Settings for the HarperDB process.
|
|
27
|
+
`},compressible:!1,q:.8});Kt.set("application/x-www-form-urlencoded",{deserialize(e){let t={};for(let[r,n]of new URLSearchParams(e))if(t.hasOwnProperty(r)){let s=t[r];Array.isArray(s)?s.push(n):t.key=[s,n]}else t[r]=n},serialize(e){let t=new URLSearchParams;for(let r in e)t.set(r,e);return t.toString()}});Vq={type:"application/json",serializeStream:ju,serialize:F_,deserialize:boe,q:.8};Kt.set("*/*",Vq);Kt.set("",Vq);a(boe,"tryJSONParse");a(RO,"registerContentHandlers");yoe=require("fastify-plugin"),Ioe=yoe(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=cp(n.raw);s.type(c),s.serializer(function(l){return(o.serializeStream||o.serialize)(l,{headers:{set:(_,u)=>{s.header(_,u)}}})})}),r()},{name:"content-type-negotiation"});a(cp,"findBestSerializer");Gq=mO.default.get(SO.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(lp,"serialize");a(ho,"serializeMessage");a(woe,"streamToBuffer");a(La,"getDeserializer");a(xq,"deserializerUnknownType");a(Coe,"transformIterable")});function zq(e){let t={openapi:Loe,info:{title:"HarperDB HTTP REST interface",version:(0,jq.version)()},paths:{},components:{schemas:{},securitySchemes:{basicAuth:{type:"http",scheme:"basic"},bearerAuth:{type:"http",scheme:"bearer",bearerFormat:"JWT"}}}},r=[{basicAuth:[],bearerAuth:[]}];for(let[,n]of e){if(!n.path)continue;let{path:s}=n,i=s.split("/").slice(-1),{attributes:o,primaryKey:c,prototype:l}=n.Resource;if(c=c??"id",!c)continue;let _={},u=[];if(o)for(let{type:A,name:P,elements:v,relationship:U,definition:F}of o){if(U)A==="array"?_[P]={type:"array",items:{$ref:So+v.type}}:_[P]={$ref:So+A};else{let H=F??v?.definition;if(H){if(!t.components.schemas[H.type]){let j={};H.properties.forEach(z=>{j[z.name]=new bO(AO[z.type],z.type)}),t.components.schemas[H.type]=new Qq(j)}A==="array"?_[P]={type:"array",items:{$ref:So+H.type}}:_[P]={$ref:So+H.type}}else A==="array"?v.type==="Any"||v.type=="ID"?_[P]={type:"array",items:{format:v.type}}:_[P]={type:"array",items:new bO(AO[v.type],v.type)}:A==="Any"||A=="ID"?_[P]={format:A}:_[P]=new bO(AO[A],A)}u.push(new yO(P,"query",_[P]))}let d=Object.keys(_),f=new yO(c,"path",{format:"ID"});f.required=!0,f.description="primary key of record";let E=new yO("property","path",{enum:d});E.required=!0,t.components.schemas[i]=new Qq(_);let h=l.post!==Resource.prototype.post||l.update,m=typeof l.put=="function",S=typeof l.get=="function",R=typeof l.delete=="function",g="/"+s+"/";h&&(t.paths[g]={},t.paths[g].post=new Doe(i,r,"create a new record auto-assigning a primary key")),S&&(t.paths[g]||(t.paths[g]={}),t.paths[g].get=new OO(u,r,{200:new NO({$ref:So+i})},"search for records by the specified property name and value pairs")),R&&(t.paths[g]||(t.paths[g]={}),t.paths[g].delete=new Wq(u,r,"delete all the records that match the provided query",{204:new Kq})),g="/"+s+"/{"+c+"}",S&&(t.paths[g]={},t.paths[g].get=new OO([f],r,{200:new NO({$ref:So+i})},"retrieve a record by its primary key")),m&&(t.paths[g]||(t.paths[g]={}),t.paths[g].put=new Poe([f],r,i,"create or update the record with the URL path that maps to the record's primary key")),R&&(t.paths[g]||(t.paths[g]={}),t.paths[g].delete=new Wq([f],r,"delete a record with the given primary key",{204:new Kq})),S&&E.schema.enum.length>0&&(g="/"+s+"/{"+c+"}.{property}",t.paths[g]={},t.paths[g].get=new OO([f,E],r,{200:new NO({enum:d})},"used to retrieve the specified property of the specified record"))}return t}function Doe(e,t,r){this.description=r,this.requestBody={content:{"application/json":{schema:{$ref:So+e}}}},this.security=t,this.responses={200:{description:IO,headers:{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}},content:{"application/json":{schema:{type:"string",format:"ID"}}}}}}function OO(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function NO(e){this.description=IO,this.content={"application/json":{schema:e}}}function Kq(){this.description="successfully processed request, no content returned to client"}function Poe(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:So+r}}}},this.responses={200:{description:IO}}}function Wq(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function Qq(e){this.type="object",this.properties=e}function bO(e,t){this.type=e,this.format=t}function yO(e,t,r){this.name=e,this.in=t,this.schema=r}var jq,Loe,AO,So,IO,Jq=Ne(()=>{jq=q(Fi()),Loe="3.0.3",AO={Int:"integer",Float:"number",Long:"integer",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer",array:"array"},So="#/components/schemas/",IO="successful operation";a(zq,"generateJsonApi");a(Doe,"Post");a(OO,"Get");a(NO,"Response200");a(Kq,"Response204");a(Poe,"Put");a(Wq,"Delete");a(Qq,"ResourceSchema");a(bO,"Type");a(yO,"Parameter")});var _p={};$e(_p,{start:()=>voe});async function Uoe(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&df(e);let s=new ro;try{e.responseHeaders=s;let i=e.url.slice(1),o,c;if(i!==Xq){let h=up.getMatch(i);if(!h)return t(e);e.handlerPath=h.path,o={url:h.relativeURL,async:!0},c=h.Resource}let l=r["cache-control"];if(l){l=l.toLowerCase();let h=l.match(/max-age=(\d+)/)?.[1];h&&(e.expiresAt=h*1e3+Date.now()),l.includes("only-if-cached")&&(e.onlyIfCached=!0),l.includes("no-cache")&&(e.noCache=!0),l.includes("no-store")&&(e.noCacheStore=!0),l.includes("stale-if-error")&&(e.staleIfError=!0),l.includes("must-revalidate")&&(e.mustRevalidate=!0)}let _=await Ze(e,()=>{if(n==="POST"||n==="PUT"||n==="PATCH"||n==="QUERY")try{e.data=La(r["content-type"],!0)(e.body)}catch(h){throw new Zc.ClientError(h,400)}if(e.authorize=!0,i===Xq&&n==="GET"){if(e?.user?.role?.permission?.super_user)return zq(up);throw new Zc.ServerError("Forbidden",403)}switch(n){case"GET":case"HEAD":return c.get(o,e);case"POST":return c.post(o,e.data,e);case"PUT":return c.put(o,e.data,e);case"DELETE":return c.delete(o,e);case"PATCH":return c.patch(o,e.data,e);case"OPTIONS":s.setIfNone("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return c.connect(o,null,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return c.query(o,e.data,e);case"COPY":return c.copy(o,r.destination,e);case"MOVE":return c.move(o,r.destination,e);case"BREW":throw new Zc.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new Zc.ServerError(`Method ${n} is not recognized`,501)}}),u=200,d;if(_==null)u=n==="GET"||n==="HEAD"?404:204,wO.lastModified&&e.lastModified&&s.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(d=e.lastModified){Moe[0]=d;let h=String.fromCharCode(34,(Zt[0]&63)+62,(Zt[0]>>6)+(Zt[1]<<2&63)+62,(Zt[1]>>4)+(Zt[2]<<4&63)+62,(Zt[2]>>2)+62,(Zt[3]&63)+62,(Zt[3]>>6)+(Zt[4]<<2&63)+62,(Zt[4]>>4)+(Zt[5]<<4&63)+62,(Zt[5]>>2)+62,(Zt[6]&63)+62,(Zt[6]>>6)+(Zt[7]<<2&63)+62,34),m=r["if-none-match"];m&&h==m?(_?.onDone&&_.onDone(),u=304,_=void 0):s.setIfNone("ETag",h),wO.lastModified&&s.setIfNone("Last-Modified",new Date(d).toUTCString())}e.createdResource&&(u=201),e.newLocation&&s.setIfNone("Location",e.newLocation);let f={status:u,headers:s,body:void 0},E=_?.wasLoadedFromSource?.();return E!==void 0&&(f.wasCacheMiss=E,!E&&d&&s.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||d))/1e3))),_!==void 0&&(f.body=lp(_,e,f),n==="HEAD"&&(f.body=void 0)),f}catch(i){i.statusCode?i.statusCode===500?Da.warn(i):Da.info(i):Da.error(i),i.statusCode===405&&(i.method&&(i.message+=` to handle HTTP method ${i.method.toUpperCase()||""}`),i.allow&&(i.allow.push("trace","head","options"),s.setIfNone("Allow",i.allow.map(c=>c.toUpperCase()).join(", "))));let o={status:i.statusCode||500,headers:s,body:void 0};return o.body=lp(i.contentType?i:i.toString(),e,o),o}}function voe(e){wO=e,!Zq&&(Zq=!0,up=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return Uoe(t,r)}),e.server.ws(async(t,r,n)=>{$_++;let s=new Wn;eG||(eG=!0,Pu(u=>{$_>0&&u.push({metric:"ws-connections",connections:$_,byThread:!0})}));let i;t.on("error",u=>{i=!0,Da.warn(u)});let o;t.on("message",a(function(d){o||(o=La(r.headers.asObject["content-type"]));let f=o(d);s.push(f)},"message"));let c;t.on("close",()=>{$_--,Dn(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()}),await n;let l=r.url.slice(1),_=up.getMatch(l);if(Dn(!!_,"connection","ws","connect"),!_)t.send(ho(`No resource was found to handle ${r.pathname}`,r));else{r.handlerPath=_.path,on(h=>({count:h.count,total:$_}),"connections",r.handlerPath,"connect","ws");let u={url:_.relativeURL,async:!0},d=_.Resource;c=(await Ze(r,()=>d.connect(u,s,r)))[Symbol.asyncIterator]();let E;for(;!(E=await c.next()).done;){let h=ho(E.value,r);t.send(h),on(h.length,"bytes-sent",r.handlerPath,"message","ws")}}t.close()}))}var Da,Zc,Zt,Moe,wO,Xq,Zq,up,eG,$_,tG=Ne(()=>{Kc();ui();Da=q(x()),Zc=q(ie());ff();Fl();$o();Uu();Jq();Zt=new Uint8Array(8),Moe=new Float64Array(Zt.buffer,0,1),wO={},Xq="openapi";a(Uoe,"http");$_=0;a(voe,"start")});var CO=T((DNe,rG)=>{var{recordAction:dp,recordActionBinary:Boe}=(ui(),oe(Mu)),Hoe=require("fastify-plugin"),qoe=200;rG.exports=Hoe(function(e,t,r){e.addHook("onResponse",async(n,s)=>{s.getResponseTime()}),e.addHook("onSend",async(n,s,i)=>{let o=s.getResponseTime(),c=performance.now(),l=s.request.routeOptions,_,u,d;l.config?.isOperation?(_=n.body?.operation,u="operation"):(_=l.url,u="fastify-route",d=l.method),dp(o,"duration",_,d,u),Boe(s.raw.statusCode<400,"success",_,d,u);let f=qoe;i?.pipe?(i.on("data",h=>{f+=h.length}),i.on("end",()=>{dp(performance.now()-c,"transfer",_,d,u),dp(f,"bytes-sent",_,d,u)})):(f+=i?.length||0,dp(f,"bytes-sent",_,d,u));let E=o.toFixed(3);s.header("Server-Timing",`db;dur=${E}`)}),r()},{name:"hdb-request-time"})});var vO=T((UNe,oG)=>{var pp=require("clone"),mp=rt(),Goe=K(),Ep=C(),PNe=x(),LO=require("fs"),PO=require("joi"),{string:hp}=PO.types(),{hdb_errors:xoe,handleHDBError:fp}=ie(),{HDB_ERROR_MSGS:MNe,HTTP_STATUS_CODES:DO}=xoe,{common_validators:el}=ys(),nG=" is required",Foe=["insert","update","upsert"],MO={database:{presence:!1,format:el.schema_format,length:el.schema_length},schema:{presence:!1,format:el.schema_format,length:el.schema_length},table:{presence:!0,format:el.schema_format,length:el.schema_length},action:{inclusion:{within:Foe,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},koe={schema:hp.required(),table:hp.required(),action:hp.valid("insert","update","upsert")},{AWS_ACCESS_KEY:$oe,AWS_SECRET:Voe,AWS_BUCKET:Yoe,AWS_FILE_KEY:Koe,REGION:Woe}=Ep.S3_BUCKET_AUTH_KEYS,Qoe={s3:{presence:!0},[`s3.${$oe}`]:{presence:!0,type:"String"},[`s3.${Voe}`]:{presence:!0,type:"String"},[`s3.${Yoe}`]:{presence:!0,type:"String"},[`s3.${Koe}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${Woe}`]:{presence:!0,type:"String"}},sG=pp(MO);sG.data.presence={message:nG};var iG=pp(MO);iG.file_path.presence={message:nG};var joe=Object.assign(pp(MO),Qoe),UO=pp(koe);UO.csv_url=hp.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();UO.passthrough_headers=PO.object();function zoe(e){let t=mp.validateObject(e,sG);return Sp(e,t)}a(zoe,"dataObject");function Joe(e){let t=mp.validateBySchema(e,PO.object(UO));return Sp(e,t)}a(Joe,"urlObject");function Xoe(e){let t=mp.validateObject(e,iG);return Sp(e,t)}a(Xoe,"fileObject");function Zoe(e){let t=mp.validateObject(e,joe);return Sp(e,t)}a(Zoe,"s3FileObject");function Sp(e,t){if(!t){let r=Goe.checkGlobalSchemaTable(e.schema,e.table);if(r)return fp(new Error,r,DO.BAD_REQUEST);if(e.operation===Ep.OPERATIONS_ENUM.CSV_FILE_LOAD)try{LO.accessSync(e.file_path,LO.constants.R_OK|LO.constants.F_OK)}catch(n){return n.code===Ep.NODE_ERROR_CODES.ENOENT?fp(n,`No such file or directory ${n.path}`,DO.BAD_REQUEST):n.code===Ep.NODE_ERROR_CODES.EACCES?fp(n,`Permission denied ${n.path}`,DO.BAD_REQUEST):fp(n)}}return t}a(Sp,"postValidateChecks");oG.exports={dataObject:zoe,urlObject:Joe,fileObject:Xoe,s3FileObject:Zoe}});var BO=T((BNe,aG)=>{"use strict";var V_=x(),Tp=C();async function eae(e,t,r,n=void 0){if(!e||typeof e!="function")throw new Error("Invalid function parameter");let s;try{return s=await e(t),r&&await r(t,s,n),t.operation===Tp.OPERATIONS_ENUM.INSERT||t.operation===Tp.OPERATIONS_ENUM.UPDATE||t.operation===Tp.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===Tp.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(V_.info(i.message),i):i.http_resp_msg?(V_.error(`Error calling operation: ${e.name}`),V_.error(i.http_resp_msg),i):(V_.error(`Error calling operation: ${e.name}`),V_.error(i),i)}}a(eae,"callOperationFunctionAsAwait");aG.exports={callOperationFunctionAsAwait:eae}});var lG=T((qNe,cG)=>{"use strict";var HO=class{static{a(this,"BulkLoadFileObject")}constructor(t,r,n,s,i,o,c=null){this.op=t,this.action=r,this.schema=n,this.table=s,this.file_path=i,this.file_type=o,this.role_perms=c}},qO=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};cG.exports={BulkLoadFileObject:HO,BulkLoadDataObject:qO}});var _G=T((xNe,uG)=>{"use strict";var GO=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};uG.exports=GO});var YO=T((KNe,wG)=>{"use strict";var gp=br(),Ap=vO(),tae=require("needle"),_s=C(),kNe=et(),tl=K(),{handleHDBError:lt,hdb_errors:gG}=ie(),{HTTP_STATUS_CODES:er,HDB_ERROR_MSGS:Ht,CHECK_LOGS_WRAPPER:Ma}=gG,rl=x(),xO=require("papaparse");tl.promisifyPapaParse();var ds=require("fs-extra"),rae=require("path"),{chain:dG}=require("stream-chain"),fG=require("stream-json/streamers/StreamArray"),EG=require("stream-json/utils/Batch"),hG=require("stream-chain/utils/comp"),{finished:pG}=require("stream"),nae=X(),RG=BO(),sae=fO(),{BulkLoadFileObject:kO,BulkLoadDataObject:iae}=lG(),$O=nO(),{verifyBulkLoadAttributePerms:AG}=np(),$Ne=_G(),VNe=ht(),YNe=li(),{databases:oae}=(ge(),oe(Fe)),{coerceType:aae}=(OE(),oe(Fg)),mG="No records parsed from csv file.",Pa=`${nae.get("HDB_ROOT")}/tmp`,{schema_regex:cae}=ys(),SG=1024*1024*2,TG=5e3,lae={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};wG.exports={csvDataLoad:uae,csvURLLoad:_ae,csvFileLoad:dae,importFromS3:fae};async function uae(e,t){let r=Ap.dataObject(e);if(r)throw lt(r,r.message,er.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=bG(e.schema,e.table),i=xO.parse(e.data,{header:!0,skipEmptyLines:!0,transform:FO.bind(null,s),dynamicTyping:!1}),o=new $O;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&AG(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 lt(new Error,c,er.BAD_REQUEST,void 0,void 0,!0);let l=new iae(e.action,e.schema,e.table,i.data);return n=await RG.callOperationFunctionAsAwait(yG,l,null),n.message===mG?mG:IG(n.records,n.number_written)}catch(s){throw Ua(s)}}a(uae,"csvDataLoad");async function _ae(e){let t=Ap.urlObject(e);if(t)throw lt(t,t.message,er.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${Pa}/${r}`;try{await Eae(e,r)}catch(s){throw rl.error(Ht.DOWNLOAD_FILE_ERR(r)+" - "+s),lt(s,Ma(Ht.DOWNLOAD_FILE_ERR(r)))}try{let s=new kO(this.job_operation_function.name,e.action,e.schema,e.table,n,_s.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await VO(s);return await Rp(n),i}catch(s){throw await Rp(n),Ua(s)}}a(_ae,"csvURLLoad");async function dae(e){let t=Ap.fileObject(e);if(t)throw lt(t,t.message,er.BAD_REQUEST,void 0,void 0,!0);let r=new kO(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,_s.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await VO(r)}catch(n){throw Ua(n)}}a(dae,"csvFileLoad");async function fae(e){let t=Ap.s3FileObject(e);if(t)throw lt(t,t.message,er.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=rae.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${Pa}/${s}`;let i=new kO(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user.role.permission);await hae(s,e);let o=await VO(i);return await Rp(r),o}catch(n){throw await Rp(r),Ua(n)}}a(fae,"importFromS3");async function Eae(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await tae("get",e.csv_url,n)}catch(n){let s=`Error downloading CSV file from ${e.csv_url}, status code: ${n.statusCode}. Check the log for more information.`;throw lt(n,s,n.statusCode,_s.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}mae(r,e.csv_url),await pae(t,r.raw)}a(Eae,"downloadCSVFile");async function hae(e,t){try{let r=`${Pa}/${e}`;await ds.mkdirp(Pa),await ds.writeFile(`${Pa}/${e}`,"",{flag:"a+"});let n=await ds.createWriteStream(r),s=await sae.getFileStreamFromS3(t);await new Promise((i,o)=>{s.on("error",function(c){o(c)}),s.pipe(n).on("error",function(c){o(c)}).on("close",function(){rl.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw rl.error(Ht.S3_DOWNLOAD_ERR+" - "+r),lt(r,Ma(Ht.S3_DOWNLOAD_ERR))}}a(hae,"downloadFileFromS3");async function pae(e,t){try{await ds.mkdirp(Pa),await ds.writeFile(`${Pa}/${e}`,t)}catch(r){throw rl.error(Ht.WRITE_TEMP_FILE_ERR),lt(r,Ma(Ht.DEFAULT_BULK_LOAD_ERR))}}a(pae,"writeFileToTempFolder");async function Rp(e){if(e)try{await ds.access(e),await ds.unlink(e)}catch{rl.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(Rp,"deleteTempFile");function mae(e,t){if(e.statusCode!==gG.HTTP_STATUS_CODES.OK)throw lt(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,er.BAD_REQUEST);if(!lae[e.headers["content-type"]])throw lt(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,er.BAD_REQUEST);if(!e.raw)throw lt(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,er.BAD_REQUEST)}a(mae,"validateURLResponse");async function VO(e){try{let t;switch(e.file_type){case _s.VALID_S3_FILE_TYPES.CSV:t=await Sae(e);break;case _s.VALID_S3_FILE_TYPES.JSON:t=await Tae(e);break;default:throw lt(new Error,Ht.DEFAULT_BULK_LOAD_ERR,er.BAD_REQUEST,_s.LOG_LEVELS.ERROR,Ht.INVALID_FILE_EXT_ERR(e))}return IG(t.records,t.number_written)}catch(t){throw Ua(t)}}a(VO,"fileLoad");async function OG(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;s&&s.pause();let o={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await gp.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&AG(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let l=lt(c);r(l)}}a(OG,"validateChunk");async function NG(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;tl.autoCastJSONDeep(i),s&&s.pause();let o=n.meta?n.meta.fields:null;if(o)i.forEach(c=>{!tl.isEmpty(c)&&!tl.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(l=>{Object.keys(l).forEach(_=>c.add(_))}),o=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},l=await RG.callOperationFunctionAsAwait(yG,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=lt(c,Ma(Ht.INSERT_CSV_ERR),er.INTERNAL_SERVER_ERROR,_s.LOG_LEVELS.ERROR,Ht.INSERT_CSV_ERR+" - "+c);r(l)}}a(NG,"insertChunk");async function Sae(e){let t={records:0,number_written:0},r=bG(e.schema,e.table);try{let n=new $O,s=ds.createReadStream(e.file_path,{highWaterMark:SG});s.setEncoding("utf8"),await xO.parsePromise(s,OG.bind(null,e,n),FO.bind(null,r));let i=n.getPermsResponse();if(i)throw lt(new Error,i,er.BAD_REQUEST);return s=ds.createReadStream(e.file_path,{highWaterMark:SG}),s.setEncoding("utf8"),await xO.parsePromise(s,NG.bind(null,e,t),FO.bind(null,r)),s.destroy(),t}catch(n){throw lt(n,Ma(Ht.PAPA_PARSE_ERR),er.INTERNAL_SERVER_ERROR,_s.LOG_LEVELS.ERROR,Ht.PAPA_PARSE_ERR+n)}}a(Sae,"callPapaParse");function bG(e,t){let r=oae[e][t].attributes,n=new Map;for(let s of r)s.type&&n.set(s.name,i=>aae(i,s));return n}a(bG,"createTransformMap");function FO(e,t,r){let n=e.get(r);return n?n(t):tl.autoCast(t)}a(FO,"typeFunction");async function Tae(e){let t={records:0,number_written:0},r=a(n=>{throw n},"throwErr");try{let n=new $O,s=dG([ds.createReadStream(e.file_path,{encoding:"utf-8"}),fG.withParser(),c=>c.value,new EG({batchSize:TG}),hG(async c=>{await OG(e,n,r,c)})]);await new Promise((c,l)=>{pG(s,_=>{_?l(_):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw lt(new Error,i,er.BAD_REQUEST);let o=dG([ds.createReadStream(e.file_path,{encoding:"utf-8"}),fG.withParser(),c=>c.value,new EG({batchSize:TG}),hG(async c=>{await NG(e,t,r,c)})]);return await new Promise((c,l)=>{pG(o,_=>{_?l(_):c()}),o.resume()}),t}catch(n){throw lt(n,Ma(Ht.INSERT_JSON_ERR),er.INTERNAL_SERVER_ERROR,_s.LOG_LEVELS.ERROR,Ht.INSERT_JSON_ERR+n)}}a(Tae,"insertJson");async function yG(e){let t={};try{e.data&&e.data.length>0&&gae(e.data[0])?t=await Rae(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",rl.info(t.message))}catch(r){throw Ua(r)}return t}a(yG,"callBulkFileLoad");function gae(e){let t=Object.keys(e);for(let r of t)if(!cae.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(gae,"validateColumnNames");async function Rae(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=gp.insert;break;case"update":i=gp.update;break;case"upsert":i=gp.upsert;break;default:throw lt(new Error,Ht.INVALID_ACTION_PARAM_ERR(n),er.BAD_REQUEST,_s.LOG_LEVELS.ERROR,Ht.INVALID_ACTION_PARAM_ERR(n))}try{let o=await i(s),c;switch(n){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 u=global.hdb_schema[t][r].hash_attribute,d=e.length;for(;d--;)o.skipped_hashes.indexOf(e[d][u])>=0&&e.splice(d,1)}let l=tl.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:o.new_attributes}}catch(o){throw Ua(o)}}a(Rae,"bulkFileLoad");function IG(e,t){return`successfully loaded ${t} of ${e} records`}a(IG,"buildResponseMsg");function Ua(e){return lt(e,Ma(Ht.DEFAULT_BULK_LOAD_ERR),er.INTERNAL_SERVER_ERROR,_s.LOG_LEVELS.ERROR,Ht.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(Ua,"buildTopLevelErrMsg")});var LG=T((QNe,CG)=>{"use strict";var KO=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};CG.exports=KO});var MG=T((zNe,PG)=>{"use strict";var Aae=C(),DG=require("moment"),Oae=require("uuid").v4,WO=class{static{a(this,"JobObject")}constructor(){this.id=Oae(),this.type=void 0,this.start_datetime=DG().valueOf(),this.created_datetime=DG().valueOf(),this.end_datetime=void 0,this.status=Aae.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};PG.exports=WO});var QO=T((XNe,GG)=>{"use strict";var Nae=require("uuid").v4,BG=br(),HG=nr(),bae=Zn(),yae=hc(),Iae=LG(),ut=C(),wae=MG(),Cae=rh(),xn=x(),Lae=iu(),nl=K(),{promisify:Dae}=require("util"),va=require("moment"),Pae=ip(),Op=vO(),UG=ng(),{deleteTransactionLogsBeforeValidator:Mae}=XA(),{handleHDBError:Uae,hdb_errors:vae}=ie(),{HTTP_STATUS_CODES:Bae}=vae,vG=HG.searchByValue,Hae=HG.searchByHash,qae=BG.insert,Gae=Dae(Pae.evaluateSQL),xae=BG.update;GG.exports={addJob:$ae,updateJob:Yae,handleGetJob:Fae,handleGetJobsByStartDate:kae,getJobById:qG};async function Fae(e){try{let t=await qG(e.id);return nl.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 xn.error("There was an error getting job",t),new Error(r)}}a(Fae,"handleGetJob");async function kae(e){try{let t=await Vae(e);if(xn.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=va(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=va(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 xn.error(r),new Error(r)}}a(kae,"handleGetJobsByStartDate");async function $ae(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||nl.isEmptyOrZeroLength(e.operation)){let u="job parameter is invalid";return xn.info(u),t.error=u,t}if(!ut.JOB_TYPE_ENUM[e.operation])return xn.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case ut.OPERATIONS_ENUM.CSV_FILE_LOAD:n=Op.fileObject(e);break;case ut.OPERATIONS_ENUM.CSV_URL_LOAD:n=Op.urlObject(e);break;case ut.OPERATIONS_ENUM.CSV_DATA_LOAD:n=Op.dataObject(e);break;case ut.OPERATIONS_ENUM.IMPORT_FROM_S3:n=Op.s3FileObject(e);break;case ut.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case ut.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=UG(e,"date");break;case ut.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=UG(e,"timestamp");break;case ut.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=Mae(e);break;default:break}if(n)throw Uae(n,n.message,Bae.BAD_REQUEST,void 0,void 0,!0);let s=new wae;s.type=e.operation===ut.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?ut.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user.username;let i=new bae(ut.SYSTEM_SCHEMA_NAME,ut.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),o;try{o=Array.from(await vG(i))}catch(u){let d=`There was an error inserting a new job: ${u}`;return xn.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){s.id=Nae();try{o=await vG(i)}catch(u){let d=`There was an error inserting a new job: ${u}`;return xn.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return xn.error("Error creating a job, could not find a unique job id."),t}s.request=e;let l=new Lae(ut.SYSTEM_SCHEMA_NAME,ut.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),_;try{_=await qae(l)}catch(u){return xn.error(`There was an error inserting a job for job type: ${e.operation} -- ${u}`),t.success=!1,t}if(_.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${s.operation} and id ${s.id}`;else{let u=`Created a job with type ${s.type} and id ${s.id}`;t.message=u,t.createdJob=s,t.success=!0,xn.trace(u)}return t}a($ae,"addJob");async function Vae(e){let t=va(e.from_date,va.ISO_8601),r=va(e.to_date,va.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 n=`select * from system.hdb_job where start_datetime > '${t.valueOf()}' and start_datetime < '${r.valueOf()}'`,s=new Iae(n,e.hdb_user);try{return await Gae(s)}catch(i){throw xn.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(Vae,"getJobsInDateRange");async function qG(e){if(nl.isEmptyOrZeroLength(e))return nl.errorizeMessage("Invalid job ID specified.");let t=new yae(ut.SYSTEM_SCHEMA_NAME,ut.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await Hae(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return xn.error(n),nl.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(qG,"getJobById");async function Yae(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(nl.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===ut.JOB_STATUS_ENUM.COMPLETE||e.status===ut.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=va().valueOf());let t=new Cae(ut.SYSTEM_SCHEMA_NAME,ut.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await xae(t),r}a(Yae,"updateJob")});var YG=T((ebe,VG)=>{"use strict";var xG=K(),Fr=C(),Kae=require("moment"),Np=YO(),bp=x(),FG=QO(),kG=op(),$G=ta(),Wae=tt(),Qae=Zh(),jO=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function jae(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(xG.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(xG.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Fr.JOB_TYPE_ENUM.csv_file_load:await Oi(e,Np.csvFileLoad);break;case Fr.JOB_TYPE_ENUM.csv_url_load:await Oi(e,Np.csvURLLoad);break;case Fr.JOB_TYPE_ENUM.csv_data_load:await Oi(e,Np.csvDataLoad);break;case Fr.JOB_TYPE_ENUM.import_from_s3:await Oi(e,Np.importFromS3);break;case Fr.JOB_TYPE_ENUM.empty_trash:break;case Fr.JOB_TYPE_ENUM.export_local:await Oi(e,kG.export_local);break;case Fr.JOB_TYPE_ENUM.export_to_s3:await Oi(e,kG.export_to_s3);break;case Fr.JOB_TYPE_ENUM.delete_files_before:case Fr.JOB_TYPE_ENUM.delete_records_before:await Oi(e,$G.deleteFilesBefore);break;case Fr.JOB_TYPE_ENUM.delete_audit_logs_before:await Oi(e,$G.deleteAuditLogsBefore);break;case Fr.JOB_TYPE_ENUM.delete_transaction_logs_before:await Oi(e,Qae.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(jae,"parseMessage");async function Oi(e,t){try{e.job.status=Fr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=Kae().valueOf(),await FG.updateJob(e.job),await zae(e.job.id)}catch(r){let n=r.message!==void 0?r.message:r;typeof n=="string"?(n=`There was an error running ${t.name} job with id ${e.job.id} - ${n}`,r.message=n):bp.error(`There was an error running ${t.name} job with id ${e.job.id}`),bp.error(n),e.job.message=n,e.job.status=Fr.JOB_STATUS_ENUM.ERROR;try{await FG.updateJob(e.job)}catch(s){throw bp.error(`Unable to update job with id ${e.job.id}`),s}throw r}}a(Oi,"runJob");async function zae(e){bp.trace("launching job thread:",e),Wae.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[Fr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(zae,"launchJobThread");VG.exports={parseMessage:jae,RunnerMessage:jO}});var WG=T((rbe,KG)=>{"use strict";var zO=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};KG.exports=zO});var ux=T((sbe,rN)=>{"use strict";var Lp=nr(),ZO=ip(),yp=YO(),Ni=jE(),Ip=zi(),K_=ta(),Jae=CR(),Y_=wr(),wp=ZE(),tr=jh(),Cp=x(),Xae=xR(),Zae=d_(),QG=SA(),ece=Eh(),tce=ph(),rce=gA(),nce=Th(),sce=Rh(),JO=Oh(),jG=op(),ice=np(),eN=QO(),G=C(),{hdb_errors:Q_,handleHDBError:W_}=ie(),{HTTP_STATUS_CODES:zG}=Q_,XO=bh(),JG=Na(),ox=require("util"),sl=br(),oce=Ln(),ace=di(),XG=YG(),ZG=c_(),ex=(Fh(),oe(w_)),tx=Et(),rx=Zh(),nx=Kh(),{setServerUtilities:cce}=(OE(),oe(Fg)),{CONTEXT:lce}=(Qn(),oe(NS)),{_assignPackageExport:uce}=require("../index"),{transformReq:_ce}=K(),{server:dce}=(mr(),oe(Ho)),ur=Cp.loggerWithTag("operation"),fce=BO(),sx=Lp.searchByHash,Ece=Lp.searchByValue,hce=ox.promisify(Lp.search),pce=ox.promisify(ZO.evaluateSQL),mce={[G.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[G.OPERATIONS_ENUM.CREATE_TABLE]:!0,[G.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[G.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[G.OPERATIONS_ENUM.DROP_TABLE]:!0,[G.OPERATIONS_ENUM.DROP_SCHEMA]:!0},Y=WG();async function ax(e,t){try{if(e.body.operation!=="read_log"&&(Cp.log_level===G.LOG_LEVELS.INFO||Cp.log_level===G.LOG_LEVELS.DEBUG||Cp.log_level===G.LOG_LEVELS.TRACE)){let{hdb_user:n,hdb_auth_header:s,password:i,...o}=e.body;ur.info(o)}}catch(n){ur.error(n)}let r=await fce.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return mce[e.body.operation]&&oce.setSchemaDataToGlobal(n=>{n&&ur.error(n)}),r}a(ax,"processLocalTransaction");var ix=Tce();rN.exports={chooseOperation:cx,getOperationFunction:lx,operation:tN,processLocalTransaction:ax};cce(rN.exports);dce.operation=tN;function cx(e){let t;try{t=lx(e)}catch(s){throw ur.error(`Error when selecting operation function - ${s}`),s}let{operation_function:r,job_operation_function:n}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let s=e.operation==="sql"?e.sql:e.search_operation.sql,i=ZO.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let o=ZO.checkASTPermissions(e,i);if(o)throw ur.error(`${zG.FORBIDDEN} from operation ${e.operation}`),ur.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),W_(new Error,o,Q_.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==G.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==G.OPERATIONS_ENUM.LOGIN&&e.operation!==G.OPERATIONS_ENUM.LOGOUT){let s=n===void 0?r:n,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=ice.verifyPerms(i,s);if(o)throw ur.error(`${zG.FORBIDDEN} from operation ${e.operation}`),ur.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),W_(new Error,o,Q_.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw W_(s,"There was an error when trying to choose an operation path")}return r}a(cx,"chooseOperation");function lx(e){if(ur.trace(`getOperationFunction with operation: ${e.operation}`),ix.has(e.operation))return ix.get(e.operation);throw W_(new Error,Q_.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),Q_.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(lx,"getOperationFunction");uce("operation",tN);function tN(e,t){e.hdb_user=this[lce]?.user,e.bypass_auth=!t;let r=cx(e);return ax({body:e},r)}a(tN,"operation");async function Sce(e){ur.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),n=r[0],s=r[1];for(let i of t.transactions)try{i.schema=n,i.table=s,i[G.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case G.OPERATIONS_ENUM.INSERT:o=await sl.insert(i);break;case G.OPERATIONS_ENUM.UPDATE:o=await sl.update(i);break;case G.OPERATIONS_ENUM.UPSERT:o=await sl.upsert(i);break;case G.OPERATIONS_ENUM.DELETE:o=await K_.deleteRecord(i);break;default:ur.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){ur.info("Invalid operation in transaction"),ur.error(o)}}a(Sce,"catchup");async function xs(e){_ce(e);let t,r;try{r=await eN.addJob(e),t=r.createdJob,ur.info("addJob result",r);let n=new XG.RunnerMessage(t,e);return await XG.parseMessage(n),{message:`Starting job with id ${t.id}`,job_id:t.id}}catch(n){let s=`There was an error executing job: ${n.http_resp_msg?n.http_resp_msg:n}`;throw ur.error(s),W_(n,s)}}a(xs,"executeJob");function Tce(){let e=new Map;return e.set(G.OPERATIONS_ENUM.INSERT,new Y(sl.insert)),e.set(G.OPERATIONS_ENUM.UPDATE,new Y(sl.update)),e.set(G.OPERATIONS_ENUM.UPSERT,new Y(sl.upsert)),e.set(G.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new Y(Lp.searchByConditions)),e.set(G.OPERATIONS_ENUM.SEARCH_BY_HASH,new Y(sx)),e.set(G.OPERATIONS_ENUM.SEARCH_BY_ID,new Y(sx)),e.set(G.OPERATIONS_ENUM.SEARCH_BY_VALUE,new Y(Ece)),e.set(G.OPERATIONS_ENUM.SEARCH,new Y(hce)),e.set(G.OPERATIONS_ENUM.SQL,new Y(pce)),e.set(G.OPERATIONS_ENUM.CSV_DATA_LOAD,new Y(xs,yp.csvDataLoad)),e.set(G.OPERATIONS_ENUM.CSV_FILE_LOAD,new Y(xs,yp.csvFileLoad)),e.set(G.OPERATIONS_ENUM.CSV_URL_LOAD,new Y(xs,yp.csvURLLoad)),e.set(G.OPERATIONS_ENUM.IMPORT_FROM_S3,new Y(xs,yp.importFromS3)),e.set(G.OPERATIONS_ENUM.CREATE_SCHEMA,new Y(Ni.createSchema)),e.set(G.OPERATIONS_ENUM.CREATE_DATABASE,new Y(Ni.createSchema)),e.set(G.OPERATIONS_ENUM.CREATE_TABLE,new Y(Ni.createTable)),e.set(G.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new Y(Ni.createAttribute)),e.set(G.OPERATIONS_ENUM.DROP_SCHEMA,new Y(Ni.dropSchema)),e.set(G.OPERATIONS_ENUM.DROP_DATABASE,new Y(Ni.dropSchema)),e.set(G.OPERATIONS_ENUM.DROP_TABLE,new Y(Ni.dropTable)),e.set(G.OPERATIONS_ENUM.DROP_ATTRIBUTE,new Y(Ni.dropAttribute)),e.set(G.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new Y(Ip.describeSchema)),e.set(G.OPERATIONS_ENUM.DESCRIBE_DATABASE,new Y(Ip.describeSchema)),e.set(G.OPERATIONS_ENUM.DESCRIBE_TABLE,new Y(Ip.describeTable)),e.set(G.OPERATIONS_ENUM.DESCRIBE_ALL,new Y(Ip.describeAll)),e.set(G.OPERATIONS_ENUM.DELETE,new Y(K_.deleteRecord)),e.set(G.OPERATIONS_ENUM.ADD_USER,new Y(Y_.addUser)),e.set(G.OPERATIONS_ENUM.ALTER_USER,new Y(Y_.alterUser)),e.set(G.OPERATIONS_ENUM.DROP_USER,new Y(Y_.dropUser)),e.set(G.OPERATIONS_ENUM.LIST_USERS,new Y(Y_.listUsersExternal)),e.set(G.OPERATIONS_ENUM.LIST_ROLES,new Y(wp.listRoles)),e.set(G.OPERATIONS_ENUM.ADD_ROLE,new Y(wp.addRole)),e.set(G.OPERATIONS_ENUM.ALTER_ROLE,new Y(wp.alterRole)),e.set(G.OPERATIONS_ENUM.DROP_ROLE,new Y(wp.dropRole)),e.set(G.OPERATIONS_ENUM.USER_INFO,new Y(Y_.userInfo)),e.set(G.OPERATIONS_ENUM.READ_LOG,new Y(Xae)),e.set(G.OPERATIONS_ENUM.ADD_NODE,new Y(Zae)),e.set(G.OPERATIONS_ENUM.UPDATE_NODE,new Y(QG)),e.set(G.OPERATIONS_ENUM.SET_NODE_REPLICATION,new Y(QG)),e.set(G.OPERATIONS_ENUM.REMOVE_NODE,new Y(ece)),e.set(G.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new Y(tce)),e.set(G.OPERATIONS_ENUM.PURGE_STREAM,new Y(rce)),e.set(G.OPERATIONS_ENUM.SET_CONFIGURATION,new Y(tx.setConfiguration)),e.set(G.OPERATIONS_ENUM.CLUSTER_STATUS,new Y(nce.clusterStatus)),e.set(G.OPERATIONS_ENUM.CLUSTER_NETWORK,new Y(sce)),e.set(G.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new Y(JO.setRoutes)),e.set(G.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new Y(JO.getRoutes)),e.set(G.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new Y(JO.deleteRoutes)),e.set(G.OPERATIONS_ENUM.EXPORT_TO_S3,new Y(xs,jG.export_to_s3)),e.set(G.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new Y(xs,K_.deleteFilesBefore)),e.set(G.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new Y(xs,K_.deleteFilesBefore)),e.set(G.OPERATIONS_ENUM.EXPORT_LOCAL,new Y(xs,jG.export_local)),e.set(G.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new Y(eN.handleGetJobsByStartDate)),e.set(G.OPERATIONS_ENUM.GET_JOB,new Y(eN.handleGetJob)),e.set(G.OPERATIONS_ENUM.GET_FINGERPRINT,new Y(XO.getFingerprint)),e.set(G.OPERATIONS_ENUM.SET_LICENSE,new Y(XO.setLicense)),e.set(G.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new Y(XO.getRegistrationInfo)),e.set(G.OPERATIONS_ENUM.RESTART,new Y(JG.restart)),e.set(G.OPERATIONS_ENUM.RESTART_SERVICE,new Y(JG.restartService)),e.set(G.OPERATIONS_ENUM.CATCHUP,new Y(Sce)),e.set(G.OPERATIONS_ENUM.SYSTEM_INFORMATION,new Y(ace.systemInformation)),e.set(G.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new Y(xs,K_.deleteAuditLogsBefore)),e.set(G.OPERATIONS_ENUM.READ_AUDIT_LOG,new Y(Jae)),e.set(G.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new Y(ZG.createTokens)),e.set(G.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new Y(ZG.refreshOperationToken)),e.set(G.OPERATIONS_ENUM.LOGIN,new Y(ex.login)),e.set(G.OPERATIONS_ENUM.LOGOUT,new Y(ex.logout)),e.set(G.OPERATIONS_ENUM.GET_CONFIGURATION,new Y(tx.getConfiguration)),e.set(G.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new Y(tr.customFunctionsStatus)),e.set(G.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new Y(tr.getCustomFunctions)),e.set(G.OPERATIONS_ENUM.GET_COMPONENT_FILE,new Y(tr.getComponentFile)),e.set(G.OPERATIONS_ENUM.GET_COMPONENTS,new Y(tr.getComponents)),e.set(G.OPERATIONS_ENUM.SET_COMPONENT_FILE,new Y(tr.setComponentFile)),e.set(G.OPERATIONS_ENUM.DROP_COMPONENT,new Y(tr.dropComponent)),e.set(G.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new Y(tr.getCustomFunction)),e.set(G.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new Y(tr.setCustomFunction)),e.set(G.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new Y(tr.dropCustomFunction)),e.set(G.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new Y(tr.addComponent)),e.set(G.OPERATIONS_ENUM.ADD_COMPONENT,new Y(tr.addComponent)),e.set(G.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new Y(tr.dropCustomFunctionProject)),e.set(G.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new Y(tr.packageComponent)),e.set(G.OPERATIONS_ENUM.PACKAGE_COMPONENT,new Y(tr.packageComponent)),e.set(G.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new Y(tr.deployComponent)),e.set(G.OPERATIONS_ENUM.DEPLOY_COMPONENT,new Y(tr.deployComponent)),e.set(G.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new Y(rx.readTransactionLog)),e.set(G.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new Y(xs,rx.deleteTransactionLogsBefore)),e.set(G.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new Y(nx.installModules)),e.set(G.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new Y(nx.auditModules)),e.set(G.OPERATIONS_ENUM.GET_BACKUP,new Y(Ni.getBackup)),e}a(Tce,"initializeOperationFunctionMap")});var Pp=T((obe,fx)=>{"use strict";var nN=C(),gce=K(),j_=x(),{handleHDBError:sN,hdb_errors:Dp}=ie(),{isMainThread:Rce}=require("worker_threads"),{Readable:Ace}=require("stream"),_x=require("os"),Oce=require("util"),Nce=zR(),bce=Oce.promisify(Nce.authorize),dx=ux(),{createGzip:yce,constants:Ice}=require("zlib");function wce(e){let t=`Found an uncaught exception with message: ${e.message}. ${_x.EOL}Stack: ${e.stack} ${_x.EOL}Terminating ${Rce?"HDB":"thread"}.`;console.error(t),j_.fatal(t),process.exit(1)}a(wce,"handleServerUncaughtException");function Cce(e,t,r){if(j_[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 n=e.statusCode?e.statusCode:Dp.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(n).send({error:e}):r.code(n).send(e.message?{error:e.message}:e)}a(Cce,"serverErrorHandler");function Lce(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=sN(new Error,"Invalid JSON.",Dp.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(gce.isEmpty(e.body.operation)){let n=sN(new Error,"Request body must include an 'operation' property.",Dp.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}a(Lce,"reqBodyValidationHandler");function Dce(e,t,r){let n;e.body.operation!==nN.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==nN.OPERATIONS_ENUM.LOGIN&&e.body.operation!==nN.OPERATIONS_ENUM.LOGOUT?bce(e,t).then(s=>{n=s,e.body.hdb_user=n,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(s=>{j_.warn(s),j_.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${s.stack}"`);let i=typeof s=="string"?{error:s}:{error:s.message};r(sN(s,i,Dp.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(Dce,"authHandler");async function Pce(e,t,r=!1){let n;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),n=dx.chooseOperation(e.body);let s=await dx.processLocalTransaction(e,n);if(s instanceof Ace&&s.headers){for(let[i,o]of s.headers)t.header(i,o);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),s=s.pipe(yce({level:Ice.Z_BEST_SPEED})))}return s}catch(s){throw j_.error(s),s}}a(Pce,"handlePostRequest");fx.exports={authHandler:Dce,handlePostRequest:Pce,handleServerUncaughtException:wce,serverErrorHandler:Cce,reqBodyValidationHandler:Lce}});var mx=T((cbe,px)=>{"use strict";var Mce=require("fastify-plugin"),{handlePostRequest:Ex,authHandler:Uce,reqBodyValidationHandler:vce}=Pp();async function Bce(e){e.decorate("hdbCore",{preValidation:[vce,Uce],request:t=>hx(Ex(t,response)),requestWithoutAuthentication:(t,r)=>hx(Ex(t,r,!0))})}a(Bce,"hdbCore");async function hx(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(hx,"convertAsyncIterators");px.exports=Mce(Bce)});var gx=T((_be,Tx)=>{"use strict";var ube=require("fs"),iN=X();iN.initSync();var{CONFIG_PARAMS:Sx}=C(),Hce=1024*1024*1024;function qce(e){let t=iN.get(Sx.HTTP_TIMEOUT),r=iN.get(Sx.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:Hce,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,https:e}}a(qce,"getServerOptions");Tx.exports=qce});var Ox=T((fbe,Ax)=>{"use strict";var oN=X();oN.initSync();var{CONFIG_PARAMS:Rx}=C();function Gce(){let e=oN.get(Rx.HTTP_CORSACCESSLIST),t=oN.get(Rx.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=(n,s)=>s(null,e.indexOf(n)!==-1))),r}a(Gce,"getCORSOptions");Ax.exports=Gce});var yx=T((hbe,bx)=>{"use strict";var Nx=X();Nx.initSync();var xce=C();function Fce(){return Nx.get(xce.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(Fce,"getHeaderTimeoutConfig");bx.exports=Fce});var cN={};$e(cN,{customFunctionsServer:()=>Vce,ready:()=>Fx,start:()=>$ce});function $ce(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){bi||(bi=xx(t),it.http((await bi).server));let o=await bi,c=(0,aN.dirname)(s),l=(0,aN.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!Ix.has(c)){Ix.add(c);try{o.register(Kce(c,l))}catch(_){if(_.message==="Root plugin has already booted")Ke.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw _}}},ready:Fx}}async function Vce(){try{Ke.info("In Custom Functions Fastify server"+process.cwd()),Ke.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Ke.debug(`Custom Functions server process ${process.pid} starting up.`),await Yce();let e=Mx.get(Ux.CONFIG_PARAMS.HTTP_SECUREPORT)>0,t;try{t=bi=await xx(e)}catch(r){throw Ke.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw Ke.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){Ke.error(`Custom Functions ${process.pid} Error: ${e}`),Ke.error(e),process.exit(1)}}async function Yce(){try{Ke.info("Custom Functions starting configuration."),await vx.setUsersToGlobal(),Ke.info("Custom Functions completed configuration.")}catch(e){Ke.error(e)}}function Kce(e,t){return async function(r){try{Ke.info("Custom Functions starting buildRoutes"),Ke.trace("Loading fastify routes folder "+e),(0,wx.existsSync)(e)&&r.register(Px.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:Ke.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,o)=>{s?.message?Ke.error(s.message):s&&Ke.error(s),o()})}catch(n){Ke.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function xx(e){Ke.info("Custom Functions starting buildServer.");let t=(0,Bx.default)(e),r=(0,Cx.default)(t);r.server.headersTimeout=(0,qx.default)(),r.setErrorHandler(Gx.serverErrorHandler);let n=(0,Hx.default)();return n&&r.register(Lx.default,n),r.register(function(s,i,o){s.setNotFoundHandler(function(c,l){r.server.emit("unhandled",c.raw,l.raw)}),o()}),r.register(Dx.default),await r.register(kce),await r.after(),RO(r),Ke.info("Custom Functions completed buildServer."),r}function Fx(){if(bi)return bi.then?bi.then(e=>e.ready()):bi.ready()}var aN,wx,Cx,Lx,Dx,Px,Mx,Ux,Ke,kce,vx,Bx,Hx,qx,Gx,bi,Ix,kx=Ne(()=>{aN=require("path"),wx=require("fs"),Cx=q(require("fastify")),Lx=q(require("@fastify/cors")),Dx=q(CO()),Px=q(require("@fastify/autoload")),Mx=q(X()),Ux=q(C()),Ke=q(x()),kce=q(mx()),vx=q(wr()),Bx=q(gx()),Hx=q(Ox()),qx=q(yx()),Gx=q(Pp());Kc();mr();Ix=new Set;a($ce,"start");a(Vce,"customFunctionsServer");a(Yce,"setUp");a(Kce,"buildRouteFolder");a(xx,"buildServer");a(Fx,"ready")});var lN={};$e(lN,{start:()=>Wce});function Wce(e){return{handleDirectory(t,r){if(t==="/"){let n=(0,Wx.default)(r,e);return e.server.http(async(s,i)=>{if(!s.isWebSocket)return new Promise(o=>n(s._nodeRequest,s._nodeResponse,()=>{o(i(s))}))}),!0}},handleFile(t,r,n){Vx||(Vx=!0,e.server.http(async(s,i)=>{if(!s.isWebSocket){let o=$x.get(s.pathname);if(o)return{handlesHeaders:!0,body:(0,Yx.default)(s,(0,Kx.realpathSync)(o))}}return i(s)},{runFirst:!0})),$x.set(r,n)}}}var Yx,Kx,Wx,$x,Vx,Qx=Ne(()=>{Yx=q(require("send")),Kx=require("fs"),Wx=q(require("serve-static")),$x=new Map;a(Wce,"start")});var fN={};$e(fN,{Request:()=>uN,createReuseportFd:()=>Mp});var jx,uN,_N,dN,Mp,Up=Ne(()=>{jx=require("os"),uN=class{static{a(this,"Request")}#e;constructor(t,r){this.method=t.method;let n=t.url;this._nodeRequest=t,this._nodeResponse=r,this.url=n,this.headers=new dN(t.headers)}get absoluteURL(){return this.protocol+"://"+this.host+this.url}get pathname(){let t=this.url.indexOf("?");return t>-1?this.url.slice(0,t):this.url}set pathname(t){let r=this.url.indexOf("?");r>-1?this.url=t+this.url.slice(r):this.url=t}get protocol(){return this._nodeRequest.socket.encrypted?"https":"http"}get ip(){return this._nodeRequest.socket.remoteAddress}get authorized(){return this._nodeRequest.socket.authorized}get peerCertificate(){return this._nodeRequest.socket.getPeerCertificate()}get mtlsConfig(){return this._nodeRequest.socket.server.mtlsConfig}get body(){return this.#e||(this.#e=new _N(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}},_N=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}},dN=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,n]of this)t(n,r,this)}};(0,jx.platform)()!="win32"&&(Mp=require("node-unix-socket").createReuseportFd)});var Zx=T((Ibe,Xx)=>{"use strict";var Qce=require("cluster"),Ba=X();Ba.initSync();var Jx=C(),Abe=require("util"),yi=x(),Obe=require("fs"),jce=require("fastify"),Nbe=Bo(),zce=require("@fastify/cors"),Jce=require("@fastify/compress"),Xce=require("@fastify/static"),Zce=CO(),ele=require("path"),{PACKAGE_ROOT:tle}=C(),rle=Ln(),nle=K(),sle=wr(),ile=ia(),{server:ole}=(mr(),oe(Ho)),{node_request_key:bbe}=(Up(),oe(fN)),{authHandler:ale,handlePostRequest:cle,serverErrorHandler:lle,reqBodyValidationHandler:ule}=Pp(),ybe=require("net"),{registerContentHandlers:_le}=(Kc(),oe(Yq)),dle=6e4,fle=1024*1024*1024,Ele="TRUE",{CONFIG_PARAMS:z_}=Jx,il;Xx.exports={hdbServer:zx,start:zx};async function zx(e){try{yi.info("In Fastify server"+process.cwd()),yi.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),yi.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=Qce.isMaster,await hle();let t=e.securePort>0;il=ple(t),await il.ready(),e||(e={}),e.isOperationsServer=!0;try{ole.http(il.server,e),il.server.closeIdleConnections||await il.listen({port:0,host:"::"})}catch(r){throw il.close(),yi.error(r),yi.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),yi.fatal(t),process.exit(1)}}a(zx,"operationsServer");async function hle(){yi.trace("Configuring HarperDB process."),rle.setSchemaDataToGlobal(),await sle.setUsersToGlobal(),await ile.getLicense()}a(hle,"setUp");function ple(e){yi.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=mle(e),r=jce(t);r.server.headersTimeout=Tle(),r.setErrorHandler(lle);let n=Sle();n&&r.register(zce,n),r.register(function(i,o,c){i.setNotFoundHandler(function(l,_){r.server.emit("unhandled",l.raw,_.raw)}),c()}),r.register(Zce),r.register(Jce),r.register(Xce,{root:ele.join(tle,"studio/build-local")}),_le(r);let s=Ba.get(Jx.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!nle.isEmpty(s)&&s.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[ule,ale],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),cle(i,o)}),r.get("/health",()=>"HarperDB is running."),yi.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(ple,"buildServer");function mle(e){let t=Ba.get(z_.OPERATIONSAPI_NETWORK_TIMEOUT),r=Ba.get(z_.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:fle,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}a(mle,"getServerOptions");function Sle(){let e=Ba.get(z_.OPERATIONSAPI_NETWORK_CORS),t=Ba.get(z_.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===Ele)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(n,s)=>s(null,t.indexOf(n)!==-1))),r}a(Sle,"getCORSOpts");function Tle(){return Ba.get(z_.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??dle}a(Tle,"getHeaderTimeoutConfig")});var TN={};$e(TN,{disableNATS:()=>Rle,publishToStream:()=>Hp,setNATSReplicator:()=>EN,setPublishToStream:()=>Ale,setSubscription:()=>SN,start:()=>gle});function gle(){J_.default.get(X_.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Nle()}function Rle(e=!0){sF=e}function Ale(e,t){Hp=e,SN=t}function Nle(){if(sF||process.env._DISABLE_NATS)return;let e=ts(),t=Object.keys(e);t.push("system");for(let r of t){let n=e[r];for(let s in n){let i=n[s];EN(s,r,i)}}Kg((r,n)=>{EN(r.tableName,r.databaseName,r),n&&oF(r)}),!eF&&(eF=!0)}function EN(e,t,r){if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.sources.some(s=>s?.isNATSReplicator))return;r.sourcedFrom(class extends jt{static{a(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[Ue],record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[Ue]})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[Ue],record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this[Ue],record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[Ue]})}static defineSchema(i){oF(i)}static subscribe(){let i=new Wn;return SN(t,e,i),i}static subscribeOnThisThread(i){return i<(J_.default.get(X_.default.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??Ole)}static isEqual(i){return i.isNATSReplicator}static isNATSReplicator=!0;static shouldReceiveInvalidations=!0},{intermediateSource:!0});function n(s){let i=s?.transaction?.nats;if(!i)if(s?.transaction){s.transaction.nats=i=new vp(s.transaction,s);let o=s.transaction;for(;o.next;)o=o.next;o.next=s.transaction.nats,i.user=s.user,i.context=s}else i=iF;return i}a(n,"getNATSTransaction")}function oF(e){let t=J_.default.get(X_.default.CONFIG_PARAMS.CLUSTERING_NODENAME);Hp(`${pN.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,mN.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 tF,pN,mN,rF,nF,J_,X_,Bp,sF,Hp,SN,Ole,iF,eF,vp,hN,aF=Ne(()=>{ge();Qn();tF=q(ht()),pN=q(et()),mN=q(li());Fl();rF=q(mR()),nF=q(Tr()),J_=q(X()),X_=q(C()),Bp=q(x());a(gle,"start");a(Rle,"disableNATS");Hp=tF.publishToStream,SN=rF.setSubscription;a(Ale,"setPublishToStream");Ole=2;a(Nle,"assignReplicationSource");a(EN,"setNATSReplicator");a(oF,"publishSchema");vp=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 n=this.writes_by_db.get(t);n||this.writes_by_db.set(t,n=[]),n.push(r)}commit({timestamp:t}){let r=J_.default.get(X_.default.CONFIG_PARAMS.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writes_by_db){let o=[],c=[],l,_;for(let u of i){let d=u.table,f=u.operation=="put"?"upsert":u.operation;l||(Bp.trace(`Sending transaction event ${f}`),_=l={operation:f,schema:s,table:d,__origin:{user:this.user?.username,timestamp:t,node_name:r}},l.hash_values=c,f!=="delete"&&f!=="invalidate"&&(l.records=o)),l.table===d&&l.operation===f?(o.push(u.record),c.push(u.id)):_=_.next={operation:f,table:d,id:u.id,record:u.record},u.expiresAt&&(_.expiresAt=u.expiresAt)}l&&n.push(Hp(`${pN.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,mN.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(u=>{throw Bp.error("An error has occurred trying to replicate transaction",l,u),u.statusCode=504,u}))}return Promise.all(n)}},hN=class extends vp{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,nF.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};iF=new hN});var yN=T(Ha=>{"use strict";var{isMainThread:fF,parentPort:ed,threadId:qp}=require("worker_threads"),{Socket:ble,createServer:yle}=require("net"),{createServer:Ile,IncomingMessage:wle}=require("http"),{createServer:Cle}=require("https"),{readFileSync:ol,unlinkSync:cF,existsSync:Lle}=require("fs"),_r=x(),Pe=X(),yt=C(),{server:kp}=(mr(),oe(Ho)),{WebSocketServer:Dle}=require("ws"),{createServer:Ple}=require("tls"),{getTicketKeys:Mle,restartNumber:Ule,getWorkerIndex:xp}=tt(),{Headers:EF,appendHeader:vle}=(Uu(),oe(wM)),{recordAction:Z_,recordActionBinary:Ble}=(ui(),oe(Mu)),{Request:hF,createReuseportFd:lF}=(Up(),oe(fN)),{checkMemoryLimit:Hle}=ia(),pF=require("tls"),uF=pF.createSecureContext;pF.createSecureContext=function(e){if(!e.cert||!e.key)return uF(e);let t={...e};delete t.key,delete t.cert;let r=uF(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var mF=Pe.get(yt.CONFIG_PARAMS.THREADS_DEBUG);if(mF){let e;if(fF)e=Pe.get(yt.CONFIG_PARAMS.THREADS_DEBUG_PORT)??9229,process.on(["SIGINT","SIGTERM","SIGQUIT","exit"],()=>{try{require("inspector").close()}catch(t){_r.info("Could not close debugger",t)}});else{let t=Pe.get(yt.CONFIG_PARAMS.THREADS_DEBUG_STARTINGPORT);t&&xp()>=0&&(e=t+xp())}if(e){let t=Pe.get(yt.CONFIG_PARAMS.THREADS_DEBUG_HOST),r=Pe.get(yt.CONFIG_PARAMS.THREADS_DEBUG_WAITFORDEBUGGER);try{require("inspector").open(e,t,r)}catch(n){_r.trace(`Could not start debugging on port ${e}, you may already be debugging:`,n.message)}}}else if(process.env.DEV_MODE)try{require("inspector").open(9229)}catch(e){Ule<=1&&_r.trace("Could not start debugging on port 9229, you may already be debugging:",e.message)}process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});var{HDB_SETTINGS_NAMES:Ube,CONFIG_PARAMS:qle}=yt;Pe.initSync();var Gle=Pe.get(qle.HTTP_SESSIONAFFINITY),Fs={};Ha.registerServer=NN;Ha.httpServer=bN;Ha.deliverSocket=ON;Ha.startServers=SF;Ha.when_components_loaded=null;kp.http=bN;kp.request=$le;kp.socket=Vle;kp.ws=Yle;var gN={},Gp={},xle,To={},Fp={},Fle=[],RN=[];function SF(){return Ha.when_components_loaded=$p().loadRootComponents(!0).then(()=>{ed?.on("message",t=>{let{port:r,fd:n,data:s}=t;if(n)ON(n,r,s);else if(t.requestId)kle(t);else if(t.type===yt.ITC_EVENT_TYPES.SHUTDOWN){_r.trace("received shutdown request",qp);for(let i in Fs){let o=Fs[i],c;if(o.closeIdleConnections){let _=Object.getOwnPropertySymbols(o).find(f=>f.description.includes("connections")),u=0,d=setInterval(()=>{u++;let f=u>=100,E=o[_][f?"all":"idle"]();if(E.length===0){f&&clearInterval(d);return}u===1?_r.info(`Closing ${E.length} idle connections`):f&&_r.warn(`Forcefully closing ${E.length} active connections`);for(let h=0,m=E.length;h<m;h++){let S=E[h].socket;S._httpMessage&&!S._httpMessage.finished&&!f||(f?S.destroySoon():S.end(`HTTP/1.1 408 Request Timeout\r
|
|
28
|
+
Connection: close\r
|
|
29
|
+
\r
|
|
30
|
+
`))}},25).unref()}o.close?.(()=>{if(Pe.get(yt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&xp()==0)try{cF(Pe.get(yt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET))}catch{}clearInterval(c),setTimeout(()=>{console.log("forced close server",i,qp),o.cantCleanupProperly||_r.warn("Had to forcefully exit the thread",qp),process.exit(0)},5e3).unref()})}if(mF||process.env.DEV_MODE)try{require("inspector").close()}catch(i){_r.info("Could not close debugger",i)}}}).ref();let e=[];if(lF&&!Gle)for(let t in Fs){let r=Fs[t];if(isNaN(t)&&xp()==0){Lle(t)&&cF(t),e.push(new Promise((s,i)=>{r.listen({path:t},()=>{s(),_r.info("Domain socket listening on "+t)}).on("error",i)}));continue}let n;try{n=lF(+t,"::")}catch(s){console.error(`Unable to bind to port ${t}`,s);continue}e.push(new Promise((s,i)=>{r.listen({fd:n},()=>{s(),_r.trace("Listening on port "+t,qp)}).on("error",i)}))}Promise.all(e).then(()=>{ed?.postMessage({type:yt.ITC_EVENT_TYPES.CHILD_STARTED})})})}a(SF,"startServers");fF||SF();function ON(e,t,r){let n=e?.read?e:new ble({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=Fs[t];if(s.isSecure&&(n.startTime=performance.now()),s)typeof s=="function"?s(n):s.emit("connection",n),r&&n.emit("data",r);else{let i=a(o=>{setTimeout(()=>{let c=Fs[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):o<5?i(o+1):(_r.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}a(ON,"deliverSocket");var _F=new Map;function kle(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=_F.get(s),r){case"connection":i=ON(void 0,t),_F.set(s,i),i.write=(c,l,_)=>(ed.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),_&&_(),!0),i.end=(c,l,_)=>(ed.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),_&&_(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),ed.postMessage({requestId:s,event:"destroy"})};break;case"data":i._readableState.destroyed||i.emit("data",Buffer.from(n,"latin1"));break;case"drain":i._readableState.destroyed||i.emit("drain",{});break;case"end":i._readableState.destroyed||i.emit("end",{});break;case"error":i._readableState.destroyed||i.emit("error",{});break}}a(kle,"proxyRequest");function NN(e,t,r=!0){!+t&&t!==Pe.get(yt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&(t=parseInt(Pe.get(yt.CONFIG_PARAMS.HTTP_PORT),10));let n=Fs[t];if(n){let s=n.lastServer||n;if(s===e)throw new Error(`Can not register the same server twice for the same port ${t}`);if(r&&!!s.sessionIdContext!=!!e.sessionIdContext&&+t)throw new Error(`Can not mix secure HTTPS and insecure HTTP on the same port ${t}`);s.off("unhandled",dF),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else Fs[t]=e;e.on("unhandled",dF)}a(NN,"registerServer");function TF(e){let t=[],r=parseInt(e?.securePort);return r&&t.push({port:r,secure:!0}),r=parseInt(e?.port),r&&t.push({port:r,secure:!1}),t.length===0&&(t=[],Pe.get(yt.CONFIG_PARAMS.HTTP_PORT)!=null&&t.push({port:Pe.get(yt.CONFIG_PARAMS.HTTP_PORT),secure:Pe.get(yt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),Pe.get(yt.CONFIG_PARAMS.HTTP_SECUREPORT)!=null&&t.push({port:Pe.get(yt.CONFIG_PARAMS.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&Pe.get(yt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:Pe.get(yt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET),secure:!1}),t}a(TF,"getPorts");function bN(e,t){for(let{port:r,secure:n}of TF(t))gF(r,n,t?.isOperationsServer),typeof e=="function"?RN[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||r}):(e.isSecure=n,NN(e,r,!1)),Fp[r]=AN(RN,r),xle=AN(Fle,r)}a(bN,"httpServer");function gF(e,t,r){if(!To[e]){let n=r?"operationsApi_network":"http",s={keepAliveTimeout:Pe.get(n+"_keepAliveTimeout"),headersTimeout:Pe.get(n+"_headersTimeout"),requestTimeout:Pe.get(n+"_timeout")},i=Pe.get(n+"_mtls"),o=Pe.get(n+"_mtls_required");if(t){n=r?"operationsApi_":"";let l=Pe.get(n+"tls_privateKey"),_=Pe.get(n+"tls_certificate"),u=Pe.get(n+"tls_certificateAuthority");Object.assign(s,{allowHTTP1:!0,key:ol(l),ciphers:Pe.get("tls_ciphers"),cert:ol(_),ca:u&&ol(u),rejectUnauthorized:!!o,requestCert:!!i,ticketKeys:Mle()})}let c=Hle();To[e]=(t?Cle:Ile)(s,async(l,_)=>{try{let d=performance.now(),f=new hF(l,_);r&&(f.isOperationsServer=!0);let E=await Fp[e](f);if(!E){if(f._nodeResponse.statusCode)return;E=RF(f)}if(c?E.headers?.set?.("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"):E.headers?.set?.("Server","HarperDB"),E.status===-1){for(let v of E.headers||[])_.setHeader(v[0],v[1]);return l.baseRequest=f,_.baseResponse=E,To[e].emit("unhandled",l,_)}let h=E.status||200,m=performance.now(),S=m-d,R=E.body,g;if(!E.handlesHeaders){let v=E.headers||new EF;R?R.length>=0&&(typeof R=="string"?v.set("Content-Length",Buffer.byteLength(R)):v.set("Content-Length",R.length),g=!0):(v.set("Content-Length","0"),g=!0);let U=`hdb;dur=${S.toFixed(2)}`;E.wasCacheMiss&&(U+=", miss"),vle(v,"Server-Timing",U,!0),_.writeHead(h,v&&(v[Symbol.iterator]?Array.from(v):v)),g&&_.end(R)}let A=f.handlerPath,P=f.method;if(Z_(S,"duration",A,P,E.wasCacheMiss==null?void 0:E.wasCacheMiss?"cache-miss":"cache-hit"),Ble(h<400,"success",A,P),!g)if(R?.pipe){R.pipe(_),R.destroy&&_.on("close",()=>{R.destroy()});let v=0;R.on("data",U=>{v+=U.length}),R.on("end",()=>{Z_(performance.now()-m,"transfer",A,P),Z_(v,"bytes-sent",A,P)})}else R?.then?R.then(v=>{_.end(v)},u):_.end(R)}catch(d){u(d)}function u(d){let f=d.headers;_.writeHead(d.statusCode||500,f&&(f[Symbol.iterator]?Array.from(f):f)),_.end(d.toString()),d.statusCode?d.statusCode===500?_r.warn(d):_r.info(d):_r.error(d)}a(u,"onError")}),i&&(To[e].mtlsConfig=i),t&&(To[e].on("secureConnection",l=>{l._parent.startTime&&Z_(performance.now()-l._parent.startTime,"tls-handshake",e),Z_(l.isSessionReused(),"tls-reused",e)}),To[e].isSecure=!0),NN(To[e],e)}return To[e]}a(gF,"getHTTPServer");function AN(e,t){let r=RF;for(let n=e.length;n>0;){let{listener:s,port:i}=e[--n];if(i===t||i==="all"){let o=r;r=a(c=>s(c,o),"next_callback")}}return r}a(AN,"makeCallbackChain");function RF(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new EF}}a(RF,"unhandled");function $le(e,t){bN(e,{requestOnly:!0,...t})}a($le,"onRequest");function Vle(e,t){let r;if(t.securePort){let n=Pe.get("tls_privateKey"),s=Pe.get("tls_certificate"),i=t.mtls?.certificateAuthority||Pe.get("tls_certificateAuthority");r=Ple({ciphers:Pe.get("tls_ciphers"),key:ol(n),cert:ol(s),ca:i&&ol(i),rejectUnauthorized:!!t.mtls?.required,requestCert:!!t.mtls},e),Fs[t.securePort]=r}return t.port&&(r=yle(e),Fs[t.port]=r),r}a(Vle,"onSocket");Object.defineProperty(wle.prototype,"upgrade",{get(){return"connection"in this.headers&&"upgrade"in this.headers&&this.headers.connection.startsWith("Upgrade")&&this.headers.upgrade.toLowerCase()=="websocket"},set(e){}});function Yle(e,t){let r;for(let{port:n,secure:s}of TF(t)){Gp[n]||(Gp[n]=new Dle({server:r=gF(n,s)}),Gp[n].on("connection",async(c,l)=>{try{let _=new hF(l);_.isWebSocket=!0;let u=Fp[n](_),d=l.headers["sec-websocket-protocol"]||"",f=gN[n];if(d){let E;for(let h=0;h<f.length;h++){let m=f[h];m.protocol===d&&(E=!0,m.listener(c,_,u))}if(E)return}for(let E=0;E<f.length;E++){let h=f[E];h.protocol||h.listener(c,_,u)}}catch(_){_r.warn("Error handling WebSocket connection",_)}}),Gp[n].on("error",c=>{console.log("Error in setting up WebSocket server",c)}));let i=t?.subProtocol||"",o=gN[n];o||(o=gN[n]=[]),o.push({listener:e,protocol:i}),Fp[n]=AN(RN,n)}return r}a(Yle,"onWebSocket");function dF(e,t){t.writeHead(404),t.end(`Not found
|
|
31
|
+
`)}a(dF,"defaultNotFound")});async function bF({clientId:e,user:t,clean:r,will:n}){let s;if(e&&!r){let i=await IN.get(e,{returnNonexistent:!0});s=new LN(e,t,i),i&&(s.sessionWasPresent=!0)}else{if(e){let i=await IN.get(e);i&&i.delete()}s=new Yp(e,t)}return n&&(n.id=e,n.user={username:t?.username},td.put(n)),s}function wN(){return Vp++,Vp>65500&&(Vp=1),Vp}function CN(e,t,r=e){let{topic:n,retain:s}=e;e.data=t,e.async=!0,e.authorize=!0;let i=Yi.getMatch(n);if(!i)throw new Error(`Can not publish to topic ${n} as it does not exist, no resource has been defined to handle this topic`);e.url=i.relativeURL;let o=i.Resource;return Ze(r,()=>s?t===void 0?o.delete(e,r):o.put(e,e.data,r):o.publish(e,e.data,r))}var AF,go,OF,NF,IN,td,Vp,Yp,LN,yF=Ne(()=>{ge();zl();AF=q(Tr()),go=q(x());$o();OF=q(tt()),NF=q(yN());mr();IN=ft({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"}]}}]}),td=ft({database:"system",table:"hdb_session_will",attributes:[{name:"id",isPrimaryKey:!0},{name:"topic",type:"string"},{name:"data"},{name:"qos",type:"number"},{name:"retain",type:"boolean"},{name:"user",type:"any"}]});(0,OF.getWorkerIndex)()===0&&(async()=>{await NF.when_components_loaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of td.search({})){let t=e.data,r=Object.assign({},e);r.user?.username&&(r.user=await it.getUser(r.user.username)),Ze(r,()=>{try{CN(r,t)}catch{(0,go.warn)("Failed to publish will",t)}td.delete(e.id,r)})}})();a(bF,"getSession");Vp=1;a(wN,"getNextMessageId");Yp=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;subscriptions=[];awaitingAcks;sessionWasPresent;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,n){let{topic:s,rh:i,startTime:o}=t,c=s.indexOf("?"),l,_;if(c>-1?(l=s.slice(c),_=s.slice(0,c)):_=s,!_)throw new Error("No topic provided");if(_.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");let u=this.subscriptions.find(R=>R.topic===s),d;u?(d=i>0,u.end(),this.subscriptions.splice(this.subscriptions.indexOf(u),1)):d=i===2;let f={search:l,async:!0,authorize:!0,user:this.user,startTime:o,omitCurrent:d,url:""};o&&(0,go.trace)("Resuming subscription from",s,"from",o);let E=Yi.getMatch(_);if(!E){let R=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw R.statusCode=404,R}if(f.url=E.relativeURL,f.url.indexOf("+")>-1||f.url.indexOf("#")>-1){let R=f.url.slice(1);if(R.indexOf("#")>-1&&R.indexOf("#")!==R.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(f.isCollection=!0,R.indexOf("+")===R.length-1)f.onlyChildren=!0,f.url="/"+R.slice(0,R.length-1);else{let g=R.split("/"),A;for(let U=0;U<g.length;U++)if(g[U].indexOf("+")>-1)if(g[U]==="+")A=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&A)throw new Error("Filters can not be combined");let P=!0;g[g.length-1]==="#"&&(g.length--,P=!1),A&&(n=a(U=>{let F=U.id;if(!Array.isArray(F)||P&&F.length!==g.length)return!1;for(let H=0;H<g.length;H++)if(g[H]!=="+"&&g[H]!==F[H])return!1;return!0},"filter"));let v=g.indexOf("+");f.url="/"+(v>-1?g.slice(0,v):g).concat("").join("/")}}let h=E.path,m=E.Resource,S=await Ze(f,async()=>{let R=await m.subscribe(f);if(!R)throw new Error(`No subscription was returned from subscribe for topic ${s}`);if(!R[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);return(async()=>{for await(let g of R)try{let A;if(g.type&&g.type!=="put"&&g.type!=="delete"&&g.type!=="message"&&g.type!=="patch"||n&&!n(g))continue;r?(g.topic=s,A=this.needsAcknowledge(g)):(g.acknowledge?.(),A=wN());let P=g.id;Array.isArray(P)&&(P=oc(P)),P==null&&(P=""),this.listener(h+"/"+P,g.value,A,t)}catch(A){(0,go.warn)(A)}})(),R});return S.topic=s,S.qos=t.qos,this.subscriptions.push(S),S}resume(){}needsAcknowledge(t){let r=wN();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(n=>n.topic===t);if(r)return r.end(),!0}async publish(t,r){return t.user=this.user,CN(t,r)}setListener(t){this.listener=t}disconnect(t){let r={};Ze(r,async()=>{if(!t){let n=await td.get(this.sessionId,r);n?.doesExist()&&await CN(n,n.data,r)}await td.delete(this.sessionId,r)}).catch(n=>{(0,go.warn)(`Error publishing MQTT will for ${this.sessionId}`,n)});for(let n of this.subscriptions)n.end();this.subscriptions=[]}};a(CN,"publish");LN=class extends Yp{static{a(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,n){super(t,r),this.sessionRecord=n||{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,n){return super.addSubscription(t,r,n)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=wN(),n={topic:t.topic,timestamp:t.timestamp};return t.acknowledge&&(n.acknowledge=t.acknowledge),this.awaitingAcks.set(r,n),r}acknowledge(t){let r=this.awaitingAcks.get(t);this.awaitingAcks.delete(t),r.acknowledge?.();let n=r.topic;for(let[,s]of this.awaitingAcks)if(s.topic===n&&s.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===n){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,go.trace)("Received ack",n,r.timestamp),this.sessionRecord.update();return}}for(let s of this.sessionRecord.subscriptions)s.topic===n&&(s.startTime=r.timestamp);this.sessionRecord.update()}async addSubscription(t,r){await this.resumeSubscription(t,r);let{qos:n,startTime:s}=t;return n>0&&!s&&(this.sessionRecord.subscriptions=this.subscriptions.map(i=>{let o=i.startTime;return o||(o=i.startTime=(0,AF.getNextMonotonicTime)()),(0,go.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),IN.put(this.sessionRecord)),t.qos}}});var MN={};$e(MN,{bypassAuth:()=>Kle,start:()=>Wle});function Kle(){LF=!0}function Wle({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){let o=e.mqtt={requireAuthentication:i,sessions:new Set},c,l=r?.mtls;return n&&(c=e.ws((_,u,d)=>{if(_.protocol==="mqtt"){pn.debug("Received WSS connection for MQTT from",_._socket.remoteAddress);let{onMessage:f,onClose:E}=wF(_,(h,m)=>{if(_.send(h),m&&_._socket.writableNeedDrain)return new Promise(S=>this._socket.once("drain",S))},u,Promise.resolve(d).then(()=>u?.user),o);_.on("message",f),_.on("close",E),_.on("error",h=>{pn.info("WebSocket error",h)})}},Object.assign({subProtocol:"mqtt"},n))),(t||s)&&(c=e.socket(async _=>{let u;if(pn.debug("Received connection for MQTT from",_.remoteAddress),l){if(_.authorized)try{let E=l.user;E!==null?((E===void 0||E==="Common Name"||E==="CN")&&(E=_.getPeerCertificate().subject.CN),u=await e.getUser(E,null,null),(0,rd.get)(mn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&DN.notify({username:u.username,status:mn.AUTH_AUDIT_STATUS.SUCCESS,type:mn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT mTLS",remote_address:_.remoteAddress})):pn.debug("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",_.remoteAddress)}catch(E){pn.error(E)}else if(l.required)return pn.info(`Unauthorized connection attempt, no authorized client certificate provided, error: ${_.authorizationError}`),_.end()}!u&&LF&&_.remoteAddress.includes("127.0.0.1")&&(u=await(0,CF.getSuperUser)(),pn.debug("Auto-authorizing local connection",u?.username));let{onMessage:d,onClose:f}=wF(_,E=>_.write(E),null,u,o);_.on("data",d),_.on("close",f),_.on("error",E=>{pn.info("Socket error",E)})},{port:t,securePort:s,mtls:l})),c}function wF(e,t,r,n,s){IF||(IF=!0,Pu(d=>{Kp>0&&d.push({metric:"mqtt-connections",connections:Kp,byThread:!0})}));let i;Kp++;let o,c={protocolVersion:4},l=(0,Wp.parser)({protocolVersion:5});function _(d){l.parse(d)}a(_,"onMessage");function u(){Kp--,i||(i=!0,o?.disconnect(),s.sessions.delete(o),Dn(!1,"connection","mqtt","disconnect"))}return a(u,"onClose"),l.on("packet",async d=>{n?.then&&(n=await n),o?.then&&await o;try{switch(d.cmd){case"connect":if(c.protocolVersion=d.protocolVersion,d.username)try{n=await it.getUser(d.username,d.password.toString(),r),(0,rd.get)(mn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&DN.notify({username:n.username,status:mn.AUTH_AUDIT_STATUS.SUCCESS,type:mn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,rd.get)(mn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&DN.error({username:n.username,status:mn.AUTH_AUDIT_STATUS.FAILURE,type:mn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),f({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return Dn(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(d,n),d.will){let A=e.deserialize||(e.deserialize=La(r?.headers.get?.("content-type")));d.will.data=d.will.payload?.length>0?A(d.will.payload):void 0,delete d.will.payload}o=bF({user:n,...d}),o=await o,s.sessions.add(o)}catch(A){return pn.error(A),Dn(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:A.code||5,returnCode:A.code||128})}Dn(!0,"connection","mqtt","connect"),f({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((A,P,v,U)=>{try{let F=A.indexOf("/",1),H=F>0?A.slice(0,F):A;f({cmd:"publish",topic:A,payload:E(P),messageId:v||Math.floor(Math.random()*1e8),qos:U.qos},H)}catch(F){pn.error(F),o?.disconnect(),s.sessions.delete(o)}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let h=[];for(let A of d.subscriptions){let P;try{P=(await o.addSubscription(A,A.qos>=1)).qos||0}catch(v){pn.error(v),P=c.protocolVersion<5?128:v.statusCode===403?135:v.statusCode===404?143:128}h.push(P)}await o.committed,f({cmd:"suback",granted:h,messageId:d.messageId});break;case"unsubscribe":{let A=[];for(let P of d.unsubscriptions)A.push(o.removeSubscription(P)?0:17);f({cmd:"unsuback",granted:A,messageId:d.messageId});break}case"pubrel":f({cmd:"pubcomp",messageId:d.messageId,reasonCode:0});return;case"publish":let m=d.qos===2?"pubrec":"puback",S=e.deserialize||(e.deserialize=La(r?.headers.get?.("content-type"))),R=d.payload?.length>0?S(d.payload):void 0,g;try{g=await o.publish(d,R)}catch(A){pn.warn(A),d.qos>0&&f({cmd:m,messageId:d.messageId,reasonCode:128},d.topic);break}d.qos>0&&f({cmd:m,messageId:d.messageId,reasonCode:g===!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(!0),s.sessions.delete(o),Dn(!0,"connection","mqtt","disconnect"),e.close?e.close():e.end();break}}catch(h){pn.error(h),f({cmd:"disconnect"})}function f(h,m){let S=(0,Wp.generate)(h,c);t(S),on(S.length,"bytes-sent",m,h.cmd,"mqtt")}a(f,"sendPacket");function E(h){return ho(h,r)}a(E,"serialize")}),{onMessage:_,onClose:u}}var Wp,CF,rd,mn,PN,DN,pn,LF,IF,Kp,DF=Ne(()=>{Wp=require("mqtt-packet");yF();CF=q(wr());Kc();ui();mr();rd=q(X()),mn=q(C()),PN=q(x()),DN=(0,PN.loggerWithTag)("auth-event"),pn=(0,PN.loggerWithTag)("mqtt"),LF=(0,rd.get)(mn.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(Kle,"bypassAuth");a(Wle,"start");Kp=0;a(wF,"onSocket")});var zh={};$e(zh,{component_errors:()=>cl,loadComponent:()=>Qp,loadComponentDirectories:()=>xF,setErrorReporter:()=>Jle});function xF(e,t){t&&(vN=t),e&&(BN=e);let r=[];if((0,Es.existsSync)(UN)){let s=(0,Es.readdirSync)(UN,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,It.join)(UN,o);r.push(Qp(c,vN,"hdb",!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(Qp(n,vN,n,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{GF=!0})}function Jle(e){sd=e}async function Qp(e,t,r,n,s,i){if(!MF.has(e)){MF.set(e,!0),s&&(BN=s);try{let o;n&&(cl=new Map);let c=(0,It.join)(e,n?"harperdb-config.yaml":"config.yaml");(0,Es.existsSync)(c)?o=n?(0,qF.getConfigObj)():(0,UF.parseDocument)((0,Es.readFileSync)(c,"utf8"),{simpleKeys:!0}).toJSON():o=HN;let l=[],_=n;for(let u in o){let d=o[u];if(cl.set(n?u:(0,It.basename)(e),!1),!d)continue;let f,E=d.package;try{if(E){let g=e,A;for(;!(0,Es.existsSync)(A=(0,It.join)(g,"node_modules",u));)if(g=(0,It.dirname)(g),g.length<(0,HF.getHdbBasePath)().length){A=null;break}if(A)f=await Qp(A,t,r,!1),_=!0;else throw new Error(`Unable to find package ${u}:${E}`)}else f=zle[u];if(!f)continue;l.push(f);let h=a(g=>(g.origin=r,ft(g)),"ensureTable"),m=d.network||(d.port||d.securePort)&&d,S=m?.securePort||m?.https&&m.port,R=!m?.https&&m?.port;if(al.isMainThread&&(f=await f.startOnMainThread?.({server:it,ensureTable:h,port:R,securePort:S,resources:t,...d})||f,n&&m))for(let g of[R,S])try{if(+g&&!PF.includes(g)){let A=qN.get(GN.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);A&&nd.default.warn("Session affinity is not recommended and may cause memory leaks"),(A||!Mp)&&(PF.push(g),xN(g,A))}}catch(A){console.error("Error listening on socket",g,A,u)}if(t.isWorker&&(f=await f.start?.({server:it,ensureTable:h,port:R,securePort:S,resources:t,...d})||f),BN.set(f,!0),(f.handleFile||f.handleDirectory)&&d.files){if(d.files.includes(".."))throw(0,BF.handleHDBError)("Can not reference parent directories");let g=(0,It.join)(e,d.files).replace(/\\/g,"/"),A=g.indexOf("/*");if(A>-1&&d.files!==HN[u]?.files&&!(0,Es.existsSync)(g.slice(0,A)))throw new Error(`The path '${g.slice(0,A)}' does not exist and cannot be used as the base of the resolved 'files' path value '${d.files}'`);let P=(0,It.basename)(e),v=d.path||"/";v=v.startsWith("/")?v:v.startsWith("./")?"/"+P+v.slice(2):v==="."?"/"+P:"/"+P+"/"+v;let U,F,H;if(d.root){let z=d.root;z.startsWith("/")&&(z=z.slice(1)),z.endsWith("/")&&(z=z.slice(0,-1)),z+="/",F=(0,It.join)(e,z)}else(H=g.indexOf("/*"))>-1&&(F=g.slice(0,H+1),U=(0,It.relative)(e,F));let j=!1;if(al.isMainThread&&f.setupDirectory&&(j=await f.setupDirectory?.(v,F,t)),t.isWorker&&f.handleDirectory&&(j=await f.handleDirectory?.(v,F,t)),j)continue;for(let z of await(0,vF.default)(g,{onlyFiles:!1,objectMode:!0})){let{path:J,dirent:Ae}=z;_=!0;let ue=(0,It.relative)(e,J).replace(/\\/g,"/");if(U)if(ue.startsWith(U))ue=ue.slice(U.length+1);else throw new Error(`The root path '${d.root}' does not reference a valid part of the file path '${ue}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`);let Ee=v+(v.endsWith("/")?"":"/")+ue;try{if(Ae.isFile()){let Me=await jle(J);al.isMainThread&&await f.setupFile?.(Me,Ee,J,t),t.isWorker&&await f.handleFile?.(Me,Ee,J,t)}else al.isMainThread&&await f.setupDirectory?.(Ee,J,t),t.isWorker&&await f.handleDirectory?.(Ee,J,t)}catch(Me){Me.message=`Could not load ${Ae.isFile()?"file":"directory"} '${J}'${d.module?" using '"+d.module+"'":""} for application '${e}' due to: ${Me.message}`,sd?.(Me),((0,ll.getWorkerIndex)()===0?console:nd.default).error(Me),t.set(d.path||"/",new id(Me)),cl.set(n?u:(0,It.basename)(e),Me.message)}}}}catch(h){h.message=`Could not load component '${u}' for application '${(0,It.basename)(e)}' due to: ${h.message}`,sd?.(h),((0,ll.getWorkerIndex)()===0?console:nd.default).error(h),t.set(d.path||"/",new id(h),null,!0),cl.set(n?u:(0,It.basename)(e),h.message)}}if(al.isMainThread&&!GF&&i&&(0,ll.watchDir)(e,async()=>xF()),o.extensionModule)return await vE((0,It.join)(e,o.extensionModule));if(!_&&t.isWorker){let u=`${e} did not load any modules, resources, or files, is this a valid component?`;sd?.(new Error(u)),((0,ll.getWorkerIndex)()===0?console:nd.default).error(u),cl.set((0,It.basename)(e),u)}}catch(o){console.error(`Could not load application directory ${e}`,o),o.message=`Could not load application due to ${o.message}`,sd?.(o),t.set("",new id(o))}}}var Es,It,al,UF,qN,GN,vF,ll,nd,BF,HF,Qle,qF,jle,UN,BN,GF,vN,cl,zle,HN,PF,MF,sd,id,Jh=Ne(()=>{Es=require("fs"),It=require("path"),al=require("worker_threads"),UF=require("yaml"),qN=q(X()),GN=q(C());aU();_U();dU();tG();kx();Qx();vF=q(require("fast-glob")),ll=q(tt()),nd=q(x());eR();mr();BF=q(ie());Qn();ge();jp();HF=q(X()),Qle=q(Zx());Fh();aF();DF();qF=q(Et());Up();({readFile:jle}=Es.promises),UN=qN.get(GN.CONFIG_PARAMS.COMPONENTSROOT),BN=new Map,cl=new Map;a(xF,"loadComponentDirectories");zle={REST:_p,rest:_p,graphqlSchema:Zg,jsResource:rR,fastifyRoutes:cN,login:sR,static:lN,operationsApi:Qle,customFunctions:{},http:{},clustering:TN,authentication:w_,mqtt:MN},HN={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(HN,"static",{value:{files:"web/**"}});PF=[],MF=new Map;a(Jle,"setErrorReporter");a(Qp,"loadComponent");id=class extends jt{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 $p=T((oye,kF)=>{var{isMainThread:FF}=require("worker_threads"),{getTables:Xle}=(ge(),oe(Fe)),{loadComponentDirectories:Zle,loadComponent:eue}=(Jh(),oe(zh)),{resetResources:tue}=(zl(),oe(HI)),rue=jA(),nue=Et(),{dirname:sue}=require("path"),{getConnection:iue}=ht(),oue=X(),aue=C(),FN=new Map;async function cue(e=!1){!FF&&oue.get(aue.CONFIG_PARAMS.CLUSTERING_ENABLED)&&iue();try{FF&&await rue()}catch(n){console.error(n)}let t=tue();Xle(),t.isWorker=e,await eue(sue(nue.getConfigFilePath()),t,"hdb",!0,FN),await Zle(FN,t);let r=[];for(let[n]of FN)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}a(cue,"loadRootComponents");kF.exports.loadRootComponents=cue});var tt=T((cye,Ao)=>{"use strict";var{Worker:lue,MessageChannel:uue,parentPort:ks,isMainThread:KN,threadId:_ue,workerData:Ii}=require("worker_threads"),{PACKAGE_ROOT:due}=C(),{join:KF,isAbsolute:fue,extname:Eue}=require("path"),{server:WF}=(mr(),oe(Ho)),{watch:hue,readdir:pue}=require("fs/promises"),{totalmem:$F}=require("os"),od=C(),QF=X(),wi=x(),{randomBytes:mue}=require("crypto"),{_assignPackageExport:Sue}=require("../index"),Tue=C(),VF=1024*1024,Ro=[],Fn=[],gue=50,WN=1e4,Rue="restart",jF="request_thread_info",zF="resource_report",JF="thread_info",XF="added-port",Aue="ack",kN;Sue("threads",Fn);Ao.exports={startWorker:$N,restartWorkers:jN,shutdownWorkers:Iue,workers:Ro,setMonitorListener:vue,onMessageFromWorkers:wue,onMessageByType:ik,broadcast:Lue,broadcastWithAcknowledgement:Pue,setChildListenerByType:yue,getWorkerIndex:ZF,getWorkerCount:ek,getTicketKeys:rk,setMainIsWorker:Nue,setTerminateTimeout:Oue,restartNumber:Ii?.restartNumber||1};Fn.onMessageByType=ik;Fn.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=Fn.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};var QN;function Oue(e){WN=e}a(Oue,"setTerminateTimeout");function ZF(){return Ii?Ii.workerIndex:QN?0:void 0}a(ZF,"getWorkerIndex");function ek(){return Ii?Ii.workerCount:QN?1:void 0}a(ek,"getWorkerCount");function Nue(e){QN=e}a(Nue,"setMainIsWorker");var tk=1,zp;function rk(){return zp||(zp=KN?mue(48):Ii.ticketKeys,zp)}a(rk,"getTicketKeys");Object.defineProperty(WF,"workerIndex",{get(){return ZF()}});Object.defineProperty(WF,"workerCount",{get(){return ek()}});var nk={[jF](e,t){Mue(t)},[zF](e,t){Uue(t,e)}};function $N(e,t={}){let r=process.constrainedMemory?.()||$F();r=Math.min(r,$F(),2e4*VF);let n=QF.get(od.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/VF/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],o=[];for(let l of Fn){let _=new uue;_.existingPort=l,i.push(_),o.push(_.port2)}Eue(e)||(e+=".js");let c=new lue(fue(e)?e:KF(due,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:["--enable-source-maps"],argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(l=>l.existingPort.threadId),workerIndex:t.workerIndex,workerCount:tk=t.threadCount,name:t.name,restartNumber:Ao.exports.restartNumber,ticketKeys:rk()},transferList:o},t));for(let{port1:l,existingPort:_}of i)_.postMessage({type:XF,port:l,threadId:c.threadId},[l]);return Xp(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>$N(e,t),c.on("error",l=>{console.error("Worker error:",l),wi.error("Worker error:",l)}),c.on("exit",l=>{Ro.splice(Ro.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<gue?(t.unexpectedRestarts=c.unexpectedRestarts+1,$N(e,t)):wi.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",l=>{nk[l.type]?.(l,c)}),Ro.push(c),Hue(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a($N,"startWorker");var bue=[od.THREAD_TYPES.HTTP];async function jN(e=null,t=Math.max(tk>3,1),r=!0){if(KN){if(r){let{loadRootComponents:o}=$p();await o()}Ao.exports.restartNumber++,t<1&&(t=t*Ro.length);let n=[],s=[];for(let o of Ro.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;wi.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:Ao.exports.restartNumber,type:od.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=bue.indexOf(o.name)>-1,l=new Promise(_=>{let u=setTimeout(()=>o.terminate(),WN*2).unref();o.on("exit",()=>{clearTimeout(u),n.splice(n.indexOf(l)),!c&&r&&o.startCopy(),_()})});if(n.push(l),c&&r){let _=o.startCopy(),u=new Promise(d=>{let f=a(E=>{E.type===Tue.ITC_EVENT_TYPES.CHILD_STARTED&&(wi.trace("Worker has started",_.threadId),d(),s.splice(s.indexOf(u)),_.off("message",f))},"startListener");wi.trace("Waiting for worker to start",_.threadId),_.on("message",f)});s.push(u),n.length>=t&&await Promise.race(n),s.length>=t&&await Promise.race(s)}}await Promise.all(n),await Promise.all(s);let{restartService:i}=Na();r&&(e==="http"||!e)&&QF.get(od.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else ks.postMessage({type:Rue,workerType:e})}a(jN,"restartWorkers");function yue(e,t){nk[e]=t}a(yue,"setChildListenerByType");function Iue(e){return jN(e,1/0,!1)}a(Iue,"shutdownWorkers");var sk=[];function wue(e){sk.push(e)}a(wue,"onMessageFromWorkers");var VN=new Map;function ik(e,t){let r=VN.get(e);r||VN.set(e,r=[]),r.push(t)}a(ik,"onMessageByType");var Cue=10;async function Lue(e){let t=0;for(let r of Fn)try{r.postMessage(e),t++>Cue&&(t=0,await new Promise(setImmediate))}catch(n){wi.error("Unable to send message to worker",n)}}a(Lue,"broadcast");var Jp=new Map,Due=1;function Pue(e){return new Promise(t=>{let r=0;for(let n of Fn)try{let s=Due++,i=a(()=>{Jp.delete(s),--r===0&&t(),n!==ks&&--n.refCount===0&&n.unref()},"ack_handler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,Jp.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,o]of Jp)o.port===n&&o()})),n.postMessage(e),r++}catch(s){wi.error("Unable to send message to worker",s)}r===0&&t()})}a(Pue,"broadcastWithAcknowledgement");function Mue(e){e.postMessage({type:JF,workers:ok()})}a(Mue,"sendThreadInfo");function ok(){let e=Date.now();return Ro.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(ok,"getChildWorkerInfo");function Uue(e,t){e.resources=t,e.resources.updated=Date.now()}a(Uue,"recordResourceReport");var YN;function vue(e){YN=e}a(vue,"setMonitorListener");var Bue=1e3,YF=!1;function Hue(){YF||(YF=!0,setInterval(()=>{for(let e of Ro){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}YN&&YN()},Bue).unref())}a(Hue,"startMonitoring");var que=1e3;if(ks){Xp(ks);for(let e=0,t=Ii.addPorts.length;e<t;e++){let r=Ii.addPorts[e];r.threadId=Ii.addThreadIds[e],Xp(r)}setInterval(()=>{let e=process.memoryUsage();ks.postMessage({type:zF,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},que).unref(),kN=a(()=>new Promise((e,t)=>{ks.on("message",r),ks.postMessage({type:jF});function r(n){n.type===JF&&(ks.off("message",r),e(n.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else kN=ok;Ao.exports.getThreadInfo=kN;function Xp(e,t){Fn.push(e),e.on("message",r=>{if(r.type===XF)r.port.threadId=r.threadId,Xp(r.port);else if(r.type===Aue){let n=Jp.get(r.id);n&&n()}else{for(let s of sk)s(r,e);let n=VN.get(r.type);if(n)for(let s of n)try{s(r,e)}catch(i){wi.error(i)}}}).on("close",()=>{Fn.splice(Fn.indexOf(e),1)}).on("exit",()=>{Fn.splice(Fn.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(Xp,"addPort");if(KN){let e,t,r=a(async(n,s)=>{s&&(e=s);for(let i of await pue(n,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(KF(n,i.name));try{for await(let{filename:i}of hue(n,{persistent:!1}))t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await jN(),console.log("Reloaded HarperDB components")},100)}catch(i){console.warn("Error trying to watch component directory",n,i)}},"watch_dir");Ao.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else ks.on("message",async e=>{let{type:t}=e;t===od.ITC_EVENT_TYPES.SHUTDOWN&&(Ao.exports.restartNumber=e.restartNumber,ks.unref(),setTimeout(()=>{wi.warn("Thread did not voluntarily terminate",_ue),process.exit(0)},WN).unref())})});var eb={};$e(eb,{startHTTPThreads:()=>xue,startSocketServer:()=>xN,updateWorkerIdleness:()=>fk});async function xue(e=2,t){if(t)JN(0,1,!0);else{let{loadRootComponents:n}=$p();if(e===0)return(0,Oo.setMainIsWorker)(!0),await yN().startServers(),Promise.resolve([]);await n()}let r=(0,uk.checkMemoryLimit)();r&&!process.env.DEV_MODE&&(console.error(r),setInterval(()=>{rm.notify(r)},Gue).unref());for(let n=0;n<e;n++)JN(n,e);return Promise.all(dk)}function JN(e,t=1,r){if(zN++,(0,Oo.startWorker)("server/threads/threadServer.js",{name:tm.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((o,c)=>{function l(_){_.type===tm.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(n.removeListener("message",l),o(n))}a(l,"onMessage"),n.on("message",l),n.on("error",c)});dk.push(s),await s,ul.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",o=>{if(o.requestId){let c=em.get(o.requestId);c&&c(o)}}),n.on("exit",i),n.on("shutdown",i);function i(){let o=ul.indexOf(n);o>-1&&ul.splice(o,1)}if(a(i,"removeWorker"),_l){let o=_l;_l=[];for(let c of o)_k[c.localPort](null,c)}}}),r){let n=setInterval(()=>{XN?XN=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,Oo.shutdownWorkers)(),zN=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function xN(e=0,t){if(typeof e=="string")try{(0,nm.existsSync)(e)&&(0,nm.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=Fue:r=kue(t):r=ZN;let n=(0,dl.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(n._handle){n._handle.onconnection=_k[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),XN=!0,r(o,(c,l)=>{if(!c){if(ak){let u=o._socket||new dl.Socket({handle:o,writable:!0,readable:!0});ak.deliverSocket(u,e,l),u.resume()}else zN>0?(_l.length===0&&setTimeout(()=>{_l.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,_l.push(o)):(console.log("start up a dynamic thread to handle request"),JN(0));on(!1,"socket-routed");return}c.requests++;let _=o.fd;if(_>=0)c.postMessage({port:e,fd:_,data:l});else{let u=o._socket||new dl.Socket({handle:o,writable:!0,readable:!0});Yue(u,c,e)}on(!0,"socket-routed")})};let s=Bo();rm.info(`HarperDB ${s.version} Server running on port ${e}`)}return n.on("error",s=>{console.error("Error in socket server",s)}),process.env._UNREF_SERVER&&n.unref(),n}function ZN(e,t){let r,n=0;for(let s of ul){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=Zp)return Zp=i,t(r);n=i}Zp=0,t(r)}function Fue(e,t){let r={};e.getpeername(r);let n=r.address,s=fl.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);ZN(e,o=>{fl.set(n,{worker:o,lastUsed:i}),t(o)})}function kue(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new dl.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",o=>{n.readStop();let l=o.toString("latin1").match(t)?.[1],_=fl.get(l),u=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=u,s(_.worker);ZN(n,d=>{fl.set(l,{worker:d,lastUsed:u}),s(d,o)})})}a(r,"findByHeaderAffinity")}function fk(){Zp=0;for(let e of ul)e.expectedIdle=e.recentELU.idle+$ue,e.requests=1;ul.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function Yue(e,t,r){let n=Vue++;t.postMessage({port:r,requestId:n,event:"connection"}),e.on("data",s=>{let i=s.toString("latin1");t.postMessage({port:r,requestId:n,data:i,event:"data"})}).on("close",s=>{t.postMessage({port:r,requestId:n,event:"close",hadError:s})}).on("error",s=>{t.postMessage({port:r,requestId:n,event:"error",error:s})}).on("drain",s=>{t.postMessage({port:r,requestId:n,event:"drain",error:s})}).on("end",()=>{t.postMessage({port:r,requestId:n,event:"end"})}).resume(),em.set(n,s=>{s.event=="data"&&e.write(Buffer.from(s.data,"latin1")),s.event=="end"&&(e.end(s.data&&Buffer.from(s.data,"latin1")),em.delete(n)),s.event=="destroy"&&(e.destroy(),em.delete(n))})}var Oo,dl,tm,rm,nm,lk,uk,ul,_l,_k,ak,zN,dk,Gue,XN,Zp,ck,fl,$ue,em,Vue,jp=Ne(()=>{Oo=q(tt()),dl=require("net"),tm=q(C()),rm=q(x()),nm=require("fs");ui();lk=require("worker_threads"),uk=q(ia()),ul=[],_l=[],_k=[],zN=0,dk=[];lk.isMainThread&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});Gue=6e5;a(xue,"startHTTPThreads");a(JN,"startHTTPWorker");a(xN,"startSocketServer");Zp=0;a(ZN,"findMostIdleWorker");ck=36e5,fl=new Map;a(Fue,"findByRemoteAddressAffinity");a(kue,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of fl)r.lastUsed+ck<e&&fl.delete(t)},ck).unref();$ue=1e3;a(fk,"updateWorkerIdleness");(0,Oo.setMonitorListener)(fk);em=new Map,Vue=1;a(Yue,"proxySocket")});var pk=T((dye,hk)=>{"use strict";var im=X();im.initSync();var sm=C(),{httpRequest:Kue}=K(),Wue=require("path"),Ek=require("fs-extra"),Que=require("yaml"),jue={describe_table:!0,describe_all:!0,describe_database:!0,list_users:!0,list_roles:!0,drop_role:!0,add_user:!0,alter_user:!0,drop_user:!0,restart_service:!0,restart:!0,create_database:!0,drop_database:!0,create_table:!0,drop_table:!0,create_attribute:!0,drop_attribute:!0,search_by_id:!0,delete:!0,search_by_value:!0,csv_file_load:!0,csv_url_load:!0,cluster_get_routes:!0,cluster_network:!0,cluster_status:!0,remove_node:!0,add_component:!0,deploy_component:!0,package_component:!0,drop_component:!0,get_components:!0,get_component_file:!0,set_component_file:!0,registration_info:!0,get_fingerprint:!0,set_license:!0,get_job:!0,search_jobs_by_start_date:!0,read_log:!0,read_transaction_log:!0,read_audit_log:!0,delete_transaction_logs_before:!0,purge_stream:!0,delete_records_before:!0,install_node_modules:!0,set_configuration:!0,get_configuration:!0,create_authentication_tokens:!0,refresh_operation_token:!0,system_information:!0,sql:!0};hk.exports={cliOperations:Jue,buildRequest:zue};function zue(){let e={};for(let t of process.argv){if(jue[t]){e.operation=t;continue}if(t.includes("=")){let[r,...n]=t.split("=");n=n.join("=");try{n=JSON.parse(n)}catch{}e[r]=n}}return e}a(zue,"buildRequest");async function Jue(e){await Ek.exists(Wue.join(im.get(sm.CONFIG_PARAMS.ROOTPATH),sm.HDB_PID_FILE))||(console.error("HarperDB must be running to perform this operation"),process.exit()),await Ek.exists(im.get(sm.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET))||(console.error("No domain socket found, unable to perform this operation"),process.exit());try{let t=await Kue({method:"POST",protocol:"http:",socketPath:im.get(sm.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET),headers:{"Content-Type":"application/json"}},e);t=JSON.parse(t.body),e.json?console.log(JSON.stringify(t,null,2)):console.log(Que.stringify(t).trim())}catch(t){let r="Error: ";t?.response?.data?.error?r+=t.response.data.error:t?.response?.data?r+=t?.response?.data:r+=t.message,console.error(r)}}a(Jue,"cliOperations")});var rb=T((Eye,mk)=>{"use strict";var ad=X();ad.initSync();var El=require("fs-extra"),tb=require("path"),hl=C(),Xue=require("crypto"),Zue=require("uuid").v4;mk.exports=e_e;function e_e(){if(ad.getHdbBasePath()!==void 0){let e=tb.join(ad.getHdbBasePath(),hl.LICENSE_KEY_DIR_NAME,hl.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=tb.join(ad.getHdbBasePath(),hl.LICENSE_KEY_DIR_NAME,hl.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=tb.join(ad.getHdbBasePath(),hl.LICENSE_KEY_DIR_NAME,hl.JWT_ENUM.JWT_PASSPHRASE_NAME);try{El.accessSync(r),El.accessSync(e),El.accessSync(t)}catch(n){if(n.code==="ENOENT"){let s=Zue(),i=Xue.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:s}});El.writeFileSync(r,s),El.writeFileSync(e,i.privateKey),El.writeFileSync(t,i.publicKey)}else throw n}}}a(e_e,"checkJWTTokenExist")});var Tk=T((pye,Sk)=>{"use strict";var nb=class{static{a(this,"HdbInfoInsertObject")}constructor(t,r,n){this.info_id=t,this.data_version_num=r,this.hdb_version_num=n}};Sk.exports={HdbInfoInsertObject:nb}});var Ak=T((Sye,Rk)=>{"use strict";var gk=C(),sb=class{static{a(this,"UpgradeObject")}constructor(t,r){this[gk.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[gk.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};Rk.exports={UpgradeObject:sb}});var om=T((gye,Nk)=>{"use strict";var kn=require("prompt"),pl=require("chalk"),Ok=x(),hs=require("os"),ib=Uo(),ob=["yes","y"];async function t_e(e){let t=`${hs.EOL}`+pl.bold.green("Your current HarperDB version requires that we complete an update process.")+`${hs.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${hs.EOL}${hs.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${hs.EOL}`;kn.override=ib(["CONFIRM_UPGRADE"]),kn.start(),kn.message=t;let r={properties:{CONFIRM_UPGRADE:{description:pl.magenta(`${hs.EOL}[CONFIRM_UPGRADE] Do you want to upgrade your HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n;try{n=await kn.get([r])}catch(s){return Ok.error("There was an error when prompting user about an upgrade."),Ok.error(s),!1}return ob.includes(n.CONFIRM_UPGRADE)}a(t_e,"forceUpdatePrompt");async function r_e(e){let t=`${hs.EOL}`+pl.bold.green(`Your installed HarperDB version is older than the version used to create your data. Downgrading is not recommended as it is not tested and guaranteed to work. However, if you need to downgrade, and a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${hs.EOL}`);kn.override=ib(["CONFIRM_DOWNGRADE"]),kn.start(),kn.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:pl.magenta(`${hs.EOL}[CONFIRM_DOWNGRADE] Do you want to proceed with using your downgraded HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n=await kn.get([r]);return ob.includes(n.CONFIRM_DOWNGRADE)}a(r_e,"forceDowngradePrompt");async function n_e(){let e=`${hs.EOL}`+pl.bold.green("We now require a Certifacte Authority certificate. HarperDB can generate all new certificates for you (your existing certificates will be backed up) or you can keep any existing certificates and add your own CA certificate. To add your own CA certificate set the <certificateAuthority> parameter in harperdb-config.yaml");kn.override=ib(["GENERATE_CERTS"]),kn.start(),kn.message=e;let t={properties:{GENERATE_CERTS:{description:pl.magenta(`${hs.EOL}[GENERATE_CERTS] Do you want HarperDB to generate all new certificates? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"yes",required:!0}}},r=await kn.get([t]);return ob.includes(r.GENERATE_CERTS)}a(n_e,"upgradeCertsPrompt");Nk.exports={forceUpdatePrompt:t_e,forceDowngradePrompt:r_e,upgradeCertsPrompt:n_e}});var cb=T((Aye,bk)=>{"use strict";var ab=class{static{a(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};bk.exports=ab});var Ik=T((wye,yk)=>{"use strict";var s_e=K(),i_e=Et(),Nye=x(),bye=require("path"),yye=require("fs"),Iye=C();yk.exports={getOldPropsValue:o_e};function o_e(e,t,r=!1){let n=t.getRaw(e);return s_e.isNotEmptyAndHasValue(n)?n:r?i_e.getDefaultConfig(e):""}a(o_e,"getOldPropsValue")});var Dk=T((Lye,Lk)=>{"use strict";var No=require("path"),bo=require("fs-extra"),a_e=require("properties-reader"),c_e=cb(),wt=x(),{getOldPropsValue:We}=Ik(),{HDB_SETTINGS_NAMES:se,CONFIG_PARAMS:qa}=C(),Ga=Et(),am=X(),wk=K(),$s=C(),lb=new c_e("3.1.0"),Ck=[];function l_e(){let e=a_e(am.get(se.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),wt.info(t);let r=` ;Settings for the HarperDB process.
|
|
29
32
|
|
|
30
33
|
;The directory selected during install where the database files reside.
|
|
31
|
-
${
|
|
34
|
+
${se.HDB_ROOT_KEY} = ${We(se.HDB_ROOT_KEY,e)}
|
|
32
35
|
;The port the HarperDB REST interface will listen on.
|
|
33
|
-
${
|
|
36
|
+
${se.SERVER_PORT_KEY} = ${We(se.SERVER_PORT_KEY,e)}
|
|
34
37
|
;Set to true to enable HTTPS on the HarperDB REST endpoint. Requires a valid certificate and key.
|
|
35
|
-
${
|
|
38
|
+
${se.HTTP_SECURE_ENABLED_KEY} = ${We(se.HTTP_SECURE_ENABLED_KEY,e)}
|
|
36
39
|
;The path to the SSL certificate used when running with HTTPS enabled.
|
|
37
|
-
${
|
|
40
|
+
${se.CERT_KEY} = ${We(se.CERT_KEY,e)}
|
|
38
41
|
;The path to the SSL private key used when running with HTTPS enabled.
|
|
39
|
-
${
|
|
42
|
+
${se.PRIVATE_KEY_KEY} = ${We(se.PRIVATE_KEY_KEY,e)}
|
|
40
43
|
;Set to true to enable Cross Origin Resource Sharing, which allows requests across a domain.
|
|
41
|
-
${
|
|
44
|
+
${se.CORS_ENABLED_KEY} = ${We(se.CORS_ENABLED_KEY,e)}
|
|
42
45
|
;Allows for setting allowable domains with CORS. Comma separated list.
|
|
43
|
-
${
|
|
46
|
+
${se.CORS_WHITELIST_KEY} = ${We(se.CORS_WHITELIST_KEY,e)}
|
|
44
47
|
;Length of time in milliseconds after which a request will timeout. Defaults to 120,000 ms (2 minutes).
|
|
45
|
-
${
|
|
48
|
+
${se.SERVER_TIMEOUT_KEY} = ${We(se.SERVER_TIMEOUT_KEY,e,!0)}
|
|
46
49
|
;The number of milliseconds of inactivity a server needs to wait for additional incoming data, after it has finished writing the last response. Defaults to 5,000 ms (5 seconds).
|
|
47
|
-
${
|
|
50
|
+
${se.SERVER_KEEP_ALIVE_TIMEOUT_KEY} = ${We(se.SERVER_KEEP_ALIVE_TIMEOUT_KEY,e,!0)}
|
|
48
51
|
;Limit the amount of time the parser will wait to receive the complete HTTP headers.. Defaults to 60,000 ms (1 minute).
|
|
49
|
-
${
|
|
52
|
+
${se.SERVER_HEADERS_TIMEOUT_KEY} = ${We(se.SERVER_HEADERS_TIMEOUT_KEY,e,!0)}
|
|
50
53
|
;Define whether to log to file or not.
|
|
51
|
-
${
|
|
54
|
+
${se.LOG_TO_FILE} = ${Ga.getDefaultConfig(qa.LOGGING_FILE)}
|
|
52
55
|
;Define whether to log to stdout/stderr or not. NOTE HarperDB must run in foreground in order to receive the std stream from HarperDB.
|
|
53
|
-
${
|
|
56
|
+
${se.LOG_TO_STDSTREAMS} = ${Ga.getDefaultConfig(qa.LOGGING_STDSTREAMS)}
|
|
54
57
|
;Set to control amount of logging generated. Accepted levels are trace, debug, warn, error, fatal.
|
|
55
|
-
${
|
|
58
|
+
${se.LOG_LEVEL_KEY} = ${We(se.LOG_LEVEL_KEY,e)}
|
|
56
59
|
;The path where log files will be written. If there is no file name included in the path, the log file will be created by default as 'hdb_log.log'
|
|
57
|
-
${
|
|
60
|
+
${se.LOG_PATH_KEY} = ${We(se.LOG_PATH_KEY,e)}
|
|
58
61
|
;Set to true to enable daily log file rotations - each log file name will be prepended with YYYY-MM-DD.
|
|
59
|
-
${
|
|
62
|
+
${se.LOG_DAILY_ROTATE_KEY} = ${We(se.LOG_DAILY_ROTATE_KEY,e)}
|
|
60
63
|
;Set the number of daily log files to maintain when LOG_DAILY_ROTATE is enabled. If no integer value is set, no limit will be set for
|
|
61
64
|
;daily log files which may consume a large amount of storage depending on your log settings.
|
|
62
|
-
${
|
|
65
|
+
${se.LOG_MAX_DAILY_FILES_KEY} = ${We(se.LOG_MAX_DAILY_FILES_KEY,e)}
|
|
63
66
|
;The environment used by NodeJS. Setting to production will be the most performant, settings to development will generate more logging.
|
|
64
|
-
${
|
|
67
|
+
${se.PROPS_ENV_KEY} = ${We(se.PROPS_ENV_KEY,e)}
|
|
65
68
|
;This allows self signed certificates to be used in clustering. This is a security risk
|
|
66
69
|
;as clustering will not validate the cert, so should only be used internally.
|
|
67
70
|
;The HDB install creates a self signed certificate, if you use that cert this must be set to true.
|
|
68
|
-
${
|
|
71
|
+
${se.ALLOW_SELF_SIGNED_SSL_CERTS} = ${We(se.ALLOW_SELF_SIGNED_SSL_CERTS,e,!0)}
|
|
69
72
|
;Set the max number of processes HarperDB will start. This can also be limited by number of cores and licenses.
|
|
70
|
-
${
|
|
73
|
+
${se.MAX_HDB_PROCESSES} = ${We(se.MAX_HDB_PROCESSES,e)}
|
|
71
74
|
;Set to true to enable clustering. Requires a valid enterprise license.
|
|
72
|
-
${
|
|
75
|
+
${se.CLUSTERING_ENABLED_KEY} = ${We(se.CLUSTERING_ENABLED_KEY,e,!0)}
|
|
73
76
|
;The port that will be used for HarperDB clustering.
|
|
74
|
-
${
|
|
77
|
+
${se.CLUSTERING_PORT_KEY} = ${We(se.CLUSTERING_PORT_KEY,e)}
|
|
75
78
|
;The name of this node in your HarperDB cluster topology. This must be a value unique from the rest of your cluster node names.
|
|
76
|
-
${
|
|
79
|
+
${se.CLUSTERING_NODE_NAME_KEY} = ${We(se.CLUSTERING_NODE_NAME_KEY,e)}
|
|
77
80
|
;The user used to connect to other instances of HarperDB, this user must have a role of cluster_user.
|
|
78
|
-
${
|
|
81
|
+
${se.CLUSTERING_USER_KEY} = ${We(se.CLUSTERING_USER_KEY,e)}
|
|
79
82
|
;Defines if this instance does not record transactions. Note, if Clustering is enabled and Transaction Log is disabled your nodes will not catch up.
|
|
80
|
-
${
|
|
83
|
+
${se.DISABLE_TRANSACTION_LOG_KEY} = ${We(se.DISABLE_TRANSACTION_LOG_KEY,e,!0)}
|
|
81
84
|
;Defines the length of time an operation token will be valid until it expires. Example values: https://github.com/vercel/ms
|
|
82
|
-
${
|
|
85
|
+
${se.OPERATION_TOKEN_TIMEOUT_KEY} = ${We(se.OPERATION_TOKEN_TIMEOUT_KEY,e,!0)}
|
|
83
86
|
;Defines the length of time a refresh token will be valid until it expires. Example values: https://github.com/vercel/ms
|
|
84
|
-
${
|
|
87
|
+
${se.REFRESH_TOKEN_TIMEOUT_KEY} = ${We(se.REFRESH_TOKEN_TIMEOUT_KEY,e,!0)}
|
|
85
88
|
;The port the IPC server will run on.
|
|
86
|
-
${
|
|
89
|
+
${se.IPC_SERVER_PORT} = ${Ga.getDefaultConfig(qa.IPC_NETWORK_PORT)}
|
|
87
90
|
;Run HDB in the foreground.
|
|
88
|
-
${
|
|
91
|
+
${se.RUN_IN_FOREGROUND} = ${Ga.getDefaultConfig(qa.OPERATIONSAPI_FOREGROUND)}
|
|
89
92
|
;Set to true to enable custom API endpoints. Requires a valid enterprise license.
|
|
90
|
-
${
|
|
93
|
+
${se.CUSTOM_FUNCTIONS_ENABLED_KEY} = ${Ga.getDefaultConfig(qa.CUSTOMFUNCTIONS_ENABLED)}
|
|
91
94
|
;The port used to access the custom functions server.
|
|
92
|
-
${
|
|
95
|
+
${se.CUSTOM_FUNCTIONS_PORT_KEY} = ${Ga.getDefaultConfig(qa.HTTP_PORT)}
|
|
93
96
|
;The path to the folder containing HarperDB custom function files.
|
|
94
|
-
${
|
|
97
|
+
${se.CUSTOM_FUNCTIONS_DIRECTORY_KEY} = ${No.join(We(se.HDB_ROOT_KEY,e),"custom_functions")}
|
|
95
98
|
;Set the max number of processes HarperDB will start for the Custom Functions server
|
|
96
|
-
${
|
|
97
|
-
`,n=
|
|
99
|
+
${se.MAX_CUSTOM_FUNCTION_PROCESSES} = ${Ga.getDefaultConfig(qa.HTTP_THREADS)}
|
|
100
|
+
`,n=am.get("settings_path"),s=No.dirname(n),i=No.join(s,"3_1_0_upgrade_settings.bak");try{wt.info(`Backing up old settings file to: ${i}`),bo.copySync(n,i)}catch(c){throw wt.error(c),console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),c}try{wt.info("New settings file values for 3.1.0 upgrade:",r),wt.info(`Creating new/upgraded settings file at '${n}'`),bo.writeFileSync(n,r),wt.info("Updating env variables with new settings values")}catch(c){throw console.error("There was a problem writing the new settings file. Please check the log for details."),wt.error("Attempting to reset the settings file to its original state. Use the '.bak' file if this fails."),wt.error(c),bo.copySync(i,n),c}am.initSync();let o="New settings file for 3.1.0 upgrade successfully created.";return console.log(o),wt.info(o),o}a(l_e,"updateSettingsFile_3_1_0");function u_e(){let e=No.join(wk.getHomeDir(),$s.HDB_HOME_DIR_NAME,$s.LICENSE_KEY_DIR_NAME,$s.LICENSE_FILE_NAME),t=No.join(wk.getHomeDir(),$s.HDB_HOME_DIR_NAME,$s.LICENSE_KEY_DIR_NAME,$s.REG_KEY_FILE_NAME),r=No.join(am.getHdbBasePath(),$s.LICENSE_KEY_DIR_NAME,$s.LICENSE_FILE_NAME),n=No.join(r,$s.LICENSE_FILE_NAME),s=No.join(r,$s.REG_KEY_FILE_NAME),i="Move license files for version 3.1.0";console.log(i),wt.info(i);let o="Creating .license directory";console.log(o),wt.info(o),bo.mkdirpSync(r);try{bo.accessSync(e);try{let c="Moving licence file";console.log(c),wt.info(c),bo.moveSync(e,n);let l="License file successfully moved.";console.log(l),wt.info(l)}catch{let l="moving license file failed";console.error(l),wt.error(l)}}catch{let l=`license file '${e}' does not exist.`;console.warn(l),wt.warn(l)}try{bo.accessSync(t);try{let c="Moving registration file";console.log(c),wt.info(c),bo.moveSync(t,s);let l="Registration file successfully moved.";console.log(l),wt.info(l)}catch{let l="moving registration file failed";console.error(l),wt.error(l)}}catch{let l=`registration file '${t}' does not exist.`;console.warn(l),wt.warn(l)}}a(u_e,"moveLicenseFiles");lb.sync_functions.push(l_e);lb.sync_functions.push(u_e);Ck.push(lb);Lk.exports=Ck});var Bk=T((Pye,vk)=>{"use strict";var Sn=Ve(),{insertRecords:__e}=Yo(),d_e=Tr(),yo=_t(),f_e=K(),Ci=x(),E_e=K(),Vs=require("fs-extra"),Li=require("path"),h_e=require("cli-progress"),cd=require("assert"),p_e=require("pino"),m_e=X();vk.exports=S_e;var cm,Pk,lm,ub,dr,ld=!1;async function S_e(e=!0){return cm=m_e.getHdbBasePath(),Pk=Li.join(cm,"schema"),lm=Li.join(cm,"4_0_0_upgrade_tmp"),ub=Li.join(cm,"transactions"),console.info("Reindexing upgrade started for schemas"),Ci.notify("Reindexing upgrade started for schemas"),await Mk(Pk,!1,e),await Vs.pathExists(ub)&&(console.info(`
|
|
98
101
|
|
|
99
|
-
Reindexing upgrade started for transaction logs`),Ci.notify("Reindexing upgrade started for transaction logs"),await rk(HN,!0,e)),Ci.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(ad?", but errors occurred":"")}a(que,"reindexUpgrade");async function rk(e,t,r){let n=await Ys.readdir(e),s=n.length;for(let i=0;i<s;i++){let o=n[i],c=Li.join(e,o.toString());if(o===".DS_Store")continue;let l=await Ys.readdir(c),_=l.length;for(let u=0;u<_;u++){let d=l[u];if(d!==".DS_Store"&&Ys.statSync(Li.join(c,d)).isDirectory())try{await xue(o,d,t),ur.info(`Reindexing started for ${o}.${d}`),Ci.notify(`${t?"Transaction":"Schema"} reindexing started for ${o}.${d}`),await Fue(o,d,c,t,r),ur.info(`Reindexing completed for ${o}.${d}`),Ci.notify(`Reindexing completed for ${o}.${d}`)}catch(f){ad=!0,f.schema_path=c,f.table_name=d,Ci.error("There was an error with the reindex upgrade, check the logs in hdb/3_0_0_upgrade_tmp for more details"),Ci.error(f),ur.error(f),console.error(f)}}}if(!ad)try{await Ys.rm(Xm,{recursive:!0})}catch{}}a(rk,"processTables");async function xue(e,t,r){let s=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=Li.join(Xm,s);await Ys.ensureDir(Xm),await Ys.writeFile(i,""),ur=Bue({level:"debug",formatters:{bindings(){}}},i)}a(xue,"initPinoLogger");var Gue=20;async function Fue(e,t,r,n,s){let i;try{i=await pn.openEnvironment(r,t,n)}catch(g){if(g.message==="MDB_INVALID: File is not an LMDB file"){Ci.notify(`${e}.${t} file is not from the old environment and has been skipped`),console.info(`${e}.${t} file is not from the old environment and has been skipped`),ur.error(g);return}throw g}let o=Vue(i.dbis),c=pn.openDBI(i,o),l=Object.keys(i.dbis),_=pn.statDBI(i,o);ur.info(`Old environment stats: ${JSON.stringify(_)}`);let u=new vue.SingleBar({format:`${e}.${t} |{bar}| {percentage}% || {value}/{total} records`,barCompleteChar:"\u2588",barIncompleteChar:"\u2591",hideCursor:!0,clearOnComplete:!1});u.start(_.entryCount,0,{});let d=await pn.createEnvironment(r,t,!1);pn.createDBI(d,o,!1,!0);let f=[];try{for(let g of c.getRange({start:!1}))g.value=Object.assign({},g.value),f.push(g),n||e==="system"&&(t==="hdb_schema"&&(g.key=g.key.toString(),g.value.name=g.value.name.toString()),t==="hdb_table"&&(g.key=g.key.toString(),g.value.schema=g.value.schema.toString(),g.value.name=g.value.name.toString()),t==="hdb_attribute"&&(g.key=g.key.toString(),g.value.schema=g.value.schema.toString(),g.value.table=g.value.table.toString(),g.value.attribute=g.value.attribute.toString())),f.length>Gue&&await E();await E()}catch(g){throw ad=!0,ur.error(g),g}async function E(){let g,I=f.map(({value:F})=>F);n?g=await Promise.all(I.map(F=>kue(d,F))):g=await Due(d,o,l.filter(F=>F!=="__blob__"),I,!1);for(let F=0,G=f.length;F<G;F++){let{key:U,value:Q}=f[F];ur.info(`Record hash value: ${U} hash: ${o}`);let V;n?V=g[F]:V=g.written_hashes.indexOf(U)>-1,od(V,!0),$ue(d,o,Q[o],n),ur.info(`Insert success, written hashes: ${g.written_hashes}`),u.increment()}f=[],u.value/u.total*100%10===0&&Ci.notify(`${e}.${t} ${u.value}/${u.total} records inserted`),ur.info(`${u.value}/${u.total} records inserted`)}a(E,"finishOutstanding"),u.stop();let h=pn.statDBI(i,o),p=pn.statDBI(d,o);if(ur.info(`Old stats entry count: ${h.entryCount}. New stats entry count: ${p.entryCount}`),od.deepStrictEqual(h.entryCount,p.entryCount),await pn.closeEnvironment(i),await pn.closeEnvironment(d),delete global.lmdb_map[`${e}.${t}`],s){let g=Li.join(r,t),I=Li.join(g,"data.mdb"),v=Li.join(g,"lock.mdb");await Ys.unlink(I),await Ys.unlink(v),await Ys.rmdir(g),ur.info(`Deleted old environment files from schema folder: ${I}, ${v}`)}let S=await pn.openEnvironment(r,t),A=pn.statDBI(S,o);ur.info(`New stats: ${JSON.stringify(p)}. New stats after move: ${JSON.stringify(A)}`),od.deepStrictEqual(A.entryCount,p.entryCount),await pn.closeEnvironment(S),delete global.lmdb_map[`${e}.${t}`]}a(Fue,"processTable");async function kue(e,t){pn.initializeDBIs(e,Ao.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Ao.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[Ao.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[Ao.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),Uue.isEmpty(t.user_name)||e.dbis[Ao.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let n of t.hash_values)e.dbis[Ao.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n,r)})}a(kue,"insertTransaction");function $ue(e,t,r,n){let i=e.dbis[t].get(r);od.deepStrictEqual(typeof i,"object");let o;if(n){let c={[Ao.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[Ao.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE]:i.hash_values};o=Object.entries(c)}else o=Object.entries(i);for(let[c,l]of o)if(c!==t&&e.dbis[c]!==void 0&&!Mue.isEmptyOrZeroLength(l))if(n&&c==="hash_value")for(let _=0,u=l.length;_<u;_++){let d=l[_];nk(e,c,d,r)}else nk(e,c,l,r)}a($ue,"validateIndices");function nk(e,t,r,n){try{let s=!1,i=Pue.getIndexedValues(r);if(!i)return;for(let o of i)s=e.dbis[t].doesExist(o,n),s||ur.info(`Validate indices did not find value in new DBI: ${o}. Hash: ${n}`),od.deepStrictEqual(s,!0)}catch(s){ad=!0,ur.error(s),console.error(s)}}a(nk,"validateIndex");function Vue(e){let t;for(let[r,n]of Object.entries(e))if(n.__dbi_defintion__.is_hash_attribute===!0){t=r;break}return t}a(Vue,"getHashDBI")});var ep=T((Vbe,ak)=>{"use strict";var Yue=require("mkcert"),Zm=require("path"),qN=require("fs-extra"),xN=q(),Kue=J(),GN=C(),El=XT(),Wue=Do(),Que=St();ak.exports={generateKeys:jue,updateConfigCert:ok};async function jue(){let e=Kue.getHdbBasePath(),t=Zm.join(e,GN.LICENSE_KEY_DIR_NAME),r=await Yue.createCert({domains:["127.0.0.1","localhost","::1"],validityDays:3650,caKey:El.CERTIFICATE_VALUES.key,caCert:El.CERTIFICATE_VALUES.cert}),n=Zm.join(t,El.CERTIFICATE_PEM_NAME),s=Zm.join(t,El.PRIVATEKEY_PEM_NAME),i=Zm.join(t,El.CA_PEM_NAME);try{await qN.writeFile(n,r.cert)}catch(o){throw xN.error(o),console.error("There was a problem creating the certificate file. Please check the install log for details."),o}try{await qN.writeFile(s,r.key)}catch(o){throw xN.error(o),console.error("There was a problem creating the private key file. Please check the install log for details."),o}try{await qN.writeFile(i,El.CERTIFICATE_VALUES.cert)}catch(o){throw xN.error(o),console.error("There was a problem creating the certificate authority file. Please check the install log for details."),o}ok(n,s,i)}a(jue,"generateKeys");function ok(e,t,r){let n=Wue(Object.keys(GN.CONFIG_PARAM_MAP),!0),s=GN.CONFIG_PARAMS,i={[s.CLUSTERING_TLS_CERTIFICATE]:n[s.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]?n[s.CLUSTERING_TLS_CERTIFICATE]:e,[s.CLUSTERING_TLS_PRIVATEKEY]:n[s.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]?n[s.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]:t,[s.CLUSTERING_TLS_CERT_AUTH]:n[s.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]?n[s.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]:r,[s.TLS_CERTIFICATE]:n[s.TLS_CERTIFICATE.toLowerCase()]?n[s.TLS_CERTIFICATE.toLowerCase()]:e,[s.TLS_PRIVATEKEY]:n[s.TLS_PRIVATEKEY.toLowerCase()]?n[s.TLS_PRIVATEKEY.toLowerCase()]:t,[s.TLS_CERTIFICATEAUTHORITY]:n[s.TLS_CERTIFICATEAUTHORITY.toLowerCase()]?n[s.TLS_CERTIFICATEAUTHORITY.toLowerCase()]:r};n[s.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]&&(i[s.OPERATIONSAPI_TLS_CERTIFICATE]=n[s.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]),n[s.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]&&(i[s.OPERATIONSAPI_TLS_PRIVATEKEY]=n[s.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]),n[s.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(i[s.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY]=n[s.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]),Que.updateConfigValue(void 0,void 0,i,!1,!0)}a(ok,"updateConfigCert")});var dk=T((Wbe,_k)=>{"use strict";var tp=require("path"),Oo=require("fs-extra"),zue=vN(),Ga=q(),ck=St(),FN=J(),hs=C(),rp=Y(),Jue=require("properties-reader"),Xue=es(),Zue=VE(),e_e=Or(),Kbe=require("util"),t_e=e_e.searchByValue,r_e=Nr(),n_e=uh(),s_e=Ze(),i_e=ik(),lk=ep(),o_e=jm(),ud=new zue("4.0.0"),uk=[],cd,ld;async function a_e(){try{if(await o_e.upgradeCertsPrompt()){if(console.log("Generating new certificates."),cd){let t=rp.changeExtension(cd,".bak");await Oo.move(cd,t)}if(ld){let t=rp.changeExtension(ld,".bak");await Oo.move(ld,t)}await lk.generateKeys()}else console.log("Using existing certificates."),lk.updateConfigCert(cd,ld,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}a(a_e,"generateNewKeys");async function c_e(){console.log("Updating HarperDB nodes."),Ga.info("Updating HarperDB nodes.");let e=[];try{let t=new Xue(hs.SYSTEM_SCHEMA_NAME,hs.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=Array.from(await t_e(t)),n=[];for(let i=0,o=r.length;i<o;i++){let c=r[i];if(!s_e.NATS_TERM_CONSTRAINTS_RX.test(c.name)){let u=`Node name '${c.name}' is invalid, must not contain ., * or >. Please change name and try again.`;throw console.error(u),u}let l={host:c.host,port:c.port};e.push(l);let _=[];for(let u=0,d=c.subscriptions.length;u<d;u++){let f=c.subscriptions[u],E=f.channel.split(":");_.push({schema:E[0],table:E[1],publish:f.publish,subscribe:f.subscribe})}n.push({name:c.name,subscriptions:_,system_info:{hdb_version:hs.PRE_4_0_0_VERSION,node_version:void 0,platform:void 0}})}if(rp.isEmptyOrZeroLength(n))return;let s=new Zue(hs.SYSTEM_SCHEMA_NAME,hs.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,n);await r_e.update(s)}catch(t){throw console.error("There was a problem updating the hdb_nodes table. Please check the log for details."),t}try{n_e.setRoutes({server:"hub",routes:e})}catch(t){throw console.error("There was a problem setting the clustering routes. Please check the log for details."),t}}a(c_e,"updateNodes");async function l_e(){let e=FN.get(hs.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(tp.join("config","settings.js"))){Ga.info("pre 4.0.0 settings.js file not found, skipping settings file update");return}let t="Updating settings file for version 4.0.0";console.log(t),Ga.info(t);let r=tp.dirname(e),n=FN.get(hs.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),s=tp.join(n,"backup","4_0_0_upgrade_settings.bak"),i=tp.join(n,hs.HDB_CONFIG_FILE);try{Ga.info(`Backing up old settings file to: ${s}`),console.log(`Backing up old settings file to: ${s}`),Oo.copySync(e,s)}catch(d){throw console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),d}try{Ga.info(`Creating new/upgraded settings file at '${i}'`),console.log(`Creating new/upgraded settings file at '${i}'`),Ga.info("Updating env variables with new settings values");let d=ck.initOldConfig(e);cd=d[hs.CONFIG_PARAMS.TLS_CERTIFICATE.toLowerCase()],ld=d[hs.CONFIG_PARAMS.TLS_PRIVATEKEY.toLowerCase()],ck.createConfigFile(d)}catch(d){throw console.log("There was a problem creating the new HarperDB config file. Please check the log for details."),d}let o=rp.getPropsFilePath();Oo.accessSync(o,Oo.constants.F_OK|Oo.constants.R_OK);let l=Jue(o).get(hs.HDB_SETTINGS_NAMES.INSTALL_USER),_=`settings_path = ${i}
|
|
100
|
-
install_user = ${l}`;try{Oo.writeFileSync(o,_)}catch(d){throw console.log("There was a problem updating the HarperDB boot properties file. Please check the log for details."),d}try{FN.initSync(!0)}catch(d){throw console.error("Unable to initialize new properties. Please check the log for details."),d}let u="New settings file for 4.0.0 upgrade successfully created.";try{Oo.removeSync(r),console.log(u),Ga.info(u)}catch(d){throw console.error("There was a problem deleting the old settings file and directory. Please check the log for details."),d}}a(l_e,"updateSettingsFile_4_0_0");ud.async_functions.push(l_e);ud.async_functions.push(a_e);ud.async_functions.push(i_e);ud.async_functions.push(c_e);uk.push(ud);_k.exports=uk});var kN=T((jbe,mk)=>{"use strict";var Fa=Y(),u_e=C(),fk=q(),{DATA_VERSION:__e,UPGRADE_VERSION:d_e}=u_e.UPGRADE_JSON_FIELD_NAMES_ENUM,Ek=ek(),np=dk(),ka=new Map;Ek&&Ek.forEach(e=>{ka.set(e.version,e)});np&&np.forEach(e=>{ka.set(e.version,e)});np&&np.forEach(e=>{ka.set(e.version,e)});function f_e(){return[...ka.keys()].sort(Fa.compareVersions)}a(f_e,"getSortedVersions");function hk(e){let t=e[__e],r=e[d_e];return Fa.isEmptyOrZeroLength(t)||Fa.isEmptyOrZeroLength(r)?(fk.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),fk.error("There was an error when trying to evaluate the version information for your instance. Trying to start the server anyways but it may fail. If you continue to have this problem, please contact support@harperdb.io."),[]):[...ka.keys()].sort(Fa.compareVersions).filter(function(n){return Fa.compareVersions(n,t)>0&&Fa.compareVersions(n,r)<=0})}a(hk,"getVersionsForUpgrade");function E_e(e){return hk(e).length>0}a(E_e,"hasUpgradesRequired");function h_e(e){return Fa.isEmptyOrZeroLength(e)?null:ka.has(e)?ka.get(e):null}a(h_e,"getDirectiveByVersion");mk.exports={getSortedVersions:f_e,getDirectiveByVersion:h_e,getVersionsForUpgrade:hk,hasUpgradesRequired:E_e}});var sp=T((Jbe,Rk)=>{"use strict";var m_e=require("util"),$N=require("chalk"),p_e=require("os"),Sk=Nr(),S_e=Or(),Sn=C(),Tk=kF(),YN=KT(),{UpgradeObject:pk}=YF(),{forceDowngradePrompt:T_e}=jm(),g_e=Uo(),_d=q(),hl=Y(),KN=In(),R_e=(Re(),re(xe)),A_e=kN(),O_e=m_e.promisify(KN.setSchemaDataToGlobal),N_e=S_e.searchByValue,b_e="info_id",y_e="2.9.9",I_e="3.0.0";async function w_e(e){let t=new Tk.HdbInfoInsertObject(1,e,e),r=new YN.InsertObject(Sn.OPERATIONS_ENUM.INSERT,Sn.SYSTEM_SCHEMA_NAME,Sn.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Sn.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return KN.setSchemaDataToGlobal(),Sk.insert(r)}a(w_e,"insertHdbInstallInfo");async function VN(e){let t,r=await gk(),n=new Map([[0,{}]]);for(let c of r)n.set(c.info_id,c);let i=Math.max.apply(null,[...n.keys()])+1;t=new Tk.HdbInfoInsertObject(i,e,e);let o=new YN.InsertObject(Sn.OPERATIONS_ENUM.INSERT,Sn.SYSTEM_SCHEMA_NAME,Sn.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Sn.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return await O_e(),Sk.insert(o)}a(VN,"insertHdbUpgradeInfo");async function gk(){let e=new YN.NoSQLSeachObject(Sn.SYSTEM_SCHEMA_NAME,Sn.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,b_e,Sn.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await N_e(e))}catch(r){_d.info(r)}return t}a(gk,"getAllHdbInfoRecords");async function C_e(){let e=await gk();if(e.length===0)return;let t,r=new Map;for(let s of e)r.set(s.info_id,s);let n=Math.max.apply(null,[...r.keys()]);return t=r.get(n),t}a(C_e,"getLatestHdbInfoRecord");async function L_e(){_d.info("Checking if HDB software has been updated");try{let e=g_e.version(),t=await C_e(),r;if(hl.isEmpty(t))r=y_e;else if(r=t.data_version_num,hl.compareVersions(r.toString(),e.toString())>0){if(!hl.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log($N.yellow(`This instance's data was last run on version ${r}`)),console.error($N.red(`You have installed a version lower than the version that your data was created on or was upgraded to. This may cause issues and is currently not supported.${p_e.EOL}${Sn.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");hl.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log($N.yellow(`This instance's data was last run on version ${r}`)),await T_e(new pk(r,e))?await VN(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(KN.setSchemaDataToGlobal(),D_e(r),e.toString()===r.toString())return;let n=new pk(r,e);if(A_e.hasUpgradesRequired(n))return n;hl.compareVersions(n.data_version.toString(),n.upgrade_version.toString())<0&&(await VN(n.upgrade_version),_d.notify(`HarperDB running on upgraded version: ${n.upgrade_version}`))}catch(e){throw _d.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),_d.fatal(e),e}}a(L_e,"getVersionUpdateInfo");function D_e(e){let t=`You are attempting to upgrade from an old instance of HarperDB that is no longer supported. In order to upgrade to this version, you must do a fresh install. If you need support, please contact ${Sn.HDB_SUPPORT_ADDRESS}`;if(!("hdb_info"in R_e.databases.system))throw console.log(t),new Error(t);if(!hl.isEmpty(e)&&e<I_e)throw console.log(t),new Error(t)}a(D_e,"checkIfInstallIsSupported");Rk.exports={insertHdbInstallInfo:w_e,insertHdbUpgradeInfo:VN,getVersionUpdateInfo:L_e}});var yk=T((Zbe,bk)=>{"use strict";var WN=require("joi"),{boolean:P_e,string:Ak,number:M_e}=WN.types(),Ok=require("fs-extra"),dd=C(),Nk=require("path"),U_e=rt();bk.exports=v_e;function v_e(e){let t=Ak.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=WN.object({[dd.INSTALL_PROMPTS.ROOTPATH]:WN.custom(B_e),[dd.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:M_e.min(0),[dd.INSTALL_PROMPTS.TC_AGREEMENT]:Ak.valid("yes","YES","Yes"),[dd.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[dd.INSTALL_PROMPTS.CLUSTERING_ENABLED]:P_e});return U_e.validateBySchema(e,r)}a(v_e,"installValidator");function B_e(e,t){if(Ok.existsSync(Nk.join(e,"system/hdb_user/data.mdb"))||Ok.existsSync(Nk.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}a(B_e,"validateRootAvailable")});var wk=T((tye,Ik)=>{"use strict";var{mkdirpSync:H_e}=require("fs-extra"),Ks=require("path"),ml=C(),jN=q(),q_e=yn(),QN=ri(),x_e=je();Ik.exports=G_e;async function G_e(e){jN.trace("Mounting HarperDB"),ms(e),ms(Ks.join(e,"backup")),ms(Ks.join(e,"trash")),ms(Ks.join(e,"keys")),ms(Ks.join(e,"keys",ml.LICENSE_FILE_NAME)),ms(Ks.join(e,"log")),ms(Ks.join(e,"doc")),ms(Ks.join(e,"database")),ms(Ks.join(e,ml.TRANSACTIONS_DIR_NAME)),ms(Ks.join(e,"clustering","leaf")),ms(Ks.join(e,"components")),await F_e()}a(G_e,"mountHdb");async function F_e(){let e=mu(),t=Object.keys(QN);for(let r=0;r<t.length;r++){let n=t[r],s=QN[n].hash_attribute;try{x_e.initSystemSchemaPaths(ml.SYSTEM_SCHEMA_NAME,n);let i=new e(ml.SYSTEM_SCHEMA_NAME,n,s);i.attributes=QN[n].attributes;let o=i.attributes.find(({attribute:c})=>c===s);o.isPrimaryKey=!0,await q_e.createTable(n,i)}catch(i){throw jN.error(`issue creating environment for ${ml.SYSTEM_SCHEMA_NAME}.${n}: ${i}`),i}}}a(F_e,"createLMDBTables");function ms(e){H_e(e,{mode:ml.HDB_FILE_PERMISSIONS}),jN.info(`Directory ${e} created`)}a(ms,"makeDirectory")});var op=T((nye,xk)=>{"use strict";var JN=require("os"),Pk=require("inquirer"),kn=require("fs-extra"),k_e=require("properties-reader"),$a=require("chalk"),js=require("path"),$_e=require("human-readable-ids").hri,V_e=require("ora"),Y_e=require("yaml"),Pt=q(),yo=J(),fd=Y(),ip=Do(),Mk=sp(),Uk=Uo(),Z=C(),K_e=yk(),W_e=wk(),XN=St(),Q_e=yr(),j_e=FE(),z_e=CN(),J_e=In(),X_e=require("util").promisify,Z_e=X_e(J_e.setSchemaDataToGlobal),ede=ep(),pl=a(e=>e,"PROMPT_ANSWER_TRANSFORMER"),_r=a(e=>$a.magenta.bold(e),"HDB_PROMPT_MSG"),tde="https://harperdb.io/legal/end-user-license-agreement",Io=JN.EOL,No="",rde="yes",Ck="Starting HarperDB install...",Lk="HarperDB installation was successful.",Dk="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",nde="An out of date version of HarperDB is already installed.",zN="It appears that HarperDB is already installed. Exiting install...",sde="Aborting install",ide=new RegExp(/^([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$/),ode=new RegExp(/^[^\s.,*>]+$/),ade=JN.homedir(),cde=js.join(ade,Z.HDB_ROOT_DIR_NAME),lde=9925,ude="HDB_ADMIN",_de="CLUSTER_USER",kr={DESTINATION:"Please enter a destination for HarperDB:",HDB_PORT:"Please enter a server listening port for HarperDB:",HDB_USERNAME:"Please enter a username for the HDB_ADMIN:",HDB_PASS:"Please enter a password for the HDB_ADMIN:",NODE_NAME:"Please enter a unique name for this node:",CLUSTER_USERNAME:"Please enter a username for the CLUSTER_USER:",CLUSTER_PASS:"Please enter a password for the CLUSTER_USER:"},Sl=ip([Z.INSTALL_PROMPTS.HDB_CONFIG]),Qs,vk=!1;xk.exports=Bk;Bk.createSuperUser=qk;async function Bk(){console.log(_r(Io+Ck+Io)),Pt.notify(Ck);let e;Sl[Z.INSTALL_PROMPTS.HDB_CONFIG]&&(e=dde());let t=Ede();Object.assign(t,e);let r=K_e(t);if(r)throw r.message;await hde(),await mde(t);let n=await fde(t);n[Z.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_SECUREPORT]&&(n[Z.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]=null),Qs=n[Z.INSTALL_PROMPTS.ROOTPATH],Sl[Z.INSTALL_PROMPTS.HDB_CONFIG]&&js.dirname(Sl[Z.INSTALL_PROMPTS.HDB_CONFIG])===Qs&&(vk=!0),!Sl[Z.INSTALL_PROMPTS.HDB_CONFIG]&&await kn.pathExists(js.join(Qs,Z.HDB_CONFIG_FILE))&&(console.error(zN),process.exit());let s=V_e({prefixText:_r("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),fd.isEmpty(Qs))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");yo.setHdbBasePath(Qs),await W_e(Qs),await pde(),await Sde(n),Pt.initLogSettings(!0),await qk(n),await gde(n),await ede.generateKeys(),await Rde(),z_e(),s.stop(),console.log(_r(Io+Lk+Io)),Pt.notify(Lk)}a(Bk,"install");function dde(){let e=Y_e.parseDocument(kn.readFileSync(Sl[Z.INSTALL_PROMPTS.HDB_CONFIG],"utf8"),{simpleKeys:!0}),t=XN.flattenConfig(e.toJSON());return t[Z.CONFIG_PARAMS.ROOTPATH.toLowerCase()]&&(t.ROOTPATH=t[Z.CONFIG_PARAMS.ROOTPATH.toLowerCase()]),t}a(dde,"getConfigFromFile");async function fde(e){Pt.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:pl,when:bo(e[Z.INSTALL_PROMPTS.ROOTPATH],kr.DESTINATION),name:Z.INSTALL_PROMPTS.ROOTPATH,prefix:No,default:cde,validate:async s=>Ws(s)?Ws(s):await kn.pathExists(js.join(s,"system","hdb_user.mdb"))?`'${s}' is already in use. Please enter a different path.`:!0,message:_r(kr.DESTINATION)},{type:"input",transformer:pl,when:bo(e[Z.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]??e[Z.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_SECUREPORT],kr.HDB_PORT),name:Z.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT,prefix:No,default:lde,validate:s=>ide.test(s)?!0:"Invalid port.",message:_r(kr.HDB_PORT)},{type:"input",transformer:pl,when:bo(e[Z.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],kr.HDB_USERNAME),name:Z.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:No,default:ude,validate:s=>Ws(s)?Ws(s):(t=s,!0),message:_r(kr.HDB_USERNAME)},{type:"password",when:bo(e[Z.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],kr.HDB_PASS),name:Z.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:No,validate:s=>Ws(s)?Ws(s):!0,message:_r(kr.HDB_PASS)}];if(fd.autoCastBoolean(e[Z.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let s=[{type:"input",transformer:pl,when:bo(e[Z.INSTALL_PROMPTS.CLUSTERING_NODENAME],kr.NODE_NAME),name:Z.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:No,default:$_e.random(),validate:i=>ode.test(i)?!0:"Invalid node name, must not contain ., * or >",message:_r(kr.NODE_NAME)},{type:"input",transformer:pl,when:bo(e[Z.INSTALL_PROMPTS.CLUSTERING_USER],kr.CLUSTER_USERNAME),name:Z.INSTALL_PROMPTS.CLUSTERING_USER,prefix:No,default:_de,validate:i=>Ws(i)?Ws(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,message:_r(kr.CLUSTER_USERNAME)},{type:"password",when:bo(e[Z.INSTALL_PROMPTS.CLUSTERING_PASSWORD],kr.CLUSTER_PASS),name:Z.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:No,validate:i=>Ws(i)?Ws(i):!0,message:_r(kr.CLUSTER_PASS)}];r.push(...s)}let n=await Pk.prompt(r);if(Object.keys(n).length===0)return e;for(let s in n)e[s]===void 0&&(e[s]=n[s]);return e}a(fde,"installPrompts");function bo(e,t){return e!==void 0?(t.includes("password")?(console.log(`${_r(t)} ${$a.gray("[hidden]")}`),Pt.trace(`${_r(t)} [hidden]`)):(console.log(`${_r(t)} ${e}`),Pt.trace(`${_r(t)} ${e}`)),!1):!0}a(bo,"displayCmdEnvVar");function Ws(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}a(Ws,"checkForEmptyValue");function Ede(){let e=Object.keys(Z.INSTALL_PROMPTS),t=ip(e),r=ip(Object.keys(Z.CONFIG_PARAM_MAP),!0),n={};for(let s of e){let i=Z.CONFIG_PARAM_MAP[s.toLowerCase()];t[s]?i===void 0?n[s]=t[s]:n[i.toUpperCase()]=t[s]:i!==void 0&&r[i.toLowerCase()]&&(n[s]=r[i.toLowerCase()])}return n}a(Ede,"checkForPromptOverride");async function hde(){Pt.trace("Checking for existing install.");let e=fd.getPropsFilePath(),t=await kn.pathExists(e),r;if(t){Pt.trace(`Install found an existing boot prop file at:${e}`);let n=k_e(e),s=XN.getConfigValue(Z.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||n.get(Z.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await kn.pathExists(s)}if(!t&&fd.noBootFile()&&(r=!0),r){if(Pt.trace(`Install found existing HDB config at:${e}`),await Mk.getVersionUpdateInfo()){let s=`Please use \`harperdb upgrade\` to update to ${Uk.version()}. Exiting install...`;console.log(Io+$a.magenta.bold(nde)),console.log($a.magenta.bold(s)),Pt.error(s)}else console.log(Io+$a.magenta.bold(zN)),Pt.error(zN);process.exit(0)}}a(hde,"checkForExistingInstall");async function mde(e){Pt.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${tde}${Io}and can be viewed by typing or copying and pasting the URL into your web browser.${Io}I Agree to the HarperDB Terms and Conditions. (yes/no)`,r={prefix:No,transformer:pl,when:bo(e[Z.INSTALL_PROMPTS.TC_AGREEMENT],t),name:Z.INSTALL_PROMPTS.TC_AGREEMENT,message:_r(t),validate:s=>s.toLowerCase()==="yes"||s.toLowerCase()==="no"?!0:$a.yellow("Please enter 'yes' or 'no'")},n=await Pk.prompt([r]);n[Z.INSTALL_PROMPTS.TC_AGREEMENT]&&n[Z.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==rde&&(console.log($a.yellow(Dk)),Pt.error(Dk),process.exit(0))}a(mde,"termsAgreement");async function pde(){let e=js.join(Qs,Z.HDB_CONFIG_FILE),t;try{t=JN.userInfo().username}catch{t=process.env.USERNAME||process.env.USER||process.env.LOGNAME||process.env.LNAME||process.env.SUDO_USER}if(t){let r=`settings_path = ${e}
|
|
101
|
-
install_user = ${t}`,n=fd.getHomeDir(),s=js.join(n,Z.HDB_HOME_DIR_NAME),i=js.join(s,Z.LICENSE_KEY_DIR_NAME);try{kn.mkdirpSync(s,{mode:Z.HDB_FILE_PERMISSIONS}),kn.mkdirpSync(i,{mode:Z.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${Z.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let o=js.join(s,Z.BOOT_PROPS_FILE_NAME);try{await kn.writeFile(o,r)}catch(c){throw Pt.error(`There was an error creating the boot file at path: ${o}`),c}yo.setProperty(Z.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),yo.setProperty(Z.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),yo.setProperty(yo.BOOT_PROPS_FILE_PATH,o)}}a(pde,"createBootPropertiesFile");async function Sde(e){Pt.trace("Creating HarperDB config file");let t=ip(Object.keys(Z.CONFIG_PARAM_MAP),!0);Object.assign(t,e);try{XN.createConfigFile(t),yo.initSync()}catch(r){Tde(r)}}a(Sde,"createConfigFile");function Tde(e){Pt.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(sde);let t=js.resolve(yo.get(yo.BOOT_PROPS_FILE_PATH),"../");t&&kn.removeSync(t),Qs&&(vk?kn.readdirSync(Qs,{withFileTypes:!0}).forEach(n=>{let s=js.join(n.path,n.name);s!==Sl[Z.INSTALL_PROMPTS.HDB_CONFIG]&&kn.removeSync(s)}):kn.removeSync(Qs)),process.exit(1)}a(Tde,"rollbackInstall");async function Hk(e,t){Pt.trace("Creating admin user"),await Z_e();let r;try{r=await j_e.addRole(e)}catch(n){if(n.message.includes("already exists"))t=void 0;else throw n.message+="Error creating role",n}if(t)try{t.role=r.role,await Q_e.addUser(t)}catch(n){throw n.message=`Error creating user - ${n}`,n}}a(Hk,"createAdminUser");async function qk(e){Pt.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[Z.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[Z.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await Hk(t,r),delete e[Z.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[Z.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}a(qk,"createSuperUser");async function gde(e){Pt.trace("Creating Cluster user.");let t;e[Z.INSTALL_PROMPTS.CLUSTERING_USER]&&e[Z.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[Z.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[Z.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await Hk({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[Z.INSTALL_PROMPTS.CLUSTERING_USER],delete e[Z.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}a(gde,"createClusterUser");async function Rde(){let e=Uk.version();if(e)await Mk.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}a(Rde,"insertHdbVersionInfo")});var kk=T((iye,Fk)=>{"use strict";var ZN=Y(),Tn=q(),Gk=kN();Fk.exports={processDirectives:Ade};async function Ade(e){console.log("Starting upgrade process...");let t=Gk.getVersionsForUpgrade(e),r=bde(t),n=[],s=r.length;for(let i=0;i<s;i++){let o=r[i],c=`Running upgrade for version ${o.version}`;Tn.notify(c),console.log(c);let l=[],_=[];try{l=Ode(o.sync_functions)}catch(u){throw Tn.error(`Error while running an upgrade script for ${o.version}`),u}try{_=await Nde(o.async_functions)}catch(u){throw Tn.error(`Error while running an upgrade script for ${o.version}`),u}n.push(...l,..._)}return n}a(Ade,"processDirectives");function Ode(e){if(ZN.isEmptyOrZeroLength(e))return Tn.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return Tn.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(Tn.info(`Running function ${r.name}`),!(r instanceof Function)){Tn.info("Variable being processed is not a function");continue}let n=r();Tn.info(n),t.push(n)}return t}a(Ode,"runSyncFunctions");async function Nde(e){if(ZN.isEmptyOrZeroLength(e))return Tn.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return Tn.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let n=0;n<r;n++){let s=e[n];if(Tn.info(`Running function ${s.name}`),!(s instanceof Function)){Tn.info("Variable being processed is not a function");continue}let i=await s();Tn.info(i),t.push(i)}return t}a(Nde,"runAsyncFunctions");function bde(e){if(ZN.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let n=Gk.getDirectiveByVersion(r);n&&t.push(n)}return t}a(bde,"getUpgradeDirectivesToInstall")});var rb=T((aye,Qk)=>{"use strict";var ap=J();ap.initSync();var Kk=require("chalk"),$k=require("fs-extra"),Pi=q(),Di=C(),Vk=Uo(),yde=kk(),eb=Y(),Wk=sp(),Ide=jm(),Yk=Up(),wde=In(),Cde=require("util").promisify,Lde=Cde(wde.setSchemaDataToGlobal),tb,{UPGRADE_VERSION:cp}=Di.UPGRADE_JSON_FIELD_NAMES_ENUM;Qk.exports={upgrade:Dde};async function Dde(e){await Lde(),tb===void 0&&(tb=Fc()),$k.existsSync(ap.get(ap.BOOT_PROPS_FILE_PATH))||(Ed("The hdb_boot_properties file was not found. Please install HDB.",Di.LOG_LEVELS.ERROR),process.exit(1)),$k.existsSync(ap.get(Di.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))||(Ed("The hdb settings file was not found. Please make sure HDB is installed.",Di.LOG_LEVELS.ERROR),process.exit(1));let t=e;t||(t=await Wk.getVersionUpdateInfo(),t||(console.log("HarperDB version is current"),process.exit(0))),Ed(`This version of HarperDB is ${Vk.version()}`,Di.LOG_LEVELS.INFO);let r=t[cp]?t[cp]:Vk.version();r||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${Di.HDB_SUPPORT_ADDRESS}`),Pi.notify("Missing new version field from upgrade info object"),process.exit(1)),await Pde();let n,s=0;try{n=await Ide.forceUpdatePrompt(t)}catch(i){Pi.error("There was an error when prompting user about upgrade."),Pi.error(i),n=!1,s=1}n||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(s)),Pi.info(`Starting upgrade to version ${r}`),await Mde(t),Ed(`HarperDB was successfully upgraded to version ${t[cp]}`,Di.LOG_LEVELS.INFO)}a(Dde,"upgrade");async function Pde(){let e=!1,t=await Yk.findPs(Di.HDB_PROC_NAME);if(eb.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await Yk.findPs("hdb_express");eb.isEmptyOrZeroLength(r)||(e=!0)}if(!e){let r=await tb.list();eb.isEmptyOrZeroLength(r)||(e=!0)}if(e){let r="HarperDB is running, please stop all HarperDB services with 'harperdb stop' and run the upgrade command again.";console.log(Kk.red(r)),Pi.error(r),process.exit(1)}}a(Pde,"checkIfRunning");async function Mde(e){try{await yde.processDirectives(e)}catch(t){throw Ed("There was an error during the data upgrade. Please check the logs.",Di.LOG_LEVELS.ERROR),t}try{await Wk.insertHdbUpgradeInfo(e[cp])}catch(t){Pi.error("Error updating the 'hdb_info' system table."),Pi.error(t)}}a(Mde,"runUpgrade");function Ed(e,t=void 0){t||(t=Pi.info),Pi[t](e),console.log(Kk.magenta(e))}a(Ed,"printToLogAndConsole")});var Zk=T((lye,Xk)=>{"use strict";var{promises:sb,createReadStream:Ude,createWriteStream:vde}=require("fs"),{createGzip:Bde}=require("zlib"),{promisify:Hde}=require("util"),{pipeline:qde}=require("stream"),xde=Hde(qde),Gde=require("path"),Ya=J();Ya.initSync();var Va=q(),{CONFIG_PARAMS:hd,ITC_EVENT_TYPES:Fde}=C(),{onMessageFromWorkers:kde}=et(),$de=6e4,Vde="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",Yde="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",nb,zk;Xk.exports=Jk;kde(e=>{e.type===Fde.RESTART&&(Ya.initSync(!0),clearInterval(zk),Ya.get(hd.LOGGING_ROTATION_ENABLED)&&Jk())});async function Jk(){try{let e=Va.getLogFilePath(),t=Ya.get(hd.LOGGING_ROTATION_MAXSIZE),r=Ya.get(hd.LOGGING_ROTATION_INTERVAL);if(!t&&!r){Va.error(Vde);return}let n=Ya.get(hd.LOGGING_ROTATION_PATH);if(!n){Va.error(Yde);return}let s;if(t){let o=t.slice(-1),c=t.slice(0,-1);o==="G"?s=c*1e9:o==="M"?s=c*1e6:s=c*1e3}let i;if(r){let o=r.slice(-1),c=r.slice(0,-1);o==="D"?i=c*1440:o==="H"?i=c*60:i=c}nb=Date.now()/6e4,Va.trace("Log rotate enabled, maxSize:",t,"interval:",r),zk=setInterval(async()=>{if(s){let o;o=await sb.stat(e),o.size>=s&&await jk(e,n)}i&&Date.now()/6e4-nb>=i&&(await jk(e,n),nb=Date.now()/6e4)},$de).unref()}catch(e){Va.error(e)}}a(Jk,"logRotator");async function jk(e,t){let r=Ya.get(hd.LOGGING_ROTATION_COMPRESS),n=Gde.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.${r?"log.gz":"log"}`);r?(await xde(Ude(e),Bde(),vde(n)),await sb.unlink(e)):await sb.rename(e,n),Va.closeLogFile(),Va.notify(`hdb.log rotated, old log moved to ${n}`)}a(jk,"moveLogFile")});var Ka=T((Tye,a$)=>{"use strict";var $n=J();$n.initSync();var _ye=Aa(),kt=C(),Js=q(),Mi=require("fs-extra"),wo=require("path"),Kde=require("systeminformation"),Wde=CN(),Qde=op(),ib=require("chalk"),jde=Mo(),Ui=Y(),t$=St(),r$=Do(),e$=ph(),zde=rb(),Jde=Zk(),Xde=require("minimist"),{PACKAGE_ROOT:Zde}=C(),{startHTTPThreads:efe,startSocketServer:dye,mostIdleRouting:fye,remoteAffinityRouting:Eye}=(qm(),re(IN)),tfe=sp(),{isMainThread:rfe}=require("worker_threads"),hye=ri(),mye=Qi(),pye=fT(),Sye=mu(),ob=C(),zs,Tl,n$=!1,nfe="Upgrade complete. Starting HarperDB.",sfe="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",ife="HarperDB not found, starting install process.",ofe="There was an error during install, check install_log.log for more details. Exiting.",afe="HarperDB successfully started.";function cfe(){if(!n$){let e=a(()=>{Mi.removeSync(wo.join($n.get(kt.CONFIG_PARAMS.ROOTPATH),kt.HDB_PID_FILE)),process.exit(0)},"remove_hdb_pid");process.on("exit",()=>{e()}),process.on("SIGINT",()=>{e()}),process.on("SIGQUIT",()=>{e()}),process.on("SIGTERM",()=>{e()})}}a(cfe,"addExitListeners");async function s$(e=!1,t=!1){if(console.log(ib.magenta("Starting HarperDB...")),await o$()===!1){console.log(ife);try{await Qde()}catch(o){console.error(ofe,o),Js.error(o),process.exit(1)}}let r,n=Tl?.service==="clustering";Tl?.service&&!n&&(console.error("Unrecognized service argument"),process.exit(1));try{let o=Number.parseInt(await Mi.readFile(wo.join($n.get(kt.CONFIG_PARAMS.ROOTPATH),kt.HDB_PID_FILE),"utf8")),c=await Kde.processes();for(let l of c.list)if(l.pid===o){n?r=!0:console.log("HarperDB appears to be already running.");break}}catch{}zs===void 0&&(zs=Fc()),n&&(r||(console.error("HarperDB must be running to start clustering."),process.exit()),$n.get(kt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY)||(console.error("Clustering must be setup and enabled in harperdb-config."),process.exit()),console.log("Starting clustering."),await e$.generateNatsConfig(),await zs.startClusteringProcesses(!0),process.exit()),cfe(),await Mi.writeFile(wo.join($n.get(ob.CONFIG_PARAMS.ROOTPATH),ob.HDB_PID_FILE),`${process.pid}`),Js.info("HarperDB PID",process.pid);let s;try{let o=await tfe.getVersionUpdateInfo();o!==void 0&&(s=o[kt.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await zde.upgrade(o),console.log(nfe))}catch(o){s?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${s}. Exiting HarperDB.`),Js.error(o)):(console.error(sfe),Js.error(o)),process.exit(1)}if(!e){let o=r$(Object.keys(kt.CONFIG_PARAM_MAP),!0);!Ui.isEmpty(o)&&!Ui.isEmptyOrZeroLength(Object.keys(o))&&t$.updateConfigValue(void 0,void 0,o,!0,!0)}Wde(),_fe(),Ui.autoCastBoolean($n.get(kt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&rfe&&await e$.generateNatsConfig(t)}a(s$,"initialize");async function lfe(e=!1){try{Tl=Xde(process.argv),Tl.ROOTPATH&&t$.updateConfigObject("settings_path",wo.join(Tl.ROOTPATH,kt.HDB_CONFIG_FILE)),await s$(e,!0);let t=process.env.IS_SCRIPTED_SERVICE&&!Tl.service;Ui.autoCastBoolean($n.get(kt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&(t||await zs.startClusteringProcesses(),await zs.startClusteringThreads()),await efe(process.env.DEV_MODE?1:$n.get(ob.CONFIG_PARAMS.THREADS)),$n.get(kt.CONFIG_PARAMS.LOGGING_ROTATION_ENABLED)&&await Jde(),t||i$()}catch(t){console.error(t),Js.error(t),process.exit(1)}}a(lfe,"main");function i$(){Js.suppressLogging(()=>{console.log(ib.magenta(""+Mi.readFileSync(wo.join(Zde,"utility/install/ascii_logo.txt")))),console.log(ib.magenta(`|------------- HarperDB ${jde.version} successfully started ------------|`))}),Js.notify(afe)}a(i$,"started");async function ufe(e=!0){n$=!e;try{zs===void 0&&(zs=Fc()),zs.enterPM2Mode(),await s$(),Ui.autoCastBoolean($n.get(kt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&await zs.startClusteringProcesses(),await zs.startService(kt.PROCESS_DESCRIPTORS.HDB),i$(),e&&process.exit(0)}catch(t){console.error(t),Js.error(t),process.exit(1)}}a(ufe,"launch");function _fe(){let e=wo.join($n.getHdbBasePath(),kt.LICENSE_KEY_DIR_NAME,kt.LICENSE_FILE_NAME),t=wo.join(e,kt.LICENSE_FILE_NAME),r=wo.join(e,kt.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:n,HARPERDB_LICENSE:s}=r$(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(Ui.isEmpty(n)||Ui.isEmpty(s))return;Mi.mkdirpSync(e),Mi.writeFileSync(r,n),Mi.writeFileSync(t,s)}catch(n){let s=`Failed to write license & fingerprint due to: ${n.message}`;console.error(s),Js.error(s)}}a(_fe,"writeLicenseFromVars");a$.exports={launch:ufe,main:lfe,isHdbInstalled:o$};async function o$(){try{await Mi.stat(Ui.getPropsFilePath()),await Mi.stat($n.get(kt.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}catch(e){if(Ui.noBootFile())return!0;if(e.code==="ENOENT")return!1;throw Js.error(`Error checking for HDB install - ${e}`),e}return!0}a(o$,"isHdbInstalled")});var ab=T((Rye,u$)=>{"use strict";var dfe=q(),ffe=C(),Efe=require("util"),hfe=require("child_process"),c$=Efe.promisify(hfe.exec),mfe=di(),md=Fc(),l$="Stopping HarperDB.";u$.exports=pfe;async function pfe(){if(console.log(l$),dfe.notify(l$),await md.isServiceRegistered(ffe.HDB_PROC_DESCRIPTOR)){md.enterPM2Mode();let r=await md.getUniqueServicesList();for(let n in r)await md.stop(n)}await md.kill();let t=await mfe.getHDBProcessInfo();t.clustering.forEach(r=>{c$(`kill ${r.pid}`)}),t.core.forEach(r=>{c$(`kill ${r.pid}`)})}a(pfe,"stop")});var Eb=T((Oye,T$)=>{"use strict";var Sfe=require("os"),up=require("https"),_$=require("http"),vi=require("fs-extra"),Tfe=require("yaml"),gfe=require("human-readable-ids").hri,{pipeline:d$}=require("stream/promises"),{createWriteStream:_p,ensureDir:dp}=require("fs-extra"),{join:Ss}=require("path"),db=require("lodash"),Rfe=require("minimist"),m$=J(),Afe=di(),p$=q(),Sd=St(),{restart:Ofe}=Aa(),Nfe=ab(),lb=Y(),f$=Tt(),bfe=In(),{isHdbInstalled:yfe,main:S$,launch:Ife}=Ka(),wfe=op(),fp=C(),{SYSTEM_TABLE_NAMES:E$,SYSTEM_SCHEMA_NAME:Cfe,CONFIG_PARAMS:pd,OPERATIONS_ENUM:dr}=fp,Lfe=9925,Dfe="info",Pfe=1e4,Mfe="clone-node-config.yaml",fb=[E$.ROLE_TABLE_NAME,E$.USER_TABLE_NAME],$r={HDB_LEADER_USERNAME:"HDB_LEADER_USERNAME",HDB_LEADER_PASSWORD:"HDB_LEADER_PASSWORD",HDB_LEADER_URL:"HDB_LEADER_URL",HDB_LEADER_CLUSTERING_HOST:"HDB_LEADER_CLUSTERING_HOST",HDB_LEADER_CLUSTERING_PORT:"HDB_LEADER_CLUSTERING_PORT",HDB_FULLY_CONNECTED:"HDB_FULLY_CONNECTED",HDB_CLONE_OVERTOP:"HDB_CLONE_OVERTOP"},Qa=Rfe(process.argv),Td=Qa[$r.HDB_LEADER_USERNAME]??process.env[$r.HDB_LEADER_USERNAME],gd=Qa[$r.HDB_LEADER_PASSWORD]??process.env[$r.HDB_LEADER_PASSWORD],gl=Qa[$r.HDB_LEADER_URL]??process.env[$r.HDB_LEADER_URL],cb=Qa[$r.HDB_LEADER_CLUSTERING_HOST]??process.env[$r.HDB_LEADER_CLUSTERING_HOST],Ufe=Qa[$r.HDB_LEADER_CLUSTERING_PORT]??process.env[$r.HDB_LEADER_CLUSTERING_PORT],vfe=(Qa[$r.HDB_FULLY_CONNECTED]??process.env[$r.HDB_FULLY_CONNECTED])==="true",Co=(Qa[$r.HDB_CLONE_OVERTOP]??process.env[$r.HDB_CLONE_OVERTOP])==="true",ub,We,At,Ot,Al,Rl,gn,ps,_b;T$.exports=a(async function(t=!1){delete process.env.HDB_LEADER_URL;let r=await yfe();if(!Co&&r)return console.info("HarperDB is already installed, clone will not be performed"),S$();if(Co&&!r){console.info("No existing install of HarperDB found, cannot clone overtop");return}let n=Co?`Cloning node ${gl} overtop of existing HarperDB install`:`Cloning node: ${gl}`;if(console.info(n),Co)_b=Sd.readConfigFile(),Rl=_b.rootPath,await Nfe();else try{Rl=process.env.ROOTPATH?process.env.ROOTPATH:Ss(Sfe.homedir(),fp.HDB_ROOT_DIR_NAME)}catch(i){throw console.error(i),new Error("There was an error setting default rootPath. Please set 'rootPath' in clone-node-config.yaml")}let s;try{s=Ss(Rl,Mfe),We=Tfe.parseDocument(vi.readFileSync(s,"utf8"),{simpleKeys:!0}).toJSON()}catch{console.info(s+" not found, using default config values.")}Al=We?.clustering?.nodeName??gfe.random(),At=await Rd({operation:dr.GET_CONFIGURATION}),At=await JSON.parse(At.body),process.env.HDB_FETCH==="true"?(await xfe(),process.env.NODE_TLS_REJECT_UNAUTHORIZED&&delete process.env.NODE_TLS_REJECT_UNAUTHORIZED):await qfe(),Co||await Hfe(),await Bfe(),await Gfe(),await Ffe(t),console.info("Successfully cloned node: "+gl),t&&process.exit()},"cloneNode");async function Bfe(){console.info("Cloning configuration"),ub=At?.clustering?.enabled;let e={[pd.ROOTPATH]:Rl};if(ub&&We?.clustering?.enabled!==!1){if(cb==null)throw new Error("'HDB_LEADER_CLUSTERING_HOST' must be defined");e[pd.CLUSTERING_ENABLED]=!0;let n=At?.clustering?.hubServer?.cluster?.network?.routes,s=parseInt(Ufe)||At?.clustering?.hubServer?.cluster?.network?.port;e[pd.CLUSTERING_USER]=At?.clustering?.user;let i=m$.get(pd.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES);Array.isArray(i)?i.push({host:cb,port:s}):i=[{host:cb,port:s}],Array.isArray(n)&&(i=i.concat(n)),e[pd.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES]=i}let t=We?.componentConfig?.exclude;t=t?t.reduce((n,s)=>({...n,[s.name]:!0}),{}):[];for(let n in At)At[n]?.package&&!t[n]&&await Sd.addConfig(n,At[n]);We?.databases&&await Sd.addConfig("databases",At?.schemas);let r;We&&(r=Sd.flattenConfig(We));for(let n in r){let s=fp.CONFIG_PARAM_MAP[n.toLowerCase()];s&&(e[s]=r[n])}e.rootPath==null&&delete e.rootPath,e?.clustering_nodeName==null&&(Co?e.clustering_nodeName=_b?.clustering?.nodeName??Al:e.clustering_nodeName=Al),p$.info("Cloning config:",e),db.isEmpty(e)||Sd.updateConfigValue(void 0,void 0,e,!1,!0)}a(Bfe,"cloneConfig");async function Hfe(){if(console.info("Clone node installing HarperDB."),process.env.TC_AGREEMENT="yes",process.env.ROOTPATH=Rl,!Td)throw new Error("HDB_LEADER_USERNAME is undefined.");if(process.env.HDB_ADMIN_USERNAME=Td,!gd)throw new Error("HDB_LEADER_PASSWORD is undefined.");process.env.HDB_ADMIN_PASSWORD=gd,process.env.OPERATIONSAPI_NETWORK_PORT=We?.operationsApi?.network?.port??Lfe,process.env.CLUSTERING_NODENAME=Al,process.env.CLUSTERING_LOGLEVEL=We?.clustering?.logLevel??Dfe,await wfe()}a(Hfe,"installHDB");async function qfe(){console.info("Cloning system database");let e=Wa("system");await dp(e);let t=Ss(e,"system.mdb"),r=_p(t,{overwrite:!0}),n={operation:dr.GET_BACKUP,database:"system"};Co||(n.tables=fb);let s=await h$(n,r);if(await vi.utimes(t,Date.now(),new Date(s.date)),Ot=await Rd({operation:dr.DESCRIBE_ALL}),Ot=await JSON.parse(Ot.body),gn=We?.databaseConfig?.excludeDatabases,gn=gn?gn.reduce((i,o)=>({...i,[o.database]:!0}),{}):{},At.schemas)for(let i in At.schemas)Object.keys(At.schemas[i]).includes("tables")&&(gn[i]=!0,console.info(`Excluding database '${i}' from clone because leader node has custom pathing configured for one or more of its tables`));ps=We?.databaseConfig?.excludeTables,ps=ps?ps.reduce((i,o)=>({...i,[o.database==null?null:o.database+o.table]:!0}),{}):{};for(let i in Ot){if(gn[i]){Ot[i]="excluded";continue}if(db.isEmpty(Ot[i]))continue;let o=[],c=!1;for(let E in Ot[i])ps[i+E]?(c=!0,Ot[i][E]="excluded"):o.push(E);let l;c?(console.info(`Cloning database: ${i} tables: ${o}`),l={operation:dr.GET_BACKUP,database:i,tables:o}):(console.info(`Cloning database: ${i}`),l={operation:dr.GET_BACKUP,database:i});let _=Wa(i);await dp(_);let u=Ss(_,i+".mdb"),d=_p(u,{overwrite:!0}),f=await h$(l,d);await vi.utimes(u,Date.now(),new Date(f.date))}}a(qfe,"cloneTables");async function xfe(){console.info("Cloning system database using fetch");let e={operation:dr.GET_BACKUP,database:"system"};Co||(e.tables=fb);let t=await lp(e,!0),r=Wa("system");await dp(r);let n=Ss(r,"system.mdb");if(await d$(t.body,_p(n,{overwrite:!0})),await vi.utimes(n,Date.now(),new Date(t.headers.get("date"))),Ot=await lp({operation:dr.DESCRIBE_ALL}),Ot=await Ot.json(),gn=We?.databaseConfig?.excludeDatabases,gn=gn?gn.reduce((s,i)=>({...s,[i.database]:!0}),{}):{},At.schemas)for(let s in At.schemas)Object.keys(At.schemas[s]).includes("tables")&&(gn[s]=!0,console.info(`Excluding database '${s}' from clone because leader node has custom pathing configured for one or more of its tables`));ps=We?.databaseConfig?.excludeTables,ps=ps?ps.reduce((s,i)=>({...s,[i.database==null?null:i.database+i.table]:!0}),{}):{};for(let s in Ot){if(gn[s]){Ot[s]="excluded";continue}if(db.isEmpty(Ot[s]))continue;let i=[],o=!1;for(let f in Ot[s])ps[s+f]?(o=!0,Ot[s][f]="excluded"):i.push(f);if(i.length===0)return;let c;o?(console.info(`Cloning database: ${s} tables: ${i}`),c=await lp({operation:dr.GET_BACKUP,database:s,tables:i},!0)):(console.info(`Cloning database: ${s}`),c=await lp({operation:dr.GET_BACKUP,database:s},!0));let l=Wa(s);await dp(l);let _=new Date(c.headers.get("date")),u=Ss(l,`${_.getTime()}-${s}.mdb`);await d$(c.body,_p(u,{overwrite:!0}));let d=Ss(l,s+".mdb");await vi.rename(u,d),await vi.utimes(d,Date.now(),_)}}a(xfe,"cloneTablesFetch");async function lp(e,t=!1){let r=We?.httpsRejectUnauthorized??!1,n=new up.Agent({rejectUnauthorized:r});r||(process.env.NODE_TLS_REJECT_UNAUTHORIZED="0");let i={Authorization:"Basic "+Buffer.from(Td+":"+gd).toString("base64"),"Content-Type":"application/json"};t&&(i["Accept-Encoding"]="gzip");let o=await fetch(gl,{method:"POST",headers:i,body:JSON.stringify(e),agent:n,compress:!0});if(o.ok)return o;throw console.error(`HTTP Error Response: ${o.status} ${o.statusText}`),new Error(await o.text())}a(lp,"leaderHttpReqFetch");function Wa(e){return We?.databases&&We?.databases[e]?.path||We?.storage&&We?.storage?.path||Ss(Rl,"database")}a(Wa,"getDbFileDir");async function Gfe(){let{deployComponent:e}=Bh(),t=await Rd({operation:dr.GET_COMPONENTS});t=await JSON.parse(t.body);let r=[];if(t.entries.length){for(let s of t.entries){if(!s.entries)continue;let i=!1;if(We?.componentConfig?.exclude){for(let o of We.componentConfig.exclude)if(o?.name!=null&&o.name===s.name){i=!0;break}}i||r.push(s.name)}let n=We?.componentConfig?.skipNodeModules!==!1;for(let s of r){console.info("Cloning component: "+s);let i=await Rd({operation:dr.PACKAGE_COMPONENT,project:s,skip_node_modules:n}),{payload:o}=await JSON.parse(i.body);await e({payload:o,project:s})}}}a(Gfe,"cloneComponents");async function Ffe(e){if(!ub)return;let t=await Afe.getHDBProcessInfo();t.clustering.length===0||t.core.length===0?e?await Ife(!1):await S$():(console.info(await Ofe({operation:dr.RESTART})),await lb.async_set_timeout(Pfe)),console.info("Clustering cloned tables"),e&&await lb.async_set_timeout(2e3);let r=We?.clusteringConfig?.subscribeToLeaderNode!==!1,n=We?.clusteringConfig?.publishToLeaderNode!==!1;await bfe.setSchemaDataToGlobalAsync();let s=u_(),i=await Rd({operation:dr.CLUSTER_STATUS});i=await JSON.parse(i.body);let o=[],c=await vi.stat(Ss(Wa("system"),"system.mdb"));for(let _ of fb)o.push({schema:Cfe,table:_,subscribe:r,publish:n,start_time:c.mtime.toISOString()});for(let _ in Ot){if(Ot[_]==="excluded")continue;let u=await vi.stat(Ss(Wa(_),_+".mdb"));u.mtime.setSeconds(u.mtime.getSeconds()-10);for(let d in Ot[_])Ot[_][d]!=="excluded"&&o.push({schema:_,table:d,subscribe:r,publish:n,start_time:u.mtime.toISOString()})}await f$.createTableStreams(o),p$.info("Sending add_node request to node:",At?.clustering?.nodeName,"with subscriptions:",o);let l;if(vfe==="true"&&i.connections.length>0){let _=nh(),u=[{node_name:At?.clustering?.nodeName,subscriptions:o}],d=!1;Al=m$.get(fp.CONFIG_PARAMS.CLUSTERING_NODENAME);for(let f of i.connections){if(f.node_name===Al)continue;let E={node_name:f.node_name,subscriptions:[]};for(let h of f.subscriptions){if(gn[h.schema]||ps[h.schema+h.table])continue;d=!0;let p=await vi.stat(Ss(Wa(h.schema),h.schema+".mdb"));p.mtime.setSeconds(p.mtime.getSeconds()-10),h.start_time=p.mtime.toISOString(),E.subscriptions.push(h)}u.push(E)}d&&(l=await _({operation:dr.CONFIGURE_CLUSTER,connections:u}),console.info(JSON.stringify(l)))}l||await s({operation:dr.ADD_NODE,node_name:At?.clustering?.nodeName,subscriptions:o},!0),await f$.closeConnection()}a(Ffe,"clusterTables");async function Rd(e){let t=new up.Agent({rejectUnauthorized:We?.httpsRejectUnauthorized??!1}),n={Authorization:"Basic "+Buffer.from(Td+":"+gd).toString("base64"),"Content-Type":"application/json"},s=new URL(gl),i={protocol:s.protocol,host:s.hostname,method:"POST",headers:n};return s.protocol==="https:"&&(i.agent=t),s.port&&(i.port=s.port),await lb.httpRequest(i,e)}a(Rd,"leaderHttpReq");async function h$(e,t){let r=new up.Agent({rejectUnauthorized:We?.httpsRejectUnauthorized??!1}),s={Authorization:"Basic "+Buffer.from(Td+":"+gd).toString("base64"),"Content-Type":"application/json"},i=new URL(gl),o={protocol:i.protocol,host:i.hostname,method:"POST",headers:s};return i.protocol==="https:"&&(o.agent=r,_$=up),i.port&&(o.port=i.port),new Promise((c,l)=>{let _=_$.request(o,u=>{u.statusCode!==200&&l("Request to leader node failed with code: "+u.statusCode),u.pipe(t),u.on("end",()=>{t.close(),c(u.headers)})});_.on("error",u=>{l(u)}),_.write(JSON.stringify(e)),_.end()})}a(h$,"leaderHttpStream")});var R$=T((bye,g$)=>{var kfe=op(),$fe=q();g$.exports=Vfe;async function Vfe(){try{await kfe()}catch(e){console.error("There was an error during the install."),console.error(e),$fe.error(e),process.exit(1)}}a(Vfe,"install")});var N$=T((Iye,O$)=>{"use strict";var Yfe=dh(),Kfe=q(),A$="Registration failed.";async function Wfe(){let e;try{e=await Yfe.register()}catch(t){return Kfe.error(`Registration error ${t}`),A$}return e||A$}a(Wfe,"register");O$.exports={register:Wfe}});var w$=T((Cye,I$)=>{"use strict";var mb=require("fs-extra"),pb=require("path"),hb=require("yaml"),Ad=Tt(),Od=C(),b$=Ze(),Sb=q(),Qfe=yr(),jfe=ch(),zfe=oh(),Jfe=di(),y$=J(),{isHdbInstalled:Xfe}=Ka();y$.initSync();var Vn={RUNNING:"running",STOPPED:"stopped",ERRORED:"errored",NOT_INSTALLED:"not installed"},Vr={LEAF:"leaf server",HUB:"hub server"},Ep;I$.exports=Zfe;async function Zfe(){let e={harperdb:{status:Vn.STOPPED}};if(!await Xfe()){e.harperdb.status=Vn.NOT_INSTALLED,console.log(hb.stringify(e));return}Ep=y$.get(Od.CONFIG_PARAMS.ROOTPATH);let t;try{t=Number.parseInt(await mb.readFile(pb.join(Ep,Od.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===Od.NODE_ERROR_CODES.ENOENT){Sb.info("`harperdb status` did not find a hdb.pid file"),e.harperdb.status=Vn.STOPPED,console.log(hb.stringify(e));return}throw n}let r=await Jfe.getHDBProcessInfo();for(let n of r.core)if(n.pid===t){e.harperdb.status=Vn.RUNNING,e.harperdb.pid=t;break}if(e.clustering=await eEe(r),e.clustering[Vr.HUB].status===Vn.RUNNING&&e.clustering[Vr.LEAF].status===Vn.RUNNING){let n=[],s=await jfe({});for(let o of s.nodes){let c={};for(let l in o)c[l.replace("_"," ")]=o[l];n.push(c)}e.clustering.network=n;let i=await zfe.clusterStatus();e.clustering.replication={"node name":i.node_name,"is enabled":i.is_enabled,connections:[]};for(let o of i.connections){let c={};c["node name"]=o?.node_name,c.status=o?.status,c.ports={clustering:o?.ports?.clustering,"operations api":o?.ports?.operations_api},c["latency ms"]=o?.latency_ms,c.uptime=o?.uptime,c.subscriptions=o?.subscriptions,c["system info"]={"hdb version":o?.system_info?.hdb_version,"node version":o?.system_info?.node_version,platform:o?.system_info?.platform},e.clustering.replication.connections.push(c)}await Ad.closeConnection()}console.log(hb.stringify(e)),process.exit()}a(Zfe,"status");async function eEe(e){let t={[Vr.HUB]:{},[Vr.LEAF]:{}};if(e.clustering.length===0)return t[Vr.HUB].status=Vn.STOPPED,t[Vr.LEAF].status=Vn.STOPPED,t;let{port:r}=Ad.getServerConfig(Od.PROCESS_DESCRIPTORS.CLUSTERING_HUB),{username:n,decrypt_hash:s}=await Qfe.getClusterUser();try{(await Ad.createConnection(r,n,s,!1)).close(),t[Vr.HUB].status=Vn.RUNNING}catch{t[Vr.HUB].status=Vn.ERRORED}let{port:i}=Ad.getServerConfig(Od.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);try{(await Ad.createConnection(i,n,s,!1)).close(),t[Vr.LEAF].status=Vn.RUNNING}catch{t[Vr.LEAF].status=Vn.ERRORED}try{t[Vr.HUB].pid=Number.parseInt(await mb.readFile(pb.join(Ep,"clustering",b$.PID_FILES.HUB),"utf8"))}catch(o){Sb.error(o),t[Vr.HUB].pid=void 0}try{t[Vr.LEAF].pid=Number.parseInt(await mb.readFile(pb.join(Ep,"clustering",b$.PID_FILES.LEAF),"utf8"))}catch(o){Sb.error(o),t[Vr.LEAF].pid=void 0}return t}a(eEe,"getHubLeafStatus")});var ja=q(),tEe=Uo(),Tb=C(),hp=require("fs"),C$=require("path"),Dye=require("os"),{PACKAGE_ROOT:rEe}=C(),nEe=iy(),Pye=(qm(),re(IN)),L$=xF(),{SERVICE_ACTIONS_ENUM:Yr}=Tb;sEe();function sEe(){let e=nEe();if(e)if(e.error){console.error(e.error),ja.error(e.error);return}else e.warn&&(console.warn(e.warn),ja.warn(e.warn));let t;hp.readdir(C$.join(rEe,"bin"),r=>{if(r)return ja.error(r);process.argv&&process.argv[2]&&!process.argv[2].startsWith("-")&&(t=process.argv[2].toLowerCase());let n=L$.buildRequest();n.operation&&(t=Yr.OPERATION);let s;switch(t){case Yr.OPERATION:ja.trace("calling cli operations with:",n),L$.cliOperations(n).then();break;case Yr.DEV:process.env.DEV_MODE=!0;case Yr.RUN:let i=process.argv[3];i&&i[0]!=="-"&&(hp.existsSync(i)||(console.error(`The folder ${i} does not exist`),process.exit(1)),hp.statSync(i).isDirectory()||(console.error(`The path ${i} is not a folder`),process.exit(1)),hp.existsSync(C$.join(i,Tb.HDB_CONFIG_FILE))?process.env.ROOTPATH=i:process.env.RUN_HDB_APP=i),Ka().main();break;case Yr.START:process.env.HDB_LEADER_URL||process.argv.includes("--HDB_LEADER_URL")?Eb()(!0).catch(h=>{console.log(h)}):s=Ka().launch();break;case Yr.INSTALL:R$()().then(()=>Ka().main(!0)).catch(E=>{console.error(E)});break;case Yr.REGISTER:N$().register().then(E=>{console.log(E)}).catch(E=>{console.error(E)});break;case Yr.STOP:ab()().then(()=>{process.exit(0)}).catch(E=>{console.error(E)});break;case Yr.RESTART:Aa().restart({}).then().catch(E=>{ja.error(E),console.error(`There was an error restarting HarperDB. ${E}`),process.exit(1)});break;case Yr.VERSION:tEe.printVersion();break;case Yr.UPGRADE:ja.setLogLevel(Tb.LOG_LEVELS.INFO),rb().upgrade(null).then(()=>{console.log("Your instance of HarperDB is up to date!")}).catch(E=>{ja.error(`Got an error during upgrade ${E}`)});break;case Yr.STATUS:w$()().then().catch(E=>{console.error(E)});break;case Yr.RENEWCERTS:let{generateKeys:f}=ep();f().then(()=>{console.log("Successfully renewed self-signed certificates")}).catch(()=>{console.error(r)});break;case void 0:process.env.HDB_LEADER_URL||process.argv.includes("--HDB_LEADER_URL")?Eb()().catch(h=>{console.log(h)}):Ka().main();break;default:console.warn(`The "${t}" command is not understood.`);case Yr.HELP:console.log(`
|
|
102
|
+
Reindexing upgrade started for transaction logs`),Ci.notify("Reindexing upgrade started for transaction logs"),await Mk(ub,!0,e)),Ci.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(ld?", but errors occurred":"")}a(S_e,"reindexUpgrade");async function Mk(e,t,r){let n=await Vs.readdir(e),s=n.length;for(let i=0;i<s;i++){let o=n[i],c=Li.join(e,o.toString());if(o===".DS_Store")continue;let l=await Vs.readdir(c),_=l.length;for(let u=0;u<_;u++){let d=l[u];if(d!==".DS_Store"&&Vs.statSync(Li.join(c,d)).isDirectory())try{await T_e(o,d,t),dr.info(`Reindexing started for ${o}.${d}`),Ci.notify(`${t?"Transaction":"Schema"} reindexing started for ${o}.${d}`),await R_e(o,d,c,t,r),dr.info(`Reindexing completed for ${o}.${d}`),Ci.notify(`Reindexing completed for ${o}.${d}`)}catch(f){ld=!0,f.schema_path=c,f.table_name=d,Ci.error("There was an error with the reindex upgrade, check the logs in hdb/3_0_0_upgrade_tmp for more details"),Ci.error(f),dr.error(f),console.error(f)}}}if(!ld)try{await Vs.rm(lm,{recursive:!0})}catch{}}a(Mk,"processTables");async function T_e(e,t,r){let s=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=Li.join(lm,s);await Vs.ensureDir(lm),await Vs.writeFile(i,""),dr=p_e({level:"debug",formatters:{bindings(){}}},i)}a(T_e,"initPinoLogger");var g_e=20;async function R_e(e,t,r,n,s){let i;try{i=await Sn.openEnvironment(r,t,n)}catch(g){if(g.message==="MDB_INVALID: File is not an LMDB file"){Ci.notify(`${e}.${t} file is not from the old environment and has been skipped`),console.info(`${e}.${t} file is not from the old environment and has been skipped`),dr.error(g);return}throw g}let o=N_e(i.dbis),c=Sn.openDBI(i,o),l=Object.keys(i.dbis),_=Sn.statDBI(i,o);dr.info(`Old environment stats: ${JSON.stringify(_)}`);let u=new h_e.SingleBar({format:`${e}.${t} |{bar}| {percentage}% || {value}/{total} records`,barCompleteChar:"\u2588",barIncompleteChar:"\u2591",hideCursor:!0,clearOnComplete:!1});u.start(_.entryCount,0,{});let d=await Sn.createEnvironment(r,t,!1);Sn.createDBI(d,o,!1,!0);let f=[];try{for(let g of c.getRange({start:!1}))g.value=Object.assign({},g.value),f.push(g),n||e==="system"&&(t==="hdb_schema"&&(g.key=g.key.toString(),g.value.name=g.value.name.toString()),t==="hdb_table"&&(g.key=g.key.toString(),g.value.schema=g.value.schema.toString(),g.value.name=g.value.name.toString()),t==="hdb_attribute"&&(g.key=g.key.toString(),g.value.schema=g.value.schema.toString(),g.value.table=g.value.table.toString(),g.value.attribute=g.value.attribute.toString())),f.length>g_e&&await E();await E()}catch(g){throw ld=!0,dr.error(g),g}async function E(){let g,A=f.map(({value:v})=>v);n?g=await Promise.all(A.map(v=>A_e(d,v))):g=await __e(d,o,l.filter(v=>v!=="__blob__"),A,!1);for(let v=0,U=f.length;v<U;v++){let{key:F,value:H}=f[v];dr.info(`Record hash value: ${F} hash: ${o}`);let j;n?j=g[v]:j=g.written_hashes.indexOf(F)>-1,cd(j,!0),O_e(d,o,H[o],n),dr.info(`Insert success, written hashes: ${g.written_hashes}`),u.increment()}f=[],u.value/u.total*100%10===0&&Ci.notify(`${e}.${t} ${u.value}/${u.total} records inserted`),dr.info(`${u.value}/${u.total} records inserted`)}a(E,"finishOutstanding"),u.stop();let h=Sn.statDBI(i,o),m=Sn.statDBI(d,o);if(dr.info(`Old stats entry count: ${h.entryCount}. New stats entry count: ${m.entryCount}`),cd.deepStrictEqual(h.entryCount,m.entryCount),await Sn.closeEnvironment(i),await Sn.closeEnvironment(d),delete global.lmdb_map[`${e}.${t}`],s){let g=Li.join(r,t),A=Li.join(g,"data.mdb"),P=Li.join(g,"lock.mdb");await Vs.unlink(A),await Vs.unlink(P),await Vs.rmdir(g),dr.info(`Deleted old environment files from schema folder: ${A}, ${P}`)}let S=await Sn.openEnvironment(r,t),R=Sn.statDBI(S,o);dr.info(`New stats: ${JSON.stringify(m)}. New stats after move: ${JSON.stringify(R)}`),cd.deepStrictEqual(R.entryCount,m.entryCount),await Sn.closeEnvironment(S),delete global.lmdb_map[`${e}.${t}`]}a(R_e,"processTable");async function A_e(e,t){Sn.initializeDBIs(e,yo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,yo.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[yo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[yo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),E_e.isEmpty(t.user_name)||e.dbis[yo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let n of t.hash_values)e.dbis[yo.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n,r)})}a(A_e,"insertTransaction");function O_e(e,t,r,n){let i=e.dbis[t].get(r);cd.deepStrictEqual(typeof i,"object");let o;if(n){let c={[yo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[yo.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE]:i.hash_values};o=Object.entries(c)}else o=Object.entries(i);for(let[c,l]of o)if(c!==t&&e.dbis[c]!==void 0&&!f_e.isEmptyOrZeroLength(l))if(n&&c==="hash_value")for(let _=0,u=l.length;_<u;_++){let d=l[_];Uk(e,c,d,r)}else Uk(e,c,l,r)}a(O_e,"validateIndices");function Uk(e,t,r,n){try{let s=!1,i=d_e.getIndexedValues(r);if(!i)return;for(let o of i)s=e.dbis[t].doesExist(o,n),s||dr.info(`Validate indices did not find value in new DBI: ${o}. Hash: ${n}`),cd.deepStrictEqual(s,!0)}catch(s){ld=!0,dr.error(s),console.error(s)}}a(Uk,"validateIndex");function N_e(e){let t;for(let[r,n]of Object.entries(e))if(n.__dbi_defintion__.is_hash_attribute===!0){t=r;break}return t}a(N_e,"getHashDBI")});var _m=T((Uye,qk)=>{"use strict";var b_e=require("mkcert"),um=require("path"),_b=require("fs-extra"),db=x(),y_e=X(),fb=C(),ml=fg(),I_e=Uo(),w_e=Et();qk.exports={generateKeys:C_e,updateConfigCert:Hk};async function C_e(){let e=y_e.getHdbBasePath(),t=um.join(e,fb.LICENSE_KEY_DIR_NAME),r=await b_e.createCert({domains:["127.0.0.1","localhost","::1"],validityDays:3650,caKey:ml.CERTIFICATE_VALUES.key,caCert:ml.CERTIFICATE_VALUES.cert}),n=um.join(t,ml.CERTIFICATE_PEM_NAME),s=um.join(t,ml.PRIVATEKEY_PEM_NAME),i=um.join(t,ml.CA_PEM_NAME);try{await _b.writeFile(n,r.cert)}catch(o){throw db.error(o),console.error("There was a problem creating the certificate file. Please check the install log for details."),o}try{await _b.writeFile(s,r.key)}catch(o){throw db.error(o),console.error("There was a problem creating the private key file. Please check the install log for details."),o}try{await _b.writeFile(i,ml.CERTIFICATE_VALUES.cert)}catch(o){throw db.error(o),console.error("There was a problem creating the certificate authority file. Please check the install log for details."),o}Hk(n,s,i)}a(C_e,"generateKeys");function Hk(e,t,r){let n=I_e(Object.keys(fb.CONFIG_PARAM_MAP),!0),s=fb.CONFIG_PARAMS,i={[s.CLUSTERING_TLS_CERTIFICATE]:n[s.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]?n[s.CLUSTERING_TLS_CERTIFICATE]:e,[s.CLUSTERING_TLS_PRIVATEKEY]:n[s.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]?n[s.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]:t,[s.CLUSTERING_TLS_CERT_AUTH]:n[s.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]?n[s.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]:r,[s.TLS_CERTIFICATE]:n[s.TLS_CERTIFICATE.toLowerCase()]?n[s.TLS_CERTIFICATE.toLowerCase()]:e,[s.TLS_PRIVATEKEY]:n[s.TLS_PRIVATEKEY.toLowerCase()]?n[s.TLS_PRIVATEKEY.toLowerCase()]:t,[s.TLS_CERTIFICATEAUTHORITY]:n[s.TLS_CERTIFICATEAUTHORITY.toLowerCase()]?n[s.TLS_CERTIFICATEAUTHORITY.toLowerCase()]:r};n[s.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]&&(i[s.OPERATIONSAPI_TLS_CERTIFICATE]=n[s.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]),n[s.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]&&(i[s.OPERATIONSAPI_TLS_PRIVATEKEY]=n[s.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]),n[s.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(i[s.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY]=n[s.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]),w_e.updateConfigValue(void 0,void 0,i,!1,!0)}a(Hk,"updateConfigCert")});var $k=T((Hye,kk)=>{"use strict";var dm=require("path"),Io=require("fs-extra"),L_e=cb(),xa=x(),Gk=Et(),Eb=X(),ps=C(),fm=K(),D_e=require("properties-reader"),P_e=Zn(),M_e=rh(),U_e=nr(),Bye=require("util"),v_e=U_e.searchByValue,B_e=br(),H_e=Oh(),q_e=et(),G_e=Bk(),xk=_m(),x_e=om(),dd=new L_e("4.0.0"),Fk=[],ud,_d;async function F_e(){try{if(await x_e.upgradeCertsPrompt()){if(console.log("Generating new certificates."),ud){let t=fm.changeExtension(ud,".bak");await Io.move(ud,t)}if(_d){let t=fm.changeExtension(_d,".bak");await Io.move(_d,t)}await xk.generateKeys()}else console.log("Using existing certificates."),xk.updateConfigCert(ud,_d,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}a(F_e,"generateNewKeys");async function k_e(){console.log("Updating HarperDB nodes."),xa.info("Updating HarperDB nodes.");let e=[];try{let t=new P_e(ps.SYSTEM_SCHEMA_NAME,ps.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=Array.from(await v_e(t)),n=[];for(let i=0,o=r.length;i<o;i++){let c=r[i];if(!q_e.NATS_TERM_CONSTRAINTS_RX.test(c.name)){let u=`Node name '${c.name}' is invalid, must not contain ., * or >. Please change name and try again.`;throw console.error(u),u}let l={host:c.host,port:c.port};e.push(l);let _=[];for(let u=0,d=c.subscriptions.length;u<d;u++){let f=c.subscriptions[u],E=f.channel.split(":");_.push({schema:E[0],table:E[1],publish:f.publish,subscribe:f.subscribe})}n.push({name:c.name,subscriptions:_,system_info:{hdb_version:ps.PRE_4_0_0_VERSION,node_version:void 0,platform:void 0}})}if(fm.isEmptyOrZeroLength(n))return;let s=new M_e(ps.SYSTEM_SCHEMA_NAME,ps.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,n);await B_e.update(s)}catch(t){throw console.error("There was a problem updating the hdb_nodes table. Please check the log for details."),t}try{H_e.setRoutes({server:"hub",routes:e})}catch(t){throw console.error("There was a problem setting the clustering routes. Please check the log for details."),t}}a(k_e,"updateNodes");async function $_e(){let e=Eb.get(ps.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(dm.join("config","settings.js"))){xa.info("pre 4.0.0 settings.js file not found, skipping settings file update");return}let t="Updating settings file for version 4.0.0";console.log(t),xa.info(t);let r=dm.dirname(e),n=Eb.get(ps.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),s=dm.join(n,"backup","4_0_0_upgrade_settings.bak"),i=dm.join(n,ps.HDB_CONFIG_FILE);try{xa.info(`Backing up old settings file to: ${s}`),console.log(`Backing up old settings file to: ${s}`),Io.copySync(e,s)}catch(d){throw console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),d}try{xa.info(`Creating new/upgraded settings file at '${i}'`),console.log(`Creating new/upgraded settings file at '${i}'`),xa.info("Updating env variables with new settings values");let d=Gk.initOldConfig(e);ud=d[ps.CONFIG_PARAMS.TLS_CERTIFICATE.toLowerCase()],_d=d[ps.CONFIG_PARAMS.TLS_PRIVATEKEY.toLowerCase()],Gk.createConfigFile(d)}catch(d){throw console.log("There was a problem creating the new HarperDB config file. Please check the log for details."),d}let o=fm.getPropsFilePath();Io.accessSync(o,Io.constants.F_OK|Io.constants.R_OK);let l=D_e(o).get(ps.HDB_SETTINGS_NAMES.INSTALL_USER),_=`settings_path = ${i}
|
|
103
|
+
install_user = ${l}`;try{Io.writeFileSync(o,_)}catch(d){throw console.log("There was a problem updating the HarperDB boot properties file. Please check the log for details."),d}try{Eb.initSync(!0)}catch(d){throw console.error("Unable to initialize new properties. Please check the log for details."),d}let u="New settings file for 4.0.0 upgrade successfully created.";try{Io.removeSync(r),console.log(u),xa.info(u)}catch(d){throw console.error("There was a problem deleting the old settings file and directory. Please check the log for details."),d}}a($_e,"updateSettingsFile_4_0_0");dd.async_functions.push($_e);dd.async_functions.push(F_e);dd.async_functions.push(G_e);dd.async_functions.push(k_e);Fk.push(dd);kk.exports=Fk});var hb=T((Gye,Wk)=>{"use strict";var Fa=K(),V_e=C(),Vk=x(),{DATA_VERSION:Y_e,UPGRADE_VERSION:K_e}=V_e.UPGRADE_JSON_FIELD_NAMES_ENUM,Yk=Dk(),Em=$k(),ka=new Map;Yk&&Yk.forEach(e=>{ka.set(e.version,e)});Em&&Em.forEach(e=>{ka.set(e.version,e)});Em&&Em.forEach(e=>{ka.set(e.version,e)});function W_e(){return[...ka.keys()].sort(Fa.compareVersions)}a(W_e,"getSortedVersions");function Kk(e){let t=e[Y_e],r=e[K_e];return Fa.isEmptyOrZeroLength(t)||Fa.isEmptyOrZeroLength(r)?(Vk.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),Vk.error("There was an error when trying to evaluate the version information for your instance. Trying to start the server anyways but it may fail. If you continue to have this problem, please contact support@harperdb.io."),[]):[...ka.keys()].sort(Fa.compareVersions).filter(function(n){return Fa.compareVersions(n,t)>0&&Fa.compareVersions(n,r)<=0})}a(Kk,"getVersionsForUpgrade");function Q_e(e){return Kk(e).length>0}a(Q_e,"hasUpgradesRequired");function j_e(e){return Fa.isEmptyOrZeroLength(e)?null:ka.has(e)?ka.get(e):null}a(j_e,"getDirectiveByVersion");Wk.exports={getSortedVersions:W_e,getDirectiveByVersion:j_e,getVersionsForUpgrade:Kk,hasUpgradesRequired:Q_e}});var hm=T((Fye,Xk)=>{"use strict";var z_e=require("util"),pb=require("chalk"),J_e=require("os"),jk=br(),X_e=nr(),Tn=C(),zk=Tk(),Sb=cg(),{UpgradeObject:Qk}=Ak(),{forceDowngradePrompt:Z_e}=om(),ede=Fi(),fd=x(),Sl=K(),Tb=Ln(),tde=(ge(),oe(Fe)),rde=hb(),nde=z_e.promisify(Tb.setSchemaDataToGlobal),sde=X_e.searchByValue,ide="info_id",ode="2.9.9",ade="3.0.0";async function cde(e){let t=new zk.HdbInfoInsertObject(1,e,e),r=new Sb.InsertObject(Tn.OPERATIONS_ENUM.INSERT,Tn.SYSTEM_SCHEMA_NAME,Tn.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Tn.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return Tb.setSchemaDataToGlobal(),jk.insert(r)}a(cde,"insertHdbInstallInfo");async function mb(e){let t,r=await Jk(),n=new Map([[0,{}]]);for(let c of r)n.set(c.info_id,c);let i=Math.max.apply(null,[...n.keys()])+1;t=new zk.HdbInfoInsertObject(i,e,e);let o=new Sb.InsertObject(Tn.OPERATIONS_ENUM.INSERT,Tn.SYSTEM_SCHEMA_NAME,Tn.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Tn.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return await nde(),jk.insert(o)}a(mb,"insertHdbUpgradeInfo");async function Jk(){let e=new Sb.NoSQLSeachObject(Tn.SYSTEM_SCHEMA_NAME,Tn.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,ide,Tn.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await sde(e))}catch(r){fd.info(r)}return t}a(Jk,"getAllHdbInfoRecords");async function lde(){let e=await Jk();if(e.length===0)return;let t,r=new Map;for(let s of e)r.set(s.info_id,s);let n=Math.max.apply(null,[...r.keys()]);return t=r.get(n),t}a(lde,"getLatestHdbInfoRecord");async function ude(){fd.info("Checking if HDB software has been updated");try{let e=ede.version(),t=await lde(),r;if(Sl.isEmpty(t))r=ode;else if(r=t.data_version_num,Sl.compareVersions(r.toString(),e.toString())>0){if(!Sl.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(pb.yellow(`This instance's data was last run on version ${r}`)),console.error(pb.red(`You have installed a version lower than the version that your data was created on or was upgraded to. This may cause issues and is currently not supported.${J_e.EOL}${Tn.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");Sl.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(pb.yellow(`This instance's data was last run on version ${r}`)),await Z_e(new Qk(r,e))?await mb(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(Tb.setSchemaDataToGlobal(),_de(r),e.toString()===r.toString())return;let n=new Qk(r,e);if(rde.hasUpgradesRequired(n))return n;Sl.compareVersions(n.data_version.toString(),n.upgrade_version.toString())<0&&(await mb(n.upgrade_version),fd.notify(`HarperDB running on upgraded version: ${n.upgrade_version}`))}catch(e){throw fd.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),fd.fatal(e),e}}a(ude,"getVersionUpdateInfo");function _de(e){let t=`You are attempting to upgrade from an old instance of HarperDB that is no longer supported. In order to upgrade to this version, you must do a fresh install. If you need support, please contact ${Tn.HDB_SUPPORT_ADDRESS}`;if(!("hdb_info"in tde.databases.system))throw console.log(t),new Error(t);if(!Sl.isEmpty(e)&&e<ade)throw console.log(t),new Error(t)}a(_de,"checkIfInstallIsSupported");Xk.exports={insertHdbInstallInfo:cde,insertHdbUpgradeInfo:mb,getVersionUpdateInfo:ude}});var n$=T(($ye,r$)=>{"use strict";var gb=require("joi"),{boolean:dde,string:Zk,number:fde}=gb.types(),e$=require("fs-extra"),Ed=C(),t$=require("path"),Ede=rt();r$.exports=hde;function hde(e){let t=Zk.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=gb.object({[Ed.INSTALL_PROMPTS.ROOTPATH]:gb.custom(pde),[Ed.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:fde.min(0).allow("null",null),[Ed.INSTALL_PROMPTS.TC_AGREEMENT]:Zk.valid("yes","YES","Yes"),[Ed.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[Ed.INSTALL_PROMPTS.CLUSTERING_ENABLED]:dde});return Ede.validateBySchema(e,r)}a(hde,"installValidator");function pde(e,t){if(e$.existsSync(t$.join(e,"system/hdb_user/data.mdb"))||e$.existsSync(t$.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}a(pde,"validateRootAvailable")});var i$=T((Yye,s$)=>{"use strict";var{mkdirpSync:mde}=require("fs-extra"),Ys=require("path"),Tl=C(),Ab=x(),Sde=Cn(),Rb=ri(),Tde=ze();s$.exports=gde;async function gde(e){Ab.trace("Mounting HarperDB"),ms(e),ms(Ys.join(e,"backup")),ms(Ys.join(e,"trash")),ms(Ys.join(e,"keys")),ms(Ys.join(e,"keys",Tl.LICENSE_FILE_NAME)),ms(Ys.join(e,"log")),ms(Ys.join(e,"doc")),ms(Ys.join(e,"database")),ms(Ys.join(e,Tl.TRANSACTIONS_DIR_NAME)),ms(Ys.join(e,"clustering","leaf")),ms(Ys.join(e,"components")),await Rde()}a(gde,"mountHdb");async function Rde(){let e=hu(),t=Object.keys(Rb);for(let r=0;r<t.length;r++){let n=t[r],s=Rb[n].hash_attribute;try{Tde.initSystemSchemaPaths(Tl.SYSTEM_SCHEMA_NAME,n);let i=new e(Tl.SYSTEM_SCHEMA_NAME,n,s);i.attributes=Rb[n].attributes;let o=i.attributes.find(({attribute:c})=>c===s);o.isPrimaryKey=!0,await Sde.createTable(n,i)}catch(i){throw Ab.error(`issue creating environment for ${Tl.SYSTEM_SCHEMA_NAME}.${n}: ${i}`),i}}}a(Rde,"createLMDBTables");function ms(e){mde(e,{mode:Tl.HDB_FILE_PERMISSIONS}),Ab.info(`Directory ${e} created`)}a(ms,"makeDirectory")});var mm=T((Wye,p$)=>{"use strict";var Nb=require("os"),l$=require("inquirer"),$n=require("fs-extra"),Ade=require("properties-reader"),$a=require("chalk"),Qs=require("path"),Ode=require("human-readable-ids").hri,Nde=require("ora"),bde=require("yaml"),Ct=x(),Lo=X(),hd=K(),pm=Uo(),u$=hm(),_$=Fi(),re=C(),yde=n$(),Ide=i$(),bb=Et(),wde=wr(),Cde=ZE(),Lde=rb(),Dde=Ln(),Pde=require("util").promisify,Mde=Pde(Dde.setSchemaDataToGlobal),Ude=_m(),gl=a(e=>e,"PROMPT_ANSWER_TRANSFORMER"),fr=a(e=>$a.magenta.bold(e),"HDB_PROMPT_MSG"),vde="https://harperdb.io/legal/end-user-license-agreement",Do=Nb.EOL,wo="",Bde="yes",o$="Starting HarperDB install...",a$="HarperDB installation was successful.",c$="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",Hde="An out of date version of HarperDB is already installed.",Ob="It appears that HarperDB is already installed. Exiting install...",qde="Aborting install",Gde=new RegExp(/^([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$/),xde=new RegExp(/^[^\s.,*>]+$/),Fde=Nb.homedir(),kde=Qs.join(Fde,re.HDB_ROOT_DIR_NAME),$de=9925,Vde="HDB_ADMIN",Yde="CLUSTER_USER",kr={DESTINATION:"Please enter a destination for HarperDB:",HDB_PORT:"Please enter a server listening port for HarperDB:",HDB_USERNAME:"Please enter a username for the HDB_ADMIN:",HDB_PASS:"Please enter a password for the HDB_ADMIN:",NODE_NAME:"Please enter a unique name for this node:",CLUSTER_USERNAME:"Please enter a username for the CLUSTER_USER:",CLUSTER_PASS:"Please enter a password for the CLUSTER_USER:"},Rl=pm([re.INSTALL_PROMPTS.HDB_CONFIG]),Ws,d$=!1;p$.exports=f$;f$.createSuperUser=h$;async function f$(){console.log(fr(Do+o$+Do)),Ct.notify(o$);let e;Rl[re.INSTALL_PROMPTS.HDB_CONFIG]&&(e=Kde());let t=Qde();Object.assign(t,e);let r=yde(t);if(r)throw r.message;await jde(),await zde(t);let n=await Wde(t);n[re.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_SECUREPORT]&&(n[re.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]=null),Ws=n[re.INSTALL_PROMPTS.ROOTPATH],Rl[re.INSTALL_PROMPTS.HDB_CONFIG]&&Qs.dirname(Rl[re.INSTALL_PROMPTS.HDB_CONFIG])===Ws&&(d$=!0),!Rl[re.INSTALL_PROMPTS.HDB_CONFIG]&&await $n.pathExists(Qs.join(Ws,re.HDB_CONFIG_FILE))&&(console.error(Ob),process.exit());let s=Nde({prefixText:fr("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),hd.isEmpty(Ws))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");Lo.setHdbBasePath(Ws),await Ide(Ws),await Jde(),await Xde(n),Ct.initLogSettings(!0),await h$(n),await efe(n),await Ude.generateKeys(),await tfe(),Lde(),s.stop(),console.log(fr(Do+a$+Do)),Ct.notify(a$)}a(f$,"install");function Kde(){let e=bde.parseDocument($n.readFileSync(Rl[re.INSTALL_PROMPTS.HDB_CONFIG],"utf8"),{simpleKeys:!0}),t=bb.flattenConfig(e.toJSON());return t[re.CONFIG_PARAMS.ROOTPATH.toLowerCase()]&&(t.ROOTPATH=t[re.CONFIG_PARAMS.ROOTPATH.toLowerCase()]),t}a(Kde,"getConfigFromFile");async function Wde(e){Ct.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:gl,when:Co(e[re.INSTALL_PROMPTS.ROOTPATH],kr.DESTINATION),name:re.INSTALL_PROMPTS.ROOTPATH,prefix:wo,default:kde,validate:async s=>Ks(s)?Ks(s):await $n.pathExists(Qs.join(s,"system","hdb_user.mdb"))?`'${s}' is already in use. Please enter a different path.`:!0,message:fr(kr.DESTINATION)},{type:"input",transformer:gl,when:Co(e[re.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]??e[re.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_SECUREPORT],kr.HDB_PORT),name:re.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT,prefix:wo,default:$de,validate:s=>Gde.test(s)?!0:"Invalid port.",message:fr(kr.HDB_PORT)},{type:"input",transformer:gl,when:Co(e[re.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],kr.HDB_USERNAME),name:re.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:wo,default:Vde,validate:s=>Ks(s)?Ks(s):(t=s,!0),message:fr(kr.HDB_USERNAME)},{type:"password",when:Co(e[re.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],kr.HDB_PASS),name:re.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:wo,validate:s=>Ks(s)?Ks(s):!0,message:fr(kr.HDB_PASS)}];if(hd.autoCastBoolean(e[re.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let s=[{type:"input",transformer:gl,when:Co(e[re.INSTALL_PROMPTS.CLUSTERING_NODENAME],kr.NODE_NAME),name:re.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:wo,default:Ode.random(),validate:i=>xde.test(i)?!0:"Invalid node name, must not contain ., * or >",message:fr(kr.NODE_NAME)},{type:"input",transformer:gl,when:Co(e[re.INSTALL_PROMPTS.CLUSTERING_USER],kr.CLUSTER_USERNAME),name:re.INSTALL_PROMPTS.CLUSTERING_USER,prefix:wo,default:Yde,validate:i=>Ks(i)?Ks(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,message:fr(kr.CLUSTER_USERNAME)},{type:"password",when:Co(e[re.INSTALL_PROMPTS.CLUSTERING_PASSWORD],kr.CLUSTER_PASS),name:re.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:wo,validate:i=>Ks(i)?Ks(i):!0,message:fr(kr.CLUSTER_PASS)}];r.push(...s)}let n=await l$.prompt(r);if(Object.keys(n).length===0)return e;for(let s in n)e[s]===void 0&&(e[s]=n[s]);return e}a(Wde,"installPrompts");function Co(e,t){return e!==void 0?(t.includes("password")?(console.log(`${fr(t)} ${$a.gray("[hidden]")}`),Ct.trace(`${fr(t)} [hidden]`)):(console.log(`${fr(t)} ${e}`),Ct.trace(`${fr(t)} ${e}`)),!1):!0}a(Co,"displayCmdEnvVar");function Ks(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}a(Ks,"checkForEmptyValue");function Qde(){let e=Object.keys(re.INSTALL_PROMPTS),t=pm(e),r=pm(Object.keys(re.CONFIG_PARAM_MAP),!0),n={};for(let s of e){let i=re.CONFIG_PARAM_MAP[s.toLowerCase()];t[s]?i===void 0?n[s]=t[s]:n[i.toUpperCase()]=t[s]:i!==void 0&&r[i.toLowerCase()]&&(n[s]=r[i.toLowerCase()])}return n}a(Qde,"checkForPromptOverride");async function jde(){Ct.trace("Checking for existing install.");let e=hd.getPropsFilePath(),t=await $n.pathExists(e),r;if(t){Ct.trace(`Install found an existing boot prop file at:${e}`);let n=Ade(e),s=bb.getConfigValue(re.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||n.get(re.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await $n.pathExists(s)}if(!t&&hd.noBootFile()&&(r=!0),r){if(Ct.trace(`Install found existing HDB config at:${e}`),await u$.getVersionUpdateInfo()){let s=`Please use \`harperdb upgrade\` to update to ${_$.version()}. Exiting install...`;console.log(Do+$a.magenta.bold(Hde)),console.log($a.magenta.bold(s)),Ct.error(s)}else console.log(Do+$a.magenta.bold(Ob)),Ct.error(Ob);process.exit(0)}}a(jde,"checkForExistingInstall");async function zde(e){Ct.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${vde}${Do}and can be viewed by typing or copying and pasting the URL into your web browser.${Do}I Agree to the HarperDB Terms and Conditions. (yes/no)`,r={prefix:wo,transformer:gl,when:Co(e[re.INSTALL_PROMPTS.TC_AGREEMENT],t),name:re.INSTALL_PROMPTS.TC_AGREEMENT,message:fr(t),validate:s=>s.toLowerCase()==="yes"||s.toLowerCase()==="no"?!0:$a.yellow("Please enter 'yes' or 'no'")},n=await l$.prompt([r]);n[re.INSTALL_PROMPTS.TC_AGREEMENT]&&n[re.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==Bde&&(console.log($a.yellow(c$)),Ct.error(c$),process.exit(0))}a(zde,"termsAgreement");async function Jde(){let e=Qs.join(Ws,re.HDB_CONFIG_FILE),t;try{t=Nb.userInfo().username}catch{t=process.env.USERNAME||process.env.USER||process.env.LOGNAME||process.env.LNAME||process.env.SUDO_USER}if(t){let r=`settings_path = ${e}
|
|
104
|
+
install_user = ${t}`,n=hd.getHomeDir(),s=Qs.join(n,re.HDB_HOME_DIR_NAME),i=Qs.join(s,re.LICENSE_KEY_DIR_NAME);try{$n.mkdirpSync(s,{mode:re.HDB_FILE_PERMISSIONS}),$n.mkdirpSync(i,{mode:re.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${re.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let o=Qs.join(s,re.BOOT_PROPS_FILE_NAME);try{await $n.writeFile(o,r)}catch(c){throw Ct.error(`There was an error creating the boot file at path: ${o}`),c}Lo.setProperty(re.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),Lo.setProperty(re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),Lo.setProperty(Lo.BOOT_PROPS_FILE_PATH,o)}}a(Jde,"createBootPropertiesFile");async function Xde(e){Ct.trace("Creating HarperDB config file");let t=pm(Object.keys(re.CONFIG_PARAM_MAP),!0);Object.assign(t,e);try{bb.createConfigFile(t),Lo.initSync()}catch(r){Zde(r)}}a(Xde,"createConfigFile");function Zde(e){Ct.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(qde);let t=Qs.resolve(Lo.get(Lo.BOOT_PROPS_FILE_PATH),"../");t&&$n.removeSync(t),Ws&&(d$?$n.readdirSync(Ws,{withFileTypes:!0}).forEach(n=>{let s=Qs.join(n.path,n.name);s!==Rl[re.INSTALL_PROMPTS.HDB_CONFIG]&&$n.removeSync(s)}):$n.removeSync(Ws)),process.exit(1)}a(Zde,"rollbackInstall");async function E$(e,t){Ct.trace("Creating admin user"),await Mde();let r;try{r=await Cde.addRole(e)}catch(n){if(n.message.includes("already exists"))t=void 0;else throw n.message+="Error creating role",n}if(t)try{t.role=r.role,await wde.addUser(t)}catch(n){throw n.message=`Error creating user - ${n}`,n}}a(E$,"createAdminUser");async function h$(e){Ct.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[re.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[re.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await E$(t,r),delete e[re.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[re.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}a(h$,"createSuperUser");async function efe(e){Ct.trace("Creating Cluster user.");let t;e[re.INSTALL_PROMPTS.CLUSTERING_USER]&&e[re.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[re.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[re.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await E$({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[re.INSTALL_PROMPTS.CLUSTERING_USER],delete e[re.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}a(efe,"createClusterUser");async function tfe(){let e=_$.version();if(e)await u$.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}a(tfe,"insertHdbVersionInfo")});var T$=T((jye,S$)=>{"use strict";var yb=K(),gn=x(),m$=hb();S$.exports={processDirectives:rfe};async function rfe(e){console.log("Starting upgrade process...");let t=m$.getVersionsForUpgrade(e),r=ife(t),n=[],s=r.length;for(let i=0;i<s;i++){let o=r[i],c=`Running upgrade for version ${o.version}`;gn.notify(c),console.log(c);let l=[],_=[];try{l=nfe(o.sync_functions)}catch(u){throw gn.error(`Error while running an upgrade script for ${o.version}`),u}try{_=await sfe(o.async_functions)}catch(u){throw gn.error(`Error while running an upgrade script for ${o.version}`),u}n.push(...l,..._)}return n}a(rfe,"processDirectives");function nfe(e){if(yb.isEmptyOrZeroLength(e))return gn.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return gn.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(gn.info(`Running function ${r.name}`),!(r instanceof Function)){gn.info("Variable being processed is not a function");continue}let n=r();gn.info(n),t.push(n)}return t}a(nfe,"runSyncFunctions");async function sfe(e){if(yb.isEmptyOrZeroLength(e))return gn.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return gn.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let n=0;n<r;n++){let s=e[n];if(gn.info(`Running function ${s.name}`),!(s instanceof Function)){gn.info("Variable being processed is not a function");continue}let i=await s();gn.info(i),t.push(i)}return t}a(sfe,"runAsyncFunctions");function ife(e){if(yb.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let n=m$.getDirectiveByVersion(r);n&&t.push(n)}return t}a(ife,"getUpgradeDirectivesToInstall")});var Cb=T((Jye,b$)=>{"use strict";var Sm=X();Sm.initSync();var O$=require("chalk"),g$=require("fs-extra"),Pi=x(),Di=C(),R$=Fi(),ofe=T$(),Ib=K(),N$=hm(),afe=om(),A$=Wm(),cfe=Ln(),lfe=require("util").promisify,ufe=lfe(cfe.setSchemaDataToGlobal),wb,{UPGRADE_VERSION:Tm}=Di.UPGRADE_JSON_FIELD_NAMES_ENUM;b$.exports={upgrade:_fe};async function _fe(e){await ufe(),wb===void 0&&(wb=$c()),g$.existsSync(Sm.get(Sm.BOOT_PROPS_FILE_PATH))||(pd("The hdb_boot_properties file was not found. Please install HDB.",Di.LOG_LEVELS.ERROR),process.exit(1)),g$.existsSync(Sm.get(Di.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))||(pd("The hdb settings file was not found. Please make sure HDB is installed.",Di.LOG_LEVELS.ERROR),process.exit(1));let t=e;t||(t=await N$.getVersionUpdateInfo(),t||(console.log("HarperDB version is current"),process.exit(0))),pd(`This version of HarperDB is ${R$.version()}`,Di.LOG_LEVELS.INFO);let r=t[Tm]?t[Tm]:R$.version();r||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${Di.HDB_SUPPORT_ADDRESS}`),Pi.notify("Missing new version field from upgrade info object"),process.exit(1)),await dfe();let n,s=0;try{n=await afe.forceUpdatePrompt(t)}catch(i){Pi.error("There was an error when prompting user about upgrade."),Pi.error(i),n=!1,s=1}n||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(s)),Pi.info(`Starting upgrade to version ${r}`),await ffe(t),pd(`HarperDB was successfully upgraded to version ${t[Tm]}`,Di.LOG_LEVELS.INFO)}a(_fe,"upgrade");async function dfe(){let e=!1,t=await A$.findPs(Di.HDB_PROC_NAME);if(Ib.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await A$.findPs("hdb_express");Ib.isEmptyOrZeroLength(r)||(e=!0)}if(!e){let r=await wb.list();Ib.isEmptyOrZeroLength(r)||(e=!0)}if(e){let r="HarperDB is running, please stop all HarperDB services with 'harperdb stop' and run the upgrade command again.";console.log(O$.red(r)),Pi.error(r),process.exit(1)}}a(dfe,"checkIfRunning");async function ffe(e){try{await ofe.processDirectives(e)}catch(t){throw pd("There was an error during the data upgrade. Please check the logs.",Di.LOG_LEVELS.ERROR),t}try{await N$.insertHdbUpgradeInfo(e[Tm])}catch(t){Pi.error("Error updating the 'hdb_info' system table."),Pi.error(t)}}a(ffe,"runUpgrade");function pd(e,t=void 0){t||(t=Pi.info),Pi[t](e),console.log(O$.magenta(e))}a(pd,"printToLogAndConsole")});var L$=T((Zye,C$)=>{"use strict";var{promises:Db,createReadStream:Efe,createWriteStream:hfe}=require("fs"),{createGzip:pfe}=require("zlib"),{promisify:mfe}=require("util"),{pipeline:Sfe}=require("stream"),Tfe=mfe(Sfe),gfe=require("path"),Ya=X();Ya.initSync();var Va=x(),{CONFIG_PARAMS:md,ITC_EVENT_TYPES:Rfe}=C(),{onMessageFromWorkers:Afe}=tt(),Ofe=6e4,Nfe="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",bfe="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",Lb,I$;C$.exports=w$;Afe(e=>{e.type===Rfe.RESTART&&(Ya.initSync(!0),clearInterval(I$),Ya.get(md.LOGGING_ROTATION_ENABLED)&&w$())});async function w$(){try{let e=Va.getLogFilePath(),t=Ya.get(md.LOGGING_ROTATION_MAXSIZE),r=Ya.get(md.LOGGING_ROTATION_INTERVAL);if(!t&&!r){Va.error(Nfe);return}let n=Ya.get(md.LOGGING_ROTATION_PATH);if(!n){Va.error(bfe);return}let s;if(t){let o=t.slice(-1),c=t.slice(0,-1);o==="G"?s=c*1e9:o==="M"?s=c*1e6:s=c*1e3}let i;if(r){let o=r.slice(-1),c=r.slice(0,-1);o==="D"?i=c*1440:o==="H"?i=c*60:i=c}Lb=Date.now()/6e4,Va.trace("Log rotate enabled, maxSize:",t,"interval:",r),I$=setInterval(async()=>{if(s){let o;o=await Db.stat(e),o.size>=s&&await y$(e,n)}i&&Date.now()/6e4-Lb>=i&&(await y$(e,n),Lb=Date.now()/6e4)},Ofe).unref()}catch(e){Va.error(e)}}a(w$,"logRotator");async function y$(e,t){let r=Ya.get(md.LOGGING_ROTATION_COMPRESS),n=gfe.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.${r?"log.gz":"log"}`);r?(await Tfe(Efe(e),pfe(),hfe(n)),await Db.unlink(e)):await Db.rename(e,n),Va.closeLogFile(),Va.notify(`hdb.log rotated, old log moved to ${n}`)}a(y$,"moveLogFile")});var Ka=T((lIe,q$)=>{"use strict";var Rn=X();Rn.initSync();var tIe=Na(),qt=C(),zs=x(),Mi=require("fs-extra"),Po=require("path"),yfe=require("systeminformation"),Ife=rb(),wfe=mm(),Pb=require("chalk"),Cfe=Bo(),Ui=K(),P$=Et(),M$=Uo(),D$=Lh(),Lfe=Cb(),Dfe=L$(),Pfe=require("minimist"),{PACKAGE_ROOT:Mfe}=C(),{startHTTPThreads:Ufe,startSocketServer:rIe,mostIdleRouting:nIe,remoteAffinityRouting:sIe}=(jp(),oe(eb)),vfe=hm(),{isMainThread:Bfe}=require("worker_threads"),iIe=ri(),oIe=zi(),aIe=CT(),cIe=hu(),gm=C(),js,Al,U$=!1,Hfe="Upgrade complete. Starting HarperDB.",qfe="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",Gfe="HarperDB not found, starting install process.",xfe="There was an error during install, check install_log.log for more details. Exiting.",Ffe="HarperDB successfully started.";function kfe(){if(!U$){let e=a(()=>{Mi.removeSync(Po.join(Rn.get(qt.CONFIG_PARAMS.ROOTPATH),qt.HDB_PID_FILE)),process.exit(0)},"remove_hdb_pid");process.on("exit",()=>{e()}),process.on("SIGINT",()=>{e()}),process.on("SIGQUIT",()=>{e()}),process.on("SIGTERM",()=>{e()})}}a(kfe,"addExitListeners");async function v$(e=!1,t=!1){if(console.log(Pb.magenta("Starting HarperDB...")),await H$()===!1){console.log(Gfe);try{await wfe()}catch(o){console.error(xfe,o),zs.error(o),process.exit(1)}}let r,n=Al?.service==="clustering";Al?.service&&!n&&(console.error("Unrecognized service argument"),process.exit(1));try{let o=Number.parseInt(await Mi.readFile(Po.join(Rn.get(qt.CONFIG_PARAMS.ROOTPATH),qt.HDB_PID_FILE),"utf8")),c=await yfe.processes();for(let l of c.list)if(l.pid===o){n?r=!0:console.log("HarperDB appears to be already running.");break}}catch{}js===void 0&&(js=$c()),n&&(r||(console.error("HarperDB must be running to start clustering."),process.exit()),Rn.get(qt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY)||(console.error("Clustering must be setup and enabled in harperdb-config."),process.exit()),console.log("Starting clustering."),await D$.generateNatsConfig(),await js.startClusteringProcesses(!0),process.exit()),kfe(),await Mi.writeFile(Po.join(Rn.get(gm.CONFIG_PARAMS.ROOTPATH),gm.HDB_PID_FILE),`${process.pid}`),zs.info("HarperDB PID",process.pid);let s;try{let o=await vfe.getVersionUpdateInfo();o!==void 0&&(s=o[qt.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await Lfe.upgrade(o),console.log(Hfe))}catch(o){s?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${s}. Exiting HarperDB.`),zs.error(o)):(console.error(qfe),zs.error(o)),process.exit(1)}if(!e){let o=M$(Object.keys(qt.CONFIG_PARAM_MAP),!0);!Ui.isEmpty(o)&&!Ui.isEmptyOrZeroLength(Object.keys(o))&&P$.updateConfigValue(void 0,void 0,o,!0,!0)}Ife(),Yfe(),Ui.autoCastBoolean(Rn.get(qt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&Bfe&&await D$.generateNatsConfig(t)}a(v$,"initialize");async function $fe(e=!1){try{Al=Pfe(process.argv),Al.ROOTPATH&&P$.updateConfigObject("settings_path",Po.join(Al.ROOTPATH,qt.HDB_CONFIG_FILE)),await v$(e,!0);let t=process.env.IS_SCRIPTED_SERVICE&&!Al.service;Ui.autoCastBoolean(Rn.get(qt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&(t||await js.startClusteringProcesses(),await js.startClusteringThreads()),await Ufe(process.env.DEV_MODE?1:Rn.get(gm.CONFIG_PARAMS.THREADS_COUNT)??Rn.get(gm.CONFIG_PARAMS.THREADS)),Rn.get(qt.CONFIG_PARAMS.LOGGING_ROTATION_ENABLED)&&await Dfe(),t||B$()}catch(t){console.error(t),zs.error(t),process.exit(1)}}a($fe,"main");function B$(){zs.suppressLogging(()=>{console.log(Pb.magenta(""+Mi.readFileSync(Po.join(Mfe,"utility/install/ascii_logo.txt")))),console.log(Pb.magenta(`|------------- HarperDB ${Cfe.version} successfully started ------------|`))}),zs.notify(Ffe)}a(B$,"started");async function Vfe(e=!0){U$=!e;try{js===void 0&&(js=$c()),js.enterPM2Mode(),await v$(),Ui.autoCastBoolean(Rn.get(qt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&await js.startClusteringProcesses(),await js.startService(qt.PROCESS_DESCRIPTORS.HDB),B$(),e&&process.exit(0)}catch(t){console.error(t),zs.error(t),process.exit(1)}}a(Vfe,"launch");function Yfe(){let e=Po.join(Rn.getHdbBasePath(),qt.LICENSE_KEY_DIR_NAME,qt.LICENSE_FILE_NAME),t=Po.join(e,qt.LICENSE_FILE_NAME),r=Po.join(e,qt.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:n,HARPERDB_LICENSE:s}=M$(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(Ui.isEmpty(n)||Ui.isEmpty(s))return;Mi.mkdirpSync(e),Mi.writeFileSync(r,n),Mi.writeFileSync(t,s)}catch(n){let s=`Failed to write license & fingerprint due to: ${n.message}`;console.error(s),zs.error(s)}}a(Yfe,"writeLicenseFromVars");q$.exports={launch:Vfe,main:$fe,isHdbInstalled:H$};async function H$(){try{await Mi.stat(Ui.getPropsFilePath()),await Mi.stat(Rn.get(qt.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}catch(e){if(Ui.noBootFile())return!0;if(e.code==="ENOENT")return!1;throw zs.error(`Error checking for HDB install - ${e}`),e}return!0}a(H$,"isHdbInstalled")});var Mb=T((_Ie,F$)=>{"use strict";var Kfe=x(),Wfe=C(),Qfe=require("util"),jfe=require("child_process"),G$=Qfe.promisify(jfe.exec),zfe=di(),Sd=$c(),x$="Stopping HarperDB.";F$.exports=Jfe;async function Jfe(){if(console.log(x$),Kfe.notify(x$),await Sd.isServiceRegistered(Wfe.HDB_PROC_DESCRIPTOR)){Sd.enterPM2Mode();let r=await Sd.getUniqueServicesList();for(let n in r)await Sd.stop(n)}await Sd.kill();let t=await zfe.getHDBProcessInfo();t.clustering.forEach(r=>{G$(`kill ${r.pid}`)}),t.core.forEach(r=>{G$(`kill ${r.pid}`)})}a(Jfe,"stop")});var Gb=T((fIe,z$)=>{"use strict";var Xfe=require("os"),Om=require("https"),k$=require("http"),vi=require("fs-extra"),Zfe=require("yaml"),eEe=require("human-readable-ids").hri,{pipeline:$$}=require("stream/promises"),{createWriteStream:Nm,ensureDir:bm}=require("fs-extra"),{join:Ts}=require("path"),Hb=require("lodash"),tEe=require("minimist"),W$=X(),rEe=di(),Q$=x(),gd=Et(),{restart:nEe}=Na(),sEe=Mb(),Ub=K(),V$=ht(),iEe=Ln(),{isHdbInstalled:oEe,main:j$,launch:aEe}=Ka(),cEe=mm(),ym=C(),{SYSTEM_TABLE_NAMES:Y$,SYSTEM_SCHEMA_NAME:lEe,CONFIG_PARAMS:Td,OPERATIONS_ENUM:Er}=ym,uEe=9925,_Ee="info",dEe=1e4,fEe="clone-node-config.yaml",qb=[Y$.ROLE_TABLE_NAME,Y$.USER_TABLE_NAME],$r={HDB_LEADER_USERNAME:"HDB_LEADER_USERNAME",HDB_LEADER_PASSWORD:"HDB_LEADER_PASSWORD",HDB_LEADER_URL:"HDB_LEADER_URL",HDB_LEADER_CLUSTERING_HOST:"HDB_LEADER_CLUSTERING_HOST",HDB_LEADER_CLUSTERING_PORT:"HDB_LEADER_CLUSTERING_PORT",HDB_FULLY_CONNECTED:"HDB_FULLY_CONNECTED",HDB_CLONE_OVERTOP:"HDB_CLONE_OVERTOP"},Qa=tEe(process.argv),Rd=Qa[$r.HDB_LEADER_USERNAME]??process.env[$r.HDB_LEADER_USERNAME],Ad=Qa[$r.HDB_LEADER_PASSWORD]??process.env[$r.HDB_LEADER_PASSWORD],Ol=Qa[$r.HDB_LEADER_URL]??process.env[$r.HDB_LEADER_URL],Am=Qa[$r.HDB_LEADER_CLUSTERING_HOST]??process.env[$r.HDB_LEADER_CLUSTERING_HOST],EEe=Qa[$r.HDB_LEADER_CLUSTERING_PORT]??process.env[$r.HDB_LEADER_CLUSTERING_PORT],hEe=(Qa[$r.HDB_FULLY_CONNECTED]??process.env[$r.HDB_FULLY_CONNECTED])==="true",Mo=(Qa[$r.HDB_CLONE_OVERTOP]??process.env[$r.HDB_CLONE_OVERTOP])==="true",vb,Qe,St,Tt,bl,Nl,An,Ss,Bb;z$.exports=a(async function(t=!1){delete process.env.HDB_LEADER_URL;let r=await oEe();if(!Mo&&r)return console.info("HarperDB is already installed, clone will not be performed"),j$();if(Mo&&!r){console.info("No existing install of HarperDB found, cannot clone overtop");return}let n=Mo?`Cloning node ${Ol} overtop of existing HarperDB install`:`Cloning node: ${Ol}`;if(console.info(n),Mo)Bb=gd.readConfigFile(),Nl=Bb.rootPath,await sEe();else try{Nl=process.env.ROOTPATH?process.env.ROOTPATH:Ts(Xfe.homedir(),ym.HDB_ROOT_DIR_NAME)}catch(i){throw console.error(i),new Error("There was an error setting default rootPath. Please set 'rootPath' in clone-node-config.yaml")}let s;try{s=Ts(Nl,fEe),Qe=Zfe.parseDocument(vi.readFileSync(s,"utf8"),{simpleKeys:!0}).toJSON()}catch{console.info(s+" not found, using default config values.")}bl=Qe?.clustering?.nodeName??eEe.random(),St=await Od({operation:Er.GET_CONFIGURATION}),St=await JSON.parse(St.body),process.env.HDB_FETCH==="true"?(await TEe(),process.env.NODE_TLS_REJECT_UNAUTHORIZED&&delete process.env.NODE_TLS_REJECT_UNAUTHORIZED):await SEe(),Mo||await mEe(),await pEe(),await gEe(),await REe(t),console.info("Successfully cloned node: "+Ol),t&&process.exit()},"cloneNode");async function pEe(){console.info("Cloning configuration"),vb=St?.clustering?.enabled;let e={[Td.ROOTPATH]:Nl};if(Am&&vb&&Qe?.clustering?.enabled!==!1){e[Td.CLUSTERING_ENABLED]=!0;let n=St?.clustering?.hubServer?.cluster?.network?.routes,s=parseInt(EEe)||St?.clustering?.hubServer?.cluster?.network?.port;e[Td.CLUSTERING_USER]=St?.clustering?.user;let i=W$.get(Td.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES);Array.isArray(i)?i.push({host:Am,port:s}):i=[{host:Am,port:s}],Array.isArray(n)&&(i=i.concat(n)),e[Td.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES]=i}let t=Qe?.componentConfig?.exclude;t=t?t.reduce((n,s)=>({...n,[s.name]:!0}),{}):[];for(let n in St)St[n]?.package&&!t[n]&&await gd.addConfig(n,St[n]);Qe?.databases&&await gd.addConfig("databases",St?.schemas);let r;Qe&&(r=gd.flattenConfig(Qe));for(let n in r){let s=ym.CONFIG_PARAM_MAP[n.toLowerCase()];s&&(e[s]=r[n])}e.rootPath==null&&delete e.rootPath,e?.clustering_nodeName==null&&(Mo?e.clustering_nodeName=Bb?.clustering?.nodeName??bl:e.clustering_nodeName=bl),Q$.info("Cloning config:",e),Hb.isEmpty(e)||gd.updateConfigValue(void 0,void 0,e,!1,!0)}a(pEe,"cloneConfig");async function mEe(){if(console.info("Clone node installing HarperDB."),process.env.TC_AGREEMENT="yes",process.env.ROOTPATH=Nl,!Rd)throw new Error("HDB_LEADER_USERNAME is undefined.");if(process.env.HDB_ADMIN_USERNAME=Rd,!Ad)throw new Error("HDB_LEADER_PASSWORD is undefined.");process.env.HDB_ADMIN_PASSWORD=Ad,process.env.OPERATIONSAPI_NETWORK_PORT=Qe?.operationsApi?.network?.port??uEe,process.env.CLUSTERING_NODENAME=bl,process.env.CLUSTERING_LOGLEVEL=Qe?.clustering?.logLevel??_Ee,await cEe()}a(mEe,"installHDB");async function SEe(){console.info("Cloning system database");let e=Wa("system");await bm(e);let t=Ts(e,"system.mdb"),r=Nm(t,{overwrite:!0}),n={operation:Er.GET_BACKUP,database:"system"};Mo||(n.tables=qb);let s=await K$(n,r);if(await vi.utimes(t,Date.now(),new Date(s.date)),Tt=await Od({operation:Er.DESCRIBE_ALL}),Tt=await JSON.parse(Tt.body),An=Qe?.databaseConfig?.excludeDatabases,An=An?An.reduce((i,o)=>({...i,[o.database]:!0}),{}):{},St.schemas)for(let i in St.schemas)Object.keys(St.schemas[i]).includes("tables")&&(An[i]=!0,console.info(`Excluding database '${i}' from clone because leader node has custom pathing configured for one or more of its tables`));Ss=Qe?.databaseConfig?.excludeTables,Ss=Ss?Ss.reduce((i,o)=>({...i,[o.database==null?null:o.database+o.table]:!0}),{}):{};for(let i in Tt){if(An[i]){Tt[i]="excluded";continue}if(Hb.isEmpty(Tt[i]))continue;let o=[],c=!1;for(let E in Tt[i])Ss[i+E]?(c=!0,Tt[i][E]="excluded"):o.push(E);let l;c?(console.info(`Cloning database: ${i} tables: ${o}`),l={operation:Er.GET_BACKUP,database:i,tables:o}):(console.info(`Cloning database: ${i}`),l={operation:Er.GET_BACKUP,database:i});let _=Wa(i);await bm(_);let u=Ts(_,i+".mdb"),d=Nm(u,{overwrite:!0}),f=await K$(l,d);await vi.utimes(u,Date.now(),new Date(f.date))}}a(SEe,"cloneTables");async function TEe(){console.info("Cloning system database using fetch");let e={operation:Er.GET_BACKUP,database:"system"};Mo||(e.tables=qb);let t=await Rm(e,!0),r=Wa("system");await bm(r);let n=Ts(r,"system.mdb");if(await $$(t.body,Nm(n,{overwrite:!0})),await vi.utimes(n,Date.now(),new Date(t.headers.get("date"))),Tt=await Rm({operation:Er.DESCRIBE_ALL}),Tt=await Tt.json(),An=Qe?.databaseConfig?.excludeDatabases,An=An?An.reduce((s,i)=>({...s,[i.database]:!0}),{}):{},St.schemas)for(let s in St.schemas)Object.keys(St.schemas[s]).includes("tables")&&(An[s]=!0,console.info(`Excluding database '${s}' from clone because leader node has custom pathing configured for one or more of its tables`));Ss=Qe?.databaseConfig?.excludeTables,Ss=Ss?Ss.reduce((s,i)=>({...s,[i.database==null?null:i.database+i.table]:!0}),{}):{};for(let s in Tt){if(An[s]){Tt[s]="excluded";continue}if(Hb.isEmpty(Tt[s]))continue;let i=[],o=!1;for(let f in Tt[s])Ss[s+f]?(o=!0,Tt[s][f]="excluded"):i.push(f);if(i.length===0)return;let c;o?(console.info(`Cloning database: ${s} tables: ${i}`),c=await Rm({operation:Er.GET_BACKUP,database:s,tables:i},!0)):(console.info(`Cloning database: ${s}`),c=await Rm({operation:Er.GET_BACKUP,database:s},!0));let l=Wa(s);await bm(l);let _=new Date(c.headers.get("date")),u=Ts(l,`${_.getTime()}-${s}.mdb`);await $$(c.body,Nm(u,{overwrite:!0}));let d=Ts(l,s+".mdb");await vi.rename(u,d),await vi.utimes(d,Date.now(),_)}}a(TEe,"cloneTablesFetch");async function Rm(e,t=!1){let r=Qe?.httpsRejectUnauthorized??!1,n=new Om.Agent({rejectUnauthorized:r});r||(process.env.NODE_TLS_REJECT_UNAUTHORIZED="0");let i={Authorization:"Basic "+Buffer.from(Rd+":"+Ad).toString("base64"),"Content-Type":"application/json"};t&&(i["Accept-Encoding"]="gzip");let o=await fetch(Ol,{method:"POST",headers:i,body:JSON.stringify(e),agent:n,compress:!0});if(o.ok)return o;throw console.error(`HTTP Error Response: ${o.status} ${o.statusText}`),new Error(await o.text())}a(Rm,"leaderHttpReqFetch");function Wa(e){return Qe?.databases&&Qe?.databases[e]?.path||Qe?.storage&&Qe?.storage?.path||Ts(Nl,"database")}a(Wa,"getDbFileDir");async function gEe(){let{deployComponent:e}=jh(),t=await Od({operation:Er.GET_COMPONENTS});t=await JSON.parse(t.body);let r=[];if(t.entries.length){for(let s of t.entries){if(!s.entries)continue;let i=!1;if(Qe?.componentConfig?.exclude){for(let o of Qe.componentConfig.exclude)if(o?.name!=null&&o.name===s.name){i=!0;break}}i||r.push(s.name)}let n=Qe?.componentConfig?.skipNodeModules!==!1;for(let s of r){console.info("Cloning component: "+s);let i=await Od({operation:Er.PACKAGE_COMPONENT,project:s,skip_node_modules:n}),{payload:o}=await JSON.parse(i.body);await e({payload:o,project:s})}}}a(gEe,"cloneComponents");async function REe(e){if(!vb||!Am)return;let t=await rEe.getHDBProcessInfo();t.clustering.length===0||t.core.length===0?e?await aEe(!1):await j$():(console.info(await nEe({operation:Er.RESTART})),await Ub.async_set_timeout(dEe)),console.info("Clustering cloned tables"),e&&await Ub.async_set_timeout(2e3);let r=Qe?.clusteringConfig?.subscribeToLeaderNode!==!1,n=Qe?.clusteringConfig?.publishToLeaderNode!==!1;await iEe.setSchemaDataToGlobalAsync();let s=d_(),i=await Od({operation:Er.CLUSTER_STATUS});i=await JSON.parse(i.body);let o=[],c=await vi.stat(Ts(Wa("system"),"system.mdb"));for(let _ of qb)o.push({schema:lEe,table:_,subscribe:r,publish:n,start_time:c.mtime.toISOString()});for(let _ in Tt){if(Tt[_]==="excluded")continue;let u=await vi.stat(Ts(Wa(_),_+".mdb"));u.mtime.setSeconds(u.mtime.getSeconds()-10);for(let d in Tt[_])Tt[_][d]!=="excluded"&&o.push({schema:_,table:d,subscribe:r,publish:n,start_time:u.mtime.toISOString()})}await V$.createTableStreams(o),Q$.info("Sending add_node request to node:",St?.clustering?.nodeName,"with subscriptions:",o);let l;if(hEe&&i.connections.length>0){let _=ph(),u=[{node_name:St?.clustering?.nodeName,subscriptions:o}],d=!1;bl=W$.get(ym.CONFIG_PARAMS.CLUSTERING_NODENAME);for(let f of i.connections){if(f.node_name===bl)continue;let E={node_name:f.node_name,subscriptions:[]};for(let h of f.subscriptions){if(An[h.schema]||Ss[h.schema+h.table])continue;d=!0;let m=await vi.stat(Ts(Wa(h.schema),h.schema+".mdb"));m.mtime.setSeconds(m.mtime.getSeconds()-10),h.start_time=m.mtime.toISOString(),E.subscriptions.push(h)}u.push(E)}d&&(l=await _({operation:Er.CONFIGURE_CLUSTER,connections:u}),console.info(JSON.stringify(l)))}l||await s({operation:Er.ADD_NODE,node_name:St?.clustering?.nodeName,subscriptions:o},!0),await V$.closeConnection()}a(REe,"clusterTables");async function Od(e){let t=new Om.Agent({rejectUnauthorized:Qe?.httpsRejectUnauthorized??!1}),n={Authorization:"Basic "+Buffer.from(Rd+":"+Ad).toString("base64"),"Content-Type":"application/json"},s=new URL(Ol),i={protocol:s.protocol,host:s.hostname,method:"POST",headers:n};return s.protocol==="https:"&&(i.agent=t),s.port&&(i.port=s.port),await Ub.httpRequest(i,e)}a(Od,"leaderHttpReq");async function K$(e,t){let r=new Om.Agent({rejectUnauthorized:Qe?.httpsRejectUnauthorized??!1}),s={Authorization:"Basic "+Buffer.from(Rd+":"+Ad).toString("base64"),"Content-Type":"application/json"},i=new URL(Ol),o={protocol:i.protocol,host:i.hostname,method:"POST",headers:s};return i.protocol==="https:"&&(o.agent=r,k$=Om),i.port&&(o.port=i.port),new Promise((c,l)=>{let _=k$.request(o,u=>{u.statusCode!==200&&l("Request to leader node failed with code: "+u.statusCode),u.pipe(t),u.on("end",()=>{t.close(),c(u.headers)})});_.on("error",u=>{l(u)}),_.write(JSON.stringify(e)),_.end()})}a(K$,"leaderHttpStream")});var X$=T((hIe,J$)=>{var AEe=mm(),OEe=x();J$.exports=NEe;async function NEe(){try{await AEe()}catch(e){console.error("There was an error during the install."),console.error(e),OEe.error(e),process.exit(1)}}a(NEe,"install")});var tV=T((mIe,eV)=>{"use strict";var bEe=bh(),yEe=x(),Z$="Registration failed.";async function IEe(){let e;try{e=await bEe.register()}catch(t){return yEe.error(`Registration error ${t}`),Z$}return e||Z$}a(IEe,"register");eV.exports={register:IEe}});var iV=T((TIe,sV)=>{"use strict";var Fb=require("fs-extra"),kb=require("path"),xb=require("yaml"),Nd=ht(),bd=C(),rV=et(),$b=x(),wEe=wr(),CEe=Rh(),LEe=Th(),DEe=di(),nV=X(),{isHdbInstalled:PEe}=Ka();nV.initSync();var Vn={RUNNING:"running",STOPPED:"stopped",ERRORED:"errored",NOT_INSTALLED:"not installed"},Vr={LEAF:"leaf server",HUB:"hub server"},Im;sV.exports=MEe;async function MEe(){let e={harperdb:{status:Vn.STOPPED}};if(!await PEe()){e.harperdb.status=Vn.NOT_INSTALLED,console.log(xb.stringify(e));return}Im=nV.get(bd.CONFIG_PARAMS.ROOTPATH);let t;try{t=Number.parseInt(await Fb.readFile(kb.join(Im,bd.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===bd.NODE_ERROR_CODES.ENOENT){$b.info("`harperdb status` did not find a hdb.pid file"),e.harperdb.status=Vn.STOPPED,console.log(xb.stringify(e));return}throw n}let r=await DEe.getHDBProcessInfo();for(let n of r.core)if(n.pid===t){e.harperdb.status=Vn.RUNNING,e.harperdb.pid=t;break}if(e.clustering=await UEe(r),e.clustering[Vr.HUB].status===Vn.RUNNING&&e.clustering[Vr.LEAF].status===Vn.RUNNING){let n=[],s=await CEe({});for(let o of s.nodes){let c={};for(let l in o)c[l.replace("_"," ")]=o[l];n.push(c)}e.clustering.network=n;let i=await LEe.clusterStatus();e.clustering.replication={"node name":i.node_name,"is enabled":i.is_enabled,connections:[]};for(let o of i.connections){let c={};c["node name"]=o?.node_name,c.status=o?.status,c.ports={clustering:o?.ports?.clustering,"operations api":o?.ports?.operations_api},c["latency ms"]=o?.latency_ms,c.uptime=o?.uptime,c.subscriptions=o?.subscriptions,c["system info"]={"hdb version":o?.system_info?.hdb_version,"node version":o?.system_info?.node_version,platform:o?.system_info?.platform},e.clustering.replication.connections.push(c)}await Nd.closeConnection()}console.log(xb.stringify(e)),process.exit()}a(MEe,"status");async function UEe(e){let t={[Vr.HUB]:{},[Vr.LEAF]:{}};if(e.clustering.length===0)return t[Vr.HUB].status=Vn.STOPPED,t[Vr.LEAF].status=Vn.STOPPED,t;let{port:r}=Nd.getServerConfig(bd.PROCESS_DESCRIPTORS.CLUSTERING_HUB),{username:n,decrypt_hash:s}=await wEe.getClusterUser();try{(await Nd.createConnection(r,n,s,!1)).close(),t[Vr.HUB].status=Vn.RUNNING}catch{t[Vr.HUB].status=Vn.ERRORED}let{port:i}=Nd.getServerConfig(bd.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);try{(await Nd.createConnection(i,n,s,!1)).close(),t[Vr.LEAF].status=Vn.RUNNING}catch{t[Vr.LEAF].status=Vn.ERRORED}try{t[Vr.HUB].pid=Number.parseInt(await Fb.readFile(kb.join(Im,"clustering",rV.PID_FILES.HUB),"utf8"))}catch(o){$b.error(o),t[Vr.HUB].pid=void 0}try{t[Vr.LEAF].pid=Number.parseInt(await Fb.readFile(kb.join(Im,"clustering",rV.PID_FILES.LEAF),"utf8"))}catch(o){$b.error(o),t[Vr.LEAF].pid=void 0}return t}a(UEe,"getHubLeafStatus")});var ja=x(),vEe=Fi(),Vb=C(),wm=require("fs"),oV=require("path"),RIe=require("os"),{PACKAGE_ROOT:BEe}=C(),HEe=Cy(),AIe=(jp(),oe(eb)),aV=pk(),{SERVICE_ACTIONS_ENUM:Yr}=Vb;qEe();function qEe(){let e=HEe();if(e)if(e.error){console.error(e.error),ja.error(e.error);return}else e.warn&&(console.warn(e.warn),ja.warn(e.warn));let t;wm.readdir(oV.join(BEe,"bin"),r=>{if(r)return ja.error(r);process.argv&&process.argv[2]&&!process.argv[2].startsWith("-")&&(t=process.argv[2].toLowerCase());let n=aV.buildRequest();n.operation&&(t=Yr.OPERATION);let s;switch(t){case Yr.OPERATION:ja.trace("calling cli operations with:",n),aV.cliOperations(n).then();break;case Yr.DEV:process.env.DEV_MODE=!0;case Yr.RUN:let i=process.argv[3];i&&i[0]!=="-"&&(wm.existsSync(i)||(console.error(`The folder ${i} does not exist`),process.exit(1)),wm.statSync(i).isDirectory()||(console.error(`The path ${i} is not a folder`),process.exit(1)),wm.existsSync(oV.join(i,Vb.HDB_CONFIG_FILE))?process.env.ROOTPATH=i:process.env.RUN_HDB_APP=i),Ka().main();break;case Yr.START:process.env.HDB_LEADER_URL||process.argv.includes("--HDB_LEADER_URL")?Gb()(!0).catch(h=>{console.log(h)}):s=Ka().launch();break;case Yr.INSTALL:X$()().then(()=>Ka().main(!0)).catch(E=>{console.error(E)});break;case Yr.REGISTER:tV().register().then(E=>{console.log(E)}).catch(E=>{console.error(E)});break;case Yr.STOP:Mb()().then(()=>{process.exit(0)}).catch(E=>{console.error(E)});break;case Yr.RESTART:Na().restart({}).then().catch(E=>{ja.error(E),console.error(`There was an error restarting HarperDB. ${E}`),process.exit(1)});break;case Yr.VERSION:vEe.printVersion();break;case Yr.UPGRADE:ja.setLogLevel(Vb.LOG_LEVELS.INFO),Cb().upgrade(null).then(()=>{console.log("Your instance of HarperDB is up to date!")}).catch(E=>{ja.error(`Got an error during upgrade ${E}`)});break;case Yr.STATUS:iV()().then().catch(E=>{console.error(E)});break;case Yr.RENEWCERTS:let{generateKeys:f}=_m();f().then(()=>{console.log("Successfully renewed self-signed certificates")}).catch(()=>{console.error(r)});break;case void 0:process.env.HDB_LEADER_URL||process.argv.includes("--HDB_LEADER_URL")?Gb()().catch(h=>{console.log(h)}):Ka().main();break;default:console.warn(`The "${t}" command is not understood.`);case Yr.HELP:console.log(`
|
|
102
105
|
Usage: harperdb [command]
|
|
103
106
|
|
|
104
107
|
With no command, harperdb will simply run HarperDB (in the foreground)
|
|
@@ -115,4 +118,4 @@ Commands:
|
|
|
115
118
|
upgrade - Upgrade harperdb
|
|
116
119
|
renew-certs - Generate a new set of self-signed certificates
|
|
117
120
|
status - Print the status of HarperDB and clustering
|
|
118
|
-
<api-operation> <parameter>=<value> - Run an API operation and return result to the CLI, not all operations are supported`)}})}a(
|
|
121
|
+
<api-operation> <parameter>=<value> - Run an API operation and return result to the CLI, not all operations are supported`)}})}a(qEe,"harperDBService");
|