harperdb 4.3.0-alpha.1 → 4.3.0-alpha.2
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 +55 -55
- package/bin/lite.js +18 -18
- package/launchServiceScripts/launchInstallNATSServer.js +2 -2
- package/launchServiceScripts/launchNatsIngestService.js +18 -17
- package/launchServiceScripts/launchNatsReplyService.js +18 -17
- package/launchServiceScripts/launchUpdateNodes4-0-0.js +18 -17
- package/npm-shrinkwrap.json +315 -329
- package/package.json +3 -3
- package/resources/DatabaseTransaction.d.ts +1 -1
- package/resources/RecordEncoder.d.ts +1 -0
- package/resources/Resource.d.ts +4 -1
- package/resources/Table.d.ts +32 -9
- package/resources/auditStore.d.ts +2 -2
- package/resources/crdt.d.ts +19 -0
- package/resources/databases.d.ts +23 -9
- package/resources/tracked.d.ts +7 -1
- package/server/jobs/jobProcess.js +18 -17
- package/server/threads/threadServer.js +18 -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.46136087.js → main.824bbe07.js} +2 -2
- package/utility/scripts/restartHdb.js +18 -17
- /package/studio/build-local/static/js/{main.46136087.js.LICENSE.txt → main.824bbe07.js.LICENSE.txt} +0 -0
|
@@ -1,26 +1,27 @@
|
|
|
1
|
-
"use strict";var vx=Object.create;var Ka=Object.defineProperty;var Bx=Object.getOwnPropertyDescriptor;var Hx=Object.getOwnPropertyNames;var xx=Object.getPrototypeOf,qx=Object.prototype.hasOwnProperty;var a=(e,t)=>Ka(e,"name",{value:t,configurable:!0});var ge=(e,t)=>()=>(e&&(t=e(e=0)),t);var T=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),je=(e,t)=>{for(var r in t)Ka(e,r,{get:t[r],enumerable:!0})},oA=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of Hx(t))!qx.call(e,n)&&n!==r&&Ka(e,n,{get:()=>t[n],enumerable:!(s=Bx(t,n))||s.enumerable});return e};var M=(e,t,r)=>(r=e!=null?vx(xx(e)):{},oA(t||!e||!e.__esModule?Ka(r,"default",{value:e,enumerable:!0}):r,e)),te=e=>oA(Ka({},"__esModule",{value:!0}),e);var uA=T((Bie,cA)=>{var Fx=require("fast-glob"),{statSync:GE,existsSync:kE,readFileSync:Gx,writeFileSync:kx}=require("fs"),{spawnSync:Vx,spawn:$x,execFileSync:vie}=require("child_process"),{isMainThread:Yx}=require("worker_threads"),{join:Yn,relative:aA}=require("path"),{PACKAGE_ROOT:bs}=I(),{tmpdir:Kx,platform:Wx}=require("os");require("source-map-support").install();var Qx=["resources","server","dataLayer","components"],Wa="ts-build",VE,zx=__filename.endsWith("tsBuild.js");if(zx){if(Yx){let r;try{GE(Yn(bs,Wa)),r=!0}catch{}if(r)for(let s of Fx.sync(Qx.map(n=>n+"/**/*.ts"),{cwd:bs})){let n=0,i=0;try{n=GE(Yn(bs,s)).mtimeMs-5e3,i=GE(Yn(bs,Wa,s.replace(/.ts$/,".js"))).mtimeMs}catch{}if(n>i){console.warn(`TypeScript ${s} is not compiled`+(i?` (TS source file was modified at ${new Date(n)} and compiled file at ${new Date(i)})`:"")+", consider enabling auto-compilation of TypeScript in your IDE), compiling now."),VE=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),VE=!0;if(VE){let s=Yn(bs,"node_modules/.bin/tsc");Wx()==="win32"&&(s+=".cmd");let n=Vx(s,{cwd:bs});if(n.stdout.length&&console.log(n.stdout.toString()),n.stderr.length&&console.log(n.stderr.toString()),r){let i=Yn(Kx(),"harperdb-tsc.pid"),o;if(kE(i))try{process.kill(+Gx(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=$x(s,["--watch"],{cwd:bs,detached:!0,stdio:"ignore"});kx(i,c.pid.toString()),c.unref()}}}}let e=cA.constructor,t=e._findPath;e._findPath=function(r,s,n){if(r.startsWith(".")&&!n&&s.length===1&&s[0].startsWith(bs)&&!s[0].includes("node_modules")){let i=aA(bs,s[0]),o;i.startsWith(Wa)?o=Yn(bs,aA(Wa,i)):o=Yn(bs,Wa,i);let c=Yn(o,r),u=c+".js";if(kE(u))return u;if(c.includes(".")&&kE(c))return c}return t(r,s,n)}}});var I=T((qie,OA)=>{"use strict";var jr=require("path"),Jx=require("fs"),{relative:Hie,join:xie}=jr,{existsSync:Xx}=Jx;function jx(){let e=__dirname;for(;!Xx(jr.join(e,"package.json"));){let t=jr.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(jx,"getHDBPackageRoot");var Kn=jx(),lA="js",Ll=lA,Zx="harperdb-config.yaml",eq="defaultConfig.yaml",tq="hdb",_A=`harperdb.${Ll}`,dA=`customFunctionsServer.${Ll}`,rq=`restartHdb.${Ll}`,YE="HarperDB",Dl="Custom Functions",Ul="Clustering Hub",Ml="Clustering Leaf",sq="Clustering Ingest Service",nq="Clustering Reply Service",iq="foreground.pid",oq="hdb.pid",aq="data",cq={HDB:YE,CLUSTERING_HUB:Ul,CLUSTERING_LEAF:Ml,CLUSTERING_INGEST_SERVICE:sq,CLUSTERING_REPLY_SERVICE:nq,CUSTOM_FUNCTIONS:Dl,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"},uq={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},lq={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},_q={harperdb:YE,"clustering hub":Ul,"clustering leaf":Ml,"custom functions":Dl,custom_functions:Dl,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},dq={CLUSTERING_HUB_PROC_DESCRIPTOR:Ul,CLUSTERING_LEAF_PROC_DESCRIPTOR:Ml},$E={HDB:jr.join(Kn,"server/harperdb"),CUSTOM_FUNCTIONS:jr.join(Kn,"server/customFunctions"),CLUSTERING_HUB:jr.join(Kn,"server/nats"),CLUSTERING_LEAF:jr.join(Kn,"server/nats")},fq={HDB:jr.join($E.HDB,_A),CUSTOM_FUNCTIONS:jr.join($E.CUSTOM_FUNCTIONS,dA)},Eq={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:jr.join(Kn,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:jr.join(Kn,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:jr.join(Kn,"launchServiceScripts/launchUpdateNodes4-0-0.js")},hq={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},fA="support@harperdb.io",mq="customer-success@harperdb.io",EA=1,pq=4141,hA="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",Sq="https://www.harperdb.io/product",Tq=`For support, please submit a request at ${hA} or contact ${fA}`,mA=`For license support, please contact ${mq}`,gq="None of the specified records were found.",Rq="hash attribute not found",Aq=`Your current license only supports ${EA} role. ${mA}`,Oq="Your current license only supports 3 connections to a node.",bq="127.0.0.1",Nq=1,yq=/^\.$/,Iq=/^\.\.$/,wq="U+002E",Cq=/\//g,Dq="U+002F",Lq=/U\+002F/g,Uq=/^U\+002E$/,Mq=/^U\+002EU\+002E$/,Pq="d",vq=999999,Bq="*",Hq="--max-old-space-size=",xq="system",qq="__hdb_hash",Fq=".harperdb",Gq=".hdb",kq="keys",Vq="hdb_boot_properties.file",$q=".updateConfig.json",Yq="SIGTSTP",Kq=24,Wq=6e4,Qq=448,zq="blob",Jq="trash",Xq="database",jq="schema",Zq="transactions",eF=".count",tF="id",rF="PROCESS_NAME",pA={SETTINGS_PATH_KEY:"settings_path"},SA=require("lodash"),sF={TC_AGREEMENT:"TC_AGREEMENT",CLUSTERING_USER:"CLUSTERING_USER",CLUSTERING_PASSWORD:"CLUSTERING_PASSWORD",HDB_ADMIN_USERNAME:"HDB_ADMIN_USERNAME",HDB_ADMIN_PASSWORD:"HDB_ADMIN_PASSWORD",OPERATIONSAPI_ROOT:"OPERATIONSAPI_ROOT",ROOTPATH:"ROOTPATH",OPERATIONSAPI_NETWORK_PORT:"OPERATIONSAPI_NETWORK_PORT",CLUSTERING_NODENAME:"CLUSTERING_NODENAME",CLUSTERING_ENABLED:"CLUSTERING_ENABLED",HDB_CONFIG:"HDB_CONFIG",CLUSTERING_PORT:"CLUSTERING_PORT",HDB_ROOT:"HDB_ROOT",SERVER_PORT:"SERVER_PORT",NODE_NAME:"NODE_NAME",CLUSTERING:"CLUSTERING"},nF={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},iF={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},oF={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"},aF={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"},Nr="hdb_internal:",cF={CREATE_SCHEMA:Nr+"create_schema",CREATE_TABLE:Nr+"create_table",CREATE_ATTRIBUTE:Nr+"create_attribute",ADD_USER:Nr+"add_user",ALTER_USER:Nr+"alter_user",DROP_USER:Nr+"drop_user",HDB_NODES:Nr+"hdb_nodes",HDB_USERS:Nr+"hdb_users",HDB_WORKERS:Nr+"hdb_workers",CATCHUP:Nr+"catchup",SCHEMA_CATCHUP:Nr+"schema_catchup",WORKER_ROOM:Nr+"cluster_workers"},uF={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"},lF="060493.ks",_F=".license",dF={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},J={INSERT:"insert",UPDATE:"update",UPSERT:"upsert",SEARCH_BY_CONDITIONS:"search_by_conditions",SEARCH_BY_HASH:"search_by_hash",SEARCH_BY_ID:"search_by_id",SEARCH_BY_VALUE:"search_by_value",SEARCH:"search",SQL:"sql",CSV_DATA_LOAD:"csv_data_load",CSV_FILE_LOAD:"csv_file_load",CSV_URL_LOAD:"csv_url_load",CREATE_SCHEMA:"create_schema",CREATE_DATABASE:"create_database",CREATE_TABLE:"create_table",CREATE_ATTRIBUTE:"create_attribute",DROP_SCHEMA:"drop_schema",DROP_DATABASE:"drop_database",DROP_TABLE:"drop_table",DESCRIBE_SCHEMA:"describe_schema",DESCRIBE_DATABASE:"describe_database",DESCRIBE_TABLE:"describe_table",DESCRIBE_ALL:"describe_all",DELETE:"delete",ADD_USER:"add_user",ALTER_USER:"alter_user",DROP_USER:"drop_user",LIST_USERS:"list_users",LIST_ROLES:"list_roles",ADD_ROLE:"add_role",ALTER_ROLE:"alter_role",DROP_ROLE:"drop_role",USER_INFO:"user_info",READ_LOG:"read_log",ADD_NODE:"add_node",UPDATE_NODE:"update_node",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"},fF={CSV:".csv",JSON:".json"},EF={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},hF={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Qa={};Qa[J.INSERT]=J.INSERT;Qa[J.UPDATE]=J.UPDATE;Qa[J.UPSERT]=J.UPSERT;Qa[J.DELETE]=J.DELETE;var ve=Object.create(null);ve[J.DESCRIBE_ALL]=J.DESCRIBE_ALL;ve[J.DESCRIBE_TABLE]=J.DESCRIBE_TABLE;ve[J.DESCRIBE_SCHEMA]=J.DESCRIBE_SCHEMA;ve[J.READ_LOG]=J.READ_LOG;ve[J.ADD_NODE]=J.ADD_NODE;ve[J.LIST_USERS]=J.LIST_USERS;ve[J.LIST_ROLES]=J.LIST_ROLES;ve[J.USER_INFO]=J.USER_INFO;ve[J.SQL]=J.SQL;ve[J.GET_JOB]=J.GET_JOB;ve[J.SEARCH_JOBS_BY_START_DATE]=J.SEARCH_JOBS_BY_START_DATE;ve[J.DELETE_FILES_BEFORE]=J.DELETE_FILES_BEFORE;ve[J.EXPORT_LOCAL]=J.EXPORT_LOCAL;ve[J.EXPORT_TO_S3]=J.EXPORT_TO_S3;ve[J.CLUSTER_STATUS]=J.CLUSTER_STATUS;ve[J.REMOVE_NODE]=J.REMOVE_NODE;ve[J.RESTART]=J.RESTART;ve[J.CUSTOM_FUNCTIONS_STATUS]=J.CUSTOM_FUNCTIONS_STATUS;ve[J.GET_CUSTOM_FUNCTIONS]=J.GET_CUSTOM_FUNCTIONS;ve[J.GET_CUSTOM_FUNCTION]=J.GET_CUSTOM_FUNCTION;ve[J.SET_CUSTOM_FUNCTION]=J.SET_CUSTOM_FUNCTION;ve[J.DROP_CUSTOM_FUNCTION]=J.DROP_CUSTOM_FUNCTION;ve[J.ADD_CUSTOM_FUNCTION_PROJECT]=J.ADD_CUSTOM_FUNCTION_PROJECT;ve[J.DROP_CUSTOM_FUNCTION_PROJECT]=J.DROP_CUSTOM_FUNCTION_PROJECT;ve[J.PACKAGE_CUSTOM_FUNCTION_PROJECT]=J.PACKAGE_CUSTOM_FUNCTION_PROJECT;ve[J.DEPLOY_CUSTOM_FUNCTION_PROJECT]=J.DEPLOY_CUSTOM_FUNCTION_PROJECT;var mF={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"},pF={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},TA={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"},SF=SA.invert(TA),TF={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"},N={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"},gA={settings_path:pA.SETTINGS_PATH_KEY,hdb_root_key:N.ROOTPATH,hdb_root:N.ROOTPATH,rootpath:N.ROOTPATH,server_port_key:N.OPERATIONSAPI_NETWORK_PORT,server_port:N.OPERATIONSAPI_NETWORK_PORT,cert_key:N.TLS_CERTIFICATE,certificate:N.TLS_CERTIFICATE,private_key_key:N.TLS_PRIVATEKEY,private_key:N.TLS_PRIVATEKEY,http_secure_enabled_key:N.OPERATIONSAPI_NETWORK_HTTPS,https_on:N.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:N.OPERATIONSAPI_NETWORK_CORS,cors_on:N.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:N.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:N.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:N.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:N.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:N.LOGGING_LEVEL,log_level:N.LOGGING_LEVEL,log_path_key:N.LOGGING_ROOT,log_path:N.LOGGING_ROOT,clustering_node_name_key:N.CLUSTERING_NODENAME,node_name:N.CLUSTERING_NODENAME,clustering_enabled_key:N.CLUSTERING_ENABLED,clustering:N.CLUSTERING_ENABLED,max_http_threads:N.THREADS,max_hdb_processes:N.THREADS,server_timeout_key:N.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:N.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:N.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:N.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:N.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:N.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:N.LOGGING_AUDITLOG,disable_transaction_log:N.LOGGING_AUDITLOG,operation_token_timeout_key:N.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:N.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:N.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:N.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:N.HTTP_PORT,custom_functions_port:N.HTTP_PORT,custom_functions_directory_key:N.COMPONENTSROOT,custom_functions_directory:N.COMPONENTSROOT,max_custom_function_processes:N.THREADS,log_to_file:N.LOGGING_FILE,log_to_stdstreams:N.LOGGING_STDSTREAMS,local_studio_on:N.LOCALSTUDIO_ENABLED,clustering_port:N.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:N.CLUSTERING_USER,clustering_enabled:N.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:N.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:N.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:N.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:N.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:N.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:N.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:N.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:N.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:N.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxmsgs:N.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:N.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:N.CLUSTERING_NODENAME,clustering_tls_certificate:N.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:N.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:N.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:N.CLUSTERING_TLS_INSECURE,clustering_tls_verify:N.CLUSTERING_TLS_VERIFY,clustering_loglevel:N.CLUSTERING_LOGLEVEL,clustering_republishmessages:N.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:N.CLUSTERING_DATABASELEVEL,customfunctions_network_port:N.HTTP_PORT,customfunctions_tls_certificate:N.TLS_CERTIFICATE,customfunctions_network_cors:N.HTTP_CORS,customfunctions_network_corsaccesslist:N.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:N.HTTP_HEADERSTIMEOUT,customfunctions_network_https:N.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:N.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:N.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:N.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:N.HTTP_TIMEOUT,http_threads:N.THREADS,threads:N.THREADS,maxheapmemory:N.MAXHEAPMEMORY,http_session_affinity:N.HTTP_SESSIONAFFINITY,http_compressionthreshold:N.HTTP_COMPRESSIONTHRESHOLD,http_cors:N.HTTP_CORS,http_corsaccesslist:N.HTTP_CORSACCESSLIST,http_headerstimeout:N.HTTP_HEADERSTIMEOUT,http_keepalivetimeout:N.HTTP_KEEPALIVETIMEOUT,http_timeout:N.HTTP_TIMEOUT,http_port:N.HTTP_PORT,http_secureport:N.HTTP_SECUREPORT,customfunctions_processes:N.THREADS,customfunctions_root:N.COMPONENTSROOT,localstudio_enabled:N.LOCALSTUDIO_ENABLED,logging_file:N.LOGGING_FILE,logging_level:N.LOGGING_LEVEL,logging_root:N.LOGGING_ROOT,logging_rotation_enabled:N.LOGGING_ROTATION_ENABLED,logging_rotation_compress:N.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:N.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:N.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:N.LOGGING_ROTATION_PATH,logging_stdstreams:N.LOGGING_STDSTREAMS,logging_auditlog:N.LOGGING_AUDITLOG,logging_auditretention:N.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:N.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:N.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:N.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:N.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_network_cors:N.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:N.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:N.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:N.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:N.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:N.OPERATIONSAPI_NETWORK_PORT,operationsapi_network_domainsocket:N.OPERATIONSAPI_NETWORK_DOMAINSOCKET,operationsapi_network_secureport:N.OPERATIONSAPI_NETWORK_SECUREPORT,operationsapi_tls_certificate:N.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_tls_privatekey:N.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:N.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY,operationsapi_network_timeout:N.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_root:N.ROOTPATH,databases:N.DATABASES,storage_path:N.STORAGE_PATH,ignorescripts:N.IGNORE_SCRIPTS,mqtt_network_port:N.MQTT_NETWORK_PORT,mqtt_websocket:N.MQTT_WEBSOCKET,mqtt_network_secureport:N.MQTT_NETWORK_SECUREPORT,mqtt_network_mtls:N.MQTT_NETWORK_MTLS,mqtt_network_mtls_certificateAuthority:N.MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY,mqtt_network_mtls_user:N.MQTT_NETWORK_MTLS_USER,mqtt_requireauthentication:N.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:N.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:N.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:N.AUTHENTICATION_CACHETTL,authentication_enablesessions:N.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:N.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:N.AUTHENTICATION_REFRESHTOKENTIMEOUT,componentsroot:N.COMPONENTSROOT,tls_certificate:N.TLS_CERTIFICATE,tls_privatekey:N.TLS_PRIVATEKEY,tls_certificateauthority:N.TLS_CERTIFICATEAUTHORITY,tls_ciphers:N.TLS_CIPHERS};for(let e in N){let t=N[e];gA[t.toLowerCase()]=t}var gF={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},RF={csv_file_load:"csv_file_load",csv_data_load:J.CSV_DATA_LOAD,csv_url_load:J.CSV_URL_LOAD,delete_files_before:"delete_files_before",delete_records_before:"delete_records_before",delete_audit_logs_before:"delete_audit_logs_before",delete_transaction_logs_before:"delete_transaction_logs_before",empty_trash:"empty_trash",export_local:"export_local",export_to_s3:"export_to_s3",import_from_s3:"import_from_s3"},AF={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"},OF={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},bF={VERSION_DEFAULT:"2.2.0"},NF={DEVELOPMENT:8192,DEFAULT:512},yF={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"},IF={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"},wF={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},RA={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},CF=Symbol("metadata"),DF="__clustering__",LF=Object.values(RA),UF=15984864e5,AA={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},MF=SA.invert(AA),PF={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"},vF=111,BF=`\r
|
|
2
|
-
`,
|
|
3
|
-
`}a(pn,"createLogRecord");function
|
|
4
|
-
`).slice(1)){n=n.trim();let[i]=n.split(" ",1),o=n.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=o}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,s])=>({pid:Number.parseInt(r,10),name:hG.basename(s.comm),cmd:s.args,ppid:Number.parseInt(s.ppid,10),uid:Number.parseInt(s.uid,10),cpu:Number.parseFloat(s["%cpu"]),memory:Number.parseFloat(s["%mem"])}))}a(TG,"findPs")});var Et=T((Wie,FA)=>{"use strict";var gG="__dbis__",RG="__txns__",AG="__environment_name__",OG="__dbi_defintion__",bG={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"},NG=["__createdtime__","__updatedtime__"],yG="\uFFFF",qA={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},IG=Object.values(qA);FA.exports={AUDIT_STORE_NAME:RG,INTERNAL_DBIS_NAME:gG,DBI_DEFINITION_NAME:OG,SEARCH_TYPES:bG,TIMESTAMP_NAMES:NG,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:AG,TRANSACTIONS_DBI_NAMES_ENUM:qA,TRANSACTIONS_DBIS:IG,OVERFLOW_MARKER:yG}});var yr=T((Qie,zA)=>{"use strict";var GA=I(),kA=Et(),VA={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},$A=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),YA={500:$A("There was an error processing your request."),400:"Invalid request"},wG=YA[VA.INTERNAL_SERVER_ERROR],CG={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.`},DG={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},LG={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"},UG={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 ${kA.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${kA.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"},MG={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${GA.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 ${GA.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"},KA={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"},PG={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."},vG={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`},BG={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"},HG={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},xG={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`},WA={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.`},QA={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}`},qG={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."},FG={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},GG={...KA,...LG,...CG,...PG,...vG,...BG,...HG,...xG,...MG,...WA,...QA,...qG,...FG,...DG};zA.exports={CHECK_LOGS_WRAPPER:$A,HDB_ERROR_MSGS:GG,DEFAULT_ERROR_MSGS:YA,DEFAULT_ERROR_RESP:wG,HTTP_STATUS_CODES:VA,LMDB_ERRORS_ENUM:UG,AUTHENTICATION_ERROR_MSGS:KA,VALIDATION_ERROR_MSGS:WA,ITC_ERRORS:QA}});var Z=T((Jie,jA)=>{"use strict";var Io=yr(),kG=G(),VG=I(),xl=class extends Error{static{a(this,"HdbError")}constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,JA),this.statusCode=s||Io.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Io.DEFAULT_ERROR_MSGS[s]?Io.DEFAULT_ERROR_MSGS[s]:Io.DEFAULT_ERROR_MSGS[Io.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,n&&(this.logLevel=n),typeof this.message!="string"&&(this.stack=t.stack),i&&kG[n](i)}},eh=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}},th=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function JA(e,t,r,s=VG.LOG_LEVELS.ERROR,n=null,i=!1){if(XA(e))return e;let o=new xl(e,t,r,s,n);return i&&delete o.stack,o}a(JA,"handleHDBError");function XA(e){return e.__proto__.constructor.name===xl.name}a(XA,"isHDBError");jA.exports={isHDBError:XA,handleHDBError:JA,ClientError:eh,ServerError:th,hdb_errors:Io}});var Ke=T((jie,iO)=>{"use strict";var nc=I(),$G=W(),sr=j(),ic=require("path"),YG=require("minimist"),ZA=require("fs-extra"),eO=require("lodash");sr.initSync();var{CONFIG_PARAMS:Wn,DATABASES_PARAM_CONFIG:ec,SYSTEM_SCHEMA_NAME:ql}=nc,tc,rc,sc;function tO(){if(tc!==void 0)return tc;if(sr.getHdbBasePath()!==void 0)return tc=sr.get(Wn.STORAGE_PATH)||ic.join(sr.getHdbBasePath(),nc.DATABASES_DIR_NAME),tc}a(tO,"getBaseSchemaPath");function rO(){if(rc!==void 0)return rc;if(sr.getHdbBasePath()!==void 0)return rc=nO(ql),rc}a(rO,"getSystemSchemaPath");function sO(){if(sc!==void 0)return sc;if(sr.getHdbBasePath()!==void 0)return sc=sr.get(nc.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||ic.join(sr.getHdbBasePath(),nc.TRANSACTIONS_DIR_NAME),sc}a(sO,"getTransactionAuditStoreBasePath");function KG(e,t){let r=sr.get(Wn.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||ic.join(sO(),e.toString())}a(KG,"getTransactionAuditStorePath");function nO(e,t){e=e.toString(),t=t&&t.toString();let r=sr.get(nc.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||ic.join(tO(),e)}a(nO,"getSchemaPath");function WG(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,YG(process.argv));let s=r[Wn.DATABASES.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!$G.isObject(s))throw o;i=s}for(let o of i){let c=o[ql];if(!c)continue;let u=sr.get(Wn.DATABASES);u=u??{};let _=c?.tables?.[t]?.[ec.PATH];if(_)return eO.set(u,[ql,ec.TABLES,t,ec.PATH],_),sr.setProperty(Wn.DATABASES,u),_;let l=c?.[ec.PATH];if(l)return eO.set(u,[ql,ec.PATH],l),sr.setProperty(Wn.DATABASES,u),l}}let n=r[Wn.STORAGE_PATH.toUpperCase()];if(n){if(!ZA.pathExistsSync(n))throw new Error(n+" does not exist");let i=ic.join(n,e);return ZA.mkdirsSync(i),sr.setProperty(Wn.STORAGE_PATH,n),i}return rO()}a(WG,"initSystemSchemaPaths");function QG(){tc=void 0,rc=void 0,sc=void 0}a(QG,"resetPaths");iO.exports={getBaseSchemaPath:tO,getSystemSchemaPath:rO,getTransactionAuditStorePath:KG,getTransactionAuditStoreBasePath:sO,getSchemaPath:nO,initSystemSchemaPaths:WG,resetPaths:QG}});var Ir=T((roe,lO)=>{"use strict";var zG=yr().LMDB_ERRORS_ENUM,eoe=require("lmdb"),JG=Et(),toe=require("buffer").Buffer,{OVERFLOW_MARKER:oO,MAX_SEARCH_KEY_LENGTH:Fl}=JG,aO=["number","string","symbol","boolean","bigint"];function XG(e){if(e=e?.primaryStore||e,!e)throw new Error(zG.ENV_REQUIRED)}a(XG,"validateEnv");function jG(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(jG,"stringifyData");function ZG(e){return e instanceof Date?e.valueOf():e}a(ZG,"convertKeyValueToWrite");function ek(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(aO.includes(typeof e))return e.length>Fl?[e.slice(0,Fl)+oO]:[e];let r;if(Array.isArray(e)){r=[];for(let s=0,n=e.length;s<n;s++){let i=e[s];if(aO.includes(typeof i))i.length>Fl?r.push(i.slice(0,Fl)+oO):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(ek,"getIndexedValues");var Gl=0,cO=0;function uO(){cO=Date.now()-performance.now()}a(uO,"adjustStartTime");uO();var tk=6e4;setInterval(uO,tk).unref();function rk(){let e=performance.now()+cO;return e>Gl?(Gl=e,e):(Gl+=488e-6,Gl)}a(rk,"getNextMonotonicTime");lO.exports={validateEnv:XG,stringifyData:jG,convertKeyValueToWrite:ZG,getNextMonotonicTime:rk,getIndexedValues:ek}});var _O,Ns,rh,oc=ge(()=>{_O=require("events"),Ns=class extends _O.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new rh;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)}},rh=class{static{a(this,"EventQueueIterator")}queue;push(t){this.queue.send(t)}next(){let t=this.queue.getNextMessage();return t?{value:t}:new Promise(r=>this.queue.resolveNext=r)}return(t){return this.queue.emit("close"),{value:t,done:!0}}throw(t){return this.queue.emit("close",t),{done:!0}}}});function wr(e){return e[Wt]||(e[Wt]=Object.create(null))}function Yl(e,t){let r=e.prototype,s={},n=t.attributes||t.properties||[];for(let o of n){let c=o.name,u,_;if(o.resolve)_={get(){return o.resolve(this,this[me])},set(l){return o.set(this,l)},configurable:!0};else{switch(o.type){case"String":u=a(function(l){if(!(typeof l=="string"||l==null&&o.nullable!==!1))throw new Zr.ClientError(`${c} must be a string, attempt to assign ${l}`);wr(this)[c]=l},"set");break;case"ID":u=a(function(l){if(!(typeof l=="string"||l?.length>0&&l.every?.(d=>typeof d=="string")||l==null&&o.nullable!==!1))throw new Zr.ClientError(`${c} must be a string, attempt to assign ${l}`);wr(this)[c]=l},"set");break;case"Float":case"Number":u=a(function(l){if(!(typeof l=="number"||l==null&&o.nullable!==!1))throw new Zr.ClientError(`${c} must be a number, attempt to assign ${l}`);wr(this)[c]=l},"set");break;case"Int":u=a(function(l){if(!(l>>0===l||l==null&&o.nullable!==!1))if(typeof l=="number"&&Math.abs((l>>0)-l)<=1)l=Math.round(l);else throw new Zr.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${l}`);wr(this)[c]=l},"set");break;case"Long":u=a(function(l){if(!(Math.round(l)===l&&Math.abs(l)<=9007199254740992||l==null&&o.nullable!==!1))if(typeof l=="number"&&Math.abs(l)<=9007199254740992)l=Math.round(l);else throw new Zr.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${l}`);wr(this)[c]=l},"set");break;case"BigInt":u=a(function(l){if(!(typeof l=="bigint"||l==null&&o.nullable!==!1))if(typeof l=="string"||typeof l=="number")l=BigInt(l);else throw new Zr.ClientError(`${c} must be a number, attempt to assign ${l}`);wr(this)[c]=l},"set");break;case"Boolean":u=a(function(l){if(!(typeof l=="boolean"||l==null&&o.nullable!==!1))throw new Zr.ClientError(`${c} must be a boolean, attempt to assign ${l}`);wr(this)[c]=l},"set");break;case"Date":u=a(function(l){if(!(l instanceof Date||l==null&&o.nullable!==!1))if(typeof l=="string"||typeof l=="number")l=new Date(l);else throw new Zr.ClientError(`${c} must be a Date, attempt to assign ${l}`);wr(this)[c]=l},"set");break;case"Bytes":u=a(function(l){if(!(l instanceof Uint8Array||l==null&&o.nullable!==!1))throw new Zr.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${l}`);wr(this)[c]=l},"set");break;case"Any":case void 0:u=a(function(l){wr(this)[c]=l},"set");break;default:u=a(function(l){if(!(typeof l=="object"||l==null&&o.nullable!==!1))throw new Zr.ClientError(`${c} must be an object, attempt to assign ${l}`);wr(this)[c]=l},"set")}_={get(){let l=this[Wt];if(l&&c in l)return l[c];let d=this[ye]?.[c];if(d&&typeof d=="object"){let f=dO(d,o);if(f)return l||(l=this[Wt]=Object.create(null)),l[c]=f}return d},set:u,enumerable:!0,configurable:!0}}_.get.isAttribute=!0,s[c]=_,(!(c in r)||Object.getOwnPropertyDescriptor(r,c)?.get?.isAttribute)&&Object.defineProperty(r,c,_)}i("getProperty",function(o){let c=s[o];if(c)return c.get.call(this);let u=this[Wt];return u?.[o]!==void 0?u[o]:this[ye]?.[o]}),i("set",function(o,c){let u=s[o];if(u)return u.set.call(this,c);if(t.sealed)throw new Zr.ClientError("Can not add a property to a sealed table schema");wr(this)[o]=c}),i("deleteProperty",function(o){wr(this)[o]=void 0}),i("toJSON",function(){let o=this[Wt],c;for(let _ in o)c||(c=Object.assign({},this[ye])),c[_]=o[_];return Object.keys(this).length>0&&(c||(c=Object.assign({},this[ye])),Object.assign(c,this)),c||this[ye]}),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 dO(e,t){let r;switch(e.constructor){case Object:return t?((r=t.TrackedObject)||(t.TrackedObject=r=class{static{a(this,"TrackedObject")}constructor(n){this[ye]=n}},Yl(r,t)),new r(e)):new kl(e);case Array:let s=new $l(e.length);s[ye]=e;for(let n=0,i=e.length;n<i;n++){let o=e[n];o&&typeof o=="object"&&(o=dO(o,t?.elements)),s[n]=o}return s}}function Kl(e){let t=e[Wt],r;for(let n in t){r||(r=Object.assign({},e[ye]));let i=t[n];i&&typeof i=="object"&&(i=Kl(i)),r[n]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[ye])),Object.assign(r,e)),r||e[ye]}function ac(e){let t;if(e[ye]&&e.constructor===Array&&!Object.isFrozen(e)){t=e;for(let s=0,n=e.length;s<n;s++){let i=e[s];if(i&&typeof i=="object"){let o=ac(i);o!==i&&t===e&&(t=e.slice(0)),i=o}t[s]=i}return Object.freeze(t)}let r=e[Wt];for(let s in r){t||(t=Object.assign({},e[ye]));let n=r[s];n&&typeof n=="object"&&(n=ac(n)),t[s]=n}return t?Object.freeze(t):e[ye]||(e.buffer?e:Object.freeze(e))}function Vl(e){let t=e[ye];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[wi]||e.length!==t.length)return!0;for(let r=0,s=e.length;r<s;r++){let n=t[r],i=e[r];if(n&&i?.[ye]===n){if(Vl(i))return!0}else return!0}}else{let r=e[Wt];if(r&&!t)return!0;for(let s in r){let n=r[s];if(n&&typeof n=="object"){let i=t[s];if(i&&n[ye]===i){if(Vl(n))return!0}else return!0}else return!0}}return!1}var Zr,Wt,kl,wi,$l,Wl=ge(()=>{ys();Zr=M(Z()),Wt=Symbol("own-data");a(wr,"getChanges");a(Yl,"assignTrackedAccessors");a(dO,"trackObject");kl=class{static{a(this,"GenericTrackedObject")}constructor(t){this[ye]=t}};Yl(kl,{});a(Kl,"collapseData");a(ac,"deepFreeze");a(Vl,"hasChanges");wi=Symbol.for("has-array-changes"),$l=class extends Array{static{a(this,"TrackedArray")}[wi];constructor(t){super(t)}splice(...t){return this[wi]=!0,super.splice(...t)}push(...t){return this[wi]=!0,super.push(...t)}pop(){return this[wi]=!0,super.pop()}unshift(...t){return this[wi]=!0,super.unshift(...t)}shift(){return this[wi]=!0,super.shift()}};$l.prototype.constructor=Array});function ok(){ik=setInterval(function(){for(let e of sh)if(e.stale){let t=e[me]?.url;fO.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},nk).unref()}var nh,fO,sk,sh,Ci,Ql,nk,ik,ih=ge(()=>{nh=M(Ir()),fO=M(G());ys();sk=100,sh=new Set,Ci=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(),sh.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(sh.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,nh.getNextMonotonicTime)());let s=t.retries||0;if(this.validated<this.writes.length){let l=this.validated;this.validated=this.writes.length;for(let f=l;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let d;for(let f=l;f<this.validated;f++){let E=this.writes[f];E&&(E.before||E.beforeIntermediate)&&(d=!0)}if(d)return(async()=>{for(let f=0;f<2;f++){let E;for(let h=l;h<this.validated;h++){let p=this.writes[h];if(!p)continue;let S=p[f===0?"before":"beforeIntermediate"];if(S){let R=S();E?E.push?E.push(R):E=[E,R]:E=R}}E&&await(E.push?Promise.all(E):E)}return this.commit(t)})()}s||this.doneReadTxn(),t?.prepared?.(),this.open=!1;let n,i=[],o=0;this.writes=this.writes.filter(l=>l);let c=a(l=>{l.commit(r,l.entry,s)},"doWrite"),u=a(()=>{let l=this.writes[o++];if(l)if(l.key){s>0&&(l.entry=l.store.getEntry(l.key));let d=l.store.ifVersion(l.key,l.entry?.version??null,u);n=n||d}else u();else for(let d of this.writes)c(d)},"nextCondition");if(this.writes.length<sk>>s?u():n=this.writes[0].store.transaction(()=>{for(let l of this.writes)l.entry=l.store.getEntry(l.key),c(l);return!0}),n)return n.then(l=>l?(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))):(t?t.retries=s+1:t={retries:1},this.commit(t)));let _={txnTime:r};if(this.next){let l=this.next?.commit(t);if(l?.then)return l?.then(d=>({txnTime:r,next:d}));_.next=l}return _}abort(t){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=!1,this.writes=[]}},Ql=class extends Ci{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,nh.getNextMonotonicTime)())}getReadTxn(){}},nk=3e4;a(ok,"startMonitoringTxns");ok()});function We(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 s=e.transaction=new Ci;e.timestamp&&(s.timestamp=e.timestamp),s[me]=e,e.resourceCache||(e.resourceCache=[]);let n;try{if(n=t(s),n?.then)return n.then(i,o)}catch(c){o(c)}return i(n);function i(c){let u=s.commit(r?.resetTransaction?{prepared(){s.autoCommitMode=!0}}:{});return u.then?u.then(()=>c):c}function o(c){throw s.abort({}),c}}var EO,Di=ge(()=>{EO=require("../index");ys();ih();a(We,"transaction");(0,EO._assignPackageExport)("transaction",We);We.commit=function(e){let t=(e[me]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};We.abort=function(e){let t=(e[me]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});function uc(e,t,r,s,n,i){let o=e[0]??e.attribute,c=e[1]??e.value,u=e.comparator;if(Array.isArray(o)){let R=o[0],O=Sn(s.attributes,R);if(O.relationship){if(o.length<2)throw new Li.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let y=O.definition?.tableClass||O.elements?.definition?.tableClass,q=new Map,K=uc({attribute:o.length>2?o.slice(1):o[1],value:c,comparator:u},t,r,y,n,q);if(O.relationship.to){i[o[0]]=q;let H=!!Sn(y.attributes,O.relationship.to)?.elements;K=lk(K,O,y.primaryStore,H,q)}if(O.relationship.from){let H=a(L=>uc({attribute:O.relationship.from,value:L},t,r,s,n,q),"searchEntry");O.elements?(i[o[0]]=q,K=_k(K,O,y.primaryStore,q,H)):K=K.flatMap(H)}return K}else if(o.length===1)o=o[0];else throw new Li.ClientError("Unable to query by attribute "+JSON.stringify(o))}let _,l,d,f;c instanceof Date&&(c=c.getTime());let E;switch(mO[u]||u){case"lt":_=!0,l=c;break;case"le":_=!0,l=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,l=c.slice(0),l[l.length-1]=Ys.MAXIMUM_KEY;break;case"starts_with":_=c.toString(),l=c+"\uFFFF";break;case"between":_=c[0],_ instanceof Date&&(_=_.getTime()),l=c[1],l instanceof Date&&(l=l.getTime()),d=!0;break;case Ze.SEARCH_TYPES.EQUALS:case void 0:_=c,l=c,d=!0;break;case"ne":if(c===null){_=c,f=!0;break}case"contains":case"ends_with":E=!0;break;default:throw new Li.ClientError(`Unknown query comparator "${u}"`)}if(r){let R=_;_=l,l=R,R=!f,f=!d,d=R}let h=o===s.primaryKey||o==null,p=h?s.primaryStore:s.indices[o];if(!p||p.isIndexing||E||c===null&&!p.indexNulls){if(!n)throw new Li.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 R=lc(e);if(!R)throw new Li.ClientError(`Unknown search operator ${e.comparator}`);return s.primaryStore.getRange({start:!0,transaction:t,reverse:r}).map(({key:O,value:y})=>new Promise((q,K)=>setImmediate(()=>{try{q(y&&R(y)?O:oh.SKIP)}catch(H){K(H)}})))}let S={start:_,end:l,inclusiveEnd:d,exclusiveStart:f,values:!0,versions:h,transaction:t,reverse:r};if(h){let R=p.getRange(S).map(O=>O.value==null?oh.SKIP:O);return R.hasEntries=!0,R}else return p.getRange(S).map(({value:R})=>R)}function Sn(e,t){if(Array.isArray(t))if(t.length>1){let r=Sn(e,t[0]),s=(r?.definition?.tableClass||r?.elements.definition?.tableClass)?.attributes;return s?Sn(s,t.slice(1)):void 0}else t=t.toString();else typeof t!="string"&&(t=t.toString());return e.find(r=>r.name===t)}function lk(e,t,r,s,n){return new e.constructor({[Symbol.iterator](){let i,o;return{next(){if(!i){let u=t.relationship.to;return(async()=>{let _=a((d,f)=>{let E=d;Array.isArray(d)&&(E=zn(d),o=!0);let h=n.get(E);h?h.push(f):n.set(E,h=[f]),d!==E&&(h.key=d)},"add_entry"),l=0;for await(let d of e){let f=d.value??r.get(d.key??d),E=f?.[u];if(E!=null&&!n.filters?.some(h=>!h(f))){if(s)for(let h=0;h<E.length;h++)_(E[h],d);else _(E,d);l++>100&&(await new Promise(setImmediate),l=0)}}return i=(o?n:n.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 _k(e,t,r,s,n){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 u=new Map;s.fromRecord=l=>l[t.relationship.from]?.filter?.(d=>u.has(zn(d)));let _=0;for await(let l of e){if(s.filters){let d=r.get(l);if(s.filters.some(f=>!f(d)))continue}u.set(zn(l),l),_++>100&&(await new Promise(setImmediate),_=0)}return i=u.values()[Symbol.iterator](),this.next()})();do{let u=i.next();return u.done?u:(o=n(u.value)[Symbol.iterator](),this.next())}while(!0)},return(){return o?.return?.()},throw(){return o?.throw?.()}}}})}function lc(e,t,r,s){if(e.conditions){let c=e.conditions.map(lc);return e.operator==="or"?u=>c.some(_=>_(u)):u=>c.every(_=>_(u))}let n=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],u=Sn(t.attributes,c),_=u.definition?.tableClass||u.elements.definition?.tableClass,l=s?.[c],d=lc({attribute:i.length>2?i.slice(1):i[1],value:o,comparator:n},t,r,l?.[c]?.joined);if(!d)return;if(l){l.filters||(l.filters=[]),l.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()),mO[n]||n){case Ze.SEARCH_TYPES.EQUALS:case void 0:return $s(i,c=>c===o);case Ze.SEARCH_TYPES.CONTAINS:return $s(i,c=>c?.toString().includes(o));case Ze.SEARCH_TYPES.ENDS_WITH:case Ze.SEARCH_TYPES._ENDS_WITH:return $s(i,c=>c?.toString().endsWith(o));case Ze.SEARCH_TYPES.STARTS_WITH:case Ze.SEARCH_TYPES._STARTS_WITH:return $s(i,c=>typeof c=="string"&&c.startsWith(o));case Ze.SEARCH_TYPES.BETWEEN:return o[0]instanceof Date&&(o[0]=o[0].getTime()),o[1]instanceof Date&&(o[1]=o[1].getTime()),$s(i,c=>(0,Ys.compareKeys)(c,o[0])>=0&&(0,Ys.compareKeys)(c,o[1])<=0);case"gt":case Ze.SEARCH_TYPES.GREATER_THAN:case Ze.SEARCH_TYPES._GREATER_THAN:return $s(i,c=>(0,Ys.compareKeys)(c,o)>0);case"ge":case Ze.SEARCH_TYPES.GREATER_THAN_EQUAL:case Ze.SEARCH_TYPES._GREATER_THAN_EQUAL:return $s(i,c=>(0,Ys.compareKeys)(c,o)>=0);case Ze.SEARCH_TYPES.LESS_THAN:case"lt":case Ze.SEARCH_TYPES._LESS_THAN:return $s(i,c=>(0,Ys.compareKeys)(c,o)<0);case"le":case Ze.SEARCH_TYPES.LESS_THAN_EQUAL:case Ze.SEARCH_TYPES._LESS_THAN_EQUAL:return $s(i,c=>(0,Ys.compareKeys)(c,o)<=0);case"ne":return $s(i,c=>(0,Ys.compareKeys)(c,o)!==0);default:throw new Li.ClientError(`Unknown query comparator "${n}"`)}}function $s(e,t){return r=>{let s=r[e];return typeof s!="object"||!s?t(s):Array.isArray(s)?s.some(t):s instanceof Date?t(s.getTime()):!1}}function ah(e){return t=>{if(t.estimated_count===void 0){if(t.conditions){let s;if(t.operator==="or"){s=0;for(let n of t.conditions)s+=n.estimated_count}else{s=1/0;for(let n of t.conditions)s=1/(1/s+1/n.estimated_count)}return t.estimated_count=s,t.estimated_count}let r=t.comparator||t.search_type;if(r===Ze.SEARCH_TYPES.EQUALS){let s=t[0]??t.attribute;if(s==null||s===e.primaryKey)t.estimated_count=1;else if(Array.isArray(s)){let n=Sn(e.attributes,s[0]),i=n.definition?.tableClass||n.elements.definition?.tableClass,o=ah(i)({value:t.value,attribute:s.length>2?s.slice(1):s[1],comparator:"equals"});t.estimated_count=o*4*(e.indices[n.relationship.from]||e.primaryStore).getStats().entryCount/(i.primaryStore.getStats().entryCount||1)}else{let n=e.indices[s];t.estimated_count=n?n.getValuesCount(t[1]??t.value):1/0}}else r===Ze.SEARCH_TYPES.CONTAINS||r===Ze.SEARCH_TYPES.ENDS_WITH||r==="ne"?t.value===null&&r==="ne"?t.estimated_count=hO:t.estimated_count=1/0:r===Ze.SEARCH_TYPES.STARTS_WITH||r==="prefix"?t.estimated_count=hO:r===Ze.SEARCH_TYPES.BETWEEN?t.estimated_count=ck:t.estimated_count=ak;typeof t.descending=="boolean"&&(t.estimated_count/=4)}return t.estimated_count}}function zl(e){if(e)if(Qn=e,wo.lastIndex=0,dk.test(e))try{let t=cc(new Do,"");if(nr!==Qn.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 ${nr} in '${Qn}'`,t}else{let t=new URLSearchParams(e);return t.conditions=t,t}}function cc(e,t){let r=wo,s,n,i,o,c;for(;s=r.exec(Qn);){nr=r.lastIndex;let[,u,_]=s;if(o){if(u)throw new SyntaxError(`expected operator, but encountered '${u}'`);o=!1,c=!1}else c=!0;let l;switch(_){case"=":if(n)u.length<=2&&(i=u);else{if(i="equals",!u)throw new SyntaxError("attribute must be specified before equality comparator");n=Co(u)}break;case"!=":case"<":case"<=":case">":case">=":if(i=uk[_],!u)throw new SyntaxError(`attribute must be specified before comparator ${_}`);n=Co(u);break;case"=*":i="ends_with",n=Co(u);break;case"*":o=!0;case"*&":e.conditions?e.conditions.push({comparator:i==="ends_with"?"contains":"starts_with",attribute:n,value:decodeURIComponent(u)}):e.push(u+_),n=null;break;case"|":e.operator="or";case"":case void 0:case"&":if(n==null){if(n===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:n,value:decodeURIComponent(u)})}n=void 0;break;case",":if(e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");e.push(Co(u)),n=void 0;break;case"(":wo.lastIndex=nr;let d=cc(u?[]:new Do,")");switch(u){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=pO(d);break;default:throw new SyntaxError(`unknown query function call ${u}`)}Qn[nr]===","?r.lastIndex=++nr:o=!0,n=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");wo.lastIndex=nr,l=cc([],"}"),l.name=u,e.push(l),Qn[nr]===","?r.lastIndex=++nr:o=!0;break;case"[":wo.lastIndex=nr,u?(l=cc(new Do,"]"),l.name=u):l=cc(e.conditions?new Do:[],"]"),e.conditions?(e.conditions.push(l),n=null):e.push(l),Qn[nr]===","?r.lastIndex=++nr:o=!0;break;case")":case"]":case"}":if(t===_[0]){if(e.conditions){if(n)e.conditions.push({comparator:i||"equals",attribute:n,value:decodeURIComponent(u)});else if(u)throw new SyntaxError("no attribute or comparison specified")}else(u||e.length>0&&c)&&e.push(Co(u));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=n?fk:wo,r.lastIndex=nr),nr===Qn.length)return e}if(t)throw new SyntaxError(`expected '${t}', but encountered end of string`)}function Co(e){return e.indexOf(".")>-1?e.split(".").map(Co):decodeURIComponent(e)}function pO(e){let t=SO(e[0]);return e.length>1&&(t.next=pO(e.slice(1))),t}function SO(e){if(Array.isArray(e)){let t=SO(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 zn(e){return Array.isArray(e)?e.join("\0"):e}var Li,Ze,Ys,oh,ak,ck,hO,uk,mO,dk,wo,fk,nr,Qn,Do,Jl=ge(()=>{Li=M(Z()),Ze=M(Et()),Ys=require("ordered-binary"),oh=require("lmdb"),ak=1e8,ck=15e6,hO=1e7,uk={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne"};a(uc,"searchByIndex");a(Sn,"findAttribute");a(lk,"joinTo");a(_k,"joinFrom");mO={greater_than:"gt",greater_than_equal:"ge",less_than:"lt",less_than_equal:"le",not_equal:"ne",equal:"equals",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(lc,"filterByType");a($s,"attributeComparator");a(ah,"estimateCondition");dk=/[()[\]*|!<>.]|(=\w+=)/,wo=/([^?&|=<>!([{}\])*,]*)([([{}\])|,&]|[=<>!*]*)/g,fk=/([^&|*=[\]{}]+)([[\]{}]|[&|*=]*)/g;a(zl,"parseQuery");a(cc,"parseBlock");a(Co,"decodeProperty");a(pO,"toSortObject");a(SO,"toSortEntry");Do=class{static{a(this,"Query")}constructor(){this.conditions=[]}[Symbol.iterator](){return this.conditions[Symbol.iterator]()}get(t){for(let r=0;r<this.conditions.length;r++){let s=this.conditions[r];if(s.attribute===t)return s.value}}};a(zn,"flattenKey")});var lh={};je(lh,{CONTEXT:()=>me,ID_PROPERTY:()=>De,IS_COLLECTION:()=>rs,RECORD_PROPERTY:()=>ye,Resource:()=>xt,SAVE_UPDATES_PROPERTY:()=>OO,snake_case:()=>hk,transformForSelect:()=>jl});function hk(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function TO(e,t){if(_c=!1,e==="")return null;if(e=e.slice(1),e.indexOf("/")===-1)return e===""?(_c=!0,null):(e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e)));let r=e.split("/"),s=new uh;for(let n=0;n<r.length;n++){let i=r[n];if(!i&&n===r.length-1){_c=!0;break}s[n]=t.coerceId(decodeURIComponent(i))}return s}function es(e,t){s.reliesOnPrototype=!0;let r=t.hasContent;return s;function s(n,i,o){let c,u,_,l;if(r?o?(l=i,o=o[me]||o):i?typeof n=="object"&&n&&(!Array.isArray(n)||typeof n[0]=="object")?(l=n,c=l[this.primaryKey]??null,o=i[me]||i):l=i:(l=n,c=l[De]??l[this.primaryKey]??null):i?o=i[me]||i:n&&typeof n=="object"&&!Array.isArray(n)&&(o=n),c===void 0)if(typeof n=="string")c=n;else if(typeof n=="object"&&n)if(u=n,n[Symbol.iterator]){c=[],_=!0;for(let E of n){if(typeof E=="object"&&E)break;c.push(E)}c.length===0?c=null:(c.length===1&&(c=c[0]),u.slice&&(u=u.slice(c.length,u.length),u.length===0&&(u=null,_=!1)))}else{if(typeof(c=n.url)=="string"){let E=c.indexOf("?");if(E>-1){let p=this.parseQuery(c.slice(E+1));u?u=Object.assign(p,u):u=p,c=c.slice(0,E)}let h=this.parsePath(c,o,u);h?.id!==void 0?(h.query&&(u?u=Object.assign(h.query,u):u=h.query),_=h.isCollection,c=h.id):c=h}c===void 0&&(c=n.id??null,c==null&&(_=!0))}else c=n??null,c==null&&(_=!0);o||(o={});let d;if(u?.ensureLoaded!=null||u?.async||_?(d=Object.assign({},t),u?.ensureLoaded!=null&&(d.ensureLoaded=u.ensureLoaded),u?.async&&(d.async=u.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,We(o,()=>{let E=this.getResource(c,o,d);return E.then?E.then(f):f(E)},d);function f(E){if(t.type==="read"&&(E[OO]=!1),o.authorize){o.authorize=!1;let h=t.type==="read"?E.allowRead(o.user,u,o):t.type==="update"?E.doesExist?.()===!1?E.allowCreate(o.user,l,o):E.allowUpdate(o.user,l,o):t.type==="create"?E.allowCreate(o.user,l,o):E.allowDelete(o.user,u,o);if(h?.then)return h.then(p=>{if(!p)throw new Xl(o.user);return typeof l?.then=="function"?l.then(S=>e(E,u,o,S)):e(E,u,o,l)});if(!h)throw new Xl(o.user)}return typeof l?.then=="function"?l.then(h=>e(E,u,o,h)):e(E,u,o,l)}a(f,"authorizeActionOnResource")}}function ts(e,t){let r=new AO.ClientError(`The ${e.constructor.name} does not have a ${t} method implemented`,405);r.allow=[],r.method=t;for(let s of["get","put","post","delete","query","move","copy"])typeof e[s]=="function"&&r.allow.push(s);throw r}function ch(e,t,r){let s=e[ye];if(s){let n=e[Wt];return i=>{let o,c;return e.hasOwnProperty(i)&&typeof(o=e[i])!="function"?o:n&&i in n?n[i]:(c=t?.[i])?c(e,r):s[i]}}else return t?n=>{let i=t[n];return i?i(e,r):e[n]}:n=>e[n]}function jl(e,t){let r=t?.propertyResolvers,s=t[me],n;if(typeof e=="string")return a(function o(c){return c.then?c.then(o):Array.isArray(c)?c.map(o):ch(c,r,s)(e)},"transform");if(typeof e=="object"){if(e.asArray)return a(function c(u){if(u.then)return u.then(c);if(Array.isArray(u))return u.map(c);let _=[],l=i(ch(u,r,s));for(let d of e)_.push(l(d));return _},"transform");let o=e.forceNulls;return a(function c(u){if(u.then)return u.then(c);if(Array.isArray(u))return u.map(f=>f&&typeof f=="object"?c(f):f);let _={},l=i(ch(u,r,s)),d;for(let f of e){let E=l(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){n||(n={});let u=n[c.name];if(!u){let l=r[c.name]?.definition?.tableClass;u=n[c.name]=jl(c.select||c,l)}let _=o(c.name);return u(_)}else return o(c);else return c}}a(i,"handleProperty")}var gO,RO,AO,me,De,rs,OO,ye,Ek,xt,Xl,_c,uh,ys=ge(()=>{gO=require("crypto");oc();RO=require("../index"),AO=M(Z());Wl();Di();Jl();me=Symbol.for("context"),De=Symbol.for("primary-key"),rs=Symbol("is-collection"),OO=Symbol("save-updates"),ye=Symbol("stored-record"),Ek={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},xt=class{static{a(this,"Resource")}static transactions;constructor(t,r){this[De]=t;let s=r?.[me];this[me]=s!==void 0?s:r||null}static get=es(function(t,r,s,n){let i=t.get?.(r);if(i?.then)return i.then(o);return o(i);function o(c){let u;if((u=r?.select)&&c!=null&&!c.selectApplied){let _=jl(u,t.constructor);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",resetTransaction:!0,ensureLoaded:!0,async:!0});static put=es(function(t,r,s,n){if(Array.isArray(n)&&t[rs]){let i=[],o=s.authorize;for(let c of n){let u=t.constructor,_=u.getResource(c[u.primaryKey],s,{async:!0});_.then?i.push(_.then(l=>l.put(c,s))):i.push(_.put(c,s))}return Promise.all(i)}return t.put?t.put(n,r):ts(t,"put")},{hasContent:!0,type:"update"});static delete=es(function(t,r,s,n){return t.delete?t.delete(r):ts(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,gO.randomUUID)()}static create(t,r,s){let n;return t==null?n=this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?n=[...t,this.getNewId()]:typeof t!="object"?n=[t,this.getNewId()]:(n=this.getNewId(),s=r,r=t),We(s,()=>{let i=new this(n,s),o=i.update?i.update(r):ts(i,"update");return s.newLocation=n,s.createdResource=!0,o?.then?o.then(()=>n):n})}static invalidate=es(function(t,r,s,n){return t.invalidate?t.invalidate(r):ts(t,"delete")},{hasContent:!1,type:"update"});static post=es(function(t,r,s,n){return t[De]!=null&&t.update?.(),t.post(n,r)},{hasContent:!0,type:"create"});static connect=es(function(t,r,s,n){return t.connect?t.connect(n,r):ts(t,"connect")},{hasContent:!0,type:"read"});static subscribe=es(function(t,r,s,n){return t.subscribe?t.subscribe(r):ts(t,"subscribe")},{type:"read"});static publish=es(function(t,r,s,n){return t[De]!=null&&t.update?.(),t.publish?t.publish(n,r):ts(t,"publish")},{hasContent:!0,type:"create"});static search=es(function(t,r,s,n){let i=t.search?t.search(r):ts(t,"search"),o=s.select;if(o&&s.hasOwnProperty("select")&&i!=null&&!i.selectApplied){let c=jl(o,t.constructor);return i.map(c)}return i},{type:"read"});static query=es(function(t,r,s,n){return t.search?t.search(n,r):ts(t,"search")},{hasContent:!0,type:"read"});static copy=es(function(t,r,s,n){return t.copy?t.copy(n,r):ts(t,"copy")},{type:"create"});static move=es(function(t,r,s,n){return t.move?t.move(n,r):ts(t,"move")},{type:"delete"});post(t){if(this[rs])return this.constructor.create(this[De],t,this[me]);ts(this,"post")}static isCollection(t){return t?.[rs]}static coerceId(t){return t}static parseQuery(t){return zl(t)}static parsePath(t,r,s){let n=t.indexOf(".");if(n>-1){let o=t.slice(n+1);t=t.slice(0,n);let c=r?.headers&&Ek[o];if(c)r.headers.set("accept",c);else if(s)s.property=o;else return{query:{property:o},id:TO(t,this),isCollection:_c}}let i=TO(t,this);return _c?{id:i,isCollection:!0}:i}static getResource(t,r,s){let n,i=r[me],o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=s?.isCollection;let c=o&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let u;if(i.resourceCache?u=i.resourceCache:u=i.resourceCache=[],u.asMap){let _=u.asMap.get(t);if(n=_?.find(l=>l.constructor===c),n)return n;_||u.asMap.set(t,_=[]),_.push(n=new c(t,i))}else{if(n=u.find(_=>_[De]===t&&_.constructor===c),n)return n;if(u.push(n=new c(t,i)),u.length>10){let _=new Map;for(let l of u){let d=l[De],f=_.get(d);f?f.push(l):_.set(d,[l])}i.resourceCache.length=0,i.resourceCache.asMap=_}}}else n=new c(t,i);return o&&(n[rs]=!0),n}subscribe(t){return new Ns}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new Ns}allowRead(t){return t?.role.permission.super_user}allowUpdate(t){return t?.role.permission.super_user}allowCreate(t){return t?.role.permission.super_user}allowDelete(t){return t?.role.permission.super_user}getId(){return this[De]}getContext(){return this[me]}};xt.prototype[me]=null;(0,RO._assignPackageExport)("Resource",xt);a(hk,"snake_case");Xl=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(TO,"pathToId");uh=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(es,"transactional");a(ts,"missingMethod");a(ch,"selectFromObject");a(jl,"transformForSelect")});var Lo={};je(Lo,{server:()=>Ot});var bO,Ot,ss=ge(()=>{bO=require("../index"),Ot={};(0,bO._assignPackageExport)("server",Ot)});var dh={};je(dh,{loadGQLSchema:()=>Sk,start:()=>_h,startOnMainThread:()=>pk});function _h({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,s,n,i){let{parse:o,Source:c,Kind:u,NamedTypeNode:_,StringValueNode:l}=await import("graphql"),d=o(new c(r.toString(),n)),f=new Map,E=[],h;for(let S of d.definitions)switch(S.kind){case u.OBJECT_TYPE_DEFINITION:let K=function(H){if(H.kind==="NonNullType"){let V=K(H.type);return V.nullable=!1,V}if(H.kind==="ListType")return{type:"array",elements:K(H.type)};let $={type:H.name?.value};return Object.defineProperty($,"location",{value:H.loc.startToken}),$};a(K,"getProperty");let R=S.name.value,O=[],y={table:null,database:null,properties:O};f.set(R,y);for(let H of S.directives){if(H.name.value==="table"){for(let L of H.arguments)y[L.name.value]=L.value.value;y.schema&&(y.database=y.schema),y.table||(y.table=R),y.audit&&(y.audit=y.audit!=="false"),y.attributes=y.properties,E.push(y)}if(H.name.value==="sealed"&&(y.sealed=!0),H.name.value==="export"){y.export=!0;for(let L of H.arguments)L.name.value==="name"&&(y.export={name:L.value.value})}}let q=!1;for(let H of S.fields){let L=K(H.type);L.name=H.name.value,O.push(L);for(let $ of H.directives)if($.name.value==="primaryKey")q?console.warn("Can not define two attributes as a primary key"):(L.isPrimaryKey=!0,q=!0);else if($.name.value==="indexed")L.indexed=!0;else if($.name.value==="relationship"){let V={};for(let Q of $.arguments)V[Q.name.value]=Q.value.value;L.relationship=V}else if($.name.value==="createdTime")L.assignCreatedTime=!0;else if($.name.value==="updatedTime")L.assignUpdatedTime=!0;else if($.name.value==="expiresAt")L.expiresAt=!0;else if($.name.value==="allow"){let V=L.authorizedRoles=[];for(let Q of $.arguments)Q.name.value==="role"&&V.push(Q.value.value)}}y.type=R,R==="Query"&&(h=y)}function p(S){let R=f.get(S.type);R?(Object.defineProperty(S,"properties",{value:R.properties}),Object.defineProperty(S,"definition",{value:R})):S.type==="array"?p(S.elements):mk.includes(S.type)||(0,NO.getWorkerIndex)()===0&&console.error(`The type ${S.type} is unknown at line ${S.location.line}, column ${S.location.column}, in ${n}`)}a(p,"connectPropertyType");for(let S of f.values())for(let R of S.properties)p(R);for(let S of E)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,Zl.dirname)(s),S.tableClass):i.set((0,Zl.dirname)(s)+"/"+(S.export.name||S.type),S.tableClass));if(h)for(let S of h.properties){let R=f.get(S.type);if(!R)throw new Error(`${S.type} was not found as a Query export`);i.set((0,Zl.dirname)(s)+"/"+S.name,R.tableClass)}}}var Zl,NO,mk,pk,Sk,yO=ge(()=>{Zl=require("path");pe();NO=M(Qe()),mk=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];a(_h,"start");pk=_h,Sk=_h({ensureTable:ut}).handleFile});async function e_(e){return Tk?(dc||(dc=gk(Ak)),(await(await dc).import(e)).namespace):import(e)}async function gk(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),dc=new Compartment({console,Math,Date,fetch:Rk,...e()},{},{name:"h-dapp",resolveHook(r,s){return r==="harperdb"?"harperdb":(r=new URL(r,s).toString(),(0,wO.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(n){Object.assign(n,{Resource:xt,tables:Cr,databases:tt})}};let s=await(0,IO.readFile)(new URL(r),{encoding:"utf-8"});return new t(s,r)}}),dc}function Rk(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 Ak(){return{Resource:xt,tables:Cr}}var IO,wO,Tk,dc,fh=ge(()=>{ys();pe();IO=require("fs/promises"),wO=require("path"),Tk=!1;a(e_,"secureImport");a(gk,"getCompartment");a(Rk,"secureOnlyFetch");a(Ak,"getGlobalVars")});var hh={};je(hh,{handleFile:()=>Ok});async function Ok(e,t,r,s){let n=new Map,i=(0,CO.pathToFileURL)(r).toString(),o=await e_(i);u(o.default)&&s.set((0,Eh.dirname)(t),o.default),c(o,(0,Eh.dirname)(t));function c(_,l){for(let d in _){let f=_[d];u(f)?s.set(l+"/"+d,f):typeof f=="object"&&c(f,l+"/"+d)}}a(c,"recurseForResources");function u(_){return typeof _=="function"&&(_.get||_.put||_.post||_.delete)}return a(u,"isResource"),n}var CO,Eh,DO=ge(()=>{CO=require("url");fh();Eh=require("path");a(Ok,"handleFile")});var ph={};je(ph,{start:()=>bk});function bk({resources:e}){e.set("login",mh),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var mh,LO=ge(()=>{ys();a(bk,"start");mh=class extends xt{static{a(this,"Login")}static async get(t,r,s){}static async post(t,r,s){let{username:n,password:i,redirect:o}=r;return{data:await s.login(n,i)}}}});var xO={};je(xO,{parse:()=>Th,streamAsJSON:()=>fc,stringify:()=>Ui});function fc(e){return new Sh({value:e})}function UO(e){return console.error(e),JSON.stringify(e.toString())}function MO(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function Ui(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===BO)return HO(e);if(t.resolution)return t.resolution.then(()=>Ui(e));throw t}}function HO(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 s=0;s<e.length;s++)s>0&&(r+=","),r+=HO(e[s]);return r+"]"}else{r="{";let s=!0;for(let n in e)s?s=!1:r+=",",r+=JSON.stringify(n)+":"+Ui(e[n]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function Th(e){return Ik.test(e)?Nk.parse(e):JSON.parse(e)}var PO,vO,Nk,yk,BO,Sh,Ik,gh=ge(()=>{PO=require("stream"),vO=M(require("json-bigint-fixes")),Nk=(0,vO.default)({useNativeBigInt:!0}),yk=1e4,BO={};BigInt.prototype.toJSON=function(){throw BO};a(fc,"streamAsJSON");Sh=class extends PO.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],s=t[Symbol.iterator];if((s||r)&&!t.then){yield"[";let n=!0;if((r||s)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();this.activeIterators.push(i);let o;for(;;)if(o=i.next(),o.then&&(yield o.then(c=>(o=c,""))),o.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else n?n=!1:yield",",yield*this.serialize(o.value)}for(let i of t)n?n=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(n=>this.serialize(n),UO)}catch(n){yield UO(n)}else yield Ui(t)}else yield Ui(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);MO(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>yk?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 MO(this.readIterator(t.childIterator),s=>{if(s)return t.childIterator=null,this.readIterator(t)});do{let s=t.next();if(s.done)return!0;if(r=s.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(n=>{if(n&&typeof n.return=="function")return t.childIterator=n,this.readIterator(t);if(this.push(n+""))return this.readIterator(t)});if(typeof r.return=="function")return t.childIterator=r,this.readIterator(t)}}while(this.push(r))}catch(r){return console.error(r),this.push(r.toString()),this.push(null),!0}}_destroy(t,r){for(let s of this.activeIterators)t?s.throw(t):s.return();r()}};a(UO,"handleError");a(MO,"when");a(Ui,"stringify");a(HO,"jsStringify");Ik=/-?\d{16,}/;a(Th,"parse")});var XO=T((qoe,JO)=>{"use strict";var Rh=require("recursive-iterator"),wk=require("alasql"),Ah=require("clone"),qO=W(),{handleHDBError:FO,hdb_errors:Ck}=Z(),{HDB_ERROR_MSGS:GO,HTTP_STATUS_CODES:kO}=Ck,{getDatabases:Dk}=(pe(),te(Fe)),Lk=["DISTINCT_ARRAY"],VO=Symbol("validateTables"),Oh=Symbol("validateTable"),xoe=Symbol("getAllColumns"),$O=Symbol("validateAllColumns"),t_=Symbol("findColumn"),YO=Symbol("validateOrderBy"),Ec=Symbol("validateSegment"),bh=Symbol("validateColumn"),KO=Symbol("setColumnsForTable"),WO=Symbol("checkColumnsForAsterisk"),QO=Symbol("validateGroupBy"),zO=Symbol("hasColumns"),Nh=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[VO](),this[WO](),this[$O]()}[VO](){if(this[zO]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Oh](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Oh](t.table)})}}[zO](){let t=!1,r=new Rh(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[Oh](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=Dk();if(!r[t.databaseid])throw FO(new Error,GO.SCHEMA_NOT_FOUND(t.databaseid),kO.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw FO(new Error,GO.TABLE_NOT_FOUND(t.databaseid,t.tableid),kO.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(n=>{let i=Ah(n);i.table=Ah(t),this.attributes.push(i)})}[t_](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)}[WO](){let t=new Rh(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[KO](r.tableid)}[KO](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new wk.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[$O](){this[Ec](this.statement.columns,!1),this[Ec](this.statement.joins,!1),this[Ec](this.statement.where,!1),this[QO](this.statement.group,!1),this[Ec](this.statement.order,!0)}[Ec](t,r){if(!t)return;let s=new Rh(t),n=[];for(let{node:i,path:o}of s)!qO.isEmpty(i)&&!qO.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[YO](i):n.push(this[bh](i)));return n}[QO](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&Lk.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=Ah(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[t_](s)[0];n&&r.push(n)}}}),this.statement.group.forEach(s=>{let n=null;if(!s.columnid)r.forEach((i,o)=>{if(i.toString()===s.toString()){n=i,r.splice(o,1);return}});else{let i=this[t_](s);if(!i||i.length===0)throw`unknown column '${s.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${s.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){n=o,r.splice(c,1);return}})}if(!n)throw`group by column '${s.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[YO](t){let r=this.statement.columns.filter(s=>s.as===t.columnid);if(r.length>1)throw`ambiguous column reference ${(t.tableid?t.tableid+".":"")+t.columnid} in order by`;r.length===0&&this[bh](t)}[bh](t){let r=this[t_](t),s=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${s}`;if(r.length>1)throw`ambiguous column reference ${s}`;return r[0]}};JO.exports=Nh});var ZO=T((Goe,jO)=>{"use strict";var yh=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")}};jO.exports=yh});var tb=T((Voe,eb)=>{"use strict";var Ih=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};eb.exports=Ih});var fb={};je(fb,{AUDIT_STORE_OPTIONS:()=>_b,createAuditEntry:()=>n_,openAuditStore:()=>s_,readAuditEntry:()=>Dr,setAuditRetention:()=>Uk,transactionKeyEncoder:()=>lb});function s_(e){let t=e.auditStore=e.openDB(ob.AUDIT_STORE_NAME,_b);t.rootStore=e;let r=[];return t.addDeleteRemovalCallback=function(s,n){return r[s]=n,{remove(){delete r[s]}}},(0,cb.getWorkerIndex)()===0&&e.on("aftercommit",()=>{hc||(hc=setTimeout(()=>{if(hc=null,t.rootStore.status!=="closed")for(let{key:s,value:n}of t.getRange({start:0,end:Date.now()-wh})){if((n[0]&15)===Dh){let i=Dr(n),o=i.tableId;r[o]?.(i.recordId)}t.remove(s)}},wh/10).unref())}),t}function Uk(e){clearTimeout(hc),hc=null,wh=e}function n_(e,t,r,s,n,i,o){let c=db[i],u=1;s&&(s>1?Uo.setFloat64(0,s):ns.set(Mh),u=9),f(0),f(t),d(r),Uo.setFloat64(u,e),u+=8,n?d(n):ns[u++]=0,ns[s?8:0]=c;let l=ns.subarray(0,u);if(o)return Buffer.concat([l,o]);return l;function d(E){let h=u;u+=1,u=(0,Mo.writeKey)(E,ns,u);let p=u-h-1;p>127?p>16383?(Uh.error("Key or username was too large for audit entry",E),u=h+1,ns[h]=0):(ns.copyWithin(h+2,h+1,u),Uo.setUint16(h,p|32768),u++):ns[h]=p}function f(E){E<128?ns[u++]=E:E<16384?(Uo.setUint16(u,E|32768),u+=2):E<1056964608?(Uo.setUint32(u,E|3221225472),u+=4):(ns[u]=255,Uo.setUint32(u+1,E),u+=5)}}function Dr(e){try{let t=e.dataView||(e.dataView=new Lh(e.buffer,e.byteOffset,e.byteLength)),r;e[0]==66&&(r=t.readFloat64());let s=t.readInt(),n=t.readInt(),i=t.readInt(),o=t.readInt(),c=t.position,u=t.position+=o,_=t.readFloat64();o=t.readInt();let l=t.position,d=t.position+=o;return{type:db[s&7],tableId:i,get recordId(){return ib(e,c,u)},version:_,previousLocalTime:r,get user(){return d>l?ib(e,l,d):void 0},getValue(f){return s&Ch?f.decoder.decode(e.subarray(t.position)):void 0}}}catch{return Uh.error("Reading audit entry error",e),{}}}function ib(e,t,r){let s=e.subarray(t,r);return(0,Mo.readKey)(s,0,r-t)}var Mo,r_,ob,ab,cb,ub,Uh,ns,Uo,lb,_b,wh,hc,Ch,rb,Dh,sb,nb,db,Lh,Po=ge(()=>{Mo=require("ordered-binary"),r_=M(j()),ob=M(Et()),ab=M(I()),cb=M(Qe()),ub=M(W());pc();Uh=M(G());(0,r_.initSync)();ns=Buffer.alloc(1024),Uo=new DataView(ns.buffer,ns.byteOffset,1024),lb={writeKey(e,t,r){return e===mc?(t.set(mc,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,Mo.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,Mo.readKey)(e,t,r)}},_b={encoding:"binary",keyEncoder:lb},wh=(0,ub.convertToMS)((0,r_.get)(ab.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,hc=null;a(s_,"openAuditStore");a(Uk,"setAuditRetention");Ch=16,rb=1,Dh=2,sb=3,nb=4,db={put:rb|Ch,[rb]:"put",delete:Dh,[Dh]:"delete",message:sb|Ch,[sb]:"message",invalidate:nb,[nb]:"invalidate"};a(n_,"createAuditEntry");a(Dr,"readAuditEntry");Lh=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(ib,"readKeySafely")});var Tb={};je(Tb,{HAS_EXPIRATION:()=>qh,LAST_TIMESTAMP_PLACEHOLDER:()=>mc,LOCAL_TIMESTAMP:()=>Mk,METADATA:()=>Sc,NO_TIMESTAMP:()=>Ph,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>Mh,RecordEncoder:()=>xh,TIMESTAMP_ASSIGN_LAST:()=>vk,TIMESTAMP_ASSIGN_NEW:()=>mb,TIMESTAMP_ASSIGN_PREVIOUS:()=>pb,TIMESTAMP_PLACEHOLDER:()=>i_,TIMESTAMP_RECORD_PREVIOUS:()=>vh,getUpdateRecord:()=>Fh,handleLocalTimeForGets:()=>c_});function Sb(){return Bo[0]=Bo[0]^64,Pk.getFloat64(0)}function c_(e){let t=e.getEntry;e.readCount=0,e.getEntry=function(i,o){e.readCount++;let c=t.call(this,i,o),u=c?.value,_=u?.[Sc];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c&&(c.key=i),c};let r=e.get;e.get=function(i,o){let c=r.call(this,i,o);return c?.[Sc]>=0?c.value:c};let s=e.getRange;e.getRange=function(i){let o=s.call(this,i);return i.valuesForKey?o.map(c=>c?.value):i.values===!1||i.onlyCount?o:o.map(c=>{let u=c.value,_=u[Sc];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c})},e.env.metadataRetriever||(e.env.metadataRetriever=!0,e.on("aftercommit",({next:i,last:o})=>{do{let c=i.meta,u=c&&c.store;if(u&&!(i.flag&67108864)){let _=u.cache;if(c.key){let l=Bk.call(_,c.key);if(l&&l.timestampBytes){let d=l.timestampOffset;l.timestampBytes[d]===2&&(l.timestampBytes.copy(Bo,0,d),l.timestampBytes=null,l.localTime=Sb())}}}}while(i!=o&&(i=i.next))}));let n=e.useReadTransaction();if(n.done(),!n.done.isTracked){let i=n.constructor,o=n.use,c=n.done;i.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,Mi.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let u=0;u<Mi.length;u++){let _=Mi[u].deref();(!_||_===this||_.isDone||_.isCommitted)&&Mi.splice(u--,1)}},i.prototype.done.isTracked=!0}return e}function Fh(e,t,r){return function(s,n,i,o,c=-1,u,_,l,d="put",f,E){if(f||u==null?vo=i?.localTime?vh|pb:Ph:vo=u?i?.localTime?vh|16384:mb|16384:Ph,l>0&&(c|=qh),a_=c,Hh=l,i?.version===o&&u===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:vo>0},p;try{f&&(h.ifVersion=p=i?.version??null);let S=e.put(s,n,h);if(e.cache&&S.result!==!1){let R=e.cache.get(s);R&&(c>=0?R.metadataFlags=c:R.metadataFlags>=0&&(R.metadataFlags=void 0),(l||!R.expiresAt)&&(R.expiresAt=l),h.instructedWrite&&(R.localTime||(R.localTime=1),R.timestampBytes=Bh,R.timestampOffset=Bh.start||0))}if(u){let R=_?.user?.username;if(E&&(o_=e.encoder.encode(E)),f&&i?.localTime){let O=i?.localTime,y=r.get(O);if(y){let q=Dr(y).previousLocalTime;return r.put(O,n_(o,t,s,q,R,d,o_),{ifVersion:p}),S}}r.put(mc,n_(o,t,s,i?.localTime?1:0,R,d,o_),{append:d!=="invalidate",instructedWrite:!0,ifVersion:p})}return S}catch(S){throw S.message+=" id: "+s+" options: "+h,S}}}var Eb,hb,i_,mc,Mh,Mk,Sc,Bo,Pk,Ph,mb,vk,pb,vh,qh,Bh,o_,vo,a_,Hh,xh,Bk,Mi,pc=ge(()=>{Eb=require("msgpackr");Po();hb=M(G()),i_=new Uint8Array([1,1,1,1,4,64,0,0]),mc=new Uint8Array([1,1,1,1,1,0,0,0]),Mh=new Uint8Array([1,1,1,1,3,64,0,0]),Mk=Symbol("local-timestamp"),Sc=Symbol("metadata"),Bo=new Uint8Array(8),Pk=new DataView(Bo.buffer,0,8),Ph=0,mb=0,vk=1,pb=3,vh=4,qh=16,vo=0,a_=-1,Hh=0,xh=class extends Eb.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(s,n){if(vo||a_>=0){let i=0,o=vo;o&&(i+=8,vo=0);let c=a_,u=Hh;c>=0&&(i+=2,a_=-1,u&&(i+=8,Hh=0));let _=Bh=r.call(this,s,n|2048|i);o_=_.subarray((_.start||0)+i,_.end);let l=_.start||0;return o&&(i_[4]=o,i_[5]=o>>8,_.set(i_,l),l+=8),c>=0&&(_[l++]=c,_[l++]=0,u&&(_.dataView||(_.dataView=new DataView(_.buffer,_.byteOffset,_.byteLength))).setFloat64(l,u)),_}else return r.call(this,s,n)}}decode(t,r){let s=r?.start||0,n=r>-1?r:r?.end||t.length,i=t[s],o=0;try{if(i<32&&n>2){let c=s,u;if(i===2){if(t.copy)t.copy(Bo,0,c),c+=8;else for(let d=0;d<8;d++)Bo[d]=t[c++];u=Sb(),i=t[c]}let _;i<32&&(o=i,c+=2,o&qh&&(_=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8));let l=super.decode(t.subarray(c,n),n-c);return{localTime:u,value:l,[Sc]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(Sb,"getTimestamp");Bk=Map.prototype.get;a(c_,"handleLocalTimeForGets");Mi=[];setInterval(()=>{for(let e=0;e<Mi.length;e++){let t=Mi[e].deref();!t||t.isDone||t.isCommitted?Mi.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&hb.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(Fh,"getUpdateRecord")});var u_=T((zoe,gb)=>{"use strict";var kh=j(),Vh=I(),{RecordEncoder:Hk}=(pc(),te(Tb));kh.initSync();var xk=kh.get(Vh.CONFIG_PARAMS.STORAGE_COMPRESSION),qk=kh.get(Vh.CONFIG_PARAMS.STORAGE_CACHING)!==!1,Fk=Vh.UPDATES_PROPERTY,Gh=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=xk&&r&&{startingOffset:32},this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=qk&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:Hk},this.alwaysLazyProperty=s=>s===Fk)}};gb.exports=Gh});var __=T((Xoe,Ab)=>{"use strict";var Ho=j(),Tc=I();Ho.initSync();var Gk=Ho.get(Tc.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Ho.get(Tc.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Ho.get(Tc.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",Rb=Ho.get(Tc.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),kk=Ho.get(Tc.CONFIG_PARAMS.STORAGE_NOREADAHEAD),l_=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=Gk,this.noFSAccess=!0,Rb!==void 0&&(this.overlappingSync=Rb),this.noReadAhead=kk}};Ab.exports=l_;l_.MAX_DBS=1e4});var $e=T((Zoe,Ub)=>{"use strict";var Yh=require("lmdb"),Is=require("fs-extra"),Lr=require("path"),d_=Ir(),Nb=G(),ir=yr().LMDB_ERRORS_ENUM,f_=tb(),Kh=u_(),yb=__(),Jn=Et(),Ob=I(),{table:Vk,resetDatabases:$k}=(pe(),te(Fe)),bb=j(),ws=Jn.INTERNAL_DBIS_NAME,Ib=Jn.DBI_DEFINITION_NAME,Yk="data.mdb",Kk="lock.mdb",gc=".mdb",Wk="-lock",$h=class{static{a(this,"TransactionCursor")}constructor(t,r,s=!1){this.dbi=is(t,r),this.key_type=this.dbi[Jn.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Jn.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new Yh.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function E_(e,t){if(e===void 0)throw new Error(ir.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(ir.ENV_NAME_REQUIRED)}a(E_,"pathEnvNameValidation");async function Wh(e,t,r=!0){try{await Is.access(e)}catch(s){throw s.code==="ENOENT"?new Error(ir.INVALID_BASE_PATH):s}try{let s=Lr.join(e,t+gc);return await Is.access(s,Is.constants.R_OK|Is.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await Is.access(Lr.join(e,t,Yk),Is.constants.R_OK|Is.constants.F_OK),Lr.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(ir.INVALID_ENVIRONMENT)}else throw new Error(ir.INVALID_ENVIRONMENT);throw s}}a(Wh,"validateEnvironmentPath");function h_(e,t){if(d_.validateEnv(e),t===void 0)throw new Error(ir.DBI_NAME_REQUIRED)}a(h_,"validateEnvDBIName");async function Qk(e,t,r=!1,s=!1){E_(e,t);let n=Lr.basename(e);t=t.toString();let i=bb.get(Ob.CONFIG_PARAMS.DATABASES);i||bb.setProperty(Ob.CONFIG_PARAMS.DATABASES,i={}),i[n]||(i[n]={}),i[n].path=e;try{return await Wh(e,t,s),wb(e,t,r)}catch(o){if(o.message===ir.INVALID_ENVIRONMENT){let c=Lr.join(e,t);await Is.mkdirp(s?c:e);let u=new yb(s?c:c+gc,!1),_=Yh.open(u);_.dbis=Object.create(null);let l=new Kh(!1);_.openDB(ws,l),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=Qh(e,t,r);return _[Jn.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(Qk,"createEnvironment");async function zk(e,t,r,s=!0){E_(e,t),t=t.toString();let n=Lr.join(e,t);return Vk({table:t,database:Lr.parse(e).name,path:n,attributes:[{name:"id",isPrimaryKey:!0}]})}a(zk,"copyEnvironment");async function wb(e,t,r=!1){E_(e,t),t=t.toString();let s=Qh(e,t,r);if(global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null)),global.lmdb_map[s]!==void 0)return global.lmdb_map[s];let n=await Wh(e,t),i=Lr.join(e,t+gc),o=n!=i,c=new yb(n,o),u=Yh.open(c);u.dbis=Object.create(null);let _=Db(u);for(let l=0;l<_.length;l++)is(u,_[l]);return u[Jn.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=u,u}a(wb,"openEnvironment");async function Jk(e,t,r=!1){E_(e,t),t=t.toString();let s=Lr.join(e,t+gc),n=await Wh(e,t);if(global.lmdb_map!==void 0){let i=Qh(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await Cb(o),delete global.lmdb_map[i]}}await Is.remove(n),await Is.remove(n===s?n+Wk:Lr.join(Lr.dirname(n),Kk))}a(Jk,"deleteEnvironment");async function Cb(e){d_.validateEnv(e);let t=e[Jn.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(Cb,"closeEnvironment");function Qh(e,t,r=!1){let n=`${Lr.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(Qh,"getCachedEnvironmentName");function Xk(e){d_.validateEnv(e);let t=Object.create(null),r=is(e,ws);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==ws)try{t[s]=Object.assign(new f_,n)}catch{Nb.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(Xk,"listDBIDefinitions");function Db(e){d_.validateEnv(e);let t=[],r=is(e,ws);for(let{key:s}of r.getRange({start:!1}))s!==ws&&t.push(s);return t}a(Db,"listDBIs");function jk(e,t){let s=is(e,ws).getEntry(t),n=new f_;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{Nb.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(jk,"getDBIDefinition");function Lb(e,t,r,s=!r){if(h_(e,t),t=t.toString(),t===ws)throw new Error(ir.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return is(e,t)}catch(n){if(n.message===ir.DBI_DOES_NOT_EXIST){let i=new Kh(r,s===!0),o=e.openDB(t,i),c=new f_(r===!0,s);return o[Ib]=c,is(e,ws).putSync(t,c),e.dbis[t]=o,o}throw n}}a(Lb,"createDBI");function is(e,t){if(h_(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==ws?r=jk(e,t):r=new f_,r===void 0)throw new Error(ir.DBI_DOES_NOT_EXIST);let s;try{let n=new Kh(r.dup_sort,r.useVersions);if(s=e.openDB(t,n),s.db===void 0)throw new Error("MDB_NOTFOUND")}catch(n){throw n.message.includes("MDB_NOTFOUND")===!0?new Error(ir.DBI_DOES_NOT_EXIST):n}return s[Ib]=r,e.dbis[t]=s,s}a(is,"openDBI");function Zk(e,t){h_(e,t),t=t.toString();let r=is(e,t),s=r.getStats();return r[Jn.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(Zk,"statDBI");async function eV(e,t){try{let r=Lr.join(e,t+gc);return(await Is.stat(r)).size}catch{throw new Error(ir.INVALID_ENVIRONMENT)}}a(eV,"environmentDataSize");function tV(e,t){if(h_(e,t),t=t.toString(),t===ws)throw new Error(ir.CANNOT_DROP_INTERNAL_DBIS_NAME);is(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],is(e,ws).removeSync(t)}a(tV,"dropDBI");function rV(e,t,r){let s;for(let n=0;n<r.length;n++){let i=r[n];if(!e.dbis[i])try{is(e,i)}catch(o){if(o.message===ir.DBI_DOES_NOT_EXIST)Lb(e,i,i!==t,i===t),s=!0;else throw o}}s&&$k()}a(rV,"initializeDBIs");Ub.exports={openDBI:is,openEnvironment:wb,createEnvironment:Qk,listDBIs:Db,listDBIDefinitions:Xk,createDBI:Lb,dropDBI:tV,statDBI:Zk,deleteEnvironment:Jk,initializeDBIs:rV,TransactionCursor:$h,environmentDataSize:eV,copyEnvironment:zk,closeEnvironment:Cb}});var Pb=T((tae,Mb)=>{"use strict";var zh=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};Mb.exports=zh});var Bb=T((sae,vb)=>{"use strict";var Jh=class{static{a(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],s=void 0,n=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s,this.original_records=n}};vb.exports=Jh});var xb=T((iae,Hb)=>{"use strict";var Xh=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};Hb.exports=Xh});var xo=T((lae,Gb)=>{"use strict";var sV=$e(),nV=Pb(),iV=Bb(),oV=xb(),Ks=Ir(),Rc=yr().LMDB_ERRORS_ENUM,aV=Et(),Tn=I(),cV=W(),uV=require("uuid"),aae=require("lmdb"),{handleHDBError:lV,hdb_errors:_V}=Z(),{OVERFLOW_MARKER:cae,MAX_SEARCH_KEY_LENGTH:uae}=aV,qb=j();qb.initSync();var m_=qb.get(Tn.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),jh=Tn.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Pi=Tn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function dV(e,t,r,s,n=Ks.getNextMonotonicTime()){rm(e,t,r,s),Zh(e,t,r);let i=new nV,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u];Fb(_,!0,n);let l=fV(e,t,r,_),d=_[t];o.push(l),c.push(d)}return em(o,c,s,i,n)}a(dV,"insertRecords");function fV(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||s.hasOwnProperty(o)===!1)continue;let c=s[o];if(typeof c=="function"){let l=c([[{}]]);Array.isArray(l)&&(c=l[0][Tn.FUNC_VAL],s[o]=c)}let u=Ks.getIndexedValues(c),_=e.dbis[o];if(u){m_&&_.prefetch(u.map(l=>({key:l,value:n})),p_);for(let l=0,d=u.length;l<d;l++)_.put(u[l],n)}}m_&&e.dbis[t].prefetch([n],p_),e.dbis[t].put(n,s,s[Pi])})}a(fV,"insertRecord");function EV(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(EV,"removeSkippedRecords");function Fb(e,t,r){let s=r>0;(s||!Number.isInteger(e[Pi]))&&(e[Pi]=r||(r=Ks.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[jh]))&&(e[jh]=r||Ks.getNextMonotonicTime()):delete e[jh]}a(Fb,"setTimestamps");function Zh(e,t,r){r.indexOf(Tn.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Tn.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Tn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Tn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),sV.initializeDBIs(e,t,r)}a(Zh,"initializeTransaction");async function hV(e,t,r,s,n=Ks.getNextMonotonicTime()){rm(e,t,r,s),Zh(e,t,r);let i=new iV,o=[],c=[],u=[];for(let _=0;_<s.length;_++){let l=s[_],d=l[t],f;try{f=tm(e,t,l,d,i,!0,n)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(f),u.push(d)}return em(c,u,s,i,n,o)}a(hV,"updateRecords");async function mV(e,t,r,s,n=Ks.getNextMonotonicTime()){try{rm(e,t,r,s)}catch(u){throw lV(u,u.message,_V.HTTP_STATUS_CODES.BAD_REQUEST)}Zh(e,t,r);let i=new oV,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u],l;cV.isEmpty(_[t])?(l=uV.v4(),_[t]=l):l=_[t];let d=tm(e,t,_,l,i,!1,n);o.push(d),c.push(l)}return em(o,c,s,i,n)}a(mV,"upsertRecords");async function em(e,t,r,s,n,i=[]){let o=await Promise.all(e);for(let c=0,u=o.length;c<u;c++)o[c]===!0?s.written_hashes.push(t[c]):(s.skipped_hashes.push(t[c]),i.push(c));return s.txn_time=n||Ks.getNextMonotonicTime(),EV(r,i),s}a(em,"finalizeWrite");function tm(e,t,r,s,n,i=!1,o){let c=e.dbis[t],u=c.getEntry(s),_=u?.value,l=_;if(!_){if(i)return!1;_={}}if(Fb(r,!l,o),Number.isInteger(r[Pi])&&_[Pi]>r[Pi])return!1;l&&n.original_records.push(_);let d,f=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let p=r[h],S=e.dbis[h];if(S===void 0)continue;let R=_[h];if(typeof p=="function"){let y=p([[_]]);Array.isArray(y)&&(p=y[0][Tn.FUNC_VAL],r[h]=p)}if(p===R)continue;let O=Ks.getIndexedValues(R);if(O){m_&&S.prefetch(O.map(y=>({key:y,value:s})),p_);for(let y=0,q=O.length;y<q;y++)S.remove(O[y],s)}if(O=Ks.getIndexedValues(p),O){m_&&S.prefetch(O.map(y=>({key:y,value:s})),p_);for(let y=0,q=O.length;y<q;y++)S.put(O[y],s)}}let E=Object.assign({},_,r);c.put(s,E,E[Pi])},"do_put");return u?d=c.ifVersion(s,u.version,f):d=c.ifNoExists(s,f),d.then(E=>E?!0:tm(e,t,r,s,n,i,o))}a(tm,"updateUpsertRecord");function pV(e,t,r){if(Ks.validateEnv(e),t===void 0)throw new Error(Rc.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Rc.WRITE_ATTRIBUTES_REQUIRED):new Error(Rc.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(pV,"validateBasic");function rm(e,t,r,s){if(pV(e,t,r),!Array.isArray(s))throw s===void 0?new Error(Rc.RECORDS_REQUIRED):new Error(Rc.RECORDS_MUST_BE_ARRAY)}a(rm,"validateWrite");function p_(){}a(p_,"noop");Gb.exports={insertRecords:dV,updateRecords:hV,upsertRecords:mV}});var vi=T((dae,SV)=>{SV.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 Qs=T((fae,$b)=>{"use strict";var Vb=W(),kb=I(),qo=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Ws=require("joi"),Xn={schema_format:{pattern:qo,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},TV=Ws.alternatives(Ws.string().min(1).max(Xn.schema_length.maximum).pattern(qo).messages({"string.pattern.base":"{:#label} "+Xn.schema_format.message}),Ws.number(),Ws.array()).required(),gV=Ws.alternatives(Ws.string().min(1).max(Xn.schema_length.maximum).pattern(qo).messages({"string.pattern.base":"{:#label} "+Xn.schema_format.message}),Ws.number()),RV=Ws.alternatives(Ws.string().min(1).max(Xn.schema_length.maximum).pattern(qo).messages({"string.pattern.base":"{:#label} "+Xn.schema_format.message}),Ws.number()).required();function AV(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Xn.schema_length.maximum?`'${e}' maximum of 250 characters`:qo.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(AV,"checkValidTable");function OV(e,t){return Vb.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(OV,"validateSchemaExists");function bV(e,t){let r=t.state.ancestors[0].schema;return Vb.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(bV,"validateTableExists");function NV(e,t){return e.toLowerCase()===kb.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${kb.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(NV,"validateSchemaName");$b.exports={common_validators:Xn,schema_regex:qo,hdb_schema_table:TV,validateSchemaExists:OV,validateTableExists:bV,validateSchemaName:NV,checkValidTable:AV,hdb_database:gV,hdb_table:RV}});var ze=T((hae,Yb)=>{"use strict";var or=require("validate.js");or.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||or.validators.type.checks[t](e)?null:` must be a '${t}' value`};or.validators.type.checks={Object:function(e){return or.isObject(e)&&!or.isArray(e)},Array:or.isArray,Integer:or.isInteger,Number:or.isNumber,String:or.isString,Date:or.isDate,Boolean:function(e){return typeof e=="boolean"}};or.validators.hasValidFileExt=function(e,t){return or.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};Yb.exports={validateObject:yV,validateObjectAsync:IV,validateBySchema:wV};function yV(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=or(e,t,{format:"flat"});return r?new Error(r):null}a(yV,"validateObject");async function IV(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await or.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(IV,"validateObjectAsync");function wV(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(wV,"validateBySchema")});var S_=T((pae,Kb)=>{var{common_validators:zs}=Qs(),Oc=ze(),Ac="is required",ht={database:{presence:!1,format:zs.schema_format,length:zs.schema_length},schema:{presence:!1,format:zs.schema_format,length:zs.schema_length},table:{presence:!0,format:zs.schema_format,length:zs.schema_length},attribute:{presence:!0,format:zs.schema_format,length:zs.schema_length},hash_attribute:{presence:!0,format:zs.schema_format,length:zs.schema_length}};function bc(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(bc,"makeAttributesStrings");function CV(e){return e=bc(e),ht.table.presence=!1,ht.attribute.presence=!1,ht.hash_attribute.presence=!1,Oc.validateObject(e,ht)}a(CV,"schema_object");function DV(e){return e=bc(e),ht.table.presence={message:Ac},ht.attribute.presence=!1,ht.hash_attribute.presence=!1,Oc.validateObject(e,ht)}a(DV,"table_object");function LV(e){return e=bc(e),ht.table.presence={message:Ac},ht.attribute.presence=!1,Oc.validateObject(e,ht)}a(LV,"create_table_object");function UV(e){return e=bc(e),ht.table.presence={message:Ac},ht.attribute.presence={message:Ac},ht.hash_attribute.presence=!1,Oc.validateObject(e,ht)}a(UV,"attribute_object");function MV(e){return e=bc(e),ht.table.presence={message:Ac},ht.attribute.presence=!1,ht.hash_attribute.presence=!1,Oc.validateObject(e,ht)}a(MV,"describe_table");function PV(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(PV,"validateTableResidence");Kb.exports={schema_object:CV,create_table_object:LV,table_object:DV,attribute_object:UV,describe_table:MV,validateTableResidence:PV}});var Qb=T((Tae,Wb)=>{"use strict";var vV=require("uuid"),sm=class{static{a(this,"CreateAttributeObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||vV.v4(),this.schema_table=`${this.schema}.${this.table}`}};Wb.exports=sm});var T_=T((Rae,zb)=>{"use strict";var BV=Qb(),nm=class extends BV{static{a(this,"LMDBCreateAttributeObject")}constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};zb.exports=nm});var Xb=T((Oae,Jb)=>{"use strict";Jb.exports=xV;var HV="inserted";function xV(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===HV?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(xV,"returnObject")});var g_=T((Nae,rN)=>{"use strict";var qV=I(),im=$e(),FV=xo(),{getSystemSchemaPath:GV,getSchemaPath:kV}=Ke(),VV=vi(),$V=S_(),YV=T_(),KV=Xb(),{handleHDBError:jb,hdb_errors:eN}=Z(),Zb=W(),{HTTP_STATUS_CODES:WV}=eN,om=VV.hdb_attribute,tN=[];for(let e=0;e<om.attributes.length;e++)tN.push(om.attributes[e].attribute);var QV="inserted";rN.exports=zV;async function zV(e){let t=$V.attribute_object(e);if(t)throw jb(new Error,t.message,eN.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&Zb.checkGlobalSchemaTable(e.schema,e.table);if(r)throw jb(new Error,r,WV.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=Zb.isEmpty(e.dup_sort)||e.dup_sort=="true";let s=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(s=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(s)&&s.length>0){for(let i of s)if(i.attribute===e.attribute)throw new Error(`attribute '${i.attribute}' already exists in ${e.schema}.${e.table}`)}let n=new YV(e.schema,e.table,e.attribute,e.id);try{let i=await im.openEnvironment(kV(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}`);im.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await im.openEnvironment(GV(),qV.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await FV.insertRecords(o,om.hash_attribute,tN,[n]);return KV(QV,c,{records:[n]},u)}catch(i){throw i}}a(zV,"lmdbCreateAttribute")});var cm=T((Iae,nN)=>{var{hdb_table:JV,hdb_database:sN}=Qs(),XV=ze(),am=require("joi"),jV={undefined:"undefined",null:"null"},ZV=a((e,t)=>{let r=Object.keys(e),s=r.length,n;for(let i=0;i<s;i++){let o=r[i];(!o||o.length===0||jV[o]!==void 0)&&(n===void 0?n=`Invalid attribute name: '${o}'`:n+=`. Invalid attribute name: '${o}'`)}return n?t.message(n):e},"custom_records_val"),e$=am.object({database:sN,schema:sN,table:JV,records:am.array().items(am.object().custom(ZV)).required()});nN.exports=function(e){return XV.validateBySchema(e,e$)}});var Nc=T((Dae,oN)=>{"use strict";var gn=W(),iN=G(),Cae=cm(),{getDatabases:t$}=(pe(),te(Fe)),{ClientError:Bi}=Z();oN.exports=r$;function r$(e){if(gn.isEmpty(e))throw new Bi("invalid update parameters defined.");if(gn.isEmptyOrZeroLength(e.schema))throw new Bi("invalid schema specified.");if(gn.isEmptyOrZeroLength(e.table))throw new Bi("invalid table specified.");if(!Array.isArray(e.records))throw new Bi("records must be an array");let t=t$()[e.schema]?.[e.table];if(gn.isEmpty(t))throw new Bi(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,s=new Set,n={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&gn.isEmptyOrZeroLength(o[r]))throw iN.error("a valid hash attribute must be provided with update record:",o),new Bi("a valid hash attribute must be provided with update record, check log for more info");if(!gn.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw iN.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Bi(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!gn.isEmpty(o[r])&&o[r]!==""&&s.has(gn.autoCast(o[r]))&&(o.skip=!0),s.add(gn.autoCast(o[r]));for(let c in o)n[c]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(r$,"insertUpdateValidate")});var yc=T((Uae,aN)=>{"use strict";var s$=I().OPERATIONS_ENUM,um=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i=void 0){this.operation=s$.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};aN.exports=um});var Dc=T((vae,cN)=>{"use strict";var Pae=yc(),R_=I(),_m=W(),lm=G(),n$=require("uuid"),{handleHDBError:Ic,hdb_errors:i$}=Z(),{HDB_ERROR_MSGS:wc,HTTP_STATUS_CODES:Cc}=i$;cN.exports=o$;function o$(e,t,r){for(let n=0;n<t.length;n++)a$(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];c$(i,r,e.operation)}}a(o$,"processRows");function a$(e){if(Buffer.byteLength(String(e))>R_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Ic(new Error,wc.ATTR_NAME_LENGTH_ERR(e),Cc.BAD_REQUEST,void 0,void 0,!0);if(_m.isEmptyOrZeroLength(e)||_m.isEmpty(e.trim()))throw Ic(new Error,wc.ATTR_NAME_NULLISH_ERR,Cc.BAD_REQUEST,void 0,void 0,!0)}a(a$,"validateAttribute");function c$(e,t,r){if(!e.hasOwnProperty(t)||_m.isEmptyOrZeroLength(e[t])){if(r===R_.OPERATIONS_ENUM.INSERT||r===R_.OPERATIONS_ENUM.UPSERT){e[t]=n$.v4();return}throw lm.error("Update transaction aborted due to record with no hash value:",e),Ic(new Error,wc.RECORD_MISSING_HASH_ERR,Cc.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>R_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw lm.error(e),Ic(new Error,wc.HASH_VAL_LENGTH_ERR,Cc.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw lm.error(e),Ic(new Error,wc.INVALID_FORWARD_SLASH_IN_HASH_ERR,Cc.BAD_REQUEST,void 0,void 0,!0)}a(c$,"validateHash")});var lN=T((Hae,uN)=>{"use strict";var dm=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};uN.exports=dm});var fN=T((qae,dN)=>{"use strict";var fm=$e(),u$=G(),_N=yr().LMDB_ERRORS_ENUM;dN.exports=l$;async function l$(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 fm.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==_N.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await fm.closeEnvironment(global.lmdb_map[s]),await fm.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==_N.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){u$.error(t)}}a(l$,"cleanLMDBMap")});var Rn=T((Gae,pN)=>{"use strict";var Lc=require("crypto"),_$=j(),{CONFIG_PARAMS:d$}=I(),hN="aes-256-cbc",f$=32,E$=16,Em=64,mN=32,h$=Em+mN,EN=new Map;pN.exports={encrypt:m$,decrypt:p$,createNatsTableStreamName:S$};function m$(e){let t=Lc.randomBytes(f$),r=Lc.randomBytes(E$),s=Lc.createCipheriv(hN,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=n.toString("hex");return i+o+c}a(m$,"encrypt");function p$(e){let t=e.substr(0,Em),r=e.substr(Em,mN),s=e.substr(h$,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=Lc.createDecipheriv(hN,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(p$,"decrypt");function S$(e,t){let r=_$.get(d$.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,s=EN.get(r);return s||(s=Lc.createHash("md5").update(r).digest("hex"),EN.set(r,s)),s}a(S$,"createNatsTableStreamName")});var jn=T(($ae,TN)=>{"use strict";var Vae=os(),A_=G(),SN=S_(),T$=Rn(),O_=W(),{handleHDBError:b_,hdb_errors:g$}=Z(),{HDB_ERROR_MSGS:N_,HTTP_STATUS_CODES:hm}=g$,R$=j();R$.initSync();var{getDatabases:mm}=(pe(),te(Fe));TN.exports={describeAll:A$,describeTable:y_,describeSchema:O$};async function A$(e){try{let t=O_.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n=mm(),i={},o={},c=[],u=e?.exact_count;for(let l in n){i[l]=!0,!t&&!s&&(o[l]=e.hdb_user.role.permission[l].describe);let d=n[l];for(let f in d)try{let E;if(t||s)E=await y_({schema:l,table:f,exact_count:u});else if(r&&r[l].describe&&r[l].tables[f].describe){let h=r[l].tables[f].attribute_permissions;E=await y_({schema:l,table:f,exact_count:u},h)}E&&c.push(E)}catch(E){A_.error(E)}}let _={};for(let l in c)t||s?(_[c[l].schema]==null&&(_[c[l].schema]={}),_[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]):o[c[l].schema]&&(_[c[l].schema]==null&&(_[c[l].schema]={}),_[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]);for(let l in i)t||s?_[l]={}:o[l]&&(_[l]={});return _}catch(t){return A_.error("Got an error in describeAll"),A_.error(t),b_(new Error,N_.DESCRIBE_ALL_ERR)}}a(A$,"describeAll");async function y_(e,t){O_.transformReq(e);let{schema:r,table:s}=e;r=r?.toString(),s=s?.toString();let n=t;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(n=e.hdb_user.role.permission[r].tables[s].attribute_permissions);let i=SN.describe_table(e);if(i)throw i;let c=mm()[r];if(!c)throw b_(new Error,N_.SCHEMA_NOT_FOUND(e.schema),hm.NOT_FOUND);let u=c[s];if(!u)throw b_(new Error,N_.TABLE_NOT_FOUND(e.schema,e.table),hm.NOT_FOUND);function _(f){l.push(Object.assign({},{attribute:f.attribute,type:f.type,elements:f.elements?.type,indexed:f.indexed,is_primary_key:f.isPrimaryKey,assigned_created_time:f.assignCreatedTime,assigned_updated_time:f.assignUpdatedTime,nullable:f.nullable,properties:f.properties?f.properties.map(E=>({type:E.type,name:E.name})):void 0}))}a(_,"pushAtt");let l=[];if(n){let f={};n.forEach(E=>{E.describe&&(f[E.attribute_name]=!0)}),u.attributes.forEach(E=>{f[E.name]&&_(E)})}else u.attributes?.forEach(f=>_(f));let d={schema:r,name:u.tableName,hash_attribute:u.attributes.find(f=>f.isPrimaryKey||f.is_hash_attribute)?.name,audit:u.audit,schema_defined:u.schemaDefined,attributes:l};d.clustering_stream_name=T$.createNatsTableStreamName(d.schema,d.name);try{let f=u.getRecordCount({exactCount:e.exact_count==="true"});d.record_count=f.recordCount,d.estimated_record_range=f.estimatedRange;let E=u.auditStore;if(E)for(let h of E.getKeys({reverse:!0,limit:1}))d.last_updated_record=h[0];if(!d.last_updated_record&&u.indices.__updatedtime__)for(let h of u.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))d.last_updated_record=h}catch(f){A_.warn(`unable to stat table dbi due to ${f}`)}return d}a(y_,"descTable");async function O$(e){O_.transformReq(e);let t=SN.schema_object(e);if(t)throw t;let r;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(r=e.hdb_user.role.permission[e.schema]);let s=e.schema.toString(),i=mm()[s];if(!i)throw b_(new Error,N_.SCHEMA_NOT_FOUND(e.schema),hm.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),O_.isEmpty(u)||u.describe){let _=await y_({schema:e.schema,table:c,exact_count:e.exact_count},u?u.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(O$,"describeSchema")});var An=T((Qae,bN)=>{var b$=vi(),{callbackify:RN,promisify:N$}=require("util"),{getDatabases:AN}=(pe(),te(Fe));bN.exports={setSchemaDataToGlobal:gN,getTableSchema:y$,getSystemSchema:I$,setSchemaDataToGlobalAsync:N$(gN)};var ON=jn(),Kae=RN(ON.describeAll),Wae=RN(ON.describeTable);function gN(e){global.hdb_schema=AN(),e&&e()}a(gN,"setSchemaDataToGlobal");function y$(e,t,r){let s=AN()[e];if(!s)return r(`schema ${e} does not exist`);let n=s[t];return n?r(null,{schema:e,name:t,hash_attribute:n.primaryKey}):r(`table ${e}.${t} does not exist`)}a(y$,"getTableSchema");function I$(){return b$}a(I$,"getSystemSchema")});var Ur=T((Jae,wN)=>{"use strict";var w_=cm(),qt=W(),w$=require("util"),C_=Cs(),C$=An(),NN=G(),{handleHDBError:Hi,hdb_errors:D$}=Z(),{HTTP_STATUS_CODES:xi}=D$,L$=w$.promisify(C$.getTableSchema),U$="updated",yN="inserted",IN="upserted";wN.exports={insert:P$,update:v$,upsert:B$,validation:M$,flush:H$};async function M$(e){if(qt.isEmpty(e))throw new Error("invalid update parameters defined.");if(qt.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(qt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await L$(e.schema,e.table),r=w_(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let s=t.hash_attribute,n=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&qt.isEmptyOrZeroLength(c[s]))throw NN.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(!qt.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw NN.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!qt.isEmpty(c[s])&&c[s]!==""&&n.has(qt.autoCast(c[s]))&&(c.skip=!0),n.add(qt.autoCast(c[s]));for(let u in c)i[u]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(M$,"validation");async function P$(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=w_(e);if(t)throw Hi(new Error,t.message,xi.BAD_REQUEST);qt.transformReq(e);let r=qt.checkSchemaTableExist(e.schema,e.table);if(r)throw Hi(new Error,r,xi.BAD_REQUEST);let s=await C_.createRecords(e);return I_(yN,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(P$,"insertData");async function v$(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=w_(e);if(t)throw Hi(new Error,t.message,xi.BAD_REQUEST);qt.transformReq(e);let r=qt.checkSchemaTableExist(e.schema,e.table);if(r)throw Hi(new Error,r,xi.BAD_REQUEST);let s=await C_.updateRecords(e);return qt.isEmpty(s.existing_rows)?I_(U$,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):I_(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(v$,"updateData");async function B$(e){if(e.operation!=="upsert")throw Hi(new Error,"invalid operation, must be upsert",xi.INTERNAL_SERVER_ERROR);let t=w_(e);if(t)throw Hi(new Error,t.message,xi.BAD_REQUEST);qt.transformReq(e);let r=qt.checkSchemaTableExist(e.schema,e.table);if(r)throw Hi(new Error,r,xi.BAD_REQUEST);let s=await C_.upsertRecords(e);return I_(IN,s.written_hashes,e,[],s.new_attributes,s.txn_time)}a(B$,"upsertData");function I_(e,t,r,s,n,i){let o={message:`${e} ${t.length} of ${t.length+s.length} records`,new_attributes:n,txn_time:i};return e===yN?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===IN?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(I_,"returnObject");function H$(e){return qt.transformReq(e),C_.flush(e.schema,e.table)}a(H$,"flush")});var Sm=T((jae,LN)=>{var x$=ze(),pm=require("joi"),{hdb_table:q$,hdb_database:CN}=Qs(),DN={schema:CN,database:CN,table:q$},F$={date:pm.date().iso().required()},G$={timestamp:pm.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};LN.exports=function(e,t){let r=t==="timestamp"?{...DN,...G$}:{...DN,...F$},s=pm.object(r);return x$.validateBySchema(e,s)}});var PN=T((Zae,MN)=>{var k$=ze(),Tm=require("joi"),{hdb_table:V$,hdb_database:UN}=Qs(),$$=Tm.object({schema:UN,database:UN,table:V$,hash_values:Tm.array().required(),ids:Tm.array()});MN.exports=function(e){return k$.validateBySchema(e,$$)}});var BN=T((ece,vN)=>{"use strict";var gm=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}},Rm=class{static{a(this,"NoSQLSeachObject")}constructor(t,r,s,n,i,o){this.schema=t,this.table=r,this.search_attribute=s,this.hash_attribute=n,this.get_attributes=i,this.search_value=o}},Am=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};vN.exports={InsertObject:gm,NoSQLSeachObject:Rm,DeleteResponseObject:Am}});var ti=T((rce,GN)=>{"use strict";var xN=Sm(),Y$=PN(),qi=W(),HN=require("moment"),qN=G(),{promisify:K$,callbackify:W$}=require("util"),Fi=I(),Q$=An(),Om=K$(Q$.getTableSchema),bm=Cs(),{DeleteResponseObject:z$}=BN(),{handleHDBError:Zn,hdb_errors:J$}=Z(),{HDB_ERROR_MSGS:D_,HTTP_STATUS_CODES:ei}=J$,X$="records successfully deleted",j$=W$(FN);GN.exports={delete:j$,deleteRecord:FN,deleteFilesBefore:Z$,deleteAuditLogsBefore:e1};async function Z$(e){let t=xN(e,"date");if(t)throw Zn(t,t.message,ei.BAD_REQUEST,void 0,void 0,!0);if(qi.transformReq(e),!HN(e.date,HN.ISO_8601).isValid())throw Zn(new Error,D_.INVALID_DATE,ei.BAD_REQUEST,Fi.LOG_LEVELS.ERROR,D_.INVALID_DATE,!0);let s=qi.checkSchemaTableExist(e.schema,e.table);if(s)throw Zn(new Error,s,ei.NOT_FOUND,Fi.LOG_LEVELS.ERROR,s,!0);let n=await bm.deleteRecordsBefore(e);if(await Om(e.schema,e.table),qN.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(Z$,"deleteFilesBefore");async function e1(e){let t=xN(e,"timestamp");if(t)throw Zn(t,t.message,ei.BAD_REQUEST,void 0,void 0,!0);if(qi.transformReq(e),isNaN(e.timestamp))throw Zn(new Error,D_.INVALID_VALUE("Timestamp"),ei.BAD_REQUEST,Fi.LOG_LEVELS.ERROR,D_.INVALID_VALUE("Timestamp"),!0);let r=qi.checkSchemaTableExist(e.schema,e.table);if(r)throw Zn(new Error,r,ei.NOT_FOUND,Fi.LOG_LEVELS.ERROR,r,!0);let s=await bm.deleteAuditLogsBefore(e);return await Om(e.schema,e.table),qN.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(e1,"deleteAuditLogsBefore");async function FN(e){e.ids&&(e.hash_values=e.ids);let t=Y$(e);if(t)throw Zn(t,t.message,ei.BAD_REQUEST,void 0,void 0,!0);qi.transformReq(e);let r=qi.checkSchemaTableExist(e.schema,e.table);if(r)throw Zn(new Error,r,ei.NOT_FOUND,Fi.LOG_LEVELS.ERROR,r,!0);try{await Om(e.schema,e.table);let s=await bm.deleteRecords(e);return qi.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${X$}`),s}catch(s){if(s.message===Fi.SEARCH_NOT_FOUND_MESSAGE){let n=new z$;return n.message=Fi.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(FN,"deleteRecord")});var L_=T((nce,$N)=>{var t1=require("crypto"),kN=9;function r1(e){let t=n1(kN),r=VN(e+t);return t+r}a(r1,"createHash");function s1(e,t){let r=e?.substr(0,kN),s=r+VN(t+r);return e===s}a(s1,"validateHash");function n1(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,s="";for(let n=0;n<e;n++){let i=Math.floor(Math.random()*r);s+=t[i]}return s}a(n1,"generateSalt");function VN(e){return t1.createHash("md5").update(e).digest("hex")}a(VN,"md5");$N.exports={hash:r1,validate:s1}});var KN=T((oce,YN)=>{var Nm=ze(),Qt={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 i1(e){return Qt.password.presence=!0,Qt.username.presence=!0,Qt.role.presence=!0,Qt.active.presence=!0,Nm.validateObject(e,Qt)}a(i1,"addUserValidation");function o1(e){return Qt.password.presence=!1,Qt.username.presence=!0,Qt.role.presence=!1,Qt.active.presence=!1,Nm.validateObject(e,Qt)}a(o1,"alterUserValidation");function a1(e){return Qt.password.presence=!1,Qt.username.presence=!0,Qt.role.presence=!1,Qt.active.presence=!1,Nm.validateObject(e,Qt)}a(a1,"dropUserValidation");YN.exports={addUserValidation:i1,alterUserValidation:o1,dropUserValidation:a1}});var Ge=T((uce,QN)=>{"use strict";var{platform:cce}=require("os"),c1="nats-server.zip",ym="nats-server",u1=process.platform==="win32"?`${ym}.exe`:ym,Im="HDB",l1=/^[^\s.,*>]+$/,WN="__request__",_1=a(e=>`${e}.${WN}`,"REQUEST_SUBJECT"),d1={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},f1={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},E1={HUB:"hub.pid",LEAF:"leaf.pid"},h1={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},m1={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:Im,deliver_subject:"__HDB__.WORKQUEUE"},p1={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:Im,deliver_subject:"HDB.SCHEMAQUEUE"},S1={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:Im,deliver_subject:"HDB.USERQUEUE"},T1={SUCCESS:"success",ERROR:"error"},g1={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},R1={TXN:"txn",MSGID:"msgid"},Fo={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},A1={[Fo.ERR]:1,[Fo.WRN]:2,[Fo.INF]:3,[Fo.DBG]:4,[Fo.TRC]:5},O1={debug:"-D",trace:"-DVV"};QN.exports={NATS_SERVER_ZIP:c1,NATS_SERVER_NAME:ym,NATS_BINARY_NAME:u1,PID_FILES:E1,NATS_CONFIG_FILES:f1,SERVER_SUFFIX:h1,WORK_QUEUE_CONSUMER_NAMES:m1,SCHEMA_QUEUE_CONSUMER_NAMES:p1,USER_QUEUE_CONSUMER_NAMES:S1,NATS_TERM_CONSTRAINTS_RX:l1,REQUEST_SUFFIX:WN,UPDATE_REMOTE_RESPONSE_STATUSES:T1,CLUSTER_STATUS_STATUSES:g1,REQUEST_SUBJECT:_1,SUBJECT_PREFIXES:R1,MSG_HEADERS:d1,LOG_LEVELS:Fo,LOG_LEVEL_FLAGS:O1,LOG_LEVEL_HIERARCHY:A1}});var JN=T((_ce,zN)=>{"use strict";var b1={key:"-----BEGIN RSA PRIVATE KEY-----\rMIIEowIBAAKCAQEArBFJQRfFiJku/KwhV1Ssp7cX61vvuKmd4Rp6A9jB2QLgx8nj\r/+Xhp2hPRkISnOA8BuAxr4dMD9syGJwX4kNy9mbZ5Q0fWZCiEGBpVcU1J+k+N5K4\rSuZ2SqgxeN2IN2RLzt3GyQY4imcdHgNv7aHoXUrEwBx0MeYEw3IIDXtrYKCR2D8I\rvWBfwMUgWa24G8lpWILWA5hd9srRz9NxlAiHSjhbgT7B0xruEpHRCHSyKjvaIJVt\rWBR+amejYsAKVrD/hgrqjsA1123Y6++YqvU6vwg64xhS2kz5r3dkNKhvwbWgpZdI\rIaRvsiB77f4kLGo0vi8RFgJ1ZRjGg3RRK2w1LQIDAQABAoIBAQCEOmh78EOpnGZC\rYBjjHrvrysVD5gvLcfVUtl8Ls7gMB60re1eOIF+PoZZCHKZnDd6zPfiQtj1adg0C\rYnnsM/8VoaZS4gm0b3RLd3ubIQifWhuo40RissY2yxfxlPSH9LhZCY8ojnJG0cTL\resK579E8WCfopjUY33XLqEbN7Ylv39J+DSqInjqV3efJZUa+HqUJ98VxxzodcKMD\rP3bwUU4gHoSSp4pAsOFH5sQhaIWH1IcNjrAwpee2cJQuh4G157RRIuuUpagtaEG/\rXJIiAyBguJyu3JQFnIBQF01N5+omJgXYJ1L0m54543/iIRThmF3zDCDgCyUzmOk+\rH6As9fv1AoGBANOpOtOZLSAScjGsgJamT3ceJ2wCa86g2j8Oxu8lJUmUp5s3tA0v\rBFW5O3S4KR1EXwkLMBUMrfFM8YvzHWxsXBI6XV8azGLvyqPHxr65OhmpGYkGZMXu\rn9okgjkqlewnY2I073gvyK7ppX51UL5y9fF1vlsk+UlW+Rgx/vMHbdcjAoGBANAc\rxRUsxs4QJpbS4zD3JOkHjr24a97TrS3kCybAHUMpR2NrEHPZw9zex0/aphOJUHfL\rIMkOZdpfDqMfxWy4FAEmqBEMkO2SB+h0Wp4P+qp81ax4vGFiB0cD3wtixr11U1tt\rlZ/ZTdv4VDpDFNK1KaplhTDeyuCjeYfS3/GJia9vAoGAcOsAgjBevZR5rXx84WH6\rVO8WUu37u7FenXNxt9VWTinrPMh72uixZFY8nOk+rely1e1NCn3IMko9Ns9NbDFm\r8SaH95vhXArXTYbfxZIlp9jp0YtCqcHDL+p4Oq04bFMbFyJseu7rHj1x18QYfnHw\rOY/6LL/N6k1m+Hx7qgXVmIcCgYB/w0nTCBw84XlvWqSTqQaF8VfWbWP79mP5KmkW\rLxdH5g2noVEGbohqDnK6OXd/wusdwByukiJBf94Skyy25AOT+VFwthA7aU1ljhkb\rtJ+lDuJ28eBkwLPLCzthWBC+u0qjdJFJAzVjd/7tjcU43nNn4s90AzL12iaAFhvZ\rwyA+DQKBgGc/4cdyGJ3YkcA8150gQBawgJZ7q8V1JND87ggWA8wnK3cHn7rMZQl2\r3emDp9HEFXFex5dbGDDqZFAoesZCDxjknIn9oNfW4PvaWS8q7b6ZKLZG1p03Pu7/\rtYaD0kPbo0kysfFT/co+NgHbdykvIyboomfGdNLTUjYuy6lpwpvs\r-----END RSA PRIVATE KEY-----\r".replace(/\r/g,`\r
|
|
1
|
+
"use strict";var gq=Object.create;var ja=Object.defineProperty;var Rq=Object.getOwnPropertyDescriptor;var Aq=Object.getOwnPropertyNames;var Oq=Object.getPrototypeOf,bq=Object.prototype.hasOwnProperty;var a=(e,t)=>ja(e,"name",{value:t,configurable:!0});var Ae=(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)ja(e,r,{get:t[r],enumerable:!0})},CA=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of Aq(t))!bq.call(e,n)&&n!==r&&ja(e,n,{get:()=>t[n],enumerable:!(s=Rq(t,n))||s.enumerable});return e};var v=(e,t,r)=>(r=e!=null?gq(Oq(e)):{},CA(t||!e||!e.__esModule?ja(r,"default",{value:e,enumerable:!0}):r,e)),ee=e=>CA(ja({},"__esModule",{value:!0}),e);var UA=T((Yoe,LA)=>{var Nq=require("fast-glob"),{statSync:ih,existsSync:oh,readFileSync:yq,writeFileSync:Iq}=require("fs"),{spawnSync:wq,spawn:Cq,execFileSync:$oe}=require("child_process"),{isMainThread:Dq}=require("worker_threads"),{join:Wn,relative:DA}=require("path"),{PACKAGE_ROOT:Os}=D(),{tmpdir:Lq,platform:Uq}=require("os");require("source-map-support").install();var Mq=["resources","server","dataLayer","components"],Za="ts-build",ah,Pq=__filename.endsWith("tsBuild.js");if(Pq){if(Dq){let r;try{ih(Wn(Os,Za)),r=!0}catch{}if(r)for(let s of Nq.sync(Mq.map(n=>n+"/**/*.ts"),{cwd:Os})){let n=0,i=0;try{n=ih(Wn(Os,s)).mtimeMs-5e3,i=ih(Wn(Os,Za,s.replace(/.ts$/,".js"))).mtimeMs}catch{}if(n>i){console.warn(`TypeScript ${s} is not compiled`+(i?` (TS source file was modified at ${new Date(n)} and compiled file at ${new Date(i)})`:"")+", consider enabling auto-compilation of TypeScript in your IDE), compiling now."),ah=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),ah=!0;if(ah){let s=Wn(Os,"node_modules/.bin/tsc");Uq()==="win32"&&(s+=".cmd");let n=wq(s,{cwd:Os});if(n.stdout.length&&console.log(n.stdout.toString()),n.stderr.length&&console.log(n.stderr.toString()),r){let i=Wn(Lq(),"harperdb-tsc.pid"),o;if(oh(i))try{process.kill(+yq(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=Cq(s,["--watch"],{cwd:Os,detached:!0,stdio:"ignore"});Iq(i,c.pid.toString()),c.unref()}}}}let e=LA.constructor,t=e._findPath;e._findPath=function(r,s,n){if(r.startsWith(".")&&!n&&s.length===1&&s[0].startsWith(Os)&&!s[0].includes("node_modules")){let i=DA(Os,s[0]),o;i.startsWith(Za)?o=Wn(Os,DA(Za,i)):o=Wn(Os,Za,i);let c=Wn(o,r),u=c+".js";if(oh(u))return u;if(c.includes(".")&&oh(c))return c}return t(r,s,n)}}});var D=T((Qoe,KA)=>{"use strict";var jr=require("path"),vq=require("fs"),{relative:Koe,join:Woe}=jr,{existsSync:Bq}=vq;function Hq(){let e=__dirname;for(;!Bq(jr.join(e,"package.json"));){let t=jr.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(Hq,"getHDBPackageRoot");var Qn=Hq(),MA="js",ql=MA,xq="harperdb-config.yaml",qq="defaultConfig.yaml",Fq="hdb",PA=`harperdb.${ql}`,vA=`customFunctionsServer.${ql}`,Gq=`restartHdb.${ql}`,uh="HarperDB",xl="Custom Functions",Fl="Clustering Hub",Gl="Clustering Leaf",kq="Clustering Ingest Service",Vq="Clustering Reply Service",$q="foreground.pid",Yq="hdb.pid",Kq="data",Wq={HDB:uh,CLUSTERING_HUB:Fl,CLUSTERING_LEAF:Gl,CLUSTERING_INGEST_SERVICE:kq,CLUSTERING_REPLY_SERVICE:Vq,CUSTOM_FUNCTIONS:xl,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"},Qq={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},zq={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},Jq={harperdb:uh,"clustering hub":Fl,"clustering leaf":Gl,"custom functions":xl,custom_functions:xl,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},Xq={CLUSTERING_HUB_PROC_DESCRIPTOR:Fl,CLUSTERING_LEAF_PROC_DESCRIPTOR:Gl},ch={HDB:jr.join(Qn,"server/harperdb"),CUSTOM_FUNCTIONS:jr.join(Qn,"server/customFunctions"),CLUSTERING_HUB:jr.join(Qn,"server/nats"),CLUSTERING_LEAF:jr.join(Qn,"server/nats")},jq={HDB:jr.join(ch.HDB,PA),CUSTOM_FUNCTIONS:jr.join(ch.CUSTOM_FUNCTIONS,vA)},Zq={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:jr.join(Qn,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:jr.join(Qn,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:jr.join(Qn,"launchServiceScripts/launchUpdateNodes4-0-0.js")},eF={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},BA="support@harperdb.io",tF="customer-success@harperdb.io",HA=1,rF=4141,xA="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",sF="https://www.harperdb.io/product",nF=`For support, please submit a request at ${xA} or contact ${BA}`,qA=`For license support, please contact ${tF}`,iF="None of the specified records were found.",oF="hash attribute not found",aF=`Your current license only supports ${HA} role. ${qA}`,cF="Your current license only supports 3 connections to a node.",uF="127.0.0.1",lF=1,_F=/^\.$/,dF=/^\.\.$/,fF="U+002E",EF=/\//g,hF="U+002F",mF=/U\+002F/g,pF=/^U\+002E$/,SF=/^U\+002EU\+002E$/,TF="d",gF=999999,RF="*",AF="--max-old-space-size=",OF="system",bF="__hdb_hash",NF=".harperdb",yF=".hdb",IF="keys",wF="hdb_boot_properties.file",CF=".updateConfig.json",DF="SIGTSTP",LF=24,UF=6e4,MF=448,PF="blob",vF="trash",BF="database",HF="schema",xF="transactions",qF=".count",FF="id",GF="PROCESS_NAME",FA={SETTINGS_PATH_KEY:"settings_path"},GA=require("lodash"),kF={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"},VF={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},$F={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},YF={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"},KF={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"},yr="hdb_internal:",WF={CREATE_SCHEMA:yr+"create_schema",CREATE_TABLE:yr+"create_table",CREATE_ATTRIBUTE:yr+"create_attribute",ADD_USER:yr+"add_user",ALTER_USER:yr+"alter_user",DROP_USER:yr+"drop_user",HDB_NODES:yr+"hdb_nodes",HDB_USERS:yr+"hdb_users",HDB_WORKERS:yr+"hdb_workers",CATCHUP:yr+"catchup",SCHEMA_CATCHUP:yr+"schema_catchup",WORKER_ROOM:yr+"cluster_workers"},QF={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"},zF="060493.ks",JF=".license",XF={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"},jF={CSV:".csv",JSON:".json"},ZF={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},eG={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},ec={};ec[X.INSERT]=X.INSERT;ec[X.UPDATE]=X.UPDATE;ec[X.UPSERT]=X.UPSERT;ec[X.DELETE]=X.DELETE;var ve=Object.create(null);ve[X.DESCRIBE_ALL]=X.DESCRIBE_ALL;ve[X.DESCRIBE_TABLE]=X.DESCRIBE_TABLE;ve[X.DESCRIBE_SCHEMA]=X.DESCRIBE_SCHEMA;ve[X.READ_LOG]=X.READ_LOG;ve[X.ADD_NODE]=X.ADD_NODE;ve[X.LIST_USERS]=X.LIST_USERS;ve[X.LIST_ROLES]=X.LIST_ROLES;ve[X.USER_INFO]=X.USER_INFO;ve[X.SQL]=X.SQL;ve[X.GET_JOB]=X.GET_JOB;ve[X.SEARCH_JOBS_BY_START_DATE]=X.SEARCH_JOBS_BY_START_DATE;ve[X.DELETE_FILES_BEFORE]=X.DELETE_FILES_BEFORE;ve[X.EXPORT_LOCAL]=X.EXPORT_LOCAL;ve[X.EXPORT_TO_S3]=X.EXPORT_TO_S3;ve[X.CLUSTER_STATUS]=X.CLUSTER_STATUS;ve[X.REMOVE_NODE]=X.REMOVE_NODE;ve[X.RESTART]=X.RESTART;ve[X.CUSTOM_FUNCTIONS_STATUS]=X.CUSTOM_FUNCTIONS_STATUS;ve[X.GET_CUSTOM_FUNCTIONS]=X.GET_CUSTOM_FUNCTIONS;ve[X.GET_CUSTOM_FUNCTION]=X.GET_CUSTOM_FUNCTION;ve[X.SET_CUSTOM_FUNCTION]=X.SET_CUSTOM_FUNCTION;ve[X.DROP_CUSTOM_FUNCTION]=X.DROP_CUSTOM_FUNCTION;ve[X.ADD_CUSTOM_FUNCTION_PROJECT]=X.ADD_CUSTOM_FUNCTION_PROJECT;ve[X.DROP_CUSTOM_FUNCTION_PROJECT]=X.DROP_CUSTOM_FUNCTION_PROJECT;ve[X.PACKAGE_CUSTOM_FUNCTION_PROJECT]=X.PACKAGE_CUSTOM_FUNCTION_PROJECT;ve[X.DEPLOY_CUSTOM_FUNCTION_PROJECT]=X.DEPLOY_CUSTOM_FUNCTION_PROJECT;var tG={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"},rG={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},kA={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"},sG=GA.invert(kA),nG={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"},C={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"},VA={settings_path:FA.SETTINGS_PATH_KEY,hdb_root_key:C.ROOTPATH,hdb_root:C.ROOTPATH,rootpath:C.ROOTPATH,server_port_key:C.OPERATIONSAPI_NETWORK_PORT,server_port:C.OPERATIONSAPI_NETWORK_PORT,cert_key:C.TLS_CERTIFICATE,certificate:C.TLS_CERTIFICATE,private_key_key:C.TLS_PRIVATEKEY,private_key:C.TLS_PRIVATEKEY,http_secure_enabled_key:C.OPERATIONSAPI_NETWORK_HTTPS,https_on:C.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:C.OPERATIONSAPI_NETWORK_CORS,cors_on:C.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:C.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:C.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:C.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:C.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:C.LOGGING_LEVEL,log_level:C.LOGGING_LEVEL,log_path_key:C.LOGGING_ROOT,log_path:C.LOGGING_ROOT,clustering_node_name_key:C.CLUSTERING_NODENAME,node_name:C.CLUSTERING_NODENAME,clustering_enabled_key:C.CLUSTERING_ENABLED,clustering:C.CLUSTERING_ENABLED,max_http_threads:C.THREADS,max_hdb_processes:C.THREADS,server_timeout_key:C.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:C.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:C.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:C.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:C.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:C.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:C.LOGGING_AUDITLOG,disable_transaction_log:C.LOGGING_AUDITLOG,operation_token_timeout_key:C.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:C.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:C.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:C.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:C.HTTP_PORT,custom_functions_port:C.HTTP_PORT,custom_functions_directory_key:C.COMPONENTSROOT,custom_functions_directory:C.COMPONENTSROOT,max_custom_function_processes:C.THREADS,log_to_file:C.LOGGING_FILE,log_to_stdstreams:C.LOGGING_STDSTREAMS,local_studio_on:C.LOCALSTUDIO_ENABLED,clustering_port:C.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:C.CLUSTERING_USER,clustering_enabled:C.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:C.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:C.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:C.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:C.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:C.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:C.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:C.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:C.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:C.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxmsgs:C.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:C.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:C.CLUSTERING_NODENAME,clustering_tls_certificate:C.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:C.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:C.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:C.CLUSTERING_TLS_INSECURE,clustering_tls_verify:C.CLUSTERING_TLS_VERIFY,clustering_loglevel:C.CLUSTERING_LOGLEVEL,clustering_republishmessages:C.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:C.CLUSTERING_DATABASELEVEL,customfunctions_network_port:C.HTTP_PORT,customfunctions_tls_certificate:C.TLS_CERTIFICATE,customfunctions_network_cors:C.HTTP_CORS,customfunctions_network_corsaccesslist:C.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:C.HTTP_HEADERSTIMEOUT,customfunctions_network_https:C.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:C.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:C.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:C.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:C.HTTP_TIMEOUT,http_threads:C.THREADS,threads:C.THREADS,maxheapmemory:C.MAXHEAPMEMORY,http_session_affinity:C.HTTP_SESSIONAFFINITY,http_compressionthreshold:C.HTTP_COMPRESSIONTHRESHOLD,http_cors:C.HTTP_CORS,http_corsaccesslist:C.HTTP_CORSACCESSLIST,http_headerstimeout:C.HTTP_HEADERSTIMEOUT,http_keepalivetimeout:C.HTTP_KEEPALIVETIMEOUT,http_timeout:C.HTTP_TIMEOUT,http_port:C.HTTP_PORT,http_secureport:C.HTTP_SECUREPORT,customfunctions_processes:C.THREADS,customfunctions_root:C.COMPONENTSROOT,localstudio_enabled:C.LOCALSTUDIO_ENABLED,logging_file:C.LOGGING_FILE,logging_level:C.LOGGING_LEVEL,logging_root:C.LOGGING_ROOT,logging_rotation_enabled:C.LOGGING_ROTATION_ENABLED,logging_rotation_compress:C.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:C.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:C.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:C.LOGGING_ROTATION_PATH,logging_stdstreams:C.LOGGING_STDSTREAMS,logging_auditlog:C.LOGGING_AUDITLOG,logging_auditretention:C.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:C.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:C.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:C.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:C.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_network_cors:C.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:C.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:C.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:C.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:C.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:C.OPERATIONSAPI_NETWORK_PORT,operationsapi_network_domainsocket:C.OPERATIONSAPI_NETWORK_DOMAINSOCKET,operationsapi_network_secureport:C.OPERATIONSAPI_NETWORK_SECUREPORT,operationsapi_tls_certificate:C.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_tls_privatekey:C.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:C.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY,operationsapi_network_timeout:C.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_root:C.ROOTPATH,databases:C.DATABASES,storage_path:C.STORAGE_PATH,ignorescripts:C.IGNORE_SCRIPTS,mqtt_network_port:C.MQTT_NETWORK_PORT,mqtt_websocket:C.MQTT_WEBSOCKET,mqtt_network_secureport:C.MQTT_NETWORK_SECUREPORT,mqtt_network_mtls:C.MQTT_NETWORK_MTLS,mqtt_network_mtls_certificateAuthority:C.MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY,mqtt_network_mtls_user:C.MQTT_NETWORK_MTLS_USER,mqtt_requireauthentication:C.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:C.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:C.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:C.AUTHENTICATION_CACHETTL,authentication_enablesessions:C.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:C.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:C.AUTHENTICATION_REFRESHTOKENTIMEOUT,componentsroot:C.COMPONENTSROOT,tls_certificate:C.TLS_CERTIFICATE,tls_privatekey:C.TLS_PRIVATEKEY,tls_certificateauthority:C.TLS_CERTIFICATEAUTHORITY,tls_ciphers:C.TLS_CIPHERS};for(let e in C){let t=C[e];VA[t.toLowerCase()]=t}var iG={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},oG={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"},aG={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"},cG={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},uG={VERSION_DEFAULT:"2.2.0"},lG={DEVELOPMENT:8192,DEFAULT:512},_G={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"},dG={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"},fG={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},$A={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},EG=Symbol("metadata"),hG="__clustering__",mG=Object.values($A),pG=15984864e5,YA={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},SG=GA.invert(YA),TG={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"},gG=111,RG=`\r
|
|
2
|
+
`,AG={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},OG=["*","%"],bG="unauthorized_access",NG="func_val",yG={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},IG={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},wG={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"},CG={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},DG={HTTP:"http"},LG={STOPPED:"stopped",ONLINE:"online"},UG="3.x.x",MG={SUCCESS:"success",FAILURE:"failure"},PG={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};KA.exports={LOCAL_HARPERDB_OPERATIONS:ve,HDB_SUPPORT_ADDRESS:BA,HDB_SUPPORT_URL:xA,HDB_PRICING_URL:sF,SUPPORT_HELP_MSG:nF,LICENSE_HELP_MSG:qA,HDB_PROC_NAME:PA,HDB_PROC_DESCRIPTOR:uh,CLUSTERING_LEAF_PROC_DESCRIPTOR:Gl,CLUSTERING_HUB_PROC_DESCRIPTOR:Fl,SYSTEM_SCHEMA_NAME:OF,HASH_FOLDER_NAME:bF,HDB_HOME_DIR_NAME:NF,UPDATE_FILE_NAME:CF,LICENSE_KEY_DIR_NAME:IF,BOOT_PROPS_FILE_NAME:wF,JOB_TYPE_ENUM:oG,JOB_STATUS_ENUM:XF,SYSTEM_TABLE_NAMES:YF,SYSTEM_TABLE_HASH_ATTRIBUTES:KF,OPERATIONS_ENUM:X,VALID_S3_FILE_TYPES:jF,S3_BUCKET_AUTH_KEYS:ZF,VALID_SQL_OPS_ENUM:eG,GEO_CONVERSION_ENUM:rG,HDB_SETTINGS_NAMES:kA,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:sG,SERVICE_ACTIONS_ENUM:tG,CLUSTER_MESSAGE_TYPE_ENUM:aG,CLUSTER_CONNECTION_DIRECTION_ENUM:cG,CLUSTER_EVENTS_DEFS_ENUM:_G,PERIOD_REGEX:_F,DOUBLE_PERIOD_REGEX:dF,UNICODE_PERIOD:fF,FORWARD_SLASH_REGEX:EF,UNICODE_FORWARD_SLASH:hF,ESCAPED_FORWARD_SLASH_REGEX:mF,ESCAPED_PERIOD_REGEX:pF,ESCAPED_DOUBLE_PERIOD_REGEX:SF,REG_KEY_FILE_NAME:zF,RESTART_TIMEOUT_MS:UF,HDB_FILE_PERMISSIONS:MF,DATABASES_DIR_NAME:BF,LEGACY_DATABASES_DIR_NAME:HF,TRANSACTIONS_DIR_NAME:xF,LIMIT_COUNT_NAME:qF,ID_ATTRIBUTE_STRING:FF,INSERT_MODULE_ENUM:VF,UPGRADE_JSON_FIELD_NAMES_ENUM:$F,RESTART_CODE:DF,RESTART_CODE_NUM:LF,CLUSTER_OPERATIONS:ec,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:QF,HDB_INTERNAL_SC_CHANNEL_PREFIX:yr,INTERNAL_SC_CHANNELS:WF,CLUSTERING_MESSAGE_TYPES:TG,HDB_FILE_SUFFIX:yF,BLOB_FOLDER_NAME:PF,HDB_TRASH_DIR:vF,ORIGINATOR_SET_VALUE:gG,LICENSE_VALUES:uG,RAM_ALLOCATION_ENUM:lG,TIME_STAMP_NAMES_ENUM:$A,TIME_STAMP_NAMES:mG,PERMS_UPDATE_RELEASE_TIMESTAMP:pG,SEARCH_NOT_FOUND_MESSAGE:iF,SEARCH_ATTRIBUTE_NOT_FOUND:oF,LICENSE_ROLE_DENIED_RESPONSE:aF,LICENSE_MAX_CONNS_REACHED:cF,BASIC_LICENSE_MAX_NON_CU_ROLES:HA,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:rF,VALUE_SEARCH_COMPARATORS:YA,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:SG,LICENSE_FILE_NAME:JF,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:dG,NEW_LINE:RG,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:lF,MOMENT_DAYS_TAG:TF,API_TURNOVER_SEC:gF,LOOPBACK:uF,CODE_EXTENSION:ql,WILDCARD_SEARCH_VALUE:RF,NODE_ERROR_CODES:fG,JAVASCRIPT_EXTENSION:MA,PERMS_CRUD_ENUM:AG,UNAUTHORIZED_PERMISSION_NAME:bG,SEARCH_WILDCARDS:OG,FUNC_VAL:NG,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:yG,JWT_ENUM:IG,CLUSTERING_FLAG:hG,ITC_EVENT_TYPES:wG,CUSTOM_FUNCTION_PROC_NAME:vA,CUSTOM_FUNCTION_PROC_DESCRIPTOR:xl,SERVICES:CG,THREAD_TYPES:DG,MEM_SETTING_KEY:AF,HDB_RESTART_SCRIPT:Gq,PROCESS_DESCRIPTORS:Wq,SERVICE_SERVERS:jq,SERVICE_SERVERS_CWD:ch,PROCESS_DESCRIPTORS_VALIDATE:Jq,LAUNCH_SERVICE_SCRIPTS:Zq,LOG_LEVELS:zq,PROCESS_NAME_ENV_PROP:GF,LOG_NAMES:Qq,PM2_PROCESS_STATUSES:LG,CONFIG_PARAM_MAP:VA,CONFIG_PARAMS:C,HDB_CONFIG_FILE:xq,HDB_DEFAULT_CONFIG_FILE:qq,ROLE_TYPES_ENUM:eF,BOOT_PROP_PARAMS:FA,INSTALL_PROMPTS:kF,HDB_ROOT_DIR_NAME:Fq,CLUSTERING_PROCESSES:Xq,FOREGROUND_PID_FILE:$q,PACKAGE_ROOT:Qn,PRE_4_0_0_VERSION:UG,DATABASES_PARAM_CONFIG:iG,METADATA_PROPERTY:EG,AUTH_AUDIT_STATUS:MG,AUTH_AUDIT_TYPES:PG,HDB_PID_FILE:Yq,DEFAULT_DATABASE_NAME:Kq,LEGACY_CONFIG_PARAMS:nG};UA()});var lh=T((Joe,zA)=>{"use strict";var WA=require("minimist");zA.exports=vG;function vG(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=QA(process.env),s=QA(WA(process.argv))):(r=process.env,s=WA(process.argv));let n={};for(let i=0,o=e.length;i<o;i++){let c=e[i];s[c]!==void 0?n[c]=s[c].toString().trim():r[c]!==void 0&&(n[c]=r[c].toString().trim())}return n}a(vG,"assignCMDENVVariables");function QA(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(QA,"objKeysToLowerCase")});var G=T((joe,ph)=>{"use strict";var Di=require("fs-extra"),{workerData:BG,threadId:HG}=require("worker_threads"),mn=require("path"),jA=require("yaml"),ZA=require("properties-reader"),Nt=D(),JA=lh(),xG=require("os"),{PACKAGE_ROOT:dh}=D(),{_assignPackageExport:qG}=require("../index"),rc={};for(let e in console)rc[e]||(rc[e]=console[e]);var tr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},eO={STDOUT:"stdOut",STDERR:"stdErr"},FG=mn.join(dh,"logs"),GG=mn.join(dh,"config/yaml/",Nt.HDB_DEFAULT_CONFIG_FILE),kG=1e4,hn,Vs,er,kl,Vl,sc,Bo,tc;tc===void 0&&tO();ph.exports={notify:nO,fatal:iO,error:nc,warn:mh,info:$l,debug:hh,trace:Eh,setLogLevel:zG,log_level:er,loggerWithTag:VG,suppressLogging:$G,initLogSettings:tO,setupConsoleLogging:rO,logCustomLevel:WG,closeLogFile:fh,getLogFilePath:()=>sc,OUTPUTS:eO,AuthAuditLog:jG};qG("logger",ph.exports);function tO(e=!1){try{if(tc===void 0||e){fh();let t=QG(),r=JA(["ROOTPATH"]);try{tc=ZA(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!Di.pathExistsSync(mn.join(r.ROOTPATH,Nt.HDB_CONFIG_FILE)))throw s}({level:er,config_log_path:Vl,to_file:hn,to_stream:Vs}=JG(r.ROOTPATH?mn.join(r.ROOTPATH,Nt.HDB_CONFIG_FILE):tc.get("settings_path"))),kl=Nt.LOG_NAMES.HDB,sc=mn.join(Vl,kl)}}catch(t){if(tc=void 0,t.code===Nt.NODE_ERROR_CODES.ENOENT){let r=JA(Object.keys(Nt.CONFIG_PARAM_MAP),!0);for(let o in r){let c=Nt.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let u=r[o];if(c===Nt.CONFIG_PARAMS.LOGGING_LEVEL){er=u;continue}if(c===Nt.CONFIG_PARAMS.LOGGING_STDSTREAMS){Vs=u;continue}c===Nt.CONFIG_PARAMS.LOGGING_FILE&&(hn=c)}let{default_level:s,default_to_file:n,default_to_stream:i}=XG();hn=hn===void 0?n:hn,hn=XA(hn),Vs=Vs===void 0?i:Vs,Vs=XA(Vs),er=er===void 0?s:er,Vl=FG,kl=Nt.LOG_NAMES.INSTALL,sc=mn.join(Vl,kl);return}throw nc("Error initializing log settings"),nc(t),t}process.env.DEV_MODE&&(Vs=!0),rO()}a(tO,"initLogSettings");var _h=!0;function rO(){vo("error",nc),vo("warn",mh),vo("log",$l),vo("info",$l),vo("debug",hh),vo("trace",Eh)}a(rO,"setupConsoleLogging");function vo(e,t){console[e]=function(...r){if(_h&&t(...r),!/PM2 log:|App \[/.test(r[0]))return rc[e](...r)}}a(vo,"logConsole");function VG(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(nO),fatal:r(iO),error:r(nc),warn:r(mh),info:r($l),debug:r(hh),trace:r(Eh)};function r(s){return function(...n){return s(t,...n)}}}a(VG,"loggerWithTag");function $G(e){try{_h=!1,e()}finally{_h=!0}}a($G,"suppressLogging");var YG=BG?.name?.replace(/ /g,"-")||"main";function pn(e,t){let r=new Date(Date.now()).toISOString(),s="",n=t.length,i=n-1,o=[e],c=0,u;for(typeof t[0]=="object"&&(t[0]?.tagName?(o.push(t[0]?.tagName),c++):t[0]?.serviceName&&(u=t[0]?.serviceName,c++)),o.unshift(u||YG+"/"+HG);c<n;c++){let _=t[c];_ instanceof Error&&_.stack?s+=_.stack:typeof _=="object"?s+=JSON.stringify(_):s+=_,c<i&&(s+=" ")}return`${r} [${o.join("] [")}]: ${s}
|
|
3
|
+
`}a(pn,"createLogRecord");function ic(e){hn&&sO(e),Vs&&process.stdout.write(e)}a(ic,"logStdOut");function Yl(e){hn&&sO(e),Vs&&process.stderr.write(e)}a(Yl,"logStdErr");function sO(e){KG(),Bo?Di.appendFileSync(Bo,e):rc.log(e)}a(sO,"logToFile");function fh(){try{Di.closeSync(Bo)}catch{}Bo=null}a(fh,"closeLogFile");function KG(){if(!Bo){try{if(!sc)debugger;Bo=Di.openSync(sc,"a")}catch(e){rc.error(e)}setTimeout(()=>{fh()},kG).unref()}}a(KG,"openLogFile");function $l(...e){tr[er]<=tr.info&&ic(pn("info",e))}a($l,"info");function Eh(...e){tr[er]<=tr.trace&&ic(pn("trace",e))}a(Eh,"trace");function nc(...e){tr[er]<=tr.error&&Yl(pn("error",e))}a(nc,"error");function hh(...e){tr[er]<=tr.debug&&ic(pn("debug",e))}a(hh,"debug");function nO(...e){tr[er]<=tr.notify&&ic(pn("notify",e))}a(nO,"notify");function iO(...e){tr[er]<=tr.fatal&&Yl(pn("fatal",e))}a(iO,"fatal");function mh(...e){tr[er]<=tr.warn&&Yl(pn("warn",e))}a(mh,"warn");function WG(e,t,...r){t===eO.STDERR?Yl(pn(e,r)):ic(pn(e,r))}a(WG,"logCustomLevel");function QG(){let e;try{e=xG.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=mn.join(e,Nt.HDB_HOME_DIR_NAME,Nt.BOOT_PROPS_FILE_NAME);return Di.existsSync(t)||(t=mn.join(dh,"utility/hdb_boot_properties.file")),t}a(QG,"getPropsFilePath");function zG(e){er=e}a(zG,"setLogLevel");function XA(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(XA,"autoCastBoolean");function JG(e){try{if(e.includes("config/settings.js")){let o=ZA(e);return{level:o.get(Nt.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:mn.dirname(o.get(Nt.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(Nt.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(Nt.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=jA.parseDocument(Di.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),s=t.getIn(["logging","root"]),n=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]);return{level:r,config_log_path:s,to_file:n,to_stream:i}}catch(t){if(t.code===Nt.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(JG,"getLogConfig");function XG(){try{let e=jA.parseDocument(Di.readFileSync(GG,"utf8")),t=e.getIn(["logging","level"]),r=e.getIn(["logging","file"]),s=e.getIn(["logging","stdStreams"]);return{default_level:t,default_to_file:r,default_to_stream:s}}catch(e){console.error("Error accessing default config file for logging"),console.error(e)}}a(XG,"getDefaultConfig");function jG(e,t,r,s,n,i){this.username=e,this.status=t,this.type=r,this.originating_ip=s,this.request_method=n,this.path=i}a(jG,"AuthAuditLog")});var aO=T((eae,oO)=>{"use strict";var ZG=require("util"),ek=require("path"),tk=require("child_process"),rk=ZG.promisify(tk.execFile),sk=1e3*1e3*10;oO.exports={findPs:nk};async function nk(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await rk("ps",["wwxo",`pid,${r}`],{maxBuffer:sk});for(let n of s.trim().split(`
|
|
4
|
+
`).slice(1)){n=n.trim();let[i]=n.split(" ",1),o=n.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=o}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,s])=>({pid:Number.parseInt(r,10),name:ek.basename(s.comm),cmd:s.args,ppid:Number.parseInt(s.ppid,10),uid:Number.parseInt(s.uid,10),cpu:Number.parseFloat(s["%cpu"]),memory:Number.parseFloat(s["%mem"])}))}a(nk,"findPs")});var mt=T((rae,uO)=>{"use strict";var ik="__dbis__",ok="__txns__",ak="__environment_name__",ck="__dbi_defintion__",uk={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"},lk=["__createdtime__","__updatedtime__"],_k="\uFFFF",cO={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},dk=Object.values(cO);uO.exports={AUDIT_STORE_NAME:ok,INTERNAL_DBIS_NAME:ik,DBI_DEFINITION_NAME:ck,SEARCH_TYPES:uk,TIMESTAMP_NAMES:lk,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:ak,TRANSACTIONS_DBI_NAMES_ENUM:cO,TRANSACTIONS_DBIS:dk,OVERFLOW_MARKER:_k}});var Ir=T((sae,SO)=>{"use strict";var lO=D(),_O=mt(),dO={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},fO=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),EO={500:fO("There was an error processing your request."),400:"Invalid request"},fk=EO[dO.INTERNAL_SERVER_ERROR],Ek={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.`},hk={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},mk={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"},pk={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 ${_O.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${_O.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"},Sk={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${lO.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 ${lO.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"},hO={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"},Tk={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."},gk={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`},Rk={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"},Ak={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},Ok={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`},mO={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.`},pO={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}`},bk={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."},Nk={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},yk={...hO,...mk,...Ek,...Tk,...gk,...Rk,...Ak,...Ok,...Sk,...mO,...pO,...bk,...Nk,...hk};SO.exports={CHECK_LOGS_WRAPPER:fO,HDB_ERROR_MSGS:yk,DEFAULT_ERROR_MSGS:EO,DEFAULT_ERROR_RESP:fk,HTTP_STATUS_CODES:dO,LMDB_ERRORS_ENUM:pk,AUTHENTICATION_ERROR_MSGS:hO,VALIDATION_ERROR_MSGS:mO,ITC_ERRORS:pO}});var Z=T((iae,RO)=>{"use strict";var Ho=Ir(),Ik=G(),wk=D(),Kl=class extends Error{static{a(this,"HdbError")}constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,TO),this.statusCode=s||Ho.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Ho.DEFAULT_ERROR_MSGS[s]?Ho.DEFAULT_ERROR_MSGS[s]:Ho.DEFAULT_ERROR_MSGS[Ho.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,n&&(this.logLevel=n),typeof this.message!="string"&&(this.stack=t.stack),i&&Ik[n](i)}},Sh=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}},Th=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function TO(e,t,r,s=wk.LOG_LEVELS.ERROR,n=null,i=!1){if(gO(e))return e;let o=new Kl(e,t,r,s,n);return i&&delete o.stack,o}a(TO,"handleHDBError");function gO(e){return e.__proto__.constructor.name===Kl.name}a(gO,"isHDBError");RO.exports={isHDBError:gO,handleHDBError:TO,ClientError:Sh,ServerError:Th,hdb_errors:Ho}});var ze=T((aae,wO)=>{"use strict";var lc=D(),Ck=z(),rr=j(),_c=require("path"),Dk=require("minimist"),AO=require("fs-extra"),OO=require("lodash");rr.initSync();var{CONFIG_PARAMS:zn,DATABASES_PARAM_CONFIG:oc,SYSTEM_SCHEMA_NAME:Wl}=lc,ac,cc,uc;function bO(){if(ac!==void 0)return ac;if(rr.getHdbBasePath()!==void 0)return ac=rr.get(zn.STORAGE_PATH)||_c.join(rr.getHdbBasePath(),lc.DATABASES_DIR_NAME),ac}a(bO,"getBaseSchemaPath");function NO(){if(cc!==void 0)return cc;if(rr.getHdbBasePath()!==void 0)return cc=IO(Wl),cc}a(NO,"getSystemSchemaPath");function yO(){if(uc!==void 0)return uc;if(rr.getHdbBasePath()!==void 0)return uc=rr.get(lc.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||_c.join(rr.getHdbBasePath(),lc.TRANSACTIONS_DIR_NAME),uc}a(yO,"getTransactionAuditStoreBasePath");function Lk(e,t){let r=rr.get(zn.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||_c.join(yO(),e.toString())}a(Lk,"getTransactionAuditStorePath");function IO(e,t){e=e.toString(),t=t&&t.toString();let r=rr.get(lc.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||_c.join(bO(),e)}a(IO,"getSchemaPath");function Uk(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,Dk(process.argv));let s=r[zn.DATABASES.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!Ck.isObject(s))throw o;i=s}for(let o of i){let c=o[Wl];if(!c)continue;let u=rr.get(zn.DATABASES);u=u??{};let _=c?.tables?.[t]?.[oc.PATH];if(_)return OO.set(u,[Wl,oc.TABLES,t,oc.PATH],_),rr.setProperty(zn.DATABASES,u),_;let l=c?.[oc.PATH];if(l)return OO.set(u,[Wl,oc.PATH],l),rr.setProperty(zn.DATABASES,u),l}}let n=r[zn.STORAGE_PATH.toUpperCase()];if(n){if(!AO.pathExistsSync(n))throw new Error(n+" does not exist");let i=_c.join(n,e);return AO.mkdirsSync(i),rr.setProperty(zn.STORAGE_PATH,n),i}return NO()}a(Uk,"initSystemSchemaPaths");function Mk(){ac=void 0,cc=void 0,uc=void 0}a(Mk,"resetPaths");wO.exports={getBaseSchemaPath:bO,getSystemSchemaPath:NO,getTransactionAuditStorePath:Lk,getTransactionAuditStoreBasePath:yO,getSchemaPath:IO,initSystemSchemaPaths:Uk,resetPaths:Mk}});var wr=T((_ae,MO)=>{"use strict";var Pk=Ir().LMDB_ERRORS_ENUM,uae=require("lmdb"),vk=mt(),lae=require("buffer").Buffer,{OVERFLOW_MARKER:CO,MAX_SEARCH_KEY_LENGTH:Ql}=vk,DO=["number","string","symbol","boolean","bigint"];function Bk(e){if(e=e?.primaryStore||e,!e)throw new Error(Pk.ENV_REQUIRED)}a(Bk,"validateEnv");function Hk(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(Hk,"stringifyData");function xk(e){return e instanceof Date?e.valueOf():e}a(xk,"convertKeyValueToWrite");function qk(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(DO.includes(typeof e))return e.length>Ql?[e.slice(0,Ql)+CO]:[e];let r;if(Array.isArray(e)){r=[];for(let s=0,n=e.length;s<n;s++){let i=e[s];if(DO.includes(typeof i))i.length>Ql?r.push(i.slice(0,Ql)+CO):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(qk,"getIndexedValues");var zl=0,LO=0;function UO(){LO=Date.now()-performance.now()}a(UO,"adjustStartTime");UO();var Fk=6e4;setInterval(UO,Fk).unref();function Gk(){let e=performance.now()+LO;return e>zl?(zl=e,e):(zl+=488e-6,zl)}a(Gk,"getNextMonotonicTime");MO.exports={validateEnv:Bk,stringifyData:Hk,convertKeyValueToWrite:xk,getNextMonotonicTime:Gk,getIndexedValues:qk}});var PO,bs,gh,dc=Ae(()=>{PO=require("events"),bs=class extends PO.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new gh;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)}},gh=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 Li={};$e(Li,{server:()=>_t});var vO,_t,sr=Ae(()=>{vO=require("../index"),_t={};(0,vO._assignPackageExport)("server",_t)});var Ah={};$e(Ah,{loadGQLSchema:()=>$k,start:()=>Rh,startOnMainThread:()=>Vk});function Rh({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,s,n,i){let{parse:o,Source:c,Kind:u,NamedTypeNode:_,StringValueNode:l}=await import("graphql"),d=o(new c(r.toString(),n)),f=new Map,E=[],h;for(let S of d.definitions)switch(S.kind){case u.OBJECT_TYPE_DEFINITION:let K=function(q){if(q.kind==="NonNullType"){let Y=K(q.type);return Y.nullable=!1,Y}if(q.kind==="ListType")return{type:"array",elements:K(q.type)};let Q={type:q.name?.value};return Object.defineProperty(Q,"location",{value:q.loc.startToken}),Q};a(K,"getProperty");let R=S.name.value,I=[],w={table:null,database:null,properties:I};f.set(R,w);for(let q of S.directives){if(q.name.value==="table"){for(let P of q.arguments)w[P.name.value]=P.value.value;w.schema&&(w.database=w.schema),w.table||(w.table=R),w.audit&&(w.audit=w.audit!=="false"),w.attributes=w.properties,E.push(w)}if(q.name.value==="sealed"&&(w.sealed=!0),q.name.value==="export"){w.export=!0;for(let P of q.arguments)P.name.value==="name"&&(w.export={name:P.value.value})}}let B=!1;for(let q of S.fields){let P=K(q.type);P.name=q.name.value,I.push(P);for(let Q of q.directives)if(Q.name.value==="primaryKey")B?console.warn("Can not define two attributes as a primary key"):(P.isPrimaryKey=!0,B=!0);else if(Q.name.value==="indexed")P.indexed=!0;else if(Q.name.value==="relationship"){let Y={};for(let J of Q.arguments)Y[J.name.value]=J.value.value;P.relationship=Y}else if(Q.name.value==="createdTime")P.assignCreatedTime=!0;else if(Q.name.value==="updatedTime")P.assignUpdatedTime=!0;else if(Q.name.value==="expiresAt")P.expiresAt=!0;else if(Q.name.value==="allow"){let Y=P.authorizedRoles=[];for(let J of Q.arguments)J.name.value==="role"&&Y.push(J.value.value)}}w.type=R,R==="Query"&&(h=w)}function p(S){let R=f.get(S.type);R?(Object.defineProperty(S,"properties",{value:R.properties}),Object.defineProperty(S,"definition",{value:R})):S.type==="array"?p(S.elements):kk.includes(S.type)||(0,BO.getWorkerIndex)()===0&&console.error(`The type ${S.type} is unknown at line ${S.location.line}, column ${S.location.column}, in ${n}`)}a(p,"connectPropertyType");for(let S of f.values())for(let R of S.properties)p(R);for(let S of E)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,Jl.dirname)(s),S.tableClass):i.set((0,Jl.dirname)(s)+"/"+(S.export.name||S.type),S.tableClass));if(h)for(let S of h.properties){let R=f.get(S.type);if(!R)throw new Error(`${S.type} was not found as a Query export`);i.set((0,Jl.dirname)(s)+"/"+S.name,R.tableClass)}}}var Jl,BO,kk,Vk,$k,HO=Ae(()=>{Jl=require("path");ge();BO=v(Ye()),kk=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];a(Rh,"start");Vk=Rh,$k=Rh({ensureTable:dt}).handleFile});async function Xl(e){return Yk?(fc||(fc=Kk(Qk)),(await(await fc).import(e)).namespace):import(e)}async function Kk(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),fc=new Compartment({console,Math,Date,fetch:Wk,...e()},{},{name:"h-dapp",resolveHook(r,s){return r==="harperdb"?"harperdb":(r=new URL(r,s).toString(),(0,qO.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(n){Object.assign(n,{Resource:qt,tables:Cr,databases:st})}};let s=await(0,xO.readFile)(new URL(r),{encoding:"utf-8"});return new t(s,r)}}),fc}function Wk(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 Qk(){return{Resource:qt,tables:Cr}}var xO,qO,Yk,fc,Oh=Ae(()=>{Ns();ge();xO=require("fs/promises"),qO=require("path"),Yk=!1;a(Xl,"secureImport");a(Kk,"getCompartment");a(Wk,"secureOnlyFetch");a(Qk,"getGlobalVars")});var Nh={};$e(Nh,{handleFile:()=>zk});async function zk(e,t,r,s){let n=new Map,i=(0,FO.pathToFileURL)(r).toString(),o=await Xl(i);u(o.default)&&s.set((0,bh.dirname)(t),o.default),c(o,(0,bh.dirname)(t));function c(_,l){for(let d in _){let f=_[d];u(f)?s.set(l+"/"+d,f):typeof f=="object"&&c(f,l+"/"+d)}}a(c,"recurseForResources");function u(_){return typeof _=="function"&&(_.get||_.put||_.post||_.delete)}return a(u,"isResource"),n}var FO,bh,GO=Ae(()=>{FO=require("url");Oh();bh=require("path");a(zk,"handleFile")});var Ih={};$e(Ih,{start:()=>Jk});function Jk({resources:e}){e.set("login",yh),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var yh,kO=Ae(()=>{Ns();a(Jk,"start");yh=class extends qt{static{a(this,"Login")}static async get(t,r,s){}static async post(t,r,s){let{username:n,password:i,redirect:o}=r;return{data:await s.login(n,i)}}}});var zO={};$e(zO,{parse:()=>Ch,streamAsJSON:()=>Ec,stringify:()=>Ui});function Ec(e){return new wh({value:e})}function VO(e){return console.error(e),JSON.stringify(e.toString())}function $O(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function Ui(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===WO)return QO(e);if(t.resolution)return t.resolution.then(()=>Ui(e));throw t}}function QO(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 s=0;s<e.length;s++)s>0&&(r+=","),r+=QO(e[s]);return r+"]"}else{r="{";let s=!0;for(let n in e)s?s=!1:r+=",",r+=JSON.stringify(n)+":"+Ui(e[n]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function Ch(e){return Zk.test(e)?Xk.parse(e):JSON.parse(e)}var YO,KO,Xk,jk,WO,wh,Zk,Dh=Ae(()=>{YO=require("stream"),KO=v(require("json-bigint-fixes")),Xk=(0,KO.default)({useNativeBigInt:!0}),jk=1e4,WO={};BigInt.prototype.toJSON=function(){throw WO};a(Ec,"streamAsJSON");wh=class extends YO.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],s=t[Symbol.iterator];if((s||r)&&!t.then){yield"[";let n=!0;if((r||s)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();this.activeIterators.push(i);let o;for(;;)if(o=i.next(),o.then&&(yield o.then(c=>(o=c,""))),o.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else n?n=!1:yield",",yield*this.serialize(o.value)}for(let i of t)n?n=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(n=>this.serialize(n),VO)}catch(n){yield VO(n)}else yield Ui(t)}else yield Ui(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);$O(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>jk?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 $O(this.readIterator(t.childIterator),s=>{if(s)return t.childIterator=null,this.readIterator(t)});do{let s=t.next();if(s.done)return!0;if(r=s.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(n=>{if(n&&typeof n.return=="function")return t.childIterator=n,this.readIterator(t);if(this.push(n+""))return this.readIterator(t)});if(typeof r.return=="function")return t.childIterator=r,this.readIterator(t)}}while(this.push(r))}catch(r){return console.error(r),this.push(r.toString()),this.push(null),!0}}_destroy(t,r){for(let s of this.activeIterators)t?s.throw(t):s.return();r()}};a(VO,"handleError");a($O,"when");a(Ui,"stringify");a(QO,"jsStringify");Zk=/-?\d{16,}/;a(Ch,"parse")});var cb=T((Iae,ab)=>{"use strict";var Lh=require("recursive-iterator"),eV=require("alasql"),Uh=require("clone"),JO=z(),{handleHDBError:XO,hdb_errors:tV}=Z(),{HDB_ERROR_MSGS:jO,HTTP_STATUS_CODES:ZO}=tV,{getDatabases:rV}=(ge(),ee(xe)),sV=["DISTINCT_ARRAY"],eb=Symbol("validateTables"),Mh=Symbol("validateTable"),yae=Symbol("getAllColumns"),tb=Symbol("validateAllColumns"),jl=Symbol("findColumn"),rb=Symbol("validateOrderBy"),hc=Symbol("validateSegment"),Ph=Symbol("validateColumn"),sb=Symbol("setColumnsForTable"),nb=Symbol("checkColumnsForAsterisk"),ib=Symbol("validateGroupBy"),ob=Symbol("hasColumns"),vh=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[eb](),this[nb](),this[tb]()}[eb](){if(this[ob]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Mh](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Mh](t.table)})}}[ob](){let t=!1,r=new Lh(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[Mh](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=rV();if(!r[t.databaseid])throw XO(new Error,jO.SCHEMA_NOT_FOUND(t.databaseid),ZO.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw XO(new Error,jO.TABLE_NOT_FOUND(t.databaseid,t.tableid),ZO.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(n=>{let i=Uh(n);i.table=Uh(t),this.attributes.push(i)})}[jl](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)}[nb](){let t=new Lh(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[sb](r.tableid)}[sb](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new eV.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[tb](){this[hc](this.statement.columns,!1),this[hc](this.statement.joins,!1),this[hc](this.statement.where,!1),this[ib](this.statement.group,!1),this[hc](this.statement.order,!0)}[hc](t,r){if(!t)return;let s=new Lh(t),n=[];for(let{node:i,path:o}of s)!JO.isEmpty(i)&&!JO.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[rb](i):n.push(this[Ph](i)));return n}[ib](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&sV.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=Uh(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[jl](s)[0];n&&r.push(n)}}}),this.statement.group.forEach(s=>{let n=null;if(!s.columnid)r.forEach((i,o)=>{if(i.toString()===s.toString()){n=i,r.splice(o,1);return}});else{let i=this[jl](s);if(!i||i.length===0)throw`unknown column '${s.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${s.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){n=o,r.splice(c,1);return}})}if(!n)throw`group by column '${s.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[rb](t){let r=this.statement.columns.filter(s=>s.as===t.columnid);if(r.length>1)throw`ambiguous column reference ${(t.tableid?t.tableid+".":"")+t.columnid} in order by`;r.length===0&&this[Ph](t)}[Ph](t){let r=this[jl](t),s=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${s}`;if(r.length>1)throw`ambiguous column reference ${s}`;return r[0]}};ab.exports=vh});var lb=T((Cae,ub)=>{"use strict";var Bh=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")}};ub.exports=Bh});var db=T((Lae,_b)=>{"use strict";var Hh=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};_b.exports=Hh});var pb={};$e(pb,{HAS_EXPIRATION:()=>Vh,LAST_TIMESTAMP_PLACEHOLDER:()=>Sc,LOCAL_TIMESTAMP:()=>nV,METADATA:()=>mc,NO_TIMESTAMP:()=>xh,PENDING_LOCAL_TIME:()=>$h,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>kh,RecordEncoder:()=>Gh,TIMESTAMP_ASSIGN_LAST:()=>oV,TIMESTAMP_ASSIGN_NEW:()=>hb,TIMESTAMP_ASSIGN_PREVIOUS:()=>mb,TIMESTAMP_PLACEHOLDER:()=>Zl,TIMESTAMP_RECORD_PREVIOUS:()=>qh,getUpdateRecord:()=>Yh,handleLocalTimeForGets:()=>s_});function cV(){return pc[0]=pc[0]^64,iV.getFloat64(0)}function s_(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),u=c?.value,_=u?.[mc];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c&&(c.key=i),c};let r=e.get;e.get=function(i,o){let c=r.call(this,i,o);return c?.[mc]>=0?c.value:c};let s=e.getRange;e.getRange=function(i){let o=s.call(this,i);return i.valuesForKey?o.map(c=>c?.value):i.values===!1||i.onlyCount?o:o.map(c=>{let u=c.value,_=u[mc];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c})};let n=e.useReadTransaction();if(n.done(),!n.done.isTracked){let i=n.constructor,o=n.use,c=n.done;i.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,Mi.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let u=0;u<Mi.length;u++){let _=Mi[u].deref();(!_||_===this||_.isDone||_.isCommitted)&&Mi.splice(u--,1)}},i.prototype.done.isTracked=!0}return e}function Yh(e,t,r){return function(s,n,i,o,c=-1,u,_,l,d="put",f,E){if(f||u==null?xo=i?.localTime?qh|mb:xh:xo=u?i?.localTime?qh|16384:hb|16384:xh,l>0&&(c|=Vh),t_=c,Fh=l,i?.version===o&&u===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:xo>0},p;try{f&&(h.ifVersion=p=i?.version??null);let S=e.put(s,n,h);if(u){let R=_?.user?.username;if(E&&(e_=e.encoder.encode(E)),f&&i?.localTime){let I=i?.localTime,w=r.get(I);if(w){let B=Pt(w).previousLocalTime;return r.put(I,r_(o,t,s,B,R,d,e_),{ifVersion:p}),S}}r.put(Sc,r_(o,t,s,i?.localTime?1:0,R,d,e_),{append:d!=="invalidate",instructedWrite:!0,ifVersion:p})}return S}catch(S){throw S.message+=" id: "+s+" options: "+h,S}}}var fb,Eb,Zl,Sc,kh,nV,mc,pc,iV,xh,hb,oV,mb,qh,Vh,$h,aV,e_,xo,t_,Fh,Gh,Pae,Mi,Tc=Ae(()=>{fb=require("msgpackr");Pi();Eb=v(G()),Zl=new Uint8Array([1,1,1,1,4,64,0,0]),Sc=new Uint8Array([1,1,1,1,1,0,0,0]),kh=new Uint8Array([1,1,1,1,3,64,0,0]),nV=Symbol("local-timestamp"),mc=Symbol("metadata"),pc=new Uint8Array(8),iV=new DataView(pc.buffer,0,8),xh=0,hb=0,oV=1,mb=3,qh=4,Vh=16,$h=1,xo=0,t_=-1,Fh=0,Gh=class extends fb.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(s,n){if(xo||t_>=0){let i=0,o=xo;o&&(i+=8,xo=0);let c=t_,u=Fh;c>=0&&(i+=2,t_=-1,u&&(i+=8,Fh=0));let _=aV=r.call(this,s,n|2048|i);e_=_.subarray((_.start||0)+i,_.end);let l=_.start||0;return o&&(Zl[4]=o,Zl[5]=o>>8,_.set(Zl,l),l+=8),c>=0&&(_[l++]=c,_[l++]=0,u&&(_.dataView||(_.dataView=new DataView(_.buffer,_.byteOffset,_.byteLength))).setFloat64(l,u)),_}else return r.call(this,s,n)}}decode(t,r){let s=r?.start||0,n=r>-1?r:r?.end||t.length,i=t[s],o=0;try{if(i<32&&n>2){let c=s,u;if(i===2){if(t.copy)t.copy(pc,0,c),c+=8;else for(let d=0;d<8;d++)pc[d]=t[c++];u=cV(),i=t[c]}let _;i<32&&(o=i,c+=2,o&Vh&&(_=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8));let l=super.decode(t.subarray(c,n),n-c);return{localTime:u,value:l,[mc]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(cV,"getTimestamp");Pae=Map.prototype.get;a(s_,"handleLocalTimeForGets");Mi=[];setInterval(()=>{for(let e=0;e<Mi.length;e++){let t=Mi[e].deref();!t||t.isDone||t.isCommitted?Mi.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&Eb.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(Yh,"getUpdateRecord")});var n_=T((Bae,Sb)=>{"use strict";var Wh=j(),Qh=D(),{RecordEncoder:uV}=(Tc(),ee(pb));Wh.initSync();var lV=Wh.get(Qh.CONFIG_PARAMS.STORAGE_COMPRESSION),_V=Wh.get(Qh.CONFIG_PARAMS.STORAGE_CACHING)!==!1,dV=Qh.UPDATES_PROPERTY,Kh=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=lV&&r&&{startingOffset:32},this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=_V&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:uV},this.alwaysLazyProperty=s=>s===dV)}};Sb.exports=Kh});var o_=T((xae,gb)=>{"use strict";var qo=j(),gc=D();qo.initSync();var fV=qo.get(gc.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||qo.get(gc.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||qo.get(gc.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",Tb=qo.get(gc.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),EV=qo.get(gc.CONFIG_PARAMS.STORAGE_NOREADAHEAD),i_=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=fV,this.noFSAccess=!0,Tb!==void 0&&(this.overlappingSync=Tb),this.noReadAhead=EV}};gb.exports=i_;i_.MAX_DBS=1e4});var Ke=T((Fae,Db)=>{"use strict";var Jh=require("lmdb"),ys=require("fs-extra"),Dr=require("path"),a_=wr(),Ob=G(),nr=Ir().LMDB_ERRORS_ENUM,c_=db(),Xh=n_(),bb=o_(),Jn=mt(),Rb=D(),{table:hV,resetDatabases:mV}=(ge(),ee(xe)),Ab=j(),Is=Jn.INTERNAL_DBIS_NAME,Nb=Jn.DBI_DEFINITION_NAME,pV="data.mdb",SV="lock.mdb",Rc=".mdb",TV="-lock",zh=class{static{a(this,"TransactionCursor")}constructor(t,r,s=!1){this.dbi=Zr(t,r),this.key_type=this.dbi[Jn.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Jn.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new Jh.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function u_(e,t){if(e===void 0)throw new Error(nr.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(nr.ENV_NAME_REQUIRED)}a(u_,"pathEnvNameValidation");async function jh(e,t,r=!0){try{await ys.access(e)}catch(s){throw s.code==="ENOENT"?new Error(nr.INVALID_BASE_PATH):s}try{let s=Dr.join(e,t+Rc);return await ys.access(s,ys.constants.R_OK|ys.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await ys.access(Dr.join(e,t,pV),ys.constants.R_OK|ys.constants.F_OK),Dr.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(nr.INVALID_ENVIRONMENT)}else throw new Error(nr.INVALID_ENVIRONMENT);throw s}}a(jh,"validateEnvironmentPath");function l_(e,t){if(a_.validateEnv(e),t===void 0)throw new Error(nr.DBI_NAME_REQUIRED)}a(l_,"validateEnvDBIName");async function gV(e,t,r=!1,s=!1){u_(e,t);let n=Dr.basename(e);t=t.toString();let i=Ab.get(Rb.CONFIG_PARAMS.DATABASES);i||Ab.setProperty(Rb.CONFIG_PARAMS.DATABASES,i={}),i[n]||(i[n]={}),i[n].path=e;try{return await jh(e,t,s),yb(e,t,r)}catch(o){if(o.message===nr.INVALID_ENVIRONMENT){let c=Dr.join(e,t);await ys.mkdirp(s?c:e);let u=new bb(s?c:c+Rc,!1),_=Jh.open(u);_.dbis=Object.create(null);let l=new Xh(!1);_.openDB(Is,l),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=Zh(e,t,r);return _[Jn.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(gV,"createEnvironment");async function RV(e,t,r,s=!0){u_(e,t),t=t.toString();let n=Dr.join(e,t);return hV({table:t,database:Dr.parse(e).name,path:n,attributes:[{name:"id",isPrimaryKey:!0}]})}a(RV,"copyEnvironment");async function yb(e,t,r=!1){u_(e,t),t=t.toString();let s=Zh(e,t,r);if(global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null)),global.lmdb_map[s]!==void 0)return global.lmdb_map[s];let n=await jh(e,t),i=Dr.join(e,t+Rc),o=n!=i,c=new bb(n,o),u=Jh.open(c);u.dbis=Object.create(null);let _=wb(u);for(let l=0;l<_.length;l++)Zr(u,_[l]);return u[Jn.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=u,u}a(yb,"openEnvironment");async function AV(e,t,r=!1){u_(e,t),t=t.toString();let s=Dr.join(e,t+Rc),n=await jh(e,t);if(global.lmdb_map!==void 0){let i=Zh(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await Ib(o),delete global.lmdb_map[i]}}await ys.remove(n),await ys.remove(n===s?n+TV:Dr.join(Dr.dirname(n),SV))}a(AV,"deleteEnvironment");async function Ib(e){a_.validateEnv(e);let t=e[Jn.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(Ib,"closeEnvironment");function Zh(e,t,r=!1){let n=`${Dr.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(Zh,"getCachedEnvironmentName");function OV(e){a_.validateEnv(e);let t=Object.create(null),r=Zr(e,Is);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Is)try{t[s]=Object.assign(new c_,n)}catch{Ob.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(OV,"listDBIDefinitions");function wb(e){a_.validateEnv(e);let t=[],r=Zr(e,Is);for(let{key:s}of r.getRange({start:!1}))s!==Is&&t.push(s);return t}a(wb,"listDBIs");function bV(e,t){let s=Zr(e,Is).getEntry(t),n=new c_;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{Ob.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(bV,"getDBIDefinition");function Cb(e,t,r,s=!r){if(l_(e,t),t=t.toString(),t===Is)throw new Error(nr.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Zr(e,t)}catch(n){if(n.message===nr.DBI_DOES_NOT_EXIST){let i=new Xh(r,s===!0),o=e.openDB(t,i),c=new c_(r===!0,s);return o[Nb]=c,Zr(e,Is).putSync(t,c),e.dbis[t]=o,o}throw n}}a(Cb,"createDBI");function Zr(e,t){if(l_(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Is?r=bV(e,t):r=new c_,r===void 0)throw new Error(nr.DBI_DOES_NOT_EXIST);let s;try{let n=new Xh(r.dup_sort,r.useVersions);if(s=e.openDB(t,n),s.db===void 0)throw new Error("MDB_NOTFOUND")}catch(n){throw n.message.includes("MDB_NOTFOUND")===!0?new Error(nr.DBI_DOES_NOT_EXIST):n}return s[Nb]=r,e.dbis[t]=s,s}a(Zr,"openDBI");function NV(e,t){l_(e,t),t=t.toString();let r=Zr(e,t),s=r.getStats();return r[Jn.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(NV,"statDBI");async function yV(e,t){try{let r=Dr.join(e,t+Rc);return(await ys.stat(r)).size}catch{throw new Error(nr.INVALID_ENVIRONMENT)}}a(yV,"environmentDataSize");function IV(e,t){if(l_(e,t),t=t.toString(),t===Is)throw new Error(nr.CANNOT_DROP_INTERNAL_DBIS_NAME);Zr(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Zr(e,Is).removeSync(t)}a(IV,"dropDBI");function wV(e,t,r){let s;for(let n=0;n<r.length;n++){let i=r[n];if(!e.dbis[i])try{Zr(e,i)}catch(o){if(o.message===nr.DBI_DOES_NOT_EXIST)Cb(e,i,i!==t,i===t),s=!0;else throw o}}s&&mV()}a(wV,"initializeDBIs");Db.exports={openDBI:Zr,openEnvironment:yb,createEnvironment:gV,listDBIs:wb,listDBIDefinitions:OV,createDBI:Cb,dropDBI:IV,statDBI:NV,deleteEnvironment:AV,initializeDBIs:wV,TransactionCursor:zh,environmentDataSize:yV,copyEnvironment:RV,closeEnvironment:Ib}});var Ub=T((kae,Lb)=>{"use strict";var em=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};Lb.exports=em});var Pb=T(($ae,Mb)=>{"use strict";var tm=class{static{a(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],s=void 0,n=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s,this.original_records=n}};Mb.exports=tm});var Bb=T((Kae,vb)=>{"use strict";var rm=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};vb.exports=rm});var Fo=T((Xae,qb)=>{"use strict";var CV=Ke(),DV=Ub(),LV=Pb(),UV=Bb(),$s=wr(),Ac=Ir().LMDB_ERRORS_ENUM,MV=mt(),Sn=D(),PV=z(),vV=require("uuid"),Qae=require("lmdb"),{handleHDBError:BV,hdb_errors:HV}=Z(),{OVERFLOW_MARKER:zae,MAX_SEARCH_KEY_LENGTH:Jae}=MV,Hb=j();Hb.initSync();var __=Hb.get(Sn.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),sm=Sn.TIME_STAMP_NAMES_ENUM.CREATED_TIME,vi=Sn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function xV(e,t,r,s,n=$s.getNextMonotonicTime()){am(e,t,r,s),nm(e,t,r);let i=new DV,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u];xb(_,!0,n);let l=qV(e,t,r,_),d=_[t];o.push(l),c.push(d)}return im(o,c,s,i,n)}a(xV,"insertRecords");function qV(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||s.hasOwnProperty(o)===!1)continue;let c=s[o];if(typeof c=="function"){let l=c([[{}]]);Array.isArray(l)&&(c=l[0][Sn.FUNC_VAL],s[o]=c)}let u=$s.getIndexedValues(c),_=e.dbis[o];if(u){__&&_.prefetch(u.map(l=>({key:l,value:n})),d_);for(let l=0,d=u.length;l<d;l++)_.put(u[l],n)}}__&&e.dbis[t].prefetch([n],d_),e.dbis[t].put(n,s,s[vi])})}a(qV,"insertRecord");function FV(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(FV,"removeSkippedRecords");function xb(e,t,r){let s=r>0;(s||!Number.isInteger(e[vi]))&&(e[vi]=r||(r=$s.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[sm]))&&(e[sm]=r||$s.getNextMonotonicTime()):delete e[sm]}a(xb,"setTimestamps");function nm(e,t,r){r.indexOf(Sn.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Sn.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Sn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Sn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),CV.initializeDBIs(e,t,r)}a(nm,"initializeTransaction");async function GV(e,t,r,s,n=$s.getNextMonotonicTime()){am(e,t,r,s),nm(e,t,r);let i=new LV,o=[],c=[],u=[];for(let _=0;_<s.length;_++){let l=s[_],d=l[t],f;try{f=om(e,t,l,d,i,!0,n)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(f),u.push(d)}return im(c,u,s,i,n,o)}a(GV,"updateRecords");async function kV(e,t,r,s,n=$s.getNextMonotonicTime()){try{am(e,t,r,s)}catch(u){throw BV(u,u.message,HV.HTTP_STATUS_CODES.BAD_REQUEST)}nm(e,t,r);let i=new UV,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u],l;PV.isEmpty(_[t])?(l=vV.v4(),_[t]=l):l=_[t];let d=om(e,t,_,l,i,!1,n);o.push(d),c.push(l)}return im(o,c,s,i,n)}a(kV,"upsertRecords");async function im(e,t,r,s,n,i=[]){let o=await Promise.all(e);for(let c=0,u=o.length;c<u;c++)o[c]===!0?s.written_hashes.push(t[c]):(s.skipped_hashes.push(t[c]),i.push(c));return s.txn_time=n||$s.getNextMonotonicTime(),FV(r,i),s}a(im,"finalizeWrite");function om(e,t,r,s,n,i=!1,o){let c=e.dbis[t],u=c.getEntry(s),_=u?.value,l=_;if(!_){if(i)return!1;_={}}if(xb(r,!l,o),Number.isInteger(r[vi])&&_[vi]>r[vi])return!1;l&&n.original_records.push(_);let d,f=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let p=r[h],S=e.dbis[h];if(S===void 0)continue;let R=_[h];if(typeof p=="function"){let w=p([[_]]);Array.isArray(w)&&(p=w[0][Sn.FUNC_VAL],r[h]=p)}if(p===R)continue;let I=$s.getIndexedValues(R);if(I){__&&S.prefetch(I.map(w=>({key:w,value:s})),d_);for(let w=0,B=I.length;w<B;w++)S.remove(I[w],s)}if(I=$s.getIndexedValues(p),I){__&&S.prefetch(I.map(w=>({key:w,value:s})),d_);for(let w=0,B=I.length;w<B;w++)S.put(I[w],s)}}let E=Object.assign({},_,r);c.put(s,E,E[vi])},"do_put");return u?d=c.ifVersion(s,u.version,f):d=c.ifNoExists(s,f),d.then(E=>E?!0:om(e,t,r,s,n,i,o))}a(om,"updateUpsertRecord");function VV(e,t,r){if($s.validateEnv(e),t===void 0)throw new Error(Ac.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Ac.WRITE_ATTRIBUTES_REQUIRED):new Error(Ac.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(VV,"validateBasic");function am(e,t,r,s){if(VV(e,t,r),!Array.isArray(s))throw s===void 0?new Error(Ac.RECORDS_REQUIRED):new Error(Ac.RECORDS_MUST_BE_ARRAY)}a(am,"validateWrite");function d_(){}a(d_,"noop");qb.exports={insertRecords:xV,updateRecords:GV,upsertRecords:kV}});var Bi=T((Zae,$V)=>{$V.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 Ks=T((ece,kb)=>{"use strict";var Gb=z(),Fb=D(),Go=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Ys=require("joi"),Xn={schema_format:{pattern:Go,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},YV=Ys.alternatives(Ys.string().min(1).max(Xn.schema_length.maximum).pattern(Go).messages({"string.pattern.base":"{:#label} "+Xn.schema_format.message}),Ys.number(),Ys.array()).required(),KV=Ys.alternatives(Ys.string().min(1).max(Xn.schema_length.maximum).pattern(Go).messages({"string.pattern.base":"{:#label} "+Xn.schema_format.message}),Ys.number()),WV=Ys.alternatives(Ys.string().min(1).max(Xn.schema_length.maximum).pattern(Go).messages({"string.pattern.base":"{:#label} "+Xn.schema_format.message}),Ys.number()).required();function QV(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Xn.schema_length.maximum?`'${e}' maximum of 250 characters`:Go.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(QV,"checkValidTable");function zV(e,t){return Gb.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(zV,"validateSchemaExists");function JV(e,t){let r=t.state.ancestors[0].schema;return Gb.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(JV,"validateTableExists");function XV(e,t){return e.toLowerCase()===Fb.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${Fb.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(XV,"validateSchemaName");kb.exports={common_validators:Xn,schema_regex:Go,hdb_schema_table:YV,validateSchemaExists:zV,validateTableExists:JV,validateSchemaName:XV,checkValidTable:QV,hdb_database:KV,hdb_table:WV}});var Je=T((rce,Vb)=>{"use strict";var ir=require("validate.js");ir.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||ir.validators.type.checks[t](e)?null:` must be a '${t}' value`};ir.validators.type.checks={Object:function(e){return ir.isObject(e)&&!ir.isArray(e)},Array:ir.isArray,Integer:ir.isInteger,Number:ir.isNumber,String:ir.isString,Date:ir.isDate,Boolean:function(e){return typeof e=="boolean"}};ir.validators.hasValidFileExt=function(e,t){return ir.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};Vb.exports={validateObject:jV,validateObjectAsync:ZV,validateBySchema:e$};function jV(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=ir(e,t,{format:"flat"});return r?new Error(r):null}a(jV,"validateObject");async function ZV(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await ir.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(ZV,"validateObjectAsync");function e$(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(e$,"validateBySchema")});var f_=T((nce,$b)=>{var{common_validators:Ws}=Ks(),bc=Je(),Oc="is required",pt={database:{presence:!1,format:Ws.schema_format,length:Ws.schema_length},schema:{presence:!1,format:Ws.schema_format,length:Ws.schema_length},table:{presence:!0,format:Ws.schema_format,length:Ws.schema_length},attribute:{presence:!0,format:Ws.schema_format,length:Ws.schema_length},hash_attribute:{presence:!0,format:Ws.schema_format,length:Ws.schema_length}};function Nc(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(Nc,"makeAttributesStrings");function t$(e){return e=Nc(e),pt.table.presence=!1,pt.attribute.presence=!1,pt.hash_attribute.presence=!1,bc.validateObject(e,pt)}a(t$,"schema_object");function r$(e){return e=Nc(e),pt.table.presence={message:Oc},pt.attribute.presence=!1,pt.hash_attribute.presence=!1,bc.validateObject(e,pt)}a(r$,"table_object");function s$(e){return e=Nc(e),pt.table.presence={message:Oc},pt.attribute.presence=!1,bc.validateObject(e,pt)}a(s$,"create_table_object");function n$(e){return e=Nc(e),pt.table.presence={message:Oc},pt.attribute.presence={message:Oc},pt.hash_attribute.presence=!1,bc.validateObject(e,pt)}a(n$,"attribute_object");function i$(e){return e=Nc(e),pt.table.presence={message:Oc},pt.attribute.presence=!1,pt.hash_attribute.presence=!1,bc.validateObject(e,pt)}a(i$,"describe_table");function o$(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(o$,"validateTableResidence");$b.exports={schema_object:t$,create_table_object:s$,table_object:r$,attribute_object:n$,describe_table:i$,validateTableResidence:o$}});var Kb=T((oce,Yb)=>{"use strict";var a$=require("uuid"),cm=class{static{a(this,"CreateAttributeObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||a$.v4(),this.schema_table=`${this.schema}.${this.table}`}};Yb.exports=cm});var E_=T((cce,Wb)=>{"use strict";var c$=Kb(),um=class extends c${static{a(this,"LMDBCreateAttributeObject")}constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};Wb.exports=um});var zb=T((lce,Qb)=>{"use strict";Qb.exports=l$;var u$="inserted";function l$(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===u$?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(l$,"returnObject")});var h_=T((dce,eN)=>{"use strict";var _$=D(),lm=Ke(),d$=Fo(),{getSystemSchemaPath:f$,getSchemaPath:E$}=ze(),h$=Bi(),m$=f_(),p$=E_(),S$=zb(),{handleHDBError:Jb,hdb_errors:jb}=Z(),Xb=z(),{HTTP_STATUS_CODES:T$}=jb,_m=h$.hdb_attribute,Zb=[];for(let e=0;e<_m.attributes.length;e++)Zb.push(_m.attributes[e].attribute);var g$="inserted";eN.exports=R$;async function R$(e){let t=m$.attribute_object(e);if(t)throw Jb(new Error,t.message,jb.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&Xb.checkGlobalSchemaTable(e.schema,e.table);if(r)throw Jb(new Error,r,T$.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=Xb.isEmpty(e.dup_sort)||e.dup_sort=="true";let s=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(s=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(s)&&s.length>0){for(let i of s)if(i.attribute===e.attribute)throw new Error(`attribute '${i.attribute}' already exists in ${e.schema}.${e.table}`)}let n=new p$(e.schema,e.table,e.attribute,e.id);try{let i=await lm.openEnvironment(E$(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}`);lm.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await lm.openEnvironment(f$(),_$.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await d$.insertRecords(o,_m.hash_attribute,Zb,[n]);return S$(g$,c,{records:[n]},u)}catch(i){throw i}}a(R$,"lmdbCreateAttribute")});var fm=T((Ece,rN)=>{var{hdb_table:A$,hdb_database:tN}=Ks(),O$=Je(),dm=require("joi"),b$={undefined:"undefined",null:"null"},N$=a((e,t)=>{let r=Object.keys(e),s=r.length,n;for(let i=0;i<s;i++){let o=r[i];(!o||o.length===0||b$[o]!==void 0)&&(n===void 0?n=`Invalid attribute name: '${o}'`:n+=`. Invalid attribute name: '${o}'`)}return n?t.message(n):e},"custom_records_val"),y$=dm.object({database:tN,schema:tN,table:A$,records:dm.array().items(dm.object().custom(N$)).required()});rN.exports=function(e){return O$.validateBySchema(e,y$)}});var yc=T((pce,nN)=>{"use strict";var Tn=z(),sN=G(),mce=fm(),{getDatabases:I$}=(ge(),ee(xe)),{ClientError:Hi}=Z();nN.exports=w$;function w$(e){if(Tn.isEmpty(e))throw new Hi("invalid update parameters defined.");if(Tn.isEmptyOrZeroLength(e.schema))throw new Hi("invalid schema specified.");if(Tn.isEmptyOrZeroLength(e.table))throw new Hi("invalid table specified.");if(!Array.isArray(e.records))throw new Hi("records must be an array");let t=I$()[e.schema]?.[e.table];if(Tn.isEmpty(t))throw new Hi(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,s=new Set,n={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&Tn.isEmptyOrZeroLength(o[r]))throw sN.error("a valid hash attribute must be provided with update record:",o),new Hi("a valid hash attribute must be provided with update record, check log for more info");if(!Tn.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw sN.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Hi(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!Tn.isEmpty(o[r])&&o[r]!==""&&s.has(Tn.autoCast(o[r]))&&(o.skip=!0),s.add(Tn.autoCast(o[r]));for(let c in o)n[c]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(w$,"insertUpdateValidate")});var Ic=T((Tce,iN)=>{"use strict";var C$=D().OPERATIONS_ENUM,Em=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i=void 0){this.operation=C$.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};iN.exports=Em});var Lc=T((Ace,oN)=>{"use strict";var Rce=Ic(),m_=D(),mm=z(),hm=G(),D$=require("uuid"),{handleHDBError:wc,hdb_errors:L$}=Z(),{HDB_ERROR_MSGS:Cc,HTTP_STATUS_CODES:Dc}=L$;oN.exports=U$;function U$(e,t,r){for(let n=0;n<t.length;n++)M$(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];P$(i,r,e.operation)}}a(U$,"processRows");function M$(e){if(Buffer.byteLength(String(e))>m_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw wc(new Error,Cc.ATTR_NAME_LENGTH_ERR(e),Dc.BAD_REQUEST,void 0,void 0,!0);if(mm.isEmptyOrZeroLength(e)||mm.isEmpty(e.trim()))throw wc(new Error,Cc.ATTR_NAME_NULLISH_ERR,Dc.BAD_REQUEST,void 0,void 0,!0)}a(M$,"validateAttribute");function P$(e,t,r){if(!e.hasOwnProperty(t)||mm.isEmptyOrZeroLength(e[t])){if(r===m_.OPERATIONS_ENUM.INSERT||r===m_.OPERATIONS_ENUM.UPSERT){e[t]=D$.v4();return}throw hm.error("Update transaction aborted due to record with no hash value:",e),wc(new Error,Cc.RECORD_MISSING_HASH_ERR,Dc.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>m_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw hm.error(e),wc(new Error,Cc.HASH_VAL_LENGTH_ERR,Dc.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw hm.error(e),wc(new Error,Cc.INVALID_FORWARD_SLASH_IN_HASH_ERR,Dc.BAD_REQUEST,void 0,void 0,!0)}a(P$,"validateHash")});var cN=T((bce,aN)=>{"use strict";var pm=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};aN.exports=pm});var _N=T((yce,lN)=>{"use strict";var Sm=Ke(),v$=G(),uN=Ir().LMDB_ERRORS_ENUM;lN.exports=B$;async function B$(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 Sm.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==uN.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await Sm.closeEnvironment(global.lmdb_map[s]),await Sm.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==uN.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){v$.error(t)}}a(B$,"cleanLMDBMap")});var gn=T((wce,hN)=>{"use strict";var Uc=require("crypto"),H$=j(),{CONFIG_PARAMS:x$}=D(),fN="aes-256-cbc",q$=32,F$=16,Tm=64,EN=32,G$=Tm+EN,dN=new Map;hN.exports={encrypt:k$,decrypt:V$,createNatsTableStreamName:$$};function k$(e){let t=Uc.randomBytes(q$),r=Uc.randomBytes(F$),s=Uc.createCipheriv(fN,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=n.toString("hex");return i+o+c}a(k$,"encrypt");function V$(e){let t=e.substr(0,Tm),r=e.substr(Tm,EN),s=e.substr(G$,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=Uc.createDecipheriv(fN,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(V$,"decrypt");function $$(e,t){let r=H$.get(x$.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,s=dN.get(r);return s||(s=Uc.createHash("md5").update(r).digest("hex"),dN.set(r,s)),s}a($$,"createNatsTableStreamName")});var jn=T((Lce,pN)=>{"use strict";var Dce=es(),p_=G(),mN=f_(),Y$=gn(),S_=z(),{handleHDBError:T_,hdb_errors:K$}=Z(),{HDB_ERROR_MSGS:g_,HTTP_STATUS_CODES:gm}=K$,W$=j();W$.initSync();var{getDatabases:Rm}=(ge(),ee(xe));pN.exports={describeAll:Q$,describeTable:R_,describeSchema:z$};async function Q$(e){try{let t=S_.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n=Rm(),i={},o={},c=[],u=e?.exact_count;for(let l in n){i[l]=!0,!t&&!s&&(o[l]=e.hdb_user.role.permission[l].describe);let d=n[l];for(let f in d)try{let E;if(t||s)E=await R_({schema:l,table:f,exact_count:u});else if(r&&r[l].describe&&r[l].tables[f].describe){let h=r[l].tables[f].attribute_permissions;E=await R_({schema:l,table:f,exact_count:u},h)}E&&c.push(E)}catch(E){p_.error(E)}}let _={};for(let l in c)t||s?(_[c[l].schema]==null&&(_[c[l].schema]={}),_[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]):o[c[l].schema]&&(_[c[l].schema]==null&&(_[c[l].schema]={}),_[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]);for(let l in i)t||s?_[l]={}:o[l]&&(_[l]={});return _}catch(t){return p_.error("Got an error in describeAll"),p_.error(t),T_(new Error,g_.DESCRIBE_ALL_ERR)}}a(Q$,"describeAll");async function R_(e,t){S_.transformReq(e);let{schema:r,table:s}=e;r=r?.toString(),s=s?.toString();let n=t;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(n=e.hdb_user.role.permission[r].tables[s].attribute_permissions);let i=mN.describe_table(e);if(i)throw i;let c=Rm()[r];if(!c)throw T_(new Error,g_.SCHEMA_NOT_FOUND(e.schema),gm.NOT_FOUND);let u=c[s];if(!u)throw T_(new Error,g_.TABLE_NOT_FOUND(e.schema,e.table),gm.NOT_FOUND);function _(f){l.push(Object.assign({},{attribute:f.attribute,type:f.type,elements:f.elements?.type,indexed:f.indexed,is_primary_key:f.isPrimaryKey,assigned_created_time:f.assignCreatedTime,assigned_updated_time:f.assignUpdatedTime,nullable:f.nullable,properties:f.properties?f.properties.map(E=>({type:E.type,name:E.name})):void 0}))}a(_,"pushAtt");let l=[];if(n){let f={};n.forEach(E=>{E.describe&&(f[E.attribute_name]=!0)}),u.attributes.forEach(E=>{f[E.name]&&_(E)})}else u.attributes?.forEach(f=>_(f));let d={schema:r,name:u.tableName,hash_attribute:u.attributes.find(f=>f.isPrimaryKey||f.is_hash_attribute)?.name,audit:u.audit,schema_defined:u.schemaDefined,attributes:l};d.clustering_stream_name=Y$.createNatsTableStreamName(d.schema,d.name);try{let f=u.getRecordCount({exactCount:e.exact_count==="true"});d.record_count=f.recordCount,d.estimated_record_range=f.estimatedRange;let E=u.auditStore;if(E)for(let h of E.getKeys({reverse:!0,limit:1}))d.last_updated_record=h[0];if(!d.last_updated_record&&u.indices.__updatedtime__)for(let h of u.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))d.last_updated_record=h}catch(f){p_.warn(`unable to stat table dbi due to ${f}`)}return d}a(R_,"descTable");async function z$(e){S_.transformReq(e);let t=mN.schema_object(e);if(t)throw t;let r;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(r=e.hdb_user.role.permission[e.schema]);let s=e.schema.toString(),i=Rm()[s];if(!i)throw T_(new Error,g_.SCHEMA_NOT_FOUND(e.schema),gm.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),S_.isEmpty(u)||u.describe){let _=await R_({schema:e.schema,table:c,exact_count:e.exact_count},u?u.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(z$,"describeSchema")});var Rn=T((vce,AN)=>{var J$=Bi(),{callbackify:TN,promisify:X$}=require("util"),{getDatabases:gN}=(ge(),ee(xe));AN.exports={setSchemaDataToGlobal:SN,getTableSchema:j$,getSystemSchema:Z$,setSchemaDataToGlobalAsync:X$(SN)};var RN=jn(),Mce=TN(RN.describeAll),Pce=TN(RN.describeTable);function SN(e){global.hdb_schema=gN(),e&&e()}a(SN,"setSchemaDataToGlobal");function j$(e,t,r){let s=gN()[e];if(!s)return r(`schema ${e} does not exist`);let n=s[t];return n?r(null,{schema:e,name:t,hash_attribute:n.primaryKey}):r(`table ${e}.${t} does not exist`)}a(j$,"getTableSchema");function Z$(){return J$}a(Z$,"getSystemSchema")});var Lr=T((Hce,yN)=>{"use strict";var O_=fm(),Ft=z(),e1=require("util"),b_=ws(),t1=Rn(),ON=G(),{handleHDBError:xi,hdb_errors:r1}=Z(),{HTTP_STATUS_CODES:qi}=r1,s1=e1.promisify(t1.getTableSchema),n1="updated",bN="inserted",NN="upserted";yN.exports={insert:o1,update:a1,upsert:c1,validation:i1,flush:u1};async function i1(e){if(Ft.isEmpty(e))throw new Error("invalid update parameters defined.");if(Ft.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Ft.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await s1(e.schema,e.table),r=O_(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let s=t.hash_attribute,n=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&Ft.isEmptyOrZeroLength(c[s]))throw ON.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(!Ft.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw ON.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!Ft.isEmpty(c[s])&&c[s]!==""&&n.has(Ft.autoCast(c[s]))&&(c.skip=!0),n.add(Ft.autoCast(c[s]));for(let u in c)i[u]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(i1,"validation");async function o1(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=O_(e);if(t)throw xi(new Error,t.message,qi.BAD_REQUEST);Ft.transformReq(e);let r=Ft.checkSchemaTableExist(e.schema,e.table);if(r)throw xi(new Error,r,qi.BAD_REQUEST);let s=await b_.createRecords(e);return A_(bN,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(o1,"insertData");async function a1(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=O_(e);if(t)throw xi(new Error,t.message,qi.BAD_REQUEST);Ft.transformReq(e);let r=Ft.checkSchemaTableExist(e.schema,e.table);if(r)throw xi(new Error,r,qi.BAD_REQUEST);let s=await b_.updateRecords(e);return Ft.isEmpty(s.existing_rows)?A_(n1,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):A_(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(a1,"updateData");async function c1(e){if(e.operation!=="upsert")throw xi(new Error,"invalid operation, must be upsert",qi.INTERNAL_SERVER_ERROR);let t=O_(e);if(t)throw xi(new Error,t.message,qi.BAD_REQUEST);Ft.transformReq(e);let r=Ft.checkSchemaTableExist(e.schema,e.table);if(r)throw xi(new Error,r,qi.BAD_REQUEST);let s=await b_.upsertRecords(e);return A_(NN,s.written_hashes,e,[],s.new_attributes,s.txn_time)}a(c1,"upsertData");function A_(e,t,r,s,n,i){let o={message:`${e} ${t.length} of ${t.length+s.length} records`,new_attributes:n,txn_time:i};return e===bN?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===NN?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(A_,"returnObject");function u1(e){return Ft.transformReq(e),b_.flush(e.schema,e.table)}a(u1,"flush")});var Om=T((qce,CN)=>{var l1=Je(),Am=require("joi"),{hdb_table:_1,hdb_database:IN}=Ks(),wN={schema:IN,database:IN,table:_1},d1={date:Am.date().iso().required()},f1={timestamp:Am.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};CN.exports=function(e,t){let r=t==="timestamp"?{...wN,...f1}:{...wN,...d1},s=Am.object(r);return l1.validateBySchema(e,s)}});var UN=T((Fce,LN)=>{var E1=Je(),bm=require("joi"),{hdb_table:h1,hdb_database:DN}=Ks(),m1=bm.object({schema:DN,database:DN,table:h1,hash_values:bm.array().required(),ids:bm.array()});LN.exports=function(e){return E1.validateBySchema(e,m1)}});var PN=T((Gce,MN)=>{"use strict";var Nm=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}},ym=class{static{a(this,"NoSQLSeachObject")}constructor(t,r,s,n,i,o){this.schema=t,this.table=r,this.search_attribute=s,this.hash_attribute=n,this.get_attributes=i,this.search_value=o}},Im=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};MN.exports={InsertObject:Nm,NoSQLSeachObject:ym,DeleteResponseObject:Im}});var ti=T((Vce,qN)=>{"use strict";var BN=Om(),p1=UN(),Fi=z(),vN=require("moment"),HN=G(),{promisify:S1,callbackify:T1}=require("util"),Gi=D(),g1=Rn(),wm=S1(g1.getTableSchema),Cm=ws(),{DeleteResponseObject:R1}=PN(),{handleHDBError:Zn,hdb_errors:A1}=Z(),{HDB_ERROR_MSGS:N_,HTTP_STATUS_CODES:ei}=A1,O1="records successfully deleted",b1=T1(xN);qN.exports={delete:b1,deleteRecord:xN,deleteFilesBefore:N1,deleteAuditLogsBefore:y1};async function N1(e){let t=BN(e,"date");if(t)throw Zn(t,t.message,ei.BAD_REQUEST,void 0,void 0,!0);if(Fi.transformReq(e),!vN(e.date,vN.ISO_8601).isValid())throw Zn(new Error,N_.INVALID_DATE,ei.BAD_REQUEST,Gi.LOG_LEVELS.ERROR,N_.INVALID_DATE,!0);let s=Fi.checkSchemaTableExist(e.schema,e.table);if(s)throw Zn(new Error,s,ei.NOT_FOUND,Gi.LOG_LEVELS.ERROR,s,!0);let n=await Cm.deleteRecordsBefore(e);if(await wm(e.schema,e.table),HN.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(N1,"deleteFilesBefore");async function y1(e){let t=BN(e,"timestamp");if(t)throw Zn(t,t.message,ei.BAD_REQUEST,void 0,void 0,!0);if(Fi.transformReq(e),isNaN(e.timestamp))throw Zn(new Error,N_.INVALID_VALUE("Timestamp"),ei.BAD_REQUEST,Gi.LOG_LEVELS.ERROR,N_.INVALID_VALUE("Timestamp"),!0);let r=Fi.checkSchemaTableExist(e.schema,e.table);if(r)throw Zn(new Error,r,ei.NOT_FOUND,Gi.LOG_LEVELS.ERROR,r,!0);let s=await Cm.deleteAuditLogsBefore(e);return await wm(e.schema,e.table),HN.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(y1,"deleteAuditLogsBefore");async function xN(e){e.ids&&(e.hash_values=e.ids);let t=p1(e);if(t)throw Zn(t,t.message,ei.BAD_REQUEST,void 0,void 0,!0);Fi.transformReq(e);let r=Fi.checkSchemaTableExist(e.schema,e.table);if(r)throw Zn(new Error,r,ei.NOT_FOUND,Gi.LOG_LEVELS.ERROR,r,!0);try{await wm(e.schema,e.table);let s=await Cm.deleteRecords(e);return Fi.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${O1}`),s}catch(s){if(s.message===Gi.SEARCH_NOT_FOUND_MESSAGE){let n=new R1;return n.message=Gi.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(xN,"deleteRecord")});var y_=T((Yce,kN)=>{var I1=require("crypto"),FN=9;function w1(e){let t=D1(FN),r=GN(e+t);return t+r}a(w1,"createHash");function C1(e,t){let r=e?.substr(0,FN),s=r+GN(t+r);return e===s}a(C1,"validateHash");function D1(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,s="";for(let n=0;n<e;n++){let i=Math.floor(Math.random()*r);s+=t[i]}return s}a(D1,"generateSalt");function GN(e){return I1.createHash("md5").update(e).digest("hex")}a(GN,"md5");kN.exports={hash:w1,validate:C1}});var $N=T((Wce,VN)=>{var Dm=Je(),Qt={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 L1(e){return Qt.password.presence=!0,Qt.username.presence=!0,Qt.role.presence=!0,Qt.active.presence=!0,Dm.validateObject(e,Qt)}a(L1,"addUserValidation");function U1(e){return Qt.password.presence=!1,Qt.username.presence=!0,Qt.role.presence=!1,Qt.active.presence=!1,Dm.validateObject(e,Qt)}a(U1,"alterUserValidation");function M1(e){return Qt.password.presence=!1,Qt.username.presence=!0,Qt.role.presence=!1,Qt.active.presence=!1,Dm.validateObject(e,Qt)}a(M1,"dropUserValidation");VN.exports={addUserValidation:L1,alterUserValidation:U1,dropUserValidation:M1}});var qe=T((Jce,KN)=>{"use strict";var{platform:zce}=require("os"),P1="nats-server.zip",Lm="nats-server",v1=process.platform==="win32"?`${Lm}.exe`:Lm,Um="HDB",B1=/^[^\s.,*>]+$/,YN="__request__",H1=a(e=>`${e}.${YN}`,"REQUEST_SUBJECT"),x1={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},q1={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},F1={HUB:"hub.pid",LEAF:"leaf.pid"},G1={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},k1={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:Um,deliver_subject:"__HDB__.WORKQUEUE"},V1={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:Um,deliver_subject:"HDB.SCHEMAQUEUE"},$1={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:Um,deliver_subject:"HDB.USERQUEUE"},Y1={SUCCESS:"success",ERROR:"error"},K1={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},W1={TXN:"txn",MSGID:"msgid"},ko={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},Q1={[ko.ERR]:1,[ko.WRN]:2,[ko.INF]:3,[ko.DBG]:4,[ko.TRC]:5},z1={debug:"-D",trace:"-DVV"};KN.exports={NATS_SERVER_ZIP:P1,NATS_SERVER_NAME:Lm,NATS_BINARY_NAME:v1,PID_FILES:F1,NATS_CONFIG_FILES:q1,SERVER_SUFFIX:G1,WORK_QUEUE_CONSUMER_NAMES:k1,SCHEMA_QUEUE_CONSUMER_NAMES:V1,USER_QUEUE_CONSUMER_NAMES:$1,NATS_TERM_CONSTRAINTS_RX:B1,REQUEST_SUFFIX:YN,UPDATE_REMOTE_RESPONSE_STATUSES:Y1,CLUSTER_STATUS_STATUSES:K1,REQUEST_SUBJECT:H1,SUBJECT_PREFIXES:W1,MSG_HEADERS:x1,LOG_LEVELS:ko,LOG_LEVEL_FLAGS:z1,LOG_LEVEL_HIERARCHY:Q1}});var QN=T((jce,WN)=>{"use strict";var J1={key:"-----BEGIN RSA PRIVATE KEY-----\rMIIEowIBAAKCAQEArBFJQRfFiJku/KwhV1Ssp7cX61vvuKmd4Rp6A9jB2QLgx8nj\r/+Xhp2hPRkISnOA8BuAxr4dMD9syGJwX4kNy9mbZ5Q0fWZCiEGBpVcU1J+k+N5K4\rSuZ2SqgxeN2IN2RLzt3GyQY4imcdHgNv7aHoXUrEwBx0MeYEw3IIDXtrYKCR2D8I\rvWBfwMUgWa24G8lpWILWA5hd9srRz9NxlAiHSjhbgT7B0xruEpHRCHSyKjvaIJVt\rWBR+amejYsAKVrD/hgrqjsA1123Y6++YqvU6vwg64xhS2kz5r3dkNKhvwbWgpZdI\rIaRvsiB77f4kLGo0vi8RFgJ1ZRjGg3RRK2w1LQIDAQABAoIBAQCEOmh78EOpnGZC\rYBjjHrvrysVD5gvLcfVUtl8Ls7gMB60re1eOIF+PoZZCHKZnDd6zPfiQtj1adg0C\rYnnsM/8VoaZS4gm0b3RLd3ubIQifWhuo40RissY2yxfxlPSH9LhZCY8ojnJG0cTL\resK579E8WCfopjUY33XLqEbN7Ylv39J+DSqInjqV3efJZUa+HqUJ98VxxzodcKMD\rP3bwUU4gHoSSp4pAsOFH5sQhaIWH1IcNjrAwpee2cJQuh4G157RRIuuUpagtaEG/\rXJIiAyBguJyu3JQFnIBQF01N5+omJgXYJ1L0m54543/iIRThmF3zDCDgCyUzmOk+\rH6As9fv1AoGBANOpOtOZLSAScjGsgJamT3ceJ2wCa86g2j8Oxu8lJUmUp5s3tA0v\rBFW5O3S4KR1EXwkLMBUMrfFM8YvzHWxsXBI6XV8azGLvyqPHxr65OhmpGYkGZMXu\rn9okgjkqlewnY2I073gvyK7ppX51UL5y9fF1vlsk+UlW+Rgx/vMHbdcjAoGBANAc\rxRUsxs4QJpbS4zD3JOkHjr24a97TrS3kCybAHUMpR2NrEHPZw9zex0/aphOJUHfL\rIMkOZdpfDqMfxWy4FAEmqBEMkO2SB+h0Wp4P+qp81ax4vGFiB0cD3wtixr11U1tt\rlZ/ZTdv4VDpDFNK1KaplhTDeyuCjeYfS3/GJia9vAoGAcOsAgjBevZR5rXx84WH6\rVO8WUu37u7FenXNxt9VWTinrPMh72uixZFY8nOk+rely1e1NCn3IMko9Ns9NbDFm\r8SaH95vhXArXTYbfxZIlp9jp0YtCqcHDL+p4Oq04bFMbFyJseu7rHj1x18QYfnHw\rOY/6LL/N6k1m+Hx7qgXVmIcCgYB/w0nTCBw84XlvWqSTqQaF8VfWbWP79mP5KmkW\rLxdH5g2noVEGbohqDnK6OXd/wusdwByukiJBf94Skyy25AOT+VFwthA7aU1ljhkb\rtJ+lDuJ28eBkwLPLCzthWBC+u0qjdJFJAzVjd/7tjcU43nNn4s90AzL12iaAFhvZ\rwyA+DQKBgGc/4cdyGJ3YkcA8150gQBawgJZ7q8V1JND87ggWA8wnK3cHn7rMZQl2\r3emDp9HEFXFex5dbGDDqZFAoesZCDxjknIn9oNfW4PvaWS8q7b6ZKLZG1p03Pu7/\rtYaD0kPbo0kysfFT/co+NgHbdykvIyboomfGdNLTUjYuy6lpwpvs\r-----END RSA PRIVATE KEY-----\r".replace(/\r/g,`\r
|
|
5
5
|
`),cert:"-----BEGIN CERTIFICATE-----\rMIIDXDCCAkSgAwIBAgIFNTE4MzQwDQYJKoZIhvcNAQELBQAwXTEXMBUGA1UEAxMO\rSGFycGVyREIsIEluYy4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UE\rBxMGRGVudmVyMRcwFQYDVQQKEw5IYXJwZXJEQiwgSW5jLjAeFw0yMjAzMTEyMzAz\rNDlaFw0yNzAzMTAyMzAzNDlaMF0xFzAVBgNVBAMTDkhhcnBlckRCLCBJbmMuMQsw\rCQYDVQQGEwJVUzELMAkGA1UECBMCQ08xDzANBgNVBAcTBkRlbnZlcjEXMBUGA1UE\rChMOSGFycGVyREIsIEluYy4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB\rAQCsEUlBF8WImS78rCFXVKyntxfrW++4qZ3hGnoD2MHZAuDHyeP/5eGnaE9GQhKc\r4DwG4DGvh0wP2zIYnBfiQ3L2ZtnlDR9ZkKIQYGlVxTUn6T43krhK5nZKqDF43Yg3\rZEvO3cbJBjiKZx0eA2/toehdSsTAHHQx5gTDcggNe2tgoJHYPwi9YF/AxSBZrbgb\ryWlYgtYDmF32ytHP03GUCIdKOFuBPsHTGu4SkdEIdLIqO9oglW1YFH5qZ6NiwApW\rsP+GCuqOwDXXbdjr75iq9Tq/CDrjGFLaTPmvd2Q0qG/BtaCll0ghpG+yIHvt/iQs\rajS+LxEWAnVlGMaDdFErbDUtAgMBAAGjIzAhMA8GA1UdEwEB/wQFMAMBAf8wDgYD\rVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBCwUAA4IBAQASR4YW/rPK7PNArHVe9zzM\rb0rKNX/2T9/0nybRhmE/+hdlSgliTAeebmwkUS2APckmekYt/q2ZY2NS65Fo/jjp\rG8TJrtcF4h+ylVqUp0ZXQLFtIsr7r2JZA7hJ6njW6G4DHSZ0gxtECLi4CBlTjzm5\rNmnmIDObvGRTuqmcdAZmXeObbta/He2XIzietukPAYX062pNM+G5XT5UM1eG/Vlp\rN86vjhpyI+ffKy+C60SJqxmKM3ydgN7oLscE7+2wLPN25XqN4W99OwGsp5dTdu/f\r5lPtFayXdJ55e/sNQKmGN+UGLrL05c2MWgjb8U/LFilnupUianceoeSERZmVjzKX\r-----END CERTIFICATE-----\r".replace(/\r/g,`\r
|
|
6
|
-
`)},N1="certificate.pem",y1="privateKey.pem",I1="ca.pem";zN.exports={CERTIFICATE_VALUES:b1,CERTIFICATE_PEM_NAME:N1,PRIVATEKEY_PEM_NAME:y1,CA_PEM_NAME:I1}});var Cm=T((fce,ty)=>{"use strict";var ey=require("fs-extra"),oe=require("joi"),w1=require("os"),{boolean:Be,string:as,number:Ut,array:wm}=oe.types(),{totalmem:XN}=require("os"),Gi=require("path"),C1=G(),U_=W(),dce=JN(),jN=I(),D1=ze(),ZN="log",L1="components",U1="Invalid logging.rotation.maxSize unit. Available units are G, M or K",M1="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",P1="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",v1="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",B1="rootPath config parameter is undefined",H1="clustering.enabled config parameter is undefined",ki=Ut.min(0).required(),M_=wm.items({host:as.required(),port:ki}).empty(null),Js;ty.exports={configValidator:x1,routesValidator:$1,route_constraints:M_};function x1(e){if(Js=e.rootPath,U_.isEmpty(Js))throw B1;let t=Be.required(),r=Ut.min(0).max(1e3).empty(null).default(V1),s=as.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Uc),n=as.optional().empty(null),i=as.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),o=oe.string().empty(null).default(Uc),c=oe.custom(F1).empty(null).default(Uc),u=e.clustering?.enabled;if(U_.isEmpty(u))throw H1;let _;return u===!0?_=oe.object({enabled:t,hubServer:oe.object({cluster:oe.object({name:oe.required().empty(null),network:oe.object({port:ki,routes:M_}).required()}).required(),leafNodes:oe.object({network:oe.object({port:ki}).required()}).required(),network:oe.object({port:ki}).required()}).required(),leafServer:oe.object({network:oe.object({port:ki,routes:M_}).required(),streams:oe.object({maxAge:Ut.min(120).allow(null).optional(),maxBytes:Ut.min(1).allow(null).optional(),maxMsgs:Ut.min(1).allow(null).optional(),path:o}).required()}).required(),logLevel:oe.valid("error","warn","info","debug","trace"),nodeName:i,republishMessages:Be.optional(),databaseLevel:Be.optional(),tls:oe.object({certificate:n,certificateAuthority:n,privateKey:n,insecure:Be.required(),verify:Be.optional()}),user:as.optional().empty(null)}).required():_=oe.object({enabled:t,tls:oe.object({certificate:n,certificateAuthority:n,privateKey:n,insecure:Be.required()})}).required(),oe.object({authentication:oe.object({authorizeLocal:Be,cacheTTL:Ut.required(),enableSessions:Be}),analytics:oe.object({aggregatePeriod:Ut}),componentsRoot:s.optional(),clustering:_,localStudio:oe.object({enabled:t}).required(),logging:oe.object({auditAuthEvents:oe.object({logFailed:Be,logSuccessful:Be}),file:Be.required(),level:oe.valid("notify","fatal","error","warn","info","debug","trace"),rotation:oe.object({enabled:Be.optional(),compress:Be.optional(),interval:as.custom(k1).optional().empty(null),maxSize:as.custom(G1).optional().empty(null),path:as.optional().empty(null).default(Uc)}).required(),root:s,stdStreams:Be.required(),auditLog:Be.required()}).required(),operationsApi:oe.object({network:oe.object({cors:Be.optional(),corsAccessList:wm.optional(),headersTimeout:Ut.min(1).optional(),keepAliveTimeout:Ut.min(1).optional(),port:Ut.optional().empty(null),domainSocket:oe.optional().empty("hdb/operations-server").default(Uc),securePort:Ut.optional().empty(null),timeout:Ut.min(1).optional()}).optional(),tls:oe.object({certificate:n,certificateAuthority:n,privateKey:n})}).required(),rootPath:as.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:oe.object({network:oe.object({port:ki,securePort:ki,mtls:oe.alternatives([Be.optional(),oe.object({user:as.optional(),certificateAuthority:n})])}).required(),webSocket:Be.optional(),requireAuthentication:Be.optional()}),http:oe.object({compressionThreshold:Ut.optional(),cors:Be.optional(),corsAccessList:wm.optional(),headersTimeout:Ut.min(1).optional(),port:Ut.min(0).optional().empty(null),securePort:Ut.min(0).optional().empty(null)}).required(),threads:r.optional(),maxHeapMemory:Ut.min(0).optional(),storage:oe.object({writeAsync:Be.required(),overlappingSync:Be.optional(),caching:Be.optional(),compression:Be.optional(),noReadAhead:Be.optional(),path:c,prefetchWrites:Be.optional()}).required(),ignoreScripts:Be.optional(),tls:oe.object({certificate:n.optional(),certificateAuthority:n.optional(),privateKey:n.optional(),ciphers:as.optional()})}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(x1,"configValidator");function q1(e){return ey.existsSync(e)?null:`Specified path ${e} does not exist.`}a(q1,"doesPathExist");function F1(e,t){oe.assert(e,as.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=q1(e);if(r)return t.message(r)}a(F1,"validatePath");function G1(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(U1);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(P1):e}a(G1,"validateRotationMaxSize");function k1(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(M1);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(v1):e}a(k1,"validateRotationInterval");function V1(e,t){let r=t.state.path.join("."),s=w1.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||XN();return i=Math.round(Math.min(i,XN())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),C1.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(V1,"setDefaultThreads");function Uc(e,t){let r=t.state.path.join(".");if(!U_.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(U_.isEmpty(Js))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return Gi.join(Js,L1);case"logging.root":return Gi.join(Js,ZN);case"clustering.leafServer.streams.path":return Gi.join(Js,"clustering","leaf");case"storage.path":let s=Gi.join(Js,jN.LEGACY_DATABASES_DIR_NAME);return ey.existsSync(s)?s:Gi.join(Js,jN.DATABASES_DIR_NAME);case"logging.rotation.path":return Gi.join(Js,ZN);case"operationsApi.network.domainSocket":return r==null?null:Gi.join(Js,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Uc,"setDefaultRoot");function $1(e){let t=oe.object({routes:M_});return D1.validateBySchema({routes:e},t)}a($1,"routesValidator")});var vr=T((mce,ly)=>{"use strict";var Pr=I(),Mt=W(),bt=G(),{configValidator:Y1,routesValidator:ry}=Cm(),ar=require("fs-extra"),K1=require("yaml"),Ds=require("path"),W1=require("is-number"),ny=require("properties-reader"),Q1=require("lodash"),{handleHDBError:z1}=Z(),{HTTP_STATUS_CODES:J1,HDB_ERROR_MSGS:P_}=yr(),hce=require("minimist"),{server:X1}=(ss(),te(Lo)),{DATABASES_PARAM_CONFIG:Mc,CONFIG_PARAMS:Mr,CONFIG_PARAM_MAP:Ls}=Pr,j1="Unable to get config value because config is uninitialized",Z1="Config successfully initialized",eY="Error backing up config file",tY="Empty parameter sent to getConfigValue",iy=Ds.join(Pr.PACKAGE_ROOT,"config","yaml",Pr.HDB_DEFAULT_CONFIG_FILE),rY="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",sy={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"},v_,Nt,B_;ly.exports={createConfigFile:sY,getDefaultConfig:nY,getConfigValue:ay,initConfig:Lm,flattenConfig:Go,updateConfigValue:cy,updateConfigObject:oY,getConfiguration:uY,setConfiguration:lY,readConfigFile:Mm,getClusteringRoutes:_Y,initOldConfig:uy,getConfigFromFile:dY,getConfigFilePath:Vi,addConfig:fY,deleteConfigFromFile:EY,getConfigObj:hY};function sY(e){let t=ri(iy);v_=Go(t.toJSON());let r;for(let o in e){let c=Ls[o.toLowerCase()];if(c===Mr.DATABASES){r=e[o];continue}if(!c&&o.endsWith("_package")&&(c=o),c!==void 0){let u=c.split("_"),_=Dm(c,e[o]);c==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{t.setIn([...u],_)}catch(l){bt.error(l)}}}r&&oy(t,r),Um(t);let s=t.toJSON();Nt=Go(s);let n=t.getIn(["rootPath"]),i=Ds.join(n,Pr.HDB_CONFIG_FILE);ar.createFileSync(i),ar.writeFileSync(i,String(t)),bt.trace(`Config file written to ${i}`)}a(sY,"createConfigFile");function oy(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!Mt.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(Mc.TABLES))for(let i in s[n][Mc.TABLES])for(let o in s[n][Mc.TABLES][i]){let c=s[n][Mc.TABLES][i][o],u=[Mr.DATABASES,n,Mc.TABLES,i,o];e.hasIn(u)?e.setIn(u,c):e.addIn(u,c)}else for(let i in s[n]){let o=s[n][i],c=[Mr.DATABASES,n,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(s){bt.error("Error parsing schemas CLI/env config arguments",s)}}a(oy,"setSchemasConfig");function nY(e){if(v_===void 0){let r=ri(iy);v_=Go(r.toJSON())}let t=Ls[e.toLowerCase()];if(t!==void 0)return v_[t.toLowerCase()]}a(nY,"getDefaultConfig");function ay(e){if(e==null){bt.error(tY);return}if(Nt===void 0){bt.trace(j1);return}let t=Ls[e.toLowerCase()];if(t!==void 0)return Nt[t.toLowerCase()]}a(ay,"getConfigValue");function Vi(e=Mt.getPropsFilePath()){let t=Mt.getEnvCliRootPath();return t?Ds.join(t,Pr.HDB_CONFIG_FILE):ny(e).get(Pr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(Vi,"getConfigFilePath");function Lm(e=!1){if(Nt===void 0||e){let t;if(!Mt.noBootFile()){t=Mt.getPropsFilePath();try{ar.accessSync(t,ar.constants.F_OK|ar.constants.R_OK)}catch(i){throw bt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=Vi(t),s;if(r.includes("config/settings.js"))try{uy(r);return}catch(i){if(i.code!==Pr.NODE_ERROR_CODES.ENOENT)throw i}try{s=ri(r)}catch(i){if(i.code===Pr.NODE_ERROR_CODES.ENOENT){bt.trace(`HarperDB config file not found at ${r}.
|
|
7
|
-
This can occur during early stages of install where the config file has not yet been created`);return}else throw bt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}iY(s,r),Um(s);let n=s.toJSON();if(X1.config=n,Nt=Go(n),Nt.logging_rotation_rotate)for(let i in sy)Nt[i]&&bt.error(`Config ${sy[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);bt.trace(Z1)}}a(Lm,"initConfig");function iY(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Ds.join(r,"database")),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],Ds.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Ds.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(bt.trace("Updating config file with missing config params"),ar.writeFileSync(t,String(e)))}a(iY,"checkForUpdatedConfig");function Um(e){let t=e.toJSON();t.componentsRoot=t.componentsRoot??t?.customFunctions?.root,t.threads=t.threads??t?.http?.threads;let r=Y1(t);if(r.error)throw P_.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(Um,"validateConfig");function oY(e,t){Nt===void 0&&(Nt={});let r=Ls[e.toLowerCase()];if(r===void 0){bt.trace(`Unable to update config object because config param '${e}' does not exist`);return}Nt[r.toLowerCase()]=t}a(oY,"updateConfigObject");function cy(e,t,r=void 0,s=!1,n=!1,i=!1){Nt===void 0&&Lm();let o=ay(Ls.hdb_root),c=Ds.join(o,Pr.HDB_CONFIG_FILE),u=ri(c),_;if(r===void 0&&e.toLowerCase()===Mr.DATABASES)_=t;else if(r===void 0){let f;if(i)f=e;else if(f=Ls[e.toLowerCase()],f===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=f.split("_"),h=Dm(f,t);u.setIn([...E],h)}else for(let f in r){let E=Ls[f.toLowerCase()];if(E===Mr.HTTP_SECUREPORT&&r[f]===Nt[Mr.HTTP_PORT]?.toString()&&u.setIn(["http","port"],null),E===Mr.OPERATIONSAPI_NETWORK_SECUREPORT&&r[f]===Nt[Mr.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&u.setIn(["operationsApi","network","port"],null),E===Mr.DATABASES){_=r[f];continue}if(!E&&f.endsWith("_package")&&(E=f),E!==void 0){let h=E.split("_"),p=Pr.LEGACY_CONFIG_PARAMS[f.toUpperCase()];p&&p.startsWith("customFunctions")&&u.hasIn(p.split("_"))&&(E=p,h=p.split("_"));let S=Dm(E,r[f]);E==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{h.length>1&&typeof u.getIn(h.slice(0,-1))=="boolean"&&u.deleteIn(h.slice(0,-1)),u.setIn([...h],S)}catch(R){bt.error(R)}}}_&&oy(u,_),Um(u);let l=u.getIn(["rootPath"]),d=Ds.join(l,Pr.HDB_CONFIG_FILE);s===!0&&aY(c,l),ar.writeFileSync(d,String(u)),n&&(Nt=Go(u.toJSON())),bt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(cy,"updateConfigValue");function aY(e,t){try{let r=Ds.join(t,"backup",`${Pr.HDB_CONFIG_FILE}.bak`);ar.copySync(e,r),bt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){bt.error(eY),bt.error(r)}}a(aY,"backupConfigFile");var cY=["databases"];function Go(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)),B_=e,r(e);function r(s){let n={};for(let i in s)if(s.hasOwnProperty(i))if(typeof s[i]=="object"&&s[i]!==null&&!Array.isArray(s[i])&&!cY.includes(i)){let o=r(s[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let u=i+"_"+c;!Mr[u.toUpperCase()]&&Ls[u]&&(n[Ls[u].toLowerCase()]=o[c]),n[u]=o[c]}}else n[i.toLowerCase()]=s[i];return n}a(r,"squashObj")}a(Go,"flattenConfig");function Dm(e,t){if(e===Mr.CLUSTERING_NODENAME||e===Mr.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(W1(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Mt.isObject(t)||t===null)return t;if(typeof t=="string"&&t.toLowerCase()==="true")return!0;if(typeof t=="string"&&t.toLowerCase()==="false")return!1}if(t===void 0||t.toLowerCase()==="undefined")return null;if(typeof t=="string"&&(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]")))try{return JSON.parse(t)}catch{}return Mt.autoCast(t)}a(Dm,"castConfigValue");function uY(){let e=Mt.getPropsFilePath(),t=Vi(e);return ri(t).toJSON()}a(uY,"getConfiguration");async function lY(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return cy(void 0,void 0,n,!0),rY}catch(i){throw typeof i=="string"||i instanceof String?z1(i,i,J1.BAD_REQUEST,void 0,void 0,!0):i}}a(lY,"setConfiguration");function Mm(){let e=Mt.getPropsFilePath();try{ar.accessSync(e,ar.constants.F_OK|ar.constants.R_OK)}catch(s){if(!Mt.noBootFile())throw bt.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Vi(e);return ri(t).toJSON()}a(Mm,"readConfigFile");function ri(e){return K1.parseDocument(ar.readFileSync(e,"utf8"),{simpleKeys:!0})}a(ri,"parseYamlDoc");function _Y(){let e=Mm(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Mt.isEmptyOrZeroLength(t)?[]:t;let r=ry(t);if(r)throw P_.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=Mt.isEmptyOrZeroLength(s)?[]:s;let n=ry(s);if(n)throw P_.CONFIG_VALIDATION(n.message);if(!Mt.isEmptyOrZeroLength(s)&&!Mt.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!Mt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw P_.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(_Y,"getClusteringRoutes");function uy(e){let t=ny(e);Nt={};for(let r in Ls){let s=t.get(r.toUpperCase());if(Mt.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=Ls[r].toLowerCase();n===Mr.LOGGING_ROOT?Nt[n]=Ds.dirname(s):Nt[n]=s}return Nt}a(uy,"initOldConfig");function dY(e){let t=Mm();return Q1.get(t,e.replaceAll("_","."))}a(dY,"getConfigFromFile");async function fY(e,t){let r=ri(Vi());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await ar.writeFile(Vi(),String(r))}a(fY,"addConfig");function EY(e){let t=Vi(Mt.getPropsFilePath()),r=ri(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=Ds.join(s,Pr.HDB_CONFIG_FILE);ar.writeFileSync(n,String(r))}a(EY,"deleteConfigFromFile");function hY(){return B_||(Lm(),B_)}a(hY,"getConfigObj")});var dy=T((Sce,_y)=>{"use strict";var H_=I(),x_=class{static{a(this,"BaseLicense")}constructor(t=0,r=H_.RAM_ALLOCATION_ENUM.DEFAULT,s=H_.LICENSE_VALUES.VERSION_DEFAULT,n){this.exp_date=t,this.ram_allocation=r,this.version=s,this.fingerprint=n}},Pm=class extends x_{static{a(this,"ExtendedLicense")}constructor(t=0,r=H_.RAM_ALLOCATION_ENUM.DEFAULT,s=H_.LICENSE_VALUES.VERSION_DEFAULT,n,i=!1){super(t,r,s,n),this.enterprise=i}};_y.exports={BaseLicense:x_,ExtendedLicense:Pm}});var $o=T((gce,Sy)=>{"use strict";var Vo=require("fs-extra"),Ey=L_(),hy=require("crypto"),mY=require("moment"),pY=require("uuid").v4,zt=G(),Bm=require("path"),SY=W(),si=I(),{totalmem:fy}=require("os"),TY=dy().ExtendedLicense,ko="invalid license key format",gY="061183",RY="mofi25",AY="aes-256-cbc",OY=16,bY=32,my=j();my.initSync();var vm;Sy.exports={validateLicense:py,generateFingerPrint:yY,licenseSearch:qm,getLicense:CY,checkMemoryLimit:DY};function Hm(){return Bm.join(my.getHdbBasePath(),si.LICENSE_KEY_DIR_NAME,si.LICENSE_FILE_NAME)}a(Hm,"getLicenseDirPath");function NY(){let e=Hm();return Bm.join(e,si.LICENSE_FILE_NAME)}a(NY,"getLicenseFilePath");function xm(){let e=Hm();return Bm.join(e,si.REG_KEY_FILE_NAME)}a(xm,"getFingerPrintFilePath");async function yY(){let e=xm();try{return await Vo.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await IY();throw zt.error(`Error writing fingerprint file to ${e}`),zt.error(t),new Error("There was an error generating the fingerprint")}}a(yY,"generateFingerPrint");async function IY(){let e=pY(),t=Ey.hash(e),r=xm();try{await Vo.mkdirp(Hm()),await Vo.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw zt.error(`Error writing fingerprint file to ${r}`),zt.error(s),new Error("There was an error generating the fingerprint")}return t}a(IY,"writeFingerprint");function py(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:si.RAM_ALLOCATION_ENUM.DEFAULT,version:si.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return zt.error("empty license key passed to validate."),r;let s=xm(),n=!1;try{n=Vo.statSync(s)}catch(i){zt.error(i)}if(n){let i;try{i=Vo.readFileSync(s,"utf8")}catch{zt.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(RY),c=o[1];c=Buffer.concat([Buffer.from(c)],OY);let u=Buffer.concat([Buffer.from(i)],bY),_=hy.createDecipheriv(AY,u,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let l=null;try{l=_.update(o[0],"hex","utf8"),l.trim(),l+=_.final("utf8")}catch{let E=wY(o[0],i);if(E)l=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(ko),zt.error(ko),new Error(ko)}let d;if(isNaN(l))try{d=JSON.parse(l),r.version=d.version,r.exp_date=d.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),d.ram_allocation&&(r.ram_allocation=d.ram_allocation)}catch{throw console.error(ko),zt.error(ko),new Error(ko)}else r.exp_date=l;r.exp_date<mY().valueOf()&&(r.valid_date=!1),Ey.validate(o[1],`${gY}${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||zt.error("Invalid licence"),r}a(py,"validateLicense");function wY(e,t){try{let r=hy.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{zt.warn("Check old license failed")}}a(wY,"checkOldLicense");function qm(){let e=new TY,t=[];try{t=Vo.readFileSync(NY(),"utf-8").split(si.NEW_LINE)}catch(r){r.code==="ENOENT"?zt.info("no license file found"):zt.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(SY.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=py(n.license_key,n.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.ram_allocation=i.ram_allocation,e.enterprise=!0)}catch(n){zt.error("There was an error parsing the license string."),zt.error(n),e.ram_allocation=si.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return vm=e,e}a(qm,"licenseSearch");async function CY(){return vm||await qm(),vm}a(CY,"getLicense");function DY(){let e=qm().ram_allocation,t=process.constrainedMemory?.()||fy();if(t=Math.round(Math.min(t,fy())/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(DY,"checkMemoryLimit")});var cs=T((Nce,Py)=>{"use strict";var Ay="username is required",Oy="nothing to update, must supply active, role or password to update",by="password cannot be an empty string",Ny="If role is specified, it cannot be empty.",yy="active must be true or false";Py.exports={addUser:qY,alterUser:FY,dropUser:kY,getSuperUser:KY,userInfo:VY,listUsers:F_,listUsersExternal:$Y,setUsersToGlobal:Ko,findAndValidateUser:Uy,getClusterUser:WY,USERNAME_REQUIRED:Ay,ALTERUSER_NOTHING_TO_UPDATE:Oy,EMPTY_PASSWORD:by,EMPTY_ROLE:Ny,ACTIVE_BOOLEAN:yy};var Iy=Ur(),LY=ti(),km=L_(),wy=KN(),Cy=os(),Vm=On(),Br=W(),Dy=require("validate.js"),Ee=G(),{promisify:UY}=require("util"),$m=Rn(),Ty=I(),gy=Ge(),MY=vr(),Ace=j(),Oce=$o(),PY=vi(),{table:bce}=(pe(),te(Fe)),{handleHDBError:Xs,hdb_errors:vY}=Z(),{HTTP_STATUS_CODES:js,AUTHENTICATION_ERROR_MSGS:Fm,HDB_ERROR_MSGS:Yo}=vY,{UserEventMsg:Ym}=Us(),Gm=require("lodash"),{server:Km}=(ss(),te(Lo)),BY=G();Km.getUser=(e,t)=>Uy(e,t,t!=null);var Ly={username:!0,active:!0,role:!0,password:!0},Ry=new Map,q_=Cy.searchByValue,HY=Cy.searchByHash,xY=UY(LY.delete);async function qY(e){let t=Dy.cleanAttributes(e,Ly),r=wy.addUserValidation(t);if(r)throw Xs(new Error,r.message,js.BAD_REQUEST,void 0,void 0,!0);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},n;try{n=await q_(s),n=n&&Array.from(n)}catch(u){throw Ee.error("There was an error searching for a role in add user"),Ee.error(u),u}if(!n||n.length<1)throw Xs(new Error,Yo.ROLE_NAME_NOT_FOUND(t.role),js.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw Xs(new Error,Yo.DUP_ROLES_FOUND(t.role),js.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=$m.encrypt(t.password)),t.password=km.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await Iy.insert(i)}catch(u){throw Ee.error("There was an error searching for a user."),Ee.error(u),u}Ee.debug(o);try{await Ko()}catch(u){throw Ee.error("Got an error setting users to global"),Ee.error(u),u}if(o.skipped_hashes.length===1)throw Xs(new Error,Yo.USER_ALREADY_EXISTS(t.username),js.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],Vm.signalUserChange(new Ym(process.pid)),`${c.username} successfully added`}a(qY,"addUser");async function FY(e){let t=Dy.cleanAttributes(e,Ly);if(Br.isEmptyOrZeroLength(t.username))throw new Error(Ay);if(Br.isEmptyOrZeroLength(t.password)&&Br.isEmptyOrZeroLength(t.role)&&Br.isEmptyOrZeroLength(t.active))throw new Error(Oy);if(!Br.isEmpty(t.password)&&Br.isEmptyOrZeroLength(t.password.trim()))throw new Error(by);if(!Br.isEmpty(t.active)&&!Br.isBoolean(t.active))throw new Error(yy);let r=GY(t.username);if(!Br.isEmpty(t.password)&&!Br.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=$m.encrypt(t.password)),t.password=km.hash(t.password)),t.role==="")throw new Error(Ny);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 q_(i)||[])}catch(c){throw Ee.error("Got an error searching for a role."),Ee.error(c),c}if(!o||o.length===0){let c=Yo.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Ee.error(c),Xs(new Error,c,js.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=Yo.ALTER_USER_DUP_ROLES(t.role);throw Ee.error(c),Xs(new Error,c,js.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await Iy.update(s)}catch(i){throw Ee.error("Error during update."),Ee.error(i),i}try{await Ko()}catch(i){throw Ee.error("Got an error setting users to global"),Ee.error(i),i}return Vm.signalUserChange(new Ym(process.pid)),n}a(FY,"alterUser");function GY(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(GY,"isClusterUser");async function kY(e){try{let t=wy.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(Br.isEmpty(global.hdb_users.get(e.username)))throw Xs(new Error,Yo.USER_NOT_EXIST(e.username),js.NOT_FOUND,void 0,void 0,!0);let s;try{s=await xY(r)}catch(n){throw Ee.error("Got an error deleting a user."),Ee.error(n),n}Ee.debug(s);try{await Ko()}catch(n){throw Ee.error("Got an error setting users to global."),Ee.error(n),n}return Vm.signalUserChange(new Ym(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(kY,"dropUser");async function VY(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=Gm.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},s;try{s=await HY(r)}catch(n){throw Ee.error("Got an error searching for a role."),Ee.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Ee.error(r),r}return t}a(VY,"userInfo");async function $Y(){let e;try{e=await F_()}catch(t){throw Ee.error("Got an error listing users."),Ee.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($Y,"listUsersExternal");async function F_(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await q_(e)}catch(o){throw Ee.error("Got an error searching for roles."),Ee.error(o),o}let r={};for(let o of t)r[o.id]=Gm.cloneDeep(o);if(Object.keys(r).length===0)return null;let s={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},n;try{n=await q_(s)}catch(o){throw Ee.error("Got an error searching for users."),Ee.error(o),o}let i=new Map;for(let o of n)o=Gm.cloneDeep(o),o.role=r[o.role],YY(o.role),i.set(o.username,o);return i}catch(e){throw Ee.error("got an error listing users"),Ee.error(e),Br.errorizeMessage(e)}return null}a(F_,"listUsers");function YY(e){try{if(!e){Ee.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(PY)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Ee.error("Got an error trying to set system permissions."),Ee.error(t)}}a(YY,"appendSystemTablesToRole");async function Ko(){try{let e=await F_();global.hdb_users=e}catch(e){throw Ee.error(e),e}}a(Ko,"setUsersToGlobal");async function Uy(e,t,r=!0){global.hdb_users||await Ko();let s=global.hdb_users.get(e);if(!s){if(!r)return{username:e};throw Xs(new Error,Fm.GENERIC_AUTH_FAIL,js.UNAUTHORIZED,void 0,void 0,!0)}if(s&&!s.active)throw Xs(new Error,Fm.USER_INACTIVE,js.UNAUTHORIZED,void 0,void 0,!0);let n={active:s.active,username:s.username};if(s.refresh_token&&(n.refresh_token=s.refresh_token),s.role&&(n.role=s.role),r===!0){if(Ry.get(t)===s.password)return n;if(km.validate(s.password,t))Ry.set(t,s.password);else throw Xs(new Error,Fm.GENERIC_AUTH_FAIL,js.UNAUTHORIZED,void 0,void 0,!0)}return n}a(Uy,"findAndValidateUser");async function KY(){global.hdb_users||await Ko();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(KY,"getSuperUser");async function WY(){let e=await F_(),t=MY.getConfigFromFile(Ty.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Br.isEmpty(r)&&r?.role?.role===Ty.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=$m.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+gy.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+gy.SERVER_SUFFIX.ADMIN,r}a(WY,"getClusterUser");var My=[];Km.invalidateUser=function(e){for(let t of My)try{t(e)}catch(r){BY.error("Error invalidating user",r)}};Km.onInvalidatedUser=function(e){My.push(e)}});var vc=T((Cce,xy)=>{"use strict";var $i=G(),Hr=I(),QY=fN(),Ice=An(),wce=jn(),zY=cs(),{validateEvent:vy}=Us(),Pc=Cs(),JY=require("process"),{resetDatabases:XY}=(pe(),te(Fe)),jY={[Hr.ITC_EVENT_TYPES.SCHEMA]:ZY,[Hr.ITC_EVENT_TYPES.USER]:Hy};async function ZY(e){let t=vy(e);if(t){$i.error(t);return}$i.trace("ITC schemaHandler received schema event:",e),await QY(e.message),await eK(e.message)}a(ZY,"schemaHandler");async function eK(e){try{Pc.resetReadTxn(Hr.SYSTEM_SCHEMA_NAME,Hr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Pc.resetReadTxn(Hr.SYSTEM_SCHEMA_NAME,Hr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Pc.resetReadTxn(Hr.SYSTEM_SCHEMA_NAME,Hr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=XY();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){$i.error(t)}}a(eK,"syncSchemaMetadata");var By=[];async function Hy(e){try{try{Pc.resetReadTxn(Hr.SYSTEM_SCHEMA_NAME,Hr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Pc.resetReadTxn(Hr.SYSTEM_SCHEMA_NAME,Hr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){$i.warn(r)}let t=vy(e);if(t){$i.error(t);return}$i.trace(`ITC userHandler ${Hr.HDB_ITC_CLIENT_PREFIX}${JY.pid} received user event:`,e),await zY.setUsersToGlobal();for(let r of By)r()}catch(t){$i.error(t)}}a(Hy,"userHandler");Hy.addListener=function(e){By.push(e)};xy.exports=jY});var Us=T((vce,Fy)=>{"use strict";var Lce=G(),Wm=W(),tK=I(),{ITC_ERRORS:Bc}=yr(),{parentPort:Uce,threadId:rK,isMainThread:sK,workerData:Mce}=require("worker_threads"),{onMessageFromWorkers:nK,broadcast:Pce,broadcastWithAcknowledgement:iK}=Qe();Fy.exports={sendItcEvent:oK,validateEvent:qy,SchemaEventMsg:aK,UserEventMsg:cK};var G_;nK(async(e,t)=>{G_=G_||vc(),qy(e),G_[e.type]&&await G_[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function oK(e){return!sK&&e.message&&(e.message.originator=rK),iK(e)}a(oK,"sendItcEvent");function qy(e){if(typeof e!="object")return Bc.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||Wm.isEmpty(e.type))return Bc.MISSING_TYPE;if(!e.hasOwnProperty("message")||Wm.isEmpty(e.message))return Bc.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||Wm.isEmpty(e.message.originator))return Bc.MISSING_ORIGIN;if(tK.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Bc.INVALID_EVENT(e.type)}a(qy,"validateEvent");function aK(e,t,r,s=void 0,n=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=s,this.attribute=n}a(aK,"SchemaEventMsg");function cK(e){this.originator=e}a(cK,"UserEventMsg")});var On=T((xce,$y)=>{"use strict";var Gy=I(),Hce=W(),k_=G(),ky=lN(),Wo,{sendItcEvent:Vy}=Us();function uK(e){try{k_.trace("signalSchemaChange called with message:",e),Wo=Wo||vc();let t=new ky(Gy.ITC_EVENT_TYPES.SCHEMA,e);return Wo.schema(t),Vy(t)}catch(t){k_.error(t)}}a(uK,"signalSchemaChange");function lK(e){try{k_.trace("signalUserChange called with message:",e),Wo=Wo||vc();let t=new ky(Gy.ITC_EVENT_TYPES.USER,e);return Wo.user(t),Vy(t)}catch(t){k_.error(t)}}a(lK,"signalUserChange");$y.exports={signalSchemaChange:uK,signalUserChange:lK}});var V_=T((Fce,Ky)=>{"use strict";var Yy=W(),_K=I(),dK=G(),fK=g_(),EK=T_(),hK=On(),{SchemaEventMsg:mK}=Us(),pK="already exists in";Ky.exports=SK;async function SK(e,t,r){if(Yy.isEmptyOrZeroLength(r))return r;let s=[];Yy.isEmptyOrZeroLength(t.attributes)||t.attributes.forEach(i=>{s.push(i.attribute)});let n=r.filter(i=>s.indexOf(i)<0);return n.length===0||await Promise.all(n.map(async i=>{await TK(e,t.schema,t.name,i)})),n}a(SK,"lmdbCheckForNewAttributes");async function TK(e,t,r,s){let n=new EK(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await gK(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(pK))dK.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(TK,"createNewAttribute");async function gK(e){let t;return t=await fK(e),hK.signalSchemaChange(new mK(process.pid,_K.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(gK,"createAttribute")});var Qo=T((kce,Wy)=>{"use strict";var Qm=class{static{a(this,"LMDBTransactionObject")}constructor(t,r,s,n,i=void 0){this.operation=t,this.user_name=r,this.timestamp=s,this.hash_values=n,this.origin=i}};Wy.exports=Qm});var zy=T(($ce,Qy)=>{"use strict";var RK=Qo(),AK=I().OPERATIONS_ENUM,zm=class extends RK{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(AK.INSERT,r,s,n,i),this.records=t}};Qy.exports=zm});var Xy=T((Kce,Jy)=>{"use strict";var OK=Qo(),bK=I().OPERATIONS_ENUM,Jm=class extends OK{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(bK.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};Jy.exports=Jm});var Zy=T((Qce,jy)=>{"use strict";var NK=Qo(),yK=I().OPERATIONS_ENUM,Xm=class extends NK{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(yK.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};jy.exports=Xm});var tI=T((Jce,eI)=>{"use strict";var IK=Qo(),wK=I().OPERATIONS_ENUM,jm=class extends IK{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super(wK.DELETE,s,n,t,i),this.original_records=r}};eI.exports=jm});var Hc=T((Zce,iI)=>{"use strict";var jce=require("path"),rI=$e(),CK=zy(),DK=Xy(),LK=Zy(),UK=tI(),zo=Et(),sI=W(),{CONFIG_PARAMS:MK}=I(),nI=j();nI.initSync();var $_=I().OPERATIONS_ENUM,{getTransactionAuditStorePath:PK}=Ke();iI.exports=vK;async function vK(e,t){if(nI.get(MK.LOGGING_AUDITLOG)===!1)return;let r=PK(e.schema,e.table),s=await rI.openEnvironment(r,e.table,!0),n=BK(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){rI.initializeDBIs(s,zo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,zo.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[zo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[zo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),sI.isEmpty(n.user_name)||s.dbis[zo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[zo.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(vK,"writeTransaction");function BK(e,t){let r=sI.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===$_.INSERT)return new CK(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===$_.UPDATE)return new DK(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===$_.UPSERT)return new LK(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===$_.DELETE)return new UK(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(BK,"createTransactionObject")});var Zm=T((rue,oI)=>{"use strict";var HK=Nc(),tue=yc(),xc=I(),xK=Dc(),qK=xo().insertRecords,FK=$e(),GK=G(),kK=V_(),{getSchemaPath:VK}=Ke(),$K=Hc();oI.exports=YK;async function YK(e){try{let{schema_table:t,attributes:r}=HK(e);xK(e,r,t.hash_attribute),e.schema!==xc.SYSTEM_SCHEMA_NAME&&(r.includes(xc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(xc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(xc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(xc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await kK(e.hdb_auth_header,t,r),n=VK(e.schema,e.table),i=await FK.openEnvironment(n,e.table),o=await qK(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await $K(e,o)}catch(c){GK.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(YK,"lmdbCreateRecords")});var uI=T((nue,cI)=>{"use strict";var aI=I(),KK=Zm(),WK=yc(),QK=require("fs-extra"),{getSchemaPath:zK}=Ke();cI.exports=JK;async function JK(e){let t=[{name:e.schema,createddate:Date.now()}],r=new WK(aI.SYSTEM_SCHEMA_NAME,aI.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await KK(r),await QK.mkdirp(zK(e.schema))}a(JK,"lmdbCreateSchema")});var _I=T((oue,lI)=>{"use strict";var ep=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};lI.exports=ep});var hI=T((_ue,EI)=>{"use strict";var dI=$e(),tp=Ir(),rp=yr().LMDB_ERRORS_ENUM,XK=Et(),fI=G(),cue=W(),jK=require("lmdb"),ZK=_I(),eW=I(),{OVERFLOW_MARKER:uue,MAX_SEARCH_KEY_LENGTH:lue}=XK,tW=eW.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function rW(e,t,r,s){if(tp.validateEnv(e),t===void 0)throw new Error(rp.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(rp.IDS_REQUIRED):new Error(rp.IDS_MUST_BE_ITERABLE);try{let n=dI.listDBIs(e);dI.initializeDBIs(e,t,n);let i=new ZK,o,c=[],u=[];for(let f=0,E=r.length;f<E;f++)try{o=r[f];let h=e.dbis[t].get(o);if(!h||s&&h[tW]>s){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,jK.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<n.length;S++){let R=n[S];if(!h.hasOwnProperty(R)||R===t)continue;let O=e.dbis[R],y=h[R];if(y!=null)try{let q=tp.getIndexedValues(y);if(q)for(let K=0,H=q.length;K<H;K++)O.remove(q[K],o)}catch{fI.warn(`cannot delete from attribute: ${R}, ${y}:${o}`)}}});c.push(p),u.push(o),i.original_records.push(h)}catch(h){fI.warn(h),i.skipped.push(o)}let _=[],l=await Promise.all(c);for(let f=0,E=l.length;f<E;f++)l[f]===!0?i.deleted.push(u[f]):(i.skipped.push(u[f]),_.push(f));let d=0;for(let f=0;f<_.length;f++){let E=_[f];i.original_records.splice(E-d,1),d++}return i.txn_time=tp.getNextMonotonicTime(),i}catch(n){throw n}}a(rW,"deleteRecords");EI.exports={deleteRecords:rW}});var qc=T((fue,pI)=>{"use strict";var Jo=W(),sW=hI(),nW=$e(),{getSchemaPath:iW}=Ke(),oW=Hc(),aW=G();pI.exports=cW;async function cW(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(Jo.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Jo.isEmptyOrZeroLength(e.hash_values)&&!Jo.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][s];Jo.isEmpty(u)||e.hash_values.push(u)}}if(Jo.isEmptyOrZeroLength(e.hash_values))return mI([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Jo.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[s]:e.hash_values[c]}}let n=iW(e.schema,e.table),i=await nW.openEnvironment(n,e.table),o=await sW.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await oW(e,o)}catch(c){aW.error(`unable to write transaction due to ${c.message}`)}return mI(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(cW,"lmdbDeleteRecords");function mI(e,t,r){let s=e.length+t.length,n=s===1?"record":"records";return{message:`${e.length} of ${s} ${n} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(mI,"createDeleteResponse")});var np=T((mue,SI)=>{"use strict";var uW=I(),hue=Ir();function sp(e,t){let r=Object.create(null);if(t.length===1&&uW.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let s=0;s<t.length;s++){let n=t[s],i=e[n];r[n]=i===void 0?null:i}return r}a(sp,"parseRow");function lW(e,t,r,s){let n=sp(r,e);s.push(n)}a(lW,"searchAll");function _W(e,t,r,s){let n=sp(r,e);s[t]=n}a(_W,"searchAllToMap");function dW(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(dW,"iterateDBI");function Yi(e,t,r,s,n){let i=Object.create(null);i[n]=e;let o;s===n?o=e:(o=t,s!==void 0&&(i[s]=o)),r[0].push(o),r[1].push(i)}a(Yi,"pushResults");function fW(e,t,r,s,n,i){t.toString().endsWith(e)&&Yi(t,r,s,n,i)}a(fW,"endsWith");function EW(e,t,r,s,n,i){t.toString().includes(e)&&Yi(t,r,s,n,i)}a(EW,"contains");function hW(e,t,r,s,n,i){t>e&&Yi(t,r,s,n,i)}a(hW,"greaterThanCompare");function mW(e,t,r,s,n,i){t>=e&&Yi(t,r,s,n,i)}a(mW,"greaterThanEqualCompare");function pW(e,t,r,s,n,i){t<e&&Yi(t,r,s,n,i)}a(pW,"lessThanCompare");function SW(e,t,r,s,n,i){t<=e&&Yi(t,r,s,n,i)}a(SW,"lessThanEqualCompare");SI.exports={parseRow:sp,searchAll:lW,searchAllToMap:_W,iterateDBI:dW,endsWith:fW,contains:EW,greaterThanCompare:hW,greaterThanEqualCompare:mW,lessThanCompare:pW,lessThanEqualCompare:SW,pushResults:Yi}});var Xo=T((Rue,NI)=>{"use strict";var ni=$e(),Sue=G(),xr=Ir(),Y_=Et(),lt=yr().LMDB_ERRORS_ENUM,Tue=W(),TW=I(),K_=np(),{parseRow:gW}=K_,gue=require("lmdb"),{OVERFLOW_MARKER:TI,MAX_SEARCH_KEY_LENGTH:RW}=Y_;function gI(e,t,r,s=!1,n=void 0,i=void 0){return Ki(e,t,r,(o,c)=>c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))}a(gI,"iterateFullIndex");function Fc(e,t,r,s,n,i=!1,o=void 0,c=void 0,u=!1,_=!1){return Ki(e,t,r,(l,d,f,E)=>{let O={transaction:l,start:i===!0?n:s,end:i===!0?s:n,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!u:!_,exclusiveStart:i===!0?_:u};return E===r?(O.values=!1,d.getRange(O).map(y=>({value:y}))):d.getRange(O)})}a(Fc,"iterateRangeBetween");function Ki(e,t,r,s){let n=e.database||e,i=ni.openDBI(n,r);i[Y_.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&ni.openDBI(n,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=s(o,i,n,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(Ki,"setupTransaction");function RI(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(TI)){if(!n)if(r)n=ni.openDBI(e,r);else{let u=ni.listDBIs(e);for(let _=0,l=u.length;_<l&&(n=ni.openDBI(e,u[_]),!n[Y_.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(RI,"getOverflowCheck");function AW(e,t,r,s=!1,n=void 0,i=void 0){if(xr.validateEnv(e),t===void 0)throw new Error(lt.HASH_ATTRIBUTE_REQUIRED);return Ki(e,t,t,(o,c,u)=>(W_(r),r=Gc(u,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(_=>gW(_.value,r))))}a(AW,"searchAll");function OW(e,t,r,s=!1,n=void 0,i=void 0){if(xr.validateEnv(e),t===void 0)throw new Error(lt.HASH_ATTRIBUTE_REQUIRED);W_(r),r=Gc(e.database||e,r);let o=new Map;for(let{key:c,value:u}of gI(e,t,t,s,n,i))o.set(c,K_.parseRow(u,r));return o}a(OW,"searchAllToMap");function bW(e,t,r=!1,s=void 0,n=void 0){if(xr.validateEnv(e),t===void 0)throw new Error(lt.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=gI(e,void 0,t,r,s,n),c=o.transaction,u=RI(c.database,c,void 0,t);for(let{key:_,value:l}of o){let d=u(_,l);i[d]===void 0&&(i[d]=[]),i[d].push(l)}return i}a(bW,"iterateDBI");function NW(e,t){if(xr.validateEnv(e),t===void 0)throw new Error(lt.HASH_ATTRIBUTE_REQUIRED);return ni.statDBI(e,t).entryCount}a(NW,"countAll");function yW(e,t,r,s,n=!1,i=void 0,o=void 0){return ii(e,r,s),Ki(e,t,r,(c,u,_,l)=>(s=xr.convertKeyValueToWrite(s),l===r?u.get(s,{transaction:c,lazy:!0})===void 0?[]:[{key:s,value:s}]:u.getValues(s,{transaction:c,reverse:n,limit:i,offset:o}).map(d=>({key:s,value:d}))))}a(yW,"equals");function IW(e,t,r){return ii(e,t,r),ni.openDBI(e,t).getValuesCount(r)}a(IW,"count");function wW(e,t,r,s,n=!1,i=void 0,o=void 0){return ii(e,r,s),Ki(e,null,r,(c,u)=>{s=xr.convertKeyValueToWrite(s);let _=!0;typeof s=="number"&&(_=!1);let l;if(n===!0){let d;for(let f of u.getKeys({transaction:c,start:s}))if(!f.startsWith(s)){d=f;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),l=u.getRange({transaction:c,start:d,end:void 0,reverse:n,limit:i,offset:o}).map(f=>{let{key:E}=f;if(E!==d){if(E.toString().startsWith(s))return f;if(_===!0)return l.DONE}}),l.filter(f=>f)}else return l=u.getRange({transaction:c,start:s,reverse:n,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(s))return d;if(_===!0)return l.DONE}),_?l:l.filter(d=>d)})}a(wW,"startsWith");function CW(e,t,r,s,n=!1,i=void 0,o=void 0){return AI(e,t,r,s,n,i,o,!0)}a(CW,"endsWith");function AI(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return ii(e,r,s),Ki(e,null,r,(u,_,l,d)=>{let f=RI(l,u,d,r);return o=Number.isInteger(o)?o:0,_.getKeys({transaction:u,end:n?!1:void 0,reverse:n}).flatMap(E=>{let h=E.toString();return h.endsWith(TI)?_.getValues(E,{transaction:u}).map(p=>{let S=f(E,p);if(c?S.endsWith(s):S.includes(s))return{key:S,value:p}}).filter(p=>p):(c?h.endsWith(s):h.includes(s))?_[Y_.DBI_DEFINITION_NAME].is_hash_attribute?{key:E,value:E}:_.getValues(E,{transaction:u}).map(p=>({key:E,value:p})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(AI,"contains");function DW(e,t,r,s,n=!1,i=void 0,o=void 0){ii(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),Fc(e,t,r,s,u,n,i,o,!0,!1)}a(DW,"greaterThan");function LW(e,t,r,s,n=!1,i=void 0,o=void 0){ii(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),Fc(e,t,r,s,u,n,i,o,!1,!1)}a(LW,"greaterThanEqual");function UW(e,t,r,s,n=!1,i=void 0,o=void 0){ii(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),Fc(e,t,r,u,s,n,i,o,!1,!0)}a(UW,"lessThan");function MW(e,t,r,s,n=!1,i=void 0,o=void 0){ii(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),Fc(e,t,r,u,s,n,i,o,!1,!1)}a(MW,"lessThanEqual");function PW(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(xr.validateEnv(e),r===void 0)throw new Error(lt.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(lt.START_VALUE_REQUIRED);if(n===void 0)throw new Error(lt.END_VALUE_REQUIRED);if(s=xr.convertKeyValueToWrite(s),n=xr.convertKeyValueToWrite(n),s>n)throw new Error(lt.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Fc(e,t,r,s,n,i,o,c)}a(PW,"between");function vW(e,t,r,s){xr.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(lt.HASH_ATTRIBUTE_REQUIRED);if(W_(r),r=Gc(n,r),s===void 0)throw new Error(lt.ID_REQUIRED);let o=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(o=K_.parseRow(c,r)),o}a(vW,"searchByHash");function BW(e,t,r){xr.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(lt.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(lt.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(BW,"checkHashExists");function HW(e,t,r,s,n=[]){return bI(e,t,r,s,n),OI(e,t,r,s,n).map(i=>i[1])}a(HW,"batchSearchByHash");function xW(e,t,r,s,n=[]){bI(e,t,r,s,n);let i=new Map;for(let[o,c]of OI(e,t,r,s,n))i.set(o,c);return i}a(xW,"batchSearchByHashToMap");function OI(e,t,r,s,n=[]){return Ki(e,t,t,(i,o,c)=>{r=Gc(c,r);let u=r.length<3;return s.map(_=>{let l=c.dbis[t].get(_,{transaction:i,lazy:u});if(l)return[_,K_.parseRow(l,r)];n.push(_)}).filter(_=>_)})}a(OI,"batchHashSearch");function bI(e,t,r,s,n){if(xr.validateEnv(e),t===void 0)throw new Error(lt.HASH_ATTRIBUTE_REQUIRED);if(W_(r),s==null)throw new Error(lt.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(lt.IDS_MUST_BE_ITERABLE)}a(bI,"initializeBatchSearchByHash");function W_(e){if(!Array.isArray(e))throw e===void 0?new Error(lt.FETCH_ATTRIBUTES_REQUIRED):new Error(lt.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(W_,"validateFetchAttributes");function ii(e,t,r){if(xr.validateEnv(e),t===void 0)throw new Error(lt.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(lt.SEARCH_VALUE_REQUIRED);if(r?.length>RW)throw new Error(lt.SEARCH_VALUE_TOO_LARGE)}a(ii,"validateComparisonFunctions");function Gc(e,t){return t.length===1&&TW.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=ni.listDBIs(e)),t}a(Gc,"setGetWholeRowAttributes");NI.exports={searchAll:AW,searchAllToMap:OW,count:IW,countAll:NW,equals:yW,startsWith:wW,endsWith:CW,contains:AI,searchByHash:vW,setGetWholeRowAttributes:Gc,batchSearchByHash:HW,batchSearchByHashToMap:xW,checkHashExists:BW,iterateDBI:bW,greaterThan:DW,greaterThanEqual:LW,lessThan:UW,lessThanEqual:MW,between:PW}});var jo=T((Oue,DI)=>{var yI=require("lodash"),II=ze(),ue=require("joi"),qW=W(),{hdb_schema_table:kc,checkValidTable:wI,hdb_table:CI,hdb_database:Q_}=Qs(),{handleHDBError:FW,hdb_errors:GW}=Z(),{getDatabases:kW}=(pe(),te(Fe)),{HTTP_STATUS_CODES:VW}=GW,$W=ue.object({database:Q_,schema:Q_,table:CI,search_attribute:kc,search_value:ue.any().required(),get_attributes:ue.array().min(1).items(ue.alternatives(kc,ue.object())).optional(),desc:ue.bool(),limit:ue.number().integer().min(1),offset:ue.number().integer().min(0)}),YW=ue.object({database:Q_,schema:Q_,table:CI,operator:ue.string().valid("and","or").default("and").lowercase(),offset:ue.number().integer().min(0),limit:ue.number().integer().min(1),get_attributes:ue.array().min(1).items(ue.alternatives(kc,ue.object())).optional(),sort:ue.object({attribute:ue.alternatives(kc,ue.array().min(1)),descending:ue.bool().optional()}).optional(),conditions:ue.array().min(1).items(ue.alternatives(ue.object({operator:ue.string().valid("and","or").default("and").lowercase(),conditions:ue.array()}),ue.object({search_attribute:ue.alternatives(kc,ue.array().min(1)),search_type:ue.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:ue.when("search_type",{switch:[{is:"equals",then:ue.any()},{is:"between",then:ue.array().items(ue.alternatives([ue.string(),ue.number()])).length(2)}],otherwise:ue.alternatives(ue.string(),ue.number())}).required()}))).required()});DI.exports=function(e,t){let r=null;switch(t){case"value":r=II.validateBySchema(e,$W);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(wI("database",e.schema)),i(wI("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(o=>typeof o=="string"||typeof o=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(o=>typeof o=="string"||typeof o=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),n&&(r=new Error(n.trim()));break;case"conditions":r=II.validateBySchema(e,YW);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=qW.checkGlobalSchemaTable(e.schema,e.table);if(n)return FW(new Error,n,VW.NOT_FOUND);let o=kW()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let u=a(l=>{for(let d=0,f=l.conditions.length;d<f;d++){let E=l.conditions[d];E.conditions?u(E):c.push(E.search_attribute)}},"addConditions");t==="conditions"&&u(e);let _=yI.filter(c,l=>l!=="*"&&l.attribute!=="*"&&!Array.isArray(l)&&!yI.some(o,d=>d===l||d.attribute===l||d.attribute===l.attribute));if(_&&_.length>0){let l=_.join(", ");return l=l.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${l}'`)}}return r}});var ip=T((Nue,LI)=>{"use strict";var KW=$e(),WW=jo(),{getSchemaPath:QW}=Ke();LI.exports=zW;function zW(e){let t=WW(e,"hashes");if(t)throw t;let r=QW(e.schema,e.table);return KW.openEnvironment(r,e.table)}a(zW,"initialize")});var op=T((Iue,UI)=>{"use strict";var JW=Xo(),XW=ip();UI.exports=jW;async function jW(e){let t=await XW(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return JW.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(jW,"lmdbGetDataByHash")});var Zo=T((Cue,MI)=>{"use strict";var ap=class{static{a(this,"SearchByHashObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};MI.exports=ap});var vI=T((Uue,PI)=>{"use strict";var Lue=Zo(),ZW=Xo(),eQ=ip();PI.exports=tQ;async function tQ(e){let t=await eQ(e),r=global.hdb_schema[e.schema][e.table];return ZW.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(tQ,"lmdbSearchByHash")});var Zs=T((Pue,BI)=>{"use strict";var cp=class{static{a(this,"SearchObject")}constructor(t,r,s,n,i,o,c,u=!1,_=void 0,l=void 0){this.schema=t,this.table=r,this.search_attribute=s,this.search_value=n,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=u,this.limit=_,this.offset=l}};BI.exports=cp});var z_=T((Bue,kI)=>{"use strict";var Jt=Xo(),rQ=$e(),sQ=W(),le=Et(),Wi=I(),nQ=vi(),HI=yr().LMDB_ERRORS_ENUM,{getSchemaPath:iQ}=Ke(),bn=Wi.SEARCH_WILDCARDS;async function oQ(e,t,r){let s;e.schema===Wi.SYSTEM_SCHEMA_NAME?s=nQ[e.table]:s=global.hdb_schema[e.schema][e.table];let n=GI(e,s.hash_attribute,r,t);return qI(e,n,s.hash_attribute,r)}a(oQ,"prepSearch");async function qI(e,t,r,s){let n=iQ(e.schema,e.table),i=await rQ.openEnvironment(n,e.table),o=FI(i,e,t,r),c=o.transaction||i;if([le.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,le.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,le.SEARCH_TYPES.SEARCH_ALL,le.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(aQ(e,r)===!1){let l=e.search_attribute;if(l===r)return s?xI(o,()=>!0):o.map(f=>({[r]:f.key}));let d=a(f=>({[r]:f.value,[l]:f.key}),"toObject");return s?xI(o,d):o.map(d)}let _=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return s===!0?Jt.batchSearchByHashToMap(c,r,e.get_attributes,_):Jt.batchSearchByHash(c,r,e.get_attributes,_)}a(qI,"executeSearch");function FI(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:o,limit:c,offset:u}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,u=Number.isInteger(u)?u:void 0,r){case le.SEARCH_TYPES.EQUALS:n=Jt.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case le.SEARCH_TYPES.CONTAINS:n=Jt.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case le.SEARCH_TYPES.ENDS_WITH:case le.SEARCH_TYPES._ENDS_WITH:n=Jt.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case le.SEARCH_TYPES.STARTS_WITH:case le.SEARCH_TYPES._STARTS_WITH:n=Jt.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case le.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Jt.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case le.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Jt.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case le.SEARCH_TYPES.SEARCH_ALL:return Jt.searchAll(e,s,t.get_attributes,o,c,u);case le.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Jt.searchAllToMap(e,s,t.get_attributes,o,c,u);case le.SEARCH_TYPES.BETWEEN:n=Jt.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case le.SEARCH_TYPES.GREATER_THAN:case le.SEARCH_TYPES._GREATER_THAN:n=Jt.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case le.SEARCH_TYPES.GREATER_THAN_EQUAL:case le.SEARCH_TYPES._GREATER_THAN_EQUAL:n=Jt.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case le.SEARCH_TYPES.LESS_THAN:case le.SEARCH_TYPES._LESS_THAN:n=Jt.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case le.SEARCH_TYPES.LESS_THAN_EQUAL:case le.SEARCH_TYPES._LESS_THAN_EQUAL:n=Jt.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return n}a(FI,"searchByType");function xI(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(xI,"createMapFromIterable");function aQ(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.search_attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let s=!1;for(let n=0;n<e.get_attributes.length;n++)if(r.indexOf(e.get_attributes[n])<0){s=!0;break}return s}a(aQ,"checkToFetchMore");function GI(e,t,r,s){if(sQ.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),o=n.charAt(n.length-1),c=!1;if(e.search_attribute===t&&(c=!0),bn.indexOf(n)>-1)return r===!0?le.SEARCH_TYPES.SEARCH_ALL_TO_MAP:le.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(bn[0])<0&&n.indexOf(bn[1])<0)return c===!0?r===!0?le.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:le.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:le.SEARCH_TYPES.EQUALS;if(bn.indexOf(i)>=0&&bn.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),le.SEARCH_TYPES.CONTAINS;if(bn.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),le.SEARCH_TYPES.ENDS_WITH;if(bn.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),le.SEARCH_TYPES.STARTS_WITH;if(n.includes(bn[0])||n.includes(bn[1]))return le.SEARCH_TYPES.EQUALS;throw new Error(HI.UNKNOWN_SEARCH_TYPE)}else switch(s){case Wi.VALUE_SEARCH_COMPARATORS.BETWEEN:return le.SEARCH_TYPES.BETWEEN;case Wi.VALUE_SEARCH_COMPARATORS.GREATER:return le.SEARCH_TYPES.GREATER_THAN;case Wi.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return le.SEARCH_TYPES.GREATER_THAN_EQUAL;case Wi.VALUE_SEARCH_COMPARATORS.LESS:return le.SEARCH_TYPES.LESS_THAN;case Wi.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return le.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(HI.UNKNOWN_SEARCH_TYPE)}}a(GI,"createSearchTypeFromSearchObject");kI.exports={executeSearch:qI,createSearchTypeFromSearchObject:GI,prepSearch:oQ,searchByType:FI}});var $I=T((que,VI)=>{"use strict";var xue=Zs(),cQ=jo(),uQ=W(),lQ=I(),_Q=z_();VI.exports=dQ;function dQ(e,t){if(!uQ.isEmpty(t)&&lQ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=cQ(e,"value");if(s)throw s;let n=!0;return _Q.prepSearch(e,t,n)}a(dQ,"lmdbGetDataByValue")});var Vc=T((kue,YI)=>{"use strict";var Gue=Zs(),fQ=jo(),EQ=W(),hQ=I(),mQ=z_();YI.exports=pQ;async function pQ(e,t){if(!EQ.isEmpty(t)&&hQ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=fQ(e,"value");if(s)throw s;return mQ.prepSearch(e,t,!1)}a(pQ,"lmdbSearchByValue")});var WI=T((Yue,KI)=>{"use strict";var $ue=Et(),up=class{static{a(this,"SearchByConditionsObject")}constructor(t,r,s,n,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=o,this.conditions=n,this.operator=c}},lp=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},_p=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};KI.exports={SearchByConditionsObject:up,SearchCondition:lp,SortAttribute:_p}});var jI=T((zue,XI)=>{"use strict";var Wue=WI().SearchByConditionsObject,SQ=Zs(),TQ=jo(),dp=Xo(),J_=Et(),{Resource:Que}=(ys(),te(lh)),JI=z_(),gQ=np(),RQ=require("lodash"),{getSchemaPath:AQ}=Ke(),QI=$e(),{handleHDBError:OQ,hdb_errors:bQ}=Z(),{HTTP_STATUS_CODES:NQ}=bQ,yQ=1e8;XI.exports=IQ;async function IQ(e){let t=TQ(e,"conditions");if(t)throw OQ(t,t.message,NQ.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=AQ(e.schema,e.table),s=await QI.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)QI.openDBI(s,_.search_attribute);let i=RQ.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let l=_.search_type;l===J_.SEARCH_TYPES.EQUALS?_.estimated_count=dp.count(s,_.search_attribute,_.search_value):l===J_.SEARCH_TYPES.CONTAINS||l===J_.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=yQ}return _.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await zI(o,e,i[0],n.hash_attribute),u;if(!e.operator||e.operator.toLowerCase()==="and"){let _=s.dbis[n.hash_attribute],l=i.slice(1).map(JI.filterByType),d=l.length,f=dp.setGetWholeRowAttributes(s,e.get_attributes);u=c.map(E=>_.get(E,{transaction:o,lazy:!0})),d>0&&(u=u.filter(E=>{for(let h=0;h<d;h++)if(!l[h](E))return!1;return!0})),(e.offset||e.limit!==void 0)&&(u=u.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),u=u.map(E=>gQ.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await zI(o,e,f,n.hash_attribute);c=c.concat(E)}let _=new Set,l=e.offset||0;c=c.filter(d=>_.has(d)?!1:(_.add(d),!0)).slice(l,e.limit&&e.limit+l),u=dp.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(IQ,"lmdbSearchByConditions");async function zI(e,t,r,s){let n=new SQ(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===J_.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,JI.searchByType(e,n,i,s).map(o=>o.value)}a(zI,"executeConditionSearch")});var ea=T((Xue,ZI)=>{"use strict";var wQ=I().OPERATIONS_ENUM,fp=class{static{a(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=wQ.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};ZI.exports=fp});var Ep=T((Zue,aw)=>{"use strict";var sw=Zs(),nw=ea(),iw=Vc(),ow=qc(),cr=I(),ew=W(),tw=$e(),{getTransactionAuditStorePath:CQ,getSchemaPath:DQ}=Ke(),rw=G();aw.exports=LQ;async function LQ(e){try{if(ew.isEmpty(global.hdb_schema[e.schema])||ew.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await UQ(e),await MQ(e);let t=DQ(e.schema,e.table);try{await tw.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")rw.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=CQ(e.schema,e.table);await tw.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")rw.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(LQ,"lmdbDropTable");async function UQ(e){let t=new sw(cr.SYSTEM_SCHEMA_NAME,cr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,cr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[cr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await iw(t)),s=[];for(let i=0;i<r.length;i++){let o=r[i];s.push(o.id)}if(s.length===0)return;let n=new nw(cr.SYSTEM_SCHEMA_NAME,cr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await ow(n)}a(UQ,"deleteAttributesFromSystem");async function MQ(e){let t=new sw(cr.SYSTEM_SCHEMA_NAME,cr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,cr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[cr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,cr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,cr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await iw(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let o=r[i];o.name===e.table&&o.schema===e.schema&&(s=o)}if(!s)throw new Error(`${e.schema}.${e.table} was not found`);let n=new nw(cr.SYSTEM_SCHEMA_NAME,cr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await ow(n)}catch(i){throw i}}a(MQ,"dropTableFromSystem")});var uw=T((tle,cw)=>{"use strict";var PQ=require("fs-extra"),vQ=Zs(),BQ=Zo(),HQ=ea(),xQ=Ep(),qQ=qc(),FQ=op(),GQ=Vc(),Nn=I(),{getSchemaPath:kQ}=Ke(),{handleHDBError:VQ,hdb_errors:$Q}=Z(),{HDB_ERROR_MSGS:YQ,HTTP_STATUS_CODES:KQ}=$Q;cw.exports=WQ;async function WQ(e){let t;try{t=await QQ(e.schema);let r=new vQ(Nn.SYSTEM_SCHEMA_NAME,Nn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Nn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Nn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await GQ(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await xQ(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new HQ(Nn.SYSTEM_SCHEMA_NAME,Nn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await qQ(n);let i=kQ(t);await PQ.remove(i)}catch(r){throw r}}a(WQ,"lmdbDropSchema");async function QQ(e){let t=new BQ(Nn.SYSTEM_SCHEMA_NAME,Nn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Nn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await FQ(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw VQ(new Error,YQ.SCHEMA_NOT_FOUND(e),KQ.NOT_FOUND,void 0,void 0,!0);return s}a(QQ,"validateDropSchema")});var X_=T((sle,lw)=>{"use strict";var hp=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};lw.exports=hp});var dw=T((ole,_w)=>{"use strict";var zQ=require("fs-extra"),j_=$e(),{getTransactionAuditStorePath:JQ}=Ke(),mp=Et(),ile=X_();_w.exports=XQ;async function XQ(e){let t;try{let r=JQ(e.schema,e.table);await zQ.mkdirp(r),t=await j_.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{j_.createDBI(t,mp.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),j_.createDBI(t,mp.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),j_.createDBI(t,mp.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(XQ,"createTransactionsAuditEnvironment")});var mw=T((cle,hw)=>{"use strict";var pp=I(),fw=$e(),jQ=xo(),{getSystemSchemaPath:ZQ,getSchemaPath:ez}=Ke(),tz=vi(),rz=g_(),Sp=T_(),sz=G(),nz=dw(),gp=tz.hdb_table,Ew=[];for(let e=0;e<gp.attributes.length;e++)Ew.push(gp.attributes[e].attribute);hw.exports=iz;async function iz(e,t){let r=ez(t.schema,t.table),s=new Sp(t.schema,t.table,pp.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new Sp(t.schema,t.table,pp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Sp(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await fw.createEnvironment(r,t.table),e!==void 0){let o=await fw.openEnvironment(ZQ(),pp.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await jQ.insertRecords(o,gp.hash_attribute,Ew,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await Tp(s),await Tp(n),await Tp(i)}await nz(t)}catch(o){throw o}}a(iz,"lmdbCreateTable");async function Tp(e){try{await rz(e)}catch(t){sz.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Tp,"createAttribute")});var Sw=T((lle,pw)=>{"use strict";var oz=Nc(),az=Dc(),cz=V_(),$c=I(),uz=xo().updateRecords,lz=$e(),{getSchemaPath:_z}=Ke(),dz=Hc(),fz=G();pw.exports=Ez;async function Ez(e){try{let{schema_table:t,attributes:r}=oz(e);az(e,r,t.hash_attribute),e.schema!==$c.SYSTEM_SCHEMA_NAME&&(r.includes($c.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push($c.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes($c.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push($c.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await cz(e.hdb_auth_header,t,r),n=_z(e.schema,e.table),i=await lz.openEnvironment(n,e.table),o=await uz(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await dz(e,o)}catch(c){fz.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(Ez,"lmdbUpdateRecords")});var gw=T((dle,Tw)=>{"use strict";var hz=I().OPERATIONS_ENUM,Rp=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=hz.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};Tw.exports=Rp});var Aw=T((hle,Rw)=>{"use strict";var Ele=gw(),mz=Nc(),pz=Dc(),Sz=V_(),Yc=I(),Tz=xo().upsertRecords,gz=$e(),{getSchemaPath:Rz}=Ke(),Az=Hc(),Oz=G(),{handleHDBError:bz,hdb_errors:Nz}=Z();Rw.exports=yz;async function yz(e){let t;try{t=mz(e)}catch(u){throw bz(u,u.message,Nz.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;pz(e,s,r.hash_attribute),e.schema!==Yc.SYSTEM_SCHEMA_NAME&&(s.includes(Yc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Yc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Yc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Yc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await Sz(e.hdb_auth_header,r,s),i=Rz(e.schema,e.table),o=await gz.openEnvironment(i,e.table),c=await Tz(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await Az(e,c)}catch(u){Oz.error(`unable to write transaction due to ${u.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:n,txn_time:c.txn_time}}a(yz,"lmdbUpsertRecords")});var bw=T((ple,Ow)=>{"use strict";var Ap=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};Ow.exports=Ap});var yw=T((Tle,Nw)=>{"use strict";var Op=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};Nw.exports=Op});var Cw=T((Ale,ww)=>{"use strict";var bp=$e(),{getTransactionAuditStorePath:Iz}=Ke(),Rle=bw(),Kc=Et(),wz=W(),Iw=yw(),Cz=require("util").promisify,Dz=Cz(setTimeout),Lz=1e4,Uz=100;ww.exports=Mz;async function Mz(e){let t=Iz(e.schema,e.table),r=await bp.openEnvironment(t,e.table,!0),s=bp.listDBIs(r);bp.initializeDBIs(r,Kc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new Iw;do n=await Pz(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=n.start_timestamp),n.end_timestamp!==void 0&&(i.end_timestamp=n.end_timestamp),i.transactions_deleted+=n.transactions_deleted,await Dz(Uz);while(n.transactions_deleted>0);return i}a(Mz,"deleteAuditLogsBefore");async function Pz(e,t){let r=new Iw;try{let s=e.dbis[Kc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:o}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let c=o[Kc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];wz.isEmpty(c)||(n=e.dbis[Kc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)n=e.dbis[Kc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>Lz)break}return await n,r}catch(s){throw s}}a(Pz,"deleteTransactions")});var Lw=T((ble,Dw)=>{"use strict";var Np=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};Dw.exports=Np});var Mw=T((Ile,Uw)=>{"use strict";var vz=Zs(),Bz=ea(),yle=Lw(),en=I(),Hz=W(),yp=$e(),xz=vi(),qz=Vc(),Fz=qc(),{getSchemaPath:Gz}=Ke();Uw.exports=kz;async function kz(e,t=!0){let r;e.schema===en.SYSTEM_SCHEMA_NAME?r=xz[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await $z(e),n=Gz(e.schema,e.table),i=await yp.openEnvironment(n,e.table);return t===!0&&await Vz(e,i,r.hash_attribute),yp.dropDBI(i,e.attribute),s}a(kz,"lmdbDropAttribute");async function Vz(e,t,r){let s=yp.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:c,version:u}of s.getRange({start:!1,versions:!0})){let _={};for(let l in c)l!==i&&(_[l]=c[l]);n=t.dbis[r].put(o,_,u)}await n}a(Vz,"removeAttributeFromAllObjects");async function $z(e){let t=new vz(en.SYSTEM_SCHEMA_NAME,en.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,en.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[en.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,en.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await qz(t)).filter(o=>o[en.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(Hz.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[en.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new Bz(en.SYSTEM_SCHEMA_NAME,en.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return Fz(i)}a($z,"dropAttributeFromSystem")});var qw=T((Dle,xw)=>{"use strict";var Ip=$e(),ta=Et(),Cle=Ir(),wp=I(),Pw=W(),{getTransactionAuditStorePath:Yz}=Ke(),Kz=Xo(),Z_=Qo(),Wz=G();xw.exports=Qz;async function Qz(e){let t=Yz(e.schema,e.table),r=await Ip.openEnvironment(t,e.table,!0),s=Ip.listDBIs(r);Ip.initializeDBIs(r,ta.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case wp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return vw(r,e.search_values);case wp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,Jz(r,e.search_values,n);case wp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return zz(r,e.search_values);default:return vw(r)}}a(Qz,"readAuditLog");function vw(e,t=[0,Date.now()]){Pw.isEmpty(t[0])&&(t[0]=0),Pw.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[ta.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let n of r.getKeys({start:t[1]}))if(n!==t[1]){s=n;break}return r.getRange({start:t[0],end:s}).map(({value:n})=>Object.assign(new Z_,n))}a(vw,"searchTransactionsByTimestamp");function zz(e,t=[]){let r=new Map;for(let s=0;s<t.length;s++){let n=t[s],i=[];for(let o of e.dbis[ta.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,Hw(e,i))}return Object.fromEntries(r)}a(zz,"searchTransactionsByUsername");function Jz(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let _=t[c],l=Kz.equals(e,ta.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,ta.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,_);for(let{value:d}of l){let f=Number(d);s.has(f)?s.get(f).push(_.toString()):s.set(f,[_.toString()])}}let n=Array.from(s.keys()),i=Hw(e,n),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],_=u.timestamp,l=s.get(_);Bw(u,"records",r,l,o),Bw(u,"original_records",r,l,o)}return Object.fromEntries(o)}a(Jz,"searchTransactionsByHashValues");function Bw(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],u=c[r].toString();if(s.indexOf(u)>=0)if(n.has(u)){let _=n.get(u),l=_[_.length-1];if(l.timestamp===i)l[t]=[c];else{let d=new Z_(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new Z_(e.operation,e.user_name,i,void 0);_[t]=[c],n.set(u,[_])}}}a(Bw,"loopRecords");function Hw(e,t){let r=[];try{let s=e.dbis[ta.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let n=0;n<t.length;n++)try{let i=s.get(t[n]);if(i){let o=Object.assign(new Z_,i);r.push(o)}}catch(i){Wz.warn(i)}return r}catch(s){throw s}}a(Hw,"batchSearchTransactions")});var Gw=T((Ple,Fw)=>{"use strict";var{getSchemaPath:Ule}=Ke(),Mle=$e(),{database:Xz}=(pe(),te(Fe));Fw.exports={writeTransaction:jz};async function jz(e,t,r){return Xz({database:e,table:t}).transaction(r)}a(jz,"writeTransaction")});var Yw=T((Ble,$w)=>{"use strict";var{getSchemaPath:kw}=Ke(),Vw=$e();$w.exports={flush:Zz,resetReadTxn:eJ};async function Zz(e,t){return(await Vw.openEnvironment(kw(e,t),t.toString())).flushed}a(Zz,"flush");async function eJ(e,t){try{(await Vw.openEnvironment(kw(e,t),t.toString())).resetReadTxn()}catch{}}a(eJ,"resetReadTxn")});var zw=T((xle,Qw)=>{"use strict";var{Readable:tJ}=require("stream"),{getDatabases:rJ}=(pe(),te(Fe)),{readSync:sJ,openSync:nJ,createReadStream:Kw}=require("fs"),{open:iJ}=require("lmdb"),Ww=u_(),oJ=__(),{AUDIT_STORE_OPTIONS:aJ}=(Po(),te(fb)),{INTERNAL_DBIS_NAME:cJ,AUDIT_STORE_NAME:uJ}=Et();Qw.exports=_J;var Cp=32768,lJ=100;async function _J(e){let t=e.database||e.schema||"data",r=rJ()[t],s=new Date().toISOString(),n=e.tables||e.table&&[e.table];if(n){let _=r[n[0]];if(!_)throw new Error(`Can not find table ${n[0]}`);let l=_.dbisDB,d=iJ({noSync:!0,maxDbs:oJ.MAX_DBS}),f,E=d.openDB(cJ,new Ww(!1)),h=l.useReadTransaction(),p=0,S=a(async function(O,y){y.encoding="binary",y.encoder=void 0;let q=d.openDB(O,y),K=l.openDB(O,y);for(let{key:H,version:L,value:$}of K.getRange({transaction:h,versions:K.useVersions}))f=q.put(H,$,L),p++%lJ===0&&(await new Promise(V=>setTimeout(V,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:O,value:y}of l.getRange({transaction:h,start:!1}))if(n.some(q=>O.startsWith?.(q+"/"))){E.put(O,y);let[,q]=O.split("/"),K=!q,H=new Ww(!K,K);await S(O,H)}e.include_audit&&await S(uJ,Object.assign({},aJ)),await f;let R=Kw(d.path);return R.headers=u(),R.on("close",()=>{h.done(),d.close()}),R}let o=r[Object.keys(r)[0]].primaryStore,c=nJ(o.path);return o.transaction(()=>{let _=Buffer.alloc(Cp);sJ(c,_,0,Cp),o.resetReadTxn();let l=o.useReadTransaction();l.renew();let d=Kw(null,{fd:c,start:Cp}),f=new tJ.from(async function*(){yield _;for await(let E of d)l.openTimer&&(l.openTimer=0),yield E;l.done()}());return f.headers=u(),f});function u(){let _=new Map;return _.set("content-type","application/octet-stream"),_.set("content-disposition",`attachment; filename="${t}"`),_.set("date",s),_}}a(_J,"getBackup")});var jw=T((Fle,Xw)=>{"use strict";var dJ=G(),{handleHDBError:fJ}=Z(),EJ=ZO(),hJ=g_(),mJ=Zm(),pJ=uI(),SJ=qc(),TJ=op(),gJ=vI(),RJ=$I(),AJ=Vc(),OJ=jI(),bJ=uw(),NJ=mw(),yJ=Sw(),IJ=Aw(),wJ=Cw(),CJ=Ep(),DJ=Mw(),LJ=qw(),UJ=Gw(),Jw=Yw(),MJ=zw(),Dp=class extends EJ{static{a(this,"LMDBBridge")}async searchByConditions(t){return OJ(t)}async getDataByHash(t){return await TJ(t)}async searchByHash(t){return await gJ(t)}async getDataByValue(t,r){return await RJ(t,r)}async searchByValue(t){return await AJ(t)}async createSchema(t){return await pJ(t)}async dropSchema(t){return await bJ(t)}async createTable(t,r){return await NJ(t,r)}async dropTable(t){return await CJ(t)}async createAttribute(t){return await hJ(t)}async createRecords(t){return await mJ(t)}async updateRecords(t){return await yJ(t)}async upsertRecords(t){try{return await IJ(t)}catch(r){throw fJ(r,null,null,dJ.ERR,r)}}async deleteRecords(t){return await SJ(t)}async dropAttribute(t){return await DJ(t)}async deleteAuditLogsBefore(t){return await wJ(t)}async readAuditLog(t){return await LJ(t)}writeTransaction(t,r,s){return UJ.writeTransaction(t,r,s)}flush(t,r){return Jw.flush(t,r)}resetReadTxn(t,r){return Jw.resetReadTxn(t,r)}getBackup(t){return MJ(t)}};Xw.exports=Dp});var aC={};je(aC,{ResourceBridge:()=>Mp});function Pp({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 eC(e,t){let r=tn(e),s=Pp(e,r);if(!r)throw new Ms.ClientError(`Table ${e.table} not found`);let n;s&&r.attributes.length-s.length>2&&s.length<5&&(n=!0);let i={user:e.hdb_user},o;We(i,()=>new Promise(_=>o=_));let c=e.ids||e.hash_values,u=0;return{[Symbol.asyncIterator](){return{async next(){if(u<c.length){let _=c[u++],l=await r.get({id:_,lazy:n,select:s},i);return l=l&&Kl(l),t?{value:{key:_,value:l}}:{value:l}}else return o(),{done:!0}},return(_){return o(),{value:_,done:!0}},throw(_){return o(),{done:!0}}}}}}function tn(e){let t=e.database||e.schema||vJ,r=Ps()[t];if(!r)throw(0,Ms.handleHDBError)(new Error,PJ.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function tC(e,t,r){let s=e.length+t.length,n=s===1?"record":"records";return{message:`${e.length} of ${s} ${n} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}async function*rC(e,t,r){let s;for await(let n of e.getHistory(t,r)){let i=n.type;i==="put"&&(i="upsert");let{id:o,version:c,value:u}=n;s?.timestamp===c?(s.hash_values.push(o),s.records.push(u)):(s&&(yield s),s={operation:i,user_name:n.user,timestamp:c,hash_values:[o],records:[u]})}s&&(yield s)}var sC,ed,Ms,nC,iC,vs,Lp,Up,oC,PJ,vJ,BJ,HJ,Zw,Mp,cC=ge(()=>{"use strict";sC=M(jw()),ed=M(jo()),Ms=M(Z());pe();nC=M(Nc()),iC=M(Dc()),vs=M(I()),Lp=M(On()),Up=M(Us()),oC=M(W());Di();Wl();({HDB_ERROR_MSGS:PJ}=Ms.hdb_errors),vJ="data",BJ=1e4,HJ=10,Mp=class extends sC.default{static{a(this,"ResourceBridge")}constructor(t){super(t),Zw=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,ed.default)(t,"conditions");if(r)throw(0,Ms.handleHDBError)(r,r.message,400,void 0,void 0,!0);let s=tn(t);if(!s)throw new Ms.ClientError(`Table ${t.table} not found`);let n=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"),s.search({conditions:n,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:Pp(t,s),sort:t.sort,allowFullScan:!0})}async createTable(t,r){let s=r.attributes,n=!!s,i=r.primary_key||r.hash_attribute;if(s)for(let o of s)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new Ms.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");s=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}ut({database:r.schema,table:r.table,attributes:s,schemaDefined:n,expiration:r.expiration})}async createAttribute(t){return await tn(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=tn(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let s=t.attribute,n,i=a((o,c,u)=>(c=Object.assign({},c),delete c[s],r.primaryStore.ifVersion(o,u,()=>r.primaryStore.put(o,c,u)).then(_=>{if(!_){let{value:l,version:d}=r.primaryStore.getEntry(o);return i(o,l,d)}})),"deleteRecord");for(let{key:o,value:c,version:u}of r.primaryStore.getRange({start:!0,versions:!0}))n=i(o,c,u),await new Promise(_=>setImmediate(_));await n}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){tn(t).dropTable()}createSchema(t){return Wc({database:t.schema,table:null}),Lp.signalSchemaChange(new Up.SchemaEventMsg(process.pid,vs.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await vp(t.schema),Lp.signalSchemaChange(new Up.SchemaEventMsg(process.pid,vs.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,Zw.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:s}=(0,nC.default)(t);(0,iC.default)(t,s,r.primaryKey);let n,i=Ps()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return We(o,async c=>{if(!i.schemaDefined){n=[];for(let l of s)i.attributes.find(f=>f.name==l)||n.push(l);n.length>0&&await i.addAttributes(n.map(l=>({name:l,indexed:!0})))}let u=[],_=[];for(let l of t.records){let d=await i.get(l[i.primaryKey],o);if(t.requires_existing&&!d||t.requires_no_existing&&d){_.push(l[i.primaryKey]);continue}d&&(d=Kl(d));for(let f in l)if(Object.prototype.hasOwnProperty.call(l,f)){let E=l[f];if(typeof E=="function")try{let h=E([[d]]);Array.isArray(h)&&(E=h[0].func_val,l[f]=E)}catch(h){throw h.message+="Trying to set key "+f+" on object"+JSON.stringify(l),h}}if(d)for(let f in d)Object.prototype.hasOwnProperty.call(l,f)||(l[f]=d[f]);await i.put(l,o),u.push(l[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:u,new_attributes:n,skipped_hashes:_}})}async deleteRecords(t){let r=Ps()[t.schema][t.table],s={user:t.hdb_user};return We(s,async n=>{let i=t.hash_values||t.records.map(u=>u[r.primaryKey]),o=[],c=[];for(let u of i)await r.delete(u,s)?o.push(u):c.push(u);return tC(o,c,n.timestamp)})}async deleteRecordsBefore(t){let r=Ps()[t.schema][t.table];if(!r.createdTimeProperty)throw new Ms.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let s=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:vs.VALUE_SEARCH_COMPARATORS.LESS}]}),n=!1,i=[],o=[],c=0,u=[],_=a(async()=>{let l=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:u});i.push(...l.deleted_hashes),o.push(...l.skipped_hashes),await(0,oC.async_set_timeout)(HJ),u=[],n=!0},"chunkDelete");for await(let l of s)u.push(l[r.primaryKey]),c++,c%BJ===0&&await _();return u.length>0&&await _(),n?tC(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,ed.default)(t,"hashes");if(r)throw r;return eC(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:s,value:n}of eC(t,!0))r.set(s,n);return r}searchByValue(t,r){if(r&&vs.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 s=(0,ed.default)(t,"value");if(s)throw s;let n=tn(t);if(!n)throw new Ms.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===vs.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return n.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:Pp(t,n)})}async getDataByValue(t,r){let s=new Map,n=tn(t);t.get_attributes&&!t.get_attributes.includes(n.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(n.primaryKey);for await(let i of this.searchByValue(t,r))s.set(i[n.primaryKey],i);return s}resetReadTxn(t,r){tn({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return tn(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=tn(t),s={};switch(t.search_type){case vs.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)s[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.type;return c==="put"&&(c="upsert"),{operation:c,timestamp:o.version,user_name:o.user,hash_values:[i],records:[o.value]}});return s;case vs.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let n=t.search_values;for await(let i of rC(r))n.includes(i.user_name)&&(s[i.user_name]||(s[i.user_name]=[])).push(i);return s;default:return rC(r,t.search_values?.[0],t.search_values?.[1])}}};a(Pp,"getSelect");a(eC,"getRecords");a(tn,"getTable");a(tC,"createDeleteResponse");a(rC,"groupRecordsInHistory")});var Cs=T((Kle,uC)=>{"use strict";var{ResourceBridge:xJ}=(cC(),te(aC)),qJ=j();qJ.initSync();var td;function FJ(){return td||(td=new xJ,td)}a(FJ,"getBridge");uC.exports=FJ()});var fC=T((Qle,dC)=>{"use strict";var lC=require("lodash"),Qc=require("mathjs"),GJ=require("jsonata"),_C=W();dC.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?lC.uniqWith(e,lC.isEqual):e,searchJSON:kJ,mad:zc.bind(null,Qc.mad),mean:zc.bind(null,Qc.mean),mode:zc.bind(null,Qc.mode),prod:zc.bind(null,Qc.prod),median:zc.bind(null,Qc.median)};function zc(e,t,r,s){return s===1?t==null?[]:[t]:s===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(zc,"aggregateFunction");function kJ(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(_C.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),_C.isEmpty(this.__ala__.res[r])){let s=GJ(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(kJ,"searchJSON")});var hC=T((Jle,EC)=>{"use strict";var mt=require("moment"),Bp="YYYY-MM-DDTHH:mm:ss.SSSZZ";mt.suppressDeprecationWarnings=!0;EC.exports={current_date:()=>mt().utc().format("YYYY-MM-DD"),current_time:()=>mt().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return mt(e).utc().format("YYYY");case"month":return mt(e).utc().format("MM");case"day":return mt(e).utc().format("DD");case"hour":return mt(e).utc().format("HH");case"minute":return mt(e).utc().format("mm");case"second":return mt(e).utc().format("ss");case"millisecond":return mt(e).utc().format("SSS");default:break}},date:e=>mt(e).utc().format(Bp),date_format:(e,t)=>mt(e).utc().format(t),date_add:(e,t,r)=>mt(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>mt(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=mt(e).utc(),n=mt(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>mt().utc().valueOf(),get_server_time:()=>mt().format(Bp),offset_utc:(e,t)=>mt(e).utc().utcOffset(t).format(Bp)}});var TC=T((Xle,SC)=>{"use strict";var VJ=require("@turf/area"),$J=require("@turf/length"),YJ=require("@turf/circle"),KJ=require("@turf/difference"),WJ=require("@turf/distance"),QJ=require("@turf/boolean-contains"),zJ=require("@turf/boolean-equal"),JJ=require("@turf/boolean-disjoint"),XJ=require("@turf/helpers"),mC=I(),de=W(),yn=G();SC.exports={geoArea:jJ,geoLength:ZJ,geoCircle:e2,geoDifference:t2,geoDistance:pC,geoNear:r2,geoContains:s2,geoEqual:n2,geoCrosses:i2,geoConvert:o2};function jJ(e){if(de.isEmpty(e))return NaN;typeof e=="string"&&(e=de.autoCastJSON(e));try{return VJ.default(e)}catch(t){return yn.trace(t,e),NaN}}a(jJ,"geoArea");function ZJ(e,t){if(de.isEmpty(e))return NaN;typeof e=="string"&&(e=de.autoCastJSON(e));try{return $J.default(e,{units:t||"kilometers"})}catch(r){return yn.trace(r,e),NaN}}a(ZJ,"geoLength");function e2(e,t,r){if(de.isEmpty(e))return NaN;if(de.isEmpty(t))return NaN;typeof e=="string"&&(e=de.autoCastJSON(e));try{return YJ.default(e,t,{units:r||"kilometers"})}catch(s){return yn.trace(s,e,t),NaN}}a(e2,"geoCircle");function t2(e,t){if(de.isEmpty(e))return NaN;if(de.isEmpty(t))return NaN;typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t));try{return KJ(e,t)}catch(r){return yn.trace(r,e,t),NaN}}a(t2,"geoDifference");function pC(e,t,r){if(de.isEmpty(e))return NaN;if(de.isEmpty(t))return NaN;typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t));try{return WJ.default(e,t,{units:r||"kilometers"})}catch(s){return yn.trace(s,e,t),NaN}}a(pC,"geoDistance");function r2(e,t,r,s){if(de.isEmpty(e)||de.isEmpty(t))return!1;if(de.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return pC(e,t,s)<=r}catch(n){return yn.trace(n,e,t),!1}}a(r2,"geoNear");function s2(e,t){if(de.isEmpty(e)||de.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t));try{return QJ.default(e,t)}catch(r){return yn.trace(r,e,t),!1}}a(s2,"geoContains");function n2(e,t){if(de.isEmpty(e)||de.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t));try{return zJ.default(e,t)}catch(r){return yn.trace(r,e,t),!1}}a(n2,"geoEqual");function i2(e,t){if(de.isEmpty(e)||de.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t));try{return!JJ.default(e,t)}catch(r){return yn.trace(r,e,t),!1}}a(i2,"geoCrosses");function o2(e,t,r){if(de.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(de.isEmpty(t))throw new Error("geo_type is required");if(de.isEmpty(mC.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(mC.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=de.autoCastJSON(e)),XJ[t](e,r)}a(o2,"geoConvert")});var rd=T((Zle,gC)=>{var Qi=fC(),qr=hC(),rn=TC();gC.exports=e=>{e.aggr.mad=e.aggr.MAD=Qi.mad,e.aggr.mean=e.aggr.MEAN=Qi.mean,e.aggr.mode=e.aggr.MODE=Qi.mode,e.aggr.prod=e.aggr.PROD=Qi.prod,e.aggr.median=e.aggr.MEDIAN=Qi.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Qi.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Qi.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=qr.current_date,e.fn.current_time=e.fn.CURRENT_TIME=qr.current_time,e.fn.extract=e.fn.EXTRACT=qr.extract,e.fn.date=e.fn.DATE=qr.date,e.fn.date_format=e.fn.DATE_FORMAT=qr.date_format,e.fn.date_add=e.fn.DATE_ADD=qr.date_add,e.fn.date_sub=e.fn.DATE_SUB=qr.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=qr.date_diff,e.fn.now=e.fn.NOW=qr.now,e.fn.offset_utc=e.fn.OFFSET_UTC=qr.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=qr.get_server_time,e.fn.getdate=e.fn.GETDATE=qr.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=qr.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=rn.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=rn.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=rn.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=rn.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=rn.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=rn.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=rn.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=rn.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=rn.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=rn.geoNear}});var bC=T((e_e,OC)=>{"use strict";var Jc=require("lodash"),ur=require("alasql");ur.options.cache=!1;var a2=rd(),RC=require("clone"),sd=require("recursive-iterator"),ae=G(),Ie=W(),ra=Cs(),c2=I(),{hdb_errors:u2}=Z(),{getDatabases:AC}=(pe(),te(Fe)),l2="IS NULL",Bs="There was a problem performing this search. Please check the logs and try again.";a2(ur);var Hp=class{static{a(this,"SQLSearch")}constructor(t,r){if(Ie.isEmpty(t))throw ae.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),Ie.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!Ie.isEmptyOrZeroLength(s))return ae.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw ae.error("Error thrown from checkEmptySQL in SQLSearch class method search."),ae.error(s),new Error(Bs)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw ae.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),ae.error(s),new Error(Bs)}if(Object.keys(this.data).length===0)return ae.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw ae.error("Error thrown from processJoins in SQLSearch class method search."),ae.error(s),new Error(Bs)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw ae.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),ae.error(s),new Error(Bs)}try{return t=await this._finalSQL(),t}catch(s){throw ae.error("Error thrown from finalSQL in SQLSearch class method search."),ae.error(s),new Error(Bs)}}_getColumns(){let t=new sd(this.statement);for(let{node:r,path:s}of t)r&&r.columnid&&(this.columns[s[0]]||(this.columns[s[0]]=[]),this.columns[s[0]].push(RC(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Jc.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let s=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[s]={},this.data[s].__hash_name=AC()[r.databaseid][r.tableid].primaryKey,this.data[s].__merged_data={},this.data[s].__merged_attributes=[],this.data[s].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(Ie.isEmpty(this.statement.where)){ae.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new sd(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!Ie.isEmpty(r)&&r.right)if(Ie.isNotEmptyAndHasValue(r.right.value)){let s=Ie.autoCast(r.right.value);[!0,!1].indexOf(s)>=0&&(r.right=new ur.yy.LogicValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=Ie.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new ur.yy.LogicValue({value:i}):s instanceof ur.yy.StringValue&&Ie.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new ur.yy.NumValue({value:i}))});if(t){ae.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new sd(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let s=new Set,n=r.left.columnid?r.left:r.right,i=this._findColumn(n);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!Ie.isEmpty(c2.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(Ie.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(Ie.isEmptyOrZeroLength(r.left.columnid)||Ie.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[o].ignore=!0,this.comparator_search_values[o].comparators=[];continue}this.comparator_search_values[o].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(Ie.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let c=!1;switch(r.op){case"=":!Ie.isEmpty(r.right.value)||!Ie.isEmpty(r.left.value)?s.add(Ie.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let u=Array.isArray(r.right)?r.right:r.left;for(let _=0;_<u.length;_++)if(u[_].value)s.add(u[_].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...s])}}}_setAliasesForColumns(){if(Ie.isEmptyOrZeroLength(this.all_table_attributes)&&Ie.isEmptyOrZeroLength(this.statement.from)&&Ie.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((s,n)=>{if(s.columnid==="*"){t.push(n);return}if(s.aggregatorid&&(this.has_aggregator=!0),!s.aggregatorid&&!s.funcid)if(s.as_orig=s.as?s.as:s.columnid,this.statement.joins)if(r[s.as_orig]>=0){let i=r[s.as_orig]+1;s.as=`[${s.as_orig+i}]`,r[s.as_orig]=i}else s.as=`[${s.as_orig}]`,r[s.as_orig]=0;else s.as=`[${s.as_orig}]`;!s.aggregatorid&&s.funcid&&s.args&&(s.as_orig=s.as?s.as:s.toString().replace(/'/g,'"'),s.as=`[${s.as_orig}]`),s.aggregatorid&&s.expression.columnid!=="*"&&(s.as_orig=s.as?s.as:s.expression.tableid?`${s.aggregatorid}(${s.expression.tableid}.${s.expression.columnid})`:`${s.aggregatorid}(${s.expression.columnid})`,s.as=`[${s.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&Jc.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(s=>{if(t.columnid_orig&&t.tableid_orig)return(s.table.as===t.tableid_orig||s.table.tableid===t.tableid_orig)&&s.attribute===t.columnid_orig;if(t.tableid)return(s.table.as===t.tableid||s.table.tableid===t.tableid)&&s.attribute===t.columnid;let n=t.columnid_orig?t.columnid_orig:t.columnid;return s.attribute===n});if(Ie.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);Ie.isEmptyOrZeroLength(s)||(r=this.all_table_attributes.filter(n=>n.attribute===s[0].columnid&&s[0].tableid&&s[0].tableid===(n.table.as?n.table.as:n.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(Ie.isEmptyOrZeroLength(this.all_table_attributes)&&!Ie.isEmptyOrZeroLength(this.columns.columns))return t;if(Ie.isEmptyOrZeroLength(this.all_table_attributes)&&Ie.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await ur.promise(r)}catch(r){throw ae.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),ae.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let s=this._findColumn(r);s&&this.fetch_attributes.push(RC(s))})}_addColumnToMergedAttributes(t,r){this.data[t].__merged_attributes.push(r),this.data[t].__merged_attr_map[r]=this.data[t].__merged_attributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__merged_data[r].splice(0,1,r)}_updateMergedAttribute(t,r,s,n){let i=this.data[t].__merged_attr_map[s];this.data[t].__merged_data[r].splice(i,1,n)}async _getFetchAttributeValues(){if(Ie.isEmptyOrZeroLength(Object.keys(this.columns)))return[];this._addFetchColumns(this.columns.joins);let t=null;try{t=this.statement.where?this.statement.where.toString():""}catch{throw new Error("Could not generate proper where clause")}this.columns.where&&this._addFetchColumns(this.columns.where);let r=this._isSimpleSelect();if(r?this._addFetchColumns(this.columns.columns):(!this.columns.where&&this.fetch_attributes.length===0)|t.indexOf(l2)>-1&&this.tables.forEach(n=>{let i={columnid:AC()[n.databaseid][n.tableid].primaryKey,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Jc.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(n[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,o=this.data[i].__hash_name,c={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},u=!1,_=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(u=!0),!Ie.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!Ie.isEmptyOrZeroLength(this.exact_search_values[_].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[_].values);let l=await ra.getDataByHash(c);for(let d of c.hash_values)l.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,d))}catch(l){throw ae.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),ae.error(l),new Error(Bs)}else try{c.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[_].values).map(async l=>{let d=Object.assign({},c);d.search_value=l;let f=await ra.getDataByValue(d);for(let[E,h]of f)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,n.attribute,h[n.attribute]):(this.data[i].__merged_data[E]=[...s[i]],this._updateMergedAttribute(i,E,n.attribute,h[n.attribute]),this._setMergedHashAttribute(i,E))}))}catch(l){throw ae.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),ae.error(l),new Error(Bs)}else if(!Ie.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!Ie.isEmptyOrZeroLength(this.comparator_search_values[_].comparators))try{let l=this.comparator_search_values[_].comparators;for(let d=0,f=l.length;d<f;d++){let E=l[d];c.search_attribute=E.attribute,c.search_value=E.search_value;let h=await ra.getDataByValue(c,E.operation);if(u)for(let[p]of h)this.data[i].__merged_data[p]||(this.data[i].__merged_data[p]=[...s[i]],this._setMergedHashAttribute(i,p));else for(let[p,S]of h)this.data[i].__merged_data[p]?this._updateMergedAttribute(i,p,n.attribute,S[n.attribute]):(this.data[i].__merged_data[p]=[...s[i]],this._updateMergedAttribute(i,p,n.attribute,S[n.attribute]),this._setMergedHashAttribute(i,p))}}catch(l){throw ae.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),ae.error(l),new Error(Bs)}else try{c.search_attribute=n.attribute,c.search_value="*";let l=await ra.getDataByValue(c);if(u)for(let[d]of l)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,d));else for(let[d,f]of l)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,n.attribute,f[n.attribute]):(this.data[i].__merged_data[d]=[...s[i]],this._updateMergedAttribute(i,d,n.attribute,f[n.attribute]),this._setMergedHashAttribute(i,d))}catch(l){throw ae.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),ae.error(l),new Error(Bs)}}}_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 ur.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(n=>{let i=n.aggregatorid?n.expression:n,o=n.aggregatorid?n.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===o});r[0]||r.push(this._findColumn(t.expression));let s=r[0];if(t.is_func=!!s.funcid,t.is_aggregator=!!s.aggregatorid,s.as)if(s.as&&!t.expression.tableid)t.expression.columnid=s.as,t.expression.columnid_orig=s.as_orig;else{let n=new ur.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new ur.yy.Column,t.expression),t.initial_select_column.as=`[${t.expression.columnid_orig}]`,t.expression.columnid=t.initial_select_column.as;return}if(!t.is_aggregator){let n=t.is_func?new ur.yy.FuncValue:new ur.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(E=>{E.joinmode&&E.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(E.table);let h=E.joinmode+" JOIN ? AS "+(E.as?E.as:E.table.tableid);E.on&&(h+=" ON "+E.on.toString()),i.push(h),t.push(Object.values(this.data[`${E.table.databaseid_orig}_${E.table.as?E.table.as_orig:E.table.tableid_orig}`].__merged_data))});let o=[],c={};n.forEach(E=>{let h=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__hash_name,p=E.as?E.as_orig:E.tableid_orig;o.push({key:`'${p}.${h}'`,schema:E.databaseid_orig,table:E.as?E.as_orig:E.tableid_orig,keys:new Set}),r.push(`${E.as?E.as:E.tableid}.\`${h}\` AS "${p}.${h}"`),c[E.as?E.as_orig:E.tableid_orig]=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__merged_attributes});let u=this.statement.where?"WHERE "+this.statement.where:"";u=u.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 l="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(l=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let f=[];try{let E=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${u} ${_} ${l} ${d}`,h=this._convertColumnsToIndexes(E,n);f=await ur.promise(h,t),t=null}catch(E){throw ae.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),ae.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=Jc.difference(h,[...E.keys].map(S=>S.toString()));for(let S=0,R=p.length;S<R;S++){let O=p[S];delete this.data[`${E.schema}_${E.table}`].__merged_data[O]}})}return{existing_attributes:c,joined_length:f?f.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new sd(this.columns);for(let{node:i}of n)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&s.push(o)}}s=Jc.uniqBy(s,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(s)}catch(i){throw ae.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),ae.error(i),new Error(Bs)}}async _getData(t){try{let r=t.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]?s[i].columns.push(n.attribute):s[i]={schema:n.table.databaseid,table:n.table.tableid,columns:[n.attribute]},s},{});for(let s in r){let n=r[s],i=this.data[s].__merged_data,o=[];for(let l in i)o.push(i[l][0]);this.data[s].__merged_attributes.push(...n.columns);let c={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},u=await ra.getDataByHash(c),_=n.columns.length;for(let l=0,d=o.length;l<d;l++){let f=o[l],E=u.get(f);for(let h=0;h<_;h++){let p=n.columns[h],S=E[p]===void 0?null:E[p];this.data[s].__merged_data[f].push(S)}}}}catch(r){throw ae.error("Error thrown from getDataByHash function in SQLSearch class method getData."),ae.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,u=o.aggregatorid?o.as_orig:c.as_orig;return n.expression.tableid?c.columnid_orig===n.expression.columnid_orig&&c.tableid_orig===n.expression.tableid_orig:c.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===u}).length===0&&(n.expression.columnid=n.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let s;try{let n=this._buildSQL();ae.trace(`Final SQL: ${n}`),s=await ur.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),ae.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw ae.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),ae.error(n),new Error("There was a problem running the generated sql.")}return s}_translateUndefinedValues(t){try{let r=[];for(let s of t){let n=Object.create(null);Object.keys(s).forEach(i=>{s[i]===void 0?n[i]=null:n[i]=s[i]}),r.push(n)}return r}catch(r){return ae.error(u2.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),ae.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(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=n[i],_=new RegExp(`${u}.\`${o}\``,"g"),l=`${u}.[${c}]`;s=s.replace(_,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=new RegExp(`\`${o}\``,"g"),_=`[${c}]`;s=s.replace(u,_)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let o=await ra.getDataByValue(i);for(let[c,u]of o)this.data[n].__merged_data[c]||(u[s.attribute]===void 0&&(u[s.attribute]=null),this.data[n].__merged_data[c]=Object.assign({},r[n])),this.data[n].__merged_data[c][t[s.attribute]]=u[s.attribute]??null}catch(o){throw ae.error("There was an error when processing this SQL operation. Check your logs"),ae.error(o),new Error(Bs)}}return Object.values(Object.values(this.data)[0].__merged_data)}};OC.exports=Hp});var os=T((r_e,NC)=>{"use strict";var _2=XO();NC.exports={searchByConditions:f2,searchByHash:E2,searchByValue:h2,search:m2};var xp=Cs(),{transformReq:qp}=W(),d2=bC();async function f2(e){return qp(e),xp.searchByConditions(e)}a(f2,"searchByConditions");async function E2(e){qp(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of xp.searchByHash(e))r&&t.push(r);return t}a(E2,"searchByHash");async function h2(e){qp(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of xp.searchByValue(e))t.push(r);return t}a(h2,"searchByValue");function m2(e,t){try{let r=new _2(e);r.validate(),new d2(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(m2,"search")});var nd=T((n_e,yC)=>{"use strict";var p2=Cs();yC.exports={writeTransaction:S2};function S2(e,t,r){return p2.writeTransaction(e,t,r)}a(S2,"writeTransaction")});var DC=T((a_e,CC)=>{"use strict";var T2=os(),g2=An(),IC=G(),R2=Ur(),o_e=nd(),A2=require("clone"),Gp=require("alasql"),O2=rd(),wC=require("util"),b2=wC.promisify(g2.getTableSchema),N2=wC.promisify(T2.search),y2=I(),Fp=W();O2(Gp);CC.exports={update:w2};var I2="There was a problem performing this update. Please check the logs and try again.";async function w2({statement:e,hdb_user:t}){let r=await b2(e.table.databaseid,e.table.tableid),s=C2(e.columns);Fp.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=A2(n),c=Fp.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,_=Gp.parse(u).statements[0],l=await N2(_),d=D2(s,l);return L2(o,d,t)}a(w2,"update");function C2(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=Gp.compile(`SELECT ${r.expression.toString()} AS [${y2.FUNC_VAL}] FROM ?`)}),t}catch(t){throw IC.error(t),new Error(I2)}}a(C2,"createUpdateRecord");function D2(e,t){return Fp.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(D2,"buildUpdateRecords");async function L2(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await R2.update(s);try{delete n.new_attributes,delete n.txn_time}catch(i){IC.error(`Error delete new_attributes from update response: ${i}`)}return n}a(L2,"updateRecords")});var UC=T((__e,LC)=>{var U2=require("alasql"),M2=os(),P2=G(),v2=Cs(),Vp=require("util"),kp=W(),B2=I(),H2=An(),u_e=nd(),l_e=Ur(),x2="record",q2="successfully deleted",F2=Vp.callbackify($2),G2=Vp.promisify(M2.search),k2=Vp.promisify(H2.getTableSchema);LC.exports={convertDelete:F2};function V2(e){return`${e.deleted_hashes.length} ${x2}${e.deleted_hashes.length===1?"":"s"} ${q2}`}a(V2,"generateReturnMessage");async function $2({statement:e,hdb_user:t}){let r=await k2(e.table.databaseid,e.table.tableid);kp.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=kp.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=U2.parse(o).statements[0],u={operation:B2.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await G2(c);let _=await v2.deleteRecords(u);return kp.isEmptyOrZeroLength(_.message)&&(_.message=V2(_)),delete _.txn_time,_}catch(_){throw P2.error(_),_.hdb_code?_.message:_}}a($2,"convertDelete")});var HC=T((f_e,BC)=>{"use strict";var Y2=jn(),{hdb_errors:MC}=Z(),{getDatabases:PC}=(pe(),te(Fe));BC.exports={checkSchemaExists:vC,checkSchemaTableExists:K2,schema_describe:Y2};async function vC(e){if(!PC()[e])return MC.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(vC,"checkSchemaExists");async function K2(e,t){let r=await vC(e);if(r)return r;if(!PC()[e][t])return MC.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(K2,"checkSchemaTableExists")});var Xc=T((h_e,W2)=>{W2.exports={name:"harperdb",version:"4.3.0-alpha.1",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.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.0",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 cd={};je(cd,{addAnalyticsListener:()=>eu,recordAction:()=>Fr,recordActionBinary:()=>us,setAnalyticsEnabled:()=>Q2});function Q2(e){WC=e}function Fr(e,t,r,s,n){if(!WC)return;let i=t+(r?"-"+r:"");s!==void 0&&(i+="-"+s),n!==void 0&&(i+="-"+n);let o=ad.get(i);if(o)if(typeof e=="number"){let c=o.values,u=c.index++;if(u>=c.length){let _=c;o.values=c=new Float32Array(u*2),c.set(_),c.index=u+1}c[u]=e,o.total+=e}else if(typeof e=="boolean")e&&o.total++,o.count++;else if(typeof e=="function")o.count++;else throw new TypeError("Invalid metric value type "+typeof e);else{if(typeof e=="number")o={total:e,values:new Float32Array(4)},o.values.index=1,o.values[0]=e,o.total=e;else if(typeof e=="boolean")o={},o.total=e?1:0,o.count=1;else if(typeof e=="function")o={},o.count=1,o.callback=e;else throw new TypeError("Invalid metric value type "+typeof e);o.description={metric:t,path:r,method:s,type:n},ad.set(i,o)}id||z2()}function us(e,t,r,s,n){Fr(!!e,t,r,s,n)}function eu(e){JC.push(e)}function z2(){id=performance.now(),setTimeout(async()=>{let e=performance.now()-id;id=0;let t=[],r={time:Date.now(),period:e,threadId:zi.threadId,metrics:t};for(let[n,i]of ad){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,u=0,_=[],l;for(let d of XC){let f=Math.floor(c*d),E=o[f-1];if(f>u){let h=f-u;if(E===l){let p=_[_.length-1];typeof p=="number"?_[_.length-1]={value:p,count:1+h}:p.count+=h}else _.push(h>1?{value:E,count:h}:E),l=E;u=f}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:_,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await jC()}let s=process.memoryUsage();t.push({metric:"memory",threadId:zi.threadId,byThread:!0,...s});for(let n of JC)n(t);ad=new Map,zi.parentPort?zi.parentPort.postMessage({type:zC,report:r}):tD({report:r})},QC).unref()}async function J2(e,t=6e4){let r=Kp(),s=ZC(),n;for(let h of s.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(h.value?.time){n=h.value.time;break}if(Date.now()-t<n)return;let i,o=new Map,c=new Map,u=[],_;for(let{key:h,value:p}of r.primaryStore.getRange({start:n||!1,exclusiveStart:!0,end:1/0})){if(!p)continue;if(i){if(h>i+t)break}else i=h;_=h;let{metrics:S,threadId:R}=p;for(let O of S||[]){let{path:y,method:q,type:K,metric:H,count:L,total:$,distribution:V,threads:Q,...re}=O;L||(L=1);let be=H+(y?"-"+y:"");q!==void 0&&(be+="-"+q),K!==void 0&&(be+="-"+K);let ne=o.get(be);if(ne){if(ne.threads){let Te=ne.threads[R];if(Te)ne=Te;else{ne.threads[R]=Object.assign({},re);continue}}ne.count||(ne.count=1);let ct=ne.count;for(let Te in re){let Bt=re[Te];typeof Bt=="number"&&(ne[Te]=(ne[Te]*ct+Bt*L)/(ct+L))}ne.count+=L,$>=0&&(ne.total+=$,ne.ratio=ne.total/ne.count)}else ne=Object.assign({period:t},O),delete ne.distribution,o.set(be,ne),ne.byThread&&(ne.threads=[],ne.threads[R]=Object.assign({},re),u.push(ne));if(V){V=V.map(Te=>typeof Te=="number"?{value:Te,count:1}:Te);let ct=c.get(be);ct?ct.push(...V):c.set(be,V)}}await jC()}for(let h of u){let{path:p,method:S,type:R,metric:O,count:y,total:q,distribution:K,threads:H,...L}=h;H=H.filter($=>$);for(let $ in L){if(typeof h[$]!="number")continue;let V=0;for(let Q of H){let re=Q[$];typeof re=="number"&&(V+=re)}h[$]=V}h.count=H.length,delete h.threads,delete h.byThread}for(let[h,p]of c){let S=o.get(h);p.sort((Te,Bt)=>Te.value>Bt.value?1:-1);let R=S.count-1,O=[],y=0,q=0,K;for(let Te of XC){let Bt=R*Te;for(;y<Bt;)K=p[q++],y+=K.count,q===1&&y--;let Os=p[q>1?q-2:0];K||(K=p[0]),O.push(K.value-(K.value-Os.value)*(y-Bt)/K.count)}let[H,L,$,V,Q,re,be,ne,ct]=O;Object.assign(S,{p1:H,p10:L,p25:$,median:V,p75:Q,p90:re,p95:be,p99:ne,p999:ct})}let l;for(let[h,p]of o)p.id=(0,od.getNextMonotonicTime)(),p.time=_,s.primaryStore.put(p.id,p,{append:!0}).then(S=>{S||s.primaryStore.put(p.id,p)}),l=!0;let d=Date.now(),{idle:f,active:E}=performance.eventLoopUtilization();if(l||E*10>f){let h=(0,od.getNextMonotonicTime)(),p={id:h,metric:"main-thread-utilization",idle:f-xC,active:E-qC,time:d,...process.memoryUsage()};s.primaryStore.put(h,p,{append:!0}).then(S=>{S||s.primaryStore.put(h,p)})}xC=f,qC=E}async function FC(e,t){let r=Date.now()-t;for(let s of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(s)}function Kp(){return GC||(GC=ut({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function ZC(){return kC||(kC=ut({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function Z2(){eD=!0;let e=(0,Zc.get)(Yp.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await J2(QC,e),await FC(Kp(),X2),await FC(ZC(),j2)},Math.min(e/2,2147483647)).unref()}function tD(e,t){let r=e.report;r.threadId=t?.threadId||zi.threadId;for(let s of r.metrics)s.metric==="bytes-sent"&&(VC+=s.mean*s.count);r.totalBytesProcessed=VC,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization($C.get(t))}),$C.set(t,t.performance.eventLoopUtilization())),r.id=(0,od.getNextMonotonicTime)(),Kp().primaryStore.put(r.id,r),eD||Z2(),e4&&(rD=r4(r))}async function r4(e){if(await rD,!oi){let r=(0,jc.dirname)((0,KC.getLogFilePath)());try{oi=await(0,$p.open)((0,jc.join)(r,"analytics.log"),"r+")}catch{oi=await(0,$p.open)((0,jc.join)(r,"analytics.log"),"w+")}}let t=(await oi.stat()).size;if(t>t4){let r=Buffer.alloc(t);await oi.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await oi.write(r,{position:0}),await oi.truncate(r.length),t=r.length}await oi.write(JSON.stringify(e)+`
|
|
8
|
-
`,t)}var
|
|
6
|
+
`)},X1="certificate.pem",j1="privateKey.pem",Z1="ca.pem";WN.exports={CERTIFICATE_VALUES:J1,CERTIFICATE_PEM_NAME:X1,PRIVATEKEY_PEM_NAME:j1,CA_PEM_NAME:Z1}});var Pm=T((eue,ZN)=>{"use strict";var jN=require("fs-extra"),ce=require("joi"),eY=require("os"),{boolean:Be,string:ts,number:vt,array:Mm}=ce.types(),{totalmem:zN}=require("os"),ki=require("path"),tY=G(),I_=z(),Zce=QN(),JN=D(),rY=Je(),XN="log",sY="components",nY="Invalid logging.rotation.maxSize unit. Available units are G, M or K",iY="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",oY="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",aY="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",cY="rootPath config parameter is undefined",uY="clustering.enabled config parameter is undefined",Vi=vt.min(0).required(),w_=Mm.items({host:ts.required(),port:Vi}).empty(null),Qs;ZN.exports={configValidator:lY,routesValidator:mY,route_constraints:w_};function lY(e){if(Qs=e.rootPath,I_.isEmpty(Qs))throw cY;let t=Be.required(),r=vt.min(0).max(1e3).empty(null).default(hY),s=ts.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Mc),n=ts.optional().empty(null),i=ts.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),o=ce.string().empty(null).default(Mc),c=ce.custom(dY).empty(null).default(Mc),u=e.clustering?.enabled;if(I_.isEmpty(u))throw uY;let _;return u===!0?_=ce.object({enabled:t,hubServer:ce.object({cluster:ce.object({name:ce.required().empty(null),network:ce.object({port:Vi,routes:w_}).required()}).required(),leafNodes:ce.object({network:ce.object({port:Vi}).required()}).required(),network:ce.object({port:Vi}).required()}).required(),leafServer:ce.object({network:ce.object({port:Vi,routes:w_}).required(),streams:ce.object({maxAge:vt.min(120).allow(null).optional(),maxBytes:vt.min(1).allow(null).optional(),maxMsgs:vt.min(1).allow(null).optional(),path:o}).required()}).required(),logLevel:ce.valid("error","warn","info","debug","trace"),nodeName:i,republishMessages:Be.optional(),databaseLevel:Be.optional(),tls:ce.object({certificate:n,certificateAuthority:n,privateKey:n,insecure:Be.required(),verify:Be.optional()}),user:ts.optional().empty(null)}).required():_=ce.object({enabled:t,tls:ce.object({certificate:n,certificateAuthority:n,privateKey:n,insecure:Be.required()})}).required(),ce.object({authentication:ce.object({authorizeLocal:Be,cacheTTL:vt.required(),enableSessions:Be}),analytics:ce.object({aggregatePeriod:vt}),componentsRoot:s.optional(),clustering:_,localStudio:ce.object({enabled:t}).required(),logging:ce.object({auditAuthEvents:ce.object({logFailed:Be,logSuccessful:Be}),file:Be.required(),level:ce.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ce.object({enabled:Be.optional(),compress:Be.optional(),interval:ts.custom(EY).optional().empty(null),maxSize:ts.custom(fY).optional().empty(null),path:ts.optional().empty(null).default(Mc)}).required(),root:s,stdStreams:Be.required(),auditLog:Be.required()}).required(),operationsApi:ce.object({network:ce.object({cors:Be.optional(),corsAccessList:Mm.optional(),headersTimeout:vt.min(1).optional(),keepAliveTimeout:vt.min(1).optional(),port:vt.optional().empty(null),domainSocket:ce.optional().empty("hdb/operations-server").default(Mc),securePort:vt.optional().empty(null),timeout:vt.min(1).optional()}).optional(),tls:ce.object({certificate:n,certificateAuthority:n,privateKey:n})}).required(),rootPath:ts.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ce.object({network:ce.object({port:Vi,securePort:Vi,mtls:ce.alternatives([Be.optional(),ce.object({user:ts.optional(),certificateAuthority:n})])}).required(),webSocket:Be.optional(),requireAuthentication:Be.optional()}),http:ce.object({compressionThreshold:vt.optional(),cors:Be.optional(),corsAccessList:Mm.optional(),headersTimeout:vt.min(1).optional(),port:vt.min(0).optional().empty(null),securePort:vt.min(0).optional().empty(null)}).required(),threads:r.optional(),maxHeapMemory:vt.min(0).optional(),storage:ce.object({writeAsync:Be.required(),overlappingSync:Be.optional(),caching:Be.optional(),compression:Be.optional(),noReadAhead:Be.optional(),path:c,prefetchWrites:Be.optional()}).required(),ignoreScripts:Be.optional(),tls:ce.object({certificate:n.optional(),certificateAuthority:n.optional(),privateKey:n.optional(),ciphers:ts.optional()})}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(lY,"configValidator");function _Y(e){return jN.existsSync(e)?null:`Specified path ${e} does not exist.`}a(_Y,"doesPathExist");function dY(e,t){ce.assert(e,ts.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=_Y(e);if(r)return t.message(r)}a(dY,"validatePath");function fY(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(nY);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(oY):e}a(fY,"validateRotationMaxSize");function EY(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(iY);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(aY):e}a(EY,"validateRotationInterval");function hY(e,t){let r=t.state.path.join("."),s=eY.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||zN();return i=Math.round(Math.min(i,zN())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),tY.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(hY,"setDefaultThreads");function Mc(e,t){let r=t.state.path.join(".");if(!I_.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(I_.isEmpty(Qs))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return ki.join(Qs,sY);case"logging.root":return ki.join(Qs,XN);case"clustering.leafServer.streams.path":return ki.join(Qs,"clustering","leaf");case"storage.path":let s=ki.join(Qs,JN.LEGACY_DATABASES_DIR_NAME);return jN.existsSync(s)?s:ki.join(Qs,JN.DATABASES_DIR_NAME);case"logging.rotation.path":return ki.join(Qs,XN);case"operationsApi.network.domainSocket":return r==null?null:ki.join(Qs,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Mc,"setDefaultRoot");function mY(e){let t=ce.object({routes:w_});return rY.validateBySchema({routes:e},t)}a(mY,"routesValidator")});var Pr=T((sue,cy)=>{"use strict";var Mr=D(),Bt=z(),yt=G(),{configValidator:pY,routesValidator:ey}=Pm(),or=require("fs-extra"),SY=require("yaml"),Cs=require("path"),TY=require("is-number"),ry=require("properties-reader"),gY=require("lodash"),{handleHDBError:RY}=Z(),{HTTP_STATUS_CODES:AY,HDB_ERROR_MSGS:C_}=Ir(),rue=require("minimist"),{server:OY}=(sr(),ee(Li)),{DATABASES_PARAM_CONFIG:Pc,CONFIG_PARAMS:Ur,CONFIG_PARAM_MAP:Ds}=Mr,bY="Unable to get config value because config is uninitialized",NY="Config successfully initialized",yY="Error backing up config file",IY="Empty parameter sent to getConfigValue",sy=Cs.join(Mr.PACKAGE_ROOT,"config","yaml",Mr.HDB_DEFAULT_CONFIG_FILE),wY="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",ty={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"},D_,It,L_;cy.exports={createConfigFile:CY,getDefaultConfig:DY,getConfigValue:iy,initConfig:Bm,flattenConfig:Vo,updateConfigValue:oy,updateConfigObject:UY,getConfiguration:vY,setConfiguration:BY,readConfigFile:xm,getClusteringRoutes:HY,initOldConfig:ay,getConfigFromFile:xY,getConfigFilePath:$i,addConfig:qY,deleteConfigFromFile:FY,getConfigObj:GY};function CY(e){let t=ri(sy);D_=Vo(t.toJSON());let r;for(let o in e){let c=Ds[o.toLowerCase()];if(c===Ur.DATABASES){r=e[o];continue}if(!c&&o.endsWith("_package")&&(c=o),c!==void 0){let u=c.split("_"),_=vm(c,e[o]);c==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{t.setIn([...u],_)}catch(l){yt.error(l)}}}r&&ny(t,r),Hm(t);let s=t.toJSON();It=Vo(s);let n=t.getIn(["rootPath"]),i=Cs.join(n,Mr.HDB_CONFIG_FILE);or.createFileSync(i),or.writeFileSync(i,String(t)),yt.trace(`Config file written to ${i}`)}a(CY,"createConfigFile");function ny(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!Bt.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(Pc.TABLES))for(let i in s[n][Pc.TABLES])for(let o in s[n][Pc.TABLES][i]){let c=s[n][Pc.TABLES][i][o],u=[Ur.DATABASES,n,Pc.TABLES,i,o];e.hasIn(u)?e.setIn(u,c):e.addIn(u,c)}else for(let i in s[n]){let o=s[n][i],c=[Ur.DATABASES,n,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(s){yt.error("Error parsing schemas CLI/env config arguments",s)}}a(ny,"setSchemasConfig");function DY(e){if(D_===void 0){let r=ri(sy);D_=Vo(r.toJSON())}let t=Ds[e.toLowerCase()];if(t!==void 0)return D_[t.toLowerCase()]}a(DY,"getDefaultConfig");function iy(e){if(e==null){yt.error(IY);return}if(It===void 0){yt.trace(bY);return}let t=Ds[e.toLowerCase()];if(t!==void 0)return It[t.toLowerCase()]}a(iy,"getConfigValue");function $i(e=Bt.getPropsFilePath()){let t=Bt.getEnvCliRootPath();return t?Cs.join(t,Mr.HDB_CONFIG_FILE):ry(e).get(Mr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a($i,"getConfigFilePath");function Bm(e=!1){if(It===void 0||e){let t;if(!Bt.noBootFile()){t=Bt.getPropsFilePath();try{or.accessSync(t,or.constants.F_OK|or.constants.R_OK)}catch(i){throw yt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=$i(t),s;if(r.includes("config/settings.js"))try{ay(r);return}catch(i){if(i.code!==Mr.NODE_ERROR_CODES.ENOENT)throw i}try{s=ri(r)}catch(i){if(i.code===Mr.NODE_ERROR_CODES.ENOENT){yt.trace(`HarperDB config file not found at ${r}.
|
|
7
|
+
This can occur during early stages of install where the config file has not yet been created`);return}else throw yt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}LY(s,r),Hm(s);let n=s.toJSON();if(OY.config=n,It=Vo(n),It.logging_rotation_rotate)for(let i in ty)It[i]&&yt.error(`Config ${ty[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);yt.trace(NY)}}a(Bm,"initConfig");function LY(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Cs.join(r,"database")),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],Cs.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Cs.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(yt.trace("Updating config file with missing config params"),or.writeFileSync(t,String(e)))}a(LY,"checkForUpdatedConfig");function Hm(e){let t=e.toJSON();t.componentsRoot=t.componentsRoot??t?.customFunctions?.root,t.threads=t.threads??t?.http?.threads;let r=pY(t);if(r.error)throw C_.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(Hm,"validateConfig");function UY(e,t){It===void 0&&(It={});let r=Ds[e.toLowerCase()];if(r===void 0){yt.trace(`Unable to update config object because config param '${e}' does not exist`);return}It[r.toLowerCase()]=t}a(UY,"updateConfigObject");function oy(e,t,r=void 0,s=!1,n=!1,i=!1){It===void 0&&Bm();let o=iy(Ds.hdb_root),c=Cs.join(o,Mr.HDB_CONFIG_FILE),u=ri(c),_;if(r===void 0&&e.toLowerCase()===Ur.DATABASES)_=t;else if(r===void 0){let f;if(i)f=e;else if(f=Ds[e.toLowerCase()],f===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=f.split("_"),h=vm(f,t);u.setIn([...E],h)}else for(let f in r){let E=Ds[f.toLowerCase()];if(E===Ur.HTTP_SECUREPORT&&r[f]===It[Ur.HTTP_PORT]?.toString()&&u.setIn(["http","port"],null),E===Ur.OPERATIONSAPI_NETWORK_SECUREPORT&&r[f]===It[Ur.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&u.setIn(["operationsApi","network","port"],null),E===Ur.DATABASES){_=r[f];continue}if(!E&&f.endsWith("_package")&&(E=f),E!==void 0){let h=E.split("_"),p=Mr.LEGACY_CONFIG_PARAMS[f.toUpperCase()];p&&p.startsWith("customFunctions")&&u.hasIn(p.split("_"))&&(E=p,h=p.split("_"));let S=vm(E,r[f]);E==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{h.length>1&&typeof u.getIn(h.slice(0,-1))=="boolean"&&u.deleteIn(h.slice(0,-1)),u.setIn([...h],S)}catch(R){yt.error(R)}}}_&&ny(u,_),Hm(u);let l=u.getIn(["rootPath"]),d=Cs.join(l,Mr.HDB_CONFIG_FILE);s===!0&&MY(c,l),or.writeFileSync(d,String(u)),n&&(It=Vo(u.toJSON())),yt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(oy,"updateConfigValue");function MY(e,t){try{let r=Cs.join(t,"backup",`${Mr.HDB_CONFIG_FILE}.bak`);or.copySync(e,r),yt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){yt.error(yY),yt.error(r)}}a(MY,"backupConfigFile");var PY=["databases"];function Vo(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)),L_=e,r(e);function r(s){let n={};for(let i in s)if(s.hasOwnProperty(i))if(typeof s[i]=="object"&&s[i]!==null&&!Array.isArray(s[i])&&!PY.includes(i)){let o=r(s[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let u=i+"_"+c;!Ur[u.toUpperCase()]&&Ds[u]&&(n[Ds[u].toLowerCase()]=o[c]),n[u]=o[c]}}else n[i.toLowerCase()]=s[i];return n}a(r,"squashObj")}a(Vo,"flattenConfig");function vm(e,t){if(e===Ur.CLUSTERING_NODENAME||e===Ur.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(TY(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Bt.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 Bt.autoCast(t)}a(vm,"castConfigValue");function vY(){let e=Bt.getPropsFilePath(),t=$i(e);return ri(t).toJSON()}a(vY,"getConfiguration");async function BY(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return oy(void 0,void 0,n,!0),wY}catch(i){throw typeof i=="string"||i instanceof String?RY(i,i,AY.BAD_REQUEST,void 0,void 0,!0):i}}a(BY,"setConfiguration");function xm(){let e=Bt.getPropsFilePath();try{or.accessSync(e,or.constants.F_OK|or.constants.R_OK)}catch(s){if(!Bt.noBootFile())throw yt.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=$i(e);return ri(t).toJSON()}a(xm,"readConfigFile");function ri(e){return SY.parseDocument(or.readFileSync(e,"utf8"),{simpleKeys:!0})}a(ri,"parseYamlDoc");function HY(){let e=xm(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Bt.isEmptyOrZeroLength(t)?[]:t;let r=ey(t);if(r)throw C_.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=Bt.isEmptyOrZeroLength(s)?[]:s;let n=ey(s);if(n)throw C_.CONFIG_VALIDATION(n.message);if(!Bt.isEmptyOrZeroLength(s)&&!Bt.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!Bt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw C_.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(HY,"getClusteringRoutes");function ay(e){let t=ry(e);It={};for(let r in Ds){let s=t.get(r.toUpperCase());if(Bt.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=Ds[r].toLowerCase();n===Ur.LOGGING_ROOT?It[n]=Cs.dirname(s):It[n]=s}return It}a(ay,"initOldConfig");function xY(e){let t=xm();return gY.get(t,e.replaceAll("_","."))}a(xY,"getConfigFromFile");async function qY(e,t){let r=ri($i());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await or.writeFile($i(),String(r))}a(qY,"addConfig");function FY(e){let t=$i(Bt.getPropsFilePath()),r=ri(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=Cs.join(s,Mr.HDB_CONFIG_FILE);or.writeFileSync(n,String(r))}a(FY,"deleteConfigFromFile");function GY(){return L_||(Bm(),L_)}a(GY,"getConfigObj")});var ly=T((iue,uy)=>{"use strict";var U_=D(),M_=class{static{a(this,"BaseLicense")}constructor(t=0,r=U_.RAM_ALLOCATION_ENUM.DEFAULT,s=U_.LICENSE_VALUES.VERSION_DEFAULT,n){this.exp_date=t,this.ram_allocation=r,this.version=s,this.fingerprint=n}},qm=class extends M_{static{a(this,"ExtendedLicense")}constructor(t=0,r=U_.RAM_ALLOCATION_ENUM.DEFAULT,s=U_.LICENSE_VALUES.VERSION_DEFAULT,n,i=!1){super(t,r,s,n),this.enterprise=i}};uy.exports={BaseLicense:M_,ExtendedLicense:qm}});var Yi=T((aue,my)=>{"use strict";var Yo=require("fs-extra"),dy=y_(),fy=require("crypto"),kY=require("moment"),VY=require("uuid").v4,zt=G(),Gm=require("path"),$Y=z(),si=D(),{totalmem:_y}=require("os"),YY=ly().ExtendedLicense,$o="invalid license key format",KY="061183",WY="mofi25",QY="aes-256-cbc",zY=16,JY=32,Ey=j();Ey.initSync();var Fm;my.exports={validateLicense:hy,generateFingerPrint:jY,licenseSearch:$m,getLicense:tK,checkMemoryLimit:rK};function km(){return Gm.join(Ey.getHdbBasePath(),si.LICENSE_KEY_DIR_NAME,si.LICENSE_FILE_NAME)}a(km,"getLicenseDirPath");function XY(){let e=km();return Gm.join(e,si.LICENSE_FILE_NAME)}a(XY,"getLicenseFilePath");function Vm(){let e=km();return Gm.join(e,si.REG_KEY_FILE_NAME)}a(Vm,"getFingerPrintFilePath");async function jY(){let e=Vm();try{return await Yo.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await ZY();throw zt.error(`Error writing fingerprint file to ${e}`),zt.error(t),new Error("There was an error generating the fingerprint")}}a(jY,"generateFingerPrint");async function ZY(){let e=VY(),t=dy.hash(e),r=Vm();try{await Yo.mkdirp(km()),await Yo.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw zt.error(`Error writing fingerprint file to ${r}`),zt.error(s),new Error("There was an error generating the fingerprint")}return t}a(ZY,"writeFingerprint");function hy(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:si.RAM_ALLOCATION_ENUM.DEFAULT,version:si.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return zt.error("empty license key passed to validate."),r;let s=Vm(),n=!1;try{n=Yo.statSync(s)}catch(i){zt.error(i)}if(n){let i;try{i=Yo.readFileSync(s,"utf8")}catch{zt.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(WY),c=o[1];c=Buffer.concat([Buffer.from(c)],zY);let u=Buffer.concat([Buffer.from(i)],JY),_=fy.createDecipheriv(QY,u,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let l=null;try{l=_.update(o[0],"hex","utf8"),l.trim(),l+=_.final("utf8")}catch{let E=eK(o[0],i);if(E)l=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error($o),zt.error($o),new Error($o)}let d;if(isNaN(l))try{d=JSON.parse(l),r.version=d.version,r.exp_date=d.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),d.ram_allocation&&(r.ram_allocation=d.ram_allocation)}catch{throw console.error($o),zt.error($o),new Error($o)}else r.exp_date=l;r.exp_date<kY().valueOf()&&(r.valid_date=!1),dy.validate(o[1],`${KY}${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||zt.error("Invalid licence"),r}a(hy,"validateLicense");function eK(e,t){try{let r=fy.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{zt.warn("Check old license failed")}}a(eK,"checkOldLicense");function $m(){let e=new YY,t=[];try{t=Yo.readFileSync(XY(),"utf-8").split(si.NEW_LINE)}catch(r){r.code==="ENOENT"?zt.info("no license file found"):zt.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if($Y.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=hy(n.license_key,n.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.ram_allocation=i.ram_allocation,e.enterprise=!0)}catch(n){zt.error("There was an error parsing the license string."),zt.error(n),e.ram_allocation=si.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return Fm=e,e}a($m,"licenseSearch");async function tK(){return Fm||await $m(),Fm}a(tK,"getLicense");function rK(){let e=$m().ram_allocation,t=process.constrainedMemory?.()||_y();if(t=Math.round(Math.min(t,_y())/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(rK,"checkMemoryLimit")});var rs=T((due,Uy)=>{"use strict";var gy="username is required",Ry="nothing to update, must supply active, role or password to update",Ay="password cannot be an empty string",Oy="If role is specified, it cannot be empty.",by="active must be true or false";Uy.exports={addUser:_K,alterUser:dK,dropUser:EK,getSuperUser:SK,userInfo:hK,listUsers:v_,listUsersExternal:mK,setUsersToGlobal:Wo,findAndValidateUser:Dy,getClusterUser:TK,USERNAME_REQUIRED:gy,ALTERUSER_NOTHING_TO_UPDATE:Ry,EMPTY_PASSWORD:Ay,EMPTY_ROLE:Oy,ACTIVE_BOOLEAN:by};var Ny=Lr(),sK=ti(),Wm=y_(),yy=$N(),Iy=es(),Qm=An(),vr=z(),wy=require("validate.js"),Te=G(),{promisify:nK}=require("util"),zm=gn(),py=D(),Sy=qe(),iK=Pr(),uue=j(),lue=Yi(),oK=Bi(),{table:_ue}=(ge(),ee(xe)),{handleHDBError:zs,hdb_errors:aK}=Z(),{HTTP_STATUS_CODES:Js,AUTHENTICATION_ERROR_MSGS:Ym,HDB_ERROR_MSGS:Ko}=aK,{UserEventMsg:Jm}=Ls(),Km=require("lodash"),{server:Xm}=(sr(),ee(Li)),cK=G();Xm.getUser=(e,t)=>Dy(e,t,t!=null);var Cy={username:!0,active:!0,role:!0,password:!0},Ty=new Map,P_=Iy.searchByValue,uK=Iy.searchByHash,lK=nK(sK.delete);async function _K(e){let t=wy.cleanAttributes(e,Cy),r=yy.addUserValidation(t);if(r)throw zs(new Error,r.message,Js.BAD_REQUEST,void 0,void 0,!0);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},n;try{n=await P_(s),n=n&&Array.from(n)}catch(u){throw Te.error("There was an error searching for a role in add user"),Te.error(u),u}if(!n||n.length<1)throw zs(new Error,Ko.ROLE_NAME_NOT_FOUND(t.role),Js.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw zs(new Error,Ko.DUP_ROLES_FOUND(t.role),Js.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=zm.encrypt(t.password)),t.password=Wm.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await Ny.insert(i)}catch(u){throw Te.error("There was an error searching for a user."),Te.error(u),u}Te.debug(o);try{await Wo()}catch(u){throw Te.error("Got an error setting users to global"),Te.error(u),u}if(o.skipped_hashes.length===1)throw zs(new Error,Ko.USER_ALREADY_EXISTS(t.username),Js.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],Qm.signalUserChange(new Jm(process.pid)),`${c.username} successfully added`}a(_K,"addUser");async function dK(e){let t=wy.cleanAttributes(e,Cy);if(vr.isEmptyOrZeroLength(t.username))throw new Error(gy);if(vr.isEmptyOrZeroLength(t.password)&&vr.isEmptyOrZeroLength(t.role)&&vr.isEmptyOrZeroLength(t.active))throw new Error(Ry);if(!vr.isEmpty(t.password)&&vr.isEmptyOrZeroLength(t.password.trim()))throw new Error(Ay);if(!vr.isEmpty(t.active)&&!vr.isBoolean(t.active))throw new Error(by);let r=fK(t.username);if(!vr.isEmpty(t.password)&&!vr.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=zm.encrypt(t.password)),t.password=Wm.hash(t.password)),t.role==="")throw new Error(Oy);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 P_(i)||[])}catch(c){throw Te.error("Got an error searching for a role."),Te.error(c),c}if(!o||o.length===0){let c=Ko.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Te.error(c),zs(new Error,c,Js.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=Ko.ALTER_USER_DUP_ROLES(t.role);throw Te.error(c),zs(new Error,c,Js.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await Ny.update(s)}catch(i){throw Te.error("Error during update."),Te.error(i),i}try{await Wo()}catch(i){throw Te.error("Got an error setting users to global"),Te.error(i),i}return Qm.signalUserChange(new Jm(process.pid)),n}a(dK,"alterUser");function fK(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(fK,"isClusterUser");async function EK(e){try{let t=yy.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(vr.isEmpty(global.hdb_users.get(e.username)))throw zs(new Error,Ko.USER_NOT_EXIST(e.username),Js.NOT_FOUND,void 0,void 0,!0);let s;try{s=await lK(r)}catch(n){throw Te.error("Got an error deleting a user."),Te.error(n),n}Te.debug(s);try{await Wo()}catch(n){throw Te.error("Got an error setting users to global."),Te.error(n),n}return Qm.signalUserChange(new Jm(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(EK,"dropUser");async function hK(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=Km.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},s;try{s=await uK(r)}catch(n){throw Te.error("Got an error searching for a role."),Te.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Te.error(r),r}return t}a(hK,"userInfo");async function mK(){let e;try{e=await v_()}catch(t){throw Te.error("Got an error listing users."),Te.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(mK,"listUsersExternal");async function v_(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await P_(e)}catch(o){throw Te.error("Got an error searching for roles."),Te.error(o),o}let r={};for(let o of t)r[o.id]=Km.cloneDeep(o);if(Object.keys(r).length===0)return null;let s={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},n;try{n=await P_(s)}catch(o){throw Te.error("Got an error searching for users."),Te.error(o),o}let i=new Map;for(let o of n)o=Km.cloneDeep(o),o.role=r[o.role],pK(o.role),i.set(o.username,o);return i}catch(e){throw Te.error("got an error listing users"),Te.error(e),vr.errorizeMessage(e)}return null}a(v_,"listUsers");function pK(e){try{if(!e){Te.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(oK)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Te.error("Got an error trying to set system permissions."),Te.error(t)}}a(pK,"appendSystemTablesToRole");async function Wo(){try{let e=await v_();global.hdb_users=e}catch(e){throw Te.error(e),e}}a(Wo,"setUsersToGlobal");async function Dy(e,t,r=!0){global.hdb_users||await Wo();let s=global.hdb_users.get(e);if(!s){if(!r)return{username:e};throw zs(new Error,Ym.GENERIC_AUTH_FAIL,Js.UNAUTHORIZED,void 0,void 0,!0)}if(s&&!s.active)throw zs(new Error,Ym.USER_INACTIVE,Js.UNAUTHORIZED,void 0,void 0,!0);let n={active:s.active,username:s.username};if(s.refresh_token&&(n.refresh_token=s.refresh_token),s.role&&(n.role=s.role),r===!0){if(Ty.get(t)===s.password)return n;if(Wm.validate(s.password,t))Ty.set(t,s.password);else throw zs(new Error,Ym.GENERIC_AUTH_FAIL,Js.UNAUTHORIZED,void 0,void 0,!0)}return n}a(Dy,"findAndValidateUser");async function SK(){global.hdb_users||await Wo();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(SK,"getSuperUser");async function TK(){let e=await v_(),t=iK.getConfigFromFile(py.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!vr.isEmpty(r)&&r?.role?.role===py.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=zm.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+Sy.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+Sy.SERVER_SUFFIX.ADMIN,r}a(TK,"getClusterUser");var Ly=[];Xm.invalidateUser=function(e){for(let t of Ly)try{t(e)}catch(r){cK.error("Error invalidating user",r)}};Xm.onInvalidatedUser=function(e){Ly.push(e)}});var Bc=T((mue,By)=>{"use strict";var Ki=G(),Br=D(),gK=_N(),Eue=Rn(),hue=jn(),RK=rs(),{validateEvent:My}=Ls(),vc=ws(),AK=require("process"),{resetDatabases:OK}=(ge(),ee(xe)),bK={[Br.ITC_EVENT_TYPES.SCHEMA]:NK,[Br.ITC_EVENT_TYPES.USER]:vy};async function NK(e){let t=My(e);if(t){Ki.error(t);return}Ki.trace("ITC schemaHandler received schema event:",e),await gK(e.message),await yK(e.message)}a(NK,"schemaHandler");async function yK(e){try{vc.resetReadTxn(Br.SYSTEM_SCHEMA_NAME,Br.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),vc.resetReadTxn(Br.SYSTEM_SCHEMA_NAME,Br.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),vc.resetReadTxn(Br.SYSTEM_SCHEMA_NAME,Br.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=OK();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Ki.error(t)}}a(yK,"syncSchemaMetadata");var Py=[];async function vy(e){try{try{vc.resetReadTxn(Br.SYSTEM_SCHEMA_NAME,Br.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),vc.resetReadTxn(Br.SYSTEM_SCHEMA_NAME,Br.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Ki.warn(r)}let t=My(e);if(t){Ki.error(t);return}Ki.trace(`ITC userHandler ${Br.HDB_ITC_CLIENT_PREFIX}${AK.pid} received user event:`,e),await RK.setUsersToGlobal();for(let r of Py)r()}catch(t){Ki.error(t)}}a(vy,"userHandler");vy.addListener=function(e){Py.push(e)};By.exports=bK});var Ls=T((Aue,xy)=>{"use strict";var Sue=G(),jm=z(),IK=D(),{ITC_ERRORS:Hc}=Ir(),{parentPort:Tue,threadId:wK,isMainThread:CK,workerData:gue}=require("worker_threads"),{onMessageFromWorkers:DK,broadcast:Rue,broadcastWithAcknowledgement:LK}=Ye();xy.exports={sendItcEvent:UK,validateEvent:Hy,SchemaEventMsg:MK,UserEventMsg:PK};var B_;DK(async(e,t)=>{B_=B_||Bc(),Hy(e),B_[e.type]&&await B_[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function UK(e){return!CK&&e.message&&(e.message.originator=wK),LK(e)}a(UK,"sendItcEvent");function Hy(e){if(typeof e!="object")return Hc.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||jm.isEmpty(e.type))return Hc.MISSING_TYPE;if(!e.hasOwnProperty("message")||jm.isEmpty(e.message))return Hc.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||jm.isEmpty(e.message.originator))return Hc.MISSING_ORIGIN;if(IK.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Hc.INVALID_EVENT(e.type)}a(Hy,"validateEvent");function MK(e,t,r,s=void 0,n=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=s,this.attribute=n}a(MK,"SchemaEventMsg");function PK(e){this.originator=e}a(PK,"UserEventMsg")});var An=T((Nue,ky)=>{"use strict";var qy=D(),bue=z(),H_=G(),Fy=cN(),Qo,{sendItcEvent:Gy}=Ls();function vK(e){try{H_.trace("signalSchemaChange called with message:",e),Qo=Qo||Bc();let t=new Fy(qy.ITC_EVENT_TYPES.SCHEMA,e);return Qo.schema(t),Gy(t)}catch(t){H_.error(t)}}a(vK,"signalSchemaChange");function BK(e){try{H_.trace("signalUserChange called with message:",e),Qo=Qo||Bc();let t=new Fy(qy.ITC_EVENT_TYPES.USER,e);return Qo.user(t),Gy(t)}catch(t){H_.error(t)}}a(BK,"signalUserChange");ky.exports={signalSchemaChange:vK,signalUserChange:BK}});var x_=T((Iue,$y)=>{"use strict";var Vy=z(),HK=D(),xK=G(),qK=h_(),FK=E_(),GK=An(),{SchemaEventMsg:kK}=Ls(),VK="already exists in";$y.exports=$K;async function $K(e,t,r){if(Vy.isEmptyOrZeroLength(r))return r;let s=[];Vy.isEmptyOrZeroLength(t.attributes)||t.attributes.forEach(i=>{s.push(i.attribute)});let n=r.filter(i=>s.indexOf(i)<0);return n.length===0||await Promise.all(n.map(async i=>{await YK(e,t.schema,t.name,i)})),n}a($K,"lmdbCheckForNewAttributes");async function YK(e,t,r,s){let n=new FK(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await KK(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(VK))xK.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(YK,"createNewAttribute");async function KK(e){let t;return t=await qK(e),GK.signalSchemaChange(new kK(process.pid,HK.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(KK,"createAttribute")});var zo=T((Cue,Yy)=>{"use strict";var Zm=class{static{a(this,"LMDBTransactionObject")}constructor(t,r,s,n,i=void 0){this.operation=t,this.user_name=r,this.timestamp=s,this.hash_values=n,this.origin=i}};Yy.exports=Zm});var Wy=T((Lue,Ky)=>{"use strict";var WK=zo(),QK=D().OPERATIONS_ENUM,ep=class extends WK{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(QK.INSERT,r,s,n,i),this.records=t}};Ky.exports=ep});var zy=T((Mue,Qy)=>{"use strict";var zK=zo(),JK=D().OPERATIONS_ENUM,tp=class extends zK{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(JK.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};Qy.exports=tp});var Xy=T((vue,Jy)=>{"use strict";var XK=zo(),jK=D().OPERATIONS_ENUM,rp=class extends XK{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(jK.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};Jy.exports=rp});var Zy=T((Hue,jy)=>{"use strict";var ZK=zo(),eW=D().OPERATIONS_ENUM,sp=class extends ZK{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super(eW.DELETE,s,n,t,i),this.original_records=r}};jy.exports=sp});var xc=T((Fue,sI)=>{"use strict";var que=require("path"),eI=Ke(),tW=Wy(),rW=zy(),sW=Xy(),nW=Zy(),Jo=mt(),tI=z(),{CONFIG_PARAMS:iW}=D(),rI=j();rI.initSync();var q_=D().OPERATIONS_ENUM,{getTransactionAuditStorePath:oW}=ze();sI.exports=aW;async function aW(e,t){if(rI.get(iW.LOGGING_AUDITLOG)===!1)return;let r=oW(e.schema,e.table),s=await eI.openEnvironment(r,e.table,!0),n=cW(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){eI.initializeDBIs(s,Jo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Jo.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[Jo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[Jo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),tI.isEmpty(n.user_name)||s.dbis[Jo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[Jo.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(aW,"writeTransaction");function cW(e,t){let r=tI.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===q_.INSERT)return new tW(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===q_.UPDATE)return new rW(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===q_.UPSERT)return new sW(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===q_.DELETE)return new nW(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(cW,"createTransactionObject")});var np=T((Vue,nI)=>{"use strict";var uW=yc(),kue=Ic(),qc=D(),lW=Lc(),_W=Fo().insertRecords,dW=Ke(),fW=G(),EW=x_(),{getSchemaPath:hW}=ze(),mW=xc();nI.exports=pW;async function pW(e){try{let{schema_table:t,attributes:r}=uW(e);lW(e,r,t.hash_attribute),e.schema!==qc.SYSTEM_SCHEMA_NAME&&(r.includes(qc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(qc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(qc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(qc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await EW(e.hdb_auth_header,t,r),n=hW(e.schema,e.table),i=await dW.openEnvironment(n,e.table),o=await _W(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await mW(e,o)}catch(c){fW.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(pW,"lmdbCreateRecords")});var aI=T((Yue,oI)=>{"use strict";var iI=D(),SW=np(),TW=Ic(),gW=require("fs-extra"),{getSchemaPath:RW}=ze();oI.exports=AW;async function AW(e){let t=[{name:e.schema,createddate:Date.now()}],r=new TW(iI.SYSTEM_SCHEMA_NAME,iI.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await SW(r),await gW.mkdirp(RW(e.schema))}a(AW,"lmdbCreateSchema")});var uI=T((Wue,cI)=>{"use strict";var ip=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};cI.exports=ip});var fI=T((jue,dI)=>{"use strict";var lI=Ke(),op=wr(),ap=Ir().LMDB_ERRORS_ENUM,OW=mt(),_I=G(),zue=z(),bW=require("lmdb"),NW=uI(),yW=D(),{OVERFLOW_MARKER:Jue,MAX_SEARCH_KEY_LENGTH:Xue}=OW,IW=yW.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function wW(e,t,r,s){if(op.validateEnv(e),t===void 0)throw new Error(ap.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(ap.IDS_REQUIRED):new Error(ap.IDS_MUST_BE_ITERABLE);try{let n=lI.listDBIs(e);lI.initializeDBIs(e,t,n);let i=new NW,o,c=[],u=[];for(let f=0,E=r.length;f<E;f++)try{o=r[f];let h=e.dbis[t].get(o);if(!h||s&&h[IW]>s){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,bW.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<n.length;S++){let R=n[S];if(!h.hasOwnProperty(R)||R===t)continue;let I=e.dbis[R],w=h[R];if(w!=null)try{let B=op.getIndexedValues(w);if(B)for(let K=0,q=B.length;K<q;K++)I.remove(B[K],o)}catch{_I.warn(`cannot delete from attribute: ${R}, ${w}:${o}`)}}});c.push(p),u.push(o),i.original_records.push(h)}catch(h){_I.warn(h),i.skipped.push(o)}let _=[],l=await Promise.all(c);for(let f=0,E=l.length;f<E;f++)l[f]===!0?i.deleted.push(u[f]):(i.skipped.push(u[f]),_.push(f));let d=0;for(let f=0;f<_.length;f++){let E=_[f];i.original_records.splice(E-d,1),d++}return i.txn_time=op.getNextMonotonicTime(),i}catch(n){throw n}}a(wW,"deleteRecords");dI.exports={deleteRecords:wW}});var Fc=T((ele,hI)=>{"use strict";var Xo=z(),CW=fI(),DW=Ke(),{getSchemaPath:LW}=ze(),UW=xc(),MW=G();hI.exports=PW;async function PW(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(Xo.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Xo.isEmptyOrZeroLength(e.hash_values)&&!Xo.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][s];Xo.isEmpty(u)||e.hash_values.push(u)}}if(Xo.isEmptyOrZeroLength(e.hash_values))return EI([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Xo.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[s]:e.hash_values[c]}}let n=LW(e.schema,e.table),i=await DW.openEnvironment(n,e.table),o=await CW.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await UW(e,o)}catch(c){MW.error(`unable to write transaction due to ${c.message}`)}return EI(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(PW,"lmdbDeleteRecords");function EI(e,t,r){let s=e.length+t.length,n=s===1?"record":"records";return{message:`${e.length} of ${s} ${n} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(EI,"createDeleteResponse")});var up=T((sle,mI)=>{"use strict";var vW=D(),rle=wr();function cp(e,t){let r=Object.create(null);if(t.length===1&&vW.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let s=0;s<t.length;s++){let n=t[s],i=e[n];r[n]=i===void 0?null:i}return r}a(cp,"parseRow");function BW(e,t,r,s){let n=cp(r,e);s.push(n)}a(BW,"searchAll");function HW(e,t,r,s){let n=cp(r,e);s[t]=n}a(HW,"searchAllToMap");function xW(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(xW,"iterateDBI");function Wi(e,t,r,s,n){let i=Object.create(null);i[n]=e;let o;s===n?o=e:(o=t,s!==void 0&&(i[s]=o)),r[0].push(o),r[1].push(i)}a(Wi,"pushResults");function qW(e,t,r,s,n,i){t.toString().endsWith(e)&&Wi(t,r,s,n,i)}a(qW,"endsWith");function FW(e,t,r,s,n,i){t.toString().includes(e)&&Wi(t,r,s,n,i)}a(FW,"contains");function GW(e,t,r,s,n,i){t>e&&Wi(t,r,s,n,i)}a(GW,"greaterThanCompare");function kW(e,t,r,s,n,i){t>=e&&Wi(t,r,s,n,i)}a(kW,"greaterThanEqualCompare");function VW(e,t,r,s,n,i){t<e&&Wi(t,r,s,n,i)}a(VW,"lessThanCompare");function $W(e,t,r,s,n,i){t<=e&&Wi(t,r,s,n,i)}a($W,"lessThanEqualCompare");mI.exports={parseRow:cp,searchAll:BW,searchAllToMap:HW,iterateDBI:xW,endsWith:qW,contains:FW,greaterThanCompare:GW,greaterThanEqualCompare:kW,lessThanCompare:VW,lessThanEqualCompare:$W,pushResults:Wi}});var jo=T((cle,OI)=>{"use strict";var ni=Ke(),ile=G(),Hr=wr(),F_=mt(),ft=Ir().LMDB_ERRORS_ENUM,ole=z(),YW=D(),G_=up(),{parseRow:KW}=G_,ale=require("lmdb"),{OVERFLOW_MARKER:pI,MAX_SEARCH_KEY_LENGTH:WW}=F_;function SI(e,t,r,s=!1,n=void 0,i=void 0){return Qi(e,t,r,(o,c)=>c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))}a(SI,"iterateFullIndex");function Gc(e,t,r,s,n,i=!1,o=void 0,c=void 0,u=!1,_=!1){return Qi(e,t,r,(l,d,f,E)=>{let I={transaction:l,start:i===!0?n:s,end:i===!0?s:n,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!u:!_,exclusiveStart:i===!0?_:u};return E===r?(I.values=!1,d.getRange(I).map(w=>({value:w}))):d.getRange(I)})}a(Gc,"iterateRangeBetween");function Qi(e,t,r,s){let n=e.database||e,i=ni.openDBI(n,r);i[F_.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&ni.openDBI(n,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=s(o,i,n,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(Qi,"setupTransaction");function TI(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(pI)){if(!n)if(r)n=ni.openDBI(e,r);else{let u=ni.listDBIs(e);for(let _=0,l=u.length;_<l&&(n=ni.openDBI(e,u[_]),!n[F_.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(TI,"getOverflowCheck");function QW(e,t,r,s=!1,n=void 0,i=void 0){if(Hr.validateEnv(e),t===void 0)throw new Error(ft.HASH_ATTRIBUTE_REQUIRED);return Qi(e,t,t,(o,c,u)=>(k_(r),r=kc(u,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(_=>KW(_.value,r))))}a(QW,"searchAll");function zW(e,t,r,s=!1,n=void 0,i=void 0){if(Hr.validateEnv(e),t===void 0)throw new Error(ft.HASH_ATTRIBUTE_REQUIRED);k_(r),r=kc(e.database||e,r);let o=new Map;for(let{key:c,value:u}of SI(e,t,t,s,n,i))o.set(c,G_.parseRow(u,r));return o}a(zW,"searchAllToMap");function JW(e,t,r=!1,s=void 0,n=void 0){if(Hr.validateEnv(e),t===void 0)throw new Error(ft.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=SI(e,void 0,t,r,s,n),c=o.transaction,u=TI(c.database,c,void 0,t);for(let{key:_,value:l}of o){let d=u(_,l);i[d]===void 0&&(i[d]=[]),i[d].push(l)}return i}a(JW,"iterateDBI");function XW(e,t){if(Hr.validateEnv(e),t===void 0)throw new Error(ft.HASH_ATTRIBUTE_REQUIRED);return ni.statDBI(e,t).entryCount}a(XW,"countAll");function jW(e,t,r,s,n=!1,i=void 0,o=void 0){return ii(e,r,s),Qi(e,t,r,(c,u,_,l)=>(s=Hr.convertKeyValueToWrite(s),l===r?u.get(s,{transaction:c,lazy:!0})===void 0?[]:[{key:s,value:s}]:u.getValues(s,{transaction:c,reverse:n,limit:i,offset:o}).map(d=>({key:s,value:d}))))}a(jW,"equals");function ZW(e,t,r){return ii(e,t,r),ni.openDBI(e,t).getValuesCount(r)}a(ZW,"count");function eQ(e,t,r,s,n=!1,i=void 0,o=void 0){return ii(e,r,s),Qi(e,null,r,(c,u)=>{s=Hr.convertKeyValueToWrite(s);let _=!0;typeof s=="number"&&(_=!1);let l;if(n===!0){let d;for(let f of u.getKeys({transaction:c,start:s}))if(!f.startsWith(s)){d=f;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),l=u.getRange({transaction:c,start:d,end:void 0,reverse:n,limit:i,offset:o}).map(f=>{let{key:E}=f;if(E!==d){if(E.toString().startsWith(s))return f;if(_===!0)return l.DONE}}),l.filter(f=>f)}else return l=u.getRange({transaction:c,start:s,reverse:n,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(s))return d;if(_===!0)return l.DONE}),_?l:l.filter(d=>d)})}a(eQ,"startsWith");function tQ(e,t,r,s,n=!1,i=void 0,o=void 0){return gI(e,t,r,s,n,i,o,!0)}a(tQ,"endsWith");function gI(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return ii(e,r,s),Qi(e,null,r,(u,_,l,d)=>{let f=TI(l,u,d,r);return o=Number.isInteger(o)?o:0,_.getKeys({transaction:u,end:n?!1:void 0,reverse:n}).flatMap(E=>{let h=E.toString();return h.endsWith(pI)?_.getValues(E,{transaction:u}).map(p=>{let S=f(E,p);if(c?S.endsWith(s):S.includes(s))return{key:S,value:p}}).filter(p=>p):(c?h.endsWith(s):h.includes(s))?_[F_.DBI_DEFINITION_NAME].is_hash_attribute?{key:E,value:E}:_.getValues(E,{transaction:u}).map(p=>({key:E,value:p})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(gI,"contains");function rQ(e,t,r,s,n=!1,i=void 0,o=void 0){ii(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),Gc(e,t,r,s,u,n,i,o,!0,!1)}a(rQ,"greaterThan");function sQ(e,t,r,s,n=!1,i=void 0,o=void 0){ii(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),Gc(e,t,r,s,u,n,i,o,!1,!1)}a(sQ,"greaterThanEqual");function nQ(e,t,r,s,n=!1,i=void 0,o=void 0){ii(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),Gc(e,t,r,u,s,n,i,o,!1,!0)}a(nQ,"lessThan");function iQ(e,t,r,s,n=!1,i=void 0,o=void 0){ii(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),Gc(e,t,r,u,s,n,i,o,!1,!1)}a(iQ,"lessThanEqual");function oQ(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(Hr.validateEnv(e),r===void 0)throw new Error(ft.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(ft.START_VALUE_REQUIRED);if(n===void 0)throw new Error(ft.END_VALUE_REQUIRED);if(s=Hr.convertKeyValueToWrite(s),n=Hr.convertKeyValueToWrite(n),s>n)throw new Error(ft.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Gc(e,t,r,s,n,i,o,c)}a(oQ,"between");function aQ(e,t,r,s){Hr.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(ft.HASH_ATTRIBUTE_REQUIRED);if(k_(r),r=kc(n,r),s===void 0)throw new Error(ft.ID_REQUIRED);let o=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(o=G_.parseRow(c,r)),o}a(aQ,"searchByHash");function cQ(e,t,r){Hr.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(ft.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ft.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(cQ,"checkHashExists");function uQ(e,t,r,s,n=[]){return AI(e,t,r,s,n),RI(e,t,r,s,n).map(i=>i[1])}a(uQ,"batchSearchByHash");function lQ(e,t,r,s,n=[]){AI(e,t,r,s,n);let i=new Map;for(let[o,c]of RI(e,t,r,s,n))i.set(o,c);return i}a(lQ,"batchSearchByHashToMap");function RI(e,t,r,s,n=[]){return Qi(e,t,t,(i,o,c)=>{r=kc(c,r);let u=r.length<3;return s.map(_=>{let l=c.dbis[t].get(_,{transaction:i,lazy:u});if(l)return[_,G_.parseRow(l,r)];n.push(_)}).filter(_=>_)})}a(RI,"batchHashSearch");function AI(e,t,r,s,n){if(Hr.validateEnv(e),t===void 0)throw new Error(ft.HASH_ATTRIBUTE_REQUIRED);if(k_(r),s==null)throw new Error(ft.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(ft.IDS_MUST_BE_ITERABLE)}a(AI,"initializeBatchSearchByHash");function k_(e){if(!Array.isArray(e))throw e===void 0?new Error(ft.FETCH_ATTRIBUTES_REQUIRED):new Error(ft.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(k_,"validateFetchAttributes");function ii(e,t,r){if(Hr.validateEnv(e),t===void 0)throw new Error(ft.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ft.SEARCH_VALUE_REQUIRED);if(r?.length>WW)throw new Error(ft.SEARCH_VALUE_TOO_LARGE)}a(ii,"validateComparisonFunctions");function kc(e,t){return t.length===1&&YW.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=ni.listDBIs(e)),t}a(kc,"setGetWholeRowAttributes");OI.exports={searchAll:QW,searchAllToMap:zW,count:ZW,countAll:XW,equals:jW,startsWith:eQ,endsWith:tQ,contains:gI,searchByHash:aQ,setGetWholeRowAttributes:kc,batchSearchByHash:uQ,batchSearchByHashToMap:lQ,checkHashExists:cQ,iterateDBI:JW,greaterThan:rQ,greaterThanEqual:sQ,lessThan:nQ,lessThanEqual:iQ,between:oQ}});var Zo=T((lle,wI)=>{var bI=require("lodash"),NI=Je(),fe=require("joi"),_Q=z(),{hdb_schema_table:Vc,checkValidTable:yI,hdb_table:II,hdb_database:V_}=Ks(),{handleHDBError:dQ,hdb_errors:fQ}=Z(),{getDatabases:EQ}=(ge(),ee(xe)),{HTTP_STATUS_CODES:hQ}=fQ,mQ=fe.object({database:V_,schema:V_,table:II,search_attribute:Vc,search_value:fe.any().required(),get_attributes:fe.array().min(1).items(fe.alternatives(Vc,fe.object())).optional(),desc:fe.bool(),limit:fe.number().integer().min(1),offset:fe.number().integer().min(0)}),pQ=fe.object({database:V_,schema:V_,table:II,operator:fe.string().valid("and","or").default("and").lowercase(),offset:fe.number().integer().min(0),limit:fe.number().integer().min(1),get_attributes:fe.array().min(1).items(fe.alternatives(Vc,fe.object())).optional(),sort:fe.object({attribute:fe.alternatives(Vc,fe.array().min(1)),descending:fe.bool().optional()}).optional(),conditions:fe.array().min(1).items(fe.alternatives(fe.object({operator:fe.string().valid("and","or").default("and").lowercase(),conditions:fe.array()}),fe.object({search_attribute:fe.alternatives(Vc,fe.array().min(1)),search_type:fe.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:fe.when("search_type",{switch:[{is:"equals",then:fe.any()},{is:"between",then:fe.array().items(fe.alternatives([fe.string(),fe.number()])).length(2)}],otherwise:fe.alternatives(fe.string(),fe.number())}).required()}))).required()});wI.exports=function(e,t){let r=null;switch(t){case"value":r=NI.validateBySchema(e,mQ);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(yI("database",e.schema)),i(yI("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(o=>typeof o=="string"||typeof o=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(o=>typeof o=="string"||typeof o=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),n&&(r=new Error(n.trim()));break;case"conditions":r=NI.validateBySchema(e,pQ);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=_Q.checkGlobalSchemaTable(e.schema,e.table);if(n)return dQ(new Error,n,hQ.NOT_FOUND);let o=EQ()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let u=a(l=>{for(let d=0,f=l.conditions.length;d<f;d++){let E=l.conditions[d];E.conditions?u(E):c.push(E.search_attribute)}},"addConditions");t==="conditions"&&u(e);let _=bI.filter(c,l=>l!=="*"&&l.attribute!=="*"&&!Array.isArray(l)&&!bI.some(o,d=>d===l||d.attribute===l||d.attribute===l.attribute));if(_&&_.length>0){let l=_.join(", ");return l=l.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${l}'`)}}return r}});var lp=T((dle,CI)=>{"use strict";var SQ=Ke(),TQ=Zo(),{getSchemaPath:gQ}=ze();CI.exports=RQ;function RQ(e){let t=TQ(e,"hashes");if(t)throw t;let r=gQ(e.schema,e.table);return SQ.openEnvironment(r,e.table)}a(RQ,"initialize")});var _p=T((Ele,DI)=>{"use strict";var AQ=jo(),OQ=lp();DI.exports=bQ;async function bQ(e){let t=await OQ(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return AQ.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(bQ,"lmdbGetDataByHash")});var ea=T((mle,LI)=>{"use strict";var dp=class{static{a(this,"SearchByHashObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};LI.exports=dp});var MI=T((Tle,UI)=>{"use strict";var Sle=ea(),NQ=jo(),yQ=lp();UI.exports=IQ;async function IQ(e){let t=await yQ(e),r=global.hdb_schema[e.schema][e.table];return NQ.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(IQ,"lmdbSearchByHash")});var Xs=T((Rle,PI)=>{"use strict";var fp=class{static{a(this,"SearchObject")}constructor(t,r,s,n,i,o,c,u=!1,_=void 0,l=void 0){this.schema=t,this.table=r,this.search_attribute=s,this.search_value=n,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=u,this.limit=_,this.offset=l}};PI.exports=fp});var $_=T((Ole,FI)=>{"use strict";var Jt=jo(),wQ=Ke(),CQ=z(),Ee=mt(),zi=D(),DQ=Bi(),vI=Ir().LMDB_ERRORS_ENUM,{getSchemaPath:LQ}=ze(),On=zi.SEARCH_WILDCARDS;async function UQ(e,t,r){let s;e.schema===zi.SYSTEM_SCHEMA_NAME?s=DQ[e.table]:s=global.hdb_schema[e.schema][e.table];let n=qI(e,s.hash_attribute,r,t);return HI(e,n,s.hash_attribute,r)}a(UQ,"prepSearch");async function HI(e,t,r,s){let n=LQ(e.schema,e.table),i=await wQ.openEnvironment(n,e.table),o=xI(i,e,t,r),c=o.transaction||i;if([Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,Ee.SEARCH_TYPES.SEARCH_ALL,Ee.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(MQ(e,r)===!1){let l=e.search_attribute;if(l===r)return s?BI(o,()=>!0):o.map(f=>({[r]:f.key}));let d=a(f=>({[r]:f.value,[l]:f.key}),"toObject");return s?BI(o,d):o.map(d)}let _=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return s===!0?Jt.batchSearchByHashToMap(c,r,e.get_attributes,_):Jt.batchSearchByHash(c,r,e.get_attributes,_)}a(HI,"executeSearch");function xI(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:o,limit:c,offset:u}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,u=Number.isInteger(u)?u:void 0,r){case Ee.SEARCH_TYPES.EQUALS:n=Jt.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.CONTAINS:n=Jt.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.ENDS_WITH:case Ee.SEARCH_TYPES._ENDS_WITH:n=Jt.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.STARTS_WITH:case Ee.SEARCH_TYPES._STARTS_WITH:n=Jt.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Jt.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Jt.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case Ee.SEARCH_TYPES.SEARCH_ALL:return Jt.searchAll(e,s,t.get_attributes,o,c,u);case Ee.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Jt.searchAllToMap(e,s,t.get_attributes,o,c,u);case Ee.SEARCH_TYPES.BETWEEN:n=Jt.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case Ee.SEARCH_TYPES.GREATER_THAN:case Ee.SEARCH_TYPES._GREATER_THAN:n=Jt.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.GREATER_THAN_EQUAL:case Ee.SEARCH_TYPES._GREATER_THAN_EQUAL:n=Jt.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.LESS_THAN:case Ee.SEARCH_TYPES._LESS_THAN:n=Jt.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.LESS_THAN_EQUAL:case Ee.SEARCH_TYPES._LESS_THAN_EQUAL:n=Jt.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return n}a(xI,"searchByType");function BI(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(BI,"createMapFromIterable");function MQ(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.search_attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let s=!1;for(let n=0;n<e.get_attributes.length;n++)if(r.indexOf(e.get_attributes[n])<0){s=!0;break}return s}a(MQ,"checkToFetchMore");function qI(e,t,r,s){if(CQ.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),o=n.charAt(n.length-1),c=!1;if(e.search_attribute===t&&(c=!0),On.indexOf(n)>-1)return r===!0?Ee.SEARCH_TYPES.SEARCH_ALL_TO_MAP:Ee.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(On[0])<0&&n.indexOf(On[1])<0)return c===!0?r===!0?Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:Ee.SEARCH_TYPES.EQUALS;if(On.indexOf(i)>=0&&On.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),Ee.SEARCH_TYPES.CONTAINS;if(On.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),Ee.SEARCH_TYPES.ENDS_WITH;if(On.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),Ee.SEARCH_TYPES.STARTS_WITH;if(n.includes(On[0])||n.includes(On[1]))return Ee.SEARCH_TYPES.EQUALS;throw new Error(vI.UNKNOWN_SEARCH_TYPE)}else switch(s){case zi.VALUE_SEARCH_COMPARATORS.BETWEEN:return Ee.SEARCH_TYPES.BETWEEN;case zi.VALUE_SEARCH_COMPARATORS.GREATER:return Ee.SEARCH_TYPES.GREATER_THAN;case zi.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return Ee.SEARCH_TYPES.GREATER_THAN_EQUAL;case zi.VALUE_SEARCH_COMPARATORS.LESS:return Ee.SEARCH_TYPES.LESS_THAN;case zi.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return Ee.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(vI.UNKNOWN_SEARCH_TYPE)}}a(qI,"createSearchTypeFromSearchObject");FI.exports={executeSearch:HI,createSearchTypeFromSearchObject:qI,prepSearch:UQ,searchByType:xI}});var kI=T((yle,GI)=>{"use strict";var Nle=Xs(),PQ=Zo(),vQ=z(),BQ=D(),HQ=$_();GI.exports=xQ;function xQ(e,t){if(!vQ.isEmpty(t)&&BQ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=PQ(e,"value");if(s)throw s;return HQ.prepSearch(e,t,!0)}a(xQ,"lmdbGetDataByValue")});var $c=T((Cle,VI)=>{"use strict";var wle=Xs(),qQ=Zo(),FQ=z(),GQ=D(),kQ=$_();VI.exports=VQ;async function VQ(e,t){if(!FQ.isEmpty(t)&&GQ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=qQ(e,"value");if(s)throw s;return kQ.prepSearch(e,t,!1)}a(VQ,"lmdbSearchByValue")});var YI=T((Ule,$I)=>{"use strict";var Lle=mt(),Ep=class{static{a(this,"SearchByConditionsObject")}constructor(t,r,s,n,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=o,this.conditions=n,this.operator=c}},hp=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},mp=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};$I.exports={SearchByConditionsObject:Ep,SearchCondition:hp,SortAttribute:mp}});var JI=T((Ble,zI)=>{"use strict";var Ple=YI().SearchByConditionsObject,$Q=Xs(),YQ=Zo(),pp=jo(),Y_=mt(),{Resource:vle}=(Ns(),ee(Sp)),QI=$_(),KQ=up(),WQ=require("lodash"),{getSchemaPath:QQ}=ze(),KI=Ke(),{handleHDBError:zQ,hdb_errors:JQ}=Z(),{HTTP_STATUS_CODES:XQ}=JQ,jQ=1e8;zI.exports=ZQ;async function ZQ(e){let t=YQ(e,"conditions");if(t)throw zQ(t,t.message,XQ.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=QQ(e.schema,e.table),s=await KI.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)KI.openDBI(s,_.search_attribute);let i=WQ.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let l=_.search_type;l===Y_.SEARCH_TYPES.EQUALS?_.estimated_count=pp.count(s,_.search_attribute,_.search_value):l===Y_.SEARCH_TYPES.CONTAINS||l===Y_.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=jQ}return _.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await WI(o,e,i[0],n.hash_attribute),u;if(!e.operator||e.operator.toLowerCase()==="and"){let _=s.dbis[n.hash_attribute],l=i.slice(1).map(QI.filterByType),d=l.length,f=pp.setGetWholeRowAttributes(s,e.get_attributes);u=c.map(E=>_.get(E,{transaction:o,lazy:!0})),d>0&&(u=u.filter(E=>{for(let h=0;h<d;h++)if(!l[h](E))return!1;return!0})),(e.offset||e.limit!==void 0)&&(u=u.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),u=u.map(E=>KQ.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await WI(o,e,f,n.hash_attribute);c=c.concat(E)}let _=new Set,l=e.offset||0;c=c.filter(d=>_.has(d)?!1:(_.add(d),!0)).slice(l,e.limit&&e.limit+l),u=pp.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(ZQ,"lmdbSearchByConditions");async function WI(e,t,r,s){let n=new $Q(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===Y_.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,QI.searchByType(e,n,i,s).map(o=>o.value)}a(WI,"executeConditionSearch")});var ta=T((xle,XI)=>{"use strict";var ez=D().OPERATIONS_ENUM,Tp=class{static{a(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=ez.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};XI.exports=Tp});var gp=T((Fle,iw)=>{"use strict";var tw=Xs(),rw=ta(),sw=$c(),nw=Fc(),ar=D(),jI=z(),ZI=Ke(),{getTransactionAuditStorePath:tz,getSchemaPath:rz}=ze(),ew=G();iw.exports=sz;async function sz(e){try{if(jI.isEmpty(global.hdb_schema[e.schema])||jI.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await nz(e),await iz(e);let t=rz(e.schema,e.table);try{await ZI.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")ew.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=tz(e.schema,e.table);await ZI.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")ew.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(sz,"lmdbDropTable");async function nz(e){let t=new tw(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,ar.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[ar.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await sw(t)),s=[];for(let i=0;i<r.length;i++){let o=r[i];s.push(o.id)}if(s.length===0)return;let n=new rw(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await nw(n)}a(nz,"deleteAttributesFromSystem");async function iz(e){let t=new tw(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,ar.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[ar.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,ar.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,ar.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await sw(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let o=r[i];o.name===e.table&&o.schema===e.schema&&(s=o)}if(!s)throw new Error(`${e.schema}.${e.table} was not found`);let n=new rw(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await nw(n)}catch(i){throw i}}a(iz,"dropTableFromSystem")});var aw=T((kle,ow)=>{"use strict";var oz=require("fs-extra"),az=Xs(),cz=ea(),uz=ta(),lz=gp(),_z=Fc(),dz=_p(),fz=$c(),bn=D(),{getSchemaPath:Ez}=ze(),{handleHDBError:hz,hdb_errors:mz}=Z(),{HDB_ERROR_MSGS:pz,HTTP_STATUS_CODES:Sz}=mz;ow.exports=Tz;async function Tz(e){let t;try{t=await gz(e.schema);let r=new az(bn.SYSTEM_SCHEMA_NAME,bn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,bn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[bn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await fz(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await lz(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new uz(bn.SYSTEM_SCHEMA_NAME,bn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await _z(n);let i=Ez(t);await oz.remove(i)}catch(r){throw r}}a(Tz,"lmdbDropSchema");async function gz(e){let t=new cz(bn.SYSTEM_SCHEMA_NAME,bn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[bn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await dz(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw hz(new Error,pz.SCHEMA_NOT_FOUND(e),Sz.NOT_FOUND,void 0,void 0,!0);return s}a(gz,"validateDropSchema")});var K_=T(($le,cw)=>{"use strict";var Rp=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};cw.exports=Rp});var lw=T((Wle,uw)=>{"use strict";var Rz=require("fs-extra"),W_=Ke(),{getTransactionAuditStorePath:Az}=ze(),Ap=mt(),Kle=K_();uw.exports=Oz;async function Oz(e){let t;try{let r=Az(e.schema,e.table);await Rz.mkdirp(r),t=await W_.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{W_.createDBI(t,Ap.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),W_.createDBI(t,Ap.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),W_.createDBI(t,Ap.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(Oz,"createTransactionsAuditEnvironment")});var Ew=T((zle,fw)=>{"use strict";var Op=D(),_w=Ke(),bz=Fo(),{getSystemSchemaPath:Nz,getSchemaPath:yz}=ze(),Iz=Bi(),wz=h_(),bp=E_(),Cz=G(),Dz=lw(),yp=Iz.hdb_table,dw=[];for(let e=0;e<yp.attributes.length;e++)dw.push(yp.attributes[e].attribute);fw.exports=Lz;async function Lz(e,t){let r=yz(t.schema,t.table),s=new bp(t.schema,t.table,Op.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new bp(t.schema,t.table,Op.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new bp(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await _w.createEnvironment(r,t.table),e!==void 0){let o=await _w.openEnvironment(Nz(),Op.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await bz.insertRecords(o,yp.hash_attribute,dw,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await Np(s),await Np(n),await Np(i)}await Dz(t)}catch(o){throw o}}a(Lz,"lmdbCreateTable");async function Np(e){try{await wz(e)}catch(t){Cz.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Np,"createAttribute")});var mw=T((Xle,hw)=>{"use strict";var Uz=yc(),Mz=Lc(),Pz=x_(),Yc=D(),vz=Fo().updateRecords,Bz=Ke(),{getSchemaPath:Hz}=ze(),xz=xc(),qz=G();hw.exports=Fz;async function Fz(e){try{let{schema_table:t,attributes:r}=Uz(e);Mz(e,r,t.hash_attribute),e.schema!==Yc.SYSTEM_SCHEMA_NAME&&(r.includes(Yc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Yc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Yc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Yc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await Pz(e.hdb_auth_header,t,r),n=Hz(e.schema,e.table),i=await Bz.openEnvironment(n,e.table),o=await vz(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await xz(e,o)}catch(c){qz.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(Fz,"lmdbUpdateRecords")});var Sw=T((Zle,pw)=>{"use strict";var Gz=D().OPERATIONS_ENUM,Ip=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=Gz.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};pw.exports=Ip});var gw=T((r_e,Tw)=>{"use strict";var t_e=Sw(),kz=yc(),Vz=Lc(),$z=x_(),Kc=D(),Yz=Fo().upsertRecords,Kz=Ke(),{getSchemaPath:Wz}=ze(),Qz=xc(),zz=G(),{handleHDBError:Jz,hdb_errors:Xz}=Z();Tw.exports=jz;async function jz(e){let t;try{t=kz(e)}catch(u){throw Jz(u,u.message,Xz.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;Vz(e,s,r.hash_attribute),e.schema!==Kc.SYSTEM_SCHEMA_NAME&&(s.includes(Kc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Kc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Kc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Kc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await $z(e.hdb_auth_header,r,s),i=Wz(e.schema,e.table),o=await Kz.openEnvironment(i,e.table),c=await Yz(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await Qz(e,c)}catch(u){zz.error(`unable to write transaction due to ${u.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:n,txn_time:c.txn_time}}a(jz,"lmdbUpsertRecords")});var Aw=T((n_e,Rw)=>{"use strict";var wp=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};Rw.exports=wp});var bw=T((o_e,Ow)=>{"use strict";var Cp=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};Ow.exports=Cp});var Iw=T((u_e,yw)=>{"use strict";var Dp=Ke(),{getTransactionAuditStorePath:Zz}=ze(),c_e=Aw(),Wc=mt(),eJ=z(),Nw=bw(),tJ=require("util").promisify,rJ=tJ(setTimeout),sJ=1e4,nJ=100;yw.exports=iJ;async function iJ(e){let t=Zz(e.schema,e.table),r=await Dp.openEnvironment(t,e.table,!0),s=Dp.listDBIs(r);Dp.initializeDBIs(r,Wc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new Nw;do n=await oJ(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=n.start_timestamp),n.end_timestamp!==void 0&&(i.end_timestamp=n.end_timestamp),i.transactions_deleted+=n.transactions_deleted,await rJ(nJ);while(n.transactions_deleted>0);return i}a(iJ,"deleteAuditLogsBefore");async function oJ(e,t){let r=new Nw;try{let s=e.dbis[Wc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:o}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let c=o[Wc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];eJ.isEmpty(c)||(n=e.dbis[Wc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)n=e.dbis[Wc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>sJ)break}return await n,r}catch(s){throw s}}a(oJ,"deleteTransactions")});var Cw=T((__e,ww)=>{"use strict";var Lp=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};ww.exports=Lp});var Lw=T((E_e,Dw)=>{"use strict";var aJ=Xs(),cJ=ta(),f_e=Cw(),js=D(),uJ=z(),Up=Ke(),lJ=Bi(),_J=$c(),dJ=Fc(),{getSchemaPath:fJ}=ze();Dw.exports=EJ;async function EJ(e,t=!0){let r;e.schema===js.SYSTEM_SCHEMA_NAME?r=lJ[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await mJ(e),n=fJ(e.schema,e.table),i=await Up.openEnvironment(n,e.table);return t===!0&&await hJ(e,i,r.hash_attribute),Up.dropDBI(i,e.attribute),s}a(EJ,"lmdbDropAttribute");async function hJ(e,t,r){let s=Up.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:c,version:u}of s.getRange({start:!1,versions:!0})){let _={};for(let l in c)l!==i&&(_[l]=c[l]);n=t.dbis[r].put(o,_,u)}await n}a(hJ,"removeAttributeFromAllObjects");async function mJ(e){let t=new aJ(js.SYSTEM_SCHEMA_NAME,js.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,js.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[js.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,js.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await _J(t)).filter(o=>o[js.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(uJ.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[js.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new cJ(js.SYSTEM_SCHEMA_NAME,js.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return dJ(i)}a(mJ,"dropAttributeFromSystem")});var Hw=T((p_e,Bw)=>{"use strict";var Mp=Ke(),ra=mt(),m_e=wr(),Pp=D(),Uw=z(),{getTransactionAuditStorePath:pJ}=ze(),SJ=jo(),Q_=zo(),TJ=G();Bw.exports=gJ;async function gJ(e){let t=pJ(e.schema,e.table),r=await Mp.openEnvironment(t,e.table,!0),s=Mp.listDBIs(r);Mp.initializeDBIs(r,ra.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case Pp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return Mw(r,e.search_values);case Pp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,AJ(r,e.search_values,n);case Pp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return RJ(r,e.search_values);default:return Mw(r)}}a(gJ,"readAuditLog");function Mw(e,t=[0,Date.now()]){Uw.isEmpty(t[0])&&(t[0]=0),Uw.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[ra.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let n of r.getKeys({start:t[1]}))if(n!==t[1]){s=n;break}return r.getRange({start:t[0],end:s}).map(({value:n})=>Object.assign(new Q_,n))}a(Mw,"searchTransactionsByTimestamp");function RJ(e,t=[]){let r=new Map;for(let s=0;s<t.length;s++){let n=t[s],i=[];for(let o of e.dbis[ra.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,vw(e,i))}return Object.fromEntries(r)}a(RJ,"searchTransactionsByUsername");function AJ(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let _=t[c],l=SJ.equals(e,ra.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,ra.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,_);for(let{value:d}of l){let f=Number(d);s.has(f)?s.get(f).push(_.toString()):s.set(f,[_.toString()])}}let n=Array.from(s.keys()),i=vw(e,n),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],_=u.timestamp,l=s.get(_);Pw(u,"records",r,l,o),Pw(u,"original_records",r,l,o)}return Object.fromEntries(o)}a(AJ,"searchTransactionsByHashValues");function Pw(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],u=c[r].toString();if(s.indexOf(u)>=0)if(n.has(u)){let _=n.get(u),l=_[_.length-1];if(l.timestamp===i)l[t]=[c];else{let d=new Q_(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new Q_(e.operation,e.user_name,i,void 0);_[t]=[c],n.set(u,[_])}}}a(Pw,"loopRecords");function vw(e,t){let r=[];try{let s=e.dbis[ra.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let n=0;n<t.length;n++)try{let i=s.get(t[n]);if(i){let o=Object.assign(new Q_,i);r.push(o)}}catch(i){TJ.warn(i)}return r}catch(s){throw s}}a(vw,"batchSearchTransactions")});var qw=T((R_e,xw)=>{"use strict";var{getSchemaPath:T_e}=ze(),g_e=Ke(),{database:OJ}=(ge(),ee(xe));xw.exports={writeTransaction:bJ};async function bJ(e,t,r){return OJ({database:e,table:t}).transaction(r)}a(bJ,"writeTransaction")});var Vw=T((O_e,kw)=>{"use strict";var{getSchemaPath:Fw}=ze(),Gw=Ke();kw.exports={flush:NJ,resetReadTxn:yJ};async function NJ(e,t){return(await Gw.openEnvironment(Fw(e,t),t.toString())).flushed}a(NJ,"flush");async function yJ(e,t){try{(await Gw.openEnvironment(Fw(e,t),t.toString())).resetReadTxn()}catch{}}a(yJ,"resetReadTxn")});var Ww=T((N_e,Kw)=>{"use strict";var{Readable:IJ}=require("stream"),{getDatabases:wJ}=(ge(),ee(xe)),{readSync:CJ,openSync:DJ,createReadStream:$w}=require("fs"),{open:LJ}=require("lmdb"),Yw=n_(),UJ=o_(),{AUDIT_STORE_OPTIONS:MJ}=(Pi(),ee(Qw)),{INTERNAL_DBIS_NAME:PJ,AUDIT_STORE_NAME:vJ}=mt();Kw.exports=HJ;var vp=32768,BJ=100;async function HJ(e){let t=e.database||e.schema||"data",r=wJ()[t],s=new Date().toISOString(),n=e.tables||e.table&&[e.table];if(n){let _=r[n[0]];if(!_)throw new Error(`Can not find table ${n[0]}`);let l=_.dbisDB,d=LJ({noSync:!0,maxDbs:UJ.MAX_DBS}),f,E=d.openDB(PJ,new Yw(!1)),h=l.useReadTransaction(),p=0,S=a(async function(I,w){w.encoding="binary",w.encoder=void 0;let B=d.openDB(I,w),K=l.openDB(I,w);for(let{key:q,version:P,value:Q}of K.getRange({transaction:h,versions:K.useVersions}))f=B.put(q,Q,P),p++%BJ===0&&(await new Promise(Y=>setTimeout(Y,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:I,value:w}of l.getRange({transaction:h,start:!1}))if(n.some(B=>I.startsWith?.(B+"/"))){E.put(I,w);let[,B]=I.split("/"),K=!B,q=new Yw(!K,K);await S(I,q)}e.include_audit&&await S(vJ,Object.assign({},MJ)),await f;let R=$w(d.path);return R.headers=u(),R.on("close",()=>{h.done(),d.close()}),R}let o=r[Object.keys(r)[0]].primaryStore,c=DJ(o.path);return o.transaction(()=>{let _=Buffer.alloc(vp);CJ(c,_,0,vp),o.resetReadTxn();let l=o.useReadTransaction();l.renew();let d=$w(null,{fd:c,start:vp}),f=new IJ.from(async function*(){yield _;for await(let E of d)l.openTimer&&(l.openTimer=0),yield E;l.done()}());return f.headers=u(),f});function u(){let _=new Map;return _.set("content-type","application/octet-stream"),_.set("content-disposition",`attachment; filename="${t}"`),_.set("date",s),_}}a(HJ,"getBackup")});var Xw=T((I_e,Jw)=>{"use strict";var xJ=G(),{handleHDBError:qJ}=Z(),FJ=lb(),GJ=h_(),kJ=np(),VJ=aI(),$J=Fc(),YJ=_p(),KJ=MI(),WJ=kI(),QJ=$c(),zJ=JI(),JJ=aw(),XJ=Ew(),jJ=mw(),ZJ=gw(),e2=Iw(),t2=gp(),r2=Lw(),s2=Hw(),n2=qw(),zw=Vw(),i2=Ww(),Bp=class extends FJ{static{a(this,"LMDBBridge")}async searchByConditions(t){return zJ(t)}async getDataByHash(t){return await YJ(t)}async searchByHash(t){return await KJ(t)}async getDataByValue(t,r){return await WJ(t,r)}async searchByValue(t){return await QJ(t)}async createSchema(t){return await VJ(t)}async dropSchema(t){return await JJ(t)}async createTable(t,r){return await XJ(t,r)}async dropTable(t){return await t2(t)}async createAttribute(t){return await GJ(t)}async createRecords(t){return await kJ(t)}async updateRecords(t){return await jJ(t)}async upsertRecords(t){try{return await ZJ(t)}catch(r){throw qJ(r,null,null,xJ.ERR,r)}}async deleteRecords(t){return await $J(t)}async dropAttribute(t){return await r2(t)}async deleteAuditLogsBefore(t){return await e2(t)}async readAuditLog(t){return await s2(t)}writeTransaction(t,r,s){return n2.writeTransaction(t,r,s)}flush(t,r){return zw.flush(t,r)}resetReadTxn(t,r){return zw.resetReadTxn(t,r)}getBackup(t){return i2(t)}};Jw.exports=Bp});function u2(){c2=setInterval(function(){for(let e of Hp)if(e.stale){let t=e[Re]?.url;jw.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},a2).unref()}var xp,jw,o2,Hp,Ji,z_,a2,c2,qp=Ae(()=>{xp=v(wr()),jw=v(G());Ns();o2=100,Hp=new Set,Ji=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(),Hp.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(Hp.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,xp.getNextMonotonicTime)());let s=t.retries||0;if(this.validated<this.writes.length)try{let l=this.validated;this.validated=this.writes.length;for(let f=l;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let d;for(let f=l;f<this.validated;f++){let E=this.writes[f];E&&(E.before||E.beforeIntermediate)&&(d=!0)}if(d)return(async()=>{try{for(let f=0;f<2;f++){let E;for(let h=l;h<this.validated;h++){let p=this.writes[h];if(!p)continue;let S=p[f===0?"before":"beforeIntermediate"];if(S){let 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(l){throw this.abort(),l}s||this.doneReadTxn(),t?.prepared?.(),this.open=!1;let n,i=[],o=0;this.writes=this.writes.filter(l=>l);let c=a(l=>{l.commit(r,l.entry,s)},"doWrite"),u=a(()=>{let l=this.writes[o++];if(l)if(l.key){s>0&&(l.entry=l.store.getEntry(l.key));let d=l.store.ifVersion(l.key,l.entry?.version??null,u);n=n||d}else u();else for(let d of this.writes)c(d)},"nextCondition");if(this.writes.length<o2>>s?u():n=this.writes[0].store.transaction(()=>{for(let l of this.writes)l.entry=l.store.getEntry(l.key),c(l);return!0}),n)return n.then(l=>l?(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))):(t?t.retries=s+1:t={retries:1},this.commit(t)));let _={txnTime:r};if(this.next){let l=this.next?.commit(t);if(l?.then)return l?.then(d=>({txnTime:r,next:d}));_.next=l}return _}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=!1,this.writes=[]}},z_=class extends Ji{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,xp.getNextMonotonicTime)())}getReadTxn(){}},a2=3e4;a(u2,"startMonitoringTxns");u2()});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 s=e.transaction=new Ji;e.timestamp&&(s.timestamp=e.timestamp),s[Re]=e,e.resourceCache||(e.resourceCache=[]);let n;try{if(n=t(s),n?.then)return n.then(i,o)}catch(c){o(c)}return i(n);function i(c){let u=s.commit(r?.resetTransaction?{prepared(){s.autoCommitMode=!0}}:{});return u.then?u.then(()=>c):c}function o(c){throw s.abort({}),c}}var Zw,Xi=Ae(()=>{Zw=require("../index");Ns();qp();a(Xe,"transaction");(0,Zw._assignPackageExport)("transaction",Xe);Xe.commit=function(e){let t=(e[Re]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Xe.abort=function(e){let t=(e[Re]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var cC={};$e(cC,{ResourceBridge:()=>kp});function Vp({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 tC(e,t){let r=Zs(e),s=Vp(e,r);if(!r)throw new Us.ClientError(`Table ${e.table} not found`);let n;s&&r.attributes.length-s.length>2&&s.length<5&&(n=!0);let i={user:e.hdb_user},o;Xe(i,()=>new Promise(_=>o=_));let c=e.ids||e.hash_values,u=0;return{[Symbol.asyncIterator](){return{async next(){if(u<c.length){let _=c[u++],l=await r.get({id:_,lazy:n,select:s},i);return l=l&&X_(l),t?{value:{key:_,value:l}}:{value:l}}else return o(),{done:!0}},return(_){return o(),{value:_,done:!0}},throw(_){return o(),{done:!0}}}}}}function Zs(e){let t=e.database||e.schema||_2,r=Ms()[t];if(!r)throw(0,Us.handleHDBError)(new Error,l2.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function rC(e,t,r){let s=e.length+t.length,n=s===1?"record":"records";return{message:`${e.length} of ${s} ${n} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}async function*sC(e,t,r){let s;for await(let n of e.getHistory(t,r)){let i=n.type;i==="put"&&(i="upsert");let{id:o,version:c,value:u}=n;s?.timestamp===c?(s.hash_values.push(o),s.records.push(u)):(s&&(yield s),s={operation:i,user_name:n.user,timestamp:c,hash_values:[o],records:[u]})}s&&(yield s)}var nC,J_,Us,iC,oC,Ps,Fp,Gp,aC,l2,_2,d2,f2,eC,kp,uC=Ae(()=>{"use strict";nC=v(Xw()),J_=v(Zo()),Us=v(Z());ge();iC=v(yc()),oC=v(Lc()),Ps=v(D()),Fp=v(An()),Gp=v(Ls()),aC=v(z());Xi();j_();({HDB_ERROR_MSGS:l2}=Us.hdb_errors),_2="data",d2=1e4,f2=10,kp=class extends nC.default{static{a(this,"ResourceBridge")}constructor(t){super(t),eC=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,J_.default)(t,"conditions");if(r)throw(0,Us.handleHDBError)(r,r.message,400,void 0,void 0,!0);let s=Zs(t);if(!s)throw new Us.ClientError(`Table ${t.table} not found`);let n=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"),s.search({conditions:n,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:Vp(t,s),sort:t.sort,allowFullScan:!0})}async createTable(t,r){let s=r.attributes,n=!!s,i=r.primary_key||r.hash_attribute;if(s)for(let o of s)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new Us.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");s=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}dt({database:r.schema,table:r.table,attributes:s,schemaDefined:n,expiration:r.expiration})}async createAttribute(t){return await Zs(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Zs(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let s=t.attribute,n,i=a((o,c,u)=>(c=Object.assign({},c),delete c[s],r.primaryStore.ifVersion(o,u,()=>r.primaryStore.put(o,c,u)).then(_=>{if(!_){let{value:l,version:d}=r.primaryStore.getEntry(o);return i(o,l,d)}})),"deleteRecord");for(let{key:o,value:c,version:u}of r.primaryStore.getRange({start:!0,versions:!0}))n=i(o,c,u),await new Promise(_=>setImmediate(_));await n}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){Zs(t).dropTable()}createSchema(t){return Qc({database:t.schema,table:null}),Fp.signalSchemaChange(new Gp.SchemaEventMsg(process.pid,Ps.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await $p(t.schema),Fp.signalSchemaChange(new Gp.SchemaEventMsg(process.pid,Ps.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,eC.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:s}=(0,iC.default)(t);(0,oC.default)(t,s,r.primaryKey);let n,i=Ms()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return Xe(o,async c=>{if(!i.schemaDefined){n=[];for(let l of s)i.attributes.find(f=>f.name==l)||n.push(l);n.length>0&&await i.addAttributes(n.map(l=>({name:l,indexed:!0})))}let u=[],_=[];for(let l of t.records){let d=await i.get(l[i.primaryKey],o);if(t.requires_existing&&!d||t.requires_no_existing&&d){_.push(l[i.primaryKey]);continue}d&&(d=X_(d));for(let f in l)if(Object.prototype.hasOwnProperty.call(l,f)){let E=l[f];if(typeof E=="function")try{let h=E([[d]]);Array.isArray(h)&&(E=h[0].func_val,l[f]=E)}catch(h){throw h.message+="Trying to set key "+f+" on object"+JSON.stringify(l),h}}if(d)for(let f in d)Object.prototype.hasOwnProperty.call(l,f)||(l[f]=d[f]);await i.put(l,o),u.push(l[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:u,new_attributes:n,skipped_hashes:_}})}async deleteRecords(t){let r=Ms()[t.schema][t.table],s={user:t.hdb_user};return Xe(s,async n=>{let i=t.hash_values||t.records.map(u=>u[r.primaryKey]),o=[],c=[];for(let u of i)await r.delete(u,s)?o.push(u):c.push(u);return rC(o,c,n.timestamp)})}async deleteRecordsBefore(t){let r=Ms()[t.schema][t.table];if(!r.createdTimeProperty)throw new Us.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let s=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:Ps.VALUE_SEARCH_COMPARATORS.LESS}]}),n=!1,i=[],o=[],c=0,u=[],_=a(async()=>{let l=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:u});i.push(...l.deleted_hashes),o.push(...l.skipped_hashes),await(0,aC.async_set_timeout)(f2),u=[],n=!0},"chunkDelete");for await(let l of s)u.push(l[r.primaryKey]),c++,c%d2===0&&await _();return u.length>0&&await _(),n?rC(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,J_.default)(t,"hashes");if(r)throw r;return tC(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:s,value:n}of tC(t,!0))r.set(s,n);return r}searchByValue(t,r){if(r&&Ps.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 s=(0,J_.default)(t,"value");if(s)throw s;let n=Zs(t);if(!n)throw new Us.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===Ps.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return n.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:Vp(t,n)})}async getDataByValue(t,r){let s=new Map,n=Zs(t);t.get_attributes&&!t.get_attributes.includes(n.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(n.primaryKey);for await(let i of this.searchByValue(t,r))s.set(i[n.primaryKey],i);return s}resetReadTxn(t,r){Zs({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Zs(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=Zs(t),s={};switch(t.search_type){case Ps.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)s[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.type;return c==="put"&&(c="upsert"),{operation:c,timestamp:o.version,user_name:o.user,hash_values:[i],records:[o.value]}});return s;case Ps.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let n=t.search_values;for await(let i of sC(r))n.includes(i.user_name)&&(s[i.user_name]||(s[i.user_name]=[])).push(i);return s;default:return sC(r,t.search_values?.[0],t.search_values?.[1])}}};a(Vp,"getSelect");a(tC,"getRecords");a(Zs,"getTable");a(rC,"createDeleteResponse");a(sC,"groupRecordsInHistory")});var ws=T((G_e,lC)=>{"use strict";var{ResourceBridge:E2}=(uC(),ee(cC)),h2=j();h2.initSync();var Z_;function m2(){return Z_||(Z_=new E2,Z_)}a(m2,"getBridge");lC.exports=m2()});var EC=T((V_e,fC)=>{"use strict";var _C=require("lodash"),zc=require("mathjs"),p2=require("jsonata"),dC=z();fC.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?_C.uniqWith(e,_C.isEqual):e,searchJSON:S2,mad:Jc.bind(null,zc.mad),mean:Jc.bind(null,zc.mean),mode:Jc.bind(null,zc.mode),prod:Jc.bind(null,zc.prod),median:Jc.bind(null,zc.median)};function Jc(e,t,r,s){return s===1?t==null?[]:[t]:s===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(Jc,"aggregateFunction");function S2(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(dC.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),dC.isEmpty(this.__ala__.res[r])){let s=p2(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(S2,"searchJSON")});var mC=T((Y_e,hC)=>{"use strict";var St=require("moment"),Yp="YYYY-MM-DDTHH:mm:ss.SSSZZ";St.suppressDeprecationWarnings=!0;hC.exports={current_date:()=>St().utc().format("YYYY-MM-DD"),current_time:()=>St().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return St(e).utc().format("YYYY");case"month":return St(e).utc().format("MM");case"day":return St(e).utc().format("DD");case"hour":return St(e).utc().format("HH");case"minute":return St(e).utc().format("mm");case"second":return St(e).utc().format("ss");case"millisecond":return St(e).utc().format("SSS");default:break}},date:e=>St(e).utc().format(Yp),date_format:(e,t)=>St(e).utc().format(t),date_add:(e,t,r)=>St(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>St(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=St(e).utc(),n=St(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>St().utc().valueOf(),get_server_time:()=>St().format(Yp),offset_utc:(e,t)=>St(e).utc().utcOffset(t).format(Yp)}});var gC=T((K_e,TC)=>{"use strict";var T2=require("@turf/area"),g2=require("@turf/length"),R2=require("@turf/circle"),A2=require("@turf/difference"),O2=require("@turf/distance"),b2=require("@turf/boolean-contains"),N2=require("@turf/boolean-equal"),y2=require("@turf/boolean-disjoint"),I2=require("@turf/helpers"),pC=D(),me=z(),Nn=G();TC.exports={geoArea:w2,geoLength:C2,geoCircle:D2,geoDifference:L2,geoDistance:SC,geoNear:U2,geoContains:M2,geoEqual:P2,geoCrosses:v2,geoConvert:B2};function w2(e){if(me.isEmpty(e))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e));try{return T2.default(e)}catch(t){return Nn.trace(t,e),NaN}}a(w2,"geoArea");function C2(e,t){if(me.isEmpty(e))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e));try{return g2.default(e,{units:t||"kilometers"})}catch(r){return Nn.trace(r,e),NaN}}a(C2,"geoLength");function D2(e,t,r){if(me.isEmpty(e))return NaN;if(me.isEmpty(t))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e));try{return R2.default(e,t,{units:r||"kilometers"})}catch(s){return Nn.trace(s,e,t),NaN}}a(D2,"geoCircle");function L2(e,t){if(me.isEmpty(e))return NaN;if(me.isEmpty(t))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return A2(e,t)}catch(r){return Nn.trace(r,e,t),NaN}}a(L2,"geoDifference");function SC(e,t,r){if(me.isEmpty(e))return NaN;if(me.isEmpty(t))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return O2.default(e,t,{units:r||"kilometers"})}catch(s){return Nn.trace(s,e,t),NaN}}a(SC,"geoDistance");function U2(e,t,r,s){if(me.isEmpty(e)||me.isEmpty(t))return!1;if(me.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return SC(e,t,s)<=r}catch(n){return Nn.trace(n,e,t),!1}}a(U2,"geoNear");function M2(e,t){if(me.isEmpty(e)||me.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return b2.default(e,t)}catch(r){return Nn.trace(r,e,t),!1}}a(M2,"geoContains");function P2(e,t){if(me.isEmpty(e)||me.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return N2.default(e,t)}catch(r){return Nn.trace(r,e,t),!1}}a(P2,"geoEqual");function v2(e,t){if(me.isEmpty(e)||me.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return!y2.default(e,t)}catch(r){return Nn.trace(r,e,t),!1}}a(v2,"geoCrosses");function B2(e,t,r){if(me.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(me.isEmpty(t))throw new Error("geo_type is required");if(me.isEmpty(pC.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(pC.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=me.autoCastJSON(e)),I2[t](e,r)}a(B2,"geoConvert")});var ed=T((Q_e,RC)=>{var ji=EC(),xr=mC(),en=gC();RC.exports=e=>{e.aggr.mad=e.aggr.MAD=ji.mad,e.aggr.mean=e.aggr.MEAN=ji.mean,e.aggr.mode=e.aggr.MODE=ji.mode,e.aggr.prod=e.aggr.PROD=ji.prod,e.aggr.median=e.aggr.MEDIAN=ji.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=ji.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=ji.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=xr.current_date,e.fn.current_time=e.fn.CURRENT_TIME=xr.current_time,e.fn.extract=e.fn.EXTRACT=xr.extract,e.fn.date=e.fn.DATE=xr.date,e.fn.date_format=e.fn.DATE_FORMAT=xr.date_format,e.fn.date_add=e.fn.DATE_ADD=xr.date_add,e.fn.date_sub=e.fn.DATE_SUB=xr.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=xr.date_diff,e.fn.now=e.fn.NOW=xr.now,e.fn.offset_utc=e.fn.OFFSET_UTC=xr.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=xr.get_server_time,e.fn.getdate=e.fn.GETDATE=xr.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=xr.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=en.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=en.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=en.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=en.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=en.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=en.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=en.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=en.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=en.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=en.geoNear}});var NC=T((z_e,bC)=>{"use strict";var Xc=require("lodash"),cr=require("alasql");cr.options.cache=!1;var H2=ed(),AC=require("clone"),td=require("recursive-iterator"),ue=G(),we=z(),sa=ws(),x2=D(),{hdb_errors:q2}=Z(),{getDatabases:OC}=(ge(),ee(xe)),F2="IS NULL",vs="There was a problem performing this search. Please check the logs and try again.";H2(cr);var Kp=class{static{a(this,"SQLSearch")}constructor(t,r){if(we.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(),we.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!we.isEmptyOrZeroLength(s))return ue.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw ue.error("Error thrown from checkEmptySQL in SQLSearch class method search."),ue.error(s),new Error(vs)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw ue.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),ue.error(s),new Error(vs)}if(Object.keys(this.data).length===0)return ue.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw ue.error("Error thrown from processJoins in SQLSearch class method search."),ue.error(s),new Error(vs)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw ue.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),ue.error(s),new Error(vs)}try{return t=await this._finalSQL(),t}catch(s){throw ue.error("Error thrown from finalSQL in SQLSearch class method search."),ue.error(s),new Error(vs)}}_getColumns(){let t=new td(this.statement);for(let{node:r,path:s}of t)r&&r.columnid&&(this.columns[s[0]]||(this.columns[s[0]]=[]),this.columns[s[0]].push(AC(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Xc.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let s=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[s]={},this.data[s].__hash_name=OC()[r.databaseid][r.tableid].primaryKey,this.data[s].__merged_data={},this.data[s].__merged_attributes=[],this.data[s].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(we.isEmpty(this.statement.where)){ue.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new td(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!we.isEmpty(r)&&r.right)if(we.isNotEmptyAndHasValue(r.right.value)){let s=we.autoCast(r.right.value);[!0,!1].indexOf(s)>=0&&(r.right=new cr.yy.LogicValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=we.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new cr.yy.LogicValue({value:i}):s instanceof cr.yy.StringValue&&we.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new cr.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 td(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let s=new Set,n=r.left.columnid?r.left:r.right,i=this._findColumn(n);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!we.isEmpty(x2.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(we.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(we.isEmptyOrZeroLength(r.left.columnid)||we.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(we.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"=":!we.isEmpty(r.right.value)||!we.isEmpty(r.left.value)?s.add(we.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let u=Array.isArray(r.right)?r.right:r.left;for(let _=0;_<u.length;_++)if(u[_].value)s.add(u[_].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...s])}}}_setAliasesForColumns(){if(we.isEmptyOrZeroLength(this.all_table_attributes)&&we.isEmptyOrZeroLength(this.statement.from)&&we.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((s,n)=>{if(s.columnid==="*"){t.push(n);return}if(s.aggregatorid&&(this.has_aggregator=!0),!s.aggregatorid&&!s.funcid)if(s.as_orig=s.as?s.as:s.columnid,this.statement.joins)if(r[s.as_orig]>=0){let i=r[s.as_orig]+1;s.as=`[${s.as_orig+i}]`,r[s.as_orig]=i}else s.as=`[${s.as_orig}]`,r[s.as_orig]=0;else s.as=`[${s.as_orig}]`;!s.aggregatorid&&s.funcid&&s.args&&(s.as_orig=s.as?s.as:s.toString().replace(/'/g,'"'),s.as=`[${s.as_orig}]`),s.aggregatorid&&s.expression.columnid!=="*"&&(s.as_orig=s.as?s.as:s.expression.tableid?`${s.aggregatorid}(${s.expression.tableid}.${s.expression.columnid})`:`${s.aggregatorid}(${s.expression.columnid})`,s.as=`[${s.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&Xc.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(s=>{if(t.columnid_orig&&t.tableid_orig)return(s.table.as===t.tableid_orig||s.table.tableid===t.tableid_orig)&&s.attribute===t.columnid_orig;if(t.tableid)return(s.table.as===t.tableid||s.table.tableid===t.tableid)&&s.attribute===t.columnid;let n=t.columnid_orig?t.columnid_orig:t.columnid;return s.attribute===n});if(we.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);we.isEmptyOrZeroLength(s)||(r=this.all_table_attributes.filter(n=>n.attribute===s[0].columnid&&s[0].tableid&&s[0].tableid===(n.table.as?n.table.as:n.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(we.isEmptyOrZeroLength(this.all_table_attributes)&&!we.isEmptyOrZeroLength(this.columns.columns))return t;if(we.isEmptyOrZeroLength(this.all_table_attributes)&&we.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await cr.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 s=this._findColumn(r);s&&this.fetch_attributes.push(AC(s))})}_addColumnToMergedAttributes(t,r){this.data[t].__merged_attributes.push(r),this.data[t].__merged_attr_map[r]=this.data[t].__merged_attributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__merged_data[r].splice(0,1,r)}_updateMergedAttribute(t,r,s,n){let i=this.data[t].__merged_attr_map[s];this.data[t].__merged_data[r].splice(i,1,n)}async _getFetchAttributeValues(){if(we.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(F2)>-1&&this.tables.forEach(n=>{let i={columnid:OC()[n.databaseid][n.tableid].primaryKey,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Xc.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(n[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,o=this.data[i].__hash_name,c={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},u=!1,_=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(u=!0),!we.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!we.isEmptyOrZeroLength(this.exact_search_values[_].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[_].values);let l=await sa.getDataByHash(c);for(let d of c.hash_values)l.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,d))}catch(l){throw ue.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),ue.error(l),new Error(vs)}else try{c.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[_].values).map(async l=>{let d=Object.assign({},c);d.search_value=l;let f=await sa.getDataByValue(d);for(let[E,h]of f)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,n.attribute,h[n.attribute]):(this.data[i].__merged_data[E]=[...s[i]],this._updateMergedAttribute(i,E,n.attribute,h[n.attribute]),this._setMergedHashAttribute(i,E))}))}catch(l){throw ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),ue.error(l),new Error(vs)}else if(!we.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!we.isEmptyOrZeroLength(this.comparator_search_values[_].comparators))try{let l=this.comparator_search_values[_].comparators;for(let d=0,f=l.length;d<f;d++){let E=l[d];c.search_attribute=E.attribute,c.search_value=E.search_value;let h=await sa.getDataByValue(c,E.operation);if(u)for(let[p]of h)this.data[i].__merged_data[p]||(this.data[i].__merged_data[p]=[...s[i]],this._setMergedHashAttribute(i,p));else for(let[p,S]of h)this.data[i].__merged_data[p]?this._updateMergedAttribute(i,p,n.attribute,S[n.attribute]):(this.data[i].__merged_data[p]=[...s[i]],this._updateMergedAttribute(i,p,n.attribute,S[n.attribute]),this._setMergedHashAttribute(i,p))}}catch(l){throw ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),ue.error(l),new Error(vs)}else try{c.search_attribute=n.attribute,c.search_value="*";let l=await sa.getDataByValue(c);if(u)for(let[d]of l)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,d));else for(let[d,f]of l)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,n.attribute,f[n.attribute]):(this.data[i].__merged_data[d]=[...s[i]],this._updateMergedAttribute(i,d,n.attribute,f[n.attribute]),this._setMergedHashAttribute(i,d))}catch(l){throw ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),ue.error(l),new Error(vs)}}}_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 cr.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(n=>{let i=n.aggregatorid?n.expression:n,o=n.aggregatorid?n.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===o});r[0]||r.push(this._findColumn(t.expression));let s=r[0];if(t.is_func=!!s.funcid,t.is_aggregator=!!s.aggregatorid,s.as)if(s.as&&!t.expression.tableid)t.expression.columnid=s.as,t.expression.columnid_orig=s.as_orig;else{let n=new cr.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new cr.yy.Column,t.expression),t.initial_select_column.as=`[${t.expression.columnid_orig}]`,t.expression.columnid=t.initial_select_column.as;return}if(!t.is_aggregator){let n=t.is_func?new cr.yy.FuncValue:new cr.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(E=>{E.joinmode&&E.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(E.table);let h=E.joinmode+" JOIN ? AS "+(E.as?E.as:E.table.tableid);E.on&&(h+=" ON "+E.on.toString()),i.push(h),t.push(Object.values(this.data[`${E.table.databaseid_orig}_${E.table.as?E.table.as_orig:E.table.tableid_orig}`].__merged_data))});let o=[],c={};n.forEach(E=>{let h=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__hash_name,p=E.as?E.as_orig:E.tableid_orig;o.push({key:`'${p}.${h}'`,schema:E.databaseid_orig,table:E.as?E.as_orig:E.tableid_orig,keys:new Set}),r.push(`${E.as?E.as:E.tableid}.\`${h}\` AS "${p}.${h}"`),c[E.as?E.as_orig:E.tableid_orig]=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__merged_attributes});let u=this.statement.where?"WHERE "+this.statement.where:"";u=u.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 l="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(l=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let f=[];try{let E=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${u} ${_} ${l} ${d}`,h=this._convertColumnsToIndexes(E,n);f=await cr.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=Xc.difference(h,[...E.keys].map(S=>S.toString()));for(let S=0,R=p.length;S<R;S++){let I=p[S];delete this.data[`${E.schema}_${E.table}`].__merged_data[I]}})}return{existing_attributes:c,joined_length:f?f.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new td(this.columns);for(let{node:i}of n)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&s.push(o)}}s=Xc.uniqBy(s,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(s)}catch(i){throw ue.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),ue.error(i),new Error(vs)}}async _getData(t){try{let r=t.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]?s[i].columns.push(n.attribute):s[i]={schema:n.table.databaseid,table:n.table.tableid,columns:[n.attribute]},s},{});for(let s in r){let n=r[s],i=this.data[s].__merged_data,o=[];for(let l in i)o.push(i[l][0]);this.data[s].__merged_attributes.push(...n.columns);let c={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},u=await sa.getDataByHash(c),_=n.columns.length;for(let l=0,d=o.length;l<d;l++){let f=o[l],E=u.get(f);for(let h=0;h<_;h++){let p=n.columns[h],S=E[p]===void 0?null:E[p];this.data[s].__merged_data[f].push(S)}}}}catch(r){throw 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(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,u=o.aggregatorid?o.as_orig:c.as_orig;return n.expression.tableid?c.columnid_orig===n.expression.columnid_orig&&c.tableid_orig===n.expression.tableid_orig:c.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===u}).length===0&&(n.expression.columnid=n.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let s;try{let n=this._buildSQL();ue.trace(`Final SQL: ${n}`),s=await cr.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),ue.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw ue.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),ue.error(n),new Error("There was a problem running the generated sql.")}return s}_translateUndefinedValues(t){try{let r=[];for(let s of t){let n=Object.create(null);Object.keys(s).forEach(i=>{s[i]===void 0?n[i]=null:n[i]=s[i]}),r.push(n)}return r}catch(r){return ue.error(q2.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(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=n[i],_=new RegExp(`${u}.\`${o}\``,"g"),l=`${u}.[${c}]`;s=s.replace(_,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=new RegExp(`\`${o}\``,"g"),_=`[${c}]`;s=s.replace(u,_)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let o=await sa.getDataByValue(i);for(let[c,u]of o)this.data[n].__merged_data[c]||(u[s.attribute]===void 0&&(u[s.attribute]=null),this.data[n].__merged_data[c]=Object.assign({},r[n])),this.data[n].__merged_data[c][t[s.attribute]]=u[s.attribute]??null}catch(o){throw ue.error("There was an error when processing this SQL operation. Check your logs"),ue.error(o),new Error(vs)}}return Object.values(Object.values(this.data)[0].__merged_data)}};bC.exports=Kp});var es=T((X_e,yC)=>{"use strict";var G2=cb();yC.exports={searchByConditions:V2,searchByHash:$2,searchByValue:Y2,search:K2};var Wp=ws(),{transformReq:Qp}=z(),k2=NC();async function V2(e){return Qp(e),Wp.searchByConditions(e)}a(V2,"searchByConditions");async function $2(e){Qp(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of Wp.searchByHash(e))r&&t.push(r);return t}a($2,"searchByHash");async function Y2(e){Qp(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of Wp.searchByValue(e))t.push(r);return t}a(Y2,"searchByValue");function K2(e,t){try{let r=new G2(e);r.validate(),new k2(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(K2,"search")});var rd=T((Z_e,IC)=>{"use strict";var W2=ws();IC.exports={writeTransaction:Q2};function Q2(e,t,r){return W2.writeTransaction(e,t,r)}a(Q2,"writeTransaction")});var LC=T((rde,DC)=>{"use strict";var z2=es(),J2=Rn(),wC=G(),X2=Lr(),tde=rd(),j2=require("clone"),Jp=require("alasql"),Z2=ed(),CC=require("util"),e4=CC.promisify(J2.getTableSchema),t4=CC.promisify(z2.search),r4=D(),zp=z();Z2(Jp);DC.exports={update:n4};var s4="There was a problem performing this update. Please check the logs and try again.";async function n4({statement:e,hdb_user:t}){let r=await e4(e.table.databaseid,e.table.tableid),s=i4(e.columns);zp.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=j2(n),c=zp.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,_=Jp.parse(u).statements[0],l=await t4(_),d=o4(s,l);return a4(o,d,t)}a(n4,"update");function i4(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=Jp.compile(`SELECT ${r.expression.toString()} AS [${r4.FUNC_VAL}] FROM ?`)}),t}catch(t){throw wC.error(t),new Error(s4)}}a(i4,"createUpdateRecord");function o4(e,t){return zp.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(o4,"buildUpdateRecords");async function a4(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await X2.update(s);try{delete n.new_attributes,delete n.txn_time}catch(i){wC.error(`Error delete new_attributes from update response: ${i}`)}return n}a(a4,"updateRecords")});var MC=T((ode,UC)=>{var c4=require("alasql"),u4=es(),l4=G(),_4=ws(),jp=require("util"),Xp=z(),d4=D(),f4=Rn(),nde=rd(),ide=Lr(),E4="record",h4="successfully deleted",m4=jp.callbackify(g4),p4=jp.promisify(u4.search),S4=jp.promisify(f4.getTableSchema);UC.exports={convertDelete:m4};function T4(e){return`${e.deleted_hashes.length} ${E4}${e.deleted_hashes.length===1?"":"s"} ${h4}`}a(T4,"generateReturnMessage");async function g4({statement:e,hdb_user:t}){let r=await S4(e.table.databaseid,e.table.tableid);Xp.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=Xp.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=c4.parse(o).statements[0],u={operation:d4.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await p4(c);let _=await _4.deleteRecords(u);return Xp.isEmptyOrZeroLength(_.message)&&(_.message=T4(_)),delete _.txn_time,_}catch(_){throw l4.error(_),_.hdb_code?_.message:_}}a(g4,"convertDelete")});var xC=T((cde,HC)=>{"use strict";var R4=jn(),{hdb_errors:PC}=Z(),{getDatabases:vC}=(ge(),ee(xe));HC.exports={checkSchemaExists:BC,checkSchemaTableExists:A4,schema_describe:R4};async function BC(e){if(!vC()[e])return PC.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(BC,"checkSchemaExists");async function A4(e,t){let r=await BC(e);if(r)return r;if(!vC()[e][t])return PC.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(A4,"checkSchemaTableExists")});var jc=T((lde,O4)=>{O4.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 ru={};$e(ru,{addAnalyticsListener:()=>tu,recordAction:()=>qr,recordActionBinary:()=>ss,setAnalyticsEnabled:()=>b4});function b4(e){QC=e}function qr(e,t,r,s,n){if(!QC)return;let i=t+(r?"-"+r:"");s!==void 0&&(i+="-"+s),n!==void 0&&(i+="-"+n);let o=id.get(i);if(o)if(typeof e=="number"){let c=o.values,u=c.index++;if(u>=c.length){let _=c;o.values=c=new Float32Array(u*2),c.set(_),c.index=u+1}c[u]=e,o.total+=e}else if(typeof e=="boolean")e&&o.total++,o.count++;else if(typeof e=="function")o.count++;else throw new TypeError("Invalid metric value type "+typeof e);else{if(typeof e=="number")o={total:e,values:new Float32Array(4)},o.values.index=1,o.values[0]=e,o.total=e;else if(typeof e=="boolean")o={},o.total=e?1:0,o.count=1;else if(typeof e=="function")o={},o.count=1,o.callback=e;else throw new TypeError("Invalid metric value type "+typeof e);o.description={metric:t,path:r,method:s,type:n},id.set(i,o)}sd||N4()}function ss(e,t,r,s,n){qr(!!e,t,r,s,n)}function tu(e){XC.push(e)}function N4(){sd=performance.now(),setTimeout(async()=>{let e=performance.now()-sd;sd=0;let t=[],r={time:Date.now(),period:e,threadId:Zi.threadId,metrics:t};for(let[n,i]of id){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,u=0,_=[],l;for(let d of jC){let f=Math.floor(c*d),E=o[f-1];if(f>u){let h=f-u;if(E===l){let p=_[_.length-1];typeof p=="number"?_[_.length-1]={value:p,count:1+h}:p.count+=h}else _.push(h>1?{value:E,count:h}:E),l=E;u=f}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:_,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await ZC()}let s=process.memoryUsage();t.push({metric:"memory",threadId:Zi.threadId,byThread:!0,...s});for(let n of XC)n(t);id=new Map,Zi.parentPort?Zi.parentPort.postMessage({type:JC,report:r}):rD({report:r})},zC).unref()}async function y4(e,t=6e4){let r=tS(),s=eD(),n;for(let h of s.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(h.value?.time){n=h.value.time;break}if(Date.now()-t<n)return;let i,o=new Map,c=new Map,u=[],_;for(let{key:h,value:p}of r.primaryStore.getRange({start:n||!1,exclusiveStart:!0,end:1/0})){if(!p)continue;if(i){if(h>i+t)break}else i=h;_=h;let{metrics:S,threadId:R}=p;for(let I of S||[]){let{path:w,method:B,type:K,metric:q,count:P,total:Q,distribution:Y,threads:J,...re}=I;P||(P=1);let Ie=q+(w?"-"+w:"");B!==void 0&&(Ie+="-"+B),K!==void 0&&(Ie+="-"+K);let se=o.get(Ie);if(se){if(se.threads){let de=se.threads[R];if(de)se=de;else{se.threads[R]=Object.assign({},re);continue}}se.count||(se.count=1);let ut=se.count;for(let de in re){let lt=re[de];typeof lt=="number"&&(se[de]=(se[de]*ut+lt*P)/(ut+P))}se.count+=P,Q>=0&&(se.total+=Q,se.ratio=se.total/se.count)}else se=Object.assign({period:t},I),delete se.distribution,o.set(Ie,se),se.byThread&&(se.threads=[],se.threads[R]=Object.assign({},re),u.push(se));if(Y){Y=Y.map(de=>typeof de=="number"?{value:de,count:1}:de);let ut=c.get(Ie);ut?ut.push(...Y):c.set(Ie,Y)}}await ZC()}for(let h of u){let{path:p,method:S,type:R,metric:I,count:w,total:B,distribution:K,threads:q,...P}=h;q=q.filter(Q=>Q);for(let Q in P){if(typeof h[Q]!="number")continue;let Y=0;for(let J of q){let re=J[Q];typeof re=="number"&&(Y+=re)}h[Q]=Y}h.count=q.length,delete h.threads,delete h.byThread}for(let[h,p]of c){let S=o.get(h);p.sort((de,lt)=>de.value>lt.value?1:-1);let R=S.count-1,I=[],w=0,B=0,K;for(let de of jC){let lt=R*de;for(;w<lt;)K=p[B++],w+=K.count,B===1&&w--;let gs=p[B>1?B-2:0];K||(K=p[0]),I.push(K.value-(K.value-gs.value)*(w-lt)/K.count)}let[q,P,Q,Y,J,re,Ie,se,ut]=I;Object.assign(S,{p1:q,p10:P,p25:Q,median:Y,p75:J,p90:re,p95:Ie,p99:se,p999:ut})}let l;for(let[h,p]of o)p.id=(0,nd.getNextMonotonicTime)(),p.time=_,s.primaryStore.put(p.id,p,{append:!0}).then(S=>{S||s.primaryStore.put(p.id,p)}),l=!0;let d=Date.now(),{idle:f,active:E}=performance.eventLoopUtilization();if(l||E*10>f){let h=(0,nd.getNextMonotonicTime)(),p={id:h,metric:"main-thread-utilization",idle:f-qC,active:E-FC,time:d,...process.memoryUsage()};s.primaryStore.put(h,p,{append:!0}).then(S=>{S||s.primaryStore.put(h,p)})}qC=f,FC=E}async function GC(e,t){let r=Date.now()-t;for(let s of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(s)}function tS(){return kC||(kC=dt({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function eD(){return VC||(VC=dt({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function C4(){tD=!0;let e=(0,eu.get)(eS.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await y4(zC,e),await GC(tS(),I4),await GC(eD(),w4)},Math.min(e/2,2147483647)).unref()}function rD(e,t){let r=e.report;r.threadId=t?.threadId||Zi.threadId;for(let s of r.metrics)s.metric==="bytes-sent"&&($C+=s.mean*s.count);r.totalBytesProcessed=$C,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(YC.get(t))}),YC.set(t,t.performance.eventLoopUtilization())),r.id=(0,nd.getNextMonotonicTime)(),tS().primaryStore.put(r.id,r),tD||C4(),D4&&(sD=U4(r))}async function U4(e){if(await sD,!oi){let r=(0,Zc.dirname)((0,WC.getLogFilePath)());try{oi=await(0,Zp.open)((0,Zc.join)(r,"analytics.log"),"r+")}catch{oi=await(0,Zp.open)((0,Zc.join)(r,"analytics.log"),"w+")}}let t=(await oi.stat()).size;if(t>L4){let r=Buffer.alloc(t);await oi.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await oi.write(r,{position:0}),await oi.truncate(r.length),t=r.length}await oi.write(JSON.stringify(e)+`
|
|
8
|
+
`,t)}var Zi,KC,WC,Zc,Zp,nd,eu,eS,id,QC,sd,zC,JC,XC,jC,qC,FC,ZC,I4,w4,kC,VC,tD,$C,YC,D4,sD,oi,L4,yn=Ae(()=>{Zi=require("worker_threads"),KC=v(Ye());ge();WC=v(G()),Zc=require("path"),Zp=require("fs/promises"),nd=v(wr()),eu=v(j()),eS=v(D());sr();(0,eu.initSync)();id=new Map,QC=(0,eu.get)(eS.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(b4,"setAnalyticsEnabled");a(qr,"recordAction");_t.recordAnalytics=qr;a(ss,"recordActionBinary");sd=0,zC=1e3,JC="analytics-report",XC=[];a(tu,"addAnalyticsListener");jC=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(N4,"sendAnalytics");a(y4,"aggregation");qC=0,FC=0,ZC=a(()=>new Promise(setImmediate),"rest");a(GC,"cleanup");I4=36e5,w4=31536e6;a(tS,"getRawAnalyticsTable");a(eD,"getAnalyticsTable");(0,KC.setChildListenerByType)(JC,rD);a(C4,"startScheduledTasks");$C=0,YC=new Map,D4=!1;a(rD,"recordAnalytics");L4=1e6;a(U4,"logAnalytics")});var nt=T((bde,OD)=>{"use strict";var Gt=j();Gt.initSync();var M4=require("fs-extra"),P4=require("semver"),iu=require("path"),{monotonicFactory:v4}=require("ulidx"),iD=v4(),B4=require("util"),oD=require("child_process"),H4=B4.promisify(oD.exec),x4=oD.spawn,Oe=qe(),Ue=D(),iS=z(),Fr=G(),od=gn(),q4=rd(),su=Pr(),{onMessageByType:F4}=Ye(),{isMainThread:G4}=require("worker_threads"),{Encoder:k4,decode:oS}=require("msgpackr"),aD=new k4,{isEmpty:so}=iS,cD=rs(),V4=48*36e11,$4=5e9;G4&&F4(Ue.ITC_EVENT_TYPES.RESTART,()=>{ns=void 0,ro=void 0});var{connect:Y4,StorageType:uD,RetentionPolicy:lD,AckPolicy:ad,DeliverPolicy:cd,DiscardPolicy:K4,NatsConnection:gde,JetStreamManager:Rde,JetStreamClient:Ade,StringCodec:Ode,JSONCodec:W4,createInbox:aS,headers:Q4,ErrorCode:nD}=require("nats"),{PACKAGE_ROOT:z4}=D(),J4=jc(),{recordAction:X4}=(yn(),ee(ru)),_D=W4(),j4="clustering",Z4=J4.engines[Oe.NATS_SERVER_NAME],e3=iu.join(z4,"dependencies"),nS=iu.join(e3,`${process.platform}-${process.arch}`,Oe.NATS_BINARY_NAME),rS,sS,nu,eo,to;OD.exports={runCommand:dD,checkNATSServerInstalled:t3,createConnection:cS,getConnection:ud,getJetStreamManager:ou,getJetStream:ED,getNATSReferences:ur,getServerList:s3,createLocalStream:uS,listStreams:hD,deleteLocalStream:n3,getServerConfig:au,listRemoteStreams:i3,viewStream:o3,viewStreamIterator:a3,publishToStream:c3,createWorkQueueStream:u3,addSourceToWorkStream:pD,request:_3,removeSourceFromWorkStream:TD,reloadNATS:lS,reloadNATSHub:d3,reloadNATSLeaf:f3,extractServerName:SD,requestErrorHandler:E3,updateWorkStream:h3,createLocalTableStream:RD,createTableStreams:m3,purgeTableStream:AD,purgeSchemaTableStreams:p3,getStreamInfo:S3,updateLocalStreams:g3,closeConnection:r3,getJsmServerName:cu,addNatsMsgHeader:mD,updateIngestStreamConsumer:l3,clearClientCache:fD};async function dD(e,t=void 0){let{stdout:r,stderr:s}=await H4(e,{cwd:t});if(s)throw new Error(s.replace(`
|
|
9
9
|
`,""));return r.replace(`
|
|
10
|
-
`,"")}a(_D,"runCommand");async function N4(){try{await s4.access(zp)}catch{return!1}let e=await _D(`${zp} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return n4.eq(t,O4)}a(N4,"checkNATSServerInstalled");async function Zp(e,t,r,s=!0,n="127.0.0.1"){if(!t&&!r){let o=await aD.getClusterUser();if(Zi(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}Gr.trace("create nats connection called");let i=await h4({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,timeout:2e5,tls:{keyFile:Ft.get(Le.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Ft.get(Le.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Ft.get(Le.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),Gr.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&Gr.error("Error with Nats client connection, connection closed",o),dD()}),i}a(Zp,"createConnection");function dD(){ls=void 0,Ji=void 0,Xi=void 0,ji=void 0}a(dD,"clearClientCache");async function y4(){ls&&(await ls.drain(),ls=void 0,Ji=void 0,Xi=void 0,ji=void 0)}a(y4,"closeConnection");var ls,ji;async function dd(){return ji||(ji=Zp(Ft.get(Le.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),ls=await ji),ls||ji}a(dd,"getConnection");async function nu(){if(Ji)return Ji;Zi(ls)&&await dd();let{domain:e}=iu(Le.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Zi(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Ji=await ls.jetstreamManager({domain:e,timeout:6e4}),Ji}a(nu,"getJetStreamManager");async function fD(){if(Xi)return Xi;Zi(ls)&&await dd();let{domain:e}=iu(Le.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Zi(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Xi=ls.jetstream({domain:e,timeout:6e4}),Xi}a(fD,"getJetStream");async function lr(){let e=ls||await dd(),t=Ji||await nu(),r=Xi||await fD();return{connection:e,jsm:t,js:r}}a(lr,"getNATSReferences");async function I4(e){let t=Ft.get(Le.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await aD.getClusterUser(),n=await Zp(t,r,s),i=jp(),o=n.subscribe(i),c=[],u,_=(async()=>{for await(let l of o){let d=lD.decode(l.data);d.response_time=Date.now()-u,c.push(d)}})();return u=Date.now(),await n.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await n.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await n.flush(),await Jp.async_set_timeout(e),await o.drain(),await n.close(),await _,c}a(I4,"getServerList");async function eS(e,t){let{jsm:r}=await lr(),s=Ft.get(Le.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=Ft.get(Le.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=Ft.get(Le.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:cD.File,retention:uD.Limits,subjects:t,discard:m4.Old,max_msgs:n,max_bytes:i,max_age:s})}a(eS,"createLocalStream");async function ED(){let{jsm:e}=await lr(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(ED,"listStreams");async function w4(e){let{jsm:t}=await lr();await t.streams.delete(e)}a(w4,"deleteLocalStream");async function C4(e){let{connection:t}=await lr(),r=[],s=jp(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(lD.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:s}),await t.flush(),await n.drain(),await i,r}a(C4,"listRemoteStreams");async function D4(e,t=void 0,r=void 0){let{jsm:s,js:n}=await lr(),i=nD(),o={durable_name:i,ack_policy:ld.Explicit};t&&(o.deliver_policy=_d.StartTime,o.opt_start_time=new Date(t).toISOString()),await s.consumers.add(e,o);let c=await n.consumers.get(e,i),u=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let _=[];for await(let l of u){let d=Xp(l.data),f={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};if(l.headers&&(f.origin=l.headers.get(Re.MSG_HEADERS.ORIGIN)),_.push(f),l.ack(),l.info.pending===0)break}return await c.delete(),_}a(D4,"viewStream");async function*L4(e,t=void 0,r=void 0){let{jsm:s,js:n}=await lr(),i=nD(),o={durable_name:i,ack_policy:ld.Explicit};t&&(o.deliver_policy=_d.StartTime,o.opt_start_time=new Date(t).toISOString()),await s.consumers.add(e,o);let c=await n.consumers.get(e,i),u=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let _ of u){let l=Xp(_.data);l[0]||(l=[l]);for(let d of l){let f={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};_.headers&&(f.origin=_.headers.get(Re.MSG_HEADERS.ORIGIN)),yield f}if(_.ack(),_.info.pending===0)break}await c.delete()}a(L4,"viewStreamIterator");async function U4(e,t,r,s){Gr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s.operation),r=hD(s,r);let{js:n}=await lr(),i=await ou(),o=`${e}.${i}`,c=s instanceof Uint8Array?s:oD.encode(s);try{Gr.trace(`publishToStream publishing to subject: ${o}`),R4(c.length,"bytes-sent",e,s.operation,"replication"),await n.publish(o,c,{headers:r})}catch(u){if(u.code&&u.code.toString()==="503")return TD(async()=>{try{await n.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){Gr.trace(`publishToStream creating stream: ${t}`);let l=o.split(".");l[2]="*",await eS(t,[o]),await n.publish(o,c,{headers:r})}else throw u}});throw u}}a(U4,"publishToStream");function hD(e,t){t===void 0&&(t=S4());let r=Ft.get(Le.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Re.MSG_HEADERS.ORIGIN)&&r&&t.append(Re.MSG_HEADERS.ORIGIN,r),t}a(hD,"addNatsMsgHeader");function iu(e){e=e.toLowerCase();let t=su.join(Ft.get(Le.CONFIG_PARAMS.ROOTPATH),A4);if(e===Le.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Zi(Qp)&&(Qp={port:tu.getConfigFromFile(Le.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:tu.getConfigFromFile(Le.CONFIG_PARAMS.CLUSTERING_NODENAME)+Re.SERVER_SUFFIX.HUB,config_file:Re.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:su.join(t,Re.PID_FILES.HUB),hdb_nats_path:t}),Qp;if(e===Le.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Zi(Wp)&&(Wp={port:tu.getConfigFromFile(Le.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:tu.getConfigFromFile(Le.CONFIG_PARAMS.CLUSTERING_NODENAME)+Re.SERVER_SUFFIX.LEAF,config_file:Re.NATS_CONFIG_FILES.LEAF_SERVER,domain:tu.getConfigFromFile(Le.CONFIG_PARAMS.CLUSTERING_NODENAME)+Re.SERVER_SUFFIX.LEAF,pid_file_path:su.join(t,Re.PID_FILES.LEAF),hdb_nats_path:t}),Wp;Gr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(iu,"getServerConfig");async function M4(e){let{jsm:t}=await lr(),r=await ou();try{await t.streams.add({name:e.stream_name,storage:cD.File,retention:uD.Limits,max_age:f4,max_bytes:E4,subjects:[`${Re.SUBJECT_PREFIXES.TXN}.${e.stream_name}.${r}`]})}catch(s){if(s.code!=="400")throw s}try{await t.consumers.info(e.stream_name,e.durable_name)}catch(s){if(s.code.toString()==="404")await t.consumers.add(e.stream_name,{ack_policy:ld.Explicit,durable_name:e.durable_name,deliver_policy:_d.All,max_ack_pending:1e4});else throw s}}a(M4,"createWorkQueueStream");async function P4(){let{jsm:e}=await lr();(await e.consumers.info(Re.WORK_QUEUE_CONSUMER_NAMES.stream_name,Re.WORK_QUEUE_CONSUMER_NAMES.durable_name)).config.deliver_subject&&(Gr.info("Removing old nats push consumer from ingest stream"),await e.consumers.delete(Re.WORK_QUEUE_CONSUMER_NAMES.stream_name,Re.WORK_QUEUE_CONSUMER_NAMES.durable_name),Gr.info("Adding pull consumer to ingest stream"),await e.consumers.add(Re.WORK_QUEUE_CONSUMER_NAMES.stream_name,{ack_policy:ld.Explicit,durable_name:Re.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:_d.All,max_ack_pending:1e4}))}a(P4,"updateIngestStreamConsumer");async function mD(e,t,r){let{jsm:s}=await lr(),n=await s.streams.info(t),i=pD(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:u}=r,_=ud.createNatsTableStreamName(c,u),l=i===e,d,f,E=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let p=0,S=n.config.sources.length;p<S;p++)if(d=n.config.sources[p],f=p,l&&d.name===_||!l&&d.name===_&&d.external&&d.external.api===`$JS.${e}.API`){E=!0;break}if(E===!0){if(d.opt_start_time===o)return;let p=`txn.${c}.${u}.${e}`;await s.streams.purge(t,{filter:p}),n.config.sources.splice(f,1),await s.streams.update(t,n.config)}let h={name:_,opt_start_time:o,filter_subject:`${Re.SUBJECT_PREFIXES.TXN}.>`};l||(h.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(h),await s.streams.update(t,n.config)}a(mD,"addSourceToWorkStream");function pD(e){return e.split(".")[1]}a(pD,"extractServerName");async function SD(e,t,r){let{jsm:s}=await lr(),{schema:n,table:i}=r,o=`txn.${n}.${i}.${e}`;await s.streams.purge(t,{filter:o});let c=ud.createNatsTableStreamName(n,i),u=await s.streams.info(t);if(!Array.isArray(u.config.sources)||u.config.sources.length===0)return;let _=u.config.sources.length,l;for(;_--;)if(l=u.config.sources[_],l.name===c&&l.external.api===`$JS.${e}.API`){u.config.sources.splice(_,1);break}await s.streams.update(t,u.config)}a(SD,"removeSourceFromWorkStream");async function v4(e,t,r=6e4,s=jp()){if(!Jp.isObject(t))throw new Error("data param must be an object");let n=oD.encode(t),{connection:i}=await lr(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let c=await i.request(e,n,o);return Xp(c.data)}a(v4,"request");function tS(e){return new Promise(async(t,r)=>{let s=c4(zp,["--signal",`reload=${e}`],{cwd:__dirname}),n,i;s.on("error",o=>{r(o)}),s.stdout.on("data",o=>{i+=o.toString()}),s.stderr.on("data",o=>{n+=o.toString()}),s.stderr.on("close",o=>{n&&r(n),t(i)})})}a(tS,"reloadNATS");async function B4(){let{pid_file_path:e}=iu(Le.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await tS(e)}a(B4,"reloadNATSHub");async function H4(){let{pid_file_path:e}=iu(Le.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await tS(e)}a(H4,"reloadNATSLeaf");function x4(e,t,r){let s;switch(e.code){case sD.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case sD.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(x4,"requestErrorHandler");async function q4(e,t){let r=t+Re.SERVER_SUFFIX.LEAF;await TD(async()=>{e.subscribe===!0?await mD(r,Re.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await SD(r,Re.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(q4,"updateWorkStream");function TD(e){return u4.writeTransaction(Le.SYSTEM_SCHEMA_NAME,Le.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(TD,"exclusiveLock");async function gD(e,t){let r=ud.createNatsTableStreamName(e,t),s=await ou(),n=V4(e,t,s);await eS(r,[n])}a(gD,"createLocalTableStream");async function F4(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await gD(s,n)}}a(F4,"createTableStreams");async function RD(e,t,r=!1){if(Ft.get(Le.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let s=ud.createNatsTableStreamName(e,t),{jsm:n}=await lr();r?await n.streams.purge(Re.WORK_QUEUE_CONSUMER_NAMES.stream_name):await n.streams.purge(s)}catch(s){if(s.message==="stream not found")Gr.warn(s);else throw s}}a(RD,"purgeTableStream");async function G4(e,t){if(Ft.get(Le.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await RD(e,t[r])}a(G4,"purgeSchemaTableStreams");async function k4(e){return(await nu()).streams.info(e)}a(k4,"getStreamInfo");function V4(e,t,r){return`${Re.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(V4,"createSubjectName");async function ou(){if(ru)return ru;if(ru=(await nu())?.nc?.info?.server_name,ru===void 0)throw new Error("Unable to get jetstream manager server name");return ru}a(ou,"getJsmServerName");async function $4(){let e=await nu(),t=await ou(),r=await ED();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=Y4(s),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(n.name===Re.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let _=`${Re.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;Gr.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}else if(n.name===Re.WORK_QUEUE_CONSUMER_NAMES.stream_name){let _=`${Re.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;Gr.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}else{let _=i.split(".");_[_.length-1]=t;let l=_.join(".");Gr.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}await e.streams.update(n.name,n)}}}a($4,"updateLocalStreams");function Y4(e){let{config:t}=e,r=!1;if(t.name===Re.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===Re.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let s=Ft.get(Le.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=Ft.get(Le.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=Ft.get(Le.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,s!==t.max_age&&(t.max_age=s,r=!0),n!==t.max_bytes&&(t.max_bytes=n,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(Y4,"updateStreamLimits")});var au=T((U_e,yD)=>{"use strict";var sa=S_(),na=HC(),K4=G(),W4=require("uuid").v4,L_e=require("clone"),Ed=On(),ia=I(),Q4=require("util"),ci=Cs(),{handleHDBError:_r,hdb_errors:z4}=Z(),{HDB_ERROR_MSGS:fd,HTTP_STATUS_CODES:dr}=z4,{SchemaEventMsg:hd}=Us(),OD=rt(),{getDatabases:J4}=(pe(),te(Fe)),{transformReq:oa}=W();yD.exports={createSchema:X4,createSchemaStructure:bD,createTable:j4,createTableStructure:ND,createAttribute:s3,dropSchema:Z4,dropTable:e3,dropAttribute:t3,getBackup:n3};async function X4(e){let t=await bD(e);return Ed.signalSchemaChange(new hd(process.pid,e.operation,e.schema)),t}a(X4,"createSchema");async function bD(e){let t=sa.schema_object(e);if(t)throw _r(t,t.message,dr.BAD_REQUEST,void 0,void 0,!0);if(oa(e),!await na.checkSchemaExists(e.schema))throw _r(new Error,fd.SCHEMA_EXISTS_ERR(e.schema),dr.BAD_REQUEST,ia.LOG_LEVELS.ERROR,fd.SCHEMA_EXISTS_ERR(e.schema),!0);return await ci.createSchema(e),`database '${e.schema}' successfully created`}a(bD,"createSchemaStructure");async function j4(e){return oa(e),e.hash_attribute=e.primary_key??e.hash_attribute,await ND(e)}a(j4,"createTable");async function ND(e){let t=sa.create_table_object(e);if(t)throw _r(t,t.message,dr.BAD_REQUEST,void 0,void 0,!0);if(sa.validateTableResidence(e.residence),!await na.checkSchemaTableExists(e.schema,e.table))throw _r(new Error,fd.TABLE_EXISTS_ERR(e.schema,e.table),dr.BAD_REQUEST,ia.LOG_LEVELS.ERROR,fd.TABLE_EXISTS_ERR(e.schema,e.table),!0);let s={name:e.table,schema:e.schema,id:W4(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)s.residence=e.residence,await ci.createTable(s,e);else throw _r(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",dr.BAD_REQUEST);else await ci.createTable(s,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(n){throw n}}a(ND,"createTableStructure");async function Z4(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=sa.schema_object(e),s=t??r;if(s)throw _r(s,s.message,dr.BAD_REQUEST,void 0,void 0,!0);oa(e);let n=await na.checkSchemaExists(e.schema);if(n)throw _r(new Error,n,dr.NOT_FOUND,ia.LOG_LEVELS.ERROR,n,!0);let i=await na.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await ci.dropSchema(e),Ed.signalSchemaChange(new hd(process.pid,e.operation,e.schema)),await OD.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(Z4,"dropSchema");async function e3(e){let t=sa.table_object(e);if(t)throw _r(t,t.message,dr.BAD_REQUEST,void 0,void 0,!0);oa(e);let r=await na.checkSchemaTableExists(e.schema,e.table);if(r)throw _r(new Error,r,dr.NOT_FOUND,ia.LOG_LEVELS.ERROR,r,!0);return await ci.dropTable(e),await OD.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(e3,"dropTable");async function t3(e){let t=sa.attribute_object(e);if(t)throw _r(t,t.message,dr.BAD_REQUEST,void 0,void 0,!0);oa(e);let r=await na.checkSchemaTableExists(e.schema,e.table);if(r)throw _r(new Error,r,dr.NOT_FOUND,ia.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw _r(new Error,"You cannot drop a hash attribute",dr.BAD_REQUEST,void 0,void 0,!0);if(ia.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw _r(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,dr.BAD_REQUEST,void 0,void 0,!0);try{return await ci.dropAttribute(e),r3(e),Ed.signalSchemaChange(new hd(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw K4.error(`Got an error deleting attribute ${Q4.inspect(e)}.`),s}}a(t3,"dropAttribute");function r3(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(r3,"dropAttributeFromGlobal");async function s3(e){oa(e);let t=J4()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw _r(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,dr.BAD_REQUEST,void 0,void 0,!0);return await ci.createAttribute(e),Ed.signalSchemaChange(new hd(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(s3,"createAttribute");function n3(e){return ci.getBackup(e)}a(n3,"getBackup")});var wD=T((P_e,ID)=>{"use strict";var{OPERATIONS_ENUM:i3}=I(),rS=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,s=void 0,n=void 0){this.operation=i3.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};ID.exports=rS});var sS=T((H_e,MD)=>{"use strict";var o3=Cs(),B_e=wD(),md=W(),pd=I(),a3=j(),{handleHDBError:CD,hdb_errors:c3}=Z(),{HDB_ERROR_MSGS:DD,HTTP_STATUS_CODES:LD}=c3,u3=Object.values(pd.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),UD="To use this operation audit log must be enabled in harperdb-config.yaml";MD.exports=l3;async function l3(e){if(md.isEmpty(e.schema))throw new Error(DD.SCHEMA_REQUIRED_ERR);if(md.isEmpty(e.table))throw new Error(DD.TABLE_REQUIRED_ERR);if(!a3.get(pd.CONFIG_PARAMS.LOGGING_AUDITLOG))throw CD(new Error,UD,LD.BAD_REQUEST,pd.LOG_LEVELS.ERROR,UD,!0);let t=md.checkSchemaTableExist(e.schema,e.table);if(t)throw CD(new Error,t,LD.NOT_FOUND,pd.LOG_LEVELS.ERROR,t,!0);if(!md.isEmpty(e.search_type)&&u3.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await o3.readAuditLog(e)}a(l3,"readAuditLog")});var vD=T((q_e,PD)=>{"use strict";var{OPERATIONS_ENUM:_3}=I(),nS=class{static{a(this,"GetBackupObject")}constructor(t,r,s=void 0,n=void 0){this.operation=_3.GET_BACKUP,this.schema=t,this.table=r}};PD.exports=nS});var xD=T((V_e,HD)=>{"use strict";var d3=Cs(),G_e=vD(),iS=W(),f3=I(),k_e=j(),{handleHDBError:E3,hdb_errors:h3}=Z(),{HDB_ERROR_MSGS:BD,HTTP_STATUS_CODES:m3}=h3;HD.exports=p3;async function p3(e){if(iS.isEmpty(e.schema))throw new Error(BD.SCHEMA_REQUIRED_ERR);if(iS.isEmpty(e.table))throw new Error(BD.TABLE_REQUIRED_ERR);let t=iS.checkSchemaTableExist(e.schema,e.table);if(t)throw E3(new Error,t,m3.NOT_FOUND,f3.LOG_LEVELS.ERROR,t,!0);return await d3.getBackup(read_audit_log_object)}a(p3,"getBackup")});var $D=T((Y_e,VD)=>{var ui=require("validate.js"),FD=ze(),aa=I(),{handleHDBError:S3,hdb_errors:T3}=Z(),{HDB_ERROR_MSGS:_t,HTTP_STATUS_CODES:g3}=T3,oS=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),R3={STRUCTURE_USER:"structure_user"},qD=Object.values(aa.ROLE_TYPES_ENUM),A3="attribute_permissions",O3="attribute_name",{PERMS_CRUD_ENUM:ca}=aa,b3=[A3,...Object.values(ca)],GD=[ca.READ,ca.INSERT,ca.UPDATE],N3=[O3,...GD];function y3(e){let t=oS();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,kD(e,t)}a(y3,"addRoleValidation");function I3(e){let t=oS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,kD(e,t)}a(I3,"alterRoleValidation");function w3(e){let t=oS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,FD.validateObject(e,t)}a(w3,"dropRoleValidation");var C3=["operation","role","id","permission","hdb_user","hdb_auth_header"];function kD(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)C3.includes(s[o])||n.push(s[o]);n.length>0&&pt(_t.INVALID_ROLE_JSON_KEYS(n),r);let i=FD.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{pt(o,r)}),e.permission){let o=D3(e);o&&pt(o,r),qD.forEach(c=>{e.permission[c]&&!ui.isBoolean(e.permission[c])&&pt(_t.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(qD.indexOf(o)<0){if(o===R3.STRUCTURE_USER){let u=e.permission[o];if(typeof u=="boolean")continue;if(Array.isArray(u)){for(let _=0,l=u.length;_<l;_++){let d=u[_];global.hdb_schema[d]||pt(_t.SCHEMA_NOT_FOUND(d),r)}continue}pt(_t.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){pt(_t.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let u in c.tables){let _=c.tables[u];if(!u||!global.hdb_schema[o][u]){pt(_t.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(_).forEach(l=>{b3.includes(l)||pt(_t.INVALID_PERM_KEY(l),r,o,u)}),Object.values(ca).forEach(l=>{ui.isDefined(_[l])?ui.isBoolean(_[l])||pt(_t.TABLE_PERM_NOT_BOOLEAN(l),r,o,u):pt(_t.TABLE_PERM_MISSING(l),r,o,u)}),ui.isDefined(_.attribute_permissions)){if(!ui.isArray(_.attribute_permissions)){pt(_t.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{pt(_t.ATTR_PERMS_ARRAY_MISSING,r,o,u);continue}if(_.attribute_permissions){let l=global.hdb_schema[o][u].attributes.map(({attribute:f})=>f),d={read:!1,insert:!1,update:!1};for(let f in _.attribute_permissions){let E=_.attribute_permissions[f];if(Object.keys(E).forEach(p=>{!N3.includes(p)&&p!==ca.DELETE&&pt(_t.INVALID_ATTR_PERM_KEY(p),r,o,u)}),!ui.isDefined(E.attribute_name)){pt(_t.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=E.attribute_name;if(!l.includes(h)){pt(_t.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}GD.forEach(p=>{ui.isDefined(E[p])?ui.isBoolean(E[p])||pt(_t.ATTR_PERM_NOT_BOOLEAN(p,h),r,o,u):pt(_t.ATTR_PERM_MISSING(p,h),r,o,u)}),!d.read&&E.read===!0&&(d.read=!0),!d.insert&&E.insert===!0&&(d.insert=!0),!d.update&&E.update===!0&&(d.update=!0)}if(_.read===!1&&d.read===!0||_.insert===!1&&d.insert===!0||_.update===!1&&d.update===!0){let f=`${o}.${u}`;pt(_t.MISMATCHED_TABLE_ATTR_PERMS(f),r,o,u)}}}}return L3(r)}a(kD,"customValidate");VD.exports={addRoleValidation:y3,alterRoleValidation:I3,dropRoleValidation:w3};function D3(e){let{operation:t,permission:r}=e;if(t===aa.OPERATIONS_ENUM.ADD_ROLE||t===aa.OPERATIONS_ENUM.ALTER_ROLE){let s=r.super_user===!0,n=r.cluster_user===!0;if(Object.keys(r).length>1&&(s||n)){if(n&&s)return _t.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?aa.ROLE_TYPES_ENUM.SUPER_USER:aa.ROLE_TYPES_ENUM.CLUSTER_USER;return _t.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(D3,"validateNoSUPerms");function L3(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:_t.ROLE_PERMS_ERROR,...e};return S3(new Error,s,g3.BAD_REQUEST)}else return null}a(L3,"generateRolePermResponse");function pt(e,t,r,s){if(!r)t.main_permissions.push(e);else{let n=s?r+"_"+s:r;t.schema_permissions[n]?t.schema_permissions[n].push(e):t.schema_permissions[n]=[e]}}a(pt,"addPermError")});var dS=T((W_e,QD)=>{"use strict";var YD=Ur(),KD=os(),U3=ti(),cS=$D(),uS=On(),M3=require("uuid").v4,P3=require("util"),Sd=I(),v3=W(),lS=KD.searchByValue,B3=KD.searchByHash,H3=P3.promisify(U3.delete),x3=Zs(),q3=Zo(),{hdb_errors:F3,handleHDBError:eo}=Z(),{HDB_ERROR_MSGS:WD,HTTP_STATUS_CODES:cu}=F3,{UserEventMsg:_S}=Us();QD.exports={addRole:G3,alterRole:k3,dropRole:V3,listRoles:$3};function aS(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(aS,"scrubRoleDetails");async function G3(e){let t=cS.addRoleValidation(e);if(t)throw t;e=aS(e);let r={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},s;try{s=Array.from(await lS(r)||[])}catch(i){throw eo(i)}if(s&&s.length>0)throw eo(new Error,WD.ROLE_ALREADY_EXISTS(e.role),cu.CONFLICT,void 0,void 0,!0);e.id||(e.id=M3());let n={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await YD.insert(n),uS.signalUserChange(new _S(process.pid)),e=aS(e),e}a(G3,"addRole");async function k3(e){let t=cS.alterRoleValidation(e);if(t)throw t;e=aS(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},s;try{s=await YD.update(r)}catch(n){throw eo(n)}if(s&&s?.message==="updated 0 of 1 records")throw eo(new Error,"Invalid role id",cu.BAD_REQUEST,void 0,void 0,!0);return await uS.signalUserChange(new _S(process.pid)),e}a(k3,"alterRole");async function V3(e){let t=cS.dropRoleValidation(e);if(t)throw eo(new Error,t,cu.BAD_REQUEST,void 0,void 0,!0);let r=new q3(Sd.SYSTEM_SCHEMA_NAME,Sd.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await B3(r));if(s.length===0)throw eo(new Error,WD.ROLE_NOT_FOUND,cu.NOT_FOUND,void 0,void 0,!0);let n=new x3(Sd.SYSTEM_SCHEMA_NAME,Sd.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await lS(n)),o=!1;if(v3.isEmptyOrZeroLength(i)===!1){for(let u=0;u<i.length;u++)if(i[u].active===!0){o=!0;break}}if(o===!0)throw eo(new Error,`Cannot drop role ${s[0].role} as it has active user(s) tied to this role`,cu.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await H3(c),uS.signalUserChange(new _S(process.pid)),`${s[0].role} successfully deleted`}a(V3,"dropRole");async function $3(){return lS({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a($3,"listRoles")});var jD=T((z_e,XD)=>{"use strict";var Y3=j(),li=require("joi"),K3=ze(),zD=require("moment"),W3=require("fs-extra"),fS=require("path"),Q3=require("lodash"),uu=I(),{LOG_LEVELS:to}=I(),z3="YYYY-MM-DD hh:mm:ss",J3=fS.resolve(__dirname,"../logs");XD.exports=function(e){return K3.validateBySchema(e,X3)};var X3=li.object({from:li.custom(JD),until:li.custom(JD),level:li.valid(to.NOTIFY,to.FATAL,to.ERROR,to.WARN,to.INFO,to.DEBUG,to.TRACE),order:li.valid("asc","desc"),limit:li.number().min(1),start:li.number().min(0),log_name:li.custom(j3)});function JD(e,t){if(zD(e,zD.ISO_8601).format(z3)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(JD,"validateDatetime");function j3(e,t){if(Q3.invert(uu.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=Y3.get(uu.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?uu.LOG_NAMES.HDB:e,i=n===uu.LOG_NAMES.INSTALL?fS.join(J3,uu.LOG_NAMES.INSTALL):fS.join(s,n);return W3.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(j3,"validateReadLogPath")});var hS=T((X_e,eL)=>{"use strict";var Td=I(),Z3=G(),eX=j(),tX=jD(),ES=require("path"),ZD=require("fs-extra"),{once:rX}=require("events"),{handleHDBError:sX,hdb_errors:nX}=Z(),{PACKAGE_ROOT:iX}=I(),oX=ES.join(iX,"logs"),aX=1e3,cX=200;eL.exports=uX;async function uX(e){let t=tX(e);if(t)throw sX(t,t.message,nX.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=eX.get(Td.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?Td.LOG_NAMES.HDB:e.log_name,n=s===Td.LOG_NAMES.INSTALL?ES.join(oX,Td.LOG_NAMES.INSTALL):ES.join(r,s),i=e.level!==void 0,o=i?e.level:void 0,c=e.from!==void 0,u=c?new Date(e.from):void 0,_=e.until!==void 0,l=_?new Date(e.until):void 0,d=e.limit===void 0?aX:e.limit,f=e.order===void 0?void 0:e.order,E=e.start===void 0?0:e.start,h=E+d,p=0;f==="desc"&&!u&&!l&&(p=Math.max(ZD.statSync(n).size-(h+5)*cX,0));let S=ZD.createReadStream(n,{start:p});S.on("error",H=>{Z3.error(H)});let R=0,O=[],y="",q;S.on("data",H=>{let L=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;H=y+H;let $=0,V;for(;(V=L.exec(H))&&!S.destroyed;){q&&(q.message=H.slice($,V.index),K(q));let[Q,re,be]=V,ne=be.split("] ["),ct=ne[0],Te=ne[1];ne.splice(0,2),q={timestamp:re,thread:ct,level:Te,tags:ne,message:""},$=V.index+Q.length}y=H.slice($)}),S.on("end",H=>{S.destroyed||q&&(q.message=y.trim(),K(q))}),S.resume();function K(H){let L,$,V;switch(!0){case(i&&c&&_):L=new Date(H.timestamp),$=new Date(u),V=new Date(l),H.level===o&&L>=$&&L<=V&&R<E?R++:H.level===o&&L>=$&&L<=V&&(_i(H,f,O),R++,R===h&&S.destroy());break;case(i&&c):L=new Date(H.timestamp),$=new Date(u),H.level===o&&L>=$&&R<E?R++:H.level===o&&L>=$&&(_i(H,f,O),R++,R===h&&S.destroy());break;case(i&&_):L=new Date(H.timestamp),V=new Date(l),H.level===o&&L<=V&&R<E?R++:H.level===o&&L<=V&&(_i(H,f,O),R++,R===h&&S.destroy());break;case(c&&_):L=new Date(H.timestamp),$=new Date(u),V=new Date(l),L>=$&&L<=V&&R<E?R++:L>=$&&L<=V&&(_i(H,f,O),R++,R===h&&S.destroy());break;case i:H.level===o&&R<E?R++:H.level===o&&(_i(H,f,O),R++,R===h&&S.destroy());break;case c:L=new Date(H.timestamp),$=new Date(u),L>=$&&R<E?R++:L>=$&&R>=E&&(_i(H,f,O),R++,R===h&&S.destroy());break;case _:L=new Date(H.timestamp),V=new Date(l),L<=V&&R<E?R++:L<=V&&R>=E&&(_i(H,f,O),R++,R===h&&S.destroy());break;default:R<E?R++:(_i(H,f,O),R++,R===h&&S.destroy())}}return a(K,"onLogMessage"),await rX(S,"close"),O}a(uX,"readLog");function _i(e,t,r){t==="desc"?lX(e,r):t==="asc"?_X(e,r):r.push(e)}a(_i,"pushLineToResult");function lX(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)>r?s=i+1:n=i}t.splice(s,0,e)}a(lX,"insertDescending");function _X(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)<r?s=i+1:n=i}t.splice(s,0,e)}a(_X,"insertAscending")});var gd=T((rde,nL)=>{"use strict";var mS=require("joi"),{string:lu,boolean:tL,date:dX}=mS.types(),fX=ze(),{validateSchemaExists:Z_e,validateTableExists:ede,validateSchemaName:tde}=Qs(),EX=I(),hX=Ge(),rL=j();rL.initSync();var mX=lu.invalid(rL.get(EX.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(hX.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(),sL={operation:lu.valid("add_node","update_node","set_node_replication"),node_name:mX,subscriptions:mS.array().items({table:lu.optional(),schema:lu.optional(),database:lu.optional(),subscribe:tL.required(),publish:tL.required().custom(SX),start_time:dX.iso()}).min(1).required()};function pX(e){return fX.validateBySchema(e,mS.object(sL))}a(pX,"addUpdateNodeValidator");function SX(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(SX,"checkForFalsy");nL.exports={addUpdateNodeValidator:pX,validation_schema:sL}});var oL=T((nde,iL)=>{var TX=ze(),gX={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};iL.exports=function(e){return TX.validateObject(e,gX)}});var Rd=T((ide,aL)=>{"use strict";var RX=I().OPERATIONS_ENUM,pS=class{static{a(this,"UpdateObject")}constructor(t,r,s,n=void 0){this.operation=RX.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};aL.exports=pS});var uL=T((ade,cL)=>{"use strict";var AX={OPERATION:"operation",REFRESH:"refresh"},SS=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},TS=class{static{a(this,"JWTRSAKeys")}constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};cL.exports={JWTTokens:SS,TOKEN_TYPE_ENUM:AX,JWTRSAKeys:TS}});var fu=T((ude,fL)=>{"use strict";var du=require("jsonwebtoken"),gS=require("fs-extra"),RS=W(),_s=I(),{handleHDBError:fr,hdb_errors:OX}=Z(),{HTTP_STATUS_CODES:Er,AUTHENTICATION_ERROR_MSGS:hr}=OX,_u=G(),lL=L_(),bS=cs(),bX=Ur().update,NX=Rd(),yX=On(),{UserEventMsg:IX}=Us(),di=j();di.initSync();var AS=require("path"),{JWTTokens:wX,JWTRSAKeys:CX,TOKEN_TYPE_ENUM:Ad}=uL(),DX=di.get(_s.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?di.get(_s.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",LX=di.get(_s.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?di.get(_s.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",Od="RS256",OS;fL.exports={createTokens:UX,validateOperationToken:PX,refreshOperationToken:MX,validateRefreshToken:dL};async function UX(e){if(RS.isEmpty(e)||typeof e!="object")throw fr(new Error,hr.INVALID_AUTH_OBJECT,Er.BAD_REQUEST,void 0,void 0,!0);if(RS.isEmpty(e.username))throw fr(new Error,hr.USERNAME_REQUIRED,Er.BAD_REQUEST,void 0,void 0,!0);if(RS.isEmpty(e.password))throw fr(new Error,hr.PASSWORD_REQUIRED,Er.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await bS.findAndValidateUser(e.username,e.password),!t)throw fr(new Error,hr.INVALID_CREDENTIALS,Er.UNAUTHORIZED,void 0,void 0,!0)}catch(f){throw _u.error(f),fr(new Error,hr.INVALID_CREDENTIALS,Er.UNAUTHORIZED,void 0,void 0,!0)}let r=await bd(),s=!1,n=!1;t.role&&t.role.permission&&(s=t.role.permission.super_user===!0,n=t.role.permission.cluster_user===!0);let i={username:e.username,super_user:s,cluster_user:n},o=await _L(i,r.private_key,r.passphrase),c=await du.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:LX,algorithm:Od,subject:Ad.REFRESH}),u=lL.hash(c),_=new NX(_s.SYSTEM_SCHEMA_NAME,_s.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),l,d;try{l=await bX(_)}catch(f){_u.error(f),d=f}if(d!==void 0||l.skipped_hashes.length>0)throw fr(new Error,hr.REFRESH_TOKEN_SAVE_FAILED,Er.INTERNAL_SERVER_ERROR);return yX.signalUserChange(new IX(process.pid)),new wX(o,c)}a(UX,"createTokens");async function _L(e,t,r){return await du.sign(e,{key:t,passphrase:r},{expiresIn:DX,algorithm:Od,subject:Ad.OPERATION})}a(_L,"signOperationToken");async function bd(){if(OS===void 0)try{let e=AS.join(di.getHdbBasePath(),_s.LICENSE_KEY_DIR_NAME,_s.JWT_ENUM.JWT_PASSPHRASE_NAME),t=AS.join(di.getHdbBasePath(),_s.LICENSE_KEY_DIR_NAME,_s.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=AS.join(di.getHdbBasePath(),_s.LICENSE_KEY_DIR_NAME,_s.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await gS.readFile(e)).toString(),n=(await gS.readFile(t)).toString(),i=(await gS.readFile(r)).toString();OS=new CX(i,n,s)}catch(e){throw _u.error(e),fr(new Error,hr.NO_ENCRYPTION_KEYS,Er.INTERNAL_SERVER_ERROR)}return OS}a(bd,"getJWTRSAKeys");async function MX(e){if(!e)throw fr(new Error,hr.INVALID_BODY,Er.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw fr(new Error,hr.REFRESH_TOKEN_REQUIRED,Er.BAD_REQUEST,void 0,void 0,!0);await dL(e.refresh_token);let t=await bd(),r=await du.decode(e.refresh_token);return{operation_token:await _L({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(MX,"refreshOperationToken");async function PX(e){try{let t=await bd(),r=await du.verify(e,t.public_key,{algorithms:Od,subject:Ad.OPERATION});return await bS.findAndValidateUser(r.username,void 0,!1)}catch(t){throw _u.warn(t),t.name&&t.name==="TokenExpiredError"?fr(new Error,hr.TOKEN_EXPIRED,Er.FORBIDDEN):fr(new Error,hr.INVALID_TOKEN,Er.UNAUTHORIZED)}}a(PX,"validateOperationToken");async function dL(e){let t;try{let r=await bd(),s=await du.verify(e,r.public_key,{algorithms:Od,subject:Ad.REFRESH});t=await bS.findAndValidateUser(s.username,void 0,!1)}catch(r){throw _u.warn(r),r.name&&r.name==="TokenExpiredError"?fr(new Error,hr.TOKEN_EXPIRED,Er.FORBIDDEN):fr(new Error,hr.INVALID_TOKEN,Er.UNAUTHORIZED)}if(!lL.validate(t.refresh_token,e))throw fr(new Error,hr.INVALID_TOKEN,Er.UNAUTHORIZED);return t}a(dL,"validateRefreshToken")});var NS=T((dde,mL)=>{"use strict";var vX=oL(),ua=require("passport"),BX=require("passport-local").Strategy,HX=require("passport-http").BasicStrategy,xX=require("util"),qX=cs(),hL=xX.callbackify(qX.findAndValidateUser),_de=yr(),FX=I(),EL=fu();ua.use(new BX(function(e,t,r){hL(e,t,r)}));ua.use(new HX(function(e,t,r){hL(e,t,r)}));ua.serializeUser(function(e,t){t(null,e)});ua.deserializeUser(function(e,t){t(null,e)});function GX(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let s,n;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");s=o[0],n=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("Must login")}switch(a(i,"handleResponse"),s){case"Basic":ua.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===FX.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?EL.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):EL.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:ua.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(GX,"authorize");function kX(e,t){let r=vX(e);if(r){t(r);return}let s={authorized:!0,messages:[]},n=e.user.role;if(!n?.permission)return t("Invalid role");let i=JSON.parse(n.permission);if(i.super_user)return t(null,s);if(!i[e.schema])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.schema} schema`),t(null,s);if(!i[e.schema].tables[e.table])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.table} table`),t(null,s);if(!i[e.schema].tables[e.table][e.operation])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return s.authorized=!1,s.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let o=i[e.schema].tables[e.table].attribute_permissions;for(let c in o)e.attributes.indexOf(o[c].attribute_name)>-1&&!o[c][e.operation]&&(s.authorized=!1,s.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,s)}a(kX,"checkPermissions");mL.exports={authorize:GX,checkPermissions:kX}});var fi=T((Ede,pL)=>{"use strict";var yS=class{static{a(this,"Node")}constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}},IS=class{static{a(this,"NodeSubscription")}constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};pL.exports={Node:yS,NodeSubscription:IS}});var TL=T((mde,SL)=>{"use strict";var VX=I().OPERATIONS_ENUM,wS=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=VX.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};SL.exports=wS});var Eu=T((Sde,gL)=>{"use strict";var CS=class{static{a(this,"RemotePayloadObject")}constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}},DS=class{static{a(this,"RemotePayloadSubscription")}constructor(t,r,s,n,i,o,c){this.schema=t,this.table=r,this.hash_attribute=s,this.publish=n,this.subscribe=i,this.start_time=o,c!==void 0&&(this.attributes=c)}};gL.exports={RemotePayloadObject:CS,RemotePayloadSubscription:DS}});var AL=T((gde,RL)=>{"use strict";var LS=class{static{a(this,"TableSizeObject")}constructor(t,r,s=0,n=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=s,this.record_count=n,this.transaction_log_size=i,this.transaction_log_record_count=o}};RL.exports=LS});var NL=T((Nde,bL)=>{"use strict";var $X=AL(),Ade=Et(),OL=$e(),YX=G(),{getSchemaPath:Ode,getTransactionAuditStorePath:bde}=Ke(),{getDatabases:KX}=(pe(),te(Fe));bL.exports=WX;async function WX(e){let t=new $X;try{let r=KX()[e.schema]?.[e.name],s=r.primaryStore.getStats(),n=r.auditStore?.getStats(),i=await OL.environmentDataSize(schema_path,e.name),o=await OL.environmentDataSize(txn_path,e.name);t.schema=e.schema,t.table=e.name,t.table_size=i,t.record_count=s.entryCount,t.transaction_log_size=o,t.transaction_log_record_count=n.entryCount}catch(r){YX.warn(`unable to stat table dbi due to ${r}`)}return t}a(WX,"lmdbGetTableSize")});var IL=T((Ide,yL)=>{"use strict";var US=class{static{a(this,"SystemInformationObject")}constructor(t,r,s,n,i,o,c){this.system=t,this.time=r,this.cpu=s,this.memory=n,this.disk=i,this.network=o,this.harperdb_processes=c}};yL.exports=US});var la=T((Lde,LL)=>{"use strict";var QX=require("fs-extra"),zX=require("path"),Xt=require("systeminformation"),Ei=G(),JX=rt(),MS=Ge(),yd=I(),XX=NL(),DL=jn(),{getThreadInfo:wL}=Qe(),VS=j();VS.initSync();var jX=IL(),{openEnvironment:Cde}=$e(),{getSchemaPath:Dde}=Ke(),{database:ZX}=(pe(),te(Fe)),Nd;LL.exports={getHDBProcessInfo:HS,getNetworkInfo:qS,getDiskInfo:xS,getMemoryInfo:BS,getCPUInfo:vS,getTimeInfo:PS,getSystemInformation:FS,systemInformation:ej,getTableSize:GS,getMetrics:kS};function PS(){return Xt.time()}a(PS,"getTimeInfo");async function vS(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:c,socket:u,cache:_,...l}=await Xt.cpu();l.cpu_speed=await Xt.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:R,...O}=await Xt.currentLoad();return O.cpus=[],R.forEach(y=>{let{raw_load:q,raw_load_idle:K,raw_load_irq:H,raw_load_nice:L,raw_load_system:$,raw_load_user:V,...Q}=y;O.cpus.push(Q)}),l.current_load=O,l}catch(e){return Ei.error(`error in getCPUInfo: ${e}`),{}}}a(vS,"getCPUInfo");async function BS(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await Xt.mem();return Object.assign(n,process.memoryUsage())}catch(e){return Ei.error(`error in getMemoryInfo: ${e}`),{}}}a(BS,"getMemoryInfo");async function HS(){let e={core:[],clustering:[]};try{let t=await Xt.processes(),r;try{r=Number.parseInt(await QX.readFile(zX.join(VS.get(yd.CONFIG_PARAMS.ROOTPATH),yd.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===yd.NODE_ERROR_CODES.ENOENT)Ei.error("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB");else throw s}t.list.forEach(s=>{s.pid===r?e.core.push(s):s.name==="nats-server"&&e.clustering.push(s)});for(let s of e.core)for(let n of t.list)n.pid===s.parentPid&&(n.name==="PM2"||n.command==="PM2")&&(s.parent="PM2");return e}catch(t){return Ei.error(`error in getHDBProcessInfo: ${t}`),e}}a(HS,"getHDBProcessInfo");async function xS(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await Xt.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:u,..._}=await Xt.fsStats();return e.read_write=_,e.size=await Xt.fsSize(),e}catch(t){return Ei.error(`error in getDiskInfo: ${t}`),e}}a(xS,"getDiskInfo");async function qS(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await Xt.networkInterfaceDefault(),e.latency=await Xt.inetChecksite("google.com"),(await Xt.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:o,dhcp:c,dnsSuffix:u,ieee8021xAuth:_,ieee8021xState:l,carrier_changes:d,...f}=s;e.interfaces.push(f)}),(await Xt.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,...c}=s;e.stats.push(c)}),e}catch(t){return Ei.error(`error in getNetworkInfo: ${t}`),e}}a(qS,"getNetworkInfo");async function FS(){if(Nd!==void 0)return Nd;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,...c}=await Xt.osInfo();e=c;let u=await Xt.versions("node, npm");return e.node_version=u.node,e.npm_version=u.npm,Nd=e,Nd}catch(t){return Ei.error(`error in getSystemInformation: ${t}`),e}}a(FS,"getSystemInformation");async function GS(){let e=[],t=await DL.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await XX(s));return e}a(GS,"getTableSize");async function kS(){let e=await DL.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let i=ZX({database:r,table:n}),o=i.getStats();o.readers=i.readerList().split(/\n\s+/).slice(1).map(c=>{let[u,_,l]=c.trim().split(" ");return{pid:u,thread:_,txnid:l}}),s[n]=o}catch(i){Ei.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(kS,"getMetrics");async function CL(){if(VS.get(yd.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await JX.getNATSReferences(),r=await t.streams.info(MS.WORK_QUEUE_CONSUMER_NAMES.stream_name),s=await e.consumers.get(MS.WORK_QUEUE_CONSUMER_NAMES.stream_name,MS.WORK_QUEUE_CONSUMER_NAMES.durable_name),n={ingest:{stream:{...r.state},consumer:{num_ack_pending:s._info.num_ack_pending,num_redelivered:s._info.num_redelivered,num_waiting:s._info.num_waiting,num_pending:s._info.num_pending}}};return r.sources&&(n.ingest.stream.sources=r.sources),n}}a(CL,"getNatsStreamInfo");async function ej(e){let t=new jX;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await FS(),t.time=PS(),t.cpu=await vS(),t.memory=await BS(),t.disk=await xS(),t.network=await qS(),t.harperdb_processes=await HS(),t.table_size=await GS(),t.metrics=await kS(),t.threads=await wL(),t.replication=await CL(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await FS();break;case"time":t.time=PS();break;case"cpu":t.cpu=await vS();break;case"memory":t.memory=await BS();break;case"disk":t.disk=await xS();break;case"network":t.network=await qS();break;case"harperdb_processes":t.harperdb_processes=await HS();break;case"table_size":t.table_size=await GS();break;case"database_metrics":case"metrics":t.metrics=await kS();break;case"threads":t.threads=await wL();break;case"replication":t.replication=await CL();break;default:break}return t}a(ej,"systemInformation")});var $S=T((Mde,UL)=>{"use strict";UL.exports={version:tj,printVersion:rj};var Id=Xc();function tj(){if(Id)return Id.version}a(tj,"version");function rj(){Id&&console.log(`HarperDB Version ${Id.version}`)}a(rj,"printVersion")});var ds=T((Hde,BL)=>{"use strict";var sj=Ur(),YS=W(),nj=require("util"),ro=I(),ML=j();ML.initSync();var ij=NS(),PL=os(),{Node:vde,NodeSubscription:Bde}=fi(),oj=Zo(),aj=TL(),{RemotePayloadObject:cj,RemotePayloadSubscription:uj}=Eu(),{handleHDBError:lj,hdb_errors:_j}=Z(),{HTTP_STATUS_CODES:dj,HDB_ERROR_MSGS:fj}=_j,Ej=Zs(),hj=la(),mj=$S(),{getDatabases:pj}=(pe(),te(Fe)),Sj=nj.promisify(ij.authorize),Tj=PL.searchByHash,gj=PL.searchByValue;BL.exports={authHeaderToUser:Rj,isEmpty:Aj,getNodeRecord:Oj,upsertNodeRecord:bj,buildNodePayloads:Nj,checkClusteringEnabled:yj,getAllNodeRecords:Ij,getSystemInfo:wj,reverseSubscription:vL};async function Rj(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await Sj(t,null),e}a(Rj,"authHeaderToUser");function Aj(e){return e==null}a(Aj,"isEmpty");async function Oj(e){let t=new oj(ro.SYSTEM_SCHEMA_NAME,ro.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return Tj(t)}a(Oj,"getNodeRecord");async function bj(e){let t=new aj(ro.SYSTEM_SCHEMA_NAME,ro.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return sj.upsert(t)}a(bj,"upsertNodeRecord");function vL(e){if(YS.isEmpty(e.subscribe)||YS.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:s}=e,n={schema:t,table:r,hash_attribute:s};return e.subscribe===!0&&e.publish===!1?(n.subscribe=!1,n.publish=!0):e.subscribe===!1&&e.publish===!0?(n.subscribe=!0,n.publish=!1):(n.subscribe=e.subscribe,n.publish=e.publish),n}a(vL,"reverseSubscription");function Nj(e,t,r,s){let n=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:u,table:_}=c,l=YS.getTableHashAttribute(u,_),{subscribe:d,publish:f}=vL(c),E=pj()[u]?.[_],h=new uj(u,_,l,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);n.push(h)}return new cj(r,t,n,s)}a(Nj,"buildNodePayloads");function yj(){if(!ML.get(ro.CONFIG_PARAMS.CLUSTERING_ENABLED))throw lj(new Error,fj.CLUSTERING_NOT_ENABLED,dj.BAD_REQUEST,void 0,void 0,!0)}a(yj,"checkClusteringEnabled");async function Ij(){let e=new Ej(ro.SYSTEM_SCHEMA_NAME,ro.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await gj(e))}a(Ij,"getAllNodeRecords");async function wj(){let e=await hj.getSystemInformation();return{hdb_version:mj.version(),node_version:e.node_version,platform:e.platform}}a(wj,"getSystemInfo")});var KS=T((qde,$L)=>{"use strict";var wd=rt(),HL=W(),xL=Ge(),qL=I(),Cd=G(),FL=au(),Cj=X_(),{RemotePayloadObject:Dj}=Eu(),{handleHDBError:GL,hdb_errors:Lj}=Z(),{HTTP_STATUS_CODES:kL}=Lj,{NodeSubscription:VL}=fi();$L.exports=Uj;async function Uj(e,t){let r;try{r=await wd.request(`${t}.${xL.REQUEST_SUFFIX}`,new Dj(qL.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),Cd.trace("Response from remote describe all request:",r)}catch(o){Cd.error(`addNode received error from describe all request to remote node: ${o}`);let c=wd.requestErrorHandler(o,"add_node",t);throw GL(new Error,c,kL.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===xL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw GL(new Error,o,kL.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{table:c}=o,u=o.database??o.schema??"data";if(u===qL.SYSTEM_SCHEMA_NAME){await wd.createLocalTableStream(u,c);let h=new VL(u,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=HL.doesSchemaExist(u),l=s[u]!==void 0,d=c?HL.doesTableExist(u,c):!0,f=c?s?.[u]?.[c]!==void 0:!0;if(!_&&!l||!d&&!f){n.push(o);continue}if(!_&&l&&(Cd.trace(`addNode creating schema: ${u}`),await FL.createSchema({operation:"create_schema",schema:u})),!d&&f){Cd.trace(`addNode creating table: ${c} in schema: ${u} with attributes ${JSON.stringify(s[u][c].attributes)}`);let h=new Cj(u,c,s[u][c].hash_attribute);s[u][c].attributes&&(h.attributes=s[u][c].attributes),await FL.createTable(h)}await wd.createLocalTableStream(u,c);let E=new VL(u,c,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:n}}a(Uj,"reviewSubscriptions")});var Ud=T((Gde,WL)=>{"use strict";var{handleHDBError:Dd,hdb_errors:Mj}=Z(),{HTTP_STATUS_CODES:Ld}=Mj,{addUpdateNodeValidator:Pj}=gd(),hu=G(),KL=I(),YL=Ge(),vj=W(),WS=rt(),mu=ds(),Bj=j(),Hj=KS(),{Node:xj,NodeSubscription:qj}=fi(),{broadcast:Fj}=Qe(),Gj="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",kj="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Vj=Bj.get(KL.CONFIG_PARAMS.CLUSTERING_NODENAME);WL.exports=$j;async function $j(e,t=!1){hu.trace("addNode called with:",e),mu.checkClusteringEnabled();let r=Pj(e);if(r)throw Dd(r,r.message,Ld.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let d=await mu.getNodeRecord(s);if(!vj.isEmptyOrZeroLength(d))throw Dd(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,Ld.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await Hj(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=Gj,o;let c=mu.buildNodePayloads(n,Vj,KL.OPERATIONS_ENUM.ADD_NODE,await mu.getSystemInfo());hu.trace("addNode sending remote payload:",c);let u;try{u=await WS.request(`${s}.${YL.REQUEST_SUFFIX}`,c)}catch(d){hu.error(`addNode received error from request: ${d}`);let f=WS.requestErrorHandler(d,"add_node",s);throw Dd(new Error,f,Ld.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===YL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${s}: ${u.message}`;throw Dd(new Error,d,Ld.INTERNAL_SERVER_ERROR,"error",d)}hu.trace(u);let _=[];for(let d=0,f=n.length;d<f;d++){let E=n[d];hu.trace("Add node updating work stream for node:",s,"subscriptions:",E),await WS.updateWorkStream(E,s),n[d].start_time===void 0&&delete n[d].start_time,_.push(new qj(E.schema,E.table,E.publish,E.subscribe))}let l=new xj(s,_,u.system_info);return await mu.upsertNodeRecord(l),Fj({type:"nats_update"}),i.length>0?o.message=kj:o.message=`Successfully added '${s}' to manifest`,o}a($j,"addNode")});var XS=T(($de,JL)=>{"use strict";var{handleHDBError:QS,hdb_errors:Yj}=Z(),{HTTP_STATUS_CODES:zS}=Yj,{addUpdateNodeValidator:Kj}=gd(),pu=G(),zL=I(),QL=Ge(),Vde=W(),JS=rt(),Su=ds(),Wj=j(),{cloneDeep:Qj}=require("lodash"),zj=KS(),{Node:Jj,NodeSubscription:Xj}=fi(),{broadcast:jj}=Qe(),Zj="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",eZ="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",tZ=Wj.get(zL.CONFIG_PARAMS.CLUSTERING_NODENAME);JL.exports=rZ;async function rZ(e){pu.trace("updateNode called with:",e),Su.checkClusteringEnabled();let t=Kj(e);if(t)throw QS(t,t.message,zS.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s,n=await Su.getNodeRecord(r);n.length>0&&(s=Qj(n));let{added:i,skipped:o}=await zj(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=Zj,c;let u=Su.buildNodePayloads(i,tZ,zL.OPERATIONS_ENUM.UPDATE_NODE,await Su.getSystemInfo());pu.trace("updateNode sending remote payload:",u);let _;try{_=await JS.request(`${r}.${QL.REQUEST_SUFFIX}`,u)}catch(l){pu.error(`updateNode received error from request: ${l}`);let d=JS.requestErrorHandler(l,"update_node",r);throw QS(new Error,d,zS.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===QL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let l=`Error returned from remote node ${r}: ${_.message}`;throw QS(new Error,l,zS.INTERNAL_SERVER_ERROR,"error",l)}pu.trace(_);for(let l=0,d=i.length;l<d;l++){let f=i[l];pu.trace(`updateNode updating work stream for node: ${r} subscription:`,f),await JS.updateWorkStream(f,r),i[l].start_time===void 0&&delete i[l].start_time}return s||(s=[new Jj(r,[],_.system_info)]),await sZ(s[0],i,_.system_info),o.length>0?c.message=eZ:c.message=`Successfully updated '${r}'`,c}a(rZ,"updateNode");async function sZ(e,t,r){let s=e;for(let n=0,i=t.length;n<i;n++){let o=t[n],c=!1;for(let u=0,_=e.subscriptions.length;u<_;u++){let l=s.subscriptions[u];if(l.schema===o.schema&&l.table===o.table){l.publish=o.publish,l.subscribe=o.subscribe,c=!0;break}}c||s.subscriptions.push(new Xj(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await Su.upsertNodeRecord(s),jj({type:"nats_update"})}a(sZ,"updateNodeTable")});var tU=T((Kde,eU)=>{"use strict";var ZL=require("joi"),{string:XL}=ZL.types(),nZ=ze(),jL=I(),iZ=j(),oZ=Ge();eU.exports=aZ;function aZ(e){let t=XL.invalid(iZ.get(jL.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(oZ.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=ZL.object({operation:XL.valid(jL.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return nZ.validateBySchema(e,r)}a(aZ,"removeNodeValidator")});var Pd=T((Qde,aU)=>{"use strict";var{handleHDBError:rU,hdb_errors:cZ}=Z(),{HTTP_STATUS_CODES:sU}=cZ,uZ=tU(),Tu=G(),nU=ds(),lZ=W(),Md=I(),iU=Ge(),oU=rt(),_Z=j(),{RemotePayloadObject:dZ}=Eu(),{NodeSubscription:fZ}=fi(),EZ=ea(),hZ=ti(),{broadcast:mZ}=Qe(),pZ=_Z.get(Md.CONFIG_PARAMS.CLUSTERING_NODENAME);aU.exports=SZ;async function SZ(e){Tu.trace("removeNode called with:",e),nU.checkClusteringEnabled();let t=uZ(e);if(t)throw rU(t,t.message,sU.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await nU.getNodeRecord(r);if(lZ.isEmptyOrZeroLength(s))throw rU(new Error,`Node '${r}' was not found.`,sU.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new dZ(Md.OPERATIONS_ENUM.REMOVE_NODE,pZ,[]),i,o=!1;try{i=await oU.request(`${r}.${iU.REQUEST_SUFFIX}`,n),Tu.trace("Remove node reply from remote node:",r,i)}catch(u){Tu.error("removeNode received error from request:",u),o=!0}for(let u=0,_=s.subscriptions.length;u<_;u++){let l=s.subscriptions[u];Tu.trace(`Remove node removing subscription: ${l.schema}.${l.table} for node: ${r}`);let d=new fZ(l.schema,l.table,!1,!1);await oU.updateWorkStream(d,r)}let c=new EZ(Md.SYSTEM_SCHEMA_NAME,Md.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await hZ.deleteRecord(c),mZ({type:"nats_update"}),i?.status===iU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(Tu.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(SZ,"removeNode")});var lU=T((Jde,uU)=>{"use strict";var cU=require("joi"),{string:TZ,array:gZ}=cU.types(),RZ=ze(),AZ=gd();uU.exports=OZ;function OZ(e){let t=cU.object({operation:TZ.valid("configure_cluster").required(),connections:gZ.items(AZ.validation_schema).required()});return RZ.validateBySchema(e,t)}a(OZ,"configureClusterValidator")});var jS=T((jde,hU)=>{"use strict";var bZ=I(),vd=G(),NZ=W(),yZ=Pd(),IZ=Ud(),_U=ds(),wZ=lU(),{handleHDBError:dU,hdb_errors:CZ}=Z(),{HTTP_STATUS_CODES:fU}=CZ,DZ="Configure cluster complete.",LZ="Failed to configure the cluster. Check the logs for more details.",UZ="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";hU.exports=MZ;async function MZ(e){vd.trace("configure cluster called with:",e),_U.checkClusteringEnabled();let t=wZ(e);if(t)throw dU(t,t.message,fU.BAD_REQUEST,void 0,void 0,!0);let r=await _U.getAllNodeRecords(),s=[];for(let f=0,E=r.length;f<E;f++)s.push(EU(yZ,{operation:bZ.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name));let n=await Promise.allSettled(s);vd.trace("All results from configure_cluster remove node:",n);let i=[],o=e.connections.length;for(let f=0;f<o;f++){let E=e.connections[f];i.push(EU(IZ,E,E.node_name))}let c=await Promise.allSettled(i);vd.trace("All results from configure_cluster add node:",c);let u=[],_=[],l=!1,d=n.concat(c);for(let f=0,E=d.length;f<E;f++){let h=d[f];h.status==="rejected"&&(vd.error(h.reason),u.includes(h.reason.node_name)||u.push(h.reason.node_name)),h.status==="fulfilled"&&(l=!0);let p=h?.value?.result;typeof p=="string"&&p.includes("Successfully removed")||h.status==="rejected"||_.push({node_name:h?.value?.node_name,subscriptions:h?.value?.result})}if(NZ.isEmptyOrZeroLength(u))return{message:DZ,connections:_};if(l)return{message:UZ,failed_nodes:u,connections:_};throw dU(new Error,LZ,fU.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(MZ,"configureCluster");async function EU(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(EU,"functionWrapper")});var pU=T((efe,mU)=>{"use strict";var Bd=require("joi"),PZ=ze(),{validateSchemaExists:vZ,validateTableExists:BZ,validateSchemaName:HZ}=Qs(),xZ=Bd.object({operation:Bd.string().valid("purge_stream"),schema:Bd.string().custom(vZ).custom(HZ).required(),table:Bd.string().custom(BZ).required()});function qZ(e){return PZ.validateBySchema(e,xZ)}a(qZ,"purgeStreamValidator");mU.exports=qZ});var ZS=T((rfe,SU)=>{"use strict";var{handleHDBError:FZ,hdb_errors:GZ}=Z(),{HTTP_STATUS_CODES:kZ}=GZ,VZ=pU(),$Z=rt(),YZ=ds();SU.exports=KZ;async function KZ(e){if(e.purge_ingest!==!0){let n=VZ(e);if(n)throw FZ(n,n.message,kZ.BAD_REQUEST,void 0,void 0,!0)}YZ.checkClusteringEnabled();let{schema:t,table:r,purge_ingest:s}=e;return await $Z.purgeTableStream(t,r,s),s?"Successfully purged ingest":`Successfully purged table '${t}.${r}'`}a(KZ,"purgeStream")});var rT=T((nfe,bU)=>{"use strict";var tT=ds(),WZ=rt(),RU=j(),Hd=I(),so=Ge(),QZ=W(),eT=G(),{RemotePayloadObject:zZ}=Eu(),{ErrorCode:TU}=require("nats"),gU=RU.get(Hd.CONFIG_PARAMS.CLUSTERING_ENABLED),AU=RU.get(Hd.CONFIG_PARAMS.CLUSTERING_NODENAME);bU.exports={clusterStatus:JZ,buildNodeStatus:OU};async function JZ(){let e={node_name:AU,is_enabled:gU,connections:[]};if(!gU)return e;let t=await tT.getAllNodeRecords();if(QZ.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(OU(t[s],e.connections));return await Promise.allSettled(r),e}a(JZ,"clusterStatus");async function OU(e,t){let r=e.name,s=new zZ(Hd.OPERATIONS_ENUM.CLUSTER_STATUS,AU,void 0,await tT.getSystemInfo()),n,i,o=so.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();n=await WZ.request(so.REQUEST_SUBJECT(r),s),i=Date.now()-u,n.status===so.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=so.CLUSTER_STATUS_STATUSES.CLOSED,eT.error(`Error getting node status from ${r} `,n))}catch(u){eT.warn(`Error getting node status from ${r}`,u),u.code===TU.NoResponders?o=so.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===TU.Timeout?o=so.CLUSTER_STATUS_STATUSES.TIMEOUT:o=so.CLUSTER_STATUS_STATUSES.CLOSED}let c=new XZ(r,o,n?.message?.ports?.clustering,n?.message?.ports?.operations_api,i,n?.message?.uptime,e.subscriptions,n?.message?.system_info);try{let u={name:r,system_info:n?.message?.system_info};e.system_info?.hdb_version!==Hd.PRE_4_0_0_VERSION&&await tT.upsertNodeRecord(u)}catch(u){eT.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(OU,"buildNodeStatus");function XZ(e,t,r,s,n,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:s},this.latency_ms=n,this.uptime=i,this.subscriptions=o,this.system_info=c}a(XZ,"NodeStatusObject")});var nT=T((ofe,NU)=>{"use strict";var{handleHDBError:jZ,hdb_errors:ZZ}=Z(),{HTTP_STATUS_CODES:e5}=ZZ,t5=rt(),r5=ds(),sT=W(),xd=require("joi"),s5=ze(),n5=2e3,i5=xd.object({timeout:xd.number().min(1),connected_nodes:xd.boolean(),routes:xd.boolean()});NU.exports=o5;async function o5(e){r5.checkClusteringEnabled();let t=s5.validateBySchema(e,i5);if(t)throw jZ(t,t.message,e5.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||sT.autoCastBoolean(s),o=n===void 0||sT.autoCastBoolean(n),c={nodes:[]},u=await t5.getServerList(r??n5),_={};if(i)for(let l=0,d=u.length;l<d;l++){let f=u[l].statsz;f&&(_[u[l].server.name]=f.routes)}for(let l=0,d=u.length;l<d;l++){if(u[l].statsz)continue;let f=u[l].server,E=u[l].data;if(f.name.endsWith("-hub")){let h={name:f.name.slice(0,-4),response_time:u[l].response_time};i&&(h.connected_nodes=[],_[f.name]&&_[f.name].forEach(p=>{h.connected_nodes.includes(p.name.slice(0,-4))||h.connected_nodes.push(p.name.slice(0,-4))})),o&&(h.routes=E.cluster?.urls?E.cluster?.urls.map(p=>({host:p.split(":")[0],port:sT.autoCast(p.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(o5,"clusterNetwork")});var CU=T((cfe,wU)=>{"use strict";var iT=require("joi"),yU=ze(),{route_constraints:IU}=Cm();wU.exports={setRoutesValidator:a5,deleteRoutesValidator:c5};function a5(e){let t=iT.object({server:iT.valid("hub","leaf").required(),routes:IU.required()});return yU.validateBySchema(e,t)}a(a5,"setRoutesValidator");function c5(e){let t=iT.object({routes:IU.required()});return yU.validateBySchema(e,t)}a(c5,"deleteRoutesValidator")});var aT=T((lfe,MU)=>{"use strict";var no=vr(),oT=W(),qd=I(),DU=CU(),{handleHDBError:LU,hdb_errors:u5}=Z(),{HTTP_STATUS_CODES:UU}=u5,l5="cluster routes successfully set",_5="cluster routes successfully deleted";MU.exports={setRoutes:d5,getRoutes:f5,deleteRoutes:E5};function d5(e){let t=DU.setRoutesValidator(e);if(t)throw LU(t,t.message,UU.BAD_REQUEST,void 0,void 0,!0);let r=no.getClusteringRoutes(),s=e.server==="hub"?r.hub_routes:r.leaf_routes,n=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],o=[];for(let c=0,u=e.routes.length;c<u;c++){let _=e.routes[c];_.port=oT.autoCast(_.port);let l=s.some(f=>f.host===_.host&&f.port===_.port),d=n.some(f=>f.host===_.host&&f.port===_.port);l||d?i.push(_):(s.push(_),o.push(_))}return e.server==="hub"?no.updateConfigValue(qd.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):no.updateConfigValue(qd.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:l5,set:o,skipped:i}}a(d5,"setRoutes");function f5(){let e=no.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(f5,"getRoutes");function E5(e){let t=DU.deleteRoutesValidator(e);if(t)throw LU(t,t.message,UU.BAD_REQUEST,void 0,void 0,!0);let r=no.getClusteringRoutes(),s=r.hub_routes,n=r.leaf_routes,i=[],o=[],c=!1,u=!1;for(let _=0,l=e.routes.length;_<l;_++){let d=e.routes[_],f=!1;for(let E=0,h=s.length;E<h;E++){let p=s[E];if(d.host===p.host&&d.port===p.port){s.splice(E,1),f=!0,c=!0,i.push(d);break}}if(!f){let E=!0;for(let h=0,p=n.length;h<p;h++){let S=n[h];if(d.host===S.host&&d.port===S.port){n.splice(h,1),u=!0,E=!1,i.push(d);break}}E&&o.push(d)}}return c&&(s=oT.isEmptyOrZeroLength(s)?null:s,no.updateConfigValue(qd.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),u&&(n=oT.isEmptyOrZeroLength(n)?null:n,no.updateConfigValue(qd.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:_5,deleted:i,skipped:o}}a(E5,"deleteRoutes")});var vU=T((dfe,PU)=>{"use strict";var gu=require("alasql"),io=require("recursive-iterator"),Hs=G(),h5=W(),Ru=I(),cT=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,p5(this.ast,this.affected_attributes,this.table_lookup,this.schema_lookup,this.table_to_schema_lookup)}getAttributesBySchemaTableName(t,r){if(!t||!r||!this.affected_attributes)return[];if(this.affected_attributes.has(t))return!this.affected_attributes.get(t).has(r)&&(r=this.table_lookup.get(r),!r)?[]:this.affected_attributes.get(t).get(r)}getAllTables(){let t=[];if(!this.affected_attributes)return t;for(let r of this.affected_attributes.keys())t.push(Array.from(this.affected_attributes.get(r).keys()));return t}getTablesBySchemaName(t){return!t||!this.affected_attributes?[]:Array.from(this.affected_attributes.get(t).keys())}getSchemas(){return this.affected_attributes?Array.from(this.affected_attributes.keys()):[]}getAst(){return this.ast}updateAttributeWildcardsForRolePerms(t){let r=this.ast.columns.filter(n=>Ru.SEARCH_WILDCARDS.includes(n.columnid));if(r.length===0)return this.ast;let s=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(n=>!Ru.SEARCH_WILDCARDS.includes(n.columnid)),r.forEach(n=>{let i=this.table_to_schema_lookup.has(n.tableid)?this.table_to_schema_lookup.get(n.tableid):s,o=this.table_lookup.has(n.tableid)?this.table_lookup.get(n.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][Ru.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=m5(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(_=>({attribute_name:_.attribute}));let u=this.affected_attributes.get(i).get(o).filter(_=>!Ru.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let l=new gu.yy.Column({columnid:_});n.tableid&&(l.tableid=n.tableid),this.ast.columns.push(l),u.includes(_)||u.push(_)}),this.affected_attributes.get(i).set(o,u)}}),this.ast}};function m5(e){return e.filter(t=>t[Ru.PERMS_CRUD_ENUM.READ])}a(m5,"filterReadRestrictedAttrs");function p5(e,t,r,s,n){S5(e,t,r,s,n)}a(p5,"interpretAST");function Au(e,t,r,s,n){if(!(!e||!e.databaseid)&&(t.has(e.databaseid)||t.set(e.databaseid,new Map),t.get(e.databaseid).has(e.tableid)||t.get(e.databaseid).set(e.tableid,[]),e.as&&(r.has(e.as)||r.set(e.as,e.tableid),s&&!s.has(e.as)&&s.set(e.as,e.databaseid)),n)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),n.set(o,i)}}a(Au,"addSchemaTableToMap");function S5(e,t,r,s,n){if(!e){Hs.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof gu.yy.Insert?A5(e,t,r):e instanceof gu.yy.Select?T5(e,t,r,s,n):e instanceof gu.yy.Update?g5(e,t,r):e instanceof gu.yy.Delete?R5(e,t,r):Hs.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(S5,"getRecordAttributesAST");function T5(e,t,r,s,n){if(!e){Hs.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(h5.isEmptyOrZeroLength(i)){Hs.error("No schema specified");return}e.from.forEach(c=>{Au(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),Au(c.table,t,r,s,n)});let o=new io(e.columns);for(let{node:c}of o)if(c&&c.columnid){let u=c.tableid,_=s.has(u)?s.get(u):i;if(u||(u=e.from[0].tableid),!t.get(_).has(u))if(r.has(u))u=r.get(u);else{Hs.info(`table specified as ${u} not found.`);return}t.get(_).get(u).indexOf(c.columnid)<0&&t.get(_).get(u).push(c.columnid)}if(e.where){let c=new io(e.where),u=e.from[0].tableid;for(let{node:_}of c)if(_&&_.columnid){let l=_.tableid?_.tableid:u;if(!t.get(i).has(l))if(r.has(l))l=r.get(l);else{Hs.info(`table specified as ${l} not found.`);continue}t.get(i).get(l).indexOf(_.columnid)<0&&t.get(i).get(l).push(_.columnid)}}if(e.joins&&e.joins.forEach(c=>{let u=new io(c.on);for(let{node:_}of u)if(_&&_.columnid){let l=_.tableid,d=n.get(l);if(!t.get(d).has(l))if(r.has(l))l=r.get(l);else{Hs.info(`table specified as ${l} not found.`);continue}t.get(d).get(l).indexOf(_.columnid)<0&&t.get(d).get(l).push(_.columnid)}}),e.order){let c=new io(e.order);for(let{node:u}of c)if(u&&u.columnid){let _=u.tableid,l=s.has(_)?s.get(_):i;if(_||(_=e.from[0].tableid),!t.get(l).has(_))if(r.has(_))_=r.get(_);else{Hs.info(`table specified as ${_} not found.`);return}t.get(l).get(_).indexOf(u.columnid)<0&&t.get(l).get(_).push(u.columnid)}}}a(T5,"getSelectAttributes");function g5(e,t,r){if(!e){Hs.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new io(e.columns),n=e.table.databaseid;Au(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&uT(e.table.tableid,n,i.columnid,t,r)}a(g5,"getUpdateAttributes");function R5(e,t,r){if(!e){Hs.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new io(e.where),n=e.table.databaseid;Au(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&uT(e.table.tableid,n,i.columnid,t,r)}a(R5,"getDeleteAttributes");function A5(e,t,r){if(!e){Hs.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new io(e.columns),n=e.into.databaseid;Au(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&uT(e.into.tableid,n,i.columnid,t,r)}a(A5,"getInsertAttributes");function uT(e,t,r,s,n){if(!s.get(t))return;let i=e;s.get(t).has(i)||(i=n.get(i)),s.get(t).get(i).push(r)}a(uT,"pushAttribute");PU.exports=cT});var dT=T((Efe,qU)=>{var Fd=$o(),BU=require("chalk"),kr=G(),HU=require("prompt"),{promisify:O5}=require("util"),lT=I(),b5=require("fs-extra"),N5=require("path"),y5=W(),I5=$S(),xU=j();xU.initSync();var w5=require("moment"),C5=O5(HU.get),D5=N5.join(xU.getHdbBasePath(),lT.LICENSE_KEY_DIR_NAME,lT.LICENSE_FILE_NAME,lT.LICENSE_FILE_NAME);qU.exports={getFingerprint:U5,setLicense:L5,parseLicense:_T,register:M5,getRegistrationInfo:v5};async function L5(e){if(e&&e.key&&e.company){try{kr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await _T(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw kr.error(r),kr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(L5,"setLicense");async function U5(){let e={};try{e=await Fd.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw kr.error(r),kr.error(t),new Error(r)}return e}a(U5,"getFingerprint");async function _T(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");kr.info("Validating license input...");let r=Fd.validateLicense(e,t);if(kr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(kr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(kr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{kr.info("writing license to disk"),await b5.writeFile(D5,JSON.stringify({license_key:e,company:t}))}catch(s){throw kr.error("Failed to write License"),s}return"Registration successful."}a(_T,"parseLicense");async function M5(){let e=await P5();return _T(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(M5,"register");async function P5(){let e=await Fd.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:BU.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:BU.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{HU.start()}catch(s){kr.error(s)}let r;try{r=await C5(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(P5,"promptForRegistration");async function v5(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await Fd.getLicense()}catch(r){throw kr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(y5.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=I5.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=w5.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(v5,"getRegistrationInfo")});var GU=T((mfe,FU)=>{"use strict";var B5=Ge(),fT=class{static{a(this,"HubConfigObject")}constructor(t,r,s,n,i,o,c,u,_,l,d,f,E,h){this.port=t,o===null&&(o=void 0),this.server_name=r+B5.SERVER_SUFFIX.HUB,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!1},this.tls={cert_file:n,key_file:i,ca_file:o,insecure:c,verify:u},this.leafnodes={port:_,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c}},this.cluster={name:l,port:d,routes:f,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c,verify:u}},this.accounts={SYS:{users:E},HDB:{users:h}},this.system_account="SYS"}};FU.exports=fT});var $U=T((Sfe,VU)=>{"use strict";var kU=Ge(),ET=class{static{a(this,"LeafConfigObject")}constructor(t,r,s,n,i,o,c,u,_,l,d){this.port=t,d===null&&(d=void 0),this.server_name=r+kU.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:n,domain:r+kU.SERVER_SUFFIX.LEAF},this.tls={cert_file:_,key_file:l,ca_file:d,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:d,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:d,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:u,jetstream:"enabled"}},this.system_account="SYS"}};VU.exports=ET});var KU=T((gfe,YU)=>{"use strict";var hT=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};YU.exports=hT});var QU=T((Afe,WU)=>{"use strict";var H5=Ge(),mT=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+H5.SERVER_SUFFIX.ADMIN,this.password=r}};WU.exports=mT});var TT=T((bfe,XU)=>{"use strict";var _a=require("path"),Vd=require("fs-extra"),x5=GU(),q5=$U(),F5=KU(),G5=QU(),pT=cs(),fa=W(),mr=vr(),kd=I(),Ou=Ge(),{CONFIG_PARAMS:dt}=kd,bu=G(),Nu=j(),zU=Rn(),ST=rt(),da="clustering",k5=1e4,JU=5;XU.exports={generateNatsConfig:$5,removeNatsConfig:Y5,getHubConfigPath:V5};function V5(){let e=Nu.get(dt.ROOTPATH);return _a.join(e,da,Ou.NATS_CONFIG_FILES.HUB_SERVER)}a(V5,"getHubConfigPath");async function $5(e=!1,t=void 0){Nu.initSync();let r=Nu.get(dt.ROOTPATH),s=_a.join(r,da,Ou.PID_FILES.HUB),n=_a.join(r,da,Ou.PID_FILES.LEAF),i=mr.getConfigFromFile(dt.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=_a.join(r,da,Ou.NATS_CONFIG_FILES.HUB_SERVER),c=_a.join(r,da,Ou.NATS_CONFIG_FILES.LEAF_SERVER),u=mr.getConfigFromFile(dt.CLUSTERING_TLS_CERTIFICATE),_=mr.getConfigFromFile(dt.CLUSTERING_TLS_PRIVATEKEY),l=mr.getConfigFromFile(dt.CLUSTERING_TLS_CERT_AUTH),d=mr.getConfigFromFile(dt.CLUSTERING_TLS_INSECURE),f=mr.getConfigFromFile(dt.CLUSTERING_TLS_VERIFY),E=mr.getConfigFromFile(dt.CLUSTERING_NODENAME),h=mr.getConfigFromFile(dt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await ST.checkNATSServerInstalled()||$d("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let p=await pT.listUsers(),S=mr.getConfigFromFile(dt.CLUSTERING_USER),R=await pT.getClusterUser();(fa.isEmpty(R)||R.active!==!0)&&$d(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await Gd(dt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await Gd(dt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await Gd(dt.CLUSTERING_HUBSERVER_NETWORK_PORT),await Gd(dt.CLUSTERING_LEAFSERVER_NETWORK_PORT));let O=[],y=[];for(let[Q,re]of p.entries())re.role.role===kd.ROLE_TYPES_ENUM.CLUSTER_USER&&re.active&&(O.push(new G5(re.username,zU.decrypt(re.hash))),y.push(new F5(re.username,zU.decrypt(re.hash))));let q=[],{hub_routes:K}=mr.getClusteringRoutes();if(!fa.isEmptyOrZeroLength(K))for(let Q of K)q.push(`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@${Q.host}:${Q.port}`);let H=new x5(mr.getConfigFromFile(dt.CLUSTERING_HUBSERVER_NETWORK_PORT),E,s,u,_,l,d,f,h,mr.getConfigFromFile(dt.CLUSTERING_HUBSERVER_CLUSTER_NAME),mr.getConfigFromFile(dt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),q,O,y);l==null&&(delete H.tls.ca_file,delete H.leafnodes.tls.ca_file),t=fa.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===kd.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await Vd.writeJson(o,H),bu.trace(`Hub server config written to ${o}`));let L=`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,$=`tls://${R.uri_encoded_name}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,V=new q5(mr.getConfigFromFile(dt.CLUSTERING_LEAFSERVER_NETWORK_PORT),E,n,i,[L],[$],O,y,u,_,l,d);l==null&&delete V.tls.ca_file,(t===void 0||t===kd.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await Vd.writeJson(c,V),bu.trace(`Leaf server config written to ${c}`))}a($5,"generateNatsConfig");async function Gd(e){let t=Nu.get(e);return fa.isEmpty(t)&&$d(`port undefined for '${e}'`),await fa.isPortTaken(t)&&$d(`'${e}' port '${t}' is is in use by another process, check to see if HarperDB is already running or another process is using this port.`),!0}a(Gd,"isPortAvailable");function $d(e){let t=`Error generating clustering config: ${e}`;bu.error(t),console.error(t),process.exit(1)}a($d,"generateNatsConfigError");async function Y5(e){let{port:t,config_file:r}=ST.getServerConfig(e),{username:s,decrypt_hash:n}=await pT.getClusterUser(),i=0,o=2e3;for(;i<JU;){try{let _=await ST.createConnection(t,s,n,!1);if(_.protocol.connected===!0){_.close();break}}catch(_){bu.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${_}`)}if(i++,i>=JU)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 fa.async_set_timeout(o*(i*2))}let c="0".repeat(k5),u=_a.join(Nu.get(dt.ROOTPATH),da,r);await Vd.writeFile(u,c),await Vd.remove(u),bu.notify(e,"started.")}a(Y5,"removeNatsConfig")});var sM=T((yfe,rM)=>{"use strict";var Vr=j(),K5=$o(),_e=I(),yu=Ge(),In=require("path"),{PACKAGE_ROOT:Kd}=I(),jU=j(),Yd=W(),Ea="/dev/null",W5=In.join(Kd,"launchServiceScripts"),ZU=In.join(Kd,"utility/scripts"),Q5=In.join(ZU,_e.HDB_RESTART_SCRIPT),eM=In.resolve(Kd,"dependencies",`${process.platform}-${process.arch}`,yu.NATS_BINARY_NAME);function tM(){let t=K5.licenseSearch().ram_allocation||_e.RAM_ALLOCATION_ENUM.DEFAULT,r=_e.MEM_SETTING_KEY+t,s={[_e.PROCESS_NAME_ENV_PROP]:_e.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return Yd.noBootFile()&&(s[_e.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Yd.getEnvCliRootPath()),{name:_e.PROCESS_DESCRIPTORS.HDB,script:_e.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:s,node_args:r,cwd:Kd}}a(tM,"generateMainServerConfig");var z5=9930;function J5(){Vr.initSync(!0);let e=Vr.get(_e.CONFIG_PARAMS.ROOTPATH),t=In.join(e,"clustering",yu.NATS_CONFIG_FILES.HUB_SERVER),r=In.join(Vr.get(_e.HDB_SETTINGS_NAMES.LOG_PATH_KEY),_e.LOG_NAMES.HDB),s=jU.get(_e.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=yu.LOG_LEVEL_FLAGS[Vr.get(_e.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:_e.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==z5?"-"+s:""),script:eM,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[_e.PROCESS_NAME_ENV_PROP]:_e.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return Vr.get(_e.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Ea,i.error_file=Ea),i}a(J5,"generateNatsHubServerConfig");var X5=9940;function j5(){Vr.initSync(!0);let e=Vr.get(_e.CONFIG_PARAMS.ROOTPATH),t=In.join(e,"clustering",yu.NATS_CONFIG_FILES.LEAF_SERVER),r=In.join(Vr.get(_e.HDB_SETTINGS_NAMES.LOG_PATH_KEY),_e.LOG_NAMES.HDB),s=jU.get(_e.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=yu.LOG_LEVEL_FLAGS[Vr.get(_e.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:_e.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==X5?"-"+s:""),script:eM,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[_e.PROCESS_NAME_ENV_PROP]:_e.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return Vr.get(_e.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Ea,i.error_file=Ea),i}a(j5,"generateNatsLeafServerConfig");function Z5(){Vr.initSync();let e=In.join(Vr.get(_e.CONFIG_PARAMS.LOGGING_ROOT),_e.LOG_NAMES.HDB),t={name:_e.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:_e.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[_e.PROCESS_NAME_ENV_PROP]:_e.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:W5,autorestart:!1};return Vr.get(_e.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Ea,t.error_file=Ea),t}a(Z5,"generateClusteringUpgradeV4ServiceConfig");function e8(){let e={[_e.PROCESS_NAME_ENV_PROP]:_e.PROCESS_DESCRIPTORS.RESTART_HDB};return Yd.noBootFile()&&(e[_e.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Yd.getEnvCliRootPath()),{...{name:_e.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:ZU},script:Q5}}a(e8,"generateRestart");function t8(){return{apps:[tM()]}}a(t8,"generateAllServiceConfigs");rM.exports={generateAllServiceConfigs:t8,generateMainServerConfig:tM,generateRestart:e8,generateNatsHubServerConfig:J5,generateNatsLeafServerConfig:j5,generateClusteringUpgradeV4ServiceConfig:Z5}});var pM=T((Cfe,mM)=>{"use strict";var Ce=I(),r8=W(),wn=TT(),Iu=rt(),sn=Ge(),hi=sM(),Wd=j(),mi=G(),s8=ds(),{startWorker:nM,onMessageFromWorkers:n8}=Qe(),i8=la(),wfe=require("util"),o8=require("child_process"),a8=require("fs"),{execFile:c8}=o8,Ae;mM.exports={enterPM2Mode:u8,start:pi,stop:gT,reload:oM,restart:aM,list:RT,describe:uM,connect:Cn,kill:E8,startAllServices:h8,startService:AT,getUniqueServicesList:lM,restartAllServices:m8,isServiceRegistered:_M,reloadStopStart:dM,restartHdb:cM,deleteProcess:d8,startClusteringProcesses:EM,startClusteringThreads:hM,isHdbRestartRunning:f8,isClusteringRunning:S8,stopClustering:p8,reloadClustering:T8};var wu=!1;n8(e=>{e.type==="restart"&&Wd.initSync(!0)});function u8(){wu=!0}a(u8,"enterPM2Mode");function Cn(){return Ae||(Ae=require("pm2")),new Promise((e,t)=>{Ae.connect((r,s)=>{mi.setupConsoleLogging(),r&&t(r),e(s)})})}a(Cn,"connect");var pr,l8=10,iM;function pi(e,t=!1){if(wu)return _8(e);let r=c8(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=pr.indexOf(r);o>-1&&pr.splice(o,1),!iM&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<l8&&(a8.existsSync(wn.getHubConfigPath())?pi(e):(await wn.generateNatsConfig(!0),pi(e),await new Promise(c=>setTimeout(c,3e3)),await wn.removeNatsConfig(Ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await wn.removeNatsConfig(Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let s={serviceName:e.name.replace(/ /g,"-")};function n(i){let o=Wd.get(Ce.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,u,_=0,l;for(;u=c.exec(i);){if(u.index&&sn.LOG_LEVEL_HIERARCHY[o]>=sn.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===sn.LOG_LEVELS.ERR||l===sn.LOG_LEVELS.WRN?mi.OUTPUTS.STDERR:mi.OUTPUTS.STDOUT;mi.logCustomLevel(l||"info",E,s,i.slice(_,u.index).trim())}let[d,f]=u;_=u.index+d.length,l=sn.LOG_LEVELS[f]}if(sn.LOG_LEVEL_HIERARCHY[o]>=sn.LOG_LEVEL_HIERARCHY[l||"info"]){let d=l===sn.LOG_LEVELS.ERR||l===sn.LOG_LEVELS.WRN?mi.OUTPUTS.STDERR:mi.OUTPUTS.STDOUT;mi.logCustomLevel(l||"info",d,s,i.slice(_).trim())}}if(a(n,"extractMessages"),r.stdout.on("data",n),r.stderr.on("data",n),r.unref(),pr=[],!pr&&!t){let i=a(()=>{iM=!0,pr&&(pr.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)}pr.push(r)}a(pi,"start");function _8(e){return new Promise(async(t,r)=>{try{await Cn()}catch(s){r(s)}Ae.start(e,(s,n)=>{s&&(Ae.disconnect(),r(s)),Ae.disconnect(),t(n)})})}a(_8,"startWithPM2");function gT(e){if(!wu){for(let t of pr||[])t.name===e&&(pr.splice(pr.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Cn()}catch(s){r(s)}Ae.stop(e,async(s,n)=>{s&&(Ae.disconnect(),r(s)),Ae.delete(e,(i,o)=>{i&&(Ae.disconnect(),r(s)),Ae.disconnect(),t(o)})})})}a(gT,"stop");function oM(e){return new Promise(async(t,r)=>{try{await Cn()}catch(s){r(s)}Ae.reload(e,(s,n)=>{s&&(Ae.disconnect(),r(s)),Ae.disconnect(),t(n)})})}a(oM,"reload");function aM(e){if(!wu)for(let t of pr||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await Cn()}catch(s){r(s)}Ae.restart(e,(s,n)=>{Ae.disconnect(),t(n)})})}a(aM,"restart");function d8(e){return new Promise(async(t,r)=>{try{await Cn()}catch(s){r(s)}Ae.delete(e,(s,n)=>{s&&(Ae.disconnect(),r(s)),Ae.disconnect(),t(n)})})}a(d8,"deleteProcess");async function cM(){await pi(hi.generateRestart())}a(cM,"restartHdb");async function f8(){let e=await RT();for(let t in e)if(e[t].name===Ce.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(f8,"isHdbRestartRunning");function RT(){return new Promise(async(e,t)=>{try{await Cn()}catch(r){t(r)}Ae.list((r,s)=>{r&&(Ae.disconnect(),t(r)),Ae.disconnect(),e(s)})})}a(RT,"list");function uM(e){return new Promise(async(t,r)=>{try{await Cn()}catch(s){r(s)}Ae.describe(e,(s,n)=>{s&&(Ae.disconnect(),r(s)),Ae.disconnect(),t(n)})})}a(uM,"describe");function E8(){if(!wu){for(let e of pr||[])e.kill();pr=[];return}return new Promise(async(e,t)=>{try{await Cn()}catch(r){t(r)}Ae.killDaemon((r,s)=>{r&&(Ae.disconnect(),t(r)),Ae.disconnect(),e(s)})})}a(E8,"kill");async function h8(){try{await EM(),await hM(),await pi(hi.generateAllServiceConfigs())}catch(e){throw Ae?.disconnect(),e}}a(h8,"startAllServices");async function AT(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case Ce.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=hi.generateMainServerConfig();break;case Ce.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=hi.generateNatsIngestServiceConfig();break;case Ce.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=hi.generateNatsReplyServiceConfig();break;case Ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=hi.generateNatsHubServerConfig(),await pi(r,t),await wn.removeNatsConfig(e);return;case Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=hi.generateNatsLeafServerConfig(),await pi(r,t),await wn.removeNatsConfig(e);return;case Ce.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=hi.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await pi(r)}catch(r){throw Ae?.disconnect(),r}}a(AT,"startService");async function lM(){try{let e=await RT(),t={};for(let r=0,s=e.length;r<s;r++){let n=e[r];t[n.name]===void 0&&(t[n.name]={name:n.name,exec_mode:n.pm2_env.exec_mode})}return t}catch(e){throw Ae?.disconnect(),e}}a(lM,"getUniqueServicesList");async function m8(e=[]){try{let t=!1,r=await lM();for(let s=0,n=Object.values(r).length;s<n;s++){let o=Object.values(r)[s].name;e.includes(o)||(o===Ce.PROCESS_DESCRIPTORS.HDB?t=!0:await aM(o))}t&&await dM(Ce.PROCESS_DESCRIPTORS.HDB)}catch(t){throw Ae?.disconnect(),t}}a(m8,"restartAllServices");async function _M(e){if(pr?.find(r=>r.name===e))return!0;let t=await i8.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(_M,"isServiceRegistered");async function dM(e){let t=e===Ce.PROCESS_DESCRIPTORS.HDB?Wd.get(Ce.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):Wd.get(Ce.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await uM(e),s=r8.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await gT(e),await AT(e)):e===Ce.PROCESS_DESCRIPTORS.HDB?await cM():await oM(e)}a(dM,"reloadStopStart");var fM;async function EM(e=!1){for(let t in Ce.CLUSTERING_PROCESSES){let r=Ce.CLUSTERING_PROCESSES[t];await AT(r,e)}}a(EM,"startClusteringProcesses");async function hM(){fM=nM(Ce.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Ce.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await Iu.createWorkQueueStream(sn.WORK_QUEUE_CONSUMER_NAMES),await Iu.updateIngestStreamConsumer(),await Iu.updateLocalStreams();let e=await s8.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Ce.PRE_4_0_0_VERSION){mi.info("Starting clustering upgrade 4.0.0 process"),nM(Ce.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(hM,"startClusteringThreads");async function p8(){for(let e in Ce.CLUSTERING_PROCESSES)if(e!==Ce.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===Ce.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await fM.terminate();else{let t=Ce.CLUSTERING_PROCESSES[e];await gT(t)}}a(p8,"stopClustering");async function S8(){for(let e in Ce.CLUSTERING_PROCESSES){let t=Ce.CLUSTERING_PROCESSES[e];if(await _M(t)===!1)return!1}return!0}a(S8,"isClusteringRunning");async function T8(){await wn.generateNatsConfig(!0),await Iu.reloadNATSHub(),await Iu.reloadNATSLeaf(),await wn.removeNatsConfig(Ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await wn.removeNatsConfig(Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(T8,"reloadClustering")});var Xd=T((Lfe,bM)=>{"use strict";var g8=require("minimist"),{isMainThread:NT,parentPort:gM}=require("worker_threads"),st=I(),{PROCESS_DESCRIPTORS_VALIDATE:Cu}=st,nn=G(),yT=W(),Qd=TT(),ha=rt(),OT=Ge(),RM=vr(),on=pM(),SM=la(),R8=KE(),{restartWorkers:zd,onMessageByType:A8}=Qe(),{handleHDBError:O8,hdb_errors:b8}=Z(),{HTTP_STATUS_CODES:N8}=b8,Jd=j();Jd.initSync();var Du=`Restarting HarperDB. This may take up to ${st.RESTART_TIMEOUT_MS/1e3} seconds.`,y8="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",TM="Clustering is not enabled so cannot be restarted",I8="Invalid service",ma,Es;bM.exports={restart:AM,restartService:IT};NT&&A8(st.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?IT({service:e.workerType}):AM({operation:"restart"})});async function AM(e){Es=Object.keys(e).length===0,ma=await on.isServiceRegistered(st.HDB_PROC_DESCRIPTOR);let t=g8(process.argv);if(t.service){await IT(t);return}if(Es&&!ma){console.error(y8);return}if(Es&&console.log(Du),ma){on.enterPM2Mode(),nn.notify(Du);let r=R8(Object.keys(st.CONFIG_PARAM_MAP),!0);return yT.isEmptyOrZeroLength(Object.keys(r))||RM.updateConfigValue(void 0,void 0,r,!0,!0),C8(),Du}return NT?(nn.notify(Du),setTimeout(()=>{zd()},50)):gM.postMessage({type:st.ITC_EVENT_TYPES.RESTART}),Du}a(AM,"restart");async function IT(e){let{service:t}=e;if(st.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw O8(new Error,I8,N8.BAD_REQUEST,void 0,void 0,!0);if(ma=await on.isServiceRegistered(st.HDB_PROC_DESCRIPTOR),!NT)return gM.postMessage({type:st.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case Cu.clustering:if(!Jd.get(st.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=TM;break}Es&&console.log("Restarting clustering"),nn.notify("Restarting clustering"),await OM();break;case Cu.clustering_config:case Cu["clustering config"]:if(!Jd.get(st.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=TM;break}Es&&console.log("Restarting clustering_config"),nn.notify("Restarting clustering_config"),await on.reloadClustering();break;case"custom_functions":case"custom functions":case Cu.harperdb:case Cu.http_workers:if(Es&&!ma){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}Es&&console.log("Restarting http_workers"),nn.notify("Restarting http_workers"),Es?await on.restart(st.HDB_PROC_DESCRIPTOR):setTimeout(()=>{zd("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(nn.error(r),Es&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(IT,"restartService");async function w8(){await ha.publishToStream(`${OT.SUBJECT_PREFIXES.TXN}.${OT.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,OT.WORK_QUEUE_CONSUMER_NAMES.stream_name,ha.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(w8,"postDummyNatsMsg");async function C8(){await OM(),await on.restart(st.HDB_PROC_DESCRIPTOR),await yT.async_set_timeout(2e3),Jd.get(st.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await bT(),Es&&(await ha.closeConnection(),process.exit(0))}a(C8,"restartPM2Mode");async function OM(){if(!RM.getConfigFromFile(st.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await SM.getHDBProcessInfo()).clustering.length===0)nn.trace("Clustering not running, restart will start clustering services"),await Qd.generateNatsConfig(!0),await on.startClusteringProcesses(),await on.startClusteringThreads(),await bT(),Es&&await ha.closeConnection();else{await w8(),await Qd.generateNatsConfig(!0),ma?(nn.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await on.restart(st.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await on.restart(st.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await SM.getHDBProcessInfo()).clustering.forEach(n=>{nn.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await yT.async_set_timeout(3e3),await bT(),await ha.updateLocalStreams(),Es&&await ha.closeConnection(),nn.trace("Restart clustering restarting ingest and reply service threads");let t=zd(st.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=zd(st.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(OM,"restartClustering");async function bT(){await Qd.removeNatsConfig(st.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Qd.removeNatsConfig(st.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(bT,"removeNatsConfig")});var vM=T((Pfe,PM)=>{"use strict";var Mfe=require("lodash"),Sr=I(),{handleHDBError:NM,hdb_errors:D8}=Z(),{HDB_ERROR_MSGS:L8,HTTP_STATUS_CODES:U8}=D8,wT=G();PM.exports={getRolePermissions:P8};var oo=Object.create(null),M8=a(e=>({key:e,perms:{}}),"perms_template_obj"),CM=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),DM=a((e=!1,t=!1,r=!1,s=!1)=>({[Sr.PERMS_CRUD_ENUM.READ]:e,[Sr.PERMS_CRUD_ENUM.INSERT]:t,[Sr.PERMS_CRUD_ENUM.UPDATE]:r,[Sr.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),CT=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...DM(t,r,s,n)}),"table_perms_template"),yM=a((e,t=DM())=>({attribute_name:e,describe:MM(t),[Lu]:t[Lu],[DT]:t[DT],[LT]:t[LT]}),"attr_perms_template"),IM=a((e,t=!1)=>({attribute_name:e,describe:t,[Lu]:t}),"timestamp_attr_perms_template"),{READ:Lu,INSERT:DT,UPDATE:LT}=Sr.PERMS_CRUD_ENUM,LM=Object.values(Sr.PERMS_CRUD_ENUM),UM=[Lu,DT,LT];function P8(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[Sr.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(oo[t]&&oo[t].key===s)return oo[t].perms;let n=v8(e,r);return oo[t]?oo[t].key=s:oo[t]=M8(s),oo[t].perms=n,n}catch(r){if(!e[Sr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Sr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Sr.PERMS_UPDATE_RELEASE_TIMESTAMP){let s=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw wT.error(s),wT.debug(r),NM(new Error,L8.OUTDATED_PERMS_TRANSLATION_ERROR,U8.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
|
|
11
|
-
${r.stack}`;throw wT.error(s),NM(new Error)}}}a(P8,"getRolePermissions");function v8(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[Sr.SYSTEM_SCHEMA_NAME]=s[Sr.SYSTEM_SCHEMA_NAME],r.structure_user=s.structure_user;let n=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(n===!0||n.indexOf(i)>-1){r[i]=B8(t[i]);return}r[i]=CM(),s[i]?(s[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(s[i].tables[o]){let c=s[i].tables[o],u=t[i][o],_=H8(c,u);r[i].describe||LM.forEach(l=>{_[l]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=CT()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=CT()})}),r}a(v8,"translateRolePermissions");function B8(e){let t=CM(!0);return Object.keys(e).forEach(r=>{t.tables[r]=CT(!0,!0,!0,!0,!0)}),t}a(B8,"createStructureUserPermissions");function H8(e,t){let{attribute_permissions:r}=e;if(r.length>0){let n=Object.assign({},e);n.attribute_permissions=[];let i=r.reduce((_,l)=>{let{attribute_name:d}=l,f=l;return Sr.TIME_STAMP_NAMES.includes(d)&&(f=IM(d,l[Lu])),_[d]=f,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=yM(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let l=i[_];l.describe=MM(l),n.attribute_permissions.push(l),c||x8(l,u)}else if(_!==o){let l;Sr.TIME_STAMP_NAMES.includes(_)?l=IM(_):l=yM(_),n.attribute_permissions.push(l)}}),c||n.attribute_permissions.push(u),n.describe=wM(n),n}else return e.describe=wM(e),e}a(H8,"getTableAttrPerms");function wM(e){return LM.filter(t=>e[t]).length>0}a(wM,"getSchemaTableDescribePerm");function MM(e){return UM.filter(t=>e[t]).length>0}a(MM,"getAttributeDescribePerm");function x8(e,t){UM.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(x8,"checkForHashPerms")});var BM={};je(BM,{Resources:()=>jd,keyArrayToString:()=>pa,resetResources:()=>q8,resources:()=>Si});function q8(){return Si=new jd}function pa(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var jd,Si,Uu=ge(()=>{Di();jd=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;set(t,r,s,n){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,type:s,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!n)throw new Error(`Conflicting paths for ${t}`);super.set(t,i);for(let[c,u]of this){let _=2;for(;(_=c.indexOf("/",_))>-1;){let l=this.get(c.slice(0,_));l&&(l.hasSubPaths=!0),_+=2}}}getMatch(t,r){let s=2,n;for(;(s=t.indexOf("/",s))>-1;){let c=t.slice(0,s),u=this.get(c);if(u){if(u.relativeURL=t.slice(s),!u.hasSubPaths)return u;n=u}s+=2}if(n)return n;let i=t.indexOf("?"),o=i>-1?t.slice(0,i):t;return n=this.get(o),n?n.relativeURL=i>-1?t.slice(i):"":n||(n=this.get(""),n&&(t[0]!=="/"&&(t="/"+t),n.relativeURL=t)),n}getResource(t,r){let s=this.getMatch(t);if(s)return t=s.relativeURL,s.Resource.getResource(this.pathToId(t,s.Resource),r)}call(t,r,s){return We(r,async()=>{let n=this.getMatch(t);if(n)return t=n.relativeURL,s(n.Resource,n.path,t)})}setRepresentation(t,r,s){}};a(q8,"resetResources");a(pa,"keyArrayToString")});var ao,UT=ge(()=>{ao=class extends Map{static{a(this,"Headers")}set(t,r){return typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r),super.set(t.toLowerCase(),[t,r])}get(t){return typeof t!="string"&&(t=""+t),super.get(t.toLowerCase())?.[1]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase();if(!super.has(s))return super.set(s,[t,r])}append(t,r,s){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase(),i=super.get(n);if(i){let o=i[1];s?r=(typeof o=="string"?o:o.join(", "))+", "+r:typeof o=="string"?r=[o,r]:o.push(r)}return super.set(n,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}}});var Mu={};je(Mu,{authentication:()=>$M,bypassAuth:()=>K8,login:()=>Q8,logout:()=>z8,start:()=>W8});function K8(){VM=!0}async function $M(e,t){let r=e.headers.asObject,s=r.authorization,n=r.cookie,i=r.origin,o=[];try{if(i){let E=e.isOperationsServer?V8?k8:[]:G8?F8:[];if(E.includes(i)||E.includes("*")){if(e.method==="OPTIONS"){let h=new ao([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return Zd&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),Zd&&o.push("Access-Control-Allow-Credentials","true")}}let u,_;if(Zd){let E=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=n?.indexOf(E);if(h>=0){let p=n.indexOf(";",h),S=n.indexOf("=",h);u=n.slice(S+1,p===-1?n.length:p),_=await xM.get(u)}e.session=_||(_={})}e.user=null;let l=a((E,h,p)=>{let S=new tf.AuthAuditLog(E,h,Gt.AUTH_AUDIT_TYPES.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);S.auth_strategy=p,u&&(S.session_id=u),r.referer&&(S.referer=r.referer),r.origin&&(S.origin=r.origin),h===Gt.AUTH_AUDIT_STATUS.SUCCESS?HM.notify(S):HM.error(S)},"authAuditLog"),d;if(s){if(d=co.get(s),!d){let[E,h]=s.split(" "),p,S;try{switch(E){case"Basic":[p,S]=atob(h).split(":"),d=p||S?await Ot.getUser(p,S,e):null;break;case"Bearer":try{d=await(0,ef.validateOperationToken)(h)}catch(R){if(R.message==="invalid token")try{return await(0,ef.validateRefreshToken)(h),c({status:-1})}catch{throw R}}break}}catch(R){return Y8&&(co.get(h)||(co.set(h,h),l(p,Gt.AUTH_AUDIT_STATUS.FAILURE,E))),c({status:401,body:Ti({error:R.message},e)})}co.set(s,d),$8&&l(d.username,Gt.AUTH_AUDIT_STATUS.SUCCESS,E)}e.user=d}else _?.user?e.user=await Ot.getUser(_.user,null,e):(VM&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,FM.getSuperUser)());Zd&&(e.session.update=function(E){if(!u){u=(0,GM.v4)();let p=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${u}; Path=/; Expires=Tue, 01 Oct 8307 19:33:20 GMT; HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",p):f?.headers?.set&&f.headers.set("Set-Cookie",p)}return e.protocol==="https"&&(o?(i&&o.push("Access-Control-Expose-Headers","X-Hdb-Session"),o.push("X-Hdb-Session","Secure")):f?.headers?.set&&(i&&f.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),f.headers.set("X-Hdb-Session","Secure"))),E.id=u,xM.put(E)},e.login=async function(E,h){e.user=await Ot.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")&&Si.loginPath?(f.status=302,f.headers.set("Location",Si.loginPath(e))):f.headers.set("WWW-Authenticate","Basic")),c(f))}catch(u){throw c(u)}function c(u){let _=o.length;if(_>0){let l=u.headers;l||(u.headers=l=new ao);for(let d=0;d<_;){let f=o[d++];l.set(f,o[d++])}}return o=null,u}a(c,"applyResponseHeaders")}function W8({server:e,port:t}){e.request($M,{port:t||"all"}),qM||(qM=!0,setInterval(()=>{co=new Map},hs.get(Gt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),kM.user.addListener(()=>{co=new Map}))}async function Q8(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 z8(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var FM,ef,GM,hs,Gt,tf,kM,HM,F8,G8,k8,V8,xM,Zd,VM,$8,Y8,co,qM,rf=ge(()=>{FM=M(cs());ss();Uu();ef=M(fu());pe();GM=require("uuid"),hs=M(j()),Gt=M(I()),tf=M(G()),kM=M(vc());UT();Sa();HM=(0,tf.loggerWithTag)("auth-event");hs.initSync();F8=hs.get(Gt.CONFIG_PARAMS.HTTP_CORSACCESSLIST),G8=hs.get(Gt.CONFIG_PARAMS.HTTP_CORS),k8=hs.get(Gt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),V8=hs.get(Gt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),xM=ut({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),Zd=hs.get(Gt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,VM=hs.get(Gt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,$8=hs.get(Gt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,Y8=hs.get(Gt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,co=new Map;Ot.onInvalidatedUser(()=>{co=new Map});a(K8,"bypassAuth");a($M,"authentication");a(W8,"start");a(Q8,"login");a(z8,"logout")});var XM=T((Kfe,JM)=>{"use strict";var Oe=require("joi"),YM=require("fs-extra"),KM=require("path"),Ln=ze(),WM=j(),QM=I(),zM=G(),{hdb_errors:J8}=Z(),{HDB_ERROR_MSGS:jt}=J8,Dn=/^[a-zA-Z0-9-_]+$/;JM.exports={getDropCustomFunctionValidator:j8,setCustomFunctionValidator:Z8,addComponentValidator:s6,dropCustomFunctionProjectValidator:n6,packageComponentValidator:i6,deployComponentValidator:o6,setComponentFileValidator:e6,getComponentFileValidator:r6,dropComponentFileValidator:t6};function sf(e,t,r){try{let s=WM.get(QM.CONFIG_PARAMS.COMPONENTSROOT),n=KM.join(s,t);return YM.existsSync(n)?e?t:r.message(jt.PROJECT_EXISTS):e?r.message(jt.NO_PROJECT):t}catch(s){return zM.error(s),r.message(jt.VALIDATION_ERR)}}a(sf,"checkProjectExists");function Pu(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(Pu,"checkFilePath");function X8(e,t,r,s){try{let n=WM.get(QM.CONFIG_PARAMS.COMPONENTSROOT),i=KM.join(n,e,t,r+".js");return YM.existsSync(i)?r:s.message(jt.NO_FILE)}catch(n){return zM.error(n),s.message(jt.VALIDATION_ERR)}}a(X8,"checkFileExists");function j8(e){let t=Oe.object({project:Oe.string().pattern(Dn).custom(sf.bind(null,!0)).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),type:Oe.string().valid("helpers","routes").required(),file:Oe.string().pattern(Dn).custom(X8.bind(null,e.project,e.type)).custom(Pu).required().messages({"string.pattern.base":jt.BAD_FILE_NAME})});return Ln.validateBySchema(e,t)}a(j8,"getDropCustomFunctionValidator");function Z8(e){let t=Oe.object({project:Oe.string().pattern(Dn).custom(sf.bind(null,!0)).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),type:Oe.string().valid("helpers","routes").required(),file:Oe.string().custom(Pu).required(),function_content:Oe.string().required()});return Ln.validateBySchema(e,t)}a(Z8,"setCustomFunctionValidator");function e6(e){let t=Oe.object({project:Oe.string().pattern(Dn).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),file:Oe.string().custom(Pu).required(),payload:Oe.string().allow("").optional(),encoding:Oe.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Ln.validateBySchema(e,t)}a(e6,"setComponentFileValidator");function t6(e){let t=Oe.object({project:Oe.string().pattern(Dn).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),file:Oe.string().custom(Pu).optional()});return Ln.validateBySchema(e,t)}a(t6,"dropComponentFileValidator");function r6(e){let t=Oe.object({project:Oe.string().required(),file:Oe.string().custom(Pu).required(),encoding:Oe.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Ln.validateBySchema(e,t)}a(r6,"getComponentFileValidator");function s6(e){let t=Oe.object({project:Oe.string().pattern(Dn).custom(sf.bind(null,!1)).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME})});return Ln.validateBySchema(e,t)}a(s6,"addComponentValidator");function n6(e){let t=Oe.object({project:Oe.string().pattern(Dn).custom(sf.bind(null,!0)).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME})});return Ln.validateBySchema(e,t)}a(n6,"dropCustomFunctionProjectValidator");function i6(e){let t=Oe.object({project:Oe.string().pattern(Dn).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),skip_node_modules:Oe.boolean()});return Ln.validateBySchema(e,t)}a(i6,"packageComponentValidator");function o6(e){let t=Oe.object({project:Oe.string().pattern(Dn).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),payload:Oe.string().optional().messages({"string.pattern.base":jt.BAD_PACKAGE}),package:Oe.string().optional()});return Ln.validateBySchema(e,t)}a(o6,"deployComponentValidator")});var cf=T((Qfe,nP)=>{"use strict";var nf=require("joi"),of=require("path"),jM=require("fs-extra"),{exec:a6}=require("child_process"),c6=require("util"),ZM=c6.promisify(a6),vu=I(),{handleHDBError:Ta,hdb_errors:u6}=Z(),{HTTP_STATUS_CODES:ga}=u6,Bu=j(),l6=ze(),Ra=G();Bu.initSync();var MT=Bu.get(vu.CONFIG_PARAMS.COMPONENTSROOT),eP="npm install --omit=dev --json",_6=`${eP} --dry-run`;nP.exports={installModules:h6,auditModules:m6,installAllRootModules:d6,uninstallRootModule:f6,linkHarperdb:E6};async function d6(e=!1){await af(),await Hu(e?"npm install --ignore-scripts":"npm install",Bu.get(vu.CONFIG_PARAMS.ROOTPATH))}a(d6,"installAllRootModules");async function f6(e){await Hu(`npm uninstall ${e}`,Bu.get(vu.CONFIG_PARAMS.ROOTPATH))}a(f6,"uninstallRootModule");async function E6(){await af(),await Hu(`npm link ${vu.PACKAGE_ROOT}`,Bu.get(vu.CONFIG_PARAMS.ROOTPATH))}a(E6,"linkHarperdb");async function Hu(e,t=void 0){let r,s;try{({stdout:r,stderr:s}=await ZM(e,{cwd:t}))}catch(n){throw new Error(n.stderr.replace(`
|
|
12
|
-
`,""))}return s&&!s.includes("Debugger listening")&&
|
|
13
|
-
`,"")}a(
|
|
10
|
+
`,"")}a(dD,"runCommand");async function t3(){try{await M4.access(nS)}catch{return!1}let e=await dD(`${nS} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return P4.eq(t,Z4)}a(t3,"checkNATSServerInstalled");async function cS(e,t,r,s=!0,n="127.0.0.1"){if(!t&&!r){let o=await cD.getClusterUser();if(so(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}Fr.trace("create nats connection called");let i=await Y4({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,timeout:2e5,tls:{keyFile:Gt.get(Ue.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Gt.get(Ue.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Gt.get(Ue.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),Fr.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&Fr.error("Error with Nats client connection, connection closed",o),fD()}),i}a(cS,"createConnection");function fD(){ns=void 0,eo=void 0,to=void 0,ro=void 0}a(fD,"clearClientCache");async function r3(){ns&&(await ns.drain(),ns=void 0,eo=void 0,to=void 0,ro=void 0)}a(r3,"closeConnection");var ns,ro;async function ud(){return ro||(ro=cS(Gt.get(Ue.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),ns=await ro),ns||ro}a(ud,"getConnection");async function ou(){if(eo)return eo;so(ns)&&await ud();let{domain:e}=au(Ue.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(so(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return eo=await ns.jetstreamManager({domain:e,timeout:6e4}),eo}a(ou,"getJetStreamManager");async function ED(){if(to)return to;so(ns)&&await ud();let{domain:e}=au(Ue.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(so(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return to=ns.jetstream({domain:e,timeout:6e4}),to}a(ED,"getJetStream");async function ur(){let e=ns||await ud(),t=eo||await ou(),r=to||await ED();return{connection:e,jsm:t,js:r}}a(ur,"getNATSReferences");async function s3(e){let t=Gt.get(Ue.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await cD.getClusterUser(),n=await cS(t,r,s),i=aS(),o=n.subscribe(i),c=[],u,_=(async()=>{for await(let l of o){let d=_D.decode(l.data);d.response_time=Date.now()-u,c.push(d)}})();return u=Date.now(),await n.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await n.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await n.flush(),await iS.async_set_timeout(e),await o.drain(),await n.close(),await _,c}a(s3,"getServerList");async function uS(e,t){let{jsm:r}=await ur(),s=Gt.get(Ue.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=Gt.get(Ue.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=Gt.get(Ue.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:uD.File,retention:lD.Limits,subjects:t,discard:K4.Old,max_msgs:n,max_bytes:i,max_age:s})}a(uS,"createLocalStream");async function hD(){let{jsm:e}=await ur(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(hD,"listStreams");async function n3(e){let{jsm:t}=await ur();await t.streams.delete(e)}a(n3,"deleteLocalStream");async function i3(e){let{connection:t}=await ur(),r=[],s=aS(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(_D.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:s}),await t.flush(),await n.drain(),await i,r}a(i3,"listRemoteStreams");async function o3(e,t=void 0,r=void 0){let{jsm:s,js:n}=await ur(),i=iD(),o={durable_name:i,ack_policy:ad.Explicit};t&&(o.deliver_policy=cd.StartTime,o.opt_start_time=new Date(t).toISOString()),await s.consumers.add(e,o);let c=await n.consumers.get(e,i),u=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let _=[];for await(let l of u){let d=oS(l.data),f={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};if(l.headers&&(f.origin=l.headers.get(Oe.MSG_HEADERS.ORIGIN)),_.push(f),l.ack(),l.info.pending===0)break}return await c.delete(),_}a(o3,"viewStream");async function*a3(e,t=void 0,r=void 0){let{jsm:s,js:n}=await ur(),i=iD(),o={durable_name:i,ack_policy:ad.Explicit};t&&(o.deliver_policy=cd.StartTime,o.opt_start_time=new Date(t).toISOString()),await s.consumers.add(e,o);let c=await n.consumers.get(e,i),u=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let _ of u){let l=oS(_.data);l[0]||(l=[l]);for(let d of l){let f={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};_.headers&&(f.origin=_.headers.get(Oe.MSG_HEADERS.ORIGIN)),yield f}if(_.ack(),_.info.pending===0)break}await c.delete()}a(a3,"viewStreamIterator");async function c3(e,t,r,s){Fr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s.operation),r=mD(s,r);let{js:n}=await ur(),i=await cu(),o=`${e}.${i}`,c=s instanceof Uint8Array?s:aD.encode(s);try{Fr.trace(`publishToStream publishing to subject: ${o}`),X4(c.length,"bytes-sent",e,s.operation,"replication"),await n.publish(o,c,{headers:r})}catch(u){if(u.code&&u.code.toString()==="503")return gD(async()=>{try{await n.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){Fr.trace(`publishToStream creating stream: ${t}`);let l=o.split(".");l[2]="*",await uS(t,[o]),await n.publish(o,c,{headers:r})}else throw u}});throw u}}a(c3,"publishToStream");function mD(e,t){t===void 0&&(t=Q4());let r=Gt.get(Ue.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Oe.MSG_HEADERS.ORIGIN)&&r&&t.append(Oe.MSG_HEADERS.ORIGIN,r),t}a(mD,"addNatsMsgHeader");function au(e){e=e.toLowerCase();let t=iu.join(Gt.get(Ue.CONFIG_PARAMS.ROOTPATH),j4);if(e===Ue.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return so(sS)&&(sS={port:su.getConfigFromFile(Ue.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:su.getConfigFromFile(Ue.CONFIG_PARAMS.CLUSTERING_NODENAME)+Oe.SERVER_SUFFIX.HUB,config_file:Oe.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:iu.join(t,Oe.PID_FILES.HUB),hdb_nats_path:t}),sS;if(e===Ue.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return so(rS)&&(rS={port:su.getConfigFromFile(Ue.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:su.getConfigFromFile(Ue.CONFIG_PARAMS.CLUSTERING_NODENAME)+Oe.SERVER_SUFFIX.LEAF,config_file:Oe.NATS_CONFIG_FILES.LEAF_SERVER,domain:su.getConfigFromFile(Ue.CONFIG_PARAMS.CLUSTERING_NODENAME)+Oe.SERVER_SUFFIX.LEAF,pid_file_path:iu.join(t,Oe.PID_FILES.LEAF),hdb_nats_path:t}),rS;Fr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(au,"getServerConfig");async function u3(e){let{jsm:t}=await ur(),r=await cu();try{await t.streams.add({name:e.stream_name,storage:uD.File,retention:lD.Limits,max_age:V4,max_bytes:$4,subjects:[`${Oe.SUBJECT_PREFIXES.TXN}.${e.stream_name}.${r}`]})}catch(s){if(s.code!=="400")throw s}try{await t.consumers.info(e.stream_name,e.durable_name)}catch(s){if(s.code.toString()==="404")await t.consumers.add(e.stream_name,{ack_policy:ad.Explicit,durable_name:e.durable_name,deliver_policy:cd.All,max_ack_pending:1e4});else throw s}}a(u3,"createWorkQueueStream");async function l3(){let{jsm:e}=await ur();(await e.consumers.info(Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name,Oe.WORK_QUEUE_CONSUMER_NAMES.durable_name)).config.deliver_subject&&(Fr.info("Removing old nats push consumer from ingest stream"),await e.consumers.delete(Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name,Oe.WORK_QUEUE_CONSUMER_NAMES.durable_name),Fr.info("Adding pull consumer to ingest stream"),await e.consumers.add(Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name,{ack_policy:ad.Explicit,durable_name:Oe.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:cd.All,max_ack_pending:1e4}))}a(l3,"updateIngestStreamConsumer");async function pD(e,t,r){let{jsm:s}=await ur(),n=await s.streams.info(t),i=SD(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:u}=r,_=od.createNatsTableStreamName(c,u),l=i===e,d,f,E=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let p=0,S=n.config.sources.length;p<S;p++)if(d=n.config.sources[p],f=p,l&&d.name===_||!l&&d.name===_&&d.external&&d.external.api===`$JS.${e}.API`){E=!0;break}if(E===!0){if(d.opt_start_time===o)return;let p=`txn.${c}.${u}.${e}`;await s.streams.purge(t,{filter:p}),n.config.sources.splice(f,1),await s.streams.update(t,n.config)}let h={name:_,opt_start_time:o,filter_subject:`${Oe.SUBJECT_PREFIXES.TXN}.>`};l||(h.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(h),await s.streams.update(t,n.config)}a(pD,"addSourceToWorkStream");function SD(e){return e.split(".")[1]}a(SD,"extractServerName");async function TD(e,t,r){let{jsm:s}=await ur(),{schema:n,table:i}=r,o=`txn.${n}.${i}.${e}`;await s.streams.purge(t,{filter:o});let c=od.createNatsTableStreamName(n,i),u=await s.streams.info(t);if(!Array.isArray(u.config.sources)||u.config.sources.length===0)return;let _=u.config.sources.length,l;for(;_--;)if(l=u.config.sources[_],l.name===c&&l.external.api===`$JS.${e}.API`){u.config.sources.splice(_,1);break}await s.streams.update(t,u.config)}a(TD,"removeSourceFromWorkStream");async function _3(e,t,r=6e4,s=aS()){if(!iS.isObject(t))throw new Error("data param must be an object");let n=aD.encode(t),{connection:i}=await ur(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let c=await i.request(e,n,o);return oS(c.data)}a(_3,"request");function lS(e){return new Promise(async(t,r)=>{let s=x4(nS,["--signal",`reload=${e}`],{cwd:__dirname}),n,i;s.on("error",o=>{r(o)}),s.stdout.on("data",o=>{i+=o.toString()}),s.stderr.on("data",o=>{n+=o.toString()}),s.stderr.on("close",o=>{n&&r(n),t(i)})})}a(lS,"reloadNATS");async function d3(){let{pid_file_path:e}=au(Ue.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await lS(e)}a(d3,"reloadNATSHub");async function f3(){let{pid_file_path:e}=au(Ue.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await lS(e)}a(f3,"reloadNATSLeaf");function E3(e,t,r){let s;switch(e.code){case nD.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case nD.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(E3,"requestErrorHandler");async function h3(e,t){let r=t+Oe.SERVER_SUFFIX.LEAF;await gD(async()=>{e.subscribe===!0?await pD(r,Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await TD(r,Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(h3,"updateWorkStream");function gD(e){return q4.writeTransaction(Ue.SYSTEM_SCHEMA_NAME,Ue.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(gD,"exclusiveLock");async function RD(e,t){let r=od.createNatsTableStreamName(e,t),s=await cu(),n=T3(e,t,s);await uS(r,[n])}a(RD,"createLocalTableStream");async function m3(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await RD(s,n)}}a(m3,"createTableStreams");async function AD(e,t,r=!1){if(Gt.get(Ue.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let s=od.createNatsTableStreamName(e,t),{jsm:n}=await ur();r?await n.streams.purge(Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name):await n.streams.purge(s)}catch(s){if(s.message==="stream not found")Fr.warn(s);else throw s}}a(AD,"purgeTableStream");async function p3(e,t){if(Gt.get(Ue.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await AD(e,t[r])}a(p3,"purgeSchemaTableStreams");async function S3(e){return(await ou()).streams.info(e)}a(S3,"getStreamInfo");function T3(e,t,r){return`${Oe.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(T3,"createSubjectName");async function cu(){if(nu)return nu;if(nu=(await ou())?.nc?.info?.server_name,nu===void 0)throw new Error("Unable to get jetstream manager server name");return nu}a(cu,"getJsmServerName");async function g3(){let e=await ou(),t=await cu(),r=await hD();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=R3(s),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(n.name===Oe.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let _=`${Oe.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;Fr.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}else if(n.name===Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name){let _=`${Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;Fr.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}else{let _=i.split(".");_[_.length-1]=t;let l=_.join(".");Fr.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}await e.streams.update(n.name,n)}}}a(g3,"updateLocalStreams");function R3(e){let{config:t}=e,r=!1;if(t.name===Oe.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let s=Gt.get(Ue.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=Gt.get(Ue.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=Gt.get(Ue.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,s!==t.max_age&&(t.max_age=s,r=!0),n!==t.max_bytes&&(t.max_bytes=n,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(R3,"updateStreamLimits")});var uu=T((Ide,ID)=>{"use strict";var na=f_(),ia=xC(),A3=G(),O3=require("uuid").v4,yde=require("clone"),_d=An(),oa=D(),b3=require("util"),ai=ws(),{handleHDBError:lr,hdb_errors:N3}=Z(),{HDB_ERROR_MSGS:ld,HTTP_STATUS_CODES:_r}=N3,{SchemaEventMsg:dd}=Ls(),bD=nt(),{getDatabases:y3}=(ge(),ee(xe)),{transformReq:aa}=z();ID.exports={createSchema:I3,createSchemaStructure:ND,createTable:w3,createTableStructure:yD,createAttribute:M3,dropSchema:C3,dropTable:D3,dropAttribute:L3,getBackup:P3};async function I3(e){let t=await ND(e);return _d.signalSchemaChange(new dd(process.pid,e.operation,e.schema)),t}a(I3,"createSchema");async function ND(e){let t=na.schema_object(e);if(t)throw lr(t,t.message,_r.BAD_REQUEST,void 0,void 0,!0);if(aa(e),!await ia.checkSchemaExists(e.schema))throw lr(new Error,ld.SCHEMA_EXISTS_ERR(e.schema),_r.BAD_REQUEST,oa.LOG_LEVELS.ERROR,ld.SCHEMA_EXISTS_ERR(e.schema),!0);return await ai.createSchema(e),`database '${e.schema}' successfully created`}a(ND,"createSchemaStructure");async function w3(e){return aa(e),e.hash_attribute=e.primary_key??e.hash_attribute,await yD(e)}a(w3,"createTable");async function yD(e){let t=na.create_table_object(e);if(t)throw lr(t,t.message,_r.BAD_REQUEST,void 0,void 0,!0);if(na.validateTableResidence(e.residence),!await ia.checkSchemaTableExists(e.schema,e.table))throw lr(new Error,ld.TABLE_EXISTS_ERR(e.schema,e.table),_r.BAD_REQUEST,oa.LOG_LEVELS.ERROR,ld.TABLE_EXISTS_ERR(e.schema,e.table),!0);let s={name:e.table,schema:e.schema,id:O3(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)s.residence=e.residence,await ai.createTable(s,e);else throw lr(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",_r.BAD_REQUEST);else await ai.createTable(s,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(n){throw n}}a(yD,"createTableStructure");async function C3(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=na.schema_object(e),s=t??r;if(s)throw lr(s,s.message,_r.BAD_REQUEST,void 0,void 0,!0);aa(e);let n=await ia.checkSchemaExists(e.schema);if(n)throw lr(new Error,n,_r.NOT_FOUND,oa.LOG_LEVELS.ERROR,n,!0);let i=await ia.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await ai.dropSchema(e),_d.signalSchemaChange(new dd(process.pid,e.operation,e.schema)),await bD.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(C3,"dropSchema");async function D3(e){let t=na.table_object(e);if(t)throw lr(t,t.message,_r.BAD_REQUEST,void 0,void 0,!0);aa(e);let r=await ia.checkSchemaTableExists(e.schema,e.table);if(r)throw lr(new Error,r,_r.NOT_FOUND,oa.LOG_LEVELS.ERROR,r,!0);return await ai.dropTable(e),await bD.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(D3,"dropTable");async function L3(e){let t=na.attribute_object(e);if(t)throw lr(t,t.message,_r.BAD_REQUEST,void 0,void 0,!0);aa(e);let r=await ia.checkSchemaTableExists(e.schema,e.table);if(r)throw lr(new Error,r,_r.NOT_FOUND,oa.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw lr(new Error,"You cannot drop a hash attribute",_r.BAD_REQUEST,void 0,void 0,!0);if(oa.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw lr(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,_r.BAD_REQUEST,void 0,void 0,!0);try{return await ai.dropAttribute(e),U3(e),_d.signalSchemaChange(new dd(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw A3.error(`Got an error deleting attribute ${b3.inspect(e)}.`),s}}a(L3,"dropAttribute");function U3(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(U3,"dropAttributeFromGlobal");async function M3(e){aa(e);let t=y3()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw lr(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,_r.BAD_REQUEST,void 0,void 0,!0);return await ai.createAttribute(e),_d.signalSchemaChange(new dd(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(M3,"createAttribute");function P3(e){return ai.getBackup(e)}a(P3,"getBackup")});var CD=T((Cde,wD)=>{"use strict";var{OPERATIONS_ENUM:v3}=D(),_S=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,s=void 0,n=void 0){this.operation=v3.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};wD.exports=_S});var dS=T((Ude,PD)=>{"use strict";var B3=ws(),Lde=CD(),fd=z(),Ed=D(),H3=j(),{handleHDBError:DD,hdb_errors:x3}=Z(),{HDB_ERROR_MSGS:LD,HTTP_STATUS_CODES:UD}=x3,q3=Object.values(Ed.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),MD="To use this operation audit log must be enabled in harperdb-config.yaml";PD.exports=F3;async function F3(e){if(fd.isEmpty(e.schema))throw new Error(LD.SCHEMA_REQUIRED_ERR);if(fd.isEmpty(e.table))throw new Error(LD.TABLE_REQUIRED_ERR);if(!H3.get(Ed.CONFIG_PARAMS.LOGGING_AUDITLOG))throw DD(new Error,MD,UD.BAD_REQUEST,Ed.LOG_LEVELS.ERROR,MD,!0);let t=fd.checkSchemaTableExist(e.schema,e.table);if(t)throw DD(new Error,t,UD.NOT_FOUND,Ed.LOG_LEVELS.ERROR,t,!0);if(!fd.isEmpty(e.search_type)&&q3.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await B3.readAuditLog(e)}a(F3,"readAuditLog")});var BD=T((Pde,vD)=>{"use strict";var{OPERATIONS_ENUM:G3}=D(),fS=class{static{a(this,"GetBackupObject")}constructor(t,r,s=void 0,n=void 0){this.operation=G3.GET_BACKUP,this.schema=t,this.table=r}};vD.exports=fS});var qD=T((xde,xD)=>{"use strict";var k3=ws(),Bde=BD(),ES=z(),V3=D(),Hde=j(),{handleHDBError:$3,hdb_errors:Y3}=Z(),{HDB_ERROR_MSGS:HD,HTTP_STATUS_CODES:K3}=Y3;xD.exports=W3;async function W3(e){if(ES.isEmpty(e.schema))throw new Error(HD.SCHEMA_REQUIRED_ERR);if(ES.isEmpty(e.table))throw new Error(HD.TABLE_REQUIRED_ERR);let t=ES.checkSchemaTableExist(e.schema,e.table);if(t)throw $3(new Error,t,K3.NOT_FOUND,V3.LOG_LEVELS.ERROR,t,!0);return await k3.getBackup(read_audit_log_object)}a(W3,"getBackup")});var YD=T((Fde,$D)=>{var ci=require("validate.js"),GD=Je(),ca=D(),{handleHDBError:Q3,hdb_errors:z3}=Z(),{HDB_ERROR_MSGS:Et,HTTP_STATUS_CODES:J3}=z3,hS=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),X3={STRUCTURE_USER:"structure_user"},FD=Object.values(ca.ROLE_TYPES_ENUM),j3="attribute_permissions",Z3="attribute_name",{PERMS_CRUD_ENUM:ua}=ca,eX=[j3,...Object.values(ua)],kD=[ua.READ,ua.INSERT,ua.UPDATE],tX=[Z3,...kD];function rX(e){let t=hS();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,VD(e,t)}a(rX,"addRoleValidation");function sX(e){let t=hS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,VD(e,t)}a(sX,"alterRoleValidation");function nX(e){let t=hS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,GD.validateObject(e,t)}a(nX,"dropRoleValidation");var iX=["operation","role","id","permission","hdb_user","hdb_auth_header"];function VD(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)iX.includes(s[o])||n.push(s[o]);n.length>0&&Tt(Et.INVALID_ROLE_JSON_KEYS(n),r);let i=GD.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{Tt(o,r)}),e.permission){let o=oX(e);o&&Tt(o,r),FD.forEach(c=>{e.permission[c]&&!ci.isBoolean(e.permission[c])&&Tt(Et.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(FD.indexOf(o)<0){if(o===X3.STRUCTURE_USER){let u=e.permission[o];if(typeof u=="boolean")continue;if(Array.isArray(u)){for(let _=0,l=u.length;_<l;_++){let d=u[_];global.hdb_schema[d]||Tt(Et.SCHEMA_NOT_FOUND(d),r)}continue}Tt(Et.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){Tt(Et.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let u in c.tables){let _=c.tables[u];if(!u||!global.hdb_schema[o][u]){Tt(Et.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(_).forEach(l=>{eX.includes(l)||Tt(Et.INVALID_PERM_KEY(l),r,o,u)}),Object.values(ua).forEach(l=>{ci.isDefined(_[l])?ci.isBoolean(_[l])||Tt(Et.TABLE_PERM_NOT_BOOLEAN(l),r,o,u):Tt(Et.TABLE_PERM_MISSING(l),r,o,u)}),ci.isDefined(_.attribute_permissions)){if(!ci.isArray(_.attribute_permissions)){Tt(Et.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{Tt(Et.ATTR_PERMS_ARRAY_MISSING,r,o,u);continue}if(_.attribute_permissions){let l=global.hdb_schema[o][u].attributes.map(({attribute:f})=>f),d={read:!1,insert:!1,update:!1};for(let f in _.attribute_permissions){let E=_.attribute_permissions[f];if(Object.keys(E).forEach(p=>{!tX.includes(p)&&p!==ua.DELETE&&Tt(Et.INVALID_ATTR_PERM_KEY(p),r,o,u)}),!ci.isDefined(E.attribute_name)){Tt(Et.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=E.attribute_name;if(!l.includes(h)){Tt(Et.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}kD.forEach(p=>{ci.isDefined(E[p])?ci.isBoolean(E[p])||Tt(Et.ATTR_PERM_NOT_BOOLEAN(p,h),r,o,u):Tt(Et.ATTR_PERM_MISSING(p,h),r,o,u)}),!d.read&&E.read===!0&&(d.read=!0),!d.insert&&E.insert===!0&&(d.insert=!0),!d.update&&E.update===!0&&(d.update=!0)}if(_.read===!1&&d.read===!0||_.insert===!1&&d.insert===!0||_.update===!1&&d.update===!0){let f=`${o}.${u}`;Tt(Et.MISMATCHED_TABLE_ATTR_PERMS(f),r,o,u)}}}}return aX(r)}a(VD,"customValidate");$D.exports={addRoleValidation:rX,alterRoleValidation:sX,dropRoleValidation:nX};function oX(e){let{operation:t,permission:r}=e;if(t===ca.OPERATIONS_ENUM.ADD_ROLE||t===ca.OPERATIONS_ENUM.ALTER_ROLE){let s=r.super_user===!0,n=r.cluster_user===!0;if(Object.keys(r).length>1&&(s||n)){if(n&&s)return Et.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?ca.ROLE_TYPES_ENUM.SUPER_USER:ca.ROLE_TYPES_ENUM.CLUSTER_USER;return Et.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(oX,"validateNoSUPerms");function aX(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:Et.ROLE_PERMS_ERROR,...e};return Q3(new Error,s,J3.BAD_REQUEST)}else return null}a(aX,"generateRolePermResponse");function Tt(e,t,r,s){if(!r)t.main_permissions.push(e);else{let n=s?r+"_"+s:r;t.schema_permissions[n]?t.schema_permissions[n].push(e):t.schema_permissions[n]=[e]}}a(Tt,"addPermError")});var RS=T((kde,zD)=>{"use strict";var KD=Lr(),WD=es(),cX=ti(),pS=YD(),SS=An(),uX=require("uuid").v4,lX=require("util"),hd=D(),_X=z(),TS=WD.searchByValue,dX=WD.searchByHash,fX=lX.promisify(cX.delete),EX=Xs(),hX=ea(),{hdb_errors:mX,handleHDBError:no}=Z(),{HDB_ERROR_MSGS:QD,HTTP_STATUS_CODES:lu}=mX,{UserEventMsg:gS}=Ls();zD.exports={addRole:pX,alterRole:SX,dropRole:TX,listRoles:gX};function mS(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(mS,"scrubRoleDetails");async function pX(e){let t=pS.addRoleValidation(e);if(t)throw t;e=mS(e);let r={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},s;try{s=Array.from(await TS(r)||[])}catch(i){throw no(i)}if(s&&s.length>0)throw no(new Error,QD.ROLE_ALREADY_EXISTS(e.role),lu.CONFLICT,void 0,void 0,!0);e.id||(e.id=uX());let n={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await KD.insert(n),SS.signalUserChange(new gS(process.pid)),e=mS(e),e}a(pX,"addRole");async function SX(e){let t=pS.alterRoleValidation(e);if(t)throw t;e=mS(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},s;try{s=await KD.update(r)}catch(n){throw no(n)}if(s&&s?.message==="updated 0 of 1 records")throw no(new Error,"Invalid role id",lu.BAD_REQUEST,void 0,void 0,!0);return await SS.signalUserChange(new gS(process.pid)),e}a(SX,"alterRole");async function TX(e){let t=pS.dropRoleValidation(e);if(t)throw no(new Error,t,lu.BAD_REQUEST,void 0,void 0,!0);let r=new hX(hd.SYSTEM_SCHEMA_NAME,hd.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await dX(r));if(s.length===0)throw no(new Error,QD.ROLE_NOT_FOUND,lu.NOT_FOUND,void 0,void 0,!0);let n=new EX(hd.SYSTEM_SCHEMA_NAME,hd.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await TS(n)),o=!1;if(_X.isEmptyOrZeroLength(i)===!1){for(let u=0;u<i.length;u++)if(i[u].active===!0){o=!0;break}}if(o===!0)throw no(new Error,`Cannot drop role ${s[0].role} as it has active user(s) tied to this role`,lu.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await fX(c),SS.signalUserChange(new gS(process.pid)),`${s[0].role} successfully deleted`}a(TX,"dropRole");async function gX(){return TS({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(gX,"listRoles")});var ZD=T(($de,jD)=>{"use strict";var RX=j(),ui=require("joi"),AX=Je(),JD=require("moment"),OX=require("fs-extra"),AS=require("path"),bX=require("lodash"),_u=D(),{LOG_LEVELS:io}=D(),NX="YYYY-MM-DD hh:mm:ss",yX=AS.resolve(__dirname,"../logs");jD.exports=function(e){return AX.validateBySchema(e,IX)};var IX=ui.object({from:ui.custom(XD),until:ui.custom(XD),level:ui.valid(io.NOTIFY,io.FATAL,io.ERROR,io.WARN,io.INFO,io.DEBUG,io.TRACE),order:ui.valid("asc","desc"),limit:ui.number().min(1),start:ui.number().min(0),log_name:ui.custom(wX)});function XD(e,t){if(JD(e,JD.ISO_8601).format(NX)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(XD,"validateDatetime");function wX(e,t){if(bX.invert(_u.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=RX.get(_u.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?_u.LOG_NAMES.HDB:e,i=n===_u.LOG_NAMES.INSTALL?AS.join(yX,_u.LOG_NAMES.INSTALL):AS.join(s,n);return OX.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(wX,"validateReadLogPath")});var bS=T((Kde,tL)=>{"use strict";var md=D(),CX=G(),DX=j(),LX=ZD(),OS=require("path"),eL=require("fs-extra"),{once:UX}=require("events"),{handleHDBError:MX,hdb_errors:PX}=Z(),{PACKAGE_ROOT:vX}=D(),BX=OS.join(vX,"logs"),HX=1e3,xX=200;tL.exports=qX;async function qX(e){let t=LX(e);if(t)throw MX(t,t.message,PX.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=DX.get(md.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?md.LOG_NAMES.HDB:e.log_name,n=s===md.LOG_NAMES.INSTALL?OS.join(BX,md.LOG_NAMES.INSTALL):OS.join(r,s),i=e.level!==void 0,o=i?e.level:void 0,c=e.from!==void 0,u=c?new Date(e.from):void 0,_=e.until!==void 0,l=_?new Date(e.until):void 0,d=e.limit===void 0?HX:e.limit,f=e.order===void 0?void 0:e.order,E=e.start===void 0?0:e.start,h=E+d,p=0;f==="desc"&&!u&&!l&&(p=Math.max(eL.statSync(n).size-(h+5)*xX,0));let S=eL.createReadStream(n,{start:p});S.on("error",q=>{CX.error(q)});let R=0,I=[],w="",B;S.on("data",q=>{let P=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;q=w+q;let Q=0,Y;for(;(Y=P.exec(q))&&!S.destroyed;){B&&(B.message=q.slice(Q,Y.index),K(B));let[J,re,Ie]=Y,se=Ie.split("] ["),ut=se[0],de=se[1];se.splice(0,2),B={timestamp:re,thread:ut,level:de,tags:se,message:""},Q=Y.index+J.length}w=q.slice(Q)}),S.on("end",q=>{S.destroyed||B&&(B.message=w.trim(),K(B))}),S.resume();function K(q){let P,Q,Y;switch(!0){case(i&&c&&_):P=new Date(q.timestamp),Q=new Date(u),Y=new Date(l),q.level===o&&P>=Q&&P<=Y&&R<E?R++:q.level===o&&P>=Q&&P<=Y&&(li(q,f,I),R++,R===h&&S.destroy());break;case(i&&c):P=new Date(q.timestamp),Q=new Date(u),q.level===o&&P>=Q&&R<E?R++:q.level===o&&P>=Q&&(li(q,f,I),R++,R===h&&S.destroy());break;case(i&&_):P=new Date(q.timestamp),Y=new Date(l),q.level===o&&P<=Y&&R<E?R++:q.level===o&&P<=Y&&(li(q,f,I),R++,R===h&&S.destroy());break;case(c&&_):P=new Date(q.timestamp),Q=new Date(u),Y=new Date(l),P>=Q&&P<=Y&&R<E?R++:P>=Q&&P<=Y&&(li(q,f,I),R++,R===h&&S.destroy());break;case i:q.level===o&&R<E?R++:q.level===o&&(li(q,f,I),R++,R===h&&S.destroy());break;case c:P=new Date(q.timestamp),Q=new Date(u),P>=Q&&R<E?R++:P>=Q&&R>=E&&(li(q,f,I),R++,R===h&&S.destroy());break;case _:P=new Date(q.timestamp),Y=new Date(l),P<=Y&&R<E?R++:P<=Y&&R>=E&&(li(q,f,I),R++,R===h&&S.destroy());break;default:R<E?R++:(li(q,f,I),R++,R===h&&S.destroy())}}return a(K,"onLogMessage"),await UX(S,"close"),I}a(qX,"readLog");function li(e,t,r){t==="desc"?FX(e,r):t==="asc"?GX(e,r):r.push(e)}a(li,"pushLineToResult");function FX(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)>r?s=i+1:n=i}t.splice(s,0,e)}a(FX,"insertDescending");function GX(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)<r?s=i+1:n=i}t.splice(s,0,e)}a(GX,"insertAscending")});var pd=T((Xde,iL)=>{"use strict";var NS=require("joi"),{string:du,boolean:rL,date:kX}=NS.types(),VX=Je(),{validateSchemaExists:Qde,validateTableExists:zde,validateSchemaName:Jde}=Ks(),$X=D(),YX=qe(),sL=j();sL.initSync();var KX=du.invalid(sL.get($X.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(YX.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(),nL={operation:du.valid("add_node","update_node","set_node_replication"),node_name:KX,subscriptions:NS.array().items({table:du.optional(),schema:du.optional(),database:du.optional(),subscribe:rL.required(),publish:rL.required().custom(QX),start_time:kX.iso()}).min(1).required()};function WX(e){return VX.validateBySchema(e,NS.object(nL))}a(WX,"addUpdateNodeValidator");function QX(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(QX,"checkForFalsy");iL.exports={addUpdateNodeValidator:WX,validation_schema:nL}});var aL=T((Zde,oL)=>{var zX=Je(),JX={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};oL.exports=function(e){return zX.validateObject(e,JX)}});var Sd=T((efe,cL)=>{"use strict";var XX=D().OPERATIONS_ENUM,yS=class{static{a(this,"UpdateObject")}constructor(t,r,s,n=void 0){this.operation=XX.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};cL.exports=yS});var lL=T((rfe,uL)=>{"use strict";var jX={OPERATION:"operation",REFRESH:"refresh"},IS=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},wS=class{static{a(this,"JWTRSAKeys")}constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};uL.exports={JWTTokens:IS,TOKEN_TYPE_ENUM:jX,JWTRSAKeys:wS}});var hu=T((nfe,EL)=>{"use strict";var Eu=require("jsonwebtoken"),CS=require("fs-extra"),DS=z(),is=D(),{handleHDBError:dr,hdb_errors:ZX}=Z(),{HTTP_STATUS_CODES:fr,AUTHENTICATION_ERROR_MSGS:Er}=ZX,fu=G(),_L=y_(),MS=rs(),ej=Lr().update,tj=Sd(),rj=An(),{UserEventMsg:sj}=Ls(),_i=j();_i.initSync();var LS=require("path"),{JWTTokens:nj,JWTRSAKeys:ij,TOKEN_TYPE_ENUM:Td}=lL(),oj=_i.get(is.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?_i.get(is.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",aj=_i.get(is.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?_i.get(is.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",gd="RS256",US;EL.exports={createTokens:cj,validateOperationToken:lj,refreshOperationToken:uj,validateRefreshToken:fL};async function cj(e){if(DS.isEmpty(e)||typeof e!="object")throw dr(new Error,Er.INVALID_AUTH_OBJECT,fr.BAD_REQUEST,void 0,void 0,!0);if(DS.isEmpty(e.username))throw dr(new Error,Er.USERNAME_REQUIRED,fr.BAD_REQUEST,void 0,void 0,!0);if(DS.isEmpty(e.password))throw dr(new Error,Er.PASSWORD_REQUIRED,fr.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await MS.findAndValidateUser(e.username,e.password),!t)throw dr(new Error,Er.INVALID_CREDENTIALS,fr.UNAUTHORIZED,void 0,void 0,!0)}catch(f){throw fu.error(f),dr(new Error,Er.INVALID_CREDENTIALS,fr.UNAUTHORIZED,void 0,void 0,!0)}let r=await Rd(),s=!1,n=!1;t.role&&t.role.permission&&(s=t.role.permission.super_user===!0,n=t.role.permission.cluster_user===!0);let i={username:e.username,super_user:s,cluster_user:n},o=await dL(i,r.private_key,r.passphrase),c=await Eu.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:aj,algorithm:gd,subject:Td.REFRESH}),u=_L.hash(c),_=new tj(is.SYSTEM_SCHEMA_NAME,is.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),l,d;try{l=await ej(_)}catch(f){fu.error(f),d=f}if(d!==void 0||l.skipped_hashes.length>0)throw dr(new Error,Er.REFRESH_TOKEN_SAVE_FAILED,fr.INTERNAL_SERVER_ERROR);return rj.signalUserChange(new sj(process.pid)),new nj(o,c)}a(cj,"createTokens");async function dL(e,t,r){return await Eu.sign(e,{key:t,passphrase:r},{expiresIn:oj,algorithm:gd,subject:Td.OPERATION})}a(dL,"signOperationToken");async function Rd(){if(US===void 0)try{let e=LS.join(_i.getHdbBasePath(),is.LICENSE_KEY_DIR_NAME,is.JWT_ENUM.JWT_PASSPHRASE_NAME),t=LS.join(_i.getHdbBasePath(),is.LICENSE_KEY_DIR_NAME,is.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=LS.join(_i.getHdbBasePath(),is.LICENSE_KEY_DIR_NAME,is.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await CS.readFile(e)).toString(),n=(await CS.readFile(t)).toString(),i=(await CS.readFile(r)).toString();US=new ij(i,n,s)}catch(e){throw fu.error(e),dr(new Error,Er.NO_ENCRYPTION_KEYS,fr.INTERNAL_SERVER_ERROR)}return US}a(Rd,"getJWTRSAKeys");async function uj(e){if(!e)throw dr(new Error,Er.INVALID_BODY,fr.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw dr(new Error,Er.REFRESH_TOKEN_REQUIRED,fr.BAD_REQUEST,void 0,void 0,!0);await fL(e.refresh_token);let t=await Rd(),r=await Eu.decode(e.refresh_token);return{operation_token:await dL({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(uj,"refreshOperationToken");async function lj(e){try{let t=await Rd(),r=await Eu.verify(e,t.public_key,{algorithms:gd,subject:Td.OPERATION});return await MS.findAndValidateUser(r.username,void 0,!1)}catch(t){throw fu.warn(t),t.name&&t.name==="TokenExpiredError"?dr(new Error,Er.TOKEN_EXPIRED,fr.FORBIDDEN):dr(new Error,Er.INVALID_TOKEN,fr.UNAUTHORIZED)}}a(lj,"validateOperationToken");async function fL(e){let t;try{let r=await Rd(),s=await Eu.verify(e,r.public_key,{algorithms:gd,subject:Td.REFRESH});t=await MS.findAndValidateUser(s.username,void 0,!1)}catch(r){throw fu.warn(r),r.name&&r.name==="TokenExpiredError"?dr(new Error,Er.TOKEN_EXPIRED,fr.FORBIDDEN):dr(new Error,Er.INVALID_TOKEN,fr.UNAUTHORIZED)}if(!_L.validate(t.refresh_token,e))throw dr(new Error,Er.INVALID_TOKEN,fr.UNAUTHORIZED);return t}a(fL,"validateRefreshToken")});var PS=T((afe,pL)=>{"use strict";var _j=aL(),la=require("passport"),dj=require("passport-local").Strategy,fj=require("passport-http").BasicStrategy,Ej=require("util"),hj=rs(),mL=Ej.callbackify(hj.findAndValidateUser),ofe=Ir(),mj=D(),hL=hu();la.use(new dj(function(e,t,r){mL(e,t,r)}));la.use(new fj(function(e,t,r){mL(e,t,r)}));la.serializeUser(function(e,t){t(null,e)});la.deserializeUser(function(e,t){t(null,e)});function pj(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let s,n;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");s=o[0],n=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("Must login")}switch(a(i,"handleResponse"),s){case"Basic":la.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===mj.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?hL.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):hL.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:la.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(pj,"authorize");function Sj(e,t){let r=_j(e);if(r){t(r);return}let s={authorized:!0,messages:[]},n=e.user.role;if(!n?.permission)return t("Invalid role");let i=JSON.parse(n.permission);if(i.super_user)return t(null,s);if(!i[e.schema])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.schema} schema`),t(null,s);if(!i[e.schema].tables[e.table])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.table} table`),t(null,s);if(!i[e.schema].tables[e.table][e.operation])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return s.authorized=!1,s.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let o=i[e.schema].tables[e.table].attribute_permissions;for(let c in o)e.attributes.indexOf(o[c].attribute_name)>-1&&!o[c][e.operation]&&(s.authorized=!1,s.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,s)}a(Sj,"checkPermissions");pL.exports={authorize:pj,checkPermissions:Sj}});var di=T((ufe,SL)=>{"use strict";var vS=class{static{a(this,"Node")}constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}},BS=class{static{a(this,"NodeSubscription")}constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};SL.exports={Node:vS,NodeSubscription:BS}});var gL=T((_fe,TL)=>{"use strict";var Tj=D().OPERATIONS_ENUM,HS=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=Tj.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};TL.exports=HS});var mu=T((ffe,RL)=>{"use strict";var xS=class{static{a(this,"RemotePayloadObject")}constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}},qS=class{static{a(this,"RemotePayloadSubscription")}constructor(t,r,s,n,i,o,c){this.schema=t,this.table=r,this.hash_attribute=s,this.publish=n,this.subscribe=i,this.start_time=o,c!==void 0&&(this.attributes=c)}};RL.exports={RemotePayloadObject:xS,RemotePayloadSubscription:qS}});var OL=T((hfe,AL)=>{"use strict";var FS=class{static{a(this,"TableSizeObject")}constructor(t,r,s=0,n=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=s,this.record_count=n,this.transaction_log_size=i,this.transaction_log_record_count=o}};AL.exports=FS});var yL=T((gfe,NL)=>{"use strict";var gj=OL(),pfe=mt(),bL=Ke(),Rj=G(),{getSchemaPath:Sfe,getTransactionAuditStorePath:Tfe}=ze(),{getDatabases:Aj}=(ge(),ee(xe));NL.exports=Oj;async function Oj(e){let t=new gj;try{let r=Aj()[e.schema]?.[e.name],s=r.primaryStore.getStats(),n=r.auditStore?.getStats(),i=await bL.environmentDataSize(schema_path,e.name),o=await bL.environmentDataSize(txn_path,e.name);t.schema=e.schema,t.table=e.name,t.table_size=i,t.record_count=s.entryCount,t.transaction_log_size=o,t.transaction_log_record_count=n.entryCount}catch(r){Rj.warn(`unable to stat table dbi due to ${r}`)}return t}a(Oj,"lmdbGetTableSize")});var wL=T((Afe,IL)=>{"use strict";var GS=class{static{a(this,"SystemInformationObject")}constructor(t,r,s,n,i,o,c){this.system=t,this.time=r,this.cpu=s,this.memory=n,this.disk=i,this.network=o,this.harperdb_processes=c}};IL.exports=GS});var _a=T((yfe,UL)=>{"use strict";var bj=require("fs-extra"),Nj=require("path"),Xt=require("systeminformation"),fi=G(),yj=nt(),kS=qe(),Od=D(),Ij=yL(),LL=jn(),{getThreadInfo:CL}=Ye(),jS=j();jS.initSync();var wj=wL(),{openEnvironment:bfe}=Ke(),{getSchemaPath:Nfe}=ze(),{database:Cj}=(ge(),ee(xe)),Ad;UL.exports={getHDBProcessInfo:KS,getNetworkInfo:QS,getDiskInfo:WS,getMemoryInfo:YS,getCPUInfo:$S,getTimeInfo:VS,getSystemInformation:zS,systemInformation:Dj,getTableSize:JS,getMetrics:XS};function VS(){return Xt.time()}a(VS,"getTimeInfo");async function $S(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:c,socket:u,cache:_,...l}=await Xt.cpu();l.cpu_speed=await Xt.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:R,...I}=await Xt.currentLoad();return I.cpus=[],R.forEach(w=>{let{raw_load:B,raw_load_idle:K,raw_load_irq:q,raw_load_nice:P,raw_load_system:Q,raw_load_user:Y,...J}=w;I.cpus.push(J)}),l.current_load=I,l}catch(e){return fi.error(`error in getCPUInfo: ${e}`),{}}}a($S,"getCPUInfo");async function YS(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await Xt.mem();return Object.assign(n,process.memoryUsage())}catch(e){return fi.error(`error in getMemoryInfo: ${e}`),{}}}a(YS,"getMemoryInfo");async function KS(){let e={core:[],clustering:[]};try{let t=await Xt.processes(),r;try{r=Number.parseInt(await bj.readFile(Nj.join(jS.get(Od.CONFIG_PARAMS.ROOTPATH),Od.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===Od.NODE_ERROR_CODES.ENOENT)fi.error("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB");else throw s}t.list.forEach(s=>{s.pid===r?e.core.push(s):s.name==="nats-server"&&e.clustering.push(s)});for(let s of e.core)for(let n of t.list)n.pid===s.parentPid&&(n.name==="PM2"||n.command==="PM2")&&(s.parent="PM2");return e}catch(t){return fi.error(`error in getHDBProcessInfo: ${t}`),e}}a(KS,"getHDBProcessInfo");async function WS(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await Xt.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:u,..._}=await Xt.fsStats();return e.read_write=_,e.size=await Xt.fsSize(),e}catch(t){return fi.error(`error in getDiskInfo: ${t}`),e}}a(WS,"getDiskInfo");async function QS(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await Xt.networkInterfaceDefault(),e.latency=await Xt.inetChecksite("google.com"),(await Xt.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:o,dhcp:c,dnsSuffix:u,ieee8021xAuth:_,ieee8021xState:l,carrier_changes:d,...f}=s;e.interfaces.push(f)}),(await Xt.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,...c}=s;e.stats.push(c)}),e}catch(t){return fi.error(`error in getNetworkInfo: ${t}`),e}}a(QS,"getNetworkInfo");async function zS(){if(Ad!==void 0)return Ad;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,...c}=await Xt.osInfo();e=c;let u=await Xt.versions("node, npm");return e.node_version=u.node,e.npm_version=u.npm,Ad=e,Ad}catch(t){return fi.error(`error in getSystemInformation: ${t}`),e}}a(zS,"getSystemInformation");async function JS(){let e=[],t=await LL.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await Ij(s));return e}a(JS,"getTableSize");async function XS(){let e=await LL.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let i=Cj({database:r,table:n}),o=i.getStats();o.readers=i.readerList().split(/\n\s+/).slice(1).map(c=>{let[u,_,l]=c.trim().split(" ");return{pid:u,thread:_,txnid:l}}),s[n]=o}catch(i){fi.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(XS,"getMetrics");async function DL(){if(jS.get(Od.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await yj.getNATSReferences(),r=await t.streams.info(kS.WORK_QUEUE_CONSUMER_NAMES.stream_name),s=await e.consumers.get(kS.WORK_QUEUE_CONSUMER_NAMES.stream_name,kS.WORK_QUEUE_CONSUMER_NAMES.durable_name),n={ingest:{stream:{...r.state},consumer:{num_ack_pending:s._info.num_ack_pending,num_redelivered:s._info.num_redelivered,num_waiting:s._info.num_waiting,num_pending:s._info.num_pending}}};return r.sources&&(n.ingest.stream.sources=r.sources),n}}a(DL,"getNatsStreamInfo");async function Dj(e){let t=new wj;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await zS(),t.time=VS(),t.cpu=await $S(),t.memory=await YS(),t.disk=await WS(),t.network=await QS(),t.harperdb_processes=await KS(),t.table_size=await JS(),t.metrics=await XS(),t.threads=await CL(),t.replication=await DL(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await zS();break;case"time":t.time=VS();break;case"cpu":t.cpu=await $S();break;case"memory":t.memory=await YS();break;case"disk":t.disk=await WS();break;case"network":t.network=await QS();break;case"harperdb_processes":t.harperdb_processes=await KS();break;case"table_size":t.table_size=await JS();break;case"database_metrics":case"metrics":t.metrics=await XS();break;case"threads":t.threads=await CL();break;case"replication":t.replication=await DL();break;default:break}return t}a(Dj,"systemInformation")});var ZS=T((wfe,ML)=>{"use strict";ML.exports={version:Lj,printVersion:Uj};var bd=jc();function Lj(){if(bd)return bd.version}a(Lj,"version");function Uj(){bd&&console.log(`HarperDB Version ${bd.version}`)}a(Uj,"printVersion")});var os=T((Ufe,HL)=>{"use strict";var Mj=Lr(),eT=z(),Pj=require("util"),oo=D(),PL=j();PL.initSync();var vj=PS(),vL=es(),{Node:Dfe,NodeSubscription:Lfe}=di(),Bj=ea(),Hj=gL(),{RemotePayloadObject:xj,RemotePayloadSubscription:qj}=mu(),{handleHDBError:Fj,hdb_errors:Gj}=Z(),{HTTP_STATUS_CODES:kj,HDB_ERROR_MSGS:Vj}=Gj,$j=Xs(),Yj=_a(),Kj=ZS(),{getDatabases:Wj}=(ge(),ee(xe)),Qj=Pj.promisify(vj.authorize),zj=vL.searchByHash,Jj=vL.searchByValue;HL.exports={authHeaderToUser:Xj,isEmpty:jj,getNodeRecord:Zj,upsertNodeRecord:eZ,buildNodePayloads:tZ,checkClusteringEnabled:rZ,getAllNodeRecords:sZ,getSystemInfo:nZ,reverseSubscription:BL};async function Xj(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await Qj(t,null),e}a(Xj,"authHeaderToUser");function jj(e){return e==null}a(jj,"isEmpty");async function Zj(e){let t=new Bj(oo.SYSTEM_SCHEMA_NAME,oo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return zj(t)}a(Zj,"getNodeRecord");async function eZ(e){let t=new Hj(oo.SYSTEM_SCHEMA_NAME,oo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return Mj.upsert(t)}a(eZ,"upsertNodeRecord");function BL(e){if(eT.isEmpty(e.subscribe)||eT.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:s}=e,n={schema:t,table:r,hash_attribute:s};return e.subscribe===!0&&e.publish===!1?(n.subscribe=!1,n.publish=!0):e.subscribe===!1&&e.publish===!0?(n.subscribe=!0,n.publish=!1):(n.subscribe=e.subscribe,n.publish=e.publish),n}a(BL,"reverseSubscription");function tZ(e,t,r,s){let n=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:u,table:_}=c,l=eT.getTableHashAttribute(u,_),{subscribe:d,publish:f}=BL(c),E=Wj()[u]?.[_],h=new qj(u,_,l,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);n.push(h)}return new xj(r,t,n,s)}a(tZ,"buildNodePayloads");function rZ(){if(!PL.get(oo.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Fj(new Error,Vj.CLUSTERING_NOT_ENABLED,kj.BAD_REQUEST,void 0,void 0,!0)}a(rZ,"checkClusteringEnabled");async function sZ(){let e=new $j(oo.SYSTEM_SCHEMA_NAME,oo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await Jj(e))}a(sZ,"getAllNodeRecords");async function nZ(){let e=await Yj.getSystemInformation();return{hdb_version:Kj.version(),node_version:e.node_version,platform:e.platform}}a(nZ,"getSystemInfo")});var tT=T((Pfe,YL)=>{"use strict";var Nd=nt(),xL=z(),qL=qe(),FL=D(),yd=G(),GL=uu(),iZ=K_(),{RemotePayloadObject:oZ}=mu(),{handleHDBError:kL,hdb_errors:aZ}=Z(),{HTTP_STATUS_CODES:VL}=aZ,{NodeSubscription:$L}=di();YL.exports=cZ;async function cZ(e,t){let r;try{r=await Nd.request(`${t}.${qL.REQUEST_SUFFIX}`,new oZ(FL.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),yd.trace("Response from remote describe all request:",r)}catch(o){yd.error(`addNode received error from describe all request to remote node: ${o}`);let c=Nd.requestErrorHandler(o,"add_node",t);throw kL(new Error,c,VL.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===qL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw kL(new Error,o,VL.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{table:c}=o,u=o.database??o.schema??"data";if(u===FL.SYSTEM_SCHEMA_NAME){await Nd.createLocalTableStream(u,c);let h=new $L(u,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=xL.doesSchemaExist(u),l=s[u]!==void 0,d=c?xL.doesTableExist(u,c):!0,f=c?s?.[u]?.[c]!==void 0:!0;if(!_&&!l||!d&&!f){n.push(o);continue}if(!_&&l&&(yd.trace(`addNode creating schema: ${u}`),await GL.createSchema({operation:"create_schema",schema:u})),!d&&f){yd.trace(`addNode creating table: ${c} in schema: ${u} with attributes ${JSON.stringify(s[u][c].attributes)}`);let h=new iZ(u,c,s[u][c].hash_attribute);s[u][c].attributes&&(h.attributes=s[u][c].attributes),await GL.createTable(h)}await Nd.createLocalTableStream(u,c);let E=new $L(u,c,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:n}}a(cZ,"reviewSubscriptions")});var Cd=T((Bfe,QL)=>{"use strict";var{handleHDBError:Id,hdb_errors:uZ}=Z(),{HTTP_STATUS_CODES:wd}=uZ,{addUpdateNodeValidator:lZ}=pd(),pu=G(),WL=D(),KL=qe(),_Z=z(),rT=nt(),Su=os(),dZ=j(),fZ=tT(),{Node:EZ,NodeSubscription:hZ}=di(),{broadcast:mZ}=Ye(),pZ="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",SZ="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",TZ=dZ.get(WL.CONFIG_PARAMS.CLUSTERING_NODENAME);QL.exports=gZ;async function gZ(e,t=!1){pu.trace("addNode called with:",e),Su.checkClusteringEnabled();let r=lZ(e);if(r)throw Id(r,r.message,wd.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let d=await Su.getNodeRecord(s);if(!_Z.isEmptyOrZeroLength(d))throw Id(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,wd.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await fZ(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=pZ,o;let c=Su.buildNodePayloads(n,TZ,WL.OPERATIONS_ENUM.ADD_NODE,await Su.getSystemInfo());pu.trace("addNode sending remote payload:",c);let u;try{u=await rT.request(`${s}.${KL.REQUEST_SUFFIX}`,c)}catch(d){pu.error(`addNode received error from request: ${d}`);let f=rT.requestErrorHandler(d,"add_node",s);throw Id(new Error,f,wd.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===KL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${s}: ${u.message}`;throw Id(new Error,d,wd.INTERNAL_SERVER_ERROR,"error",d)}pu.trace(u);let _=[];for(let d=0,f=n.length;d<f;d++){let E=n[d];pu.trace("Add node updating work stream for node:",s,"subscriptions:",E),await rT.updateWorkStream(E,s),n[d].start_time===void 0&&delete n[d].start_time,_.push(new hZ(E.schema,E.table,E.publish,E.subscribe))}let l=new EZ(s,_,u.system_info);return await Su.upsertNodeRecord(l),mZ({type:"nats_update"}),i.length>0?o.message=SZ:o.message=`Successfully added '${s}' to manifest`,o}a(gZ,"addNode")});var oT=T((qfe,XL)=>{"use strict";var{handleHDBError:sT,hdb_errors:RZ}=Z(),{HTTP_STATUS_CODES:nT}=RZ,{addUpdateNodeValidator:AZ}=pd(),Tu=G(),JL=D(),zL=qe(),xfe=z(),iT=nt(),gu=os(),OZ=j(),{cloneDeep:bZ}=require("lodash"),NZ=tT(),{Node:yZ,NodeSubscription:IZ}=di(),{broadcast:wZ}=Ye(),CZ="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",DZ="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",LZ=OZ.get(JL.CONFIG_PARAMS.CLUSTERING_NODENAME);XL.exports=UZ;async function UZ(e){Tu.trace("updateNode called with:",e),gu.checkClusteringEnabled();let t=AZ(e);if(t)throw sT(t,t.message,nT.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s,n=await gu.getNodeRecord(r);n.length>0&&(s=bZ(n));let{added:i,skipped:o}=await NZ(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=CZ,c;let u=gu.buildNodePayloads(i,LZ,JL.OPERATIONS_ENUM.UPDATE_NODE,await gu.getSystemInfo());Tu.trace("updateNode sending remote payload:",u);let _;try{_=await iT.request(`${r}.${zL.REQUEST_SUFFIX}`,u)}catch(l){Tu.error(`updateNode received error from request: ${l}`);let d=iT.requestErrorHandler(l,"update_node",r);throw sT(new Error,d,nT.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===zL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let l=`Error returned from remote node ${r}: ${_.message}`;throw sT(new Error,l,nT.INTERNAL_SERVER_ERROR,"error",l)}Tu.trace(_);for(let l=0,d=i.length;l<d;l++){let f=i[l];Tu.trace(`updateNode updating work stream for node: ${r} subscription:`,f),await iT.updateWorkStream(f,r),i[l].start_time===void 0&&delete i[l].start_time}return s||(s=[new yZ(r,[],_.system_info)]),await MZ(s[0],i,_.system_info),o.length>0?c.message=DZ:c.message=`Successfully updated '${r}'`,c}a(UZ,"updateNode");async function MZ(e,t,r){let s=e;for(let n=0,i=t.length;n<i;n++){let o=t[n],c=!1;for(let u=0,_=e.subscriptions.length;u<_;u++){let l=s.subscriptions[u];if(l.schema===o.schema&&l.table===o.table){l.publish=o.publish,l.subscribe=o.subscribe,c=!0;break}}c||s.subscriptions.push(new IZ(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await gu.upsertNodeRecord(s),wZ({type:"nats_update"})}a(MZ,"updateNodeTable")});var rU=T((Gfe,tU)=>{"use strict";var eU=require("joi"),{string:jL}=eU.types(),PZ=Je(),ZL=D(),vZ=j(),BZ=qe();tU.exports=HZ;function HZ(e){let t=jL.invalid(vZ.get(ZL.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(BZ.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=eU.object({operation:jL.valid(ZL.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return PZ.validateBySchema(e,r)}a(HZ,"removeNodeValidator")});var Ld=T((Vfe,cU)=>{"use strict";var{handleHDBError:sU,hdb_errors:xZ}=Z(),{HTTP_STATUS_CODES:nU}=xZ,qZ=rU(),Ru=G(),iU=os(),FZ=z(),Dd=D(),oU=qe(),aU=nt(),GZ=j(),{RemotePayloadObject:kZ}=mu(),{NodeSubscription:VZ}=di(),$Z=ta(),YZ=ti(),{broadcast:KZ}=Ye(),WZ=GZ.get(Dd.CONFIG_PARAMS.CLUSTERING_NODENAME);cU.exports=QZ;async function QZ(e){Ru.trace("removeNode called with:",e),iU.checkClusteringEnabled();let t=qZ(e);if(t)throw sU(t,t.message,nU.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await iU.getNodeRecord(r);if(FZ.isEmptyOrZeroLength(s))throw sU(new Error,`Node '${r}' was not found.`,nU.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new kZ(Dd.OPERATIONS_ENUM.REMOVE_NODE,WZ,[]),i,o=!1;try{i=await aU.request(`${r}.${oU.REQUEST_SUFFIX}`,n),Ru.trace("Remove node reply from remote node:",r,i)}catch(u){Ru.error("removeNode received error from request:",u),o=!0}for(let u=0,_=s.subscriptions.length;u<_;u++){let l=s.subscriptions[u];Ru.trace(`Remove node removing subscription: ${l.schema}.${l.table} for node: ${r}`);let d=new VZ(l.schema,l.table,!1,!1);await aU.updateWorkStream(d,r)}let c=new $Z(Dd.SYSTEM_SCHEMA_NAME,Dd.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await YZ.deleteRecord(c),KZ({type:"nats_update"}),i?.status===oU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(Ru.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(QZ,"removeNode")});var _U=T((Yfe,lU)=>{"use strict";var uU=require("joi"),{string:zZ,array:JZ}=uU.types(),XZ=Je(),jZ=pd();lU.exports=ZZ;function ZZ(e){let t=uU.object({operation:zZ.valid("configure_cluster").required(),connections:JZ.items(jZ.validation_schema).required()});return XZ.validateBySchema(e,t)}a(ZZ,"configureClusterValidator")});var aT=T((Wfe,mU)=>{"use strict";var e5=D(),Ud=G(),t5=z(),r5=Ld(),s5=Cd(),dU=os(),n5=_U(),{handleHDBError:fU,hdb_errors:i5}=Z(),{HTTP_STATUS_CODES:EU}=i5,o5="Configure cluster complete.",a5="Failed to configure the cluster. Check the logs for more details.",c5="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";mU.exports=u5;async function u5(e){Ud.trace("configure cluster called with:",e),dU.checkClusteringEnabled();let t=n5(e);if(t)throw fU(t,t.message,EU.BAD_REQUEST,void 0,void 0,!0);let r=await dU.getAllNodeRecords(),s=[];for(let f=0,E=r.length;f<E;f++)s.push(hU(r5,{operation:e5.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name));let n=await Promise.allSettled(s);Ud.trace("All results from configure_cluster remove node:",n);let i=[],o=e.connections.length;for(let f=0;f<o;f++){let E=e.connections[f];i.push(hU(s5,E,E.node_name))}let c=await Promise.allSettled(i);Ud.trace("All results from configure_cluster add node:",c);let u=[],_=[],l=!1,d=n.concat(c);for(let f=0,E=d.length;f<E;f++){let h=d[f];h.status==="rejected"&&(Ud.error(h.reason),u.includes(h.reason.node_name)||u.push(h.reason.node_name)),h.status==="fulfilled"&&(l=!0);let p=h?.value?.result;typeof p=="string"&&p.includes("Successfully removed")||h.status==="rejected"||_.push({node_name:h?.value?.node_name,subscriptions:h?.value?.result})}if(t5.isEmptyOrZeroLength(u))return{message:o5,connections:_};if(l)return{message:c5,failed_nodes:u,connections:_};throw fU(new Error,a5,EU.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(u5,"configureCluster");async function hU(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(hU,"functionWrapper")});var SU=T((zfe,pU)=>{"use strict";var Md=require("joi"),l5=Je(),{validateSchemaExists:_5,validateTableExists:d5,validateSchemaName:f5}=Ks(),E5=Md.object({operation:Md.string().valid("purge_stream"),schema:Md.string().custom(_5).custom(f5).required(),table:Md.string().custom(d5).required()});function h5(e){return l5.validateBySchema(e,E5)}a(h5,"purgeStreamValidator");pU.exports=h5});var cT=T((Xfe,TU)=>{"use strict";var{handleHDBError:m5,hdb_errors:p5}=Z(),{HTTP_STATUS_CODES:S5}=p5,T5=SU(),g5=nt(),R5=os();TU.exports=A5;async function A5(e){if(e.purge_ingest!==!0){let n=T5(e);if(n)throw m5(n,n.message,S5.BAD_REQUEST,void 0,void 0,!0)}R5.checkClusteringEnabled();let{schema:t,table:r,purge_ingest:s}=e;return await g5.purgeTableStream(t,r,s),s?"Successfully purged ingest":`Successfully purged table '${t}.${r}'`}a(A5,"purgeStream")});var _T=T((Zfe,NU)=>{"use strict";var lT=os(),O5=nt(),AU=j(),Pd=D(),ao=qe(),b5=z(),uT=G(),{RemotePayloadObject:N5}=mu(),{ErrorCode:gU}=require("nats"),RU=AU.get(Pd.CONFIG_PARAMS.CLUSTERING_ENABLED),OU=AU.get(Pd.CONFIG_PARAMS.CLUSTERING_NODENAME);NU.exports={clusterStatus:y5,buildNodeStatus:bU};async function y5(){let e={node_name:OU,is_enabled:RU,connections:[]};if(!RU)return e;let t=await lT.getAllNodeRecords();if(b5.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(bU(t[s],e.connections));return await Promise.allSettled(r),e}a(y5,"clusterStatus");async function bU(e,t){let r=e.name,s=new N5(Pd.OPERATIONS_ENUM.CLUSTER_STATUS,OU,void 0,await lT.getSystemInfo()),n,i,o=ao.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();n=await O5.request(ao.REQUEST_SUBJECT(r),s),i=Date.now()-u,n.status===ao.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=ao.CLUSTER_STATUS_STATUSES.CLOSED,uT.error(`Error getting node status from ${r} `,n))}catch(u){uT.warn(`Error getting node status from ${r}`,u),u.code===gU.NoResponders?o=ao.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===gU.Timeout?o=ao.CLUSTER_STATUS_STATUSES.TIMEOUT:o=ao.CLUSTER_STATUS_STATUSES.CLOSED}let c=new I5(r,o,n?.message?.ports?.clustering,n?.message?.ports?.operations_api,i,n?.message?.uptime,e.subscriptions,n?.message?.system_info);try{let u={name:r,system_info:n?.message?.system_info};e.system_info?.hdb_version!==Pd.PRE_4_0_0_VERSION&&await lT.upsertNodeRecord(u)}catch(u){uT.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(bU,"buildNodeStatus");function I5(e,t,r,s,n,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:s},this.latency_ms=n,this.uptime=i,this.subscriptions=o,this.system_info=c}a(I5,"NodeStatusObject")});var fT=T((tEe,yU)=>{"use strict";var{handleHDBError:w5,hdb_errors:C5}=Z(),{HTTP_STATUS_CODES:D5}=C5,L5=nt(),U5=os(),dT=z(),vd=require("joi"),M5=Je(),P5=2e3,v5=vd.object({timeout:vd.number().min(1),connected_nodes:vd.boolean(),routes:vd.boolean()});yU.exports=B5;async function B5(e){U5.checkClusteringEnabled();let t=M5.validateBySchema(e,v5);if(t)throw w5(t,t.message,D5.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||dT.autoCastBoolean(s),o=n===void 0||dT.autoCastBoolean(n),c={nodes:[]},u=await L5.getServerList(r??P5),_={};if(i)for(let l=0,d=u.length;l<d;l++){let f=u[l].statsz;f&&(_[u[l].server.name]=f.routes)}for(let l=0,d=u.length;l<d;l++){if(u[l].statsz)continue;let f=u[l].server,E=u[l].data;if(f.name.endsWith("-hub")){let h={name:f.name.slice(0,-4),response_time:u[l].response_time};i&&(h.connected_nodes=[],_[f.name]&&_[f.name].forEach(p=>{h.connected_nodes.includes(p.name.slice(0,-4))||h.connected_nodes.push(p.name.slice(0,-4))})),o&&(h.routes=E.cluster?.urls?E.cluster?.urls.map(p=>({host:p.split(":")[0],port:dT.autoCast(p.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(B5,"clusterNetwork")});var DU=T((sEe,CU)=>{"use strict";var ET=require("joi"),IU=Je(),{route_constraints:wU}=Pm();CU.exports={setRoutesValidator:H5,deleteRoutesValidator:x5};function H5(e){let t=ET.object({server:ET.valid("hub","leaf").required(),routes:wU.required()});return IU.validateBySchema(e,t)}a(H5,"setRoutesValidator");function x5(e){let t=ET.object({routes:wU.required()});return IU.validateBySchema(e,t)}a(x5,"deleteRoutesValidator")});var mT=T((iEe,PU)=>{"use strict";var co=Pr(),hT=z(),Bd=D(),LU=DU(),{handleHDBError:UU,hdb_errors:q5}=Z(),{HTTP_STATUS_CODES:MU}=q5,F5="cluster routes successfully set",G5="cluster routes successfully deleted";PU.exports={setRoutes:k5,getRoutes:V5,deleteRoutes:$5};function k5(e){let t=LU.setRoutesValidator(e);if(t)throw UU(t,t.message,MU.BAD_REQUEST,void 0,void 0,!0);let r=co.getClusteringRoutes(),s=e.server==="hub"?r.hub_routes:r.leaf_routes,n=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],o=[];for(let c=0,u=e.routes.length;c<u;c++){let _=e.routes[c];_.port=hT.autoCast(_.port);let l=s.some(f=>f.host===_.host&&f.port===_.port),d=n.some(f=>f.host===_.host&&f.port===_.port);l||d?i.push(_):(s.push(_),o.push(_))}return e.server==="hub"?co.updateConfigValue(Bd.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):co.updateConfigValue(Bd.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:F5,set:o,skipped:i}}a(k5,"setRoutes");function V5(){let e=co.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(V5,"getRoutes");function $5(e){let t=LU.deleteRoutesValidator(e);if(t)throw UU(t,t.message,MU.BAD_REQUEST,void 0,void 0,!0);let r=co.getClusteringRoutes(),s=r.hub_routes,n=r.leaf_routes,i=[],o=[],c=!1,u=!1;for(let _=0,l=e.routes.length;_<l;_++){let d=e.routes[_],f=!1;for(let E=0,h=s.length;E<h;E++){let p=s[E];if(d.host===p.host&&d.port===p.port){s.splice(E,1),f=!0,c=!0,i.push(d);break}}if(!f){let E=!0;for(let h=0,p=n.length;h<p;h++){let S=n[h];if(d.host===S.host&&d.port===S.port){n.splice(h,1),u=!0,E=!1,i.push(d);break}}E&&o.push(d)}}return c&&(s=hT.isEmptyOrZeroLength(s)?null:s,co.updateConfigValue(Bd.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),u&&(n=hT.isEmptyOrZeroLength(n)?null:n,co.updateConfigValue(Bd.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:G5,deleted:i,skipped:o}}a($5,"deleteRoutes")});var BU=T((aEe,vU)=>{"use strict";var Au=require("alasql"),uo=require("recursive-iterator"),Bs=G(),Y5=z(),Ou=D(),pT=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,W5(this.ast,this.affected_attributes,this.table_lookup,this.schema_lookup,this.table_to_schema_lookup)}getAttributesBySchemaTableName(t,r){if(!t||!r||!this.affected_attributes)return[];if(this.affected_attributes.has(t))return!this.affected_attributes.get(t).has(r)&&(r=this.table_lookup.get(r),!r)?[]:this.affected_attributes.get(t).get(r)}getAllTables(){let t=[];if(!this.affected_attributes)return t;for(let r of this.affected_attributes.keys())t.push(Array.from(this.affected_attributes.get(r).keys()));return t}getTablesBySchemaName(t){return!t||!this.affected_attributes?[]:Array.from(this.affected_attributes.get(t).keys())}getSchemas(){return this.affected_attributes?Array.from(this.affected_attributes.keys()):[]}getAst(){return this.ast}updateAttributeWildcardsForRolePerms(t){let r=this.ast.columns.filter(n=>Ou.SEARCH_WILDCARDS.includes(n.columnid));if(r.length===0)return this.ast;let s=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(n=>!Ou.SEARCH_WILDCARDS.includes(n.columnid)),r.forEach(n=>{let i=this.table_to_schema_lookup.has(n.tableid)?this.table_to_schema_lookup.get(n.tableid):s,o=this.table_lookup.has(n.tableid)?this.table_lookup.get(n.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][Ou.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=K5(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(_=>({attribute_name:_.attribute}));let u=this.affected_attributes.get(i).get(o).filter(_=>!Ou.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let l=new Au.yy.Column({columnid:_});n.tableid&&(l.tableid=n.tableid),this.ast.columns.push(l),u.includes(_)||u.push(_)}),this.affected_attributes.get(i).set(o,u)}}),this.ast}};function K5(e){return e.filter(t=>t[Ou.PERMS_CRUD_ENUM.READ])}a(K5,"filterReadRestrictedAttrs");function W5(e,t,r,s,n){Q5(e,t,r,s,n)}a(W5,"interpretAST");function bu(e,t,r,s,n){if(!(!e||!e.databaseid)&&(t.has(e.databaseid)||t.set(e.databaseid,new Map),t.get(e.databaseid).has(e.tableid)||t.get(e.databaseid).set(e.tableid,[]),e.as&&(r.has(e.as)||r.set(e.as,e.tableid),s&&!s.has(e.as)&&s.set(e.as,e.databaseid)),n)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),n.set(o,i)}}a(bu,"addSchemaTableToMap");function Q5(e,t,r,s,n){if(!e){Bs.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof Au.yy.Insert?j5(e,t,r):e instanceof Au.yy.Select?z5(e,t,r,s,n):e instanceof Au.yy.Update?J5(e,t,r):e instanceof Au.yy.Delete?X5(e,t,r):Bs.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(Q5,"getRecordAttributesAST");function z5(e,t,r,s,n){if(!e){Bs.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(Y5.isEmptyOrZeroLength(i)){Bs.error("No schema specified");return}e.from.forEach(c=>{bu(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),bu(c.table,t,r,s,n)});let o=new uo(e.columns);for(let{node:c}of o)if(c&&c.columnid){let u=c.tableid,_=s.has(u)?s.get(u):i;if(u||(u=e.from[0].tableid),!t.get(_).has(u))if(r.has(u))u=r.get(u);else{Bs.info(`table specified as ${u} not found.`);return}t.get(_).get(u).indexOf(c.columnid)<0&&t.get(_).get(u).push(c.columnid)}if(e.where){let c=new uo(e.where),u=e.from[0].tableid;for(let{node:_}of c)if(_&&_.columnid){let l=_.tableid?_.tableid:u;if(!t.get(i).has(l))if(r.has(l))l=r.get(l);else{Bs.info(`table specified as ${l} not found.`);continue}t.get(i).get(l).indexOf(_.columnid)<0&&t.get(i).get(l).push(_.columnid)}}if(e.joins&&e.joins.forEach(c=>{let u=new uo(c.on);for(let{node:_}of u)if(_&&_.columnid){let l=_.tableid,d=n.get(l);if(!t.get(d).has(l))if(r.has(l))l=r.get(l);else{Bs.info(`table specified as ${l} not found.`);continue}t.get(d).get(l).indexOf(_.columnid)<0&&t.get(d).get(l).push(_.columnid)}}),e.order){let c=new uo(e.order);for(let{node:u}of c)if(u&&u.columnid){let _=u.tableid,l=s.has(_)?s.get(_):i;if(_||(_=e.from[0].tableid),!t.get(l).has(_))if(r.has(_))_=r.get(_);else{Bs.info(`table specified as ${_} not found.`);return}t.get(l).get(_).indexOf(u.columnid)<0&&t.get(l).get(_).push(u.columnid)}}}a(z5,"getSelectAttributes");function J5(e,t,r){if(!e){Bs.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new uo(e.columns),n=e.table.databaseid;bu(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&ST(e.table.tableid,n,i.columnid,t,r)}a(J5,"getUpdateAttributes");function X5(e,t,r){if(!e){Bs.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new uo(e.where),n=e.table.databaseid;bu(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&ST(e.table.tableid,n,i.columnid,t,r)}a(X5,"getDeleteAttributes");function j5(e,t,r){if(!e){Bs.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new uo(e.columns),n=e.into.databaseid;bu(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&ST(e.into.tableid,n,i.columnid,t,r)}a(j5,"getInsertAttributes");function ST(e,t,r,s,n){if(!s.get(t))return;let i=e;s.get(t).has(i)||(i=n.get(i)),s.get(t).get(i).push(r)}a(ST,"pushAttribute");vU.exports=pT});var RT=T((uEe,FU)=>{var Hd=Yi(),HU=require("chalk"),Gr=G(),xU=require("prompt"),{promisify:Z5}=require("util"),TT=D(),e8=require("fs-extra"),t8=require("path"),r8=z(),s8=ZS(),qU=j();qU.initSync();var n8=require("moment"),i8=Z5(xU.get),o8=t8.join(qU.getHdbBasePath(),TT.LICENSE_KEY_DIR_NAME,TT.LICENSE_FILE_NAME,TT.LICENSE_FILE_NAME);FU.exports={getFingerprint:c8,setLicense:a8,parseLicense:gT,register:u8,getRegistrationInfo:_8};async function a8(e){if(e&&e.key&&e.company){try{Gr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await gT(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw Gr.error(r),Gr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(a8,"setLicense");async function c8(){let e={};try{e=await Hd.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw Gr.error(r),Gr.error(t),new Error(r)}return e}a(c8,"getFingerprint");async function gT(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");Gr.info("Validating license input...");let r=Hd.validateLicense(e,t);if(Gr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(Gr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(Gr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{Gr.info("writing license to disk"),await e8.writeFile(o8,JSON.stringify({license_key:e,company:t}))}catch(s){throw Gr.error("Failed to write License"),s}return"Registration successful."}a(gT,"parseLicense");async function u8(){let e=await l8();return gT(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(u8,"register");async function l8(){let e=await Hd.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:HU.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:HU.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{xU.start()}catch(s){Gr.error(s)}let r;try{r=await i8(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(l8,"promptForRegistration");async function _8(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await Hd.getLicense()}catch(r){throw Gr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(r8.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=s8.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=n8.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(_8,"getRegistrationInfo")});var kU=T((_Ee,GU)=>{"use strict";var d8=qe(),AT=class{static{a(this,"HubConfigObject")}constructor(t,r,s,n,i,o,c,u,_,l,d,f,E,h){this.port=t,o===null&&(o=void 0),this.server_name=r+d8.SERVER_SUFFIX.HUB,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!1},this.tls={cert_file:n,key_file:i,ca_file:o,insecure:c,verify:u},this.leafnodes={port:_,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c}},this.cluster={name:l,port:d,routes:f,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c,verify:u}},this.accounts={SYS:{users:E},HDB:{users:h}},this.system_account="SYS"}};GU.exports=AT});var YU=T((fEe,$U)=>{"use strict";var VU=qe(),OT=class{static{a(this,"LeafConfigObject")}constructor(t,r,s,n,i,o,c,u,_,l,d){this.port=t,d===null&&(d=void 0),this.server_name=r+VU.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:n,domain:r+VU.SERVER_SUFFIX.LEAF},this.tls={cert_file:_,key_file:l,ca_file:d,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:d,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:d,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:u,jetstream:"enabled"}},this.system_account="SYS"}};$U.exports=OT});var WU=T((hEe,KU)=>{"use strict";var bT=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};KU.exports=bT});var zU=T((pEe,QU)=>{"use strict";var f8=qe(),NT=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+f8.SERVER_SUFFIX.ADMIN,this.password=r}};QU.exports=NT});var wT=T((TEe,jU)=>{"use strict";var da=require("path"),Fd=require("fs-extra"),E8=kU(),h8=YU(),m8=WU(),p8=zU(),yT=rs(),Ea=z(),hr=Pr(),qd=D(),Nu=qe(),{CONFIG_PARAMS:ht}=qd,yu=G(),Iu=j(),JU=gn(),IT=nt(),fa="clustering",S8=1e4,XU=5;jU.exports={generateNatsConfig:g8,removeNatsConfig:R8,getHubConfigPath:T8};function T8(){let e=Iu.get(ht.ROOTPATH);return da.join(e,fa,Nu.NATS_CONFIG_FILES.HUB_SERVER)}a(T8,"getHubConfigPath");async function g8(e=!1,t=void 0){Iu.initSync();let r=Iu.get(ht.ROOTPATH),s=da.join(r,fa,Nu.PID_FILES.HUB),n=da.join(r,fa,Nu.PID_FILES.LEAF),i=hr.getConfigFromFile(ht.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=da.join(r,fa,Nu.NATS_CONFIG_FILES.HUB_SERVER),c=da.join(r,fa,Nu.NATS_CONFIG_FILES.LEAF_SERVER),u=hr.getConfigFromFile(ht.CLUSTERING_TLS_CERTIFICATE),_=hr.getConfigFromFile(ht.CLUSTERING_TLS_PRIVATEKEY),l=hr.getConfigFromFile(ht.CLUSTERING_TLS_CERT_AUTH),d=hr.getConfigFromFile(ht.CLUSTERING_TLS_INSECURE),f=hr.getConfigFromFile(ht.CLUSTERING_TLS_VERIFY),E=hr.getConfigFromFile(ht.CLUSTERING_NODENAME),h=hr.getConfigFromFile(ht.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await IT.checkNATSServerInstalled()||Gd("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let p=await yT.listUsers(),S=hr.getConfigFromFile(ht.CLUSTERING_USER),R=await yT.getClusterUser();(Ea.isEmpty(R)||R.active!==!0)&&Gd(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await xd(ht.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await xd(ht.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await xd(ht.CLUSTERING_HUBSERVER_NETWORK_PORT),await xd(ht.CLUSTERING_LEAFSERVER_NETWORK_PORT));let I=[],w=[];for(let[J,re]of p.entries())re.role.role===qd.ROLE_TYPES_ENUM.CLUSTER_USER&&re.active&&(I.push(new p8(re.username,JU.decrypt(re.hash))),w.push(new m8(re.username,JU.decrypt(re.hash))));let B=[],{hub_routes:K}=hr.getClusteringRoutes();if(!Ea.isEmptyOrZeroLength(K))for(let J of K)B.push(`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@${J.host}:${J.port}`);let q=new E8(hr.getConfigFromFile(ht.CLUSTERING_HUBSERVER_NETWORK_PORT),E,s,u,_,l,d,f,h,hr.getConfigFromFile(ht.CLUSTERING_HUBSERVER_CLUSTER_NAME),hr.getConfigFromFile(ht.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),B,I,w);l==null&&(delete q.tls.ca_file,delete q.leafnodes.tls.ca_file),t=Ea.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===qd.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await Fd.writeJson(o,q),yu.trace(`Hub server config written to ${o}`));let P=`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,Q=`tls://${R.uri_encoded_name}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,Y=new h8(hr.getConfigFromFile(ht.CLUSTERING_LEAFSERVER_NETWORK_PORT),E,n,i,[P],[Q],I,w,u,_,l,d);l==null&&delete Y.tls.ca_file,(t===void 0||t===qd.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await Fd.writeJson(c,Y),yu.trace(`Leaf server config written to ${c}`))}a(g8,"generateNatsConfig");async function xd(e){let t=Iu.get(e);return Ea.isEmpty(t)&&Gd(`port undefined for '${e}'`),await Ea.isPortTaken(t)&&Gd(`'${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(xd,"isPortAvailable");function Gd(e){let t=`Error generating clustering config: ${e}`;yu.error(t),console.error(t),process.exit(1)}a(Gd,"generateNatsConfigError");async function R8(e){let{port:t,config_file:r}=IT.getServerConfig(e),{username:s,decrypt_hash:n}=await yT.getClusterUser(),i=0,o=2e3;for(;i<XU;){try{let _=await IT.createConnection(t,s,n,!1);if(_.protocol.connected===!0){_.close();break}}catch(_){yu.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${_}`)}if(i++,i>=XU)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 Ea.async_set_timeout(o*(i*2))}let c="0".repeat(S8),u=da.join(Iu.get(ht.ROOTPATH),fa,r);await Fd.writeFile(u,c),await Fd.remove(u),yu.notify(e,"started.")}a(R8,"removeNatsConfig")});var nM=T((REe,sM)=>{"use strict";var kr=j(),A8=Yi(),he=D(),wu=qe(),In=require("path"),{PACKAGE_ROOT:Vd}=D(),ZU=j(),kd=z(),ha="/dev/null",O8=In.join(Vd,"launchServiceScripts"),eM=In.join(Vd,"utility/scripts"),b8=In.join(eM,he.HDB_RESTART_SCRIPT),tM=In.resolve(Vd,"dependencies",`${process.platform}-${process.arch}`,wu.NATS_BINARY_NAME);function rM(){let t=A8.licenseSearch().ram_allocation||he.RAM_ALLOCATION_ENUM.DEFAULT,r=he.MEM_SETTING_KEY+t,s={[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return kd.noBootFile()&&(s[he.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=kd.getEnvCliRootPath()),{name:he.PROCESS_DESCRIPTORS.HDB,script:he.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:s,node_args:r,cwd:Vd}}a(rM,"generateMainServerConfig");var N8=9930;function y8(){kr.initSync(!0);let e=kr.get(he.CONFIG_PARAMS.ROOTPATH),t=In.join(e,"clustering",wu.NATS_CONFIG_FILES.HUB_SERVER),r=In.join(kr.get(he.HDB_SETTINGS_NAMES.LOG_PATH_KEY),he.LOG_NAMES.HDB),s=ZU.get(he.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=wu.LOG_LEVEL_FLAGS[kr.get(he.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:he.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==N8?"-"+s:""),script:tM,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return kr.get(he.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=ha,i.error_file=ha),i}a(y8,"generateNatsHubServerConfig");var I8=9940;function w8(){kr.initSync(!0);let e=kr.get(he.CONFIG_PARAMS.ROOTPATH),t=In.join(e,"clustering",wu.NATS_CONFIG_FILES.LEAF_SERVER),r=In.join(kr.get(he.HDB_SETTINGS_NAMES.LOG_PATH_KEY),he.LOG_NAMES.HDB),s=ZU.get(he.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=wu.LOG_LEVEL_FLAGS[kr.get(he.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:he.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==I8?"-"+s:""),script:tM,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return kr.get(he.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=ha,i.error_file=ha),i}a(w8,"generateNatsLeafServerConfig");function C8(){kr.initSync();let e=In.join(kr.get(he.CONFIG_PARAMS.LOGGING_ROOT),he.LOG_NAMES.HDB),t={name:he.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:he.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:O8,autorestart:!1};return kr.get(he.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=ha,t.error_file=ha),t}a(C8,"generateClusteringUpgradeV4ServiceConfig");function D8(){let e={[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.RESTART_HDB};return kd.noBootFile()&&(e[he.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=kd.getEnvCliRootPath()),{...{name:he.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:eM},script:b8}}a(D8,"generateRestart");function L8(){return{apps:[rM()]}}a(L8,"generateAllServiceConfigs");sM.exports={generateAllServiceConfigs:L8,generateMainServerConfig:rM,generateRestart:D8,generateNatsHubServerConfig:y8,generateNatsLeafServerConfig:w8,generateClusteringUpgradeV4ServiceConfig:C8}});var SM=T((bEe,pM)=>{"use strict";var Ce=D(),U8=z(),wn=wT(),Cu=nt(),tn=qe(),Ei=nM(),$d=j(),hi=G(),M8=os(),{startWorker:iM,onMessageFromWorkers:P8}=Ye(),v8=_a(),OEe=require("util"),B8=require("child_process"),H8=require("fs"),{execFile:x8}=B8,be;pM.exports={enterPM2Mode:q8,start:mi,stop:CT,reload:aM,restart:cM,list:DT,describe:lM,connect:Cn,kill:$8,startAllServices:Y8,startService:LT,getUniqueServicesList:_M,restartAllServices:K8,isServiceRegistered:dM,reloadStopStart:fM,restartHdb:uM,deleteProcess:k8,startClusteringProcesses:hM,startClusteringThreads:mM,isHdbRestartRunning:V8,isClusteringRunning:Q8,stopClustering:W8,reloadClustering:z8};var Du=!1;P8(e=>{e.type==="restart"&&$d.initSync(!0)});function q8(){Du=!0}a(q8,"enterPM2Mode");function Cn(){return be||(be=require("pm2")),new Promise((e,t)=>{be.connect((r,s)=>{hi.setupConsoleLogging(),r&&t(r),e(s)})})}a(Cn,"connect");var mr,F8=10,oM;function mi(e,t=!1){if(Du)return G8(e);let r=x8(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=mr.indexOf(r);o>-1&&mr.splice(o,1),!oM&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<F8&&(H8.existsSync(wn.getHubConfigPath())?mi(e):(await wn.generateNatsConfig(!0),mi(e),await new Promise(c=>setTimeout(c,3e3)),await wn.removeNatsConfig(Ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await wn.removeNatsConfig(Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let s={serviceName:e.name.replace(/ /g,"-")};function n(i){let o=$d.get(Ce.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,u,_=0,l;for(;u=c.exec(i);){if(u.index&&tn.LOG_LEVEL_HIERARCHY[o]>=tn.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===tn.LOG_LEVELS.ERR||l===tn.LOG_LEVELS.WRN?hi.OUTPUTS.STDERR:hi.OUTPUTS.STDOUT;hi.logCustomLevel(l||"info",E,s,i.slice(_,u.index).trim())}let[d,f]=u;_=u.index+d.length,l=tn.LOG_LEVELS[f]}if(tn.LOG_LEVEL_HIERARCHY[o]>=tn.LOG_LEVEL_HIERARCHY[l||"info"]){let d=l===tn.LOG_LEVELS.ERR||l===tn.LOG_LEVELS.WRN?hi.OUTPUTS.STDERR:hi.OUTPUTS.STDOUT;hi.logCustomLevel(l||"info",d,s,i.slice(_).trim())}}if(a(n,"extractMessages"),r.stdout.on("data",n),r.stderr.on("data",n),r.unref(),mr=[],!mr&&!t){let i=a(()=>{oM=!0,mr&&(mr.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)}mr.push(r)}a(mi,"start");function G8(e){return new Promise(async(t,r)=>{try{await Cn()}catch(s){r(s)}be.start(e,(s,n)=>{s&&(be.disconnect(),r(s)),be.disconnect(),t(n)})})}a(G8,"startWithPM2");function CT(e){if(!Du){for(let t of mr||[])t.name===e&&(mr.splice(mr.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Cn()}catch(s){r(s)}be.stop(e,async(s,n)=>{s&&(be.disconnect(),r(s)),be.delete(e,(i,o)=>{i&&(be.disconnect(),r(s)),be.disconnect(),t(o)})})})}a(CT,"stop");function aM(e){return new Promise(async(t,r)=>{try{await Cn()}catch(s){r(s)}be.reload(e,(s,n)=>{s&&(be.disconnect(),r(s)),be.disconnect(),t(n)})})}a(aM,"reload");function cM(e){if(!Du)for(let t of mr||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await Cn()}catch(s){r(s)}be.restart(e,(s,n)=>{be.disconnect(),t(n)})})}a(cM,"restart");function k8(e){return new Promise(async(t,r)=>{try{await Cn()}catch(s){r(s)}be.delete(e,(s,n)=>{s&&(be.disconnect(),r(s)),be.disconnect(),t(n)})})}a(k8,"deleteProcess");async function uM(){await mi(Ei.generateRestart())}a(uM,"restartHdb");async function V8(){let e=await DT();for(let t in e)if(e[t].name===Ce.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(V8,"isHdbRestartRunning");function DT(){return new Promise(async(e,t)=>{try{await Cn()}catch(r){t(r)}be.list((r,s)=>{r&&(be.disconnect(),t(r)),be.disconnect(),e(s)})})}a(DT,"list");function lM(e){return new Promise(async(t,r)=>{try{await Cn()}catch(s){r(s)}be.describe(e,(s,n)=>{s&&(be.disconnect(),r(s)),be.disconnect(),t(n)})})}a(lM,"describe");function $8(){if(!Du){for(let e of mr||[])e.kill();mr=[];return}return new Promise(async(e,t)=>{try{await Cn()}catch(r){t(r)}be.killDaemon((r,s)=>{r&&(be.disconnect(),t(r)),be.disconnect(),e(s)})})}a($8,"kill");async function Y8(){try{await hM(),await mM(),await mi(Ei.generateAllServiceConfigs())}catch(e){throw be?.disconnect(),e}}a(Y8,"startAllServices");async function LT(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case Ce.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=Ei.generateMainServerConfig();break;case Ce.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=Ei.generateNatsIngestServiceConfig();break;case Ce.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=Ei.generateNatsReplyServiceConfig();break;case Ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=Ei.generateNatsHubServerConfig(),await mi(r,t),await wn.removeNatsConfig(e);return;case Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=Ei.generateNatsLeafServerConfig(),await mi(r,t),await wn.removeNatsConfig(e);return;case Ce.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=Ei.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await mi(r)}catch(r){throw be?.disconnect(),r}}a(LT,"startService");async function _M(){try{let e=await DT(),t={};for(let r=0,s=e.length;r<s;r++){let n=e[r];t[n.name]===void 0&&(t[n.name]={name:n.name,exec_mode:n.pm2_env.exec_mode})}return t}catch(e){throw be?.disconnect(),e}}a(_M,"getUniqueServicesList");async function K8(e=[]){try{let t=!1,r=await _M();for(let s=0,n=Object.values(r).length;s<n;s++){let o=Object.values(r)[s].name;e.includes(o)||(o===Ce.PROCESS_DESCRIPTORS.HDB?t=!0:await cM(o))}t&&await fM(Ce.PROCESS_DESCRIPTORS.HDB)}catch(t){throw be?.disconnect(),t}}a(K8,"restartAllServices");async function dM(e){if(mr?.find(r=>r.name===e))return!0;let t=await v8.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(dM,"isServiceRegistered");async function fM(e){let t=e===Ce.PROCESS_DESCRIPTORS.HDB?$d.get(Ce.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):$d.get(Ce.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await lM(e),s=U8.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await CT(e),await LT(e)):e===Ce.PROCESS_DESCRIPTORS.HDB?await uM():await aM(e)}a(fM,"reloadStopStart");var EM;async function hM(e=!1){for(let t in Ce.CLUSTERING_PROCESSES){let r=Ce.CLUSTERING_PROCESSES[t];await LT(r,e)}}a(hM,"startClusteringProcesses");async function mM(){EM=iM(Ce.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Ce.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await Cu.createWorkQueueStream(tn.WORK_QUEUE_CONSUMER_NAMES),await Cu.updateIngestStreamConsumer(),await Cu.updateLocalStreams();let e=await M8.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Ce.PRE_4_0_0_VERSION){hi.info("Starting clustering upgrade 4.0.0 process"),iM(Ce.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(mM,"startClusteringThreads");async function W8(){for(let e in Ce.CLUSTERING_PROCESSES)if(e!==Ce.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===Ce.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await EM.terminate();else{let t=Ce.CLUSTERING_PROCESSES[e];await CT(t)}}a(W8,"stopClustering");async function Q8(){for(let e in Ce.CLUSTERING_PROCESSES){let t=Ce.CLUSTERING_PROCESSES[e];if(await dM(t)===!1)return!1}return!0}a(Q8,"isClusteringRunning");async function z8(){await wn.generateNatsConfig(!0),await Cu.reloadNATSHub(),await Cu.reloadNATSLeaf(),await wn.removeNatsConfig(Ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await wn.removeNatsConfig(Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(z8,"reloadClustering")});var Qd=T((yEe,NM)=>{"use strict";var J8=require("minimist"),{isMainThread:PT,parentPort:RM}=require("worker_threads"),it=D(),{PROCESS_DESCRIPTORS_VALIDATE:Lu}=it,rn=G(),vT=z(),Yd=wT(),ma=nt(),UT=qe(),AM=Pr(),sn=SM(),TM=_a(),X8=lh(),{restartWorkers:Kd,onMessageByType:j8}=Ye(),{handleHDBError:Z8,hdb_errors:e6}=Z(),{HTTP_STATUS_CODES:t6}=e6,Wd=j();Wd.initSync();var Uu=`Restarting HarperDB. This may take up to ${it.RESTART_TIMEOUT_MS/1e3} seconds.`,r6="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",gM="Clustering is not enabled so cannot be restarted",s6="Invalid service",pa,as;NM.exports={restart:OM,restartService:BT};PT&&j8(it.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?BT({service:e.workerType}):OM({operation:"restart"})});async function OM(e){as=Object.keys(e).length===0,pa=await sn.isServiceRegistered(it.HDB_PROC_DESCRIPTOR);let t=J8(process.argv);if(t.service){await BT(t);return}if(as&&!pa){console.error(r6);return}if(as&&console.log(Uu),pa){sn.enterPM2Mode(),rn.notify(Uu);let r=X8(Object.keys(it.CONFIG_PARAM_MAP),!0);return vT.isEmptyOrZeroLength(Object.keys(r))||AM.updateConfigValue(void 0,void 0,r,!0,!0),i6(),Uu}return PT?(rn.notify(Uu),setTimeout(()=>{Kd()},50)):RM.postMessage({type:it.ITC_EVENT_TYPES.RESTART}),Uu}a(OM,"restart");async function BT(e){let{service:t}=e;if(it.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw Z8(new Error,s6,t6.BAD_REQUEST,void 0,void 0,!0);if(pa=await sn.isServiceRegistered(it.HDB_PROC_DESCRIPTOR),!PT)return RM.postMessage({type:it.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case Lu.clustering:if(!Wd.get(it.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=gM;break}as&&console.log("Restarting clustering"),rn.notify("Restarting clustering"),await bM();break;case Lu.clustering_config:case Lu["clustering config"]:if(!Wd.get(it.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=gM;break}as&&console.log("Restarting clustering_config"),rn.notify("Restarting clustering_config"),await sn.reloadClustering();break;case"custom_functions":case"custom functions":case Lu.harperdb:case Lu.http_workers:if(as&&!pa){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}as&&console.log("Restarting http_workers"),rn.notify("Restarting http_workers"),as?await sn.restart(it.HDB_PROC_DESCRIPTOR):setTimeout(()=>{Kd("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(rn.error(r),as&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(BT,"restartService");async function n6(){await ma.publishToStream(`${UT.SUBJECT_PREFIXES.TXN}.${UT.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,UT.WORK_QUEUE_CONSUMER_NAMES.stream_name,ma.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(n6,"postDummyNatsMsg");async function i6(){await bM(),await sn.restart(it.HDB_PROC_DESCRIPTOR),await vT.async_set_timeout(2e3),Wd.get(it.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await MT(),as&&(await ma.closeConnection(),process.exit(0))}a(i6,"restartPM2Mode");async function bM(){if(!AM.getConfigFromFile(it.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await TM.getHDBProcessInfo()).clustering.length===0)rn.trace("Clustering not running, restart will start clustering services"),await Yd.generateNatsConfig(!0),await sn.startClusteringProcesses(),await sn.startClusteringThreads(),await MT(),as&&await ma.closeConnection();else{await n6(),await Yd.generateNatsConfig(!0),pa?(rn.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await sn.restart(it.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await sn.restart(it.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await TM.getHDBProcessInfo()).clustering.forEach(n=>{rn.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await vT.async_set_timeout(3e3),await MT(),await ma.updateLocalStreams(),as&&await ma.closeConnection(),rn.trace("Restart clustering restarting ingest and reply service threads");let t=Kd(it.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=Kd(it.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(bM,"restartClustering");async function MT(){await Yd.removeNatsConfig(it.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Yd.removeNatsConfig(it.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(MT,"removeNatsConfig")});var BM=T((CEe,vM)=>{"use strict";var wEe=require("lodash"),pr=D(),{handleHDBError:yM,hdb_errors:o6}=Z(),{HDB_ERROR_MSGS:a6,HTTP_STATUS_CODES:c6}=o6,HT=G();vM.exports={getRolePermissions:l6};var lo=Object.create(null),u6=a(e=>({key:e,perms:{}}),"perms_template_obj"),DM=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),LM=a((e=!1,t=!1,r=!1,s=!1)=>({[pr.PERMS_CRUD_ENUM.READ]:e,[pr.PERMS_CRUD_ENUM.INSERT]:t,[pr.PERMS_CRUD_ENUM.UPDATE]:r,[pr.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),xT=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...LM(t,r,s,n)}),"table_perms_template"),IM=a((e,t=LM())=>({attribute_name:e,describe:PM(t),[Mu]:t[Mu],[qT]:t[qT],[FT]:t[FT]}),"attr_perms_template"),wM=a((e,t=!1)=>({attribute_name:e,describe:t,[Mu]:t}),"timestamp_attr_perms_template"),{READ:Mu,INSERT:qT,UPDATE:FT}=pr.PERMS_CRUD_ENUM,UM=Object.values(pr.PERMS_CRUD_ENUM),MM=[Mu,qT,FT];function l6(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[pr.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(lo[t]&&lo[t].key===s)return lo[t].perms;let n=_6(e,r);return lo[t]?lo[t].key=s:lo[t]=u6(s),lo[t].perms=n,n}catch(r){if(!e[pr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[pr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<pr.PERMS_UPDATE_RELEASE_TIMESTAMP){let s=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw HT.error(s),HT.debug(r),yM(new Error,a6.OUTDATED_PERMS_TRANSLATION_ERROR,c6.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
|
|
11
|
+
${r.stack}`;throw HT.error(s),yM(new Error)}}}a(l6,"getRolePermissions");function _6(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[pr.SYSTEM_SCHEMA_NAME]=s[pr.SYSTEM_SCHEMA_NAME],r.structure_user=s.structure_user;let n=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(n===!0||n.indexOf(i)>-1){r[i]=d6(t[i]);return}r[i]=DM(),s[i]?(s[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(s[i].tables[o]){let c=s[i].tables[o],u=t[i][o],_=f6(c,u);r[i].describe||UM.forEach(l=>{_[l]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=xT()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=xT()})}),r}a(_6,"translateRolePermissions");function d6(e){let t=DM(!0);return Object.keys(e).forEach(r=>{t.tables[r]=xT(!0,!0,!0,!0,!0)}),t}a(d6,"createStructureUserPermissions");function f6(e,t){let{attribute_permissions:r}=e;if(r.length>0){let n=Object.assign({},e);n.attribute_permissions=[];let i=r.reduce((_,l)=>{let{attribute_name:d}=l,f=l;return pr.TIME_STAMP_NAMES.includes(d)&&(f=wM(d,l[Mu])),_[d]=f,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=IM(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let l=i[_];l.describe=PM(l),n.attribute_permissions.push(l),c||E6(l,u)}else if(_!==o){let l;pr.TIME_STAMP_NAMES.includes(_)?l=wM(_):l=IM(_),n.attribute_permissions.push(l)}}),c||n.attribute_permissions.push(u),n.describe=CM(n),n}else return e.describe=CM(e),e}a(f6,"getTableAttrPerms");function CM(e){return UM.filter(t=>e[t]).length>0}a(CM,"getSchemaTableDescribePerm");function PM(e){return MM.filter(t=>e[t]).length>0}a(PM,"getAttributeDescribePerm");function E6(e,t){MM.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(E6,"checkForHashPerms")});var HM={};$e(HM,{Resources:()=>zd,keyArrayToString:()=>Sa,resetResources:()=>h6,resources:()=>pi});function h6(){return pi=new zd}function Sa(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var zd,pi,Pu=Ae(()=>{Xi();zd=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;set(t,r,s,n){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,type:s,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!n)throw new Error(`Conflicting paths for ${t}`);super.set(t,i);for(let[c,u]of this){let _=2;for(;(_=c.indexOf("/",_))>-1;){let l=this.get(c.slice(0,_));l&&(l.hasSubPaths=!0),_+=2}}}getMatch(t,r){let s=2,n;for(;(s=t.indexOf("/",s))>-1;){let c=t.slice(0,s),u=this.get(c);if(u){if(u.relativeURL=t.slice(s),!u.hasSubPaths)return u;n=u}s+=2}if(n)return n;let i=t.indexOf("?"),o=i>-1?t.slice(0,i):t;return n=this.get(o),n?n.relativeURL=i>-1?t.slice(i):"":n||(n=this.get(""),n&&(t[0]!=="/"&&(t="/"+t),n.relativeURL=t)),n}getResource(t,r){let s=this.getMatch(t);if(s)return t=s.relativeURL,s.Resource.getResource(this.pathToId(t,s.Resource),r)}call(t,r,s){return Xe(r,async()=>{let n=this.getMatch(t);if(n)return t=n.relativeURL,s(n.Resource,n.path,t)})}setRepresentation(t,r,s){}};a(h6,"resetResources");a(Sa,"keyArrayToString")});var xM={};$e(xM,{Headers:()=>Si});var Si,Jd=Ae(()=>{Si=class extends Map{static{a(this,"Headers")}set(t,r){return typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r),super.set(t.toLowerCase(),[t,r])}get(t){return typeof t!="string"&&(t=""+t),super.get(t.toLowerCase())?.[1]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase();if(!super.has(s))return super.set(s,[t,r])}append(t,r,s){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase(),i=super.get(n);if(i){let o=i[1];s?r=(typeof o=="string"?o:o.join(", "))+", "+r:typeof o=="string"?r=[o,r]:o.push(r)}return super.set(n,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}}});var vu={};$e(vu,{authentication:()=>KM,bypassAuth:()=>A6,login:()=>b6,logout:()=>N6,start:()=>O6});function A6(){YM=!0}async function KM(e,t){let r=e.headers.asObject,s=r.authorization,n=r.cookie,i=r.origin,o=[];try{if(i){let E=e.isOperationsServer?T6?S6:[]:p6?m6:[];if(E.includes(i)||E.includes("*")){if(e.method==="OPTIONS"){let h=new Si([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return Xd&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),Xd&&o.push("Access-Control-Allow-Credentials","true")}}let u,_;if(Xd){let E=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=n?.indexOf(E);if(h>=0){let p=n.indexOf(";",h),S=n.indexOf("=",h);u=n.slice(S+1,p===-1?n.length:p),_=await FM.get(u)}e.session=_||(_={})}e.user=null;let l=a((E,h,p)=>{let S=new Zd.AuthAuditLog(E,h,kt.AUTH_AUDIT_TYPES.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);S.auth_strategy=p,u&&(S.session_id=u),r.referer&&(S.referer=r.referer),r.origin&&(S.origin=r.origin),h===kt.AUTH_AUDIT_STATUS.SUCCESS?qM.notify(S):qM.error(S)},"authAuditLog"),d;if(s){if(d=_o.get(s),!d){let[E,h]=s.split(" "),p,S;try{switch(E){case"Basic":[p,S]=atob(h).split(":"),d=p||S?await _t.getUser(p,S,e):null;break;case"Bearer":try{d=await(0,jd.validateOperationToken)(h)}catch(R){if(R.message==="invalid token")try{return await(0,jd.validateRefreshToken)(h),c({status:-1})}catch{throw R}}break}}catch(R){return R6&&(_o.get(h)||(_o.set(h,h),l(p,kt.AUTH_AUDIT_STATUS.FAILURE,E))),c({status:401,body:Ti({error:R.message},e)})}_o.set(s,d),g6&&l(d.username,kt.AUTH_AUDIT_STATUS.SUCCESS,E)}e.user=d}else _?.user?e.user=await _t.getUser(_.user,null,e):(YM&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,kM.getSuperUser)());Xd&&(e.session.update=function(E){if(!u){u=(0,VM.v4)();let p=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${u}; Path=/; Expires=Tue, 01 Oct 8307 19:33:20 GMT; HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",p):f?.headers?.set&&f.headers.set("Set-Cookie",p)}return e.protocol==="https"&&(o?(i&&o.push("Access-Control-Expose-Headers","X-Hdb-Session"),o.push("X-Hdb-Session","Secure")):f?.headers?.set&&(i&&f.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),f.headers.set("X-Hdb-Session","Secure"))),E.id=u,FM.put(E)},e.login=async function(E,h){e.user=await _t.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")&&pi.loginPath?(f.status=302,f.headers.set("Location",pi.loginPath(e))):f.headers.set("WWW-Authenticate","Basic")),c(f))}catch(u){throw c(u)}function c(u){let _=o.length;if(_>0){let l=u.headers;l||(u.headers=l=new Si);for(let d=0;d<_;){let f=o[d++];l.set(f,o[d++])}}return o=null,u}a(c,"applyResponseHeaders")}function O6({server:e,port:t}){e.request(KM,{port:t||"all"}),GM||(GM=!0,setInterval(()=>{_o=new Map},cs.get(kt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),$M.user.addListener(()=>{_o=new Map}))}async function b6(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 N6(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var kM,jd,VM,cs,kt,Zd,$M,qM,m6,p6,S6,T6,FM,Xd,YM,g6,R6,_o,GM,ef=Ae(()=>{kM=v(rs());sr();Pu();jd=v(hu());ge();VM=require("uuid"),cs=v(j()),kt=v(D()),Zd=v(G()),$M=v(Bc());Jd();Ta();qM=(0,Zd.loggerWithTag)("auth-event");cs.initSync();m6=cs.get(kt.CONFIG_PARAMS.HTTP_CORSACCESSLIST),p6=cs.get(kt.CONFIG_PARAMS.HTTP_CORS),S6=cs.get(kt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),T6=cs.get(kt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),FM=dt({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),Xd=cs.get(kt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,YM=cs.get(kt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,g6=cs.get(kt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,R6=cs.get(kt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,_o=new Map;_t.onInvalidatedUser(()=>{_o=new Map});a(A6,"bypassAuth");a(KM,"authentication");a(O6,"start");a(b6,"login");a(N6,"logout")});var ZM=T((FEe,jM)=>{"use strict";var Ne=require("joi"),WM=require("fs-extra"),QM=require("path"),Ln=Je(),zM=j(),JM=D(),XM=G(),{hdb_errors:y6}=Z(),{HDB_ERROR_MSGS:jt}=y6,Dn=/^[a-zA-Z0-9-_]+$/;jM.exports={getDropCustomFunctionValidator:w6,setCustomFunctionValidator:C6,addComponentValidator:M6,dropCustomFunctionProjectValidator:P6,packageComponentValidator:v6,deployComponentValidator:B6,setComponentFileValidator:D6,getComponentFileValidator:U6,dropComponentFileValidator:L6};function tf(e,t,r){try{let s=zM.get(JM.CONFIG_PARAMS.COMPONENTSROOT),n=QM.join(s,t);return WM.existsSync(n)?e?t:r.message(jt.PROJECT_EXISTS):e?r.message(jt.NO_PROJECT):t}catch(s){return XM.error(s),r.message(jt.VALIDATION_ERR)}}a(tf,"checkProjectExists");function Bu(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(Bu,"checkFilePath");function I6(e,t,r,s){try{let n=zM.get(JM.CONFIG_PARAMS.COMPONENTSROOT),i=QM.join(n,e,t,r+".js");return WM.existsSync(i)?r:s.message(jt.NO_FILE)}catch(n){return XM.error(n),s.message(jt.VALIDATION_ERR)}}a(I6,"checkFileExists");function w6(e){let t=Ne.object({project:Ne.string().pattern(Dn).custom(tf.bind(null,!0)).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),type:Ne.string().valid("helpers","routes").required(),file:Ne.string().pattern(Dn).custom(I6.bind(null,e.project,e.type)).custom(Bu).required().messages({"string.pattern.base":jt.BAD_FILE_NAME})});return Ln.validateBySchema(e,t)}a(w6,"getDropCustomFunctionValidator");function C6(e){let t=Ne.object({project:Ne.string().pattern(Dn).custom(tf.bind(null,!0)).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),type:Ne.string().valid("helpers","routes").required(),file:Ne.string().custom(Bu).required(),function_content:Ne.string().required()});return Ln.validateBySchema(e,t)}a(C6,"setCustomFunctionValidator");function D6(e){let t=Ne.object({project:Ne.string().pattern(Dn).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),file:Ne.string().custom(Bu).required(),payload:Ne.string().allow("").optional(),encoding:Ne.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Ln.validateBySchema(e,t)}a(D6,"setComponentFileValidator");function L6(e){let t=Ne.object({project:Ne.string().pattern(Dn).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),file:Ne.string().custom(Bu).optional()});return Ln.validateBySchema(e,t)}a(L6,"dropComponentFileValidator");function U6(e){let t=Ne.object({project:Ne.string().required(),file:Ne.string().custom(Bu).required(),encoding:Ne.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Ln.validateBySchema(e,t)}a(U6,"getComponentFileValidator");function M6(e){let t=Ne.object({project:Ne.string().pattern(Dn).custom(tf.bind(null,!1)).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME})});return Ln.validateBySchema(e,t)}a(M6,"addComponentValidator");function P6(e){let t=Ne.object({project:Ne.string().pattern(Dn).custom(tf.bind(null,!0)).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME})});return Ln.validateBySchema(e,t)}a(P6,"dropCustomFunctionProjectValidator");function v6(e){let t=Ne.object({project:Ne.string().pattern(Dn).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),skip_node_modules:Ne.boolean()});return Ln.validateBySchema(e,t)}a(v6,"packageComponentValidator");function B6(e){let t=Ne.object({project:Ne.string().pattern(Dn).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),payload:Ne.string().optional().messages({"string.pattern.base":jt.BAD_PACKAGE}),package:Ne.string().optional()});return Ln.validateBySchema(e,t)}a(B6,"deployComponentValidator")});var of=T((kEe,oP)=>{"use strict";var rf=require("joi"),sf=require("path"),eP=require("fs-extra"),{exec:H6}=require("child_process"),x6=require("util"),tP=x6.promisify(H6),Hu=D(),{handleHDBError:ga,hdb_errors:q6}=Z(),{HTTP_STATUS_CODES:Ra}=q6,xu=j(),F6=Je(),Aa=G();xu.initSync();var GT=xu.get(Hu.CONFIG_PARAMS.COMPONENTSROOT),rP="npm install --omit=dev --json",G6=`${rP} --dry-run`;oP.exports={installModules:Y6,auditModules:K6,installAllRootModules:k6,uninstallRootModule:V6,linkHarperdb:$6};async function k6(e=!1){await nf(),await qu(e?"npm install --ignore-scripts":"npm install",xu.get(Hu.CONFIG_PARAMS.ROOTPATH))}a(k6,"installAllRootModules");async function V6(e){await qu(`npm uninstall ${e}`,xu.get(Hu.CONFIG_PARAMS.ROOTPATH))}a(V6,"uninstallRootModule");async function $6(){await nf(),await qu(`npm link ${Hu.PACKAGE_ROOT}`,xu.get(Hu.CONFIG_PARAMS.ROOTPATH))}a($6,"linkHarperdb");async function qu(e,t=void 0){let r,s;try{({stdout:r,stderr:s}=await tP(e,{cwd:t}))}catch(n){throw new Error(n.stderr.replace(`
|
|
12
|
+
`,""))}return s&&!s.includes("Debugger listening")&&Aa.error("Error running NPM command:",e,s),Aa.trace(r,s),r?.replace(`
|
|
13
|
+
`,"")}a(qu,"runCommand");async function Y6(e){Aa.info(`starting installModules for request: ${e}`);let t=iP(e);if(t)throw ga(t,t.message,Ra.BAD_REQUEST);let{projects:r,dry_run:s}=e,n=s===!0?G6:rP;await nf(),await nP(r);let i={};for(let o=0,c=r.length;o<c;o++){let u=r[o];i[u]={npm_output:null,npm_error:null};let _=sf.join(GT,u),l,d=null;try{let{stdout:f,stderr:E}=await tP(n,{cwd:_});l=f?f.replace(`
|
|
14
14
|
`,""):null,d=E?E.replace(`
|
|
15
|
-
`,""):null}catch(f){f.stderr?i[u].npm_error=
|
|
16
|
-
`);return r>-1&&s>-1?JSON.parse(e.substring(r+t.length-1,s+1)):e}a(tP,"parseNPMStdErr");async function m6(e){Ra.info(`starting auditModules for request: ${e}`);let t=sP(e);if(t)throw Ta(t,t.message,ga.BAD_REQUEST);let{projects:r}=e;await af(),await rP(r);let s={};for(let n=0,i=r.length;n<i;n++){let o=r[n],c=of.join(MT,o);s[o]={npm_output:null,npm_error:null};try{let u=await Hu("npm audit --json",c);s[o].npm_output=JSON.parse(u)}catch(u){s[o].npm_error=tP(u.stderr)}}return Ra.info(`finished auditModules with response ${s}`),s}a(m6,"auditModules");async function af(){try{return await Hu("npm -v"),!0}catch{throw Ta(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",ga.BAD_REQUEST,void 0,void 0,!0)}}a(af,"checkNPMInstalled");async function rP(e){if(!Array.isArray(e)||e.length===0)throw Ta(new Error,"projects argument must be an array with at least 1 element",ga.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let s=0,n=e.length;s<n;s++){let i=e[s],o=of.join(MT,i.toString());if(!await jM.pathExists(o)){t.push(i);continue}let u=of.join(o,"package.json");await jM.pathExists(u)||r.push(i)}if(t.length>0)throw Ta(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,ga.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Ta(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,ga.BAD_REQUEST,void 0,void 0,!0)}a(rP,"checkProjectPaths");function sP(e){let t=nf.object({projects:nf.array().min(1).items(nf.string()).required(),dry_run:nf.boolean().default(!1)});return l6.validateBySchema(e,t)}a(sP,"modulesValidator")});var vT=T((Jfe,uP)=>{"use strict";var Aa=require("fs-extra"),PT=require("path"),uf=G(),iP=W(),lf=I(),cP=j(),p6=vr();uP.exports=S6;async function S6(){let e=T6(),t=cP.get(lf.CONFIG_PARAMS.ROOTPATH),r=PT.join(t,"package.json"),s={dependencies:{harperdb:"file:"+lf.PACKAGE_ROOT}},n=PT.join(t,"node_modules");await Aa.ensureDir(n);let i,o=!0,c=!1;try{i=await Aa.readJson(r)}catch(u){if(iP.isEmptyOrZeroLength(e))return;if(u.code!==lf.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!iP.isEmptyOrZeroLength(e)){for(let{name:u,package:_}of e){let l=await oP(_);s.dependencies[u]=l+_}if(!o){uf.notify("Installing components"),await aP(r,s,null);return}for(let{name:u,package:_}of e){let l=i.dependencies[u],d=await oP(_);if(l===void 0||l!==d+_){c=!0;break}}}for(let u in i.dependencies)s.dependencies[u]===void 0&&(uf.notify("Removing component",u),c=!0);c&&(uf.notify("Updating components."),await aP(r,s,i))}a(S6,"installComponents");function T6(){let e=p6.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(T6,"getComponentsConfig");async function oP(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":PT.extname(e)||await Aa.pathExists(e)?"file:":"github:"}a(oP,"getPkgPrefix");async function aP(e,t,r){uf.trace("npm installing components package.json",t),await Aa.writeFile(e,JSON.stringify(t,null," "));try{await cf().installAllRootModules(cP.get(lf.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(s){throw r?await Aa.writeFile(e,JSON.stringify(r,null," ")):await Aa.unlink(e),s}}a(aP,"installPackages")});var xT=T((Zfe,fP)=>{"use strict";var ke=require("fs-extra"),BT=require("fast-glob"),fe=require("path"),_P=require("tar-fs"),jfe=require("uuid").v4,HT=require("normalize-path"),an=XM(),yt=G(),Ye=I(),St=j(),xu=vr(),g6=W(),{PACKAGE_ROOT:R6}=I(),{handleHDBError:Pt,hdb_errors:A6}=Z(),{basename:O6}=require("path"),b6=vT(),dP=j(),N6=I(),{Readable:y6}=require("stream"),{isMainThread:I6}=require("worker_threads"),{HDB_ERROR_MSGS:uo,HTTP_STATUS_CODES:vt}=A6,w6=fe.join(R6,"application-template"),lP=fe.join(St.get(Ye.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function C6(){yt.trace("getting custom api status");let e={};try{e={port:St.get(Ye.CONFIG_PARAMS.HTTP_PORT),directory:St.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Pt(new Error,uo.FUNCTION_STATUS,vt.INTERNAL_SERVER_ERROR,yt.ERR,t)}return e}a(C6,"customFunctionsStatus");function D6(){yt.trace("getting custom api endpoints");let e={},t=St.get(Ye.CONFIG_PARAMS.COMPONENTSROOT);try{BT.sync(HT(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:BT.sync(HT(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:BT.sync(HT(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Pt(new Error,uo.GET_FUNCTIONS,vt.INTERNAL_SERVER_ERROR,yt.ERR,r)}return e}a(D6,"getCustomFunctions");function L6(e){e.project&&(e.project=fe.parse(e.project).name),e.file&&(e.file=fe.parse(e.file).name);let t=an.getDropCustomFunctionValidator(e);if(t)throw Pt(t,t.message,vt.BAD_REQUEST);yt.trace("getting custom api endpoint file content");let r=St.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i}=e,o=fe.join(r,s,n,i+".js");try{return ke.readFileSync(o,{encoding:"utf8"})}catch(c){throw Pt(new Error,uo.GET_FUNCTION,vt.INTERNAL_SERVER_ERROR,yt.ERR,c)}}a(L6,"getCustomFunction");function U6(e){e.project&&(e.project=fe.parse(e.project).name),e.file&&(e.file=fe.parse(e.file).name);let t=an.setCustomFunctionValidator(e);if(t)throw Pt(t,t.message,vt.BAD_REQUEST);yt.trace("setting custom function file content");let r=St.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i,function_content:o}=e;try{return ke.outputFileSync(fe.join(r,s,n,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw Pt(new Error,uo.SET_FUNCTION,vt.INTERNAL_SERVER_ERROR,yt.ERR,c)}}a(U6,"setCustomFunction");function M6(e){e.project&&(e.project=fe.parse(e.project).name),e.file&&(e.file=fe.parse(e.file).name);let t=an.getDropCustomFunctionValidator(e);if(t)throw Pt(t,t.message,vt.BAD_REQUEST);yt.trace("dropping custom function file");let r=St.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i}=e;try{return ke.unlinkSync(fe.join(r,s,n,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw Pt(new Error,uo.DROP_FUNCTION,vt.INTERNAL_SERVER_ERROR,yt.ERR,o)}}a(M6,"dropCustomFunction");function P6(e){e.project&&(e.project=fe.parse(e.project).name);let t=an.addComponentValidator(e);if(t)throw Pt(t,t.message,vt.BAD_REQUEST);yt.trace("adding component");let r=St.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e;try{let n=fe.join(r,s);return ke.mkdirSync(n,{recursive:!0}),ke.copySync(w6,n),`Successfully added project: ${s}`}catch(n){throw Pt(new Error,uo.ADD_FUNCTION,vt.INTERNAL_SERVER_ERROR,yt.ERR,n)}}a(P6,"addComponent");function v6(e){e.project&&(e.project=fe.parse(e.project).name);let t=an.dropCustomFunctionProjectValidator(e);if(t)throw Pt(t,t.message,vt.BAD_REQUEST);yt.trace("dropping custom function project");let r=St.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e,n=St.get(Ye.CONFIG_PARAMS.APPS);if(!g6.isEmptyOrZeroLength(n)){let i=!1;for(let[o,c]of n.entries())if(c.name===s){n.splice(o,1),i=!0;break}if(i)return xu.updateConfigValue(Ye.CONFIG_PARAMS.APPS,n),`Successfully deleted project: ${s}`}try{let i=fe.join(r,s);return ke.rmSync(i,{recursive:!0}),`Successfully deleted project: ${s}`}catch(i){throw Pt(new Error,uo.DROP_FUNCTION_PROJECT,vt.INTERNAL_SERVER_ERROR,yt.ERR,i)}}a(v6,"dropCustomFunctionProject");async function B6(e){e.project&&(e.project=fe.parse(e.project).name);let t=an.packageComponentValidator(e);if(t)throw Pt(t,t.message,vt.BAD_REQUEST);let r=St.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e;yt.trace("packaging component",s);let n;try{n=await ke.realpath(fe.join(r,s))}catch(u){if(u.code!==Ye.NODE_ERROR_CODES.ENOENT)throw u;try{n=await ke.realpath(fe.join(St.get(Ye.CONFIG_PARAMS.ROOTPATH),"node_modules",s))}catch(_){if(_.code===Ye.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${s}'`)}}await ke.ensureDir(lP);let i=fe.join(lP,`${s}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(fe.join(n,"node_modules"))}),_P.pack(n,o).pipe(ke.createWriteStream(i,{overwrite:!0})),await new Promise(u=>setTimeout(u,2e3));let c=ke.readFileSync(i,{encoding:"base64"});return await ke.remove(i),{project:s,payload:c}}a(B6,"packageComponent");async function H6(e){e.project&&(e.project=fe.parse(e.project).name);let t=an.deployComponentValidator(e);if(t)throw Pt(t,t.message,vt.BAD_REQUEST);let r=St.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),{project:s,payload:n,package:i}=e;if(yt.trace("deploying component",s),!n&&!i)throw new Error("'payload' or 'package' must be provided");let o;if(n){o=fe.join(r,s),i="file:"+o,await ke.ensureDir(o);let f=y6.from(Buffer.from(n,"base64"));await new Promise((h,p)=>{f.pipe(_P.extract(o,{finish:h})).on("error",p)});let E=await ke.readdir(o);E.length===1&&E[0]==="package"&&(await ke.copy(fe.join(o,"package"),o),await ke.remove(fe.join(o,"package")))}if(await xu.addConfig(s,{package:i}),!n){await b6();let f=dP.get(N6.CONFIG_PARAMS.ROOTPATH);o=fe.join(f,"node_modules",s)}if(I6)return;let c=new Map;c.isWorker=!0;let u=(df(),te(_f)),_;u.setErrorReporter(f=>_=f);let l=O6(o),d=u.component_errors.get(l);try{await u.loadComponent(o,c)}finally{u.component_errors.set(l,d)}if(_)throw _;return yt.info("Installed component"),`Successfully deployed: ${s}`}a(H6,"deployComponent");async function x6(){let e=xu.getConfiguration(),t=[];for(let o in e)if(e[o]?.package){if(e[o].package.startsWith("file:"))continue;t.push(Object.assign({},e[o],{name:o}))}let r=a(async(o,c)=>{try{let u=await ke.readdir(o,{withFileTypes:!0});for(let _ of u){let l=_.name;if(l.startsWith(".")||l==="node_modules")continue;let d=fe.join(o,l);if(_.isDirectory()||_.isSymbolicLink()){let f={name:l,entries:[]};c.entries.push(f),await r(d,f)}else{let f=await ke.stat(d),E={name:fe.basename(l),mtime:f.mtime,size:f.size};c.entries.push(E)}}return c}catch(u){return yt.warn("Error loading package",u),{error:u.toString(),entries:[]}}},"walk_dir"),s=await r(St.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),{name:St.get(Ye.CONFIG_PARAMS.COMPONENTSROOT).split(fe.sep).slice(-1).pop(),entries:t});for(let o of s.entries)if(o.package){let c=await r(fe.join(St.get(Ye.CONFIG_PARAMS.ROOTPATH),"node_modules",o.name),{name:o.name,entries:[]});Object.assign(o,c)}let i=(df(),te(_f)).component_errors;for(let o of t){let c=i.get(o.name);c?o.error=i.get(o.name):c===void 0&&(o.error="The component has not been loaded yet (may need a restart)")}return s}a(x6,"getComponents");async function q6(e){let t=an.getComponentFileValidator(e);if(t)throw Pt(t,t.message,vt.BAD_REQUEST);let s=xu.getConfigObj()[e.project]||e.project==="harperdb"?fe.join(dP.get(Ye.CONFIG_PARAMS.ROOTPATH),"node_modules"):St.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),n=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await ke.stat(fe.join(s,e.project,e.file));return{message:await ke.readFile(fe.join(s,e.project,e.file),n),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===Ye.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${fe.join(e.project,e.file)}'`):i}}a(q6,"getComponentFile");async function F6(e){let t=an.setComponentFileValidator(e);if(t)throw Pt(t,t.message,vt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},s=fe.join(St.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);return e.payload!==void 0?(await ke.ensureFile(s),await ke.outputFile(s,e.payload,r)):await ke.ensureDir(s),"Successfully set component: "+e.file}a(F6,"setComponentFile");async function G6(e){let t=an.dropComponentFileValidator(e);if(t)throw Pt(t,t.message,vt.BAD_REQUEST);let r=e.file?fe.join(e.project,e.file):e.project,s=fe.join(St.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),r);return await ke.pathExists(s)&&await ke.remove(s),xu.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(G6,"dropComponent");fP.exports={customFunctionsStatus:C6,getCustomFunctions:D6,getCustomFunction:L6,setCustomFunction:U6,dropCustomFunction:M6,addComponent:P6,dropCustomFunctionProject:v6,packageComponent:B6,deployComponent:H6,getComponents:x6,getComponentFile:q6,setComponentFile:F6,dropComponent:G6}});var qT=T((tEe,hP)=>{"use strict";var cn=require("joi"),EP=ze();hP.exports={readTransactionLogValidator:k6,deleteTransactionLogsBeforeValidator:V6};function k6(e){let t=cn.object({schema:cn.string().required(),table:cn.string().required(),from:cn.date().timestamp(),to:cn.date().timestamp(),limit:cn.number().min(1)});return EP.validateBySchema(e,t)}a(k6,"readTransactionLogValidator");function V6(e){let t=cn.object({schema:cn.string().required(),table:cn.string().required(),timestamp:cn.date().timestamp().required()});return EP.validateBySchema(e,t)}a(V6,"deleteTransactionLogsBeforeValidator")});var Ef=T((sEe,gP)=>{"use strict";var FT=I(),ff=rt(),mP=W(),pP=j(),SP=Rn(),{handleHDBError:Oa,hdb_errors:$6}=Z(),{HTTP_STATUS_CODES:ba}=$6,{readTransactionLogValidator:Y6,deleteTransactionLogsBeforeValidator:K6}=qT(),TP="This operation relies on clustering and cannot run with it disable.",W6="Logs successfully deleted from transaction log.",Q6="All logs successfully deleted from transaction log.";gP.exports={readTransactionLog:z6,deleteTransactionLogsBefore:J6};async function*z6(e){let t=Y6(e);if(t)throw Oa(t,t.message,ba.BAD_REQUEST,void 0,void 0,!0);if(!pP.get(FT.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Oa(new Error,TP,ba.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=mP.checkSchemaTableExist(r,s);if(n)throw Oa(new Error,n,ba.NOT_FOUND,void 0,void 0,!0);let i=SP.createNatsTableStreamName(r,s),o=await ff.viewStreamIterator(i,parseInt(e.from),e.limit);for await(let c of o){let u=Math.floor(c?.nats_timestamp/1e6);if(e.to&&u>e.to)break;let _={operation:c?.entry?.operation,user:c?.entry?.__origin?.user,timestamp:u,records:c?.entry?.records,attributes:c?.entry?.attributes};c?.entry?.operation===FT.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(z6,"readTransactionLog");async function J6(e){let t=K6(e);if(t)throw Oa(t,t.message,ba.BAD_REQUEST,void 0,void 0,!0);if(!pP.get(FT.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Oa(new Error,TP,ba.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=mP.checkSchemaTableExist(r,s);if(i)throw Oa(new Error,i,ba.NOT_FOUND,void 0,void 0,!0);let o=SP.createNatsTableStreamName(r,s),{jsm:c}=await ff.getNATSReferences(),u=await ff.getStreamInfo(o),_=new Date(u.state.first_ts).getTime();if(n<=_)return`No transactions exist before: ${n}`;let l=W6,d,f=new Date(u.state.last_ts).getTime();return n>f?(d=u.state.last_seq+1,l=Q6):d=(await ff.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),l}a(J6,"deleteTransactionLogsBefore")});var AP=T((iEe,RP)=>{"use strict";var GT=class{static{a(this,"PermissionTableResponseObject")}constructor(t,r,s=[],n=[]){this.schema=t,this.table=r,this.required_table_permissions=s,this.required_attribute_permissions=n}};RP.exports=GT});var bP=T((aEe,OP)=>{"use strict";var kT=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};OP.exports=kT});var $T=T((uEe,yP)=>{"use strict";var NP=AP(),X6=bP(),{HDB_ERROR_MSGS:j6}=yr(),VT=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=j6.OP_AUTH_PERMS_ERROR,this.unauthorized_access={},this.invalid_schema_items=[]}handleUnauthorizedItem(t){return this.invalid_schema_items=[],this.unauthorized_access=[t],this}handleInvalidItem(t){return this.invalid_schema_items=[t],this.unauthorized_access=[],this}addInvalidItem(t,r,s){if(r&&s){let n=`${r}_${s}`;if(this.unauthorized_access[n])return}this.invalid_schema_items.push(t)}addUnauthorizedTable(t,r,s){let n=new NP(t,r,s),i=`${t}_${r}`;this.unauthorized_access[i]=n}addUnauthorizedAttributes(t,r,s,n){let i=[];t.forEach(c=>{let u=new X6(c,n[c]);i.push(u)});let o=`${r}_${s}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new NP(r,s,[],i);this.unauthorized_access[o]=c}}getPermsResponse(){let t=Object.values(this.unauthorized_access);return t.length>0||this.invalid_schema_items.length>0?(this.unauthorized_access=t,this):null}};yP.exports=VT});var Sf=T((_Ee,kP)=>{"use strict";var YT=Ur(),hf=os(),ps=au(),Gu=jn(),KT=ti(),Z6=sS(),e9=xD(),ku=cs(),mf=dS(),It=G(),t9=hS(),r9=Ud(),s9=XS(),n9=Pd(),i9=jS(),o9=ZS(),a9=rT(),c9=nT(),WT=aT(),Un=W(),u9=vU(),QT=dT(),CP=Xd(),ms=I(),DP=vM(),l9=la(),LP=fu(),UP=(rf(),te(Mu)),MP=vr(),$r=xT(),_9=require("alasql"),PP=Ef(),vP=cf(),BP=$T(),{handleHDBError:Tr,hdb_errors:HP}=Z(),{HDB_ERROR_MSGS:kt,HTTP_STATUS_CODES:qu}=HP,x=new Map,xP="delete",gi="insert",Mn="read",lo="update",Fu="describe",IP=Gu.describeSchema.name,wP=Gu.describeTable.name,qP={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},d9="catchup",f9="handleGetJob",E9="handleGetJobsByStartDate",pf={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},h9=[ps.createTable.name,ps.createAttribute.name,ps.dropTable.name,ps.dropAttribute.name],FP={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},k=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};x.set(YT.insert.name,new k(!1,[gi]));x.set(YT.update.name,new k(!1,[lo]));x.set(YT.upsert.name,new k(!1,[gi,lo]));x.set(hf.searchByConditions.name,new k(!1,[Mn]));x.set(hf.searchByHash.name,new k(!1,[Mn]));x.set(hf.searchByValue.name,new k(!1,[Mn]));x.set(hf.search.name,new k(!1,[Mn]));x.set(ps.createSchema.name,new k(!0,[]));x.set(ps.createTable.name,new k(!0,[]));x.set(ps.createAttribute.name,new k(!1,[gi]));x.set(ps.dropSchema.name,new k(!0,[]));x.set(ps.dropTable.name,new k(!0,[]));x.set(ps.dropAttribute.name,new k(!0,[]));x.set(Gu.describeSchema.name,new k(!1,[Mn]));x.set(Gu.describeTable.name,new k(!1,[Mn]));x.set(KT.deleteRecord.name,new k(!1,[xP]));x.set(ku.addUser.name,new k(!0,[]));x.set(ku.alterUser.name,new k(!0,[]));x.set(ku.dropUser.name,new k(!0,[]));x.set(ku.listUsersExternal.name,new k(!0,[]));x.set(mf.listRoles.name,new k(!0,[]));x.set(mf.addRole.name,new k(!0,[]));x.set(mf.alterRole.name,new k(!0,[]));x.set(mf.dropRole.name,new k(!0,[]));x.set(t9.name,new k(!0,[]));x.set(r9.name,new k(!0,[]));x.set(s9.name,new k(!0,[]));x.set(n9.name,new k(!0,[]));x.set(i9.name,new k(!0,[]));x.set(o9.name,new k(!0,[]));x.set(WT.setRoutes.name,new k(!0,[]));x.set(WT.getRoutes.name,new k(!0,[]));x.set(WT.deleteRoutes.name,new k(!0,[]));x.set(MP.setConfiguration.name,new k(!0,[]));x.set(a9.clusterStatus.name,new k(!0,[]));x.set(c9.name,new k(!0,[]));x.set(QT.getFingerprint.name,new k(!0,[]));x.set(QT.setLicense.name,new k(!0,[]));x.set(KT.deleteFilesBefore.name,new k(!0,[]));x.set(KT.deleteAuditLogsBefore.name,new k(!0,[]));x.set(CP.restart.name,new k(!0,[]));x.set(CP.restartService.name,new k(!0,[]));x.set(Z6.name,new k(!0,[]));x.set(e9.name,new k(!0,[Mn]));x.set(l9.systemInformation.name,new k(!0,[]));x.set(MP.getConfiguration.name,new k(!0,[]));x.set(PP.readTransactionLog.name,new k(!0,[]));x.set(PP.deleteTransactionLogsBefore.name,new k(!0,[]));x.set(vP.installModules.name,new k(!0,[]));x.set(vP.auditModules.name,new k(!0,[]));x.set(LP.createTokens.name,new k(!1,[]));x.set(LP.refreshOperationToken.name,new k(!1,[]));x.set(UP.login.name,new k(!1,[]));x.set(UP.logout.name,new k(!1,[]));x.set($r.customFunctionsStatus.name,new k(!0,[]));x.set($r.getCustomFunctions.name,new k(!0,[]));x.set($r.getComponents.name,new k(!0,[]));x.set($r.getComponentFile.name,new k(!0,[]));x.set($r.setComponentFile.name,new k(!0,[]));x.set($r.dropComponent.name,new k(!0,[]));x.set($r.getCustomFunction.name,new k(!0,[]));x.set($r.setCustomFunction.name,new k(!0,[]));x.set($r.dropCustomFunction.name,new k(!0,[]));x.set($r.addComponent.name,new k(!0,[]));x.set($r.dropCustomFunctionProject.name,new k(!0,[]));x.set($r.packageComponent.name,new k(!0,[]));x.set($r.deployComponent.name,new k(!0,[]));x.set(QT.getRegistrationInfo.name,new k(!1,[]));x.set(ku.userInfo.name,new k(!1,[]));x.set(Gu.describeAll.name,new k(!1,[]));x.set(f9,new k(!1,[]));x.set(E9,new k(!0,[]));x.set(d9,new k(!0,[]));x.set(pf.CSV_DATA_LOAD,new k(!1,[gi,lo]));x.set(pf.CSV_URL_LOAD,new k(!1,[gi,lo]));x.set(pf.CSV_FILE_LOAD,new k(!1,[gi,lo]));x.set(pf.IMPORT_FROM_S3,new k(!1,[gi,lo]));x.set(FP.EXPORT_TO_S3,new k(!0,[]));x.set(FP.EXPORT_LOCAL,new k(!0,[]));x.set(ms.VALID_SQL_OPS_ENUM.DELETE,new k(!1,[xP]));x.set(ms.VALID_SQL_OPS_ENUM.SELECT,new k(!1,[Mn]));x.set(ms.VALID_SQL_OPS_ENUM.INSERT,new k(!1,[gi]));x.set(ms.VALID_SQL_OPS_ENUM.UPDATE,new k(!1,[lo]));kP.exports={verifyPerms:p9,verifyPermsAst:m9,verifyBulkLoadAttributePerms:T9};function m9(e,t,r){if(Un.isEmptyOrZeroLength(e))throw It.info("verify_perms_ast has an empty user parameter"),Tr(new Error);if(Un.isEmptyOrZeroLength(t))throw It.info("verify_perms_ast has an empty user parameter"),Tr(new Error);if(Un.isEmptyOrZeroLength(r))throw It.info("verify_perms_ast has a null operation parameter"),Tr(new Error);try{let s=new BP,n=new u9(e),i=n.getSchemas(),o=new Map;if((!i||i.length===0)&&n.affected_attributes&&n.affected_attributes.size>0)throw It.info("No schemas defined in verifyPermsAst(), will not continue."),Tr(new Error);let c=!!t.role.permission.super_user,u=i.includes("system");if(u&&qP[r])throw Tr(new Error,kt.DROP_SYSTEM,qu.FORBIDDEN);if(c&&!u)return null;let _=DP.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof _9.yy.Select&&(e=n.updateAttributeWildcardsForRolePerms(_));for(let d=0;d<i.length;d++){let f=n.getTablesBySchemaName(i[d]);f&&o.set(i[d],f)}let l=GP(t,r,o,s);return l||(o.forEach((d,f)=>{for(let E=0;E<d.length;E++){let h=n.getAttributesBySchemaTableName(f,d[E]),p=JT(t.role.permission,f,d[E]);zT(h,p,r,d[E],f,s)}}),s.getPermsResponse())}catch(s){throw Tr(s)}}a(m9,"verifyPermsAst");function p9(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw It.info("null required parameter in verifyPerms"),Tr(new Error,kt.DEFAULT_INVALID_REQUEST,qu.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let s=e.action,n=e.schema??e.database,i=e.table,o=new Map;n&&i&&o.set(n,[i]);let c=new BP;if(Un.isEmptyOrZeroLength(e.hdb_user.role)||Un.isEmptyOrZeroLength(e.hdb_user.role.permission))return It.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(kt.USER_HAS_NO_PERMS(e.hdb_user.username));let u=!!e.hdb_user.role.permission.super_user,_=e.hdb_user.role.permission.structure_user,l=o.has(ms.SYSTEM_SCHEMA_NAME)||n===ms.SYSTEM_SCHEMA_NAME;if(l&&qP[r])throw Tr(new Error,kt.DROP_SYSTEM,qu.FORBIDDEN);if(u&&!l||_===!0&&(r===ps.createSchema.name||r===ps.dropSchema.name))return null;if(h9.indexOf(r)>=0&&(_===!0||Array.isArray(_)))return _===!0||_.indexOf(n)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${n}'`);let d=DP.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===IP||r===wP){if(n===ms.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(kt.SCHEMA_PERM_ERROR(n));if(!d.super_user){if(r===IP&&(!d[n]||!d[n][Fu]))return c.handleInvalidItem(kt.SCHEMA_NOT_FOUND(n));if(r===wP&&(!d[n]||!d[n].tables[i]||!d[n].tables[i][Fu]))return c.handleInvalidItem(kt.TABLE_NOT_FOUND(n,i))}}let f=GP(e.hdb_user,r,o,c,s);if(f)return f;if(x.get(r)&&x.get(r).perms.length===0)return null;if(!u&&e.get_attributes&&ms.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let p=[],S=d[n].tables[i];S[ms.PERMS_CRUD_ENUM.READ]&&(S.attribute_permissions.length>0?S.attribute_permissions.filter(O=>O[ms.PERMS_CRUD_ENUM.READ]).forEach(O=>{p.push(O.attribute_name)}):p=global.hdb_schema[n][i].attributes.map(R=>R.attribute),e.get_attributes=p)}let E=S9(e),h=JT(e.hdb_user.role.permission,n,i);return zT(E,h,r,i,n,c,s),c.getPermsResponse()}a(p9,"verifyPerms");function GP(e,t,r,s,n){if(Un.arrayHasEmptyValues([e,t,r]))throw It.info("hasPermissions has an invalid parameter"),Tr(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||x.get(t).requires_su))return null;if(!x.get(t))throw It.info(`operation ${t} not found.`),Tr(new Error,kt.OP_NOT_FOUND(t),qu.BAD_REQUEST);if(x.get(t)&&x.get(t).requires_su)return It.info(`operation ${t} requires SU permissions.`),s.handleUnauthorizedItem(kt.OP_IS_SU_ONLY(t));let c=r.keys();for(let u of c){try{if(u&&!o[u]||o[u][Fu]===!1){s.addInvalidItem(kt.SCHEMA_NOT_FOUND(u));continue}}catch{s.addInvalidItem(kt.SCHEMA_NOT_FOUND(u));continue}let _=r.get(u);for(let l of _){let d=o[u].tables[l];if(!d||d[Fu]===!1)s.addInvalidItem(kt.TABLE_NOT_FOUND(u,l));else try{let f=[],E=x.get(t).perms;!Un.isEmpty(n)&&E.includes(n)&&(E=[n]);for(let h=0;h<E.length;h++){let p=E[h],S=d[p];(S==null||S===!1)&&(It.info(`Required ${p} permission not found for ${t} ${n?`${n} `:""}operation in role ${e.role.id}`),f.push(p))}f.length>0&&s.addUnauthorizedTable(u,l,f)}catch(f){let E=kt.UNKNOWN_OP_AUTH_ERROR(t,u,l);throw It.error(E),It.error(f),Tr(HP.CHECK_LOGS_WRAPPER(E))}}}return r.size<2?s.getPermsResponse():null}a(GP,"hasPermissions");function zT(e,t,r,s,n,i,o){if(!e||!t)throw It.info("no attributes specified in checkAttributePerms."),Tr(new Error);let c=x.get(r).perms;if(!c||c==="")throw It.info(`no permissions found for ${r} in checkAttributePerms().`),Tr(new Error);if(Un.isEmptyOrZeroLength(t))return It.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let u={};for(let l of e){let d=t.get(l);if(d){if(d[Fu]===!1){i.addInvalidItem(kt.ATTR_NOT_FOUND(n,s,l),n,s);continue}if(c)for(let f of c){if(ms.TIME_STAMP_NAMES.includes(d.attribute_name)&&f!==Mn)throw Tr(new Error,kt.SYSTEM_TIMESTAMP_PERMS_ERR,qu.FORBIDDEN);d[f]===!1&&(u[d.attribute_name]?u[d.attribute_name].push(f):u[d.attribute_name]=[f])}}else i.addInvalidItem(kt.ATTR_NOT_FOUND(n,s,l),n,s)}let _=Object.keys(u);_.length>0&&i.addUnauthorizedAttributes(_,n,s,u)}a(zT,"checkAttributePerms");function S9(e){let t=new Set;try{if(e.action)return t;if(e.operation===ms.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{t.add(r.search_attribute)}),e&&e.search_attribute&&t.add(e.search_attribute),!e.records||e.records.length===0){if(!e.get_attributes||!e.get_attributes.length===0)return t;for(let r=0;r<e.get_attributes.length;r++)t.add(e.get_attributes[r])}else for(let r=0;r<e.records.length;r++){let s=Object.keys(e.records[r]);for(let n=0;n<s.length;n++)t.add(s[n])}}catch(r){It.info(r)}return t}a(S9,"getRecordAttributes");function JT(e,t,r){let s=new Map;if(Un.isEmpty(e))return It.info("no hdb_user specified in getAttributePermissions"),s;if(e.super_user||!t||!r)return s;try{e[t].tables[r].attribute_permissions.forEach(n=>{s.has(n.attribute_name)||s.set(n.attribute_name,n)})}catch{It.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return s}a(JT,"getAttributePermissions");function T9(e,t,r,s,n,i,o){let c=new Set(i),u=JT(e,s,n);zT(c,u,t,n,s,o,r)}a(T9,"verifyBulkLoadAttributePerms")});var gf=T((fEe,WP)=>{"use strict";WP.exports={evaluateSQL:U9,processAST:KP,convertSQLToAST:YP,checkASTPermissions:$P};var g9=Ur(),VP=require("util"),R9=VP.callbackify(g9.insert),A9=os().search,O9=DC().update,b9=VP.callbackify(O9),N9=UC().convertDelete,Ri=require("alasql"),y9=Sf(),Tf=G(),I9=rd(),w9=W(),Vu=I(),{hdb_errors:C9,handleHDBError:XT}=Z(),{HTTP_STATUS_CODES:jT}=C9;I9(Ri);var D9=403,L9="There was a problem performing this insert. Please check the logs and try again.",ZT=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function U9(e,t){let r=e.parsed_sql_object;if(!r){r=YP(e.sql);let s,n=r.ast.statements[0];if(n instanceof Ri.yy.Insert?s=n.into.databaseid:n instanceof Ri.yy.Select?s=n.from?n.from[0].databaseid:null:n instanceof Ri.yy.Update||n instanceof Ri.yy.Delete?s=n.table.databaseid:Tf.error("AST in evaluateSQL is not a valid SQL type."),!(n instanceof Ri.yy.Select)&&w9.isEmptyOrZeroLength(s))return t("No schema specified",null)}KP(e,r,(s,n)=>{if(s)return t(s);t(null,n)})}a(U9,"evaluateSQL");function $P(e,t){let r;try{r=y9.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(s){throw s}return r||null}a($P,"checkASTPermissions");function YP(e){let t=new ZT;if(!e)throw XT(new Error,"The 'sql' parameter is missing from the request body",jT.BAD_REQUEST);try{let r=e.trim(),s=Ri.parse(r),n=r.split(" ")[0].toLowerCase();t.ast=s,t.variant=n}catch(r){let s=r.message.split(`
|
|
17
|
-
`);throw s[1]?XT(r,`Invalid SQL at: ${s[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,jT.BAD_REQUEST):XT(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",jT.BAD_REQUEST)}return t}a(YP,"convertSQLToAST");function KP(e,t,r){try{let s=M9;if(!e.bypass_auth&&!t.permissions_checked){let i=$P(e,t);if(i&&i.length>0)return r(D9,i)}let n={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case Vu.VALID_SQL_OPS_ENUM.SELECT:s=A9,n=t.ast.statements[0];break;case Vu.VALID_SQL_OPS_ENUM.INSERT:s=P9;break;case Vu.VALID_SQL_OPS_ENUM.UPDATE:s=b9;break;case Vu.VALID_SQL_OPS_ENUM.DELETE:s=N9;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}s(n,(i,o)=>{if(i){r(i);return}r(null,o)})}catch(s){return r(s)}}a(KP,"processAST");function M9(e,t){Tf.info(e),t("unknown sql statement")}a(M9,"nullFunction");function P9({statement:e,hdb_user:t},r){let s=e.into,n={schema:s.databaseid,table:s.tableid,operation:"insert",hdb_user:t},i=e.columns.map(o=>o.columnid);try{n.records=v9(i,e.values)}catch(o){return r(o)}R9(n,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){Tf.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a(P9,"convertInsert");function v9(e,t){try{return t.map(r=>{if(e.length!==r.length)throw"number of values do not match number of columns in insert";let s={};return r.forEach((n,i)=>{if(n.columnid)throw"cannot use a column in insert value";"value"in n?s[e[i]]=n.value:s[e[i]]=Ri.compile(`SELECT ${n.toString()} AS [${Vu.FUNC_VAL}] FROM ?`)}),s})}catch(r){throw Tf.error(r),new Error(L9)}}a(v9,"createDataObjects")});var eg=T((hEe,zP)=>{"use strict";var{S3:B9,GetObjectCommand:H9}=require("@aws-sdk/client-s3");zP.exports={getFileStreamFromS3:x9,getS3AuthObj:QP};async function x9(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await QP(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new H9(r))).Body}a(x9,"getFileStreamFromS3");function QP(e,t,r){return new B9({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(QP,"getS3AuthObj")});var Rf=T((pEe,nv)=>{"use strict";var rg=os(),q9=gf(),F9=eg(),{AsyncParser:G9,Transform:k9}=require("json2csv"),Yu=require("stream"),Yr=W(),tg=require("fs-extra"),V9=require("path"),Ss=G(),{promisify:jP}=require("util"),$u=W(),{handleHDBError:Tt,hdb_errors:$9}=Z(),{HDB_ERROR_MSGS:gr,HTTP_STATUS_CODES:gt}=$9,{streamAsJSON:Y9}=(gh(),te(xO)),{Upload:K9}=require("@aws-sdk/lib-storage"),JP=["search_by_value","search_by_hash","sql","search_by_conditions"],XP=["json","csv"],ZP="json",ev="csv",W9="Successfully exported JSON locally.",Q9="Successfully exported CSV locally.",z9=1e3,J9=rg.searchByHash,X9=rg.searchByValue,j9=jP(q9.evaluateSQL),Z9=jP(Yu.finished);nv.exports={export_to_s3:s7,export_local:e7,toCsvStream:tv};async function e7(e){Ss.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=rv(e);if(!Yr.isEmpty(t))throw Ss.error(t),Tt(new Error,t,gt.BAD_REQUEST,void 0,void 0,!0);if(Yr.isEmpty(e.path))throw Ss.error(gr.MISSING_VALUE("path")),Tt(new Error,gr.MISSING_VALUE("path"),gt.BAD_REQUEST,void 0,void 0,!0);let r=(Yr.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(V9.sep)&&(e.path=e.path.substring(0,e.path.length-1));let s=Yr.buildFolderPath(e.path,r);await t7(e.path);let n=await sv(e);return await r7(s,e.format,n)}a(e7,"export_local");async function t7(e){if(Ss.trace("in confirmPath"),Yr.isEmptyOrZeroLength(e))throw Tt(new Error,`Invalid path: ${e}`,gt.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await tg.stat(e)}catch(r){let s;throw r.code==="ENOENT"?s=`path '${e}' does not exist`:r.code==="EACCES"?s=`access to path '${e}' is denied`:s=r.message,Ss.error(s),Tt(new Error,s,gt.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 Ss.error(r),Tt(new Error,r,gt.BAD_REQUEST,void 0,void 0,!0)}return!0}a(t7,"confirmPath");async function r7(e,t,r){if(Ss.trace("in saveToLocal"),$u.isEmptyOrZeroLength(e))throw Tt(new Error,gr.INVALID_VALUE("file_path"),gt.BAD_REQUEST,void 0,void 0,!0);if($u.isEmptyOrZeroLength(t))throw Tt(new Error,gr.INVALID_VALUE("Source format"),gt.BAD_REQUEST,void 0,void 0,!0);if($u.isEmpty(r))throw Tt(new Error,gr.NOT_FOUND("Data"),gt.BAD_REQUEST,void 0,void 0,!0);if(t===ZP){let s=tg.createWriteStream(e);return Y9(r).pipe(s),await Z9(s),{message:W9,path:e}}else if(t===ev){let s=tg.createWriteStream(e),n=Yu.Readable.from(r),i={},o={objectMode:!0};return await new G9(i,o).fromInput(n).toOutput(s).promise(!1),{message:Q9,path:e}}throw Tt(new Error,gr.INVALID_VALUE("format"),gt.BAD_REQUEST)}a(r7,"saveToLocal");async function s7(e){if(!e.s3||Object.keys(e.s3).length===0)throw Tt(new Error,gr.MISSING_VALUE("S3 object"),gt.BAD_REQUEST);if(Yr.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw Tt(new Error,gr.MISSING_VALUE("aws_access_key_id"),gt.BAD_REQUEST);if(Yr.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw Tt(new Error,gr.MISSING_VALUE("aws_secret_access_key"),gt.BAD_REQUEST);if(Yr.isEmptyOrZeroLength(e.s3.bucket))throw Tt(new Error,gr.MISSING_VALUE("bucket"),gt.BAD_REQUEST);if(Yr.isEmptyOrZeroLength(e.s3.key))throw Tt(new Error,gr.MISSING_VALUE("key"),gt.BAD_REQUEST);if(Yr.isEmptyOrZeroLength(e.s3.region))throw Tt(new Error,gr.MISSING_VALUE("region"),gt.BAD_REQUEST);let t=rv(e);if(!Yr.isEmpty(t))throw Tt(new Error,t,gt.BAD_REQUEST);Ss.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await sv(e)}catch(u){throw Ss.error(u),u}let s,n=await F9.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new Yu.PassThrough;if(e.format===ev){i=e.s3.key+".csv";let u=tv(r);u.on("error",_=>{throw _}),u.pipe(o)}else if(e.format===ZP){i=e.s3.key+".json";let u=new Yu.Readable;u.pipe(o),u.on("error",d=>{throw d}),u.push("[");let _=r.length,l="";for(let[d,f]of r.entries()){let E=d===_-1?JSON.stringify(f):JSON.stringify(f)+",";l+=E,d!==0&&d%z9===0&&(u.push(l),l="")}l.length!==0&&u.push(l),u.push("]"),u.push(null)}else throw Tt(new Error,gr.INVALID_VALUE("format"),gt.BAD_REQUEST);return new K9({client:n,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(s7,"export_to_s3");function tv(e){let t=Yu.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),r={},s={objectMode:!0},n=new k9(r,s);return t.pipe(n)}a(tv,"toCsvStream");function rv(e){if(Ss.trace("in exportCoreValidation"),Yr.isEmpty(e.format))return"format missing";if(XP.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${XP.join(", ")}`;let t=e.search_operation.operation;if(Yr.isEmpty(t))return"search_operation.operation missing";if(JP.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${JP.join(", ")}`}a(rv,"exportCoreValidation");async function sv(e){Ss.trace("in getRecords");let t,r;if($u.isEmpty(e.search_operation)||$u.isEmptyOrZeroLength(e.search_operation.operation))throw Tt(new Error,gr.INVALID_VALUE("Search operation"),gt.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=X9;break;case"search_by_hash":t=J9;break;case"search_by_conditions":t=rg.searchByConditions;break;case"sql":t=j9;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Ss.error(r),Tt(new Error,r,gt.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(sv,"getRecords")});var _v={};je(_v,{contentTypes:()=>ag,findBestSerializer:()=>Of,getDeserializer:()=>fo,registerContentHandlers:()=>cg,serialize:()=>bf,serializeMessage:()=>Ti});function n7(e){try{return e?.[0]===123?og(e):e}catch{return e}}function cg(e){e.register(o7,{serializers:[{regex:/^application\/json$/,serializer:fc},{regex:/^application\/cbor$/,serializer:function(t){return new _o.EncoderStream(Wu).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?Af.Readable.from((0,un.encodeIter)(t,Wu)):(0,un.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,sg.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,un.unpack)(r))}catch(n){n.statusCode=400,s(n)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,_o.decode)(r))}catch(n){n.statusCode=400,s(n)}})}function Of(e){let r=(e.headers.asObject||e.headers).accept,s,n=0,i,o,c=r?r.toLowerCase().split(/\s*,\s*/):[];for(let u of c){let[_,...l]=u.split(/\s*;\s*/),d=1,f={q:1};for(let h of l){let p=h.indexOf("=");f[h.substring(0,p)]=h.substring(p+1)}d=+f.q;let E=Vt.get(_);if(E){let h=(E.q||1)*d;h>n&&(s=E,i=E.type||_,n=h,o=f)}}if(!s){if(r)return{serializer(){this.code(406).send("No supported content types found in Accept header, supported types include: "+Array.from(Vt.keys()).join(", "))}};s=Vt.get("application/json"),i="application/json"}return{serializer:s,type:i,parameters:o}}function bf(e,t,r){let s=ov&&t.headers.asObject?.["accept-encoding"]?.includes("br"),n;if(e?.contentType!=null&&e.data!=null)r.headers.set("Content-Type",e.contentType),r.headers.set("Vary","Accept-Encoding"),n=e.data;else if(e instanceof Uint8Array)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),n=e;else{let i=Of(t);if(i.serializer.compressible===!1&&(s=!1),r.headers.set("Vary","Accept, Accept-Encoding"),r.headers.set("Content-Type",i.type),typeof e=="object"&&(e[Symbol.iterator]||e[Symbol.asyncIterator])&&i.serializer.serializeStream){let o=i.serializer.serializeStream(e);return s&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,Pn.createBrotliCompress)({params:{[Pn.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?Pn.constants.BROTLI_MODE_TEXT:Pn.constants.BROTLI_MODE_GENERIC,[Pn.constants.BROTLI_PARAM_QUALITY]:2}}))),o}n=i.serializer.serialize(e)}return s&&n?.length>ov?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,Pn.brotliCompress)(n,(c,u)=>{c?o(c):i(u)}))):n}function Ti(e,t){if(e?.contentType!=null&&e.data!=null)return e.data;if(!t)return Ku(e);let r=t.serialize;if(r)return r(e);let s=Of(t);return r=t.serialize=s.serializer.serialize,r(e)}function a7(e){return new Promise((t,r)=>{let s=[];e.on("data",n=>s.push(n)),e.on("end",()=>t(Buffer.concat(s))),e.on("error",r)})}function fo(e,t){e||(e="");let r=e.indexOf(";"),s;r>-1&&(s=e.slice(r+1),e=e.slice(0,r));let n=Vt.get(e);if(t){if(n?.deserializeStream)return n.deserializeStream;let i=Vt.get(e)?.deserialize||av(e,s);return o=>a7(o).then(i)}return e&&Vt.get(e)?.deserialize||av(e,s)}function av(e,t){if(e.startsWith("text/")){let r=t?.match(/charset=(.+)/)?.[1]||"utf-8";return s=>({contentType:e,data:s.toString(r)})}else return e==="application/octet-stream"?r=>r:r=>{if(!e)try{if(r?.[0]===123)return og(r)}catch{}return{contentType:e||"application/octet-stream",data:r}}}function c7(e,t){return{[Symbol.asyncIterator](){let r=e[Symbol.asyncIterator]?e[Symbol.asyncIterator]():e[Symbol.iterator]();return{next(){let s=r.next();return s.then?s.then(n=>({value:t(n.value),done:n.done})):{value:t(s.value),done:s.done}},return(s){return r.return(s)},throw(s){return r.throw(s)}}}}}var sg,un,_o,Pn,Af,cv,ng,ig,uv,Ku,og,Wu,Vt,ag,iv,lv,i7,o7,ov,Sa=ge(()=>{gh();sg=M(Rf()),un=require("msgpackr"),_o=require("cbor-x"),Pn=require("zlib"),Af=require("stream");ss();cv=require("../index"),ng=M(j()),ig=M(I()),uv=ng.default.get(ig.CONFIG_PARAMS.SERIALIZATION_BIGINT)!==!1,Ku=uv?Ui:JSON.stringify,og=uv?Th:JSON.parse,Wu={useRecords:!1,useToJSON:!0},Vt=new Map,ag=Vt;Ot.contentTypes=ag;(0,cv._assignPackageExport)("contentTypes",ag);Vt.set("application/json",{serializeStream:fc,serialize:Ku,deserialize:og,q:.8});iv=new _o.Encoder(Wu);Vt.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new _o.EncoderStream(Wu).end(e)},serialize:iv.encode,deserialize:iv.decode,q:1});Vt.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?Af.Readable.from((0,un.encodeIter)(e,Wu)):(0,un.pack)(e)},serialize:un.pack,deserialize:un.unpack,q:.9});Vt.set("text/csv",{serializeStream(e){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,sg.toCsvStream)(e)},q:.1});Vt.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});Vt.set("text/event-stream",{serializeStream:function(e){return Af.Readable.from(c7(e,this.serialize))},serialize:function(e){if(e.acknowledge&&e.acknowledge(),typeof e=="object"&&"value"in e&&e.timestamp&&(e={data:e.value,event:e.type,id:e.timestamp}),e.data||e.event){let t="";if(e.event&&(t+="event: "+e.event+`
|
|
18
|
-
`),e.data){let r=e.data;typeof r=="object"&&(r=
|
|
15
|
+
`,""):null}catch(f){f.stderr?i[u].npm_error=sP(f.stderr):i[u].npm_error=f.message;continue}try{i[u].npm_output=JSON.parse(l)}catch{i[u].npm_output=l}try{i[u].npm_error=JSON.parse(d)}catch{i[u].npm_error=d}}return Aa.info(`finished installModules with response ${i}`),i}a(Y6,"installModules");function sP(e){let t='"error": {',r=e.indexOf('"error": {'),s=e.indexOf(`}
|
|
16
|
+
`);return r>-1&&s>-1?JSON.parse(e.substring(r+t.length-1,s+1)):e}a(sP,"parseNPMStdErr");async function K6(e){Aa.info(`starting auditModules for request: ${e}`);let t=iP(e);if(t)throw ga(t,t.message,Ra.BAD_REQUEST);let{projects:r}=e;await nf(),await nP(r);let s={};for(let n=0,i=r.length;n<i;n++){let o=r[n],c=sf.join(GT,o);s[o]={npm_output:null,npm_error:null};try{let u=await qu("npm audit --json",c);s[o].npm_output=JSON.parse(u)}catch(u){s[o].npm_error=sP(u.stderr)}}return Aa.info(`finished auditModules with response ${s}`),s}a(K6,"auditModules");async function nf(){try{return await qu("npm -v"),!0}catch{throw ga(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",Ra.BAD_REQUEST,void 0,void 0,!0)}}a(nf,"checkNPMInstalled");async function nP(e){if(!Array.isArray(e)||e.length===0)throw ga(new Error,"projects argument must be an array with at least 1 element",Ra.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let s=0,n=e.length;s<n;s++){let i=e[s],o=sf.join(GT,i.toString());if(!await eP.pathExists(o)){t.push(i);continue}let u=sf.join(o,"package.json");await eP.pathExists(u)||r.push(i)}if(t.length>0)throw ga(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Ra.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw ga(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Ra.BAD_REQUEST,void 0,void 0,!0)}a(nP,"checkProjectPaths");function iP(e){let t=rf.object({projects:rf.array().min(1).items(rf.string()).required(),dry_run:rf.boolean().default(!1)});return F6.validateBySchema(e,t)}a(iP,"modulesValidator")});var VT=T(($Ee,_P)=>{"use strict";var Oa=require("fs-extra"),kT=require("path"),af=G(),aP=z(),cf=D(),lP=j(),W6=Pr();_P.exports=Q6;async function Q6(){let e=z6(),t=lP.get(cf.CONFIG_PARAMS.ROOTPATH),r=kT.join(t,"package.json"),s={dependencies:{harperdb:"file:"+cf.PACKAGE_ROOT}},n=kT.join(t,"node_modules");await Oa.ensureDir(n);let i,o=!0,c=!1;try{i=await Oa.readJson(r)}catch(u){if(aP.isEmptyOrZeroLength(e))return;if(u.code!==cf.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!aP.isEmptyOrZeroLength(e)){for(let{name:u,package:_}of e){let l=await cP(_);s.dependencies[u]=l+_}if(!o){af.notify("Installing components"),await uP(r,s,null);return}for(let{name:u,package:_}of e){let l=i.dependencies[u],d=await cP(_);if(l===void 0||l!==d+_){c=!0;break}}}for(let u in i.dependencies)s.dependencies[u]===void 0&&(af.notify("Removing component",u),c=!0);c&&(af.notify("Updating components."),await uP(r,s,i))}a(Q6,"installComponents");function z6(){let e=W6.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(z6,"getComponentsConfig");async function cP(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":kT.extname(e)||await Oa.pathExists(e)?"file:":"github:"}a(cP,"getPkgPrefix");async function uP(e,t,r){af.trace("npm installing components package.json",t),await Oa.writeFile(e,JSON.stringify(t,null," "));try{await of().installAllRootModules(lP.get(cf.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(s){throw r?await Oa.writeFile(e,JSON.stringify(r,null," ")):await Oa.unlink(e),s}}a(uP,"installPackages")});var KT=T((WEe,hP)=>{"use strict";var Fe=require("fs-extra"),$T=require("fast-glob"),pe=require("path"),fP=require("tar-fs"),KEe=require("uuid").v4,YT=require("normalize-path"),nn=ZM(),wt=G(),We=D(),gt=j(),Fu=Pr(),J6=z(),{PACKAGE_ROOT:X6}=D(),{handleHDBError:Ht,hdb_errors:j6}=Z(),{basename:Z6}=require("path"),e9=VT(),EP=j(),t9=D(),{Readable:r9}=require("stream"),{isMainThread:s9}=require("worker_threads"),{HDB_ERROR_MSGS:fo,HTTP_STATUS_CODES:xt}=j6,n9=pe.join(X6,"application-template"),dP=pe.join(gt.get(We.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function i9(){wt.trace("getting custom api status");let e={};try{e={port:gt.get(We.CONFIG_PARAMS.HTTP_PORT),directory:gt.get(We.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Ht(new Error,fo.FUNCTION_STATUS,xt.INTERNAL_SERVER_ERROR,wt.ERR,t)}return e}a(i9,"customFunctionsStatus");function o9(){wt.trace("getting custom api endpoints");let e={},t=gt.get(We.CONFIG_PARAMS.COMPONENTSROOT);try{$T.sync(YT(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:$T.sync(YT(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:$T.sync(YT(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Ht(new Error,fo.GET_FUNCTIONS,xt.INTERNAL_SERVER_ERROR,wt.ERR,r)}return e}a(o9,"getCustomFunctions");function a9(e){e.project&&(e.project=pe.parse(e.project).name),e.file&&(e.file=pe.parse(e.file).name);let t=nn.getDropCustomFunctionValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);wt.trace("getting custom api endpoint file content");let r=gt.get(We.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i}=e,o=pe.join(r,s,n,i+".js");try{return Fe.readFileSync(o,{encoding:"utf8"})}catch(c){throw Ht(new Error,fo.GET_FUNCTION,xt.INTERNAL_SERVER_ERROR,wt.ERR,c)}}a(a9,"getCustomFunction");function c9(e){e.project&&(e.project=pe.parse(e.project).name),e.file&&(e.file=pe.parse(e.file).name);let t=nn.setCustomFunctionValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);wt.trace("setting custom function file content");let r=gt.get(We.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i,function_content:o}=e;try{return Fe.outputFileSync(pe.join(r,s,n,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw Ht(new Error,fo.SET_FUNCTION,xt.INTERNAL_SERVER_ERROR,wt.ERR,c)}}a(c9,"setCustomFunction");function u9(e){e.project&&(e.project=pe.parse(e.project).name),e.file&&(e.file=pe.parse(e.file).name);let t=nn.getDropCustomFunctionValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);wt.trace("dropping custom function file");let r=gt.get(We.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i}=e;try{return Fe.unlinkSync(pe.join(r,s,n,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw Ht(new Error,fo.DROP_FUNCTION,xt.INTERNAL_SERVER_ERROR,wt.ERR,o)}}a(u9,"dropCustomFunction");function l9(e){e.project&&(e.project=pe.parse(e.project).name);let t=nn.addComponentValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);wt.trace("adding component");let r=gt.get(We.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e;try{let n=pe.join(r,s);return Fe.mkdirSync(n,{recursive:!0}),Fe.copySync(n9,n),`Successfully added project: ${s}`}catch(n){throw Ht(new Error,fo.ADD_FUNCTION,xt.INTERNAL_SERVER_ERROR,wt.ERR,n)}}a(l9,"addComponent");function _9(e){e.project&&(e.project=pe.parse(e.project).name);let t=nn.dropCustomFunctionProjectValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);wt.trace("dropping custom function project");let r=gt.get(We.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e,n=gt.get(We.CONFIG_PARAMS.APPS);if(!J6.isEmptyOrZeroLength(n)){let i=!1;for(let[o,c]of n.entries())if(c.name===s){n.splice(o,1),i=!0;break}if(i)return Fu.updateConfigValue(We.CONFIG_PARAMS.APPS,n),`Successfully deleted project: ${s}`}try{let i=pe.join(r,s);return Fe.rmSync(i,{recursive:!0}),`Successfully deleted project: ${s}`}catch(i){throw Ht(new Error,fo.DROP_FUNCTION_PROJECT,xt.INTERNAL_SERVER_ERROR,wt.ERR,i)}}a(_9,"dropCustomFunctionProject");async function d9(e){e.project&&(e.project=pe.parse(e.project).name);let t=nn.packageComponentValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);let r=gt.get(We.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e;wt.trace("packaging component",s);let n;try{n=await Fe.realpath(pe.join(r,s))}catch(u){if(u.code!==We.NODE_ERROR_CODES.ENOENT)throw u;try{n=await Fe.realpath(pe.join(gt.get(We.CONFIG_PARAMS.ROOTPATH),"node_modules",s))}catch(_){if(_.code===We.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${s}'`)}}await Fe.ensureDir(dP);let i=pe.join(dP,`${s}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(pe.join(n,"node_modules"))}),fP.pack(n,o).pipe(Fe.createWriteStream(i,{overwrite:!0})),await new Promise(u=>setTimeout(u,2e3));let c=Fe.readFileSync(i,{encoding:"base64"});return await Fe.remove(i),{project:s,payload:c}}a(d9,"packageComponent");async function f9(e){e.project&&(e.project=pe.parse(e.project).name);let t=nn.deployComponentValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);let r=gt.get(We.CONFIG_PARAMS.COMPONENTSROOT),{project:s,payload:n,package:i}=e;if(wt.trace("deploying component",s),!n&&!i)throw new Error("'payload' or 'package' must be provided");let o;if(n){o=pe.join(r,s),i="file:"+o,await Fe.ensureDir(o);let f=r9.from(Buffer.from(n,"base64"));await new Promise((h,p)=>{f.pipe(fP.extract(o,{finish:h})).on("error",p)});let E=await Fe.readdir(o);E.length===1&&E[0]==="package"&&(await Fe.copy(pe.join(o,"package"),o),await Fe.remove(pe.join(o,"package")))}if(await Fu.addConfig(s,{package:i}),!n){await e9();let f=EP.get(t9.CONFIG_PARAMS.ROOTPATH);o=pe.join(f,"node_modules",s)}if(s9)return;let c=new Map;c.isWorker=!0;let u=(lf(),ee(uf)),_;u.setErrorReporter(f=>_=f);let l=Z6(o),d=u.component_errors.get(l);try{await u.loadComponent(o,c)}finally{u.component_errors.set(l,d)}if(_)throw _;return wt.info("Installed component"),`Successfully deployed: ${s}`}a(f9,"deployComponent");async function E9(){let e=Fu.getConfiguration(),t=[];for(let o in e)if(e[o]?.package){if(e[o].package.startsWith("file:"))continue;t.push(Object.assign({},e[o],{name:o}))}let r=a(async(o,c)=>{try{let u=await Fe.readdir(o,{withFileTypes:!0});for(let _ of u){let l=_.name;if(l.startsWith(".")||l==="node_modules")continue;let d=pe.join(o,l);if(_.isDirectory()||_.isSymbolicLink()){let f={name:l,entries:[]};c.entries.push(f),await r(d,f)}else{let f=await Fe.stat(d),E={name:pe.basename(l),mtime:f.mtime,size:f.size};c.entries.push(E)}}return c}catch(u){return wt.warn("Error loading package",u),{error:u.toString(),entries:[]}}},"walk_dir"),s=await r(gt.get(We.CONFIG_PARAMS.COMPONENTSROOT),{name:gt.get(We.CONFIG_PARAMS.COMPONENTSROOT).split(pe.sep).slice(-1).pop(),entries:t});for(let o of s.entries)if(o.package){let c=await r(pe.join(gt.get(We.CONFIG_PARAMS.ROOTPATH),"node_modules",o.name),{name:o.name,entries:[]});Object.assign(o,c)}let i=(lf(),ee(uf)).component_errors;for(let o of t){let c=i.get(o.name);c?o.error=i.get(o.name):c===void 0&&(o.error="The component has not been loaded yet (may need a restart)")}return s}a(E9,"getComponents");async function h9(e){let t=nn.getComponentFileValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);let s=Fu.getConfigObj()[e.project]||e.project==="harperdb"?pe.join(EP.get(We.CONFIG_PARAMS.ROOTPATH),"node_modules"):gt.get(We.CONFIG_PARAMS.COMPONENTSROOT),n=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await Fe.stat(pe.join(s,e.project,e.file));return{message:await Fe.readFile(pe.join(s,e.project,e.file),n),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===We.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${pe.join(e.project,e.file)}'`):i}}a(h9,"getComponentFile");async function m9(e){let t=nn.setComponentFileValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},s=pe.join(gt.get(We.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);return e.payload!==void 0?(await Fe.ensureFile(s),await Fe.outputFile(s,e.payload,r)):await Fe.ensureDir(s),"Successfully set component: "+e.file}a(m9,"setComponentFile");async function p9(e){let t=nn.dropComponentFileValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);let r=e.file?pe.join(e.project,e.file):e.project,s=pe.join(gt.get(We.CONFIG_PARAMS.COMPONENTSROOT),r);return await Fe.pathExists(s)&&await Fe.remove(s),Fu.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(p9,"dropComponent");hP.exports={customFunctionsStatus:i9,getCustomFunctions:o9,getCustomFunction:a9,setCustomFunction:c9,dropCustomFunction:u9,addComponent:l9,dropCustomFunctionProject:_9,packageComponent:d9,deployComponent:f9,getComponents:E9,getComponentFile:h9,setComponentFile:m9,dropComponent:p9}});var WT=T((zEe,pP)=>{"use strict";var on=require("joi"),mP=Je();pP.exports={readTransactionLogValidator:S9,deleteTransactionLogsBeforeValidator:T9};function S9(e){let t=on.object({schema:on.string().required(),table:on.string().required(),from:on.date().timestamp(),to:on.date().timestamp(),limit:on.number().min(1)});return mP.validateBySchema(e,t)}a(S9,"readTransactionLogValidator");function T9(e){let t=on.object({schema:on.string().required(),table:on.string().required(),timestamp:on.date().timestamp().required()});return mP.validateBySchema(e,t)}a(T9,"deleteTransactionLogsBeforeValidator")});var df=T((XEe,AP)=>{"use strict";var QT=D(),_f=nt(),SP=z(),TP=j(),gP=gn(),{handleHDBError:ba,hdb_errors:g9}=Z(),{HTTP_STATUS_CODES:Na}=g9,{readTransactionLogValidator:R9,deleteTransactionLogsBeforeValidator:A9}=WT(),RP="This operation relies on clustering and cannot run with it disable.",O9="Logs successfully deleted from transaction log.",b9="All logs successfully deleted from transaction log.";AP.exports={readTransactionLog:N9,deleteTransactionLogsBefore:y9};async function*N9(e){let t=R9(e);if(t)throw ba(t,t.message,Na.BAD_REQUEST,void 0,void 0,!0);if(!TP.get(QT.CONFIG_PARAMS.CLUSTERING_ENABLED))throw ba(new Error,RP,Na.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=SP.checkSchemaTableExist(r,s);if(n)throw ba(new Error,n,Na.NOT_FOUND,void 0,void 0,!0);let i=gP.createNatsTableStreamName(r,s),o=await _f.viewStreamIterator(i,parseInt(e.from),e.limit);for await(let c of o){let u=Math.floor(c?.nats_timestamp/1e6);if(e.to&&u>e.to)break;let _={operation:c?.entry?.operation,user:c?.entry?.__origin?.user,timestamp:u,records:c?.entry?.records,attributes:c?.entry?.attributes};c?.entry?.operation===QT.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(N9,"readTransactionLog");async function y9(e){let t=A9(e);if(t)throw ba(t,t.message,Na.BAD_REQUEST,void 0,void 0,!0);if(!TP.get(QT.CONFIG_PARAMS.CLUSTERING_ENABLED))throw ba(new Error,RP,Na.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=SP.checkSchemaTableExist(r,s);if(i)throw ba(new Error,i,Na.NOT_FOUND,void 0,void 0,!0);let o=gP.createNatsTableStreamName(r,s),{jsm:c}=await _f.getNATSReferences(),u=await _f.getStreamInfo(o),_=new Date(u.state.first_ts).getTime();if(n<=_)return`No transactions exist before: ${n}`;let l=O9,d,f=new Date(u.state.last_ts).getTime();return n>f?(d=u.state.last_seq+1,l=b9):d=(await _f.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),l}a(y9,"deleteTransactionLogsBefore")});var bP=T((ZEe,OP)=>{"use strict";var zT=class{static{a(this,"PermissionTableResponseObject")}constructor(t,r,s=[],n=[]){this.schema=t,this.table=r,this.required_table_permissions=s,this.required_attribute_permissions=n}};OP.exports=zT});var yP=T((the,NP)=>{"use strict";var JT=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};NP.exports=JT});var jT=T((she,wP)=>{"use strict";var IP=bP(),I9=yP(),{HDB_ERROR_MSGS:w9}=Ir(),XT=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=w9.OP_AUTH_PERMS_ERROR,this.unauthorized_access={},this.invalid_schema_items=[]}handleUnauthorizedItem(t){return this.invalid_schema_items=[],this.unauthorized_access=[t],this}handleInvalidItem(t){return this.invalid_schema_items=[t],this.unauthorized_access=[],this}addInvalidItem(t,r,s){if(r&&s){let n=`${r}_${s}`;if(this.unauthorized_access[n])return}this.invalid_schema_items.push(t)}addUnauthorizedTable(t,r,s){let n=new IP(t,r,s),i=`${t}_${r}`;this.unauthorized_access[i]=n}addUnauthorizedAttributes(t,r,s,n){let i=[];t.forEach(c=>{let u=new I9(c,n[c]);i.push(u)});let o=`${r}_${s}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new IP(r,s,[],i);this.unauthorized_access[o]=c}}getPermsResponse(){let t=Object.values(this.unauthorized_access);return t.length>0||this.invalid_schema_items.length>0?(this.unauthorized_access=t,this):null}};wP.exports=XT});var mf=T((ihe,$P)=>{"use strict";var ZT=Lr(),ff=es(),ls=uu(),Vu=jn(),eg=ti(),C9=dS(),D9=qD(),$u=rs(),Ef=RS(),Ct=G(),L9=bS(),U9=Cd(),M9=oT(),P9=Ld(),v9=aT(),B9=cT(),H9=_T(),x9=fT(),tg=mT(),Un=z(),q9=BU(),rg=RT(),LP=Qd(),us=D(),UP=BM(),F9=_a(),MP=hu(),PP=(ef(),ee(vu)),vP=Pr(),Vr=KT(),G9=require("alasql"),BP=df(),HP=of(),xP=jT(),{handleHDBError:Sr,hdb_errors:qP}=Z(),{HDB_ERROR_MSGS:Vt,HTTP_STATUS_CODES:Gu}=qP,F=new Map,FP="delete",gi="insert",Mn="read",Eo="update",ku="describe",CP=Vu.describeSchema.name,DP=Vu.describeTable.name,GP={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},k9="catchup",V9="handleGetJob",$9="handleGetJobsByStartDate",hf={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},Y9=[ls.createTable.name,ls.createAttribute.name,ls.dropTable.name,ls.dropAttribute.name],kP={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},$=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};F.set(ZT.insert.name,new $(!1,[gi]));F.set(ZT.update.name,new $(!1,[Eo]));F.set(ZT.upsert.name,new $(!1,[gi,Eo]));F.set(ff.searchByConditions.name,new $(!1,[Mn]));F.set(ff.searchByHash.name,new $(!1,[Mn]));F.set(ff.searchByValue.name,new $(!1,[Mn]));F.set(ff.search.name,new $(!1,[Mn]));F.set(ls.createSchema.name,new $(!0,[]));F.set(ls.createTable.name,new $(!0,[]));F.set(ls.createAttribute.name,new $(!1,[gi]));F.set(ls.dropSchema.name,new $(!0,[]));F.set(ls.dropTable.name,new $(!0,[]));F.set(ls.dropAttribute.name,new $(!0,[]));F.set(Vu.describeSchema.name,new $(!1,[Mn]));F.set(Vu.describeTable.name,new $(!1,[Mn]));F.set(eg.deleteRecord.name,new $(!1,[FP]));F.set($u.addUser.name,new $(!0,[]));F.set($u.alterUser.name,new $(!0,[]));F.set($u.dropUser.name,new $(!0,[]));F.set($u.listUsersExternal.name,new $(!0,[]));F.set(Ef.listRoles.name,new $(!0,[]));F.set(Ef.addRole.name,new $(!0,[]));F.set(Ef.alterRole.name,new $(!0,[]));F.set(Ef.dropRole.name,new $(!0,[]));F.set(L9.name,new $(!0,[]));F.set(U9.name,new $(!0,[]));F.set(M9.name,new $(!0,[]));F.set(P9.name,new $(!0,[]));F.set(v9.name,new $(!0,[]));F.set(B9.name,new $(!0,[]));F.set(tg.setRoutes.name,new $(!0,[]));F.set(tg.getRoutes.name,new $(!0,[]));F.set(tg.deleteRoutes.name,new $(!0,[]));F.set(vP.setConfiguration.name,new $(!0,[]));F.set(H9.clusterStatus.name,new $(!0,[]));F.set(x9.name,new $(!0,[]));F.set(rg.getFingerprint.name,new $(!0,[]));F.set(rg.setLicense.name,new $(!0,[]));F.set(eg.deleteFilesBefore.name,new $(!0,[]));F.set(eg.deleteAuditLogsBefore.name,new $(!0,[]));F.set(LP.restart.name,new $(!0,[]));F.set(LP.restartService.name,new $(!0,[]));F.set(C9.name,new $(!0,[]));F.set(D9.name,new $(!0,[Mn]));F.set(F9.systemInformation.name,new $(!0,[]));F.set(vP.getConfiguration.name,new $(!0,[]));F.set(BP.readTransactionLog.name,new $(!0,[]));F.set(BP.deleteTransactionLogsBefore.name,new $(!0,[]));F.set(HP.installModules.name,new $(!0,[]));F.set(HP.auditModules.name,new $(!0,[]));F.set(MP.createTokens.name,new $(!1,[]));F.set(MP.refreshOperationToken.name,new $(!1,[]));F.set(PP.login.name,new $(!1,[]));F.set(PP.logout.name,new $(!1,[]));F.set(Vr.customFunctionsStatus.name,new $(!0,[]));F.set(Vr.getCustomFunctions.name,new $(!0,[]));F.set(Vr.getComponents.name,new $(!0,[]));F.set(Vr.getComponentFile.name,new $(!0,[]));F.set(Vr.setComponentFile.name,new $(!0,[]));F.set(Vr.dropComponent.name,new $(!0,[]));F.set(Vr.getCustomFunction.name,new $(!0,[]));F.set(Vr.setCustomFunction.name,new $(!0,[]));F.set(Vr.dropCustomFunction.name,new $(!0,[]));F.set(Vr.addComponent.name,new $(!0,[]));F.set(Vr.dropCustomFunctionProject.name,new $(!0,[]));F.set(Vr.packageComponent.name,new $(!0,[]));F.set(Vr.deployComponent.name,new $(!0,[]));F.set(rg.getRegistrationInfo.name,new $(!1,[]));F.set($u.userInfo.name,new $(!1,[]));F.set(Vu.describeAll.name,new $(!1,[]));F.set(V9,new $(!1,[]));F.set($9,new $(!0,[]));F.set(k9,new $(!0,[]));F.set(hf.CSV_DATA_LOAD,new $(!1,[gi,Eo]));F.set(hf.CSV_URL_LOAD,new $(!1,[gi,Eo]));F.set(hf.CSV_FILE_LOAD,new $(!1,[gi,Eo]));F.set(hf.IMPORT_FROM_S3,new $(!1,[gi,Eo]));F.set(kP.EXPORT_TO_S3,new $(!0,[]));F.set(kP.EXPORT_LOCAL,new $(!0,[]));F.set(us.VALID_SQL_OPS_ENUM.DELETE,new $(!1,[FP]));F.set(us.VALID_SQL_OPS_ENUM.SELECT,new $(!1,[Mn]));F.set(us.VALID_SQL_OPS_ENUM.INSERT,new $(!1,[gi]));F.set(us.VALID_SQL_OPS_ENUM.UPDATE,new $(!1,[Eo]));$P.exports={verifyPerms:W9,verifyPermsAst:K9,verifyBulkLoadAttributePerms:z9};function K9(e,t,r){if(Un.isEmptyOrZeroLength(e))throw Ct.info("verify_perms_ast has an empty user parameter"),Sr(new Error);if(Un.isEmptyOrZeroLength(t))throw Ct.info("verify_perms_ast has an empty user parameter"),Sr(new Error);if(Un.isEmptyOrZeroLength(r))throw Ct.info("verify_perms_ast has a null operation parameter"),Sr(new Error);try{let s=new xP,n=new q9(e),i=n.getSchemas(),o=new Map;if((!i||i.length===0)&&n.affected_attributes&&n.affected_attributes.size>0)throw Ct.info("No schemas defined in verifyPermsAst(), will not continue."),Sr(new Error);let c=!!t.role.permission.super_user,u=i.includes("system");if(u&&GP[r])throw Sr(new Error,Vt.DROP_SYSTEM,Gu.FORBIDDEN);if(c&&!u)return null;let _=UP.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof G9.yy.Select&&(e=n.updateAttributeWildcardsForRolePerms(_));for(let d=0;d<i.length;d++){let f=n.getTablesBySchemaName(i[d]);f&&o.set(i[d],f)}let l=VP(t,r,o,s);return l||(o.forEach((d,f)=>{for(let E=0;E<d.length;E++){let h=n.getAttributesBySchemaTableName(f,d[E]),p=ng(t.role.permission,f,d[E]);sg(h,p,r,d[E],f,s)}}),s.getPermsResponse())}catch(s){throw Sr(s)}}a(K9,"verifyPermsAst");function W9(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Ct.info("null required parameter in verifyPerms"),Sr(new Error,Vt.DEFAULT_INVALID_REQUEST,Gu.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let s=e.action,n=e.schema??e.database,i=e.table,o=new Map;n&&i&&o.set(n,[i]);let c=new xP;if(Un.isEmptyOrZeroLength(e.hdb_user.role)||Un.isEmptyOrZeroLength(e.hdb_user.role.permission))return Ct.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(Vt.USER_HAS_NO_PERMS(e.hdb_user.username));let u=!!e.hdb_user.role.permission.super_user,_=e.hdb_user.role.permission.structure_user,l=o.has(us.SYSTEM_SCHEMA_NAME)||n===us.SYSTEM_SCHEMA_NAME;if(l&&GP[r])throw Sr(new Error,Vt.DROP_SYSTEM,Gu.FORBIDDEN);if(u&&!l||_===!0&&(r===ls.createSchema.name||r===ls.dropSchema.name))return null;if(Y9.indexOf(r)>=0&&(_===!0||Array.isArray(_)))return _===!0||_.indexOf(n)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${n}'`);let d=UP.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===CP||r===DP){if(n===us.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Vt.SCHEMA_PERM_ERROR(n));if(!d.super_user){if(r===CP&&(!d[n]||!d[n][ku]))return c.handleInvalidItem(Vt.SCHEMA_NOT_FOUND(n));if(r===DP&&(!d[n]||!d[n].tables[i]||!d[n].tables[i][ku]))return c.handleInvalidItem(Vt.TABLE_NOT_FOUND(n,i))}}let f=VP(e.hdb_user,r,o,c,s);if(f)return f;if(F.get(r)&&F.get(r).perms.length===0)return null;if(!u&&e.get_attributes&&us.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let p=[],S=d[n].tables[i];S[us.PERMS_CRUD_ENUM.READ]&&(S.attribute_permissions.length>0?S.attribute_permissions.filter(I=>I[us.PERMS_CRUD_ENUM.READ]).forEach(I=>{p.push(I.attribute_name)}):p=global.hdb_schema[n][i].attributes.map(R=>R.attribute),e.get_attributes=p)}let E=Q9(e),h=ng(e.hdb_user.role.permission,n,i);return sg(E,h,r,i,n,c,s),c.getPermsResponse()}a(W9,"verifyPerms");function VP(e,t,r,s,n){if(Un.arrayHasEmptyValues([e,t,r]))throw Ct.info("hasPermissions has an invalid parameter"),Sr(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||F.get(t).requires_su))return null;if(!F.get(t))throw Ct.info(`operation ${t} not found.`),Sr(new Error,Vt.OP_NOT_FOUND(t),Gu.BAD_REQUEST);if(F.get(t)&&F.get(t).requires_su)return Ct.info(`operation ${t} requires SU permissions.`),s.handleUnauthorizedItem(Vt.OP_IS_SU_ONLY(t));let c=r.keys();for(let u of c){try{if(u&&!o[u]||o[u][ku]===!1){s.addInvalidItem(Vt.SCHEMA_NOT_FOUND(u));continue}}catch{s.addInvalidItem(Vt.SCHEMA_NOT_FOUND(u));continue}let _=r.get(u);for(let l of _){let d=o[u].tables[l];if(!d||d[ku]===!1)s.addInvalidItem(Vt.TABLE_NOT_FOUND(u,l));else try{let f=[],E=F.get(t).perms;!Un.isEmpty(n)&&E.includes(n)&&(E=[n]);for(let h=0;h<E.length;h++){let p=E[h],S=d[p];(S==null||S===!1)&&(Ct.info(`Required ${p} permission not found for ${t} ${n?`${n} `:""}operation in role ${e.role.id}`),f.push(p))}f.length>0&&s.addUnauthorizedTable(u,l,f)}catch(f){let E=Vt.UNKNOWN_OP_AUTH_ERROR(t,u,l);throw Ct.error(E),Ct.error(f),Sr(qP.CHECK_LOGS_WRAPPER(E))}}}return r.size<2?s.getPermsResponse():null}a(VP,"hasPermissions");function sg(e,t,r,s,n,i,o){if(!e||!t)throw Ct.info("no attributes specified in checkAttributePerms."),Sr(new Error);let c=F.get(r).perms;if(!c||c==="")throw Ct.info(`no permissions found for ${r} in checkAttributePerms().`),Sr(new Error);if(Un.isEmptyOrZeroLength(t))return Ct.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let u={};for(let l of e){let d=t.get(l);if(d){if(d[ku]===!1){i.addInvalidItem(Vt.ATTR_NOT_FOUND(n,s,l),n,s);continue}if(c)for(let f of c){if(us.TIME_STAMP_NAMES.includes(d.attribute_name)&&f!==Mn)throw Sr(new Error,Vt.SYSTEM_TIMESTAMP_PERMS_ERR,Gu.FORBIDDEN);d[f]===!1&&(u[d.attribute_name]?u[d.attribute_name].push(f):u[d.attribute_name]=[f])}}else i.addInvalidItem(Vt.ATTR_NOT_FOUND(n,s,l),n,s)}let _=Object.keys(u);_.length>0&&i.addUnauthorizedAttributes(_,n,s,u)}a(sg,"checkAttributePerms");function Q9(e){let t=new Set;try{if(e.action)return t;if(e.operation===us.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{t.add(r.search_attribute)}),e&&e.search_attribute&&t.add(e.search_attribute),!e.records||e.records.length===0){if(!e.get_attributes||!e.get_attributes.length===0)return t;for(let r=0;r<e.get_attributes.length;r++)t.add(e.get_attributes[r])}else for(let r=0;r<e.records.length;r++){let s=Object.keys(e.records[r]);for(let n=0;n<s.length;n++)t.add(s[n])}}catch(r){Ct.info(r)}return t}a(Q9,"getRecordAttributes");function ng(e,t,r){let s=new Map;if(Un.isEmpty(e))return Ct.info("no hdb_user specified in getAttributePermissions"),s;if(e.super_user||!t||!r)return s;try{e[t].tables[r].attribute_permissions.forEach(n=>{s.has(n.attribute_name)||s.set(n.attribute_name,n)})}catch{Ct.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return s}a(ng,"getAttributePermissions");function z9(e,t,r,s,n,i,o){let c=new Set(i),u=ng(e,s,n);sg(c,u,t,n,s,o,r)}a(z9,"verifyBulkLoadAttributePerms")});var Sf=T((ahe,zP)=>{"use strict";zP.exports={evaluateSQL:c7,processAST:QP,convertSQLToAST:WP,checkASTPermissions:KP};var J9=Lr(),YP=require("util"),X9=YP.callbackify(J9.insert),j9=es().search,Z9=LC().update,e7=YP.callbackify(Z9),t7=MC().convertDelete,Ri=require("alasql"),r7=mf(),pf=G(),s7=ed(),n7=z(),Yu=D(),{hdb_errors:i7,handleHDBError:ig}=Z(),{HTTP_STATUS_CODES:og}=i7;s7(Ri);var o7=403,a7="There was a problem performing this insert. Please check the logs and try again.",ag=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function c7(e,t){let r=e.parsed_sql_object;if(!r){r=WP(e.sql);let s,n=r.ast.statements[0];if(n instanceof Ri.yy.Insert?s=n.into.databaseid:n instanceof Ri.yy.Select?s=n.from?n.from[0].databaseid:null:n instanceof Ri.yy.Update||n instanceof Ri.yy.Delete?s=n.table.databaseid:pf.error("AST in evaluateSQL is not a valid SQL type."),!(n instanceof Ri.yy.Select)&&n7.isEmptyOrZeroLength(s))return t("No schema specified",null)}QP(e,r,(s,n)=>{if(s)return t(s);t(null,n)})}a(c7,"evaluateSQL");function KP(e,t){let r;try{r=r7.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(s){throw s}return r||null}a(KP,"checkASTPermissions");function WP(e){let t=new ag;if(!e)throw ig(new Error,"The 'sql' parameter is missing from the request body",og.BAD_REQUEST);try{let r=e.trim(),s=Ri.parse(r),n=r.split(" ")[0].toLowerCase();t.ast=s,t.variant=n}catch(r){let s=r.message.split(`
|
|
17
|
+
`);throw s[1]?ig(r,`Invalid SQL at: ${s[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,og.BAD_REQUEST):ig(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",og.BAD_REQUEST)}return t}a(WP,"convertSQLToAST");function QP(e,t,r){try{let s=u7;if(!e.bypass_auth&&!t.permissions_checked){let i=KP(e,t);if(i&&i.length>0)return r(o7,i)}let n={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case Yu.VALID_SQL_OPS_ENUM.SELECT:s=j9,n=t.ast.statements[0];break;case Yu.VALID_SQL_OPS_ENUM.INSERT:s=l7;break;case Yu.VALID_SQL_OPS_ENUM.UPDATE:s=e7;break;case Yu.VALID_SQL_OPS_ENUM.DELETE:s=t7;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}s(n,(i,o)=>{if(i){r(i);return}r(null,o)})}catch(s){return r(s)}}a(QP,"processAST");function u7(e,t){pf.info(e),t("unknown sql statement")}a(u7,"nullFunction");function l7({statement:e,hdb_user:t},r){let s=e.into,n={schema:s.databaseid,table:s.tableid,operation:"insert",hdb_user:t},i=e.columns.map(o=>o.columnid);try{n.records=_7(i,e.values)}catch(o){return r(o)}X9(n,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){pf.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a(l7,"convertInsert");function _7(e,t){try{return t.map(r=>{if(e.length!==r.length)throw"number of values do not match number of columns in insert";let s={};return r.forEach((n,i)=>{if(n.columnid)throw"cannot use a column in insert value";"value"in n?s[e[i]]=n.value:s[e[i]]=Ri.compile(`SELECT ${n.toString()} AS [${Yu.FUNC_VAL}] FROM ?`)}),s})}catch(r){throw pf.error(r),new Error(a7)}}a(_7,"createDataObjects")});var cg=T((uhe,XP)=>{"use strict";var{S3:d7,GetObjectCommand:f7}=require("@aws-sdk/client-s3");XP.exports={getFileStreamFromS3:E7,getS3AuthObj:JP};async function E7(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await JP(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new f7(r))).Body}a(E7,"getFileStreamFromS3");function JP(e,t,r){return new d7({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(JP,"getS3AuthObj")});var Tf=T((_he,ov)=>{"use strict";var lg=es(),h7=Sf(),m7=cg(),{AsyncParser:p7,Transform:S7}=require("json2csv"),Wu=require("stream"),$r=z(),ug=require("fs-extra"),T7=require("path"),_s=G(),{promisify:ev}=require("util"),Ku=z(),{handleHDBError:Rt,hdb_errors:g7}=Z(),{HDB_ERROR_MSGS:Tr,HTTP_STATUS_CODES:At}=g7,{streamAsJSON:R7}=(Dh(),ee(zO)),{Upload:A7}=require("@aws-sdk/lib-storage"),jP=["search_by_value","search_by_hash","sql","search_by_conditions"],ZP=["json","csv"],tv="json",rv="csv",O7="Successfully exported JSON locally.",b7="Successfully exported CSV locally.",N7=1e3,y7=lg.searchByHash,I7=lg.searchByValue,w7=ev(h7.evaluateSQL),C7=ev(Wu.finished);ov.exports={export_to_s3:M7,export_local:D7,toCsvStream:sv};async function D7(e){_s.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=nv(e);if(!$r.isEmpty(t))throw _s.error(t),Rt(new Error,t,At.BAD_REQUEST,void 0,void 0,!0);if($r.isEmpty(e.path))throw _s.error(Tr.MISSING_VALUE("path")),Rt(new Error,Tr.MISSING_VALUE("path"),At.BAD_REQUEST,void 0,void 0,!0);let r=($r.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(T7.sep)&&(e.path=e.path.substring(0,e.path.length-1));let s=$r.buildFolderPath(e.path,r);await L7(e.path);let n=await iv(e);return await U7(s,e.format,n)}a(D7,"export_local");async function L7(e){if(_s.trace("in confirmPath"),$r.isEmptyOrZeroLength(e))throw Rt(new Error,`Invalid path: ${e}`,At.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await ug.stat(e)}catch(r){let s;throw r.code==="ENOENT"?s=`path '${e}' does not exist`:r.code==="EACCES"?s=`access to path '${e}' is denied`:s=r.message,_s.error(s),Rt(new Error,s,At.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${e}' is not a directory, please supply a valid folder path`;throw _s.error(r),Rt(new Error,r,At.BAD_REQUEST,void 0,void 0,!0)}return!0}a(L7,"confirmPath");async function U7(e,t,r){if(_s.trace("in saveToLocal"),Ku.isEmptyOrZeroLength(e))throw Rt(new Error,Tr.INVALID_VALUE("file_path"),At.BAD_REQUEST,void 0,void 0,!0);if(Ku.isEmptyOrZeroLength(t))throw Rt(new Error,Tr.INVALID_VALUE("Source format"),At.BAD_REQUEST,void 0,void 0,!0);if(Ku.isEmpty(r))throw Rt(new Error,Tr.NOT_FOUND("Data"),At.BAD_REQUEST,void 0,void 0,!0);if(t===tv){let s=ug.createWriteStream(e);return R7(r).pipe(s),await C7(s),{message:O7,path:e}}else if(t===rv){let s=ug.createWriteStream(e),n=Wu.Readable.from(r),i={},o={objectMode:!0};return await new p7(i,o).fromInput(n).toOutput(s).promise(!1),{message:b7,path:e}}throw Rt(new Error,Tr.INVALID_VALUE("format"),At.BAD_REQUEST)}a(U7,"saveToLocal");async function M7(e){if(!e.s3||Object.keys(e.s3).length===0)throw Rt(new Error,Tr.MISSING_VALUE("S3 object"),At.BAD_REQUEST);if($r.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw Rt(new Error,Tr.MISSING_VALUE("aws_access_key_id"),At.BAD_REQUEST);if($r.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw Rt(new Error,Tr.MISSING_VALUE("aws_secret_access_key"),At.BAD_REQUEST);if($r.isEmptyOrZeroLength(e.s3.bucket))throw Rt(new Error,Tr.MISSING_VALUE("bucket"),At.BAD_REQUEST);if($r.isEmptyOrZeroLength(e.s3.key))throw Rt(new Error,Tr.MISSING_VALUE("key"),At.BAD_REQUEST);if($r.isEmptyOrZeroLength(e.s3.region))throw Rt(new Error,Tr.MISSING_VALUE("region"),At.BAD_REQUEST);let t=nv(e);if(!$r.isEmpty(t))throw Rt(new Error,t,At.BAD_REQUEST);_s.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await iv(e)}catch(u){throw _s.error(u),u}let s,n=await m7.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new Wu.PassThrough;if(e.format===rv){i=e.s3.key+".csv";let u=sv(r);u.on("error",_=>{throw _}),u.pipe(o)}else if(e.format===tv){i=e.s3.key+".json";let u=new Wu.Readable;u.pipe(o),u.on("error",d=>{throw d}),u.push("[");let _=r.length,l="";for(let[d,f]of r.entries()){let E=d===_-1?JSON.stringify(f):JSON.stringify(f)+",";l+=E,d!==0&&d%N7===0&&(u.push(l),l="")}l.length!==0&&u.push(l),u.push("]"),u.push(null)}else throw Rt(new Error,Tr.INVALID_VALUE("format"),At.BAD_REQUEST);return new A7({client:n,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(M7,"export_to_s3");function sv(e){let t=Wu.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),r={},s={objectMode:!0},n=new S7(r,s);return t.pipe(n)}a(sv,"toCsvStream");function nv(e){if(_s.trace("in exportCoreValidation"),$r.isEmpty(e.format))return"format missing";if(ZP.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${ZP.join(", ")}`;let t=e.search_operation.operation;if($r.isEmpty(t))return"search_operation.operation missing";if(jP.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${jP.join(", ")}`}a(nv,"exportCoreValidation");async function iv(e){_s.trace("in getRecords");let t,r;if(Ku.isEmpty(e.search_operation)||Ku.isEmptyOrZeroLength(e.search_operation.operation))throw Rt(new Error,Tr.INVALID_VALUE("Search operation"),At.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=I7;break;case"search_by_hash":t=y7;break;case"search_by_conditions":t=lg.searchByConditions;break;case"sql":t=w7;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,_s.error(r),Rt(new Error,r,At.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(iv,"getRecords")});var fv={};$e(fv,{contentTypes:()=>hg,findBestSerializer:()=>Rf,getDeserializer:()=>mo,registerContentHandlers:()=>mg,serialize:()=>Af,serializeMessage:()=>Ti});function P7(e){try{return e?.[0]===123?Eg(e):e}catch{return e}}function mg(e){e.register(B7,{serializers:[{regex:/^application\/json$/,serializer:Ec},{regex:/^application\/cbor$/,serializer:function(t){return new ho.EncoderStream(zu).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?gf.Readable.from((0,an.encodeIter)(t,zu)):(0,an.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,_g.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,an.unpack)(r))}catch(n){n.statusCode=400,s(n)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,ho.decode)(r))}catch(n){n.statusCode=400,s(n)}})}function Rf(e){let r=(e.headers.asObject||e.headers).accept,s,n=0,i,o,c=r?r.toLowerCase().split(/\s*,\s*/):[];for(let u of c){let[_,...l]=u.split(/\s*;\s*/),d=1,f={q:1};for(let h of l){let p=h.indexOf("=");f[h.substring(0,p)]=h.substring(p+1)}d=+f.q;let E=$t.get(_);if(E){let h=(E.q||1)*d;h>n&&(s=E,i=E.type||_,n=h,o=f)}}if(!s){if(r)return{serializer(){this.code(406).send("No supported content types found in Accept header, supported types include: "+Array.from($t.keys()).join(", "))}};s=$t.get("application/json"),i="application/json"}return{serializer:s,type:i,parameters:o}}function Af(e,t,r){let s=cv&&t.headers.asObject?.["accept-encoding"]?.includes("br"),n;if(e?.contentType!=null&&e.data!=null)r.headers.set("Content-Type",e.contentType),r.headers.set("Vary","Accept-Encoding"),n=e.data;else if(e instanceof Uint8Array)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),n=e;else{let i=Rf(t);if(i.serializer.compressible===!1&&(s=!1),r.headers.set("Vary","Accept, Accept-Encoding"),r.headers.set("Content-Type",i.type),typeof e=="object"&&(e[Symbol.iterator]||e[Symbol.asyncIterator])&&i.serializer.serializeStream){let o=i.serializer.serializeStream(e);return s&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,Pn.createBrotliCompress)({params:{[Pn.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?Pn.constants.BROTLI_MODE_TEXT:Pn.constants.BROTLI_MODE_GENERIC,[Pn.constants.BROTLI_PARAM_QUALITY]:2}}))),o}n=i.serializer.serialize(e)}return s&&n?.length>cv?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,Pn.brotliCompress)(n,(c,u)=>{c?o(c):i(u)}))):n}function Ti(e,t){if(e?.contentType!=null&&e.data!=null)return e.data;if(!t)return Qu(e);let r=t.serialize;if(r)return r(e);let s=Rf(t);return r=t.serialize=s.serializer.serialize,r(e)}function H7(e){return new Promise((t,r)=>{let s=[];e.on("data",n=>s.push(n)),e.on("end",()=>t(Buffer.concat(s))),e.on("error",r)})}function mo(e,t){e||(e="");let r=e.indexOf(";"),s;r>-1&&(s=e.slice(r+1),e=e.slice(0,r));let n=$t.get(e);if(t){if(n?.deserializeStream)return n.deserializeStream;let i=$t.get(e)?.deserialize||uv(e,s);return o=>H7(o).then(i)}return e&&$t.get(e)?.deserialize||uv(e,s)}function uv(e,t){if(e.startsWith("text/")){let r=t?.match(/charset=(.+)/)?.[1]||"utf-8";return s=>({contentType:e,data:s.toString(r)})}else return e==="application/octet-stream"?r=>r:r=>{if(!e)try{if(r?.[0]===123)return Eg(r)}catch{}return{contentType:e||"application/octet-stream",data:r}}}function x7(e,t){return{[Symbol.asyncIterator](){let r=e[Symbol.asyncIterator]?e[Symbol.asyncIterator]():e[Symbol.iterator]();return{next(){let s=r.next();return s.then?s.then(n=>({value:t(n.value),done:n.done})):{value:t(s.value),done:s.done}},return(s){return r.return(s)},throw(s){return r.throw(s)}}}}}var _g,an,ho,Pn,gf,lv,dg,fg,_v,Qu,Eg,zu,$t,hg,av,dv,v7,B7,cv,Ta=Ae(()=>{Dh();_g=v(Tf()),an=require("msgpackr"),ho=require("cbor-x"),Pn=require("zlib"),gf=require("stream");sr();lv=require("../index"),dg=v(j()),fg=v(D()),_v=dg.default.get(fg.CONFIG_PARAMS.SERIALIZATION_BIGINT)!==!1,Qu=_v?Ui:JSON.stringify,Eg=_v?Ch:JSON.parse,zu={useRecords:!1,useToJSON:!0},$t=new Map,hg=$t;_t.contentTypes=hg;(0,lv._assignPackageExport)("contentTypes",hg);$t.set("application/json",{serializeStream:Ec,serialize:Qu,deserialize:Eg,q:.8});av=new ho.Encoder(zu);$t.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new ho.EncoderStream(zu).end(e)},serialize:av.encode,deserialize:av.decode,q:1});$t.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?gf.Readable.from((0,an.encodeIter)(e,zu)):(0,an.pack)(e)},serialize:an.pack,deserialize:an.unpack,q:.9});$t.set("text/csv",{serializeStream(e){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,_g.toCsvStream)(e)},q:.1});$t.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});$t.set("text/event-stream",{serializeStream:function(e){return gf.Readable.from(x7(e,this.serialize))},serialize:function(e){if(e.acknowledge&&e.acknowledge(),typeof e=="object"&&"value"in e&&e.timestamp&&(e={data:e.value,event:e.type,id:e.timestamp}),e.data||e.event){let t="";if(e.event&&(t+="event: "+e.event+`
|
|
18
|
+
`),e.data){let r=e.data;typeof r=="object"&&(r=Qu(r)),t+="data: "+r+`
|
|
19
19
|
`}return e.id&&(t+="id: "+e.id+`
|
|
20
20
|
`),e.retry&&(t+="retry: "+e.retry+`
|
|
21
21
|
`),t+`
|
|
22
|
-
`}else return typeof e=="object"?`data: ${
|
|
22
|
+
`}else return typeof e=="object"?`data: ${Qu(e)}
|
|
23
23
|
|
|
24
24
|
`:`data: ${e}
|
|
25
25
|
|
|
26
|
-
`},compressible:!1,q:.8});Vt.set("application/x-www-form-urlencoded",{deserialize(e){let t={};for(let[r,s]of new URLSearchParams(e))if(t.hasOwnProperty(r)){let n=t[r];Array.isArray(n)?n.push(s):t.key=[n,s]}else t[r]=s},serialize(e){let t=new URLSearchParams;for(let r in e)t.set(r,e);return t.toString()}});lv={type:"application/json",serializeStream:fc,serialize:Ku,deserialize:n7,q:.8};Vt.set("*/*",lv);Vt.set("",lv);a(n7,"tryJSONParse");a(cg,"registerContentHandlers");i7=require("fastify-plugin"),o7=i7(function(e,t,r){e.addHook("preSerialization",async(s,n)=>{if(n.raw.getHeader("content-type"))return;let{serializer:o,type:c}=Of(s.raw);n.type(c),n.serializer(o.serializeStream||o.serialize)}),r()},{name:"content-type-negotiation"});a(Of,"findBestSerializer");ov=ng.default.get(ig.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(bf,"serialize");a(Ti,"serializeMessage");a(a7,"streamToBuffer");a(fo,"getDeserializer");a(av,"deserializerUnknownType");a(c7,"transformIterable")});var Nf={};je(Nf,{start:()=>_7});async function l7(e,t){let r=e.headers.asObject,s=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&zl(e);let n=new ao;try{e.responseHeaders=n;let i=e.url.slice(1),o=lg.getMatch(i);if(!o)return t(e);e.handlerPath=o.path;let c={url:o.relativeURL,async:!0},u=o.Resource,_=r["cache-control"];if(_){_=_.toLowerCase();let p=_.match(/max-age=(\d+)/)?.[1];p&&(e.expiresAt=p*1e3+Date.now()),_.includes("only-if-cached")&&(e.onlyIfCached=!0),_.includes("no-cache")&&(e.noCache=!0),_.includes("no-store")&&(e.noCacheStore=!0),_.includes("stale-if-error")&&(e.staleIfError=!0),_.includes("must-revalidate")&&(e.mustRevalidate=!0)}let l=await We(e,()=>{if(s==="POST"||s==="PUT"||s==="PATCH"||s==="QUERY")try{e.data=fo(r["content-type"],!0)(e.body)}catch(p){throw new zu.ClientError(p,400)}switch(e.authorize=!0,s){case"GET":case"HEAD":return u.get(c,e);case"POST":return u.post(c,e.data,e);case"PUT":return u.put(c,e.data,e);case"DELETE":return u.delete(c,e);case"PATCH":return u.patch(c,e.data,e);case"OPTIONS":n.setIfNone("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return u.connect(c,null,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return u.query(c,e.data,e);case"COPY":return u.copy(c,r.destination,e);case"MOVE":return u.move(c,r.destination,e);case"BREW":throw new zu.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new zu.ServerError(`Method ${s} is not recognized`,501)}}),d=200,f;if(l==null)d=s==="GET"||s==="HEAD"?404:204,ug.lastModified&&e.lastModified&&n.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(f=e.lastModified){u7[0]=f;let p=String.fromCharCode(34,($t[0]&63)+62,($t[0]>>6)+($t[1]<<2&63)+62,($t[1]>>4)+($t[2]<<4&63)+62,($t[2]>>2)+62,($t[3]&63)+62,($t[3]>>6)+($t[4]<<2&63)+62,($t[4]>>4)+($t[5]<<4&63)+62,($t[5]>>2)+62,($t[6]&63)+62,($t[6]>>6)+($t[7]<<2&63)+62,34),S=r["if-none-match"];S&&p==S?(l?.onDone&&l.onDone(),d=304,l=void 0):n.setIfNone("ETag",p),ug.lastModified&&n.setIfNone("Last-Modified",new Date(f).toUTCString())}e.createdResource&&(d=201),e.newLocation&&n.setIfNone("Location",e.newLocation);let E={status:d,headers:n,body:void 0},h=l?.wasLoadedFromSource?.();return h!==void 0&&(E.wasCacheMiss=h,!h&&f&&n.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||f))/1e3))),l!==void 0&&(E.body=bf(l,e,E),s==="HEAD"&&(E.body=void 0)),E}catch(i){i.statusCode?i.statusCode===500?Eo.warn(i):Eo.info(i):Eo.error(i),i.statusCode===405&&(i.method&&(i.message+=` to handle HTTP method ${i.method.toUpperCase()||""}`),i.allow&&(i.allow.push("trace","head","options"),n.setIfNone("Allow",i.allow.map(c=>c.toUpperCase()).join(", "))));let o={status:i.statusCode||500,headers:n,body:void 0};return o.body=bf(i.contentType?i:i.toString(),e,o),o}}function _7(e){ug=e,!dv&&(dv=!0,lg=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return l7(t,r)}),e.server.ws(async(t,r,s)=>{Qu++;let n=new Ns;fv||(fv=!0,eu(l=>{Qu>0&&l.push({metric:"ws-connections",connections:Qu,byThread:!0})}));let i;t.on("error",l=>{i=!0,Eo.warn(l)});let o;t.on("message",a(function(d){o||(o=fo(r.headers.asObject["content-type"]));let f=o(d);n.push(f)},"message"));let c;t.on("close",()=>{Qu--,us(!i,"connection","ws","disconnect"),n.emit("close"),c&&c.return()}),await s;let u=r.url.slice(1),_=lg.getMatch(u);if(us(!!_,"connection","ws","connect"),!_)t.send(Ti(`No resource was found to handle ${r.pathname}`,r));else{r.handlerPath=_.path,Fr(h=>({count:h.count,total:Qu}),"connections",r.handlerPath,"connect","ws");let l={url:_.relativeURL,async:!0},d=_.Resource;c=(await We(r,()=>d.connect(l,n,r)))[Symbol.asyncIterator]();let E;for(;!(E=await c.next()).done;){let h=Ti(E.value,r);t.send(h),Fr(h.length,"bytes-sent",r.handlerPath,"message","ws")}}t.close()}))}var Eo,zu,$t,u7,ug,dv,lg,fv,Qu,Ev=ge(()=>{Sa();ai();Eo=M(G()),zu=M(Z());Jl();oc();Di();UT();$t=new Uint8Array(8),u7=new Float64Array($t.buffer,0,1),ug={};a(l7,"http");Qu=0;a(_7,"start")});var _g=T((CEe,hv)=>{var{recordAction:yf,recordActionBinary:d7}=(ai(),te(cd)),f7=require("fastify-plugin"),E7=200;hv.exports=f7(function(e,t,r){e.addHook("onResponse",async(s,n)=>{n.getResponseTime()}),e.addHook("onSend",async(s,n,i)=>{let o=n.getResponseTime(),c=performance.now(),u=n.request.routeOptions,_,l,d;u.config?.isOperation?(_=s.body?.operation,l="operation"):(_=u.url,l="fastify-route",d=u.method),yf(o,"duration",_,d,l),d7(n.raw.statusCode<400,"success",_,d,l);let f=E7;i?.pipe?(i.on("data",h=>{f+=h.length}),i.on("end",()=>{yf(performance.now()-c,"transfer",_,d,l),yf(f,"bytes-sent",_,d,l)})):(f+=i?.length||0,yf(f,"bytes-sent",_,d,l));let E=o.toFixed(3);n.header("Server-Timing",`db;dur=${E}`)}),r()},{name:"hdb-request-time"})});var hg=T((DEe,gv)=>{var Lf=require("clone"),Uf=ze(),h7=W(),Cf=I(),m7=G(),If=require("fs"),dg=require("joi"),{string:Df}=dg.types(),{hdb_errors:p7,handleHDBError:Ju}=Z(),{HDB_ERROR_MSGS:S7,HTTP_STATUS_CODES:wf}=p7,{common_validators:Na}=Qs(),mv=1e9,pv=" is required",T7=["insert","update","upsert"],fg={database:{presence:!1,format:Na.schema_format,length:Na.schema_length},schema:{presence:!1,format:Na.schema_format,length:Na.schema_length},table:{presence:!0,format:Na.schema_format,length:Na.schema_length},action:{inclusion:{within:T7,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},g7={schema:Df.required(),table:Df.required(),action:Df.valid("insert","update","upsert")},{AWS_ACCESS_KEY:R7,AWS_SECRET:A7,AWS_BUCKET:O7,AWS_FILE_KEY:b7,REGION:N7}=Cf.S3_BUCKET_AUTH_KEYS,y7={s3:{presence:!0},[`s3.${R7}`]:{presence:!0,type:"String"},[`s3.${A7}`]:{presence:!0,type:"String"},[`s3.${O7}`]:{presence:!0,type:"String"},[`s3.${b7}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${N7}`]:{presence:!0,type:"String"}},Sv=Lf(fg);Sv.data.presence={message:pv};var Tv=Lf(fg);Tv.file_path.presence={message:pv};var I7=Object.assign(Lf(fg),y7),Eg=Lf(g7);Eg.csv_url=Df.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();Eg.passthrough_headers=dg.object();function w7(e){let t=Uf.validateObject(e,Sv);return Mf(e,t)}a(w7,"dataObject");function C7(e){let t=Uf.validateBySchema(e,dg.object(Eg));return Mf(e,t)}a(C7,"urlObject");function D7(e){let t=Uf.validateObject(e,Tv);return Mf(e,t)}a(D7,"fileObject");function L7(e){let t=Uf.validateObject(e,I7);return Mf(e,t)}a(L7,"s3FileObject");function Mf(e,t){if(!t){let r=h7.checkGlobalSchemaTable(e.schema,e.table);if(r)return Ju(new Error,r,wf.BAD_REQUEST);if(e.operation===Cf.OPERATIONS_ENUM.CSV_FILE_LOAD){try{If.accessSync(e.file_path,If.constants.R_OK|If.constants.F_OK)}catch(s){return s.code===Cf.NODE_ERROR_CODES.ENOENT?Ju(s,`No such file or directory ${s.path}`,wf.BAD_REQUEST):s.code===Cf.NODE_ERROR_CODES.EACCES?Ju(s,`Permission denied ${s.path}`,wf.BAD_REQUEST):Ju(s)}try{let s=If.statSync(e.file_path).size;if(s>mv)return Ju(new Error,S7.MAX_FILE_SIZE_ERR(s,mv),wf.BAD_REQUEST)}catch(s){m7.error(s),console.error(s)}}}return t}a(Mf,"postValidateChecks");gv.exports={dataObject:w7,urlObject:C7,fileObject:D7,s3FileObject:L7}});var mg=T((UEe,Rv)=>{"use strict";var Xu=G(),Pf=I();async function U7(e,t,r,s=void 0){if(!e||typeof e!="function")throw new Error("Invalid function parameter");let n;try{return n=await e(t),r&&await r(t,n,s),t.operation===Pf.OPERATIONS_ENUM.INSERT||t.operation===Pf.OPERATIONS_ENUM.UPDATE||t.operation===Pf.OPERATIONS_ENUM.UPSERT?(delete n.new_attributes,delete n.txn_time):t.operation===Pf.OPERATIONS_ENUM.DELETE&&delete n.txn_time,n}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(Xu.info(i.message),i):i.http_resp_msg?(Xu.error(`Error calling operation: ${e.name}`),Xu.error(i.http_resp_msg),i):(Xu.error(`Error calling operation: ${e.name}`),Xu.error(i),i)}}a(U7,"callOperationFunctionAsAwait");Rv.exports={callOperationFunctionAsAwait:U7}});var Ov=T((PEe,Av)=>{"use strict";var pg=class{static{a(this,"BulkLoadFileObject")}constructor(t,r,s,n,i,o,c=null){this.op=t,this.action=r,this.schema=s,this.table=n,this.file_path=i,this.file_type=o,this.role_perms=c}},Sg=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,s,n){this.action=t,this.schema=r,this.table=s,this.data=n}};Av.exports={BulkLoadFileObject:pg,BulkLoadDataObject:Sg}});var Nv=T((BEe,bv)=>{"use strict";var Tg=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};bv.exports=Tg});var Ng=T((kEe,kv)=>{"use strict";var vf=Ur(),Hf=hg(),M7=require("needle"),xs=I(),xEe=Ge(),ya=W(),{handleHDBError:nt,hdb_errors:Pv}=Z(),{HTTP_STATUS_CODES:Yt,HDB_ERROR_MSGS:wt,CHECK_LOGS_WRAPPER:mo}=Pv,Ia=G(),gg=require("papaparse");ya.promisifyPapaParse();var qs=require("fs-extra"),P7=require("path"),{chain:yv}=require("stream-chain"),Iv=require("stream-json/streamers/StreamArray"),wv=require("stream-json/utils/Batch"),Cv=require("stream-chain/utils/comp"),{finished:Dv}=require("stream"),v7=j(),vv=mg(),B7=eg(),{BulkLoadFileObject:Ag,BulkLoadDataObject:H7}=Ov(),Og=$T(),{verifyBulkLoadAttributePerms:Bv}=Sf(),qEe=Nv(),FEe=rt(),GEe=Rn(),{databases:x7}=(pe(),te(Fe)),{coerceType:q7}=(xf(),te(yg)),Lv="No records parsed from csv file.",ho=`${v7.get("HDB_ROOT")}/tmp`,{schema_regex:F7}=Qs(),Uv=1024*1024*2,Mv=5e3,G7={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};kv.exports={csvDataLoad:k7,csvURLLoad:V7,csvFileLoad:$7,importFromS3:Y7};async function k7(e,t){let r=Hf.dataObject(e);if(r)throw nt(r,r.message,Yt.BAD_REQUEST,void 0,void 0,!0);let s={};try{let n=qv(e.schema,e.table),i=gg.parse(e.data,{header:!0,skipEmptyLines:!0,transform:Rg.bind(null,n),dynamicTyping:!1}),o=new Og;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&Bv(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 nt(new Error,c,Yt.BAD_REQUEST,void 0,void 0,!0);let u=new H7(e.action,e.schema,e.table,i.data);return s=await vv.callOperationFunctionAsAwait(Fv,u,null),s.message===Lv?Lv:Gv(s.records,s.number_written)}catch(n){throw po(n)}}a(k7,"csvDataLoad");async function V7(e){let t=Hf.urlObject(e);if(t)throw nt(t,t.message,Yt.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,s=`${ho}/${r}`;try{await K7(e,r)}catch(n){throw Ia.error(wt.DOWNLOAD_FILE_ERR(r)+" - "+n),nt(n,mo(wt.DOWNLOAD_FILE_ERR(r)))}try{let n=new Ag(this.job_operation_function.name,e.action,e.schema,e.table,s,xs.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await bg(n);return await Bf(s),i}catch(n){throw await Bf(s),po(n)}}a(V7,"csvURLLoad");async function $7(e){let t=Hf.fileObject(e);if(t)throw nt(t,t.message,Yt.BAD_REQUEST,void 0,void 0,!0);let r=new Ag(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,xs.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await bg(r)}catch(s){throw po(s)}}a($7,"csvFileLoad");async function Y7(e){let t=Hf.s3FileObject(e);if(t)throw nt(t,t.message,Yt.BAD_REQUEST,void 0,void 0,!0);let r;try{let s=P7.extname(e.s3.key),n=`${Date.now()}${s}`;r=`${ho}/${n}`;let i=new Ag(this.job_operation_function.name,e.action,e.schema,e.table,r,s,e.hdb_user.role.permission);await W7(n,e);let o=await bg(i);return await Bf(r),o}catch(s){throw await Bf(r),po(s)}}a(Y7,"importFromS3");async function K7(e,t){let r;try{let s=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await M7("get",e.csv_url,s)}catch(s){let n=`Error downloading CSV file from ${e.csv_url}, status code: ${s.statusCode}. Check the log for more information.`;throw nt(s,n,s.statusCode,xs.LOG_LEVELS.ERROR,"Error downloading CSV file - "+s)}z7(r,e.csv_url),await Q7(t,r.raw)}a(K7,"downloadCSVFile");async function W7(e,t){try{let r=`${ho}/${e}`;await qs.mkdirp(ho),await qs.writeFile(`${ho}/${e}`,"",{flag:"a+"});let s=await qs.createWriteStream(r),n=await B7.getFileStreamFromS3(t);await new Promise((i,o)=>{n.on("error",function(c){o(c)}),n.pipe(s).on("error",function(c){o(c)}).on("close",function(){Ia.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw Ia.error(wt.S3_DOWNLOAD_ERR+" - "+r),nt(r,mo(wt.S3_DOWNLOAD_ERR))}}a(W7,"downloadFileFromS3");async function Q7(e,t){try{await qs.mkdirp(ho),await qs.writeFile(`${ho}/${e}`,t)}catch(r){throw Ia.error(wt.WRITE_TEMP_FILE_ERR),nt(r,mo(wt.DEFAULT_BULK_LOAD_ERR))}}a(Q7,"writeFileToTempFolder");async function Bf(e){if(e)try{await qs.access(e),await qs.unlink(e)}catch{Ia.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(Bf,"deleteTempFile");function z7(e,t){if(e.statusCode!==Pv.HTTP_STATUS_CODES.OK)throw nt(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Yt.BAD_REQUEST);if(!G7[e.headers["content-type"]])throw nt(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Yt.BAD_REQUEST);if(!e.raw)throw nt(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Yt.BAD_REQUEST)}a(z7,"validateURLResponse");async function bg(e){try{let t;switch(e.file_type){case xs.VALID_S3_FILE_TYPES.CSV:t=await J7(e);break;case xs.VALID_S3_FILE_TYPES.JSON:t=await X7(e);break;default:throw nt(new Error,wt.DEFAULT_BULK_LOAD_ERR,Yt.BAD_REQUEST,xs.LOG_LEVELS.ERROR,wt.INVALID_FILE_EXT_ERR(e))}return Gv(t.records,t.number_written)}catch(t){throw po(t)}}a(bg,"fileLoad");async function Hv(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;n&&n.pause();let o={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await vf.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&Bv(e.role_perms,e.op,e.action,e.schema,e.table,c,t),n&&n.resume()}catch(c){let u=nt(c);r(u)}}a(Hv,"validateChunk");async function xv(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;ya.autoCastJSONDeep(i),n&&n.pause();let o=s.meta?s.meta.fields:null;if(o)i.forEach(c=>{!ya.isEmpty(c)&&!ya.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(u=>{Object.keys(u).forEach(_=>c.add(_))}),o=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},u=await vv.callOperationFunctionAsAwait(Fv,c,null);t.records+=u.records,t.number_written+=u.number_written,n&&n.resume()}catch(c){let u=nt(c,mo(wt.INSERT_CSV_ERR),Yt.INTERNAL_SERVER_ERROR,xs.LOG_LEVELS.ERROR,wt.INSERT_CSV_ERR+" - "+c);r(u)}}a(xv,"insertChunk");async function J7(e){let t={records:0,number_written:0},r=qv(e.schema,e.table);try{let s=new Og,n=qs.createReadStream(e.file_path,{highWaterMark:Uv});n.setEncoding("utf8"),await gg.parsePromise(n,Hv.bind(null,e,s),Rg.bind(null,r));let i=s.getPermsResponse();if(i)throw nt(new Error,i,Yt.BAD_REQUEST);return n=qs.createReadStream(e.file_path,{highWaterMark:Uv}),n.setEncoding("utf8"),await gg.parsePromise(n,xv.bind(null,e,t),Rg.bind(null,r)),n.destroy(),t}catch(s){throw nt(s,mo(wt.PAPA_PARSE_ERR),Yt.INTERNAL_SERVER_ERROR,xs.LOG_LEVELS.ERROR,wt.PAPA_PARSE_ERR+s)}}a(J7,"callPapaParse");function qv(e,t){let r=x7[e][t].attributes,s=new Map;for(let n of r)n.type&&s.set(n.name,i=>q7(i,n));return s}a(qv,"createTransformMap");function Rg(e,t,r){let s=e.get(r);return s?s(t):ya.autoCast(t)}a(Rg,"typeFunction");async function X7(e){let t={records:0,number_written:0},r=a(s=>{throw s},"throwErr");try{let s=new Og,n=yv([qs.createReadStream(e.file_path,{encoding:"utf-8"}),Iv.withParser(),c=>c.value,new wv({batchSize:Mv}),Cv(async c=>{await Hv(e,s,r,c)})]);await new Promise((c,u)=>{Dv(n,_=>{_?u(_):c()}),n.resume()});let i=s.getPermsResponse();if(i)throw nt(new Error,i,Yt.BAD_REQUEST);let o=yv([qs.createReadStream(e.file_path,{encoding:"utf-8"}),Iv.withParser(),c=>c.value,new wv({batchSize:Mv}),Cv(async c=>{await xv(e,t,r,c)})]);return await new Promise((c,u)=>{Dv(o,_=>{_?u(_):c()}),o.resume()}),t}catch(s){throw nt(s,mo(wt.INSERT_JSON_ERR),Yt.INTERNAL_SERVER_ERROR,xs.LOG_LEVELS.ERROR,wt.INSERT_JSON_ERR+s)}}a(X7,"insertJson");async function Fv(e){let t={};try{e.data&&e.data.length>0&&j7(e.data[0])?t=await Z7(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",Ia.info(t.message))}catch(r){throw po(r)}return t}a(Fv,"callBulkFileLoad");function j7(e){let t=Object.keys(e);for(let r of t)if(!F7.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(j7,"validateColumnNames");async function Z7(e,t,r,s){s||(s="insert");let n={operation:s,schema:t,table:r,records:e},i;switch(s){case"insert":i=vf.insert;break;case"update":i=vf.update;break;case"upsert":i=vf.upsert;break;default:throw nt(new Error,wt.INVALID_ACTION_PARAM_ERR(s),Yt.BAD_REQUEST,xs.LOG_LEVELS.ERROR,wt.INVALID_ACTION_PARAM_ERR(s))}try{let o=await i(n),c;switch(s){case"insert":c=o.inserted_hashes;break;case"update":c=o.update_hashes;break;case"upsert":c=o.upserted_hashes;break;default:break}if(Array.isArray(o.skipped_hashes)&&o.skipped_hashes.length>0){let l=global.hdb_schema[t][r].hash_attribute,d=e.length;for(;d--;)o.skipped_hashes.indexOf(e[d][l])>=0&&e.splice(d,1)}let u=ya.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw po(o)}}a(Z7,"bulkFileLoad");function Gv(e,t){return`successfully loaded ${t} of ${e} records`}a(Gv,"buildResponseMsg");function po(e){return nt(e,mo(wt.DEFAULT_BULK_LOAD_ERR),Yt.INTERNAL_SERVER_ERROR,xs.LOG_LEVELS.ERROR,wt.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(po,"buildTopLevelErrMsg")});var $v=T(($Ee,Vv)=>{"use strict";var Ig=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};Vv.exports=Ig});var Wv=T((KEe,Kv)=>{"use strict";var eee=I(),Yv=require("moment"),tee=require("uuid").v4,wg=class{static{a(this,"JobObject")}constructor(){this.id=tee(),this.type=void 0,this.start_datetime=Yv().valueOf(),this.created_datetime=Yv().valueOf(),this.end_datetime=void 0,this.status=eee.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};Kv.exports=wg});var Cg=T((QEe,Zv)=>{"use strict";var ree=require("uuid").v4,Jv=Ur(),Xv=os(),see=Zs(),nee=Zo(),iee=$v(),it=I(),oee=Wv(),aee=Rd(),Ts=G(),cee=yc(),wa=W(),{promisify:uee}=require("util"),So=require("moment"),lee=gf(),qf=hg(),Qv=Sm(),{deleteTransactionLogsBeforeValidator:_ee}=qT(),{handleHDBError:dee,hdb_errors:fee}=Z(),{HTTP_STATUS_CODES:Eee}=fee,zv=Xv.searchByValue,hee=Xv.searchByHash,mee=Jv.insert,pee=uee(lee.evaluateSQL),See=Jv.update;Zv.exports={addJob:Ree,updateJob:Oee,handleGetJob:Tee,handleGetJobsByStartDate:gee,getJobById:jv};async function Tee(e){try{let t=await jv(e.id);return wa.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 Ts.error("There was an error getting job",t),new Error(r)}}a(Tee,"handleGetJob");async function gee(e){try{let t=await Aee(e);if(Ts.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=So(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=So(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 Ts.error(r),new Error(r)}}a(gee,"handleGetJobsByStartDate");async function Ree(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||wa.isEmptyOrZeroLength(e.operation)){let l="job parameter is invalid";return Ts.info(l),t.error=l,t}if(!it.JOB_TYPE_ENUM[e.operation])return Ts.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,s;switch(r){case it.OPERATIONS_ENUM.CSV_FILE_LOAD:s=qf.fileObject(e);break;case it.OPERATIONS_ENUM.CSV_URL_LOAD:s=qf.urlObject(e);break;case it.OPERATIONS_ENUM.CSV_DATA_LOAD:s=qf.dataObject(e);break;case it.OPERATIONS_ENUM.IMPORT_FROM_S3:s=qf.s3FileObject(e);break;case it.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case it.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:s=Qv(e,"date");break;case it.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:s=Qv(e,"timestamp");break;case it.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:s=_ee(e);break;default:break}if(s)throw dee(s,s.message,Eee.BAD_REQUEST,void 0,void 0,!0);let n=new oee;n.type=e.operation===it.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?it.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,n.type=e.operation,n.user=e.hdb_user.username;let i=new see(it.SYSTEM_SCHEMA_NAME,it.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",n.id,"id",["id"]),o;try{o=Array.from(await zv(i))}catch(l){let d=`There was an error inserting a new job: ${l}`;return Ts.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){n.id=ree();try{o=await zv(i)}catch(l){let d=`There was an error inserting a new job: ${l}`;return Ts.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return Ts.error("Error creating a job, could not find a unique job id."),t}n.request=e;let u=new cee(it.SYSTEM_SCHEMA_NAME,it.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[n]),_;try{_=await mee(u)}catch(l){return Ts.error(`There was an error inserting a job for job type: ${e.operation} -- ${l}`),t.success=!1,t}if(_.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${n.operation} and id ${n.id}`;else{let l=`Created a job with type ${n.type} and id ${n.id}`;t.message=l,t.createdJob=n,t.success=!0,Ts.trace(l)}return t}a(Ree,"addJob");async function Aee(e){let t=So(e.from_date,So.ISO_8601),r=So(e.to_date,So.ISO_8601);if(!t.isValid())throw new Error("Invalid 'from' date, must be in ISO-8601 format (YYYY-MM-DD).");if(!r.isValid())throw new Error("Invalid 'to' date, must be in ISO-8601 format (YYYY-MM-DD)");let s=`select * from system.hdb_job where start_datetime > '${t.valueOf()}' and start_datetime < '${r.valueOf()}'`,n=new iee(s,e.hdb_user);try{return await pee(n)}catch(i){throw Ts.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(Aee,"getJobsInDateRange");async function jv(e){if(wa.isEmptyOrZeroLength(e))return wa.errorizeMessage("Invalid job ID specified.");let t=new nee(it.SYSTEM_SCHEMA_NAME,it.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await hee(t)}catch(r){let s=`There was an error searching for a job by id: ${e} ${r}`;return Ts.error(s),wa.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(jv,"getJobById");async function Oee(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(wa.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===it.JOB_STATUS_ENUM.COMPLETE||e.status===it.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=So().valueOf());let t=new aee(it.SYSTEM_SCHEMA_NAME,it.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await See(t),r}a(Oee,"updateJob")});var i0=T((JEe,n0)=>{"use strict";var e0=W(),Rr=I(),bee=require("moment"),Ff=Ng(),Gf=G(),t0=Cg(),r0=Rf(),s0=ti(),Nee=Qe(),yee=Ef(),Dg=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function Iee(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(e0.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(e0.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Rr.JOB_TYPE_ENUM.csv_file_load:await vn(e,Ff.csvFileLoad);break;case Rr.JOB_TYPE_ENUM.csv_url_load:await vn(e,Ff.csvURLLoad);break;case Rr.JOB_TYPE_ENUM.csv_data_load:await vn(e,Ff.csvDataLoad);break;case Rr.JOB_TYPE_ENUM.import_from_s3:await vn(e,Ff.importFromS3);break;case Rr.JOB_TYPE_ENUM.empty_trash:break;case Rr.JOB_TYPE_ENUM.export_local:await vn(e,r0.export_local);break;case Rr.JOB_TYPE_ENUM.export_to_s3:await vn(e,r0.export_to_s3);break;case Rr.JOB_TYPE_ENUM.delete_files_before:case Rr.JOB_TYPE_ENUM.delete_records_before:await vn(e,s0.deleteFilesBefore);break;case Rr.JOB_TYPE_ENUM.delete_audit_logs_before:await vn(e,s0.deleteAuditLogsBefore);break;case Rr.JOB_TYPE_ENUM.delete_transaction_logs_before:await vn(e,yee.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(Iee,"parseMessage");async function vn(e,t){try{e.job.status=Rr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=bee().valueOf(),await t0.updateJob(e.job),await wee(e.job.id)}catch(r){let s=r.message!==void 0?r.message:r;typeof s=="string"?(s=`There was an error running ${t.name} job with id ${e.job.id} - ${s}`,r.message=s):Gf.error(`There was an error running ${t.name} job with id ${e.job.id}`),Gf.error(s),e.job.message=s,e.job.status=Rr.JOB_STATUS_ENUM.ERROR;try{await t0.updateJob(e.job)}catch(n){throw Gf.error(`Unable to update job with id ${e.job.id}`),n}throw r}}a(vn,"runJob");async function wee(e){Gf.trace("launching job thread:",e),Nee.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[Rr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(wee,"launchJobThread");n0.exports={parseMessage:Iee,RunnerMessage:Dg}});var a0=T((jEe,o0)=>{"use strict";var Lg=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};o0.exports=Lg});var b0=T((ehe,Hg)=>{"use strict";var Yf=os(),Pg=gf(),kf=Ng(),Bn=au(),Vf=jn(),Zu=ti(),Cee=sS(),ju=cs(),$f=dS(),Kt=xT(),Ct=G(),Dee=hS(),Lee=Ud(),c0=XS(),Uee=Pd(),Mee=jS(),Pee=ZS(),vee=rT(),Bee=nT(),Ug=aT(),u0=Rf(),Hee=Sf(),vg=Cg(),P=I(),{hdb_errors:tl,handleHDBError:el}=Z(),{HTTP_STATUS_CODES:l0}=tl,Mg=dT(),_0=Xd(),g0=require("util"),Ca=Ur(),xee=An(),qee=la(),d0=i0(),f0=fu(),E0=(rf(),te(Mu)),h0=vr(),m0=Ef(),p0=cf(),{setServerUtilities:Fee}=(xf(),te(yg)),{CONTEXT:Gee}=(ys(),te(lh)),{_assignPackageExport:kee}=require("../index"),{transformReq:Vee}=W(),{server:$ee}=(ss(),te(Lo)),Yee=mg(),S0=Yf.searchByHash,Kee=Yf.searchByValue,Wee=g0.promisify(Yf.search),Qee=g0.promisify(Pg.evaluateSQL),zee={[P.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[P.OPERATIONS_ENUM.CREATE_TABLE]:!0,[P.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[P.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[P.OPERATIONS_ENUM.DROP_TABLE]:!0,[P.OPERATIONS_ENUM.DROP_SCHEMA]:!0},F=a0();async function R0(e,t){try{if(e.body.operation!=="read_log"&&(Ct.log_level===P.LOG_LEVELS.INFO||Ct.log_level===P.LOG_LEVELS.DEBUG||Ct.log_level===P.LOG_LEVELS.TRACE)){let{hdb_user:s,hdb_auth_header:n,password:i,...o}=e.body;Ct.info(o)}}catch(s){Ct.error(s)}let r=await Yee.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return zee[e.body.operation]&&xee.setSchemaDataToGlobal(s=>{s&&Ct.error(s)}),r}a(R0,"processLocalTransaction");var T0=Xee();Hg.exports={chooseOperation:A0,getOperationFunction:O0,operation:Bg,processLocalTransaction:R0};Fee(Hg.exports);$ee.operation=Bg;function A0(e){let t;try{t=O0(e)}catch(n){throw Ct.error(`Error when selecting operation function - ${n}`),n}let{operation_function:r,job_operation_function:s}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let n=e.operation==="sql"?e.sql:e.search_operation.sql,i=Pg.convertSQLToAST(n);if(e.parsed_sql_object=i,!e.bypass_auth){let o=Pg.checkASTPermissions(e,i);if(o)throw Ct.error(`${l0.FORBIDDEN} from operation ${e.operation}`),Ct.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),el(new Error,o,tl.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==P.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==P.OPERATIONS_ENUM.LOGIN&&e.operation!==P.OPERATIONS_ENUM.LOGOUT){let n=s===void 0?r:s,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=Hee.verifyPerms(i,n);if(o)throw Ct.error(`${l0.FORBIDDEN} from operation ${e.operation}`),Ct.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),el(new Error,o,tl.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(n){throw el(n,"There was an error when trying to choose an operation path")}return r}a(A0,"chooseOperation");function O0(e){if(Ct.trace(`getOperationFunction with operation: ${e.operation}`),T0.has(e.operation))return T0.get(e.operation);throw el(new Error,tl.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),tl.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(O0,"getOperationFunction");kee("operation",Bg);function Bg(e,t){e.hdb_user=this[Gee]?.user,e.bypass_auth=!t;let r=A0(e);return R0({body:e},r)}a(Bg,"operation");async function Jee(e){Ct.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),s=r[0],n=r[1];for(let i of t.transactions)try{i.schema=s,i.table=n,i[P.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case P.OPERATIONS_ENUM.INSERT:o=await Ca.insert(i);break;case P.OPERATIONS_ENUM.UPDATE:o=await Ca.update(i);break;case P.OPERATIONS_ENUM.UPSERT:o=await Ca.upsert(i);break;case P.OPERATIONS_ENUM.DELETE:o=await Zu.deleteRecord(i);break;default:Ct.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){Ct.info("Invalid operation in transaction"),Ct.error(o)}}a(Jee,"catchup");async function ln(e){Vee(e);let t,r;try{r=await vg.addJob(e),t=r.createdJob,Ct.info("addJob result",r);let s=new d0.RunnerMessage(t,e);return await d0.parseMessage(s),{message:`Starting job with id ${t.id}`,job_id:t.id}}catch(s){let n=`There was an error executing job: ${s.http_resp_msg?s.http_resp_msg:s}`;throw Ct.error(n),el(s,n)}}a(ln,"executeJob");function Xee(){let e=new Map;return e.set(P.OPERATIONS_ENUM.INSERT,new F(Ca.insert)),e.set(P.OPERATIONS_ENUM.UPDATE,new F(Ca.update)),e.set(P.OPERATIONS_ENUM.UPSERT,new F(Ca.upsert)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new F(Yf.searchByConditions)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_HASH,new F(S0)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_ID,new F(S0)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_VALUE,new F(Kee)),e.set(P.OPERATIONS_ENUM.SEARCH,new F(Wee)),e.set(P.OPERATIONS_ENUM.SQL,new F(Qee)),e.set(P.OPERATIONS_ENUM.CSV_DATA_LOAD,new F(ln,kf.csvDataLoad)),e.set(P.OPERATIONS_ENUM.CSV_FILE_LOAD,new F(ln,kf.csvFileLoad)),e.set(P.OPERATIONS_ENUM.CSV_URL_LOAD,new F(ln,kf.csvURLLoad)),e.set(P.OPERATIONS_ENUM.IMPORT_FROM_S3,new F(ln,kf.importFromS3)),e.set(P.OPERATIONS_ENUM.CREATE_SCHEMA,new F(Bn.createSchema)),e.set(P.OPERATIONS_ENUM.CREATE_DATABASE,new F(Bn.createSchema)),e.set(P.OPERATIONS_ENUM.CREATE_TABLE,new F(Bn.createTable)),e.set(P.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new F(Bn.createAttribute)),e.set(P.OPERATIONS_ENUM.DROP_SCHEMA,new F(Bn.dropSchema)),e.set(P.OPERATIONS_ENUM.DROP_DATABASE,new F(Bn.dropSchema)),e.set(P.OPERATIONS_ENUM.DROP_TABLE,new F(Bn.dropTable)),e.set(P.OPERATIONS_ENUM.DROP_ATTRIBUTE,new F(Bn.dropAttribute)),e.set(P.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new F(Vf.describeSchema)),e.set(P.OPERATIONS_ENUM.DESCRIBE_DATABASE,new F(Vf.describeSchema)),e.set(P.OPERATIONS_ENUM.DESCRIBE_TABLE,new F(Vf.describeTable)),e.set(P.OPERATIONS_ENUM.DESCRIBE_ALL,new F(Vf.describeAll)),e.set(P.OPERATIONS_ENUM.DELETE,new F(Zu.deleteRecord)),e.set(P.OPERATIONS_ENUM.ADD_USER,new F(ju.addUser)),e.set(P.OPERATIONS_ENUM.ALTER_USER,new F(ju.alterUser)),e.set(P.OPERATIONS_ENUM.DROP_USER,new F(ju.dropUser)),e.set(P.OPERATIONS_ENUM.LIST_USERS,new F(ju.listUsersExternal)),e.set(P.OPERATIONS_ENUM.LIST_ROLES,new F($f.listRoles)),e.set(P.OPERATIONS_ENUM.ADD_ROLE,new F($f.addRole)),e.set(P.OPERATIONS_ENUM.ALTER_ROLE,new F($f.alterRole)),e.set(P.OPERATIONS_ENUM.DROP_ROLE,new F($f.dropRole)),e.set(P.OPERATIONS_ENUM.USER_INFO,new F(ju.userInfo)),e.set(P.OPERATIONS_ENUM.READ_LOG,new F(Dee)),e.set(P.OPERATIONS_ENUM.ADD_NODE,new F(Lee)),e.set(P.OPERATIONS_ENUM.UPDATE_NODE,new F(c0)),e.set(P.OPERATIONS_ENUM.SET_NODE_REPLICATION,new F(c0)),e.set(P.OPERATIONS_ENUM.REMOVE_NODE,new F(Uee)),e.set(P.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new F(Mee)),e.set(P.OPERATIONS_ENUM.PURGE_STREAM,new F(Pee)),e.set(P.OPERATIONS_ENUM.SET_CONFIGURATION,new F(h0.setConfiguration)),e.set(P.OPERATIONS_ENUM.CLUSTER_STATUS,new F(vee.clusterStatus)),e.set(P.OPERATIONS_ENUM.CLUSTER_NETWORK,new F(Bee)),e.set(P.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new F(Ug.setRoutes)),e.set(P.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new F(Ug.getRoutes)),e.set(P.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new F(Ug.deleteRoutes)),e.set(P.OPERATIONS_ENUM.EXPORT_TO_S3,new F(ln,u0.export_to_s3)),e.set(P.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new F(ln,Zu.deleteFilesBefore)),e.set(P.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new F(ln,Zu.deleteFilesBefore)),e.set(P.OPERATIONS_ENUM.EXPORT_LOCAL,new F(ln,u0.export_local)),e.set(P.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new F(vg.handleGetJobsByStartDate)),e.set(P.OPERATIONS_ENUM.GET_JOB,new F(vg.handleGetJob)),e.set(P.OPERATIONS_ENUM.GET_FINGERPRINT,new F(Mg.getFingerprint)),e.set(P.OPERATIONS_ENUM.SET_LICENSE,new F(Mg.setLicense)),e.set(P.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new F(Mg.getRegistrationInfo)),e.set(P.OPERATIONS_ENUM.RESTART,new F(_0.restart)),e.set(P.OPERATIONS_ENUM.RESTART_SERVICE,new F(_0.restartService)),e.set(P.OPERATIONS_ENUM.CATCHUP,new F(Jee)),e.set(P.OPERATIONS_ENUM.SYSTEM_INFORMATION,new F(qee.systemInformation)),e.set(P.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new F(ln,Zu.deleteAuditLogsBefore)),e.set(P.OPERATIONS_ENUM.READ_AUDIT_LOG,new F(Cee)),e.set(P.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new F(f0.createTokens)),e.set(P.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new F(f0.refreshOperationToken)),e.set(P.OPERATIONS_ENUM.LOGIN,new F(E0.login)),e.set(P.OPERATIONS_ENUM.LOGOUT,new F(E0.logout)),e.set(P.OPERATIONS_ENUM.GET_CONFIGURATION,new F(h0.getConfiguration)),e.set(P.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new F(Kt.customFunctionsStatus)),e.set(P.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new F(Kt.getCustomFunctions)),e.set(P.OPERATIONS_ENUM.GET_COMPONENT_FILE,new F(Kt.getComponentFile)),e.set(P.OPERATIONS_ENUM.GET_COMPONENTS,new F(Kt.getComponents)),e.set(P.OPERATIONS_ENUM.SET_COMPONENT_FILE,new F(Kt.setComponentFile)),e.set(P.OPERATIONS_ENUM.DROP_COMPONENT,new F(Kt.dropComponent)),e.set(P.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new F(Kt.getCustomFunction)),e.set(P.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new F(Kt.setCustomFunction)),e.set(P.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new F(Kt.dropCustomFunction)),e.set(P.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new F(Kt.addComponent)),e.set(P.OPERATIONS_ENUM.ADD_COMPONENT,new F(Kt.addComponent)),e.set(P.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new F(Kt.dropCustomFunctionProject)),e.set(P.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new F(Kt.packageComponent)),e.set(P.OPERATIONS_ENUM.PACKAGE_COMPONENT,new F(Kt.packageComponent)),e.set(P.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new F(Kt.deployComponent)),e.set(P.OPERATIONS_ENUM.DEPLOY_COMPONENT,new F(Kt.deployComponent)),e.set(P.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new F(m0.readTransactionLog)),e.set(P.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new F(ln,m0.deleteTransactionLogsBefore)),e.set(P.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new F(p0.installModules)),e.set(P.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new F(p0.auditModules)),e.set(P.OPERATIONS_ENUM.GET_BACKUP,new F(Bn.getBackup)),e}a(Xee,"initializeOperationFunctionMap")});var Wf=T((rhe,I0)=>{"use strict";var xg=I(),jee=W(),rl=G(),{handleHDBError:qg,hdb_errors:Kf}=Z(),{isMainThread:Zee}=require("worker_threads"),{Readable:ete}=require("stream"),N0=require("os"),tte=require("util"),rte=NS(),ste=tte.promisify(rte.authorize),y0=b0(),{createGzip:nte,constants:ite}=require("zlib");function ote(e){let t=`Found an uncaught exception with message: ${e.message}. ${N0.EOL}Stack: ${e.stack} ${N0.EOL}Terminating ${Zee?"HDB":"thread"}.`;console.error(t),rl.fatal(t),process.exit(1)}a(ote,"handleServerUncaughtException");function ate(e,t,r){if(rl[e.logLevel||"error"](e),e.statusCode)return typeof e.http_resp_msg!="object"?r.code(e.statusCode).send({error:e.http_resp_msg||e.message}):r.code(e.statusCode).send(e.http_resp_msg);let s=e.statusCode?e.statusCode:Kf.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(s).send({error:e}):r.code(s).send(e.message?{error:e.message}:e)}a(ate,"serverErrorHandler");function cte(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let s=qg(new Error,"Invalid JSON.",Kf.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}if(jee.isEmpty(e.body.operation)){let s=qg(new Error,"Request body must include an 'operation' property.",Kf.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}r()}a(cte,"reqBodyValidationHandler");function ute(e,t,r){let s;e.body.operation!==xg.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==xg.OPERATIONS_ENUM.LOGIN&&e.body.operation!==xg.OPERATIONS_ENUM.LOGOUT?ste(e,t).then(n=>{s=n,e.body.hdb_user=s,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(n=>{rl.warn(n),rl.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${n.stack}"`);let i=typeof n=="string"?{error:n}:{error:n.message};r(qg(n,i,Kf.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(ute,"authHandler");async function lte(e,t,r=!1){let s;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),s=y0.chooseOperation(e.body);let n=await y0.processLocalTransaction(e,s);if(n instanceof ete&&n.headers){for(let[i,o]of n.headers)t.header(i,o);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),n=n.pipe(nte({level:ite.Z_BEST_SPEED})))}return n}catch(n){throw rl.error(n),n}}a(lte,"handlePostRequest");I0.exports={authHandler:ute,handlePostRequest:lte,handleServerUncaughtException:ote,serverErrorHandler:ate,reqBodyValidationHandler:cte}});var L0=T((nhe,D0)=>{"use strict";var _te=require("fastify-plugin"),{handlePostRequest:w0,authHandler:dte,reqBodyValidationHandler:fte}=Wf();async function Ete(e){e.decorate("hdbCore",{preValidation:[fte,dte],request:t=>C0(w0(t,response)),requestWithoutAuthentication:(t,r)=>C0(w0(t,r,!0))})}a(Ete,"hdbCore");async function C0(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(C0,"convertAsyncIterators");D0.exports=_te(Ete)});var P0=T((ahe,M0)=>{"use strict";var ohe=require("fs"),Fg=j();Fg.initSync();var{CONFIG_PARAMS:U0}=I(),hte=1024*1024*1024;function mte(e){let t=Fg.get(U0.HTTP_TIMEOUT),r=Fg.get(U0.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:hte,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,https:e}}a(mte,"getServerOptions");M0.exports=mte});var H0=T((uhe,B0)=>{"use strict";var Gg=j();Gg.initSync();var{CONFIG_PARAMS:v0}=I();function pte(){let e=Gg.get(v0.HTTP_CORSACCESSLIST),t=Gg.get(v0.HTTP_CORS),r;return t&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},e&&e.length>0&&e[0]!==null&&e[0]!=="*"&&(r.origin=(s,n)=>n(null,e.indexOf(s)!==-1))),r}a(pte,"getCORSOptions");B0.exports=pte});var F0=T((_he,q0)=>{"use strict";var x0=j();x0.initSync();var Ste=I();function Tte(){return x0.get(Ste.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(Tte,"getHeaderTimeoutConfig");q0.exports=Tte});var kg={};je(kg,{customFunctionsServer:()=>Ate,ready:()=>Nte,start:()=>Rte});function Rte(e){let t=e.securePort>0;return{async handleFile(r,s,n,i){Hn||(Hn=tB(t),Ot.http((await Hn).server));let o=await Hn,c=(0,k0.dirname)(n),u=s.replace(/\/routes\/.*/g,"");if(u.startsWith("/")&&(u=u.slice(1)),!G0.has(c)){G0.add(c);try{o.register(bte(c,u))}catch(_){if(_.message==="Root plugin has already booted")Ve.warn(`Could not load root fastify route for ${n}, this may require a restart to install properly`);else throw _}}}}}async function Ate(){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 Ote();let e=Q0.get(z0.CONFIG_PARAMS.HTTP_SECUREPORT)>0,t;try{t=Hn=await tB(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 Ote(){try{Ve.info("Custom Functions starting configuration."),await J0.setUsersToGlobal(),Ve.info("Custom Functions completed configuration.")}catch(e){Ve.error(e)}}function bte(e,t){return async function(r){try{Ve.info("Custom Functions starting buildRoutes"),Ve.trace("Loading fastify routes folder "+e),(0,V0.existsSync)(e)&&r.register(W0.default,n=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:n.hdbCore,logger:Ve.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((n,i,o)=>{n?.message?Ve.error(n.message):n&&Ve.error(n),o()})}catch(s){Ve.error(`Custom Functions errored buildRoutes: ${s}`)}}}async function tB(e){Ve.info("Custom Functions starting buildServer.");let t=(0,X0.default)(e),r=(0,$0.default)(t);r.server.headersTimeout=(0,Z0.default)(),r.setErrorHandler(eB.serverErrorHandler);let s=(0,j0.default)();return s&&r.register(Y0.default,s),r.register(function(n,i,o){n.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(K0.default),await r.register(gte),await r.after(),cg(r),Ve.info("Custom Functions completed buildServer."),r}function Nte(){if(Hn)return Hn.then?Hn.then(e=>e.ready()):Hn.ready()}var k0,V0,$0,Y0,K0,W0,Q0,z0,Ve,gte,J0,X0,j0,Z0,eB,Hn,G0,rB=ge(()=>{k0=require("path"),V0=require("fs"),$0=M(require("fastify")),Y0=M(require("@fastify/cors")),K0=M(_g()),W0=M(require("@fastify/autoload")),Q0=M(j()),z0=M(I()),Ve=M(G()),gte=M(L0()),J0=M(cs()),X0=M(P0()),j0=M(H0()),Z0=M(F0()),eB=M(Wf());Sa();ss();G0=new Set;a(Rte,"start");a(Ate,"customFunctionsServer");a(Ote,"setUp");a(bte,"buildRouteFolder");a(tB,"buildServer");a(Nte,"ready")});var Vg={};je(Vg,{start:()=>yte});function yte(e){return{handleDirectory(t,r){if(t==="/"){let s=(0,aB.default)(r,e);return e.server.http(async(n,i)=>{if(!n.isWebSocket)return new Promise(o=>s(n._nodeRequest,n._nodeResponse,()=>{o(i(n))}))}),!0}},handleFile(t,r,s){nB||(nB=!0,e.server.http(async(n,i)=>{if(!n.isWebSocket){let o=sB.get(n.pathname);if(o)return{handlesHeaders:!0,body:(0,iB.default)(n,(0,oB.realpathSync)(o))}}return i(n)},{runFirst:!0})),sB.set(r,s)}}}var iB,oB,aB,sB,nB,cB=ge(()=>{iB=M(require("send")),oB=require("fs"),aB=M(require("serve-static")),sB=new Map;a(yte,"start")});function Cte(e,t=1,r){if($g++,(0,To.startWorker)("server/threads/threadServer.js",{name:Jf.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(s){let n=new Promise((o,c)=>{function u(_){_.type===Jf.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(s.removeListener("message",u),o(s))}a(u,"onMessage"),s.on("message",u),s.on("error",c)});wte.push(n),await n,Da.push(s),s.expectedIdle=1,s.lastIdle=0,s.requests=1,s.on("message",o=>{if(o.requestId){let c=zf.get(o.requestId);c&&c(o)}}),s.on("exit",i),s.on("shutdown",i);function i(){let o=Da.indexOf(s);o>-1&&Da.splice(o,1)}if(a(i,"removeWorker"),La){let o=La;La=[];for(let c of o)dB[c.localPort](null,c)}}}),r){let s=setInterval(()=>{Yg?Yg=!1:(clearInterval(s),console.log("shut down dynamic thread due to inactivity"),(0,To.shutdownWorkers)(),$g=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function fB(e=0,t){if(typeof e=="string")try{(0,Xf.existsSync)(e)&&(0,Xf.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=Dte:r=Lte(t):r=Wg;let s=(0,Ua.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(s._handle){s._handle.onconnection=dB[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),Yg=!0,r(o,(c,u)=>{if(!c){if(uB){let l=o._socket||new Ua.Socket({handle:o,writable:!0,readable:!0});uB.deliverSocket(l,e,u),l.resume()}else $g>0?(La.length===0&&setTimeout(()=>{La.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,La.push(o)):(console.log("start up a dynamic thread to handle request"),Cte(0));Fr(!1,"socket-routed");return}c.requests++;let _=o.fd;if(_>=0)c.postMessage({port:e,fd:_,data:u});else{let l=o._socket||new Ua.Socket({handle:o,writable:!0,readable:!0});vte(l,c,e)}Fr(!0,"socket-routed")})};let n=Xc();Kg.info(`HarperDB ${n.version} Server running on port ${e}`)}return s.on("error",n=>{console.error("Error in socket server",n)}),process.env._UNREF_SERVER&&s.unref(),s}function Wg(e,t){let r,s=0;for(let n of Da){if(n.threadId===-1)continue;let i=n.expectedIdle/n.requests;if(i>s)r=n;else if(s>=Qf)return Qf=i,t(r);s=i}Qf=0,t(r)}function Dte(e,t){let r={};e.getpeername(r);let s=r.address,n=Ma.get(s),i=Date.now();if(n&&n.worker.threadId!==-1)return n.lastUsed=i,t(n.worker);Wg(e,o=>{Ma.set(s,{worker:o,lastUsed:i}),t(o)})}function Lte(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(s,n){let i=new Ua.Socket({handle:s,readable:!0,writable:!0});s._socket=i,i.on("data",o=>{s.readStop();let u=o.toString("latin1").match(t)?.[1],_=Ma.get(u),l=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=l,n(_.worker);Wg(s,d=>{Ma.set(u,{worker:d,lastUsed:l}),n(d,o)})})}a(r,"findByHeaderAffinity")}function Mte(){Qf=0;for(let e of Da)e.expectedIdle=e.recentELU.idle+Ute,e.requests=1;Da.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function vte(e,t,r){let s=Pte++;t.postMessage({port:r,requestId:s,event:"connection"}),e.on("data",n=>{let i=n.toString("latin1");t.postMessage({port:r,requestId:s,data:i,event:"data"})}).on("close",n=>{t.postMessage({port:r,requestId:s,event:"close",hadError:n})}).on("error",n=>{t.postMessage({port:r,requestId:s,event:"error",error:n})}).on("drain",n=>{t.postMessage({port:r,requestId:s,event:"drain",error:n})}).on("end",()=>{t.postMessage({port:r,requestId:s,event:"end"})}).resume(),zf.set(s,n=>{n.event=="data"&&e.write(Buffer.from(n.data,"latin1")),n.event=="end"&&(e.end(n.data&&Buffer.from(n.data,"latin1")),zf.delete(s)),n.event=="destroy"&&(e.destroy(),zf.delete(s))})}var To,Ua,Jf,Kg,Xf,_B,Ite,Da,La,dB,uB,$g,wte,Yg,Qf,lB,Ma,Ute,zf,Pte,EB=ge(()=>{To=M(Qe()),Ua=require("net"),Jf=M(I()),Kg=M(G()),Xf=require("fs");ai();_B=require("worker_threads"),Ite=M($o()),Da=[],La=[],dB=[],$g=0,wte=[];_B.isMainThread&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});a(Cte,"startHTTPWorker");a(fB,"startSocketServer");Qf=0;a(Wg,"findMostIdleWorker");lB=36e5,Ma=new Map;a(Dte,"findByRemoteAddressAffinity");a(Lte,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Ma)r.lastUsed+lB<e&&Ma.delete(t)},lB).unref();Ute=1e3;a(Mte,"updateWorkerIdleness");(0,To.setMonitorListener)(Mte);zf=new Map,Pte=1;a(vte,"proxySocket")});var mB={};je(mB,{Request:()=>Qg,createReuseportFd:()=>jf});var hB,Qg,zg,Jg,jf,Xg=ge(()=>{hB=require("os"),Qg=class{static{a(this,"Request")}#e;constructor(t,r){this.method=t.method;let s=t.url;this._nodeRequest=t,this._nodeResponse=r,this.url=s,this.headers=new Jg(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 zg(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}},zg=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}},Jg=class{constructor(t){this.asObject=t}static{a(this,"Headers")}set(t,r){this.asObject[t.toLowerCase()]=r}get(t){return this.asObject[t.toLowerCase()]}has(t){return this.asObject.hasOwnProperty(t.toLowerCase())}[Symbol.iterator](){return Object.entries(this.asObject)[Symbol.iterator]()}keys(){return Object.keys(this.asObject)}values(){return Object.values(this.asObject)}forEach(t){for(let[r,s]of this)t(s,r,this)}};(0,hB.platform)()!="win32"&&(jf=require("node-unix-socket").createReuseportFd)});var gB=T((yhe,TB)=>{"use strict";var Bte=require("cluster"),go=j();go.initSync();var SB=I(),Rhe=require("util"),xn=G(),Ahe=require("fs"),Hte=require("fastify"),Ohe=Xc(),xte=require("@fastify/cors"),qte=require("@fastify/compress"),Fte=require("@fastify/static"),Gte=_g(),kte=require("path"),{PACKAGE_ROOT:Vte}=I(),$te=An(),Yte=W(),Kte=cs(),Wte=$o(),{server:Qte}=(ss(),te(Lo)),{node_request_key:bhe}=(Xg(),te(mB)),{authHandler:zte,handlePostRequest:Jte,serverErrorHandler:Xte,reqBodyValidationHandler:jte}=Wf(),Nhe=require("net"),{registerContentHandlers:Zte}=(Sa(),te(_v)),ere=6e4,tre=1024*1024*1024,rre="TRUE",{CONFIG_PARAMS:sl}=SB,Pa;TB.exports={hdbServer:pB,start:pB};async function pB(e){try{xn.info("In Fastify server"+process.cwd()),xn.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),xn.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=Bte.isMaster,await sre();let t=e.securePort>0;Pa=nre(t),await Pa.ready(),e||(e={}),e.isOperationsServer=!0;try{Qte.http(Pa.server,e),Pa.server.closeIdleConnections||await Pa.listen({port:0,host:"::"})}catch(r){throw Pa.close(),xn.error(r),xn.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),xn.fatal(t),process.exit(1)}}a(pB,"operationsServer");async function sre(){xn.trace("Configuring HarperDB process."),$te.setSchemaDataToGlobal(),await Kte.setUsersToGlobal(),await Wte.getLicense()}a(sre,"setUp");function nre(e){xn.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=ire(e),r=Hte(t);r.server.headersTimeout=are(),r.setErrorHandler(Xte);let s=ore();s&&r.register(xte,s),r.register(function(i,o,c){i.setNotFoundHandler(function(u,_){r.server.emit("unhandled",u.raw,_.raw)}),c()}),r.register(Gte),r.register(qte),r.register(Fte,{root:kte.join(Vte,"studio/build-local")}),Zte(r);let n=go.get(SB.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!Yte.isEmpty(n)&&n.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[jte,zte],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),Jte(i,o)}),r.get("/health",()=>"HarperDB is running."),xn.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(nre,"buildServer");function ire(e){let t=go.get(sl.OPERATIONSAPI_NETWORK_TIMEOUT),r=go.get(sl.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:tre,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}a(ire,"getServerOptions");function ore(){let e=go.get(sl.OPERATIONSAPI_NETWORK_CORS),t=go.get(sl.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===rre)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(s,n)=>n(null,t.indexOf(s)!==-1))),r}a(ore,"getCORSOpts");function are(){return go.get(sl.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??ere}a(are,"getHeaderTimeoutConfig")});var DB=T((Lhe,CB)=>{"use strict";var{decode:cre}=require("msgpackr"),{isMainThread:whe,parentPort:ure,threadId:Che}=require("worker_threads"),Zg=rt(),qn=Ge(),lre=I(),Ai=G(),RB=j(),OB=I();Qe();var _re=Rn(),{recordAction:dre,recordActionBinary:fre}=(ai(),te(cd)),{publishToStream:Ere}=Zg,{ConsumerEvents:hre}=require("nats"),Dhe={durable:qn.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:qn.WORK_QUEUE_CONSUMER_NAMES.deliver_group},mre,pre,Sre,bB,NB;CB.exports={initialize:eR,workQueueListener:wB,setSubscription:Tre,setIgnoreOrigin:Rre,getDatabaseSubscriptions:gre};async function eR(){NB=!0,Ai.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await Zg.getNATSReferences();mre=e,pre=e.info.server_name,Sre=t,bB=r}a(eR,"initialize");var eE=new Map;function Tre(e,t,r){let s=eE.get(e);s||eE.set(e,s=new Map),s.set(t,r),NB||eR().then(wB)}a(Tre,"setSubscription");function gre(){return eE}a(gre,"getDatabaseSubscriptions");var yB;function Rre(e){yB=e}a(Rre,"setIgnoreOrigin");var IB=100,AB=new Array(IB),Zf=0;async function wB(){let e=await bB.consumers.get(qn.WORK_QUEUE_CONSUMER_NAMES.stream_name,qn.WORK_QUEUE_CONSUMER_NAMES.durable_name),t=!1,r;for(ure?.on("message",async s=>{let{type:n}=s;n===OB.ITC_EVENT_TYPES.SHUTDOWN&&(t=!0,r&&r.close?.()&&r.close())});!t;){r=await e.consume(),(async()=>{for await(let s of await r.status())if(s.type===hre.HeartbeatsMissed){let n=s.data;Ai.trace(`${n} clustering ingest consumer heartbeats missed`),n===2&&(Ai.warn("Restarting clustering ingest consumer due to missed heartbeat threshold being met"),r.stop())}})();try{for await(let s of r)await AB[Zf],AB[Zf]=Are(s).catch(n=>{Ai.error(n)}),++Zf>=IB&&(Zf=0)}catch(s){Ai.error("Error consuming clustering ingest, restarting consumer",s)}Zg.clearClientCache(),await eR()}}a(wB,"workQueueListener");async function Are(e){let t=cre(e.data);dre(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let r=e.headers,s=!1,n=RB.get(lre.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(qn.MSG_HEADERS.TRANSACTED_NODES)&&r.values(qn.MSG_HEADERS.TRANSACTED_NODES).indexOf(n)>-1&&(s=!0);let i=r.get(qn.MSG_HEADERS.ORIGIN);if(s||(s=i===n&&!yB),fre(s,"echo",e.subject,t.operation,"ingest"),s){e.ack();return}r.append(qn.MSG_HEADERS.TRANSACTED_NODES,n);try{let{operation:o,schema:c,next:u,table:_,records:l,hash_values:d,__origin:f,expiresAt:E}=t;Ai.trace("processing message:",o,c,_,(l?"records: "+l.map(y=>y?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),Ai.trace(`messageProcessor nats msg id: ${e.headers.get(qn.MSG_HEADERS.NATS_MSG_ID)}`);let h;l||(l=d);let{timestamp:p,user:S,node_name:R}=f||{},O=eE.get(c)?.get(_);if(!O)throw new Error("Missing table for replication message",_);if(o==="define_schema")t.type=o,O.send(t);else if(l.length===1&&!u)O.send({type:jg(o),value:l[0],id:d?.[0],expiresAt:E,timestamp:p,table:_,onCommit:h,user:S,nodeName:R});else{let y=l.map((q,K)=>({type:jg(o),value:q,expiresAt:E,id:d?.[K],table:_}));for(;u;)y.push({type:jg(u.operation),value:u.record,expiresAt:u.expiresAt,id:u.id,table:u.table}),u=u.next;O.send({type:"transaction",writes:y,table:_,timestamp:p,onCommit:h,user:S,nodeName:R})}RB.get(OB.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&Ere(e.subject.split(".").slice(0,-1).join("."),_re.createNatsTableStreamName(c,_),e.headers,e.data)}catch(o){Ai.error(o)}e.ack()}a(Are,"messageProcessor");function jg(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(jg,"convertOperation")});var oR={};je(oR,{disableNATS:()=>bre,publishToStream:()=>iE,setNATSReplicator:()=>tR,setPublishToStream:()=>Nre,setSubscription:()=>iR,start:()=>Ore});function Ore(){rE.default.get(sE.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Ire()}function bre(e=!0){vB=e}function Nre(e,t){iE=e,iR=t}function Ire(){if(vB||process.env._DISABLE_NATS)return;let e=Ps(),t=Object.keys(e);t.push("system");for(let r of t){let s=e[r];for(let n in s){let i=s[n];tR(n,r,i)}}aR((r,s)=>{tR(r.tableName,r.databaseName,r),s&&HB(r)}),!LB&&(LB=!0)}function tR(e,t,r){if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.sources.some(n=>n?.isNATSReplicator))return;r.sourcedFrom(class extends xt{static{a(this,"NATSReplicator")}put(i){return s(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[De],record:i})}delete(){return s(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[De]})}publish(i){return s(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[De],record:i})}invalidate(){s(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[De]})}static defineSchema(i){HB(i)}static subscribe(){let i=new Ns;return iR(t,e,i),i}static subscribeOnThisThread(i){return i<yre}static isEqual(i){return i.isNATSReplicator}static isNATSReplicator=!0;static shouldReceiveInvalidations=!0},{intermediateSource:!0});function s(n){let i=n?.transaction?.nats;if(!i)if(n?.transaction){n.transaction.nats=i=new tE(n.transaction,n);let o=n.transaction;for(;o.next;)o=o.next;o.next=n.transaction.nats,i.user=n.user,i.context=n}else i=BB;return i}a(s,"getNATSTransaction")}function HB(e){let t=rE.default.get(sE.default.CONFIG_PARAMS.CLUSTERING_NODENAME);iE(`${sR.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,nR.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 UB,sR,nR,MB,PB,rE,sE,nE,vB,iE,iR,yre,BB,LB,tE,rR,xB=ge(()=>{pe();ys();UB=M(rt()),sR=M(Ge()),nR=M(Rn());oc();MB=M(DB()),PB=M(Ir()),rE=M(j()),sE=M(I()),nE=M(G());a(Ore,"start");a(bre,"disableNATS");iE=UB.publishToStream,iR=MB.setSubscription;a(Nre,"setPublishToStream");yre=2;a(Ire,"assignReplicationSource");a(tR,"setNATSReplicator");a(HB,"publishSchema");tE=class{constructor(t,r){this.transaction=t;this.options=r}static{a(this,"NATSTransaction")}user;writes_by_db=new Map;addWrite(t,r){r.expiresAt=this.context?.expiresAt;let s=this.writes_by_db.get(t);s||this.writes_by_db.set(t,s=[]),s.push(r)}commit({timestamp:t}){let r=rE.default.get(sE.default.CONFIG_PARAMS.CLUSTERING_NODENAME),s=[];for(let[n,i]of this.writes_by_db){let o=[],c=[],u,_;for(let l of i){let d=l.table,f=l.operation=="put"?"upsert":l.operation;u||(nE.trace(`Sending transaction event ${f}`),_=u={operation:f,schema:n,table:d,__origin:{user:this.user?.username,timestamp:t,node_name:r}},u.hash_values=c,f!=="delete"&&f!=="invalidate"&&(u.records=o)),u.table===d&&u.operation===f?(o.push(l.record),c.push(l.id)):_=_.next={operation:f,table:d,id:l.id,record:l.record},l.expiresAt&&(_.expiresAt=l.expiresAt)}u&&s.push(iE(`${sR.SUBJECT_PREFIXES.TXN}.${n}.${u.table}`,(0,nR.createNatsTableStreamName)(n,u.table),void 0,u)?.catch(l=>{throw nE.error("An error has occurred trying to replicate transaction",u,l),l.statusCode=504,l}))}return Promise.all(s)}},rR=class extends tE{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,PB.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};BB=new rR});async function GB({clientId:e,user:t,clean:r,will:s}){let n;if(e&&!r){let i=await cR.getResource(e,{});n=new _R(e,t,i),i&&(n.sessionWasPresent=!0)}else{if(e){let i=await cR.get(e);i&&i.delete()}n=new aE(e,t)}return s&&(s.id=e,s.user={username:t?.username},nl.put(s)),n}function uR(){return oE++,oE>65500&&(oE=1),oE}function lR(e,t,r=e){let{topic:s,retain:n}=e;e.data=t,e.async=!0,e.authorize=!0;let i=Si.getMatch(s);if(!i)throw new Error(`Can not publish to topic ${s} as it does not exist, no resource has been defined to handle this topic`);e.url=i.relativeURL;let o=i.Resource;return We(r,()=>n?t===void 0?o.delete(e,r):o.put(e,e.data,r):o.publish(e,e.data,r))}var qB,Ro,FB,cR,nl,oE,aE,_R,kB=ge(()=>{pe();Uu();qB=M(Ir()),Ro=M(G());Di();FB=M(Qe()),cR=ut({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"}]}}]}),nl=ut({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,FB.getWorkerIndex)()===0&&(async()=>{for await(let e of nl.search({})){let t=e.data,r=Object.assign({},e);We(r,()=>{lR(r,t),nl.delete(e.id,r)})}})();a(GB,"getSession");oE=1;a(uR,"getNextMessageId");aE=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;subscriptions=[];awaitingAcks;sessionWasPresent;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,s){let{topic:n,rh:i,startTime:o}=t,c=n.indexOf("?"),u,_;if(c>-1?(u=n.slice(c),_=n.slice(0,c)):_=n,!_)throw new Error("No topic provided");if(_.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");let l=this.subscriptions.find(R=>R.topic===n),d;l?(d=i>0,l.end(),this.subscriptions.splice(this.subscriptions.indexOf(l),1)):d=i===2;let f={search:u,async:!0,authorize:!0,user:this.user,startTime:o,omitCurrent:d,url:""};o&&(0,Ro.trace)("Resuming subscription from",n,"from",o);let E=Si.getMatch(_);if(!E){let R=new Error(`The topic ${n} 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 O=R.split("/"),y;for(let H=0;H<O.length;H++)if(O[H].indexOf("+")>-1)if(O[H]==="+")y=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(s&&y)throw new Error("Filters can not be combined");let q=!0;O[O.length-1]==="#"&&(O.length--,q=!1),y&&(s=a(H=>{let L=H.id;if(!Array.isArray(L)||q&&L.length!==O.length)return!1;for(let $=0;$<O.length;$++)if(O[$]!=="+"&&O[$]!==L[$])return!1;return!0},"filter"));let K=O.indexOf("+");f.url="/"+(K>-1?O.slice(0,K):O).concat("").join("/")}}let h=E.path,p=E.Resource,S=await We(f,async()=>{let R=await p.subscribe(f);if(!R)throw new Error(`No subscription was returned from subscribe for topic ${n}`);if(!R[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${n}`);return(async()=>{for await(let O of R)try{let y;if(O.type&&O.type!=="put"&&O.type!=="delete"&&O.type!=="message"||s&&!s(O))continue;r?(O.topic=n,y=this.needsAcknowledge(O)):(O.acknowledge?.(),y=uR());let q=O.id;Array.isArray(q)&&(q=pa(q)),q==null&&(q=""),this.listener(h+"/"+q,O.value,y,t)}catch(y){(0,Ro.warn)(y)}})(),R});return S.topic=n,S.qos=t.qos,this.subscriptions.push(S),S}resume(){}needsAcknowledge(t){let r=uR();return t.acknowledge&&(this.awaitingAcks||(this.awaitingAcks=new Map),this.awaitingAcks.set(r,t.acknowledge)),r}acknowledge(t){let r=this.awaitingAcks?.get(t);r&&(this.awaitingAcks.delete(t),r())}async removeSubscription(t){let r=this.subscriptions.find(s=>s.topic===t);if(r)return r.end(),!0}async publish(t,r){return t.user=this.user,lR(t,r)}setListener(t){this.listener=t}disconnect(t){let r={};We(r,async()=>{if(!t){let s=await nl.get(this.sessionId,r);s.doesExist()&&await lR(s,s.data,r)}await nl.delete(this.sessionId,r)}).catch(s=>{(0,Ro.warn)(`Error publishing MQTT will for ${this.sessionId}`,s)});for(let s of this.subscriptions)s.end();this.subscriptions=[]}};a(lR,"publish");_R=class extends aE{static{a(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,s){super(t,r),this.sessionRecord=s||{id:t,subscriptions:[]}}async resume(){for(let t of this.sessionRecord.subscriptions||[])await this.resumeSubscription({omitCurrent:!0,topic:t.topic,qos:t.qos,startTime:t.startTime},!0,t.acks?r=>!t.acks.includes(r.timestamp):null)}resumeSubscription(t,r,s){return super.addSubscription(t,r,s)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=uR(),s={topic:t.topic,timestamp:t.timestamp};return t.acknowledge&&(s.acknowledge=t.acknowledge),this.awaitingAcks.set(r,s),r}acknowledge(t){let r=this.awaitingAcks.get(t);this.awaitingAcks.delete(t),r.acknowledge?.();let s=r.topic;for(let[,n]of this.awaitingAcks)if(n.topic===s&&n.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===s){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,Ro.trace)("Received ack",s,r.timestamp),this.sessionRecord.update();return}}for(let n of this.sessionRecord.subscriptions)n.topic===s&&(n.startTime=r.timestamp);this.sessionRecord.update()}async addSubscription(t,r){await this.resumeSubscription(t,r);let{qos:s,startTime:n}=t;return s>0&&!n&&(this.sessionRecord.subscriptions=this.subscriptions.map(i=>{let o=i.startTime;return o||(o=i.startTime=(0,qB.getNextMonotonicTime)()),(0,Ro.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),cR.put(this.sessionRecord)),t.qos}}});var dR={};je(dR,{start:()=>Cre});function Cre({server:e,port:t,network:r,webSocket:s,securePort:n,requireAuthentication:i}){let o=e.mqtt={requireAuthentication:i},c,u=r?.mtls;return s&&(c=e.ws((_,l,d)=>{if(_.protocol==="mqtt"){let{onMessage:f,onClose:E}=YB(_,(h,p)=>{if(_.send(h),p&&_._socket.writableNeedDrain)return new Promise(S=>this._socket.once("drain",S))},l,Promise.resolve(d).then(()=>l?.user),o);_.on("message",f),_.on("close",E),_.on("error",h=>{(0,Ar.info)("WebSocket error",h)})}},{subProtocol:"mqtt"})),(t||n)&&(c=e.socket(async _=>{let l;if(u)if(_.authorized)try{let E=u.user;l!==null&&((E===void 0||E==="Common Name"||E==="CN")&&(E=_.getPeerCertificate().subject.CN),l=await e.getUser(E,null,null))}catch(E){(0,Ar.error)(E)}else return(0,Ar.info)(`Unauthorized connection attempt, no authorized client certificate provided, error: ${_.authorizationError}`),_.end();!l&&wre&&_.remoteAddress.includes("127.0.0.1")&&(l=await(0,KB.getSuperUser)());let{onMessage:d,onClose:f}=YB(_,E=>_.write(E),null,l,o);_.on("data",d),_.on("close",f),_.on("error",E=>{(0,Ar.info)("Socket error",E)})},{port:t,securePort:n,mtls:u})),c}function YB(e,t,r,s,n){$B||($B=!0,eu(d=>{cE>0&&d.push({metric:"mqtt-connections",connections:cE,byThread:!0})}));let i;cE++;let o,c={protocolVersion:4},u=(0,lE.parser)({protocolVersion:5});function _(d){u.parse(d)}a(_,"onMessage");function l(){cE--,i||(i=!0,o?.disconnect(),us(!1,"connection","mqtt","disconnect"))}return a(l,"onClose"),u.on("packet",async d=>{s?.then&&(s=await s),o?.then&&await o;try{switch(d.cmd){case"connect":if(c.protocolVersion=d.protocolVersion,d.username)try{s=await Ot.getUser(d.username,d.password.toString(),r),(0,uE.get)(_n.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&VB.notify({username:s.username,status:_n.AUTH_AUDIT_STATUS.SUCCESS,type:_n.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,uE.get)(_n.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&VB.error({username:s.username,status:_n.AUTH_AUDIT_STATUS.FAILURE,type:_n.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),f({cmd:"connack",reasonCode:4,returnCode:134})}if(!s&&n.requireAuthentication)return us(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:4,returnCode:134});try{if(n.authorizeClient?.(d,s),d.will){let y=e.deserialize||(e.deserialize=fo(r?.headers.get?.("content-type")));d.will.data=d.will.payload?.length>0?y(d.will.payload):void 0,delete d.will.payload}o=GB({user:s,...d}),o=await o}catch(y){return(0,Ar.error)(y),us(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:y.code||5,returnCode:y.code||128})}us(!0,"connection","mqtt","connect"),f({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((y,q,K,H)=>{try{let L=y.indexOf("/",1),$=L>0?y.slice(0,L):y;f({cmd:"publish",topic:y,payload:E(q),messageId:K||Math.floor(Math.random()*1e8),qos:H.qos},$)}catch(L){(0,Ar.error)(L),o?.disconnect()}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let h=[];for(let y of d.subscriptions){let q;try{q=(await o.addSubscription(y,y.qos>=1)).qos||0}catch(K){(0,Ar.error)(K),q=c.protocolVersion<5?128:K.statusCode===403?135:K.statusCode===404?143:128}h.push(q)}await o.committed,f({cmd:"suback",granted:h,messageId:d.messageId});break;case"unsubscribe":{let y=[];for(let q of d.unsubscriptions)y.push(o.removeSubscription(q)?0:17);f({cmd:"unsuback",granted:y,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=fo(r?.headers.get?.("content-type"))),R=d.payload?.length>0?S(d.payload):void 0,O;try{O=await o.publish(d,R)}catch(y){(0,Ar.warn)(y),d.qos>0&&f({cmd:p,messageId:d.messageId,reasonCode:128},d.topic);break}d.qos>0&&f({cmd:p,messageId:d.messageId,reasonCode:O===!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),us(!0,"connection","mqtt","disconnect"),e.close?e.close():e.end();break}}catch(h){(0,Ar.error)(h),f({cmd:"disconnect"})}function f(h,p){let S=(0,lE.generate)(h,c);t(S),Fr(S.length,"bytes-sent",p,h.cmd,"mqtt")}a(f,"sendPacket");function E(h){return Ti(h,r)}a(E,"serialize")}),{onMessage:_,onClose:l}}var lE,KB,uE,_n,Ar,VB,wre,$B,cE,WB=ge(()=>{lE=require("mqtt-packet");kB();KB=M(cs());Sa();ai();ss();uE=M(j()),_n=M(I()),Ar=M(G()),VB=(0,Ar.loggerWithTag)("auth-event"),wre=(0,uE.get)(_n.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(Cre,"start");cE=0;a(YB,"onSocket")});var _f={};je(_f,{component_errors:()=>Ba,loadComponent:()=>_E,loadComponentDirectories:()=>rH,setErrorReporter:()=>Mre});function rH(e,t){t&&(ER=t),e&&(hR=e);let r=[];if((0,Fs.existsSync)(fR)){let n=(0,Fs.readdirSync)(fR,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Rt.join)(fR,o);r.push(_E(c,ER,"hdb",!1))}}let s=process.env.RUN_HDB_APP;return s&&r.push(_E(s,ER,s,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{tH=!0})}function Mre(e){ol=e}async function _E(e,t,r,s,n,i){if(!zB.has(e)){zB.set(e,!0),n&&(hR=n);try{let o;s&&(Ba=new Map);let c=(0,Rt.join)(e,s?"harperdb-config.yaml":"config.yaml");(0,Fs.existsSync)(c)?o=s?(0,eH.getConfigObj)():(0,JB.parseDocument)((0,Fs.readFileSync)(c,"utf8"),{simpleKeys:!0}).toJSON():o=mR;let u=[],_=s;for(let l in o){let d=o[l];if(Ba.set(s?l:(0,Rt.basename)(e),!1),!d)continue;let f,E=d.package;try{if(E){let O=e,y;for(;!(0,Fs.existsSync)(y=(0,Rt.join)(O,"node_modules",l));)if(O=(0,Rt.dirname)(O),O.length<(0,ZB.getHdbBasePath)().length){y=null;break}if(y)f=await _E(y,t,r,!1),_=!0;else throw new Error(`Unable to find package ${l}:${E}`)}else f=Ure[l];if(!f)continue;u.push(f);let h=a(O=>(O.origin=r,ut(O)),"ensureTable"),p=d.network||(d.port||d.securePort)&&d,S=p?.securePort||p?.https&&p.port,R=!p?.https&&p?.port;if(va.isMainThread&&(f=await f.startOnMainThread?.({server:Ot,ensureTable:h,port:R,securePort:S,resources:t,...d})||f,s&&p))for(let O of[R,S])try{if(+O&&!QB.includes(O)){let y=pR.get(SR.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);y&&il.default.warn("Session affinity is not recommended and may cause memory leaks"),(y||!jf)&&(QB.push(O),fB(O,y))}}catch(y){console.error("Error listening on socket",O,y,l)}if(t.isWorker&&(f=await f.start?.({server:Ot,ensureTable:h,port:R,securePort:S,resources:t,...d})||f),hR.set(f,!0),(f.handleFile||f.handleDirectory)&&d.files){if(d.files.includes(".."))throw(0,jB.handleHDBError)("Can not reference parent directories");let O=(0,Rt.join)(e,d.files).replace(/\\/g,"/"),y=O.indexOf("/*");if(y>-1&&d.files!==mR[l]?.files&&!(0,Fs.existsSync)(O.slice(0,y)))throw new Error(`The path '${O.slice(0,y)}' does not exist and cannot be used as the base of the resolved 'files' path value '${d.files}'`);let q=(0,Rt.basename)(e),K=d.path||"/";K=K.startsWith("/")?K:K.startsWith("./")?"/"+q+K.slice(2):K==="."?"/"+q:"/"+q+"/"+K;let H,L,$;if(d.root){let Q=d.root;Q.startsWith("/")&&(Q=Q.slice(1)),Q.endsWith("/")&&(Q=Q.slice(0,-1)),Q+="/",L=(0,Rt.join)(e,Q)}else($=O.indexOf("/*"))>-1&&(L=O.slice(0,$+1),H=(0,Rt.relative)(e,L));let V=!1;if(va.isMainThread&&f.setupDirectory&&(V=await f.setupDirectory?.(K,L,t)),t.isWorker&&f.handleDirectory&&(V=await f.handleDirectory?.(K,L,t)),V)continue;for(let Q of await(0,XB.default)(O,{onlyFiles:!1,objectMode:!0})){let{path:re,dirent:be}=Q;_=!0;let ne=(0,Rt.relative)(e,re).replace(/\\/g,"/");if(H)if(ne.startsWith(H))ne=ne.slice(H.length);else throw new Error(`The root path '${d.root}' does not reference a valid part of the file path '${ne}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`);let ct=K+(K.endsWith("/")?"":"/")+ne;try{if(be.isFile()){let Te=await Lre(re);va.isMainThread&&await f.setupFile?.(Te,ct,re,t),t.isWorker&&await f.handleFile?.(Te,ct,re,t)}else va.isMainThread&&await f.setupDirectory?.(ct,re,t),t.isWorker&&await f.handleDirectory?.(ct,re,t)}catch(Te){Te.message=`Could not load ${be.isFile()?"file":"directory"} '${re}'${d.module?" using '"+d.module+"'":""} for application '${e}' due to: ${Te.message}`,ol?.(Te),((0,Ha.getWorkerIndex)()===0?console:il.default).error(Te),t.set(d.path||"/",new al(Te)),Ba.set(s?l:(0,Rt.basename)(e),Te.message)}}}}catch(h){h.message=`Could not load component '${l}' for application '${(0,Rt.basename)(e)}' due to: ${h.message}`,ol?.(h),((0,Ha.getWorkerIndex)()===0?console:il.default).error(h),t.set(d.path||"/",new al(h),null,!0),Ba.set(s?l:(0,Rt.basename)(e),h.message)}}if(va.isMainThread&&!tH&&i&&(0,Ha.watchDir)(e,async()=>rH()),o.extensionModule)return await e_((0,Rt.join)(e,o.extensionModule));if(!_){let l=`${e} did not load any modules, resources, or files, is this a valid component?`;ol?.(new Error(l)),((0,Ha.getWorkerIndex)()===0?console:il.default).error(l),Ba.set((0,Rt.basename)(e),l)}}catch(o){console.error(`Could not load application directory ${e}`,o),o.message=`Could not load application due to ${o.message}`,ol?.(o),t.set("",new al(o))}}}var Fs,Rt,va,JB,pR,SR,XB,Ha,il,jB,ZB,Dre,eH,Lre,fR,hR,tH,ER,Ba,Ure,mR,QB,zB,ol,al,df=ge(()=>{Fs=require("fs"),Rt=require("path"),va=require("worker_threads"),JB=require("yaml"),pR=M(j()),SR=M(I());yO();DO();LO();Ev();rB();cB();XB=M(require("fast-glob")),Ha=M(Qe()),il=M(G());fh();ss();jB=M(Z());ys();pe();EB();ZB=M(j()),Dre=M(gB());rf();xB();WB();eH=M(vr());Xg();({readFile:Lre}=Fs.promises),fR=pR.get(SR.CONFIG_PARAMS.COMPONENTSROOT),hR=new Map,Ba=new Map;a(rH,"loadComponentDirectories");Ure={REST:Nf,rest:Nf,graphqlSchema:dh,jsResource:hh,fastifyRoutes:kg,login:ph,static:Vg,operationsApi:Dre,customFunctions:{},http:{},clustering:oR,authentication:Mu,mqtt:dR},mR={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(mR,"static",{value:{files:"web/**"}});QB=[],zB=new Map;a(Mre,"setErrorReporter");a(_E,"loadComponent");al=class extends xt{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 iH=T((ome,nH)=>{var{isMainThread:sH}=require("worker_threads"),{getTables:Pre}=(pe(),te(Fe)),{loadComponentDirectories:vre,loadComponent:Bre}=(df(),te(_f)),{resetResources:Hre}=(Uu(),te(BM)),xre=vT(),qre=vr(),{dirname:Fre}=require("path"),{getConnection:Gre}=rt(),kre=j(),Vre=I(),TR=new Map;async function $re(e=!1){!sH&&kre.get(Vre.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Gre();try{sH&&await xre()}catch(s){console.error(s)}let t=Hre();Pre(),t.isWorker=e,await Bre(Fre(qre.getConfigFilePath()),t,"hdb",!0,TR),await vre(TR,t);let r=[];for(let[s]of TR)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}a($re,"loadRootComponents");nH.exports.loadRootComponents=$re});var Qe=T((cme,bi)=>{"use strict";var{Worker:Yre,MessageChannel:Kre,parentPort:dn,isMainThread:bR,threadId:Wre,workerData:Fn}=require("worker_threads"),{PACKAGE_ROOT:Qre}=I(),{join:uH,isAbsolute:zre,extname:Jre}=require("path"),{server:lH}=(ss(),te(Lo)),{watch:Xre,readdir:jre}=require("fs/promises"),{totalmem:oH}=require("os"),cl=I(),_H=j(),Gn=G(),{randomBytes:Zre}=require("crypto"),{_assignPackageExport:ese}=require("../index"),tse=I(),aH=1024*1024,Oi=[],gs=[],rse=50,NR=1e4,sse="restart",dH="request_thread_info",fH="resource_report",EH="thread_info",hH="added-port",nse="ack",gR;ese("threads",gs);bi.exports={startWorker:RR,restartWorkers:IR,shutdownWorkers:use,workers:Oi,setMonitorListener:pse,onMessageFromWorkers:lse,onMessageByType:RH,broadcast:dse,broadcastWithAcknowledgement:Ese,setChildListenerByType:cse,getWorkerIndex:mH,getWorkerCount:pH,getTicketKeys:SH,setMainIsWorker:ose,setTerminateTimeout:ise,restartNumber:Fn?.restartNumber||1};gs.onMessageByType=RH;gs.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=gs.find(s=>s.threadId===e);if(r)return r.postMessage(t),!0};var yR;function ise(e){NR=e}a(ise,"setTerminateTimeout");function mH(){return Fn?Fn.workerIndex:yR?0:void 0}a(mH,"getWorkerIndex");function pH(){return Fn?Fn.workerCount:yR?1:void 0}a(pH,"getWorkerCount");function ose(e){yR=e}a(ose,"setMainIsWorker");var dE;function SH(){return dE||(dE=bR?Zre(48):Fn.ticketKeys,dE)}a(SH,"getTicketKeys");Object.defineProperty(lH,"workerIndex",{get(){return mH()}});Object.defineProperty(lH,"workerCount",{get(){return pH()}});var TH={[dH](e,t){hse(t)},[fH](e,t){mse(t,e)}};function RR(e,t={}){let r=process.constrainedMemory?.()||oH();r=Math.min(r,oH(),2e4*aH);let s=_H.get(cl.CONFIG_PARAMS.MAXHEAPMEMORY)??Math.max(Math.floor(r/aH/(10+(t.threadCount||1)/4)),512),n=Math.min(Math.max(s>>6,16),64),i=[],o=[];for(let u of gs){let _=new Kre;_.existingPort=u,i.push(_),o.push(_.port2)}Jre(e)||(e+=".js");let c=new Yre(zre(e)?e:uH(Qre,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:s,maxYoungGenerationSizeMb:n},execArgv:["--enable-source-maps"],argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(u=>u.existingPort.threadId),workerIndex:t.workerIndex,workerCount:t.threadCount,name:t.name,restartNumber:bi.exports.restartNumber,ticketKeys:SH()},transferList:o},t));for(let{port1:u,existingPort:_}of i)_.postMessage({type:hH,port:u,threadId:c.threadId},[u]);return EE(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>RR(e,t),c.on("error",u=>{console.error("Worker error:",u),Gn.error("Worker error:",u)}),c.on("exit",u=>{Oi.splice(Oi.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<rse?(t.unexpectedRestarts=c.unexpectedRestarts+1,RR(e,t)):Gn.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",u=>{TH[u.type]?.(u,c)}),Oi.push(c),Tse(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(RR,"startWorker");var ase=[cl.THREAD_TYPES.HTTP];async function IR(e=null,t=2,r=!0){if(bR){if(r){let{loadRootComponents:o}=iH();await o()}bi.exports.restartNumber++,t<1&&(t=t*Oi.length);let s=[],n=[];for(let o of Oi.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;Gn.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:bi.exports.restartNumber,type:cl.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=ase.indexOf(o.name)>-1,u=new Promise(_=>{let l=setTimeout(()=>o.terminate(),NR*2).unref();o.on("exit",()=>{clearTimeout(l),s.splice(s.indexOf(u)),!c&&r&&o.startCopy(),_()})});if(s.push(u),c&&r){let _=o.startCopy(),l=new Promise(d=>{let f=a(E=>{E.type===tse.ITC_EVENT_TYPES.CHILD_STARTED&&(Gn.trace("Worker has started",_.threadId),d(),n.splice(n.indexOf(l)),_.off("message",f))},"startListener");Gn.trace("Waiting for worker to start",_.threadId),_.on("message",f)});n.push(l),s.length>=t&&await Promise.race(s),n.length>=t&&await Promise.race(n)}}await Promise.all(s),await Promise.all(n);let{restartService:i}=Xd();r&&(e==="http"||!e)&&_H.get(cl.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else dn.postMessage({type:sse,workerType:e})}a(IR,"restartWorkers");function cse(e,t){TH[e]=t}a(cse,"setChildListenerByType");function use(e){return IR(e,1/0,!1)}a(use,"shutdownWorkers");var gH=[];function lse(e){gH.push(e)}a(lse,"onMessageFromWorkers");var AR=new Map;function RH(e,t){let r=AR.get(e);r||AR.set(e,r=[]),r.push(t)}a(RH,"onMessageByType");var _se=10;async function dse(e){let t=0;for(let r of gs)try{r.postMessage(e),t++>_se&&(t=0,await new Promise(setImmediate))}catch(s){Gn.error("Unable to send message to worker",s)}}a(dse,"broadcast");var fE=new Map,fse=1;function Ese(e){return new Promise(t=>{let r=0;for(let s of gs)try{let n=fse++,i=a(()=>{fE.delete(n),--r===0&&t(),s!==dn&&--s.refCount===0&&s.unref()},"ack_handler");i.port=s,s.ref(),s.refCount=(s.refCount||0)+1,fE.set(e.requestId=n,i),s.hasAckCloseListener||(s.hasAckCloseListener=!0,s.on(s.close?"close":"exit",()=>{for(let[,o]of fE)o.port===s&&o()})),s.postMessage(e),r++}catch(n){Gn.error("Unable to send message to worker",n)}r===0&&t()})}a(Ese,"broadcastWithAcknowledgement");function hse(e){e.postMessage({type:EH,workers:AH()})}a(hse,"sendThreadInfo");function AH(){let e=Date.now();return Oi.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(AH,"getChildWorkerInfo");function mse(e,t){e.resources=t,e.resources.updated=Date.now()}a(mse,"recordResourceReport");var OR;function pse(e){OR=e}a(pse,"setMonitorListener");var Sse=1e3,cH=!1;function Tse(){cH||(cH=!0,setInterval(()=>{for(let e of Oi){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}OR&&OR()},Sse).unref())}a(Tse,"startMonitoring");var gse=1e3;if(dn){EE(dn);for(let e=0,t=Fn.addPorts.length;e<t;e++){let r=Fn.addPorts[e];r.threadId=Fn.addThreadIds[e],EE(r)}setInterval(()=>{let e=process.memoryUsage();dn.postMessage({type:fH,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},gse).unref(),gR=a(()=>new Promise((e,t)=>{dn.on("message",r),dn.postMessage({type:dH});function r(s){s.type===EH&&(dn.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else gR=AH;bi.exports.getThreadInfo=gR;function EE(e,t){gs.push(e),e.on("message",r=>{if(r.type===hH)r.port.threadId=r.threadId,EE(r.port);else if(r.type===nse){let s=fE.get(r.id);s&&s()}else{for(let n of gH)n(r,e);let s=AR.get(r.type);if(s)for(let n of s)try{n(r,e)}catch(i){Gn.error(i)}}}).on("close",()=>{gs.splice(gs.indexOf(e),1)}).on("exit",()=>{gs.splice(gs.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(EE,"addPort");if(bR){let e,t,r=a(async(s,n)=>{n&&(e=n);for(let i of await jre(s,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(uH(s,i.name));try{for await(let{filename:i}of Xre(s,{persistent:!1}))t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await IR(),console.log("Reloaded HarperDB components")},100)}catch(i){console.warn("Error trying to watch component directory",s,i)}},"watch_dir");bi.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else dn.on("message",async e=>{let{type:t}=e;t===cl.ITC_EVENT_TYPES.SHUTDOWN&&(bi.exports.restartNumber=e.restartNumber,dn.unref(),setTimeout(()=>{Gn.warn("Thread did not voluntarily terminate",Wre),process.exit(0)},NR).unref())})});function bH(e,t,r,s){let n=e.primaryStore.env.path,i=e.primaryStore.tableId;xa||((0,ll.onMessageByType)(OH,l=>{NH(l.path)}),(0,ll.onMessageByType)(Rse,l=>{(0,ul.trace)("confirming to proceed with txn",l.txnId)}),xa=Object.create(null));let o=xa[n]||(xa[n]=[]);o.auditStore=e.auditStore;let c=o[i];c||(c=o[i]=new Map,c.envs=o,c.tableId=i,c.store=e.primaryStore),t=pa(t);let u=new CR(r);u.startTime=s;let _=c.get(t);return _?_.push(u):(c.set(t,_=[u]),_.tables=c,_.key=t),u.subscriptions=_,u}function NH(e,t){if(!xa)return;let r=xa[e];if(!r)return;try{r.auditStore.resetReadTxn()}catch(n){throw n.message+=" in "+e,n}let s;for(let{key:n,value:i}of r.auditStore.getRange({start:wR,exclusiveStart:!0})){wR=n;let o=Dr(i),c=r[o.tableId];if(!c)continue;let u=o.recordId,_,l=pa(o.recordId),d=0;do{let f=c.get(l);if(f){for(let h of f)if(!(d>0&&!(h.includeDescendants&&!(h.onlyChildren&&d>1)))){if(h.startTime>=n){(0,ul.info)("omitting",u,h.startTime,n);continue}try{if(h.crossThreads===!1&&!t)continue;let p;h.supportsTransactions&&h.txnInProgress!==o.version&&(p=!0,h.txnInProgress||(s?s.push(h):s=[h]),h.txnInProgress=o.version),h.listener(u,o,n,p)}catch(p){console.error(p),(0,ul.info)(p)}}}if(l==null)break;let E=l.lastIndexOf?.("/",l.length-2);E>-1?l=l.slice(0,E):l=null,d++}while(!0)}if(s)for(let n of s)n.txnInProgress=null,n.listener(null,{type:"end_txn"},wR,!0)}function yH(e,t){let r=t||e,s=r.env;if(t&&!t.cache&&(t.cache=new Map),!s.hasBroadcastListener){s.hasBroadcastListener=!0;let n=s.path;r.on("aftercommit",()=>{(0,ll.broadcast)({type:OH,path:n}),NH(n,!0)})}}var ul,ll,OH,Rse,xa,Eme,CR,wR,IH=ge(()=>{ul=M(G()),ll=M(Qe());oc();Uu();Po();OH="transaction",Rse="transaction-await",Eme=Buffer.alloc(4096);a(bH,"addSubscription");CR=class extends Ns{static{a(this,"Subscription")}listener;subscriptions;startTime;constructor(t){super(),this.listener=t,this.on("close",()=>this.end())}end(){if(this.subscriptions){if(this.subscriptions.splice(this.subscriptions.indexOf(this),1),this.subscriptions.length===0){let t=this.subscriptions.tables,r=this.subscriptions.key;if(t.delete(r),t.size===0){let s=t.envs,n=t.dbi;delete s[n]}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}},wR=Date.now();a(NH,"notifyFromTransactionData");a(yH,"listenToCommits")});var yg={};je(yg,{coerceType:()=>pE,makeTable:()=>TE,setServerUtilities:()=>wse,updateResource:()=>hl});function TE(e){let{primaryKey:t,indices:r,tableId:s,tableName:n,primaryStore:i,databasePath:o,databaseName:c,auditStore:u,schemaDefined:_,dbisDB:l}=e,{expirationMS:d,evictionMS:f,audit:E,trackDeletes:h}=e,{attributes:p}=e;p||(p=[]),yH(i,u);let S=Fh(i,s,u),R=0,O,y,q,K={},H=Promise.resolve(),L,$,V;for(let Y of p)(Y.assignCreatedTime||Y.name==="__createdtime__")&&(L=Y),(Y.assignUpdatedTime||Y.name==="__updatedtime__")&&($=Y),Y.expiresAt&&(V=Y),Y.isPrimaryKey&&(K=Y);let Q,re=[],be=[],ne=1,ct=2,Te={},Bt={},Os=864e5,XR,Il,$n,jR=!1,BE,Lx=10,Ux=6;E&&eA();class Je extends xt{static name=n;static primaryStore=i;static auditStore=u;static primaryKey=t;static tableName=n;static indices=r;static audit=E;static databasePath=o;static databaseName=c;static attributes=p;static expirationTimer;static createdTimeProperty=L;static updatedTimeProperty=$;static propertyResolvers;static sources=[];static get expirationMS(){return d}static dbisDB=l;static schemaDefined=_;static sourcedFrom(m,g){g&&(this.sourceOptions=g,(g.expiration||g.eviction||g.scanInterval)&&this.setTTLExpiration(g)),g?.intermediateSource?(m.intermediateSource=!0,this.sources.unshift(m)):this.sources.push(m),y=m.get&&(!m.get.reliesOnPrototype||m.prototype.get);let D=a(b=>{let w=this.sources.slice(0,-1);if(w=w.filter(U=>U[b]&&(!U[b].reliesOnPrototype||U.prototype[b])),w.length>0)if(w.length===1){let U=w[0];return(v,B,z)=>{if(v?.source!==U)return U[b](B,z,v)}}else return(U,v,B)=>{let z=[];for(let X of w){if(U?.source===X)break;z.push(X[b](v,B,U))}return Promise.all(z)}},"getApplyToIntermediateSource"),A=this.sources[this.sources.length-1],C=a(b=>{if(A[b]&&(!A[b].reliesOnPrototype||A.prototype[b]))return(w,U,v)=>{if(!w?.source)return A[b](U,v,w)}},"getApplyToCanonicalSource");return Te={put:C("put"),delete:C("delete"),publish:C("publish")},Bt={put:D("put"),delete:D("delete"),publish:D("publish"),invalidate:D("invalidate")},(async()=>{let b=!1,w=a(async(U,v)=>{let B=U.value,z=U.table?tt[c][U.table]:Je;if(c===Gs.SYSTEM_SCHEMA_NAME&&(U.table===Gs.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||U.table===Gs.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(b=!0),U.id===void 0&&(U.id=B[z.primaryKey],U.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(U));U.source=m;let X=await z.getResource(U.id,v,_l);switch(U.type){case"put":return X._writeUpdate(B,_l);case"delete":return X._writeDelete(_l);case"publish":return X._writePublish(B,_l);case"invalidate":return X.invalidate(_l);default:ot.error("Unknown operation",U.type,U.id)}},"writeUpdate");try{let U=m.subscribe;U&&h==null&&(h=!0);let v=m.subscribeOnThisThread?m.subscribeOnThisThread((0,Ao.getWorkerIndex)()):(0,Ao.getWorkerIndex)()===0,B=U&&v&&await m.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(B){let z;for await(let X of B)try{if(!(X.type==="transaction"?X.writes[0]:X)){ot.error("Bad subscription event",X);continue}if(X.source=m,z)if(X.beginTxn)z.resolve();else{w(X,z);continue}if(X.type==="end_txn")continue;let Ue=We(X,()=>{if(X.type==="transaction"){let se=[];for(let he of X.writes)try{se.push(w(he,X))}catch(Dt){throw Dt.message+=" writing "+JSON.stringify(he)+" of event "+JSON.stringify(X),Dt}return Promise.all(se)}else if(X.type==="define_schema"){let se=this.attributes.slice(0),he;for(let Dt of X.attributes)se.find(xe=>xe.name===Dt.name)||(se.push(Dt),he=!0);he&&(ut({table:n,database:c,attributes:se,origin:"cluster"}),pl.signalSchemaChange(new Sl.SchemaEventMsg(process.pid,Gs.OPERATIONS_ENUM.CREATE_TABLE,c,n)))}else return X.beginTxn?(z=X,w(X,X),new Promise(se=>{z.resolve=se})):w(X,X)});b&&(await Ue,pl.signalUserChange(new Sl.UserEventMsg(process.pid))),X.onCommit&&(Ue?.then?Ue.then(X.onCommit):X.onCommit())}catch(Xe){ot.error("error in subscription handler",Xe)}}}catch(U){ot.error(U)}})(),this}static getResource(m,g,D){let A=super.getResource(m,g,D);if(m!=null){Va(m);try{if(A.hasOwnProperty(ye))return A;if(typeof m=="object"&&m&&!Array.isArray(m))throw new Error(`Invalid id ${JSON.stringify(m)}`);let C=!D?.async||i.cache?.get(m),b=zr(g),w=b.getReadTxn();if(w?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return HE(m,g,{transaction:w},C,U=>{if(U?hl(A,U):A[ye]=null,g.onlyIfCached&&g.noCacheStore){if(!A.doesExist())throw new Rs.ServerError("Entry is not cached",504)}else if(D?.ensureLoaded){let v=xE(m,U,g,A);if(v)return b?.disregardReadTxn(),A[LR]=!0,MR(v,B=>(hl(A,B),A))}return A})}catch(C){throw C.message.includes("Unable to serialize object")&&(C.message+=": "+JSON.stringify(m)),C}}return A}ensureLoaded(){let m=xE(this[De],this[fn],this[me]);if(m)return this[LR]=!0,MR(m,g=>{this[fn]=g,this[ye]=g.value,this[mE]=g.version})}static setTTLExpiration(m){if(typeof m=="number")d=m*1e3,f||(f=0);else if(m&&typeof m=="object")d=m.expiration*1e3,f=(m.eviction||0)*1e3,Os=m.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(d<0)throw new Error("Expiration can not be negative");Os=Os||(d+f)/4,FE()}static enableAuditing(m=!0){E=m,m&&eA(),Je.audit=m}static coerceId(m){return m===""?null:pE(m,K)}static async dropTable(){if(delete tt[c][n],c===o){for(let m of p)l.remove(Je.tableName+"/"+m.name),r[m.name]?.drop();l.remove(Je.tableName+"/"),i.drop(),await l.committed}else console.log("legacy dropTable"),await i.close(),await fs.remove(data_path),await fs.remove(data_path===standard_path?data_path+MDB_LOCK_FILE_SUFFIX:path.join(path.dirname(data_path),MDB_LEGACY_LOCK_FILE_NAME));pl.signalSchemaChange(new Sl.SchemaEventMsg(process.pid,Gs.OPERATIONS_ENUM.DROP_TABLE,c,n))}get(m){if(typeof m=="string")return this.getProperty(m);if(this[rs])return this.search(m);if(this[De]===null){if(m?.conditions)return this.search(m);let g=Je.getRecordCount();return{recordCount:g.recordCount,estimatedRecordRange:g.estimatedRange,records:"./",name:n,database:c,attributes:p}}if(m?.property)return this.getProperty(m.property);if(this.doesExist()||m?.ensureLoaded===!1||this[me]?.returnNonexistent)return this}allowRead(m,g){let D=Cl(m);if(D?.read){if(D.isSuperUser)return!0;let A=D.attribute_permissions,C=g?.select;if(A?.length>0||jR&&C){if(g||(g={}),C){let b=A?.length>0&&UR(A,"read");g.select=C.map(w=>{let U=w.name||w;if(!b||b[U]){let v=$n[U]?.definition?.tableClass;if(v){if(w.name||(w={name:w}),!v.prototype.allowRead.call(null,m,w))return!1;if(!w.select)return w.name}return w}}).filter(Boolean)}else g.select=A.filter(b=>b.read&&!$n[b.attribute_name]).map(b=>b.attribute_name);return g}else return!0}}allowUpdate(m,g){let D=Cl(m);if(D?.update){let A=D.attribute_permissions;if(A?.length>0){let C=UR(A,"update");for(let b in g)if(!C[b])return!1;for(let b of A){let w=b.attribute_name;!b.update&&!(w in g)&&(g[w]=this.getProperty(w))}}return!0}}allowCreate(m,g){if(this[rs]){let D=Cl(m);if(D?.insert){let A=D.attribute_permissions;if(A?.length>0){let C=UR(A,"insert");for(let b in g)if(!C[b])return!1}else return!0}}else return this.allowUpdate(m,{})}allowDelete(m){return Cl(m)?.delete}update(m,g){if(!zr(this[me]))throw new Error("Can not update a table resource outside of a transaction");if(m===!1)return this;let A;if(typeof m=="object"&&m)if(g){Object.isFrozen(m)&&(m=Object.assign({},m));for(let C in this[ye])m[C]===void 0&&(m[C]=void 0);this[Wt]=m}else A=this[Wt],A&&(m=Object.assign(A,m)),this[Wt]=A=m;return this._writeUpdate(this),this}invalidate(m){let g=this[me],D=this[De];Va(D),zr(this[me]).addWrite({key:D,store:i,invalidated:!0,entry:this[fn],nodeName:this[me]?.nodeName,before:Te.invalidate?.bind(this,g,D),beforeIntermediate:Bt.invalidate?.bind(this,g,D),commit:(C,b)=>{if(b?.version>C)return;let w=null;for(let U in r)w||(w={}),w[U]=this.getProperty(U);S(D,w,this[fn],C,dl,E,this[me],0,"invalidate")}})}static evict(m,g,D){let A=this.Source,C;if(!((y||E)&&(!g||(C=i.getEntry(m),!C||!g)||C.version!==D))){if(y){if(i.hasLock(m,C.version))return;let b;for(let w in r)b||(b={}),b[w]=g[w];if(b)return S(m,b,C,D,fl,null,null,0,null,!0)}return i.ifVersion(D,()=>{wl(m,g,null)}),E?S(m,null,C,D,fl,null,null,0,null,!0):i.remove(m,D)}}lock(){throw new Error("Not yet implemented")}static operation(m,g){return m.table||=n,m.schema||=c,vH.operation(m,g)}put(m){this.update(m,!0)}_writeUpdate(m,g){let D=this[me],A=zr(D),C=this[De];Va(C);let b=this[fn];this[DR]=!0;let w={key:C,store:i,entry:b,nodeName:D?.nodeName,validate:U=>{if(!m[CH]||Vl(m)){if(this.validate(m),D?.source?m=ac(m):(t&&m[t]!==C&&(m[t]=C),$&&(m[$.name]=$.type==="Date"?new Date(U):$.type==="String"?new Date(U).toISOString():U),L&&(b?.value?m[L.name]=b?.value[L.name]:m[L.name]=L.type==="Date"?new Date(U):L.type==="String"?new Date(U).toISOString():U),m=ac(m)),m[ye])throw new Error("Can not assign a record with a record property");this[ye]=m}else A.removeWrite(w)},before:Te.put&&(()=>Te.put(D,C,m)),beforeIntermediate:Bt.put&&(()=>Bt.put(D,C,m)),commit:(U,v,B)=>{B&&(D&&v?.version>(D.lastModified||0)&&(D.lastModified=v.version),hl(this,v));let z=v?.value;this[DR]=!1,!(v?.version>U)&&(wl(C,z,m),S(C,m,v,U,0,E,D,D.expiresAt||(d?d+Date.now():0)))}};A.addWrite(w)}async delete(m){if(typeof m=="string")return this.deleteProperty(m);if(this[rs]){for await(let g of this.search(m))(await Je.getResource(g[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(m);return}return this[ye]?this._writeDelete(m):!1}_writeDelete(m){let g=zr(this[me]),D=this[De];Va(D);let A=this[me];return g.addWrite({key:D,store:i,resource:this,nodeName:A?.nodeName,before:Te.delete?.bind(this,A,D),beforeIntermediate:Bt.delete?.bind(this,A,D),commit:(C,b,w)=>{let U=b?.value;w&&(A&&b?.version>(A.lastModified||0)&&(A.lastModified=b.version),hl(this,b)),!(b?.version>C)&&(wl(this[De],U),ot.trace("Write delete entry",D,C),E||h?(S(D,null,this[fn],C,0,E,this[me],0,"delete"),E||FE()):i.remove(this[De]))}}),!0}search(m){let g=this[me],D=zr(g);if(!m)throw new Error("No query provided");let A=m.conditions;A?A.length===void 0&&(A=A[Symbol.iterator]?Array.from(A):[A]):A=Array.isArray(m)?m:m[Symbol.iterator]?Array.from(m):[],this[De]&&(A=[{attribute:null,comparator:"prefix",value:this[De]}].concat(A));let C,b={};function w(ee,qe){let He;switch(qe){case"and":case void 0:if(ee.length<1)throw new Error('An "and" operator requires at least one condition');He=!0;break;case"or":if(ee.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+qe)}let ft=He&&{},er;for(let Ne of ee){if(Ne.conditions){Ne.conditions=w(Ne.conditions,Ne.operator);continue}let we=Ne[0]??Ne.attribute,Lt=we==null?K:Sn(p,we);if(Lt){if(He){let br=zn(we),Ht=ft[br];Ht?(Ht.push(Ne),er=!0):ft[br]=[Ne]}Lt.type&&(Ne[1]===void 0?Ne.value=v(Ne.value,Lt):Ne[1]=v(Ne[1],Lt))}else if(we!=null)throw(0,Rs.handleHDBError)(new Error,`${we} is not a defined attribute`,404)}if(m.enforceExecutionOrder)return ee;if(er)for(let Ne in ft){let we=ft[Ne],Lt=we.length;if(Lt>1)for(let br=0;br<Lt;br++){let Ht=we[br];if(Ht.comparator==="ge"||Ht.comparator==="greater_than_equal")for(let Pe=0;Pe<Lt;Pe++){let Xr=we[Pe];(Xr.comparator==="le"||Xr.comparator==="less_than_equal")&&(Ht.comparator="between",Ht.value=[Ht.value,Xr.value],ee.splice(ee.indexOf(Xr),1))}if(Ht.comparator==="equals"||!Ht.comparator){for(let Pe=0;Pe<Lt;Pe++)if(Pe!==br){let Xr=we[Pe];ee.splice(ee.indexOf(Xr),1)}break}}}return ee}a(w,"prepareConditions");function U(ee,qe){if(m.enforceExecutionOrder)return ee;for(let He of ee)He.conditions&&(He.conditions=U(He.conditions,He.operator));return ee.length>1&&qe!=="or"?(0,PH.sortBy)(ee,ah(Je)):ee}a(U,"orderConditions");function v(ee,qe){return Array.isArray(ee)?ee.map(He=>pE(He,qe)):pE(ee,qe)}a(v,"coerceTypedValues");let B=m.operator;(A.length>0||B)&&(A=w(A,B));let z=typeof m.sort=="object"&&m.sort,X;if(z&&B!=="or"){let ee=z.attribute;if(C=A.find(qe=>zn(qe.attribute)===zn(ee)),!C){if(!Sn(p,ee))throw(0,Rs.handleHDBError)(new Error,`${ee} is not a defined attribute`,404);C={attribute:ee},A.push(C)}C.descending=!!z.descending}A=U(A,B),z&&(A[0]===C?z.next&&(X={dbOrderedAttribute:z.attribute,attribute:z.next.attribute,descending:z.next.descending,next:z.next.next}):(C&&A.splice(A.indexOf(C),1),X=z));function Xe(ee,qe){let He=ee[0];if(qe==="or"){let ft=se(He);for(let Ne=1;Ne<ee.length;Ne++){let we=ee[Ne],Lt=se(we);ft=ft.concat(Lt)}let er=new Set;return ft.filter(Ne=>{let we=Ne.key??Ne;return er.has(we)?!1:(er.add(we),!0)})}else{let ft=se(He),er=ee.slice(1).map(Ne=>lc(Ne,Je,g,b)).filter(Boolean);return er.length>0?Jr(ft,er):ft}}a(Xe,"executeConditions");let Ue=m.reverse===!0;function se(ee){return ee.conditions?Xe(ee.conditions,ee.operator):uc(ee,D,ee.descending||Ue,Je,m.allowFullScan,b)}a(se,"executeCondition");let he=m.select;if(A.length===0&&(A=[{attribute:t,comparator:"greater_than",value:!0}]),m.explain)return{conditions:A,operator:B,postOrdering:X,selectApplied:!!he};let Dt=D.useReadTxn(),xe=Xe(A,B);(m.offset||m.limit!==void 0)&&(xe=xe.slice(m.offset,m.limit!==void 0?(m.offset||0)+m.limit:void 0));let Me=m.ensureLoaded!==!1;function Jr(ee,qe){let He=qe?.length,ft={transaction:Dt,lazy:He>0||typeof he=="string"||he?.length<4,alwaysPrefetch:!0};function er(we,Lt){let br=we?.value;if(!br)return hE.SKIP;for(let Ht=0;Ht<He;Ht++)if(!qe[Ht](br,we))return hE.SKIP;return Lt!==void 0&&(we.key=Lt),we}a(er,"processEntry");let Ne=He>0||!ee.hasEntries?ee.map(we=>typeof we=="object"&&we.key!==void 0?He>0?er(we):we:HE(we,g,ft,!1,er)):ee;return Ne.hasEntries=!0,Ne}a(Jr,"transformToEntries");let ce,$a=Je.transformEntryForSelect(he,g,b,Me,!0);if(X){xe=Jr(xe,null);let ee;ce=new xe.constructor({[Symbol.iterator](){let qe,He=xe[Symbol.asyncIterator](),ft,er=X.dbOrderedAttribute,Ne,we,Lt=!0;function br(Pe){let Xr=Pe.next&&br(Pe.next),Ya=Pe.descending;return(tA,rA)=>{let sA=qE(tA,Pe.attribute,g),nA=qE(rA,Pe.attribute,g),iA=Ya?(0,Oo.compareKeys)(nA,sA):(0,Oo.compareKeys)(sA,nA);return iA===0?Xr?.(tA,rA)||0:iA}}a(br,"createComparator");let Ht=br(X);return{async next(){let Pe;if(qe)if(Pe=qe.next(),Pe.done){if(ft)return ce.onDone&&ce.onDone(),Pe}else return{value:$a(Pe.value)};ee=[],Ne&&ee.push(Ne);do if(Pe=await He.next(),Pe.done){if(ft=!0,ee.length)break;return ce.onDone&&ce.onDone(),Pe}else{let Xr=Pe.value;if(er){let Ya=qE(Xr,er,g);if(Lt)Lt=!1,we=Ya;else if(Ya!==we){we=Ya,Ne=Xr;break}}ee.push(Xr)}while(!0);return X.isGrouped,ee.sort(Ht),qe=ee[Symbol.iterator](),Pe=qe.next(),Pe.done?(ce.onDone&&ce.onDone(),Pe):{value:await $a(Pe.value)}},return(){ce.onDone&&ce.onDone(),He.return()},throw(){ce.onDone&&ce.onDone(),He.throw()}}}})}else ce=xe.map($a);return ce.onDone=()=>{ce.results=null,D.doneReadTxn()},ce.selectApplied=!0,ce}static transformEntryForSelect(m,g,D,A,C){if(m===t||m?.length===1&&m[0]===t){let v=a(B=>B?.key??B,"transform");return m===t?v:m.asArray?B=>[v(B)]:B=>({[t]:v(B)})}let b;A&&y&&!m?.every(v=>{let B;return typeof v=="object"?B=v.name:B=v,r[B]||B===t})&&(b=!0);let w,U=a(v=>{let B;if(v){if(BE=v,B=v.value||v.deref?.(),!B&&(v.key===void 0||v.deref)){if(v=HE(v.key??v,g,{transaction:zr(g).getReadTxn(),lazy:m?.length<4},!1,z=>z),v?.then)return v.then(U);B=v?.value}if(b&&(v.metadataFlags&(dl|fl)||v.expiresAt&&v.expiresAt<Date.now())){let z=xE(v.key??v,v,g);if(z?.then)return z.then(U)}}if(B==null)return C?hE.SKIP:B;if(m&&!(m[0]==="*"&&m.length===1)){let z,X=a((Ue,se)=>{let he;typeof Ue=="object"?he=Ue.name:he=Ue;let Dt=$n?.[he],xe;if(Dt){let Me=D?.[he];if(Me)if(Me.fromRecord)xe=Me.fromRecord(B);else{let ce=zn(v.key);xe=Me.get(ce),xe||(xe=[])}else xe=Dt(B,g,v);let Jr=a(ce=>{if(ce&&typeof ce=="object"){let $a=Dt.definition?.tableClass;w||(w={});let ee=w[he]||(w[he]=($a||Je).transformEntryForSelect(he===Ue?null:Ue.select||Ue,g,Me,A));if(Array.isArray(ce)){let qe;if(ce=ce.map(He=>{let ft=ee(He);return ft?.then&&(qe=!0),ft}),qe){z||(z=[]),z.push(Promise.all(ce).then(He=>se(He,he)));return}}else if(ce=ee(ce),ce?.then){z||(z=[]),z.push(ce.then(qe=>se(qe,he)));return}}se(ce,he)},"handleResolvedValue");xe?.then?(z||(z=[]),z.push(xe.then(Jr))):Jr(xe);return}else xe=B[he],xe&&typeof xe=="object"&&he!==Ue&&(xe=this.transformEntryForSelect(Ue.select||Ue,g,null)({value:xe}));se(xe,he)},"selectAttribute"),Xe;if(typeof m=="string")X(m,Ue=>{Xe=Ue});else if(Array.isArray(m))if(m.asArray)Xe=[],m.forEach((Ue,se)=>{Ue==="*"?m[se]=B:X(Ue,he=>Xe[se]=he)});else{Xe={};for(let Ue of m)if(Ue==="*")for(let se in B)Xe[se]=B[se];else X(Ue,(se,he)=>Xe[he]=se)}else throw new Rs.ClientError("Invalid select"+m);return z?Promise.all(z).then(()=>Xe):Xe}return B},"transform");return U}async subscribe(m){if(!u)throw new Error("Can not subscribe to a table without an audit log");E||ut({table:n,database:c,schemaDefined:_,attributes:p,audit:!0}),m||(m={});let g=bH(Je,this[De]??null,function(b,w,U,v){try{let B=w.getValue?.(i);this.send({id:b,timestamp:U,value:B,version:w.version,type:w.type,beginTxn:v})}catch(B){ot.error(B)}},m.startTime,this[rs]);this[rs]&&(g.includeDescendants=!0,m.onlyChildren&&(g.onlyChildren=!0)),m.crossThreads===!1&&(g.crossThreads=!1),m.supportsTransactions&&(g.supportsTransactions=!0);let D=this[De],A=m.previousCount;A>1e3&&(A=1e3);let C=m.startTime;if(this[rs]){if(C){if(A)throw new Rs.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:b,value:w}of u.getRange({start:C,exclusiveStart:!0})){let U=Dr(w,i);if(U.tableId!==s)continue;let v=U.recordId;(D==null||UH(D,v))&&g.send({id:v,timestamp:b,...U}),g.startTime=b}}else if(A){let b=[];for(let{key:w,value:U}of u.getRange({start:"z",end:!1,reverse:!0}))try{let v=Dr(U);if(v.tableId!==s)continue;let B=v.recordId;if(D==null||UH(D,B)){let z=v.getValue(i);if(b.push({id:B,timestamp:w,value:z,version:v.version,type:v.type}),--A<=0)break}}catch(v){ot.error("Error getting history entry",w,v)}for(let w=b.length;w>0;)g.send(b[--w]);b[0]&&(g.startTime=b[0].timestamp)}else if(!m.omitCurrent)for(let{key:b,value:w,version:U,localTime:v}of i.getRange({start:D??!1,end:D==null?void 0:[D,Oo.MAXIMUM_KEY],versions:!0}))w&&g.send({id:b,version:U,timestamp:v,value:w})}else{A&&!C&&(C=0);let b=this[fn]?.localTime;if(ot.trace("Subscription from",C,"from",D),C<b){let w=[],U=b;do{let v=u.get(U);if(v){m.omitCurrent=!0;let B=Dr(v),z=B.getValue(i);w.push({id:D,value:z,timestamp:U,...B}),U=B.previousLocalTime}else break;A&&A--}while(U>C&&A!==0);for(let v=w.length;v>0;)g.send(w[--v]);g.startTime=b}!m.omitCurrent&&this.doesExist()&&g.send({id:D,version:this[mE],timestamp:this[fn]?.localTime,value:this})}return m.listener&&g.on("data",m.listener),g}doesExist(){return!!(this[ye]||this[DR])}publish(m,g){this._writePublish(m,g)}_writePublish(m,g){let D=zr(this[me]),A=this[De]||null;Va(A);let C=this[me];D.addWrite({key:A,store:i,entry:this[fn],nodeName:C?.nodeName,validate:()=>{this.validate(m)},before:Te.publish?.bind(this,C,A,m),beforeIntermediate:Bt.publish?.bind(this,C,A,m),commit:(b,w,U)=>{w===void 0&&h&&!E&&FE(),S(A,w?.value??null,w,w?.version||b,0,!0,C,w?.expiresAt,"message",!1,m)}})}validate(m){let g,D=a((A,C,b)=>{if(C.type&&A!=null)if(C.properties){typeof A!="object"&&(g||(g=[])).push(`Property ${b} must be an object${C.type?" ("+C.type+")":""}`);let w=C.properties;for(let U=0,v=w.length;U<v;U++){let B=w[U],z=D(A[B.name],B,b+"."+B.name);z&&(A[B.name]=z)}}else switch(C.type){case"Int":(typeof A!="number"||A>>0!==A)&&(g||(g=[])).push(`Property ${b} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof A!="number"||!(Math.floor(A)===A&&Math.abs(A)<=9007199254740992))&&(g||(g=[])).push(`Property ${b} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof A!="number"&&(g||(g=[])).push(`Property ${b} must be a number`);break;case"ID":typeof A=="string"||A?.length>0&&A.every?.(w=>typeof w=="string")||(g||(g=[])).push(`Property ${b} must be a string, or an array of strings`);break;case"String":typeof A!="string"&&(g||(g=[])).push(`Property ${b} must be a string`);break;case"Boolean":typeof A!="boolean"&&(g||(g=[])).push(`Property ${b} must be a boolean`);break;case"Date":if(!(A instanceof Date)){if(typeof A=="string"||typeof A=="number")return new Date(A);(g||(g=[])).push(`Property ${b} must be a Date`)}break;case"BigInt":if(typeof A!="bigint"){if(typeof A=="string"||typeof A=="number")return BigInt(A);(g||(g=[])).push(`Property ${b} must be a bigint`)}break;case"Bytes":A instanceof Uint8Array||(g||(g=[])).push(`Property ${b} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(A)){if(C.elements)for(let w=0,U=A.length;w<U;w++){let v=A[w],B=D(v,C.elements,b+"[*]");B&&(A[w]=B)}}else(g||(g=[])).push(`Property ${b} must be a Buffer or Uint8Array`);break}C.nullable===!1&&A==null&&(g||(g=[])).push(`Property ${b} is required (and not does not allow null values)`)},"validateValue");for(let A=0,C=p.length;A<C;A++){let b=p[A];if(b.relationship)continue;let w=D(m[b.name],b,b.name);w&&(m[b.name]=w)}if(g)throw new Rs.ClientError(g.join(". "))}getUpdatedTime(){return this[mE]}wasLoadedFromSource(){return y?!!this[LR]:void 0}static async addAttributes(m){let g=p.slice(0);for(let D of m){if(!D.name)throw new Rs.ClientError("Attribute name is required");if(D.name.match(/[`/]/))throw new Rs.ClientError("Attribute names cannot include backticks or forward slashes");g.push(D)}return ut({table:n,database:c,schemaDefined:_,attributes:g}),Je.indexingOperation}static async removeAttributes(m){let g=p.filter(D=>!m.includes(D.name));return ut({table:n,database:c,schemaDefined:_,attributes:g}),Je.indexingOperation}static getRecordCount(m){let g=i.getStats().entryCount,D=5e3,A=1e3,C;g>D&&!m?.exactCount&&(C=A);let b=0;for(let{value:w}of i.getRange({start:!0,lazy:!0,limit:C}))w!=null&&b++;if(C){let w=b;b=0;for(let{value:he}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:C}))he!=null&&b++;let U=C*2,v=(b+w)/U,B=Math.pow((b-w+1)/C/2,2)+v*(1-v)/U,z=Math.max(Math.sqrt(B)*g,1),X=Math.round(v*g),Xe=Math.max(X-1.96*z,0),Ue=Math.min(X+1.96*z,g),se=Math.pow(10,Math.round(Math.log10(z)));return se>X&&(se=se/10),b=Math.round(X/se)*se,{recordCount:b,estimatedRange:[Math.round(Xe),Math.round(Ue)]}}return{recordCount:b}}static updatedAttributes(){$n=this.propertyResolvers={$id:(m,g,D)=>D.key,$updatedtime:(m,g,D)=>D.version,$record:(m,g,D)=>D?{value:m}:m};for(let m of this.attributes){m.resolve=null;let g=m.relationship;if(g)if(jR=!0,g.to)m.elements?.definition?($n[m.name]=m.resolve=(D,A,C)=>{let b=D[g.from?g.from:t],w=m.elements.definition.tableClass;return C?uc({attribute:g.to,value:b},zr(A).getReadTxn(),!1,w).asArray:w.search([{attribute:g.to,value:b}],A).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 "${n}" must have an array type referencing a table as the elements`);else if(g.from){let D=m.definition||m.elements?.definition;D?($n[m.name]=m.resolve=(A,C,b)=>{let w=A[g.from];if(w!==void 0){if(m.elements){let U,v=w.map(B=>{let z=b?D.tableClass.primaryStore.getEntry(B,{transaction:zr(C).getReadTxn()}):D.tableClass.get(B,C);return z?.then&&(U=!0),z});return g.filterMissing?U?Promise.all(v).then(B=>B.filter(MH)):v.filter(MH):U?Promise.all(v):v}return b?D.tableClass.primaryStore.getEntry(w,{transaction:zr(C).getReadTxn()}):D.tableClass.get(w,C)}},m.set=(A,C)=>{if(Array.isArray(C)){let b=C.map(w=>w[De]||w[D.tableClass.primaryKey]);A[g.from]=b}else{let b=C[De]||C[D.tableClass.primaryKey];A[g.from]=b}},m.resolve.definition=m.definition||m.elements?.definition):console.error(`The relationship property "${m.name}" in table "${n}" must be a type that references a table`)}else console.error(`The relationship directive on "${m.name}" in table "${n}" must use either "from" or "to" arguments`)}Yl(this,this)}static async deleteHistory(m=0){let g;for(let{key:D,value:A}of u.getRange({start:0,end:m}))await El(),Dr(A).tableId===s&&(g=u.remove(D));await g}static async*getHistory(m=0,g=1/0){for(let{key:D,value:A}of u.getRange({start:m,end:g})){await El();let C=Dr(A);C.tableId===s&&(yield{id:C.recordId,localTime:D,version:C.version,type:C.type,value:C.getValue(i),user:C.user})}}static async getHistoryOfRecord(m){let g=[],D=i.getEntry(m);if(!D)return g;let A=D.localTime,C=0;do{await El();let b=u.get(A);if(b){let w=Dr(b);g.push({id:w.recordId,localTime:A,version:w.version,type:w.type,value:w.getValue(i),user:w.user}),A=w.previousLocalTime}else break}while(C<1e3&&A);return g.reverse()}static cleanup(){Q?.remove()}}Je.updatedAttributes();let Mx=Je.prototype;return Mx[CH]=!0,d&&Je.setTTLExpiration(d/1e3),V&&Px(),Je;function wl(Y,m,g){let D;for(let A in r){let C=r[A],b=C.isIndexing,w=g?.[A],U=m?.[A];if(w===U&&!b)continue;D=!0;let v=C.indexNulls,B=(0,ml.getIndexedValues)(U,v);if(B){wH&&C.prefetch(B.map(z=>({key:z,value:Y})),LH);for(let z=0,X=B.length;z<X;z++)C.remove(B[z],Y)}if(B=(0,ml.getIndexedValues)(w,v),B){wH&&C.prefetch(B.map(z=>({key:z,value:Y})),LH);for(let z=0,X=B.length;z<X;z++)C.put(B[z],Y)}}return D}a(wl,"updateIndices");function Va(Y){switch(typeof Y){case"number":return!0;case"string":if(Y.length<659)return!0;if(Y.length>DH)throw new Error("Primary key size is too large: "+Y.length);break;case"object":if(Y===null)return!0;break;case"bigint":if(Y<2n**64n&&Y>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof Y)}if((0,Oo.writeKey)(Y,yse,0)>DH)throw new Error("Primary key size is too large: "+Y.length);return!0}a(Va,"checkValidId");function HE(Y,m,g,D,A){let C=a(()=>{if(m?.transaction?.stale&&(m.transaction.stale=!1),g.transaction?.isDone)return A(null,Y);let b=i.getEntry(Y,g);return b&&m&&(b?.version>(m.lastModified||0)&&(m.lastModified=b.version),b?.localTime&&!m.lastRefreshed&&(m.lastRefreshed=b.localTime)),A(b,Y)},"whenPrefetched");return D?C():ne>0?(ne--,C()):new Promise((b,w)=>{ne===0?(ne--,i.prefetch([Y],()=>{U(),v()})):(re.push(Y),be.push(v),re.length>Ux&&(ne--,U()));function U(){if(re.length>0){let B=be;i.prefetch(re,()=>{ne===-1?U():ne++;for(let z of B)z()}),re=[],be=[],ct>2&&ct--}else ne=ct,ct<Lx&&ct++}a(U,"prefetch");function v(){try{b(C())}catch(B){w(B)}}a(v,"load")})}a(HE,"loadLocalRecord");function Cl(Y){if(!Y)return;let m=Y.role.permission;if(m.super_user)return Ise;let g=m[c],D,A=g?.tables;if(A)return A[n];if(c==="data"&&(D=m[n])&&!D.tables)return D}a(Cl,"getTablePermissions");function xE(Y,m,g,D){if(y){let A;if(g.noCache?A=!0:(m?(!m.value||m.metadataFlags&(dl|fl)||m.expiresAt&&m.expiresAt<Date.now())&&(A=!0):A=!0,us(!A,"cache-hit",n)),A){let C=ZR(Y,m,g).then(b=>(b?.value?.[ye]&&ot.error("Can not assign a record with a record property"),g&&(b?.version>(g.lastModified||0)&&(g.lastModified=b.version),g.lastRefreshed=Date.now()),b));if(g?.onlyIfCached||m?.value&&D?.allowStaleWhileRevalidate?.(m,Y)){if(C.catch(b=>ot.warn(b)),g?.onlyIfCached&&!D.doesExist())throw new Rs.ServerError("Entry is not cached",504);return}else return C}}}a(xE,"ensureLoadedFromSource");function zr(Y){let m=Y?.transaction;if(m){if(!m.lmdbDb)return m.lmdbDb=i,m;do{if(m.lmdbDb?.path===i.path)return m;let g=m.next;if(!g)return m=m.next=new Ci,m.lmdbDb=i,m;m=g}while(!0)}else return new Ql}a(zr,"txnForContext");function qE(Y,m,g){if(!Y)return;BE=Y;let D=Y.value||Y.deref?.()||(BE=i.getEntry(Y.key))?.value;if(typeof m=="object"){let C=$n,b=D;for(let w=0,U=m.length;w<U;w++){let v=m[w],B=C?.[v];b=B?B(b,g):b?.[v],C=B?.definition?.tableClass?.propertyResolvers}return b}let A=$n[m];return A?A(D,g):D[m]}a(qE,"getAttributeValue");async function ZR(Y,m,g){let D=m?.metadataFlags,A=m?.version,C,b;if(!i.attemptLock(Y,A,()=>{clearTimeout(b);let B=i.getEntry(Y);!B||!B.value||B.metadataFlags&(dl|fl)?C(ZR(Y,i.getEntry(Y),g)):C(B)}))return new Promise(B=>{C=B,b=setTimeout(()=>{i.unlock(Y,A)},Nse)});let w=m?.value,U={requestContext:g,replacingRecord:w,replacingVersion:A,source:null,resourceCache:g?.resourceCache},v=g?.responseHeaders;return new Promise((B,z)=>{let X;MR(We(U,async Xe=>{let Ue=performance.now(),se,he,Dt;try{for(let ce of Je.sources)if(ce.get&&(!ce.get.reliesOnPrototype||ce.prototype.get)&&(U.source=ce,se=await ce.get(Y,U),se))break;Dt=D&dl;let Me=U.lastModified||Dt&&A;he=Dt||Me>A||!w,Me||(Me=(0,ml.getNextMonotonicTime)());let Jr=performance.now()-Ue;if(Fr(Jr,"cache-resolution",n),v&&v.append("Server-Timing",`cache-resolve;dur=${Jr.toFixed(2)}`),Xe.timestamp=Me,d&&!U.expiresAt&&(U.expiresAt=Date.now()+d),se){if(typeof se!="object")throw new Error("Only objects can be cached and stored in tables");typeof se.toJSON=="function"&&(se=se.toJSON()),t&&se[t]!==Y&&(se[t]=Y)}X=!0,B({version:Me,value:se})}catch(Me){Me.message+=` while resolving record ${Y} for ${n}`,w&&((Me.code==="ECONNRESET"||Me.code==="ECONNREFUSED"||Me.code==="EAI_AGAIN")&&!g?.mustRevalidate||g?.staleIfError&&(Me.statusCode===500||Me.statusCode===502||Me.statusCode===503||Me.statusCode===504))?(B({version:A,value:w}),ot.trace(Me.message,"(returned stale record)")):z(Me),U.transaction.abort();return}if(g?.noCacheStore){U.transaction.abort();return}zr(U).addWrite({key:Y,store:i,entry:m,nodeName:"source",commit:(Me,Jr)=>{if(Jr?.version!==A)return;let ce=wl(Y,w,se);se?(Bt.put?.(U,Y,se),S(Y,se,Jr,Me,0,E&&he||null,U,U.expiresAt,"put",!!Dt)):(Bt.delete?.(U,Y),E||h?S(Y,null,Jr,Me,0,E&&he||null,U,0,"delete",!!Dt):i.remove(Y,A))}})}),()=>{i.unlock(Y,A)},Xe=>{i.unlock(Y,A),X&&ot.error("Error committing cache update",Xe)})})}a(ZR,"getFromSource");function FE(){if(Os!==XR&&(XR=Os,(0,Ao.getWorkerIndex)()===(0,Ao.getWorkerCount)()-1)){if(Il&&clearTimeout(Il),!Os)return;let Y=new Date;Y.setMonth(0),Y.setDate(1),Y.setHours(0),Y.setMinutes(0),Y.setSeconds(0);let m=Math.ceil((Date.now()-Y.getTime())/Os)*Os+Y.getTime(),g=a(D=>{ot.trace(`Scheduled next cleanup scan at ${new Date(D)}ms`),Il=setTimeout(()=>H=H.then(async()=>{if(g(Math.max(D+Os,Date.now())),i.rootStore.status!=="open"){clearTimeout(Il);return}let A=50,C=new Array(A),b=0;ot.trace(`Starting cleanup scan for ${n}`);try{let w=0;for(let{key:U,value:v,version:B,expiresAt:z}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let X;v===null&&!E&&B+bse<Date.now()?X=i.remove(U,B):z&&z+f<Date.now()&&(X=Je.evict(U,v,B),w++),X&&(await C[b],C[b]=X.catch(Xe=>{ot.error("Cleanup error",Xe)}),++b>=A&&(b=0)),await El()}ot.trace(`Finished cleanup scan for ${n}, evicted ${w} entries`)}catch(w){ot.trace(`Error in cleanup scan for ${n}:`,w)}}),Math.min(D-Date.now(),2147483647)).unref()},"startNextTimer");g(m)}}a(FE,"scheduleCleanup");function eA(){Q=u?.addDeleteRemovalCallback(s,Y=>{let m=i.getEntry(Y);m?.value===null&&i.remove(Y,m.version)})}a(eA,"addDeleteRemoval");function Px(){(0,Ao.getWorkerIndex)()===0&&setInterval(async()=>{try{let Y=V.name,m=r[Y];if(!m)throw new Error(`expiresAt attribute ${V} must be indexed`);for(let{value:g}of m.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let D=i.getEntry(g);D?.value?.[Y]<Date.now()&&Je.evict(g,D.value,D.version),await El()}}catch(Y){ot.error("Error in evicting old records",Y)}},Ose).unref()}a(Px,"runRecordExpirationEviction")}function UR(e,t){let r=e.attr_object||(e.attr_object={}),s=r[t];if(s)return s;s=r[t]=Object.create(null);for(let n of e)s[n.attribute_name]=n[t];return s}function LH(){}function wse(e){vH=e}function pE(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"&&!Cse.test(e)&&(e+="Z"),e==="null"?null:new Date(e)):!r||r==="Any"?(0,SE.autoCast)(e):e}function UH(e,t){if(e==null)return!0;if(!Array.isArray(t))return e===t;if(Array.isArray(e)){let r=e.length;if(e[r-1]===null&&r--,t.length>=r){for(let s=0;s<r;s++)if(t[s]!==e[s])return!1;return!0}return!1}else if(t[0]===e)return!0}function MR(e,t,r){return e?.then?e.then(t,r):t(e)}function hl(e,t){e[fn]=t,e[ye]=t?.value??null,e[mE]=t?.version}function MH(e){return e!=null}var Gs,hE,ml,PH,Tl,Rs,pl,Sl,ot,Oo,Ao,SE,Ase,vH,Ose,bse,wH,Nse,mE,CH,fn,DR,LR,_l,dl,fl,yse,DH,Ise,Dme,Cse,El,xf=ge(()=>{Gs=M(I()),hE=require("lmdb"),ml=M(Ir()),PH=require("lodash");ys();ih();Tl=M(j());IH();Rs=M(Z()),pl=M(On()),Sl=M(Us());pe();Jl();ot=M(G());Wl();Di();Oo=require("ordered-binary"),Ao=M(Qe());Po();SE=M(W());pc();ai();Ase=new Uint8Array(9);Ase[8]=192;Ose=6e4,bse=864e5;Tl.initSync();wH=Tl.get(Gs.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Nse=1e4,mE=Symbol.for("version"),CH=Symbol.for("incremental-update"),fn=Symbol("entry"),DR=Symbol("is-saving"),LR=Symbol("loaded-from-source"),_l={isNotification:!0,ensureLoaded:!1},dl=1,fl=8,yse=Buffer.allocUnsafeSlow(8192),DH=1978,Ise={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},Dme=(0,SE.convertToMS)(Tl.get(Gs.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(TE,"makeTable");a(UR,"attributesAsObject");a(LH,"noop");a(wse,"setServerUtilities");Cse=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(pE,"coerceType");a(UH,"isDescendantId");El=a(()=>new Promise(setImmediate),"rest");a(MR,"when");a(hl,"updateResource");a(MH,"exists")});var Fe={};je(Fe,{database:()=>Wc,databases:()=>tt,dropDatabase:()=>vp,dropTableMeta:()=>vse,getDatabases:()=>Ps,getTables:()=>Dse,onUpdatedTable:()=>aR,readMetaDb:()=>gl,resetDatabases:()=>Lse,table:()=>ut,tables:()=>Cr});function Dse(){return bE||Ps(),Cr||{}}function Ps(){if(bE)return tt;bE=!0,Ga=new Map;let e=(0,Zt.getHdbBasePath)()&&(0,et.join)((0,Zt.getHdbBasePath)(),Wr.DATABASES_DIR_NAME),t=(0,Zt.get)(Wr.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,Zt.get)(Wr.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,Kr.existsSync)(e)?e:(0,et.join)((0,Zt.getHdbBasePath)(),Wr.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,Kr.existsSync)(e))for(let r of(0,Kr.readdirSync)(e,{withFileTypes:!0})){let s=(0,et.basename)(r.name,".mdb");r.isFile()&&(0,et.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&gl((0,et.join)(e,r.name),null,s)}if((0,Kr.existsSync)((0,Fa.getBaseSchemaPath)())){for(let r of(0,Kr.readdirSync)((0,Fa.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let s=(0,et.join)((0,Fa.getBaseSchemaPath)(),r.name),n=(0,et.join)((0,Fa.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,Kr.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,et.extname)(i.name).toLowerCase()===".mdb"){let o=(0,et.join)(n,i.name);gl((0,et.join)(s,i.name),(0,et.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let s=t[r],n=s.path;if((0,Kr.existsSync)(n))for(let o of(0,Kr.readdirSync)(n,{withFileTypes:!0}))o.isFile()&&(0,et.extname)(o.name).toLowerCase()===".mdb"&&gl((0,et.join)(n,o.name),(0,et.basename)(o.name,".mdb"),r);let i=s.tables;if(i)for(let o in i){let c=i[o],u=(0,et.join)(c.path,(0,et.basename)(o+".mdb"));(0,Kr.existsSync)(u)&&gl(u,o,r,null,!0)}}for(let r in tt){let s=Ga.get(r);if(s){let n=tt[r];r.includes("delete")&&As.trace(`defined tables ${Array.from(s.keys())}`);for(let i in n)s.has(i)||(As.trace(`delete table class ${i}`),delete n[i])}else if(delete tt[r],r==="data"){for(let n in Cr)delete Cr[n];delete Cr[NE]}}return Ga=null,tt}}function Lse(){bE=!1;for(let[,e]of Ni)e.needsDeletion=!0;Ps();for(let[e,t]of Ni)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),Ni.delete(e));return tt}function gl(e,t,r=BR,s,n){let i=new PR.default(e,!1);try{let o=Ni.get(e);o?o.needsDeletion=!1:(o=(0,RE.open)(i),Ni.set(e,o));let c=new bo.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(gE.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(s?(0,Kr.existsSync)(s)&&(i.path=s,_=(0,RE.open)(i),_.isLegacy=!0):_=s_(o));let l=qH(r),d=l[NE],f=new Map;for(let{key:E,value:h}of u.getRange({start:!1})){let[p,S]=E.toString().split("/");S===""?S=h.name:S||(S=p,p=t,h.name||(h.name=S,h.indexed=!h.is_hash_attribute)),d?.add(p);let R=f.get(p);R||f.set(p,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:p,primary:S}=h;if(!S){for(let Q of p)if(Q.is_hash_attribute||Q.isPrimaryKey){S=Q;break}if(!S){As.fatal(`Unable to find a primary key attribute on table ${E}, with attributes: ${JSON.stringify(p)}`);continue}}let R=l[E],O={},y=[],q,K,H=typeof S.audit=="boolean"?S.audit:(0,Zt.get)(Wr.CONFIG_PARAMS.LOGGING_AUDITLOG),L=S.trackDeletes,$=S.expiration,V=S.eviction;if(R)O=R.indices,y=R.attributes,R.schemaVersion++;else{q=S.tableId,q?q>=(u.get(qa)||0)&&u.putSync(qa,q+1):(S.tableId=q=u.get(qa),q||(q=1),u.putSync(qa,q+1),u.putSync(S.key,S));let Q=new bo.default(!S.is_hash_attribute,S.is_hash_attribute);K=c_(o.openDB(S.key,Q)),K.rootStore=o,K.tableId=q}for(let Q of p){Q.attribute=Q.name;try{if(!Q.is_hash_attribute&&(Q.indexed||Q.attribute&&!Q.name)){if(!O[Q.name]){let be=new bo.default(!Q.is_hash_attribute,Q.is_hash_attribute);O[Q.name]=o.openDB(Q.key,be),O[Q.name].indexNulls=Q.indexNulls}let re=y.find(be=>be.name===Q.name);re?y.splice(y.indexOf(re),1,Q):y.push(Q)}}catch(re){As.error("Error trying to update attribute",Q,y,O,re)}}if(!R){R=FH(l,E,TE({primaryStore:K,auditStore:_,audit:H,expirationMS:$&&$*1e3,evictionMS:V&&V*1e3,trackDeletes:L,tableName:E,tableId:q,primaryKey:S.name,databasePath:n?r+"/"+E:r,databaseName:r,indices:O,attributes:p,schemaDefined:S.schemaDefined,dbisDB:u})),R.schemaVersion=1;for(let Q of HR)Q(R)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function qH(e){let t=tt[e];if(t||(e==="data"?t=tt[e]=Cr:e==="system"?Object.defineProperty(tt,"system",{value:t=Object.create(null),configurable:!0}):t=tt[e]=Object.create(null)),Ga&&!Ga.has(e)){let r=new Set;t[NE]=r,Ga.set(e,r)}return t}function FH(e,t,r){return e[t]=r,r}function Wc({database:e,table:t}){e||(e=BR),Ps();let r=qH(e),s=(0,et.join)((0,Zt.getHdbBasePath)(),Wr.DATABASES_DIR_NAME),n=(0,Zt.get)(Wr.CONFIG_PARAMS.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(n.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&n[e]?.tables?.[t]?.path;s=i||n[e]?.path||process.env.STORAGE_PATH||(0,Zt.get)(Wr.CONFIG_PARAMS.STORAGE_PATH)||((0,Kr.existsSync)(s)?s:(0,et.join)((0,Zt.getHdbBasePath)(),Wr.LEGACY_DATABASES_DIR_NAME));let o=(0,et.join)(s,(i?t:e)+".mdb"),c=Ni.get(o);if(!c){let u=new PR.default(o,!1);c=(0,RE.open)(u),Ni.set(o,c)}return c}async function vp(e){if(!tt[e])throw new Error("Schema does not exist");let t=tt[e];for(let r in t){let n=t[r].primaryStore.rootStore;Ni.delete(n.path),n.status==="open"&&(await n.close(),await BH.remove(n.path))}if(e==="data"){for(let r in Cr)delete Cr[r];delete Cr[NE]}delete tt[e]}function ut({table:e,database:t,expiration:r,eviction:s,scanInterval:n,attributes:i,audit:o,trackDeletes:c,schemaDefined:u,origin:_}){t||(t=BR);let l=Wc({database:t,table:e}),d=tt[t],f=d?.[e];if(l.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let E,h,p,S;u==null&&(u=!0);let R=new bo.default(!1);for(let L of i)L.attribute?(L.name=L.attribute,L.indexed=!0):L.attribute=L.name,L.expiresAt&&(L.indexed=!0);let O,y;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 L=l.auditStore;L||(L=s_(l)),h=i.find(re=>re.isPrimaryKey)||{},E=h.name,h.is_hash_attribute=!0,h.schemaDefined=u,c&&(h.trackDeletes=!0),o=h.audit=typeof o=="boolean"?o:(0,Zt.get)(Wr.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(h.expiration=r),s&&(h.eviction=s),_&&(h.origins?h.origins.includes(_)||h.origins.push(_):h.origins=[_]),As.trace(`${e} table loading, opening primary store`);let $=new bo.default(!1,!0),V=e+"/",Q=c_(l.openDB(V,$));Q.rootStore=l,S=l.dbisDb=l.openDB(gE.INTERNAL_DBIS_NAME,R),Q.tableId=S.get(qa),Q.tableId||(Q.tableId=1),S.putSync(qa,Q.tableId+1),h.tableId=Q.tableId,f=FH(d,e,TE({primaryStore:Q,auditStore:L,audit:o,trackDeletes:c,expirationMS:r&&r*1e3,evictionMS:s&&s*1e3,primaryKey:E,tableName:e,tableId:Q.tableId,databasePath:t,databaseName:t,indices:{},attributes:i,schemaDefined:u,dbisDB:S})),f.schemaVersion=1,O=!0,H(),S.put(V,h)}p=f.indices,S=S||(l.dbisDb=l.openDB(gE.INTERNAL_DBIS_NAME,R)),f.dbisDB=S;let q=[];for(let{key:L,value:$}of S.getRange({start:!0})){let[V,Q]=L.toString().split("/");if(Q===""&&(Q=$.name),Q){if(V!==e)continue}else Q=V;if(!i.find(be=>be.name===Q)?.indexed&&$.indexed&&!$.isPrimaryKey){H(),O=!0,S.remove(L);let be=f.indices[V];be&&q.push(be)}}let K=[];try{for(let L of i||[]){if(L.relationship)continue;let $=e+"/"+(L.name||"");Object.defineProperty(L,"key",{value:$,configurable:!0});let V=S.get($);if(L.isPrimaryKey){if(V=V||S.get($=e+"/")||{},o!==f.audit||(+r||void 0)!==(+V.expiration||void 0)||(+s||void 0)!==(+V.eviction||void 0)){let re=Object.assign({},V);typeof o=="boolean"&&(o&&f.enableAuditing(o),re.audit=o),r&&(re.expiration=+r),s&&(re.eviction=+s),O=!0,H(),S.put($,re)}continue}V?.attribute&&!V.name&&(V.indexed=!0);let Q=!V||V.type!==L.type||V.indexed!==L.indexed||JSON.stringify(V.attributes)!==JSON.stringify(L.attributes)||JSON.stringify(V.elements)!==JSON.stringify(L.elements);if(L.indexed){let re=new bo.default(!0,!1),be=l.openDB($,re);(Q||V.indexingPID&&V.indexingPID!==process.pid||V.restartNumber<Rl.workerData?.restartNumber)&&(O=!0,H(),V=S.get($),(Q||V.indexingPID&&V.indexingPID!==process.pid||V.restartNumber<Rl.workerData?.restartNumber)&&(O=!0,L.lastIndexedKey=V?.lastIndexedKey||!1,L.indexingPID=process.pid,be.isIndexing=!0,Object.defineProperty(L,"dbi",{value:be}),L.indexNulls===void 0&&(L.indexNulls=!0),K.push(L)),S.put($,L)),V?.indexNulls&&L.indexNulls===void 0&&(L.indexNulls=!0),be.indexNulls=L.indexNulls,p[L.name]=be}else Q&&(O=!0,H(),S.put($,L))}}finally{y&&y()}if(O&&(f.schemaVersion++,f.updatedAttributes()),As.trace(`${e} table loading, running index`),K.length>0||q.length>0?f.indexingOperation=Pse(f,K,q):O&&AE.signalSchemaChange(new OE.SchemaEventMsg(process.pid,"schema-change",f.databaseName,f.tableName)),f.origin=_,O)for(let L of HR)L(f,_!=="cluster");return(r||s||n)&&f.setTTLExpiration({expiration:r,eviction:s,scanInterval:n}),As.trace(`${e} table loaded`),f;function H(){y||l.transactionSync(()=>({then(L){y=L}}))}a(H,"startTxn")}async function Pse(e,t,r){try{let s=e.schemaVersion;await AE.signalSchemaChange(new OE.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let n;for(let u of r)n=u.drop();let i,o=0,c=t.length;if(await new Promise(u=>setImmediate(u)),c>0){let u=0;for(let{key:_,value:l,version:d}of e.primaryStore.getRange({start:t[0].lastIndexedKey,lazy:c<4,versions:!0,snapshot:!1}))if(l){if(u++,n=e.primaryStore.ifVersion(_,d,()=>{for(let f=0;f<c;f++){let E=t[f],h=E.name,p=(0,HH.getIndexedValues)(l[h]);if(p)for(let S=0,R=p.length;S<R;S++)E.dbi.put(p[S],_)}}),n.then(()=>u--,f=>{u--,As.error(f)}),Rl.workerData&&Rl.workerData.restartNumber!==xH.restartNumber&&(i=!0),++o%100===0||i){for(let f of t)f.lastIndexedKey=_,e.dbisDB.put(f.key,f);if(i)return}u>Use?await n:u>Mse&&await new Promise(f=>setImmediate(f))}for(let _ of t)delete _.lastIndexedKey,delete _.indexingPID,_.dbi.isIndexing=!1,n=e.dbisDB.put(_.key,_)}await n,await AE.signalSchemaChange(new OE.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){As.error("Error in indexing",s)}}function vse({table:e,database:t}){let r=Wc({database:t,table:e}),s=[],n=r.dbisDb;for(let i of n.getKeys({start:e+"/",end:e+"0"}))s.push(n.remove(i));return Promise.all(s)}function aR(e){HR.push(e)}var Zt,gE,RE,et,Kr,Fa,bo,PR,Wr,BH,vR,HH,AE,OE,Rl,As,xH,BR,NE,Cr,tt,qa,HR,bE,Ni,Ga,Use,Mse,pe=ge(()=>{Zt=M(j()),gE=M(Et()),RE=require("lmdb"),et=require("path"),Kr=require("fs"),Fa=M(Ke());xf();bo=M(u_()),PR=M(__()),Wr=M(I()),BH=M(require("fs-extra")),vR=require("../index"),HH=M(Ir()),AE=M(On()),OE=M(Us()),Rl=require("worker_threads"),As=M(G()),xH=M(Qe());Po();pc();BR="data",NE=Symbol("defined-tables");(0,Zt.initSync)();Cr=Object.create(null),tt=Object.create(null);(0,vR._assignPackageExport)("databases",tt);(0,vR._assignPackageExport)("tables",Cr);qa=Symbol.for("next-table-id"),HR=[],Ni=new Map;a(Dse,"getTables");a(Ps,"getDatabases");a(Lse,"resetDatabases");a(gl,"readMetaDb");a(qH,"ensureDB");a(FH,"setTable");a(Wc,"database");a(vp,"dropDatabase");a(ut,"table");Use=1e3,Mse=10;a(Pse,"runIndexing");a(vse,"dropTableMeta");a(aR,"onUpdatedTable")});var W=T((qme,ex)=>{"use strict";var yi=require("path"),YH=require("fs-extra"),Or=G(),GH=require("fs-extra"),yE=require("os"),Bse=require("net"),Hse=require("recursive-iterator"),at=I(),xse=xA(),kH=require("papaparse"),IE=require("moment"),{inspect:qse}=require("util"),VH=require("is-number"),xme=require("lodash"),Fse=require("minimist"),Gse=require("https"),kse=require("http"),{hdb_errors:wE}=Z(),Vse=/^((\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)))$/,KH=require("util").promisify(setTimeout),$se=100,Yse=5,Kse="",Wse=4,$H={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};ex.exports={isEmpty:Qr,isEmptyOrZeroLength:En,arrayHasEmptyValues:Jse,arrayHasEmptyOrZeroLengthValues:Xse,buildFolderPath:jse,isBoolean:WH,errorizeMessage:Qse,stripFileExtension:ene,autoCast:tne,autoCastJSON:QH,autoCastJSONDeep:qR,removeDir:rne,compareVersions:sne,isCompatibleDataVersion:nne,escapeRawValue:ine,unescapeValue:one,stringifyProps:ane,timeoutPromise:une,isClusterOperation:_ne,getClusterUser:fne,checkGlobalSchemaTable:dne,getHomeDir:JH,getPropsFilePath:cne,promisifyPapaParse:Ene,removeBOM:XH,createEventPromise:hne,checkProcessRunning:mne,checkSchemaTableExist:pne,checkSchemaExists:jH,checkTableExists:ZH,getStartOfTomorrowInSeconds:Sne,getLimitKey:Tne,isObject:Zse,isNotEmptyAndHasValue:zse,autoCasterIsNumberCheck:zH,backtickASTSchemaItems:gne,isPortTaken:lne,createForkArgs:Rne,autoCastBoolean:Ane,async_set_timeout:KH,getTableHashAttribute:One,doesSchemaExist:bne,doesTableExist:Nne,stringifyObj:yne,ms_to_time:Ine,changeExtension:wne,getEnvCliRootPath:FR,noBootFile:Cne,httpRequest:Dne,transformReq:Lne,convertToMS:Une,PACKAGE_ROOT:at.PACKAGE_ROOT};function Qse(e){return e instanceof Error?e:new Error(e)}a(Qse,"errorizeMessage");function Qr(e){return e==null}a(Qr,"isEmpty");function zse(e){return!Qr(e)&&(e||e===0||e===""||WH(e))}a(zse,"isNotEmptyAndHasValue");function En(e){return Qr(e)||e.length===0||e.size===0}a(En,"isEmptyOrZeroLength");function Jse(e){if(Qr(e))return!0;for(let t=0;t<e.length;t++)if(Qr(e[t]))return!0;return!1}a(Jse,"arrayHasEmptyValues");function Xse(e){if(En(e))return!0;for(let t=0;t<e.length;t++)if(En(e[t]))return!0;return!1}a(Xse,"arrayHasEmptyOrZeroLengthValues");function jse(...e){try{return e.join(yi.sep)}catch{console.error(e)}}a(jse,"buildFolderPath");function WH(e){return Qr(e)?!1:e===!0||e===!1}a(WH,"isBoolean");function Zse(e){return Qr(e)?!1:typeof e=="object"}a(Zse,"isObject");function ene(e){return En(e)?Kse:e.slice(0,-Wse)}a(ene,"stripFileExtension");function tne(e){return Qr(e)||e===""||typeof e!="string"?e:$H[e]!==void 0?$H[e]:zH(e)===!0?Number(e):Vse.test(e)?new Date(e):e}a(tne,"autoCast");function QH(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(QH,"autoCastJSON");function qR(e){if(e&&typeof e=="object"){if(Array.isArray(e))for(let t=0,r=e.length;t<r;t++){let s=e[t],n=qR(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=qR(r);s!==r&&(e[t]=s)}return e}else return QH(e)}a(qR,"autoCastJSONDeep");function zH(e){if(e.startsWith("0.")&&VH(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&VH(e))}a(zH,"autoCasterIsNumberCheck");async function rne(e){if(En(e))throw new Error(`Directory path: ${e} does not exist`);try{await GH.emptyDir(e),await GH.remove(e)}catch(t){throw Or.error(`Error removing files in ${e} -- ${t}`),t}}a(rne,"removeDir");function sne(e,t){if(En(e)){Or.info("Invalid current version sent as parameter.");return}if(En(t)){Or.info("Invalid upgrade version sent as parameter.");return}let r,s=/(\.0+)+$/,n=e.version?e.version:e,i=t.version?t.version:t,o=n.replace(s,"").split("."),c=i.replace(s,"").split("."),u=Math.min(o.length,c.length);for(let _=0;_<u;_++)if(r=parseInt(o[_],10)-parseInt(c[_],10),r)return r;return o.length-c.length}a(sne,"compareVersions");function nne(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(nne,"isCompatibleDataVersion");function ine(e){if(Qr(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(ine,"escapeRawValue");function one(e){if(Qr(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(one,"unescapeValue");function ane(e,t){if(Qr(e))return Or.info("Properties object is null"),"";let r="";return e.each(function(s,n){try{if(t&&t[s]){let i=t[s];for(let o of i)r+=";"+o+yE.EOL}!En(s)&&s[0]===";"?r+=" "+s+n+yE.EOL:En(s)||(r+=s+"="+n+yE.EOL)}catch{Or.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(ane,"stringifyProps");function JH(){let e;try{e=yE.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(JH,"getHomeDir");function cne(){let e=yi.join(JH(),at.HDB_HOME_DIR_NAME,at.BOOT_PROPS_FILE_NAME);return YH.existsSync(e)||(e=yi.join(__dirname,"../","hdb_boot_properties.file")),e}a(cne,"getPropsFilePath");function une(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(une,"timeoutPromise");async function lne(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=Bse.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(lne,"isPortTaken");function _ne(e){try{return at.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){Or.error(`Error checking operation against cluster ops ${t}`)}return!1}a(_ne,"isClusterOperation");function dne(e,t){let r=(pe(),te(Fe)).getDatabases();if(!r[e])return wE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return wE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(dne,"checkGlobalSchemaTable");function fne(e,t){if(Qr(t)){Or.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Qr(e)||En(e)){Or.warn("No users to search.");return}let r;try{let s=e.get(t);s&&s.role.permission.cluster_user===!0&&s.active===!0&&(r=s)}catch(s){Or.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){Or.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(fne,"getClusterUser");function Ene(){kH.parsePromise=function(e,t,r){return new Promise(function(s,n){kH.parse(e,{header:!0,transformHeader:XH,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}a(Ene,"promisifyPapaParse");function XH(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(XH,"removeBOM");function hne(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;Or.info(`Got cluster status event response: ${qse(n)}`);try{i.cancel()}catch{Or.error("Error trying to cancel timeout.")}s(n)})})}a(hne,"createEventPromise");async function mne(e){let t=!0,r=0;do await KH($se*r++),(await xse.findPs(e)).length>0&&(t=!1);while(t&&r<Yse);if(t)throw new Error(`process ${e} was not started`)}a(mne,"checkProcessRunning");function pne(e,t){let r=jH(e);if(r)return r;let s=ZH(e,t);if(s)return s}a(pne,"checkSchemaTableExist");function jH(e){let{getDatabases:t}=(pe(),te(Fe));if(!t()[e])return wE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(jH,"checkSchemaExists");function ZH(e,t){let{getDatabases:r}=(pe(),te(Fe));if(!r()[e][t])return wE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(ZH,"checkTableExists");function Sne(){let e=IE().utc().add(1,at.MOMENT_DAYS_TAG).startOf(at.MOMENT_DAYS_TAG).unix(),t=IE().utc().unix();return e-t}a(Sne,"getStartOfTomorrowInSeconds");function Tne(){return IE().utc().format("DD-MM-YYYY")}a(Tne,"getLimitKey");function gne(e){try{let t=new Hse(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){Or.error("Got an error back ticking items."),Or.error(t)}}a(gne,"backtickASTSchemaItems");function Rne(e){return[e]}a(Rne,"createForkArgs");function Ane(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(Ane,"autoCastBoolean");function One(e,t){let{getDatabases:r}=(pe(),te(Fe)),s=r()[e]?.[t];return s?.primaryKey||s?.hash_attribute}a(One,"getTableHashAttribute");function bne(e){let{getDatabases:t}=(pe(),te(Fe));return t()[e]!==void 0}a(bne,"doesSchemaExist");function Nne(e,t){let{getDatabases:r}=(pe(),te(Fe));return r()[e]?.[t]!==void 0}a(Nne,"doesTableExist");function yne(e){try{return JSON.stringify(e)}catch{return e}}a(yne,"stringifyObj");function Ine(e){let t=IE.duration(e),r=t.seconds()>0?t.seconds()+"s":"",s=t.minutes()>0?t.minutes()+"m ":"",n=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+n+s+r}a(Ine,"ms_to_time");function wne(e,t){let r=yi.basename(e,yi.extname(e));return yi.join(yi.dirname(e),r+t)}a(wne,"changeExtension");function FR(){if(process.env[at.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[at.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=Fse(process.argv);if(e[at.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[at.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(FR,"getEnvCliRootPath");var xR;function Cne(){if(xR)return xR;let e=FR();FR()&&YH.pathExistsSync(yi.join(e,at.HDB_CONFIG_FILE))&&(xR=!0)}a(Cne,"noBootFile");function Dne(e,t){let r;return e.protocol==="http:"?r=kse:r=Gse,new Promise((s,n)=>{let i=r.request(e,o=>{o.setEncoding("utf8");let c={body:"",headers:o.headers};o.on("data",u=>{c.body+=u}),o.on("end",()=>{s(c)})});i.on("error",o=>{n(o)}),i.write(JSON.stringify(t)),i.end()})}a(Dne,"httpRequest");function Lne(e){if(!e.schema&&!e.database){e.schema=at.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(Lne,"transformReq");function Une(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(Une,"convertToMS")});var j=T((Gme,nx)=>{"use strict";var GR=require("fs-extra"),ks=require("path"),tx=require("os"),Mne=require("properties-reader"),Ol=G(),Al=W(),ie=I(),CE=vr(),Pne="Error initializing environment manager",DE="BOOT_PROPS_FILE_PATH",rx=!1,vne={[ie.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[ie.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[ie.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},kn={};nx.exports={BOOT_PROPS_FILE_PATH:DE,getHdbBasePath:Bne,setHdbBasePath:Hne,get:sx,initSync:qne,setProperty:Se,initTestEnvironment:Fne};function Bne(){return kn[ie.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(Bne,"getHdbBasePath");function Hne(e){kn[ie.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(Hne,"setHdbBasePath");function sx(e){let t=CE.getConfigValue(e);return t===void 0?kn[e]:t}a(sx,"get");function Se(e,t){vne[e]&&(kn[e]=t),CE.updateConfigObject(e,t)}a(Se,"setProperty");function xne(){let e;try{e=Al.getPropsFilePath(),GR.accessSync(e,GR.constants.F_OK|GR.constants.R_OK),rx=!0;let t=Mne(e);return kn[ie.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(ie.HDB_SETTINGS_NAMES.INSTALL_USER),kn[ie.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(ie.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),kn[DE]=e,!0}catch{return Ol.trace(`Environment manager found no properties file at ${e}`),!1}}a(xne,"doesPropFileExist");function qne(e=!1){try{(rx||xne()||Al.noBootFile())&&(CE.initConfig(e),kn[ie.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=CE.getConfigValue(ie.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Ol.error(Pne),Ol.error(t),console.error(t),process.exit(1)}}a(qne,"initSync");function Fne(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,u=ks.join(__dirname,"../../","unitTests");kn[DE]=ks.join(u,"hdb_boot_properties.file"),Se(ie.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,ks.join(u,"settings.test")),Se(ie.HDB_SETTINGS_NAMES.INSTALL_USER,tx.userInfo()?tx.userInfo().username:void 0),Se(ie.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,ks.join(u,"envDir","utility","keys","privateKey.pem")),Se(ie.HDB_SETTINGS_NAMES.CERT_KEY,ks.join(u,"envDir","utility","keys","certificate.pem")),Se(ie.CONFIG_PARAMS.TLS_PRIVATEKEY,ks.join(u,"envDir","utility","keys","privateKey.pem")),Se(ie.CONFIG_PARAMS.TLS_CERTIFICATE,ks.join(u,"envDir","utility","keys","certificate.pem")),Se(ie.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Se(ie.HDB_SETTINGS_NAMES.LOG_PATH_KEY,ks.join(u,"envDir","log")),Se(ie.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Se(ie.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Se(ie.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Se(ie.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,ks.join(u,"envDir")),Se(ie.CONFIG_PARAMS.STORAGE_PATH,ks.join(u,"envDir")),n&&(Se(ie.CONFIG_PARAMS.HTTP_SECUREPORT,sx(ie.CONFIG_PARAMS.HTTP_PORT)),Se(ie.CONFIG_PARAMS.HTTP_PORT,null)),Se(ie.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!n),Se(ie.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Se(ie.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Al.isEmpty(i)?!1:i),Se(ie.CONFIG_PARAMS.HTTP_CORS,Al.isEmpty(i)?!1:i),Se(ie.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Se(ie.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Se(ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Se(ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Se(ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,ks.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Se(ie.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Al.isEmpty(c)?!1:c),o&&(Se("CORS_ACCESSLIST",o),Se(ie.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),s&&(Se(ie.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),Se(ie.CONFIG_PARAMS.HTTP_TIMEOUT,s)),t&&(Se(ie.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Se(ie.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(Se(ie.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Se(ie.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${DE}. Please check your boot props and settings files`;Ol.fatal(r),Ol.error(t)}}a(Fne,"initTestEnvironment")});var ux=T((Vme,cx)=>{"use strict";var ax=require("joi"),{string:bl,boolean:ix,array:Gne}=ax.types(),ox=I(),kne=ze();cx.exports=Vne;function Vne(e){let t=ax.object({operation:bl.valid(ox.OPERATIONS_ENUM.ADD_NODE,ox.OPERATIONS_ENUM.UPDATE_NODE).required(),node_name:bl.required(),subscriptions:Gne.items({schema:bl.required(),table:bl.optional(),hash_attribute:bl.optional(),subscribe:ix.required(),publish:ix.required()}).min(1).required()});return kne.validateBySchema(e,t)}a(Vne,"updateRemoteSourceValidator")});var Nl=T((Yme,lx)=>{"use strict";var kR=class{static{a(this,"UpdateRemoteResponseObject")}constructor(t,r,s=void 0){this.status=t,this.message=r,this.system_info=s}};lx.exports=kR});var hx=T((Wme,Ex)=>{"use strict";var $ne=ux(),Vn=G(),VR=Ge(),_x=I(),$R=ds(),YR=rt(),dx=au(),Yne=X_(),{Node:Kne,NodeSubscription:fx}=fi(),KR=Nl(),WR=W(),Wne=j(),{cloneDeep:Qne}=require("lodash"),{broadcast:zne}=Qe();Ex.exports=Jne;async function Jne(e){try{let t=$ne(e);if(t)return Vn.error(`Validation error in updateRemoteSource: ${t.message}`),new KR(VR.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,t.message);let{subscriptions:r,node_name:s,system_info:n}=e,i=[],o=Qne(await $R.getNodeRecord(s)),c=!WR.isEmptyOrZeroLength(o);o=c?o[0]:o,c&&Vn.trace(`Existing record found for ${s}, updating records subscriptions`);for(let _=0,l=r.length;_<l;_++){let d=r[_],f=d.schema,E=d.table;if(!WR.doesSchemaExist(f)){Vn.trace(`updateRemoteSource creating schema: ${f}`);try{await dx.createSchema({operation:"create_schema",schema:f})}catch(h){Vn.error(h)}}if(E&&!WR.doesTableExist(f,E)){let h=new Yne(f,E,d.hash_attribute);d.attributes&&(h.attributes=d.attributes),Vn.trace(`updateRemoteSource creating table: ${E} in schema: ${f} with attributes: ${JSON.stringify(d.attributes)}`);try{await dx.createTable(h)}catch(p){Vn.error(p)}Vn.trace(`Creating local stream for ${f}.${E}`),await YR.createLocalTableStream(f,E)}if(f===_x.SYSTEM_SCHEMA_NAME&&await YR.createLocalTableStream(f,E),await YR.updateWorkStream(d,s),c){let h=!1;for(let p=0,S=o.subscriptions.length;p<S;p++){let R=o.subscriptions[p];if(R.schema===f&&R.table===E){R.publish=d.publish,R.subscribe=d.subscribe,h=!0;break}}h||o.subscriptions.push(new fx(f,E,d.publish,d.subscribe))}else i.push(new fx(f,E,d.publish,d.subscribe))}c||(o=new Kne(s,i,void 0),Vn.trace(`No record found for ${s}, creating a new one`));let u=Object.create({});return Object.assign(u,o),u.system_info=n,await $R.upsertNodeRecord(u),zne({type:"nats_update"}),new KR(VR.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,`Node ${Wne.get(_x.CONFIG_PARAMS.CLUSTERING_NODENAME)} successfully updated remote source`,await $R.getSystemInfo())}catch(t){Vn.error(t);let r=t.message?t.message:t;return new KR(VR.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(Jne,"updateRemoteSource")});var Tx=T((zme,Sx)=>{"use strict";var px=require("joi"),{string:mx}=px.types(),Xne=I(),jne=ze();Sx.exports=Zne;function Zne(e){let t=px.object({operation:mx.valid(Xne.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:mx.required()});return jne.validateBySchema(e,t)}a(Zne,"removeRemoteSourceValidator")});var Rx=T((Xme,gx)=>{"use strict";var eie=Tx(),LE=G(),UE=Ge(),QR=I(),tie=ds(),rie=W(),sie=rt(),nie=j(),ME=Nl(),{NodeSubscription:iie}=fi(),oie=ea(),aie=ti(),{broadcast:cie}=Qe(),uie=nie.get(QR.CONFIG_PARAMS.CLUSTERING_NODENAME);gx.exports=lie;async function lie(e){try{let t=eie(e);if(t)return LE.error(`Validation error in removeRemoteSource: ${t.message}`),new ME(UE.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,t.message);let r=e.node_name,s=await tie.getNodeRecord(r);if(rie.isEmptyOrZeroLength(s)){let i=`No record found for node '${r}'`;return LE.error(i),new ME(UE.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,i)}s=s[0];for(let i=0,o=s.subscriptions.length;i<o;i++){let c=s.subscriptions[i];LE.trace(`remove remote source removing subscription: ${c.schema}.${c.table} for node: ${r}`);let u=new iie(c.schema,c.table,!1,!1);await sie.updateWorkStream(u,r)}let n=new oie(QR.SYSTEM_SCHEMA_NAME,QR.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await aie.deleteRecord(n),cie({type:"nats_update"}),new ME(UE.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,`Node ${uie} successfully removed node '${r}'.`)}catch(t){LE.error(t);let r=t.message?t.message:t;return new ME(UE.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(lie,"removeRemoteSource")});var yx=T((Zme,Nx)=>{"use strict";var PE=G(),vE=I(),Ax=Ge(),Ox=j(),_ie=W(),bx=Nl(),die=ds(),fie=Rd(),Eie=Ur();Nx.exports=hie;async function hie(e){try{PE.trace("getRemoteSourceConfig called");let t=process.uptime()*1e3,r=_ie.ms_to_time(t),s=new mie(Ox.get(vE.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),Ox.get(vE.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT),r,await die.getSystemInfo());try{let n={name:e.node_name,system_info:e.system_info},i=new fie(vE.SYSTEM_SCHEMA_NAME,vE.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[n]);await Eie.update(i)}catch(n){PE.error("Get remote config encountered an error updating system info for node:",e.node_name,n)}return PE.trace("getRemoteSourceConfig response:",s),new bx(Ax.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,s)}catch(t){PE.error(t);let r=t.message?t.message:t;return new bx(Ax.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(hie,"getRemoteSourceConfig");function mie(e,t,r,s){this.uptime=r,this.ports={clustering:e,operations_api:t},this.system_info=s}a(mie,"ConfigResponseObject")});var Dx=T((tpe,Cx)=>{"use strict";var Ix=j();Ix.initSync();var wx=rt(),yl=G(),ka=I(),zR=Ge(),pie=hx(),Sie=Rx(),Tie=yx(),gie=Nl(),{encode:Rie,decode:Aie}=require("msgpackr"),Oie=An(),bie=jn(),Nie=require("util"),yie=I(),{isMainThread:Iie,parentPort:wie}=require("worker_threads");Qe();var Cie=Nie.promisify(Oie.setSchemaDataToGlobal),JR=Ix.get(ka.CONFIG_PARAMS.CLUSTERING_NODENAME);Cx.exports=Die;async function Die(){try{yl.notify("Starting reply service."),await Cie();let e=await wx.getConnection(),t=`${JR}.__request__`,r=e.subscribe(t,{queue:JR});await Lie(r)}catch(e){yl.error(e)}}a(Die,"initialize");async function Lie(e){for await(let t of e){let r=Aie(t.data),s;switch(r.operation){case ka.OPERATIONS_ENUM.ADD_NODE:case ka.OPERATIONS_ENUM.UPDATE_NODE:s=await pie(r);break;case ka.OPERATIONS_ENUM.REMOVE_NODE:s=await Sie(r);break;case ka.OPERATIONS_ENUM.CLUSTER_STATUS:s=await Tie(r);break;case ka.OPERATIONS_ENUM.DESCRIBE_ALL:s=await Uie();break;default:let n=`node '${JR}' reply service received unrecognized request operation`;yl.error(n),s=new gie(zR.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,n)}yl.trace(s),t.respond(Rie(s))}}a(Lie,"handleRequest");async function Uie(){try{return{status:zR.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,message:await bie.describeAll()}}catch(e){return yl.error(e),{status:zR.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,message:e.message}}}a(Uie,"getRemoteDescribeAll");Iie||wie.on("message",async e=>{let{type:t}=e;t===yie.ITC_EVENT_TYPES.SHUTDOWN&&wx.closeConnection()})});var Mie=Dx();(async()=>{try{await Mie()}catch(e){console.error("Error launching Nats reply service."),console.error(e)}})();
|
|
26
|
+
`},compressible:!1,q:.8});$t.set("application/x-www-form-urlencoded",{deserialize(e){let t={};for(let[r,s]of new URLSearchParams(e))if(t.hasOwnProperty(r)){let n=t[r];Array.isArray(n)?n.push(s):t.key=[n,s]}else t[r]=s},serialize(e){let t=new URLSearchParams;for(let r in e)t.set(r,e);return t.toString()}});dv={type:"application/json",serializeStream:Ec,serialize:Qu,deserialize:P7,q:.8};$t.set("*/*",dv);$t.set("",dv);a(P7,"tryJSONParse");a(mg,"registerContentHandlers");v7=require("fastify-plugin"),B7=v7(function(e,t,r){e.addHook("preSerialization",async(s,n)=>{if(n.raw.getHeader("content-type"))return;let{serializer:o,type:c}=Rf(s.raw);n.type(c),n.serializer(o.serializeStream||o.serialize)}),r()},{name:"content-type-negotiation"});a(Rf,"findBestSerializer");cv=dg.default.get(fg.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(Af,"serialize");a(Ti,"serializeMessage");a(H7,"streamToBuffer");a(mo,"getDeserializer");a(uv,"deserializerUnknownType");a(x7,"transformIterable")});function ju(e,t,r,s,n,i){let o=e[0]??e.attribute,c=e[1]??e.value,u=e.comparator;if(Array.isArray(o)){let R=o[0],I=vn(s.attributes,R);if(I.relationship){if(o.length<2)throw new po.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let w=I.definition?.tableClass||I.elements?.definition?.tableClass,B=new Map,K=ju({attribute:o.length>2?o.slice(1):o[1],value:c,comparator:u},t,r,w,n,B);if(I.relationship.to){i[o[0]]=B;let q=!!vn(w.attributes,I.relationship.to)?.elements;K=k7(K,I,w.primaryStore,q,B)}if(I.relationship.from){let q=a(P=>ju({attribute:I.relationship.from,value:P},t,r,s,n,B),"searchEntry");I.elements?(i[o[0]]=B,K=V7(K,I,w.primaryStore,B,q)):K=K.flatMap(q)}return K}else if(o.length===1)o=o[0];else throw new po.ClientError("Unable to query by attribute "+JSON.stringify(o))}let _,l,d,f;c instanceof Date&&(c=c.getTime());let E;switch(hv[u]||u){case"lt":_=!0,l=c;break;case"le":_=!0,l=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,l=c.slice(0),l[l.length-1]=un.MAXIMUM_KEY;break;case"starts_with":_=c.toString(),l=c+"\uFFFF";break;case"between":_=c[0],_ instanceof Date&&(_=_.getTime()),l=c[1],l instanceof Date&&(l=l.getTime()),d=!0;break;case je.SEARCH_TYPES.EQUALS:case void 0:_=c,l=c,d=!0;break;case"ne":if(c===null){_=c,f=!0;break}case"contains":case"ends_with":E=!0;break;default:throw new po.ClientError(`Unknown query comparator "${u}"`)}if(r){let R=_;_=l,l=R,R=!f,f=!d,d=R}let h=o===s.primaryKey||o==null,p=h?s.primaryStore:s.indices[o];if(!p||p.isIndexing||E||c===null&&!p.indexNulls){if(!n)throw new po.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 R=Zu(e);if(!R)throw new po.ClientError(`Unknown search operator ${e.comparator}`);return s.primaryStore.getRange({start:!0,transaction:t,reverse:r}).map(({key:I,value:w})=>new Promise((B,K)=>setImmediate(()=>{try{B(w&&R(w)?I:pg.SKIP)}catch(q){K(q)}})))}let S={start:_,end:l,inclusiveEnd:d,exclusiveStart:f,values:!0,versions:h,transaction:t,reverse:r};if(h){let R=p.getRange(S).map(I=>I.value==null?pg.SKIP:I);return R.hasEntries=!0,R}else return p.getRange(S).map(({value:R})=>R)}function vn(e,t){if(Array.isArray(t))if(t.length>1){let r=vn(e,t[0]),s=(r?.definition?.tableClass||r?.elements.definition?.tableClass)?.attributes;return s?vn(s,t.slice(1)):void 0}else t=t.toString();else typeof t!="string"&&(t=t.toString());return e.find(r=>r.name===t)}function k7(e,t,r,s,n){return new e.constructor({[Symbol.iterator](){let i,o;return{next(){if(!i){let u=t.relationship.to;return(async()=>{let _=a((d,f)=>{let E=d;Array.isArray(d)&&(E=Oi(d),o=!0);let h=n.get(E);h?h.push(f):n.set(E,h=[f]),d!==E&&(h.key=d)},"add_entry"),l=0;for await(let d of e){let f=d.value??r.get(d.key??d),E=f?.[u];if(E!=null&&!n.filters?.some(h=>!h(f))){if(s)for(let h=0;h<E.length;h++)_(E[h],d);else _(E,d);l++>100&&(await new Promise(setImmediate),l=0)}}return i=(o?n:n.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 V7(e,t,r,s,n){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 u=new Map;s.fromRecord=l=>l[t.relationship.from]?.filter?.(d=>u.has(Oi(d)));let _=0;for await(let l of e){if(s.filters){let d=r.get(l);if(s.filters.some(f=>!f(d)))continue}u.set(Oi(l),l),_++>100&&(await new Promise(setImmediate),_=0)}return i=u.values()[Symbol.iterator](),this.next()})();do{let u=i.next();return u.done?u:(o=n(u.value)[Symbol.iterator](),this.next())}while(!0)},return(){return o?.return?.()},throw(){return o?.throw?.()}}}})}function Zu(e,t,r,s){if(e.conditions){let c=e.conditions.map(Zu);return e.operator==="or"?u=>c.some(_=>_(u)):u=>c.every(_=>_(u))}let n=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],u=vn(t.attributes,c),_=u.definition?.tableClass||u.elements.definition?.tableClass,l=s?.[c],d=Zu({attribute:i.length>2?i.slice(1):i[1],value:o,comparator:n},t,r,l?.[c]?.joined);if(!d)return;if(l){l.filters||(l.filters=[]),l.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()),hv[n]||n){case je.SEARCH_TYPES.EQUALS:case void 0:return cn(i,c=>c===o);case je.SEARCH_TYPES.CONTAINS:return cn(i,c=>c?.toString().includes(o));case je.SEARCH_TYPES.ENDS_WITH:case je.SEARCH_TYPES._ENDS_WITH:return cn(i,c=>c?.toString().endsWith(o));case je.SEARCH_TYPES.STARTS_WITH:case je.SEARCH_TYPES._STARTS_WITH:return cn(i,c=>typeof c=="string"&&c.startsWith(o));case je.SEARCH_TYPES.BETWEEN:return o[0]instanceof Date&&(o[0]=o[0].getTime()),o[1]instanceof Date&&(o[1]=o[1].getTime()),cn(i,c=>(0,un.compareKeys)(c,o[0])>=0&&(0,un.compareKeys)(c,o[1])<=0);case"gt":case je.SEARCH_TYPES.GREATER_THAN:case je.SEARCH_TYPES._GREATER_THAN:return cn(i,c=>(0,un.compareKeys)(c,o)>0);case"ge":case je.SEARCH_TYPES.GREATER_THAN_EQUAL:case je.SEARCH_TYPES._GREATER_THAN_EQUAL:return cn(i,c=>(0,un.compareKeys)(c,o)>=0);case je.SEARCH_TYPES.LESS_THAN:case"lt":case je.SEARCH_TYPES._LESS_THAN:return cn(i,c=>(0,un.compareKeys)(c,o)<0);case"le":case je.SEARCH_TYPES.LESS_THAN_EQUAL:case je.SEARCH_TYPES._LESS_THAN_EQUAL:return cn(i,c=>(0,un.compareKeys)(c,o)<=0);case"ne":return cn(i,c=>(0,un.compareKeys)(c,o)!==0);default:throw new po.ClientError(`Unknown query comparator "${n}"`)}}function cn(e,t){return r=>{let s=r[e];return typeof s!="object"||!s?t(s):Array.isArray(s)?s.some(t):s instanceof Date?t(s.getTime()):!1}}function Sg(e){return t=>{if(t.estimated_count===void 0){if(t.conditions){let s;if(t.operator==="or"){s=0;for(let n of t.conditions)s+=n.estimated_count}else{s=1/0;for(let n of t.conditions)s=1/(1/s+1/n.estimated_count)}return t.estimated_count=s,t.estimated_count}let r=t.comparator||t.search_type;if(r===je.SEARCH_TYPES.EQUALS){let s=t[0]??t.attribute;if(s==null||s===e.primaryKey)t.estimated_count=1;else if(Array.isArray(s)){let n=vn(e.attributes,s[0]),i=n.definition?.tableClass||n.elements.definition?.tableClass,o=Sg(i)({value:t.value,attribute:s.length>2?s.slice(1):s[1],comparator:"equals"});t.estimated_count=o*4*(e.indices[n.relationship.from]||e.primaryStore).getStats().entryCount/(i.primaryStore.getStats().entryCount||1)}else{let n=e.indices[s];t.estimated_count=n?n.getValuesCount(t[1]??t.value):1/0}}else r===je.SEARCH_TYPES.CONTAINS||r===je.SEARCH_TYPES.ENDS_WITH||r==="ne"?t.value===null&&r==="ne"?t.estimated_count=Ev:t.estimated_count=1/0:r===je.SEARCH_TYPES.STARTS_WITH||r==="prefix"?t.estimated_count=Ev:r===je.SEARCH_TYPES.BETWEEN?t.estimated_count=F7:t.estimated_count=q7;typeof t.descending=="boolean"&&(t.estimated_count/=4)}return t.estimated_count}}function Of(e){if(e)if(Ai=e,ya.lastIndex=0,$7.test(e))try{let t=Ju(new Ia,"");if(gr!==Ai.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 '${Ai}'`,t}else{let t=new URLSearchParams(e);return t.conditions=t,t}}function Ju(e,t){let r=ya,s,n,i,o,c;for(;s=r.exec(Ai);){gr=r.lastIndex;let[,u,_]=s;if(o){if(u)throw new SyntaxError(`expected operator, but encountered '${u}'`);o=!1,c=!1}else c=!0;let l;switch(_){case"=":if(n)if(u.length<=2)i=u;else throw new SyntaxError(`invalid FIQL operator ${u}`);else{if(i="equals",!u)throw new SyntaxError("attribute must be specified before equality comparator");n=Xu(u)}break;case"!=":case"<":case"<=":case">":case">=":if(i=G7[_],!u)throw new SyntaxError(`attribute must be specified before comparator ${_}`);n=Xu(u);break;case"|":e.operator="or";case"":case void 0:case"&":if(n==null){if(n===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:n,value:decodeURIComponent(u)})}n=void 0;break;case",":if(e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");e.push(Xu(u)),n=void 0;break;case"(":ya.lastIndex=gr;let d=Ju(u?[]:new Ia,")");switch(u){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=mv(d);break;default:throw new SyntaxError(`unknown query function call ${u}`)}Ai[gr]===","?r.lastIndex=++gr:o=!0,n=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");ya.lastIndex=gr,l=Ju([],"}"),l.name=u,e.push(l),Ai[gr]===","?r.lastIndex=++gr:o=!0;break;case"[":ya.lastIndex=gr,u?(l=Ju(new Ia,"]"),l.name=u):l=Ju(e.conditions?new Ia:[],"]"),e.conditions?(e.conditions.push(l),n=null):e.push(l),Ai[gr]===","?r.lastIndex=++gr:o=!0;break;case")":case"]":case"}":if(t===_[0]){if(e.conditions){if(n)e.conditions.push({comparator:i||"equals",attribute:n,value:decodeURIComponent(u)});else if(u)throw new SyntaxError("no attribute or comparison specified")}else(u||e.length>0&&c)&&e.push(Xu(u));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=n?Y7:ya,r.lastIndex=gr),gr===Ai.length)return e}if(t)throw new SyntaxError(`expected '${t}', but encountered end of string`)}function Xu(e){return e.indexOf(".")>-1?e.split(".").map(Xu):decodeURIComponent(e)}function mv(e){let t=pv(e[0]);return e.length>1&&(t.next=mv(e.slice(1))),t}function pv(e){if(Array.isArray(e)){let t=pv(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 Oi(e){return Array.isArray(e)?e.join("\0"):e}var po,je,un,pg,q7,F7,Ev,G7,hv,$7,ya,Y7,gr,Ai,Ia,bf=Ae(()=>{po=v(Z()),je=v(mt()),un=require("ordered-binary"),pg=require("lmdb"),q7=1e8,F7=15e6,Ev=1e7,G7={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne"};a(ju,"searchByIndex");a(vn,"findAttribute");a(k7,"joinTo");a(V7,"joinFrom");hv={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(Zu,"filterByType");a(cn,"attributeComparator");a(Sg,"estimateCondition");$7=/[()[\]|!<>.]|(=\w+=)/,ya=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,Y7=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;a(Of,"parseQuery");a(Ju,"parseBlock");a(Xu,"decodeProperty");a(mv,"toSortObject");a(pv,"toSortEntry");Ia=class{static{a(this,"Query")}constructor(){this.conditions=[]}[Symbol.iterator](){return this.conditions[Symbol.iterator]()}get(t){for(let r=0;r<this.conditions.length;r++){let s=this.conditions[r];if(s.attribute===t)return s.value}}};a(Oi,"flattenKey")});var Nf={};$e(Nf,{start:()=>Q7});async function W7(e,t){let r=e.headers.asObject,s=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&Of(e);let n=new Si;try{e.responseHeaders=n;let i=e.url.slice(1),o=gg.getMatch(i);if(!o)return t(e);e.handlerPath=o.path;let c={url:o.relativeURL,async:!0},u=o.Resource,_=r["cache-control"];if(_){_=_.toLowerCase();let p=_.match(/max-age=(\d+)/)?.[1];p&&(e.expiresAt=p*1e3+Date.now()),_.includes("only-if-cached")&&(e.onlyIfCached=!0),_.includes("no-cache")&&(e.noCache=!0),_.includes("no-store")&&(e.noCacheStore=!0),_.includes("stale-if-error")&&(e.staleIfError=!0),_.includes("must-revalidate")&&(e.mustRevalidate=!0)}let l=await Xe(e,()=>{if(s==="POST"||s==="PUT"||s==="PATCH"||s==="QUERY")try{e.data=mo(r["content-type"],!0)(e.body)}catch(p){throw new tl.ClientError(p,400)}switch(e.authorize=!0,s){case"GET":case"HEAD":return u.get(c,e);case"POST":return u.post(c,e.data,e);case"PUT":return u.put(c,e.data,e);case"DELETE":return u.delete(c,e);case"PATCH":return u.patch(c,e.data,e);case"OPTIONS":n.setIfNone("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return u.connect(c,null,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return u.query(c,e.data,e);case"COPY":return u.copy(c,r.destination,e);case"MOVE":return u.move(c,r.destination,e);case"BREW":throw new tl.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new tl.ServerError(`Method ${s} is not recognized`,501)}}),d=200,f;if(l==null)d=s==="GET"||s==="HEAD"?404:204,Tg.lastModified&&e.lastModified&&n.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(f=e.lastModified){K7[0]=f;let p=String.fromCharCode(34,(Yt[0]&63)+62,(Yt[0]>>6)+(Yt[1]<<2&63)+62,(Yt[1]>>4)+(Yt[2]<<4&63)+62,(Yt[2]>>2)+62,(Yt[3]&63)+62,(Yt[3]>>6)+(Yt[4]<<2&63)+62,(Yt[4]>>4)+(Yt[5]<<4&63)+62,(Yt[5]>>2)+62,(Yt[6]&63)+62,(Yt[6]>>6)+(Yt[7]<<2&63)+62,34),S=r["if-none-match"];S&&p==S?(l?.onDone&&l.onDone(),d=304,l=void 0):n.setIfNone("ETag",p),Tg.lastModified&&n.setIfNone("Last-Modified",new Date(f).toUTCString())}e.createdResource&&(d=201),e.newLocation&&n.setIfNone("Location",e.newLocation);let E={status:d,headers:n,body:void 0},h=l?.wasLoadedFromSource?.();return h!==void 0&&(E.wasCacheMiss=h,!h&&f&&n.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||f))/1e3))),l!==void 0&&(E.body=Af(l,e,E),s==="HEAD"&&(E.body=void 0)),E}catch(i){i.statusCode?i.statusCode===500?So.warn(i):So.info(i):So.error(i),i.statusCode===405&&(i.method&&(i.message+=` to handle HTTP method ${i.method.toUpperCase()||""}`),i.allow&&(i.allow.push("trace","head","options"),n.setIfNone("Allow",i.allow.map(c=>c.toUpperCase()).join(", "))));let o={status:i.statusCode||500,headers:n,body:void 0};return o.body=Af(i.contentType?i:i.toString(),e,o),o}}function Q7(e){Tg=e,!Sv&&(Sv=!0,gg=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return W7(t,r)}),e.server.ws(async(t,r,s)=>{el++;let n=new bs;Tv||(Tv=!0,tu(l=>{el>0&&l.push({metric:"ws-connections",connections:el,byThread:!0})}));let i;t.on("error",l=>{i=!0,So.warn(l)});let o;t.on("message",a(function(d){o||(o=mo(r.headers.asObject["content-type"]));let f=o(d);n.push(f)},"message"));let c;t.on("close",()=>{el--,ss(!i,"connection","ws","disconnect"),n.emit("close"),c&&c.return()}),await s;let u=r.url.slice(1),_=gg.getMatch(u);if(ss(!!_,"connection","ws","connect"),!_)t.send(Ti(`No resource was found to handle ${r.pathname}`,r));else{r.handlerPath=_.path,qr(h=>({count:h.count,total:el}),"connections",r.handlerPath,"connect","ws");let l={url:_.relativeURL,async:!0},d=_.Resource;c=(await Xe(r,()=>d.connect(l,n,r)))[Symbol.asyncIterator]();let E;for(;!(E=await c.next()).done;){let h=Ti(E.value,r);t.send(h),qr(h.length,"bytes-sent",r.handlerPath,"message","ws")}}t.close()}))}var So,tl,Yt,K7,Tg,Sv,gg,Tv,el,gv=Ae(()=>{Ta();yn();So=v(G()),tl=v(Z());bf();dc();Xi();Jd();Yt=new Uint8Array(8),K7=new Float64Array(Yt.buffer,0,1),Tg={};a(W7,"http");el=0;a(Q7,"start")});var Rg=T((yhe,Rv)=>{var{recordAction:yf,recordActionBinary:z7}=(yn(),ee(ru)),J7=require("fastify-plugin"),X7=200;Rv.exports=J7(function(e,t,r){e.addHook("onResponse",async(s,n)=>{n.getResponseTime()}),e.addHook("onSend",async(s,n,i)=>{let o=n.getResponseTime(),c=performance.now(),u=n.request.routeOptions,_,l,d;u.config?.isOperation?(_=s.body?.operation,l="operation"):(_=u.url,l="fastify-route",d=u.method),yf(o,"duration",_,d,l),z7(n.raw.statusCode<400,"success",_,d,l);let f=X7;i?.pipe?(i.on("data",h=>{f+=h.length}),i.on("end",()=>{yf(performance.now()-c,"transfer",_,d,l),yf(f,"bytes-sent",_,d,l)})):(f+=i?.length||0,yf(f,"bytes-sent",_,d,l));let E=o.toFixed(3);n.header("Server-Timing",`db;dur=${E}`)}),r()},{name:"hdb-request-time"})});var Ng=T((Ihe,yv)=>{var Lf=require("clone"),Uf=Je(),j7=z(),Cf=D(),Z7=G(),If=require("fs"),Ag=require("joi"),{string:Df}=Ag.types(),{hdb_errors:eee,handleHDBError:rl}=Z(),{HDB_ERROR_MSGS:tee,HTTP_STATUS_CODES:wf}=eee,{common_validators:wa}=Ks(),Av=1e9,Ov=" is required",ree=["insert","update","upsert"],Og={database:{presence:!1,format:wa.schema_format,length:wa.schema_length},schema:{presence:!1,format:wa.schema_format,length:wa.schema_length},table:{presence:!0,format:wa.schema_format,length:wa.schema_length},action:{inclusion:{within:ree,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},see={schema:Df.required(),table:Df.required(),action:Df.valid("insert","update","upsert")},{AWS_ACCESS_KEY:nee,AWS_SECRET:iee,AWS_BUCKET:oee,AWS_FILE_KEY:aee,REGION:cee}=Cf.S3_BUCKET_AUTH_KEYS,uee={s3:{presence:!0},[`s3.${nee}`]:{presence:!0,type:"String"},[`s3.${iee}`]:{presence:!0,type:"String"},[`s3.${oee}`]:{presence:!0,type:"String"},[`s3.${aee}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${cee}`]:{presence:!0,type:"String"}},bv=Lf(Og);bv.data.presence={message:Ov};var Nv=Lf(Og);Nv.file_path.presence={message:Ov};var lee=Object.assign(Lf(Og),uee),bg=Lf(see);bg.csv_url=Df.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();bg.passthrough_headers=Ag.object();function _ee(e){let t=Uf.validateObject(e,bv);return Mf(e,t)}a(_ee,"dataObject");function dee(e){let t=Uf.validateBySchema(e,Ag.object(bg));return Mf(e,t)}a(dee,"urlObject");function fee(e){let t=Uf.validateObject(e,Nv);return Mf(e,t)}a(fee,"fileObject");function Eee(e){let t=Uf.validateObject(e,lee);return Mf(e,t)}a(Eee,"s3FileObject");function Mf(e,t){if(!t){let r=j7.checkGlobalSchemaTable(e.schema,e.table);if(r)return rl(new Error,r,wf.BAD_REQUEST);if(e.operation===Cf.OPERATIONS_ENUM.CSV_FILE_LOAD){try{If.accessSync(e.file_path,If.constants.R_OK|If.constants.F_OK)}catch(s){return s.code===Cf.NODE_ERROR_CODES.ENOENT?rl(s,`No such file or directory ${s.path}`,wf.BAD_REQUEST):s.code===Cf.NODE_ERROR_CODES.EACCES?rl(s,`Permission denied ${s.path}`,wf.BAD_REQUEST):rl(s)}try{let s=If.statSync(e.file_path).size;if(s>Av)return rl(new Error,tee.MAX_FILE_SIZE_ERR(s,Av),wf.BAD_REQUEST)}catch(s){Z7.error(s),console.error(s)}}}return t}a(Mf,"postValidateChecks");yv.exports={dataObject:_ee,urlObject:dee,fileObject:fee,s3FileObject:Eee}});var yg=T((Che,Iv)=>{"use strict";var sl=G(),Pf=D();async function hee(e,t,r,s=void 0){if(!e||typeof e!="function")throw new Error("Invalid function parameter");let n;try{return n=await e(t),r&&await r(t,n,s),t.operation===Pf.OPERATIONS_ENUM.INSERT||t.operation===Pf.OPERATIONS_ENUM.UPDATE||t.operation===Pf.OPERATIONS_ENUM.UPSERT?(delete n.new_attributes,delete n.txn_time):t.operation===Pf.OPERATIONS_ENUM.DELETE&&delete n.txn_time,n}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(sl.info(i.message),i):i.http_resp_msg?(sl.error(`Error calling operation: ${e.name}`),sl.error(i.http_resp_msg),i):(sl.error(`Error calling operation: ${e.name}`),sl.error(i),i)}}a(hee,"callOperationFunctionAsAwait");Iv.exports={callOperationFunctionAsAwait:hee}});var Cv=T((Lhe,wv)=>{"use strict";var Ig=class{static{a(this,"BulkLoadFileObject")}constructor(t,r,s,n,i,o,c=null){this.op=t,this.action=r,this.schema=s,this.table=n,this.file_path=i,this.file_type=o,this.role_perms=c}},wg=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,s,n){this.action=t,this.schema=r,this.table=s,this.data=n}};wv.exports={BulkLoadFileObject:Ig,BulkLoadDataObject:wg}});var Lv=T((Mhe,Dv)=>{"use strict";var Cg=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};Dv.exports=Cg});var vg=T((qhe,Qv)=>{"use strict";var vf=Lr(),Hf=Ng(),mee=require("needle"),Hs=D(),vhe=qe(),Ca=z(),{handleHDBError:ot,hdb_errors:Fv}=Z(),{HTTP_STATUS_CODES:Kt,HDB_ERROR_MSGS:Dt,CHECK_LOGS_WRAPPER:go}=Fv,Da=G(),Dg=require("papaparse");Ca.promisifyPapaParse();var xs=require("fs-extra"),pee=require("path"),{chain:Uv}=require("stream-chain"),Mv=require("stream-json/streamers/StreamArray"),Pv=require("stream-json/utils/Batch"),vv=require("stream-chain/utils/comp"),{finished:Bv}=require("stream"),See=j(),Gv=yg(),Tee=cg(),{BulkLoadFileObject:Ug,BulkLoadDataObject:gee}=Cv(),Mg=jT(),{verifyBulkLoadAttributePerms:kv}=mf(),Bhe=Lv(),Hhe=nt(),xhe=gn(),{databases:Ree}=(ge(),ee(xe)),{coerceType:Aee}=(xf(),ee(Bg)),Hv="No records parsed from csv file.",To=`${See.get("HDB_ROOT")}/tmp`,{schema_regex:Oee}=Ks(),xv=1024*1024*2,qv=5e3,bee={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};Qv.exports={csvDataLoad:Nee,csvURLLoad:yee,csvFileLoad:Iee,importFromS3:wee};async function Nee(e,t){let r=Hf.dataObject(e);if(r)throw ot(r,r.message,Kt.BAD_REQUEST,void 0,void 0,!0);let s={};try{let n=Yv(e.schema,e.table),i=Dg.parse(e.data,{header:!0,skipEmptyLines:!0,transform:Lg.bind(null,n),dynamicTyping:!1}),o=new Mg;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&kv(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 ot(new Error,c,Kt.BAD_REQUEST,void 0,void 0,!0);let u=new gee(e.action,e.schema,e.table,i.data);return s=await Gv.callOperationFunctionAsAwait(Kv,u,null),s.message===Hv?Hv:Wv(s.records,s.number_written)}catch(n){throw Ro(n)}}a(Nee,"csvDataLoad");async function yee(e){let t=Hf.urlObject(e);if(t)throw ot(t,t.message,Kt.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,s=`${To}/${r}`;try{await Cee(e,r)}catch(n){throw Da.error(Dt.DOWNLOAD_FILE_ERR(r)+" - "+n),ot(n,go(Dt.DOWNLOAD_FILE_ERR(r)))}try{let n=new Ug(this.job_operation_function.name,e.action,e.schema,e.table,s,Hs.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await Pg(n);return await Bf(s),i}catch(n){throw await Bf(s),Ro(n)}}a(yee,"csvURLLoad");async function Iee(e){let t=Hf.fileObject(e);if(t)throw ot(t,t.message,Kt.BAD_REQUEST,void 0,void 0,!0);let r=new Ug(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Hs.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await Pg(r)}catch(s){throw Ro(s)}}a(Iee,"csvFileLoad");async function wee(e){let t=Hf.s3FileObject(e);if(t)throw ot(t,t.message,Kt.BAD_REQUEST,void 0,void 0,!0);let r;try{let s=pee.extname(e.s3.key),n=`${Date.now()}${s}`;r=`${To}/${n}`;let i=new Ug(this.job_operation_function.name,e.action,e.schema,e.table,r,s,e.hdb_user.role.permission);await Dee(n,e);let o=await Pg(i);return await Bf(r),o}catch(s){throw await Bf(r),Ro(s)}}a(wee,"importFromS3");async function Cee(e,t){let r;try{let s=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await mee("get",e.csv_url,s)}catch(s){let n=`Error downloading CSV file from ${e.csv_url}, status code: ${s.statusCode}. Check the log for more information.`;throw ot(s,n,s.statusCode,Hs.LOG_LEVELS.ERROR,"Error downloading CSV file - "+s)}Uee(r,e.csv_url),await Lee(t,r.raw)}a(Cee,"downloadCSVFile");async function Dee(e,t){try{let r=`${To}/${e}`;await xs.mkdirp(To),await xs.writeFile(`${To}/${e}`,"",{flag:"a+"});let s=await xs.createWriteStream(r),n=await Tee.getFileStreamFromS3(t);await new Promise((i,o)=>{n.on("error",function(c){o(c)}),n.pipe(s).on("error",function(c){o(c)}).on("close",function(){Da.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw Da.error(Dt.S3_DOWNLOAD_ERR+" - "+r),ot(r,go(Dt.S3_DOWNLOAD_ERR))}}a(Dee,"downloadFileFromS3");async function Lee(e,t){try{await xs.mkdirp(To),await xs.writeFile(`${To}/${e}`,t)}catch(r){throw Da.error(Dt.WRITE_TEMP_FILE_ERR),ot(r,go(Dt.DEFAULT_BULK_LOAD_ERR))}}a(Lee,"writeFileToTempFolder");async function Bf(e){if(e)try{await xs.access(e),await xs.unlink(e)}catch{Da.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(Bf,"deleteTempFile");function Uee(e,t){if(e.statusCode!==Fv.HTTP_STATUS_CODES.OK)throw ot(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Kt.BAD_REQUEST);if(!bee[e.headers["content-type"]])throw ot(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Kt.BAD_REQUEST);if(!e.raw)throw ot(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Kt.BAD_REQUEST)}a(Uee,"validateURLResponse");async function Pg(e){try{let t;switch(e.file_type){case Hs.VALID_S3_FILE_TYPES.CSV:t=await Mee(e);break;case Hs.VALID_S3_FILE_TYPES.JSON:t=await Pee(e);break;default:throw ot(new Error,Dt.DEFAULT_BULK_LOAD_ERR,Kt.BAD_REQUEST,Hs.LOG_LEVELS.ERROR,Dt.INVALID_FILE_EXT_ERR(e))}return Wv(t.records,t.number_written)}catch(t){throw Ro(t)}}a(Pg,"fileLoad");async function Vv(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;n&&n.pause();let o={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await vf.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&kv(e.role_perms,e.op,e.action,e.schema,e.table,c,t),n&&n.resume()}catch(c){let u=ot(c);r(u)}}a(Vv,"validateChunk");async function $v(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;Ca.autoCastJSONDeep(i),n&&n.pause();let o=s.meta?s.meta.fields:null;if(o)i.forEach(c=>{!Ca.isEmpty(c)&&!Ca.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(u=>{Object.keys(u).forEach(_=>c.add(_))}),o=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},u=await Gv.callOperationFunctionAsAwait(Kv,c,null);t.records+=u.records,t.number_written+=u.number_written,n&&n.resume()}catch(c){let u=ot(c,go(Dt.INSERT_CSV_ERR),Kt.INTERNAL_SERVER_ERROR,Hs.LOG_LEVELS.ERROR,Dt.INSERT_CSV_ERR+" - "+c);r(u)}}a($v,"insertChunk");async function Mee(e){let t={records:0,number_written:0},r=Yv(e.schema,e.table);try{let s=new Mg,n=xs.createReadStream(e.file_path,{highWaterMark:xv});n.setEncoding("utf8"),await Dg.parsePromise(n,Vv.bind(null,e,s),Lg.bind(null,r));let i=s.getPermsResponse();if(i)throw ot(new Error,i,Kt.BAD_REQUEST);return n=xs.createReadStream(e.file_path,{highWaterMark:xv}),n.setEncoding("utf8"),await Dg.parsePromise(n,$v.bind(null,e,t),Lg.bind(null,r)),n.destroy(),t}catch(s){throw ot(s,go(Dt.PAPA_PARSE_ERR),Kt.INTERNAL_SERVER_ERROR,Hs.LOG_LEVELS.ERROR,Dt.PAPA_PARSE_ERR+s)}}a(Mee,"callPapaParse");function Yv(e,t){let r=Ree[e][t].attributes,s=new Map;for(let n of r)n.type&&s.set(n.name,i=>Aee(i,n));return s}a(Yv,"createTransformMap");function Lg(e,t,r){let s=e.get(r);return s?s(t):Ca.autoCast(t)}a(Lg,"typeFunction");async function Pee(e){let t={records:0,number_written:0},r=a(s=>{throw s},"throwErr");try{let s=new Mg,n=Uv([xs.createReadStream(e.file_path,{encoding:"utf-8"}),Mv.withParser(),c=>c.value,new Pv({batchSize:qv}),vv(async c=>{await Vv(e,s,r,c)})]);await new Promise((c,u)=>{Bv(n,_=>{_?u(_):c()}),n.resume()});let i=s.getPermsResponse();if(i)throw ot(new Error,i,Kt.BAD_REQUEST);let o=Uv([xs.createReadStream(e.file_path,{encoding:"utf-8"}),Mv.withParser(),c=>c.value,new Pv({batchSize:qv}),vv(async c=>{await $v(e,t,r,c)})]);return await new Promise((c,u)=>{Bv(o,_=>{_?u(_):c()}),o.resume()}),t}catch(s){throw ot(s,go(Dt.INSERT_JSON_ERR),Kt.INTERNAL_SERVER_ERROR,Hs.LOG_LEVELS.ERROR,Dt.INSERT_JSON_ERR+s)}}a(Pee,"insertJson");async function Kv(e){let t={};try{e.data&&e.data.length>0&&vee(e.data[0])?t=await Bee(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",Da.info(t.message))}catch(r){throw Ro(r)}return t}a(Kv,"callBulkFileLoad");function vee(e){let t=Object.keys(e);for(let r of t)if(!Oee.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(vee,"validateColumnNames");async function Bee(e,t,r,s){s||(s="insert");let n={operation:s,schema:t,table:r,records:e},i;switch(s){case"insert":i=vf.insert;break;case"update":i=vf.update;break;case"upsert":i=vf.upsert;break;default:throw ot(new Error,Dt.INVALID_ACTION_PARAM_ERR(s),Kt.BAD_REQUEST,Hs.LOG_LEVELS.ERROR,Dt.INVALID_ACTION_PARAM_ERR(s))}try{let o=await i(n),c;switch(s){case"insert":c=o.inserted_hashes;break;case"update":c=o.update_hashes;break;case"upsert":c=o.upserted_hashes;break;default:break}if(Array.isArray(o.skipped_hashes)&&o.skipped_hashes.length>0){let l=global.hdb_schema[t][r].hash_attribute,d=e.length;for(;d--;)o.skipped_hashes.indexOf(e[d][l])>=0&&e.splice(d,1)}let u=Ca.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw Ro(o)}}a(Bee,"bulkFileLoad");function Wv(e,t){return`successfully loaded ${t} of ${e} records`}a(Wv,"buildResponseMsg");function Ro(e){return ot(e,go(Dt.DEFAULT_BULK_LOAD_ERR),Kt.INTERNAL_SERVER_ERROR,Hs.LOG_LEVELS.ERROR,Dt.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(Ro,"buildTopLevelErrMsg")});var Jv=T((Ghe,zv)=>{"use strict";var Hg=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};zv.exports=Hg});var Zv=T((Vhe,jv)=>{"use strict";var Hee=D(),Xv=require("moment"),xee=require("uuid").v4,xg=class{static{a(this,"JobObject")}constructor(){this.id=xee(),this.type=void 0,this.start_datetime=Xv().valueOf(),this.created_datetime=Xv().valueOf(),this.end_datetime=void 0,this.status=Hee.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};jv.exports=xg});var qg=T((Yhe,i0)=>{"use strict";var qee=require("uuid").v4,r0=Lr(),s0=es(),Fee=Xs(),Gee=ea(),kee=Jv(),at=D(),Vee=Zv(),$ee=Sd(),ds=G(),Yee=Ic(),La=z(),{promisify:Kee}=require("util"),Ao=require("moment"),Wee=Sf(),qf=Ng(),e0=Om(),{deleteTransactionLogsBeforeValidator:Qee}=WT(),{handleHDBError:zee,hdb_errors:Jee}=Z(),{HTTP_STATUS_CODES:Xee}=Jee,t0=s0.searchByValue,jee=s0.searchByHash,Zee=r0.insert,ete=Kee(Wee.evaluateSQL),tte=r0.update;i0.exports={addJob:nte,updateJob:ote,handleGetJob:rte,handleGetJobsByStartDate:ste,getJobById:n0};async function rte(e){try{let t=await n0(e.id);return La.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 ds.error("There was an error getting job",t),new Error(r)}}a(rte,"handleGetJob");async function ste(e){try{let t=await ite(e);if(ds.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=Ao(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=Ao(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 ds.error(r),new Error(r)}}a(ste,"handleGetJobsByStartDate");async function nte(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||La.isEmptyOrZeroLength(e.operation)){let l="job parameter is invalid";return ds.info(l),t.error=l,t}if(!at.JOB_TYPE_ENUM[e.operation])return ds.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,s;switch(r){case at.OPERATIONS_ENUM.CSV_FILE_LOAD:s=qf.fileObject(e);break;case at.OPERATIONS_ENUM.CSV_URL_LOAD:s=qf.urlObject(e);break;case at.OPERATIONS_ENUM.CSV_DATA_LOAD:s=qf.dataObject(e);break;case at.OPERATIONS_ENUM.IMPORT_FROM_S3:s=qf.s3FileObject(e);break;case at.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case at.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:s=e0(e,"date");break;case at.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:s=e0(e,"timestamp");break;case at.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:s=Qee(e);break;default:break}if(s)throw zee(s,s.message,Xee.BAD_REQUEST,void 0,void 0,!0);let n=new Vee;n.type=e.operation===at.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?at.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,n.type=e.operation,n.user=e.hdb_user.username;let i=new Fee(at.SYSTEM_SCHEMA_NAME,at.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",n.id,"id",["id"]),o;try{o=Array.from(await t0(i))}catch(l){let d=`There was an error inserting a new job: ${l}`;return ds.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){n.id=qee();try{o=await t0(i)}catch(l){let d=`There was an error inserting a new job: ${l}`;return ds.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return ds.error("Error creating a job, could not find a unique job id."),t}n.request=e;let u=new Yee(at.SYSTEM_SCHEMA_NAME,at.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[n]),_;try{_=await Zee(u)}catch(l){return ds.error(`There was an error inserting a job for job type: ${e.operation} -- ${l}`),t.success=!1,t}if(_.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${n.operation} and id ${n.id}`;else{let l=`Created a job with type ${n.type} and id ${n.id}`;t.message=l,t.createdJob=n,t.success=!0,ds.trace(l)}return t}a(nte,"addJob");async function ite(e){let t=Ao(e.from_date,Ao.ISO_8601),r=Ao(e.to_date,Ao.ISO_8601);if(!t.isValid())throw new Error("Invalid 'from' date, must be in ISO-8601 format (YYYY-MM-DD).");if(!r.isValid())throw new Error("Invalid 'to' date, must be in ISO-8601 format (YYYY-MM-DD)");let s=`select * from system.hdb_job where start_datetime > '${t.valueOf()}' and start_datetime < '${r.valueOf()}'`,n=new kee(s,e.hdb_user);try{return await ete(n)}catch(i){throw ds.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(ite,"getJobsInDateRange");async function n0(e){if(La.isEmptyOrZeroLength(e))return La.errorizeMessage("Invalid job ID specified.");let t=new Gee(at.SYSTEM_SCHEMA_NAME,at.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await jee(t)}catch(r){let s=`There was an error searching for a job by id: ${e} ${r}`;return ds.error(s),La.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(n0,"getJobById");async function ote(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(La.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===at.JOB_STATUS_ENUM.COMPLETE||e.status===at.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=Ao().valueOf());let t=new $ee(at.SYSTEM_SCHEMA_NAME,at.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await tte(t),r}a(ote,"updateJob")});var _0=T((Whe,l0)=>{"use strict";var o0=z(),Rr=D(),ate=require("moment"),Ff=vg(),Gf=G(),a0=qg(),c0=Tf(),u0=ti(),cte=Ye(),ute=df(),Fg=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function lte(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(o0.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(o0.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Rr.JOB_TYPE_ENUM.csv_file_load:await Bn(e,Ff.csvFileLoad);break;case Rr.JOB_TYPE_ENUM.csv_url_load:await Bn(e,Ff.csvURLLoad);break;case Rr.JOB_TYPE_ENUM.csv_data_load:await Bn(e,Ff.csvDataLoad);break;case Rr.JOB_TYPE_ENUM.import_from_s3:await Bn(e,Ff.importFromS3);break;case Rr.JOB_TYPE_ENUM.empty_trash:break;case Rr.JOB_TYPE_ENUM.export_local:await Bn(e,c0.export_local);break;case Rr.JOB_TYPE_ENUM.export_to_s3:await Bn(e,c0.export_to_s3);break;case Rr.JOB_TYPE_ENUM.delete_files_before:case Rr.JOB_TYPE_ENUM.delete_records_before:await Bn(e,u0.deleteFilesBefore);break;case Rr.JOB_TYPE_ENUM.delete_audit_logs_before:await Bn(e,u0.deleteAuditLogsBefore);break;case Rr.JOB_TYPE_ENUM.delete_transaction_logs_before:await Bn(e,ute.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(lte,"parseMessage");async function Bn(e,t){try{e.job.status=Rr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=ate().valueOf(),await a0.updateJob(e.job),await _te(e.job.id)}catch(r){let s=r.message!==void 0?r.message:r;typeof s=="string"?(s=`There was an error running ${t.name} job with id ${e.job.id} - ${s}`,r.message=s):Gf.error(`There was an error running ${t.name} job with id ${e.job.id}`),Gf.error(s),e.job.message=s,e.job.status=Rr.JOB_STATUS_ENUM.ERROR;try{await a0.updateJob(e.job)}catch(n){throw Gf.error(`Unable to update job with id ${e.job.id}`),n}throw r}}a(Bn,"runJob");async function _te(e){Gf.trace("launching job thread:",e),cte.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[Rr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(_te,"launchJobThread");l0.exports={parseMessage:lte,RunnerMessage:Fg}});var f0=T((zhe,d0)=>{"use strict";var Gg=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};d0.exports=Gg});var D0=T((Xhe,Wg)=>{"use strict";var Yf=es(),$g=Sf(),kf=vg(),Hn=uu(),Vf=jn(),il=ti(),dte=dS(),nl=rs(),$f=RS(),Wt=KT(),Lt=G(),fte=bS(),Ete=Cd(),E0=oT(),hte=Ld(),mte=aT(),pte=cT(),Ste=_T(),Tte=fT(),kg=mT(),h0=Tf(),gte=mf(),Yg=qg(),H=D(),{hdb_errors:al,handleHDBError:ol}=Z(),{HTTP_STATUS_CODES:m0}=al,Vg=RT(),p0=Qd(),y0=require("util"),Ua=Lr(),Rte=Rn(),Ate=_a(),S0=_0(),T0=hu(),g0=(ef(),ee(vu)),R0=Pr(),A0=df(),O0=of(),{setServerUtilities:Ote}=(xf(),ee(Bg)),{CONTEXT:bte}=(Ns(),ee(Sp)),{_assignPackageExport:Nte}=require("../index"),{transformReq:yte}=z(),{server:Ite}=(sr(),ee(Li)),wte=yg(),b0=Yf.searchByHash,Cte=Yf.searchByValue,Dte=y0.promisify(Yf.search),Lte=y0.promisify($g.evaluateSQL),Ute={[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},k=f0();async function I0(e,t){try{if(e.body.operation!=="read_log"&&(Lt.log_level===H.LOG_LEVELS.INFO||Lt.log_level===H.LOG_LEVELS.DEBUG||Lt.log_level===H.LOG_LEVELS.TRACE)){let{hdb_user:s,hdb_auth_header:n,password:i,...o}=e.body;Lt.info(o)}}catch(s){Lt.error(s)}let r=await wte.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return Ute[e.body.operation]&&Rte.setSchemaDataToGlobal(s=>{s&&Lt.error(s)}),r}a(I0,"processLocalTransaction");var N0=Pte();Wg.exports={chooseOperation:w0,getOperationFunction:C0,operation:Kg,processLocalTransaction:I0};Ote(Wg.exports);Ite.operation=Kg;function w0(e){let t;try{t=C0(e)}catch(n){throw Lt.error(`Error when selecting operation function - ${n}`),n}let{operation_function:r,job_operation_function:s}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let n=e.operation==="sql"?e.sql:e.search_operation.sql,i=$g.convertSQLToAST(n);if(e.parsed_sql_object=i,!e.bypass_auth){let o=$g.checkASTPermissions(e,i);if(o)throw Lt.error(`${m0.FORBIDDEN} from operation ${e.operation}`),Lt.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),ol(new Error,o,al.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 n=s===void 0?r:s,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=gte.verifyPerms(i,n);if(o)throw Lt.error(`${m0.FORBIDDEN} from operation ${e.operation}`),Lt.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),ol(new Error,o,al.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(n){throw ol(n,"There was an error when trying to choose an operation path")}return r}a(w0,"chooseOperation");function C0(e){if(Lt.trace(`getOperationFunction with operation: ${e.operation}`),N0.has(e.operation))return N0.get(e.operation);throw ol(new Error,al.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),al.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(C0,"getOperationFunction");Nte("operation",Kg);function Kg(e,t){e.hdb_user=this[bte]?.user,e.bypass_auth=!t;let r=w0(e);return I0({body:e},r)}a(Kg,"operation");async function Mte(e){Lt.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),s=r[0],n=r[1];for(let i of t.transactions)try{i.schema=s,i.table=n,i[H.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case H.OPERATIONS_ENUM.INSERT:o=await Ua.insert(i);break;case H.OPERATIONS_ENUM.UPDATE:o=await Ua.update(i);break;case H.OPERATIONS_ENUM.UPSERT:o=await Ua.upsert(i);break;case H.OPERATIONS_ENUM.DELETE:o=await il.deleteRecord(i);break;default:Lt.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){Lt.info("Invalid operation in transaction"),Lt.error(o)}}a(Mte,"catchup");async function ln(e){yte(e);let t,r;try{r=await Yg.addJob(e),t=r.createdJob,Lt.info("addJob result",r);let s=new S0.RunnerMessage(t,e);return await S0.parseMessage(s),{message:`Starting job with id ${t.id}`,job_id:t.id}}catch(s){let n=`There was an error executing job: ${s.http_resp_msg?s.http_resp_msg:s}`;throw Lt.error(n),ol(s,n)}}a(ln,"executeJob");function Pte(){let e=new Map;return e.set(H.OPERATIONS_ENUM.INSERT,new k(Ua.insert)),e.set(H.OPERATIONS_ENUM.UPDATE,new k(Ua.update)),e.set(H.OPERATIONS_ENUM.UPSERT,new k(Ua.upsert)),e.set(H.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new k(Yf.searchByConditions)),e.set(H.OPERATIONS_ENUM.SEARCH_BY_HASH,new k(b0)),e.set(H.OPERATIONS_ENUM.SEARCH_BY_ID,new k(b0)),e.set(H.OPERATIONS_ENUM.SEARCH_BY_VALUE,new k(Cte)),e.set(H.OPERATIONS_ENUM.SEARCH,new k(Dte)),e.set(H.OPERATIONS_ENUM.SQL,new k(Lte)),e.set(H.OPERATIONS_ENUM.CSV_DATA_LOAD,new k(ln,kf.csvDataLoad)),e.set(H.OPERATIONS_ENUM.CSV_FILE_LOAD,new k(ln,kf.csvFileLoad)),e.set(H.OPERATIONS_ENUM.CSV_URL_LOAD,new k(ln,kf.csvURLLoad)),e.set(H.OPERATIONS_ENUM.IMPORT_FROM_S3,new k(ln,kf.importFromS3)),e.set(H.OPERATIONS_ENUM.CREATE_SCHEMA,new k(Hn.createSchema)),e.set(H.OPERATIONS_ENUM.CREATE_DATABASE,new k(Hn.createSchema)),e.set(H.OPERATIONS_ENUM.CREATE_TABLE,new k(Hn.createTable)),e.set(H.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new k(Hn.createAttribute)),e.set(H.OPERATIONS_ENUM.DROP_SCHEMA,new k(Hn.dropSchema)),e.set(H.OPERATIONS_ENUM.DROP_DATABASE,new k(Hn.dropSchema)),e.set(H.OPERATIONS_ENUM.DROP_TABLE,new k(Hn.dropTable)),e.set(H.OPERATIONS_ENUM.DROP_ATTRIBUTE,new k(Hn.dropAttribute)),e.set(H.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new k(Vf.describeSchema)),e.set(H.OPERATIONS_ENUM.DESCRIBE_DATABASE,new k(Vf.describeSchema)),e.set(H.OPERATIONS_ENUM.DESCRIBE_TABLE,new k(Vf.describeTable)),e.set(H.OPERATIONS_ENUM.DESCRIBE_ALL,new k(Vf.describeAll)),e.set(H.OPERATIONS_ENUM.DELETE,new k(il.deleteRecord)),e.set(H.OPERATIONS_ENUM.ADD_USER,new k(nl.addUser)),e.set(H.OPERATIONS_ENUM.ALTER_USER,new k(nl.alterUser)),e.set(H.OPERATIONS_ENUM.DROP_USER,new k(nl.dropUser)),e.set(H.OPERATIONS_ENUM.LIST_USERS,new k(nl.listUsersExternal)),e.set(H.OPERATIONS_ENUM.LIST_ROLES,new k($f.listRoles)),e.set(H.OPERATIONS_ENUM.ADD_ROLE,new k($f.addRole)),e.set(H.OPERATIONS_ENUM.ALTER_ROLE,new k($f.alterRole)),e.set(H.OPERATIONS_ENUM.DROP_ROLE,new k($f.dropRole)),e.set(H.OPERATIONS_ENUM.USER_INFO,new k(nl.userInfo)),e.set(H.OPERATIONS_ENUM.READ_LOG,new k(fte)),e.set(H.OPERATIONS_ENUM.ADD_NODE,new k(Ete)),e.set(H.OPERATIONS_ENUM.UPDATE_NODE,new k(E0)),e.set(H.OPERATIONS_ENUM.SET_NODE_REPLICATION,new k(E0)),e.set(H.OPERATIONS_ENUM.REMOVE_NODE,new k(hte)),e.set(H.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new k(mte)),e.set(H.OPERATIONS_ENUM.PURGE_STREAM,new k(pte)),e.set(H.OPERATIONS_ENUM.SET_CONFIGURATION,new k(R0.setConfiguration)),e.set(H.OPERATIONS_ENUM.CLUSTER_STATUS,new k(Ste.clusterStatus)),e.set(H.OPERATIONS_ENUM.CLUSTER_NETWORK,new k(Tte)),e.set(H.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new k(kg.setRoutes)),e.set(H.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new k(kg.getRoutes)),e.set(H.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new k(kg.deleteRoutes)),e.set(H.OPERATIONS_ENUM.EXPORT_TO_S3,new k(ln,h0.export_to_s3)),e.set(H.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new k(ln,il.deleteFilesBefore)),e.set(H.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new k(ln,il.deleteFilesBefore)),e.set(H.OPERATIONS_ENUM.EXPORT_LOCAL,new k(ln,h0.export_local)),e.set(H.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new k(Yg.handleGetJobsByStartDate)),e.set(H.OPERATIONS_ENUM.GET_JOB,new k(Yg.handleGetJob)),e.set(H.OPERATIONS_ENUM.GET_FINGERPRINT,new k(Vg.getFingerprint)),e.set(H.OPERATIONS_ENUM.SET_LICENSE,new k(Vg.setLicense)),e.set(H.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new k(Vg.getRegistrationInfo)),e.set(H.OPERATIONS_ENUM.RESTART,new k(p0.restart)),e.set(H.OPERATIONS_ENUM.RESTART_SERVICE,new k(p0.restartService)),e.set(H.OPERATIONS_ENUM.CATCHUP,new k(Mte)),e.set(H.OPERATIONS_ENUM.SYSTEM_INFORMATION,new k(Ate.systemInformation)),e.set(H.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new k(ln,il.deleteAuditLogsBefore)),e.set(H.OPERATIONS_ENUM.READ_AUDIT_LOG,new k(dte)),e.set(H.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new k(T0.createTokens)),e.set(H.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new k(T0.refreshOperationToken)),e.set(H.OPERATIONS_ENUM.LOGIN,new k(g0.login)),e.set(H.OPERATIONS_ENUM.LOGOUT,new k(g0.logout)),e.set(H.OPERATIONS_ENUM.GET_CONFIGURATION,new k(R0.getConfiguration)),e.set(H.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new k(Wt.customFunctionsStatus)),e.set(H.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new k(Wt.getCustomFunctions)),e.set(H.OPERATIONS_ENUM.GET_COMPONENT_FILE,new k(Wt.getComponentFile)),e.set(H.OPERATIONS_ENUM.GET_COMPONENTS,new k(Wt.getComponents)),e.set(H.OPERATIONS_ENUM.SET_COMPONENT_FILE,new k(Wt.setComponentFile)),e.set(H.OPERATIONS_ENUM.DROP_COMPONENT,new k(Wt.dropComponent)),e.set(H.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new k(Wt.getCustomFunction)),e.set(H.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new k(Wt.setCustomFunction)),e.set(H.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new k(Wt.dropCustomFunction)),e.set(H.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new k(Wt.addComponent)),e.set(H.OPERATIONS_ENUM.ADD_COMPONENT,new k(Wt.addComponent)),e.set(H.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new k(Wt.dropCustomFunctionProject)),e.set(H.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new k(Wt.packageComponent)),e.set(H.OPERATIONS_ENUM.PACKAGE_COMPONENT,new k(Wt.packageComponent)),e.set(H.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new k(Wt.deployComponent)),e.set(H.OPERATIONS_ENUM.DEPLOY_COMPONENT,new k(Wt.deployComponent)),e.set(H.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new k(A0.readTransactionLog)),e.set(H.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new k(ln,A0.deleteTransactionLogsBefore)),e.set(H.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new k(O0.installModules)),e.set(H.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new k(O0.auditModules)),e.set(H.OPERATIONS_ENUM.GET_BACKUP,new k(Hn.getBackup)),e}a(Pte,"initializeOperationFunctionMap")});var Wf=T((Zhe,M0)=>{"use strict";var Qg=D(),vte=z(),cl=G(),{handleHDBError:zg,hdb_errors:Kf}=Z(),{isMainThread:Bte}=require("worker_threads"),{Readable:Hte}=require("stream"),L0=require("os"),xte=require("util"),qte=PS(),Fte=xte.promisify(qte.authorize),U0=D0(),{createGzip:Gte,constants:kte}=require("zlib");function Vte(e){let t=`Found an uncaught exception with message: ${e.message}. ${L0.EOL}Stack: ${e.stack} ${L0.EOL}Terminating ${Bte?"HDB":"thread"}.`;console.error(t),cl.fatal(t),process.exit(1)}a(Vte,"handleServerUncaughtException");function $te(e,t,r){if(cl[e.logLevel||"error"](e),e.statusCode)return typeof e.http_resp_msg!="object"?r.code(e.statusCode).send({error:e.http_resp_msg||e.message}):r.code(e.statusCode).send(e.http_resp_msg);let s=e.statusCode?e.statusCode:Kf.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(s).send({error:e}):r.code(s).send(e.message?{error:e.message}:e)}a($te,"serverErrorHandler");function Yte(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let s=zg(new Error,"Invalid JSON.",Kf.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}if(vte.isEmpty(e.body.operation)){let s=zg(new Error,"Request body must include an 'operation' property.",Kf.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}r()}a(Yte,"reqBodyValidationHandler");function Kte(e,t,r){let s;e.body.operation!==Qg.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==Qg.OPERATIONS_ENUM.LOGIN&&e.body.operation!==Qg.OPERATIONS_ENUM.LOGOUT?Fte(e,t).then(n=>{s=n,e.body.hdb_user=s,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(n=>{cl.warn(n),cl.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${n.stack}"`);let i=typeof n=="string"?{error:n}:{error:n.message};r(zg(n,i,Kf.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(Kte,"authHandler");async function Wte(e,t,r=!1){let s;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),s=U0.chooseOperation(e.body);let n=await U0.processLocalTransaction(e,s);if(n instanceof Hte&&n.headers){for(let[i,o]of n.headers)t.header(i,o);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),n=n.pipe(Gte({level:kte.Z_BEST_SPEED})))}return n}catch(n){throw cl.error(n),n}}a(Wte,"handlePostRequest");M0.exports={authHandler:Kte,handlePostRequest:Wte,handleServerUncaughtException:Vte,serverErrorHandler:$te,reqBodyValidationHandler:Yte}});var H0=T((tme,B0)=>{"use strict";var Qte=require("fastify-plugin"),{handlePostRequest:P0,authHandler:zte,reqBodyValidationHandler:Jte}=Wf();async function Xte(e){e.decorate("hdbCore",{preValidation:[Jte,zte],request:t=>v0(P0(t,response)),requestWithoutAuthentication:(t,r)=>v0(P0(t,r,!0))})}a(Xte,"hdbCore");async function v0(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(v0,"convertAsyncIterators");B0.exports=Qte(Xte)});var F0=T((nme,q0)=>{"use strict";var sme=require("fs"),Jg=j();Jg.initSync();var{CONFIG_PARAMS:x0}=D(),jte=1024*1024*1024;function Zte(e){let t=Jg.get(x0.HTTP_TIMEOUT),r=Jg.get(x0.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:jte,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,https:e}}a(Zte,"getServerOptions");q0.exports=Zte});var V0=T((ome,k0)=>{"use strict";var Xg=j();Xg.initSync();var{CONFIG_PARAMS:G0}=D();function ere(){let e=Xg.get(G0.HTTP_CORSACCESSLIST),t=Xg.get(G0.HTTP_CORS),r;return t&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},e&&e.length>0&&e[0]!==null&&e[0]!=="*"&&(r.origin=(s,n)=>n(null,e.indexOf(s)!==-1))),r}a(ere,"getCORSOptions");k0.exports=ere});var K0=T((cme,Y0)=>{"use strict";var $0=j();$0.initSync();var tre=D();function rre(){return $0.get(tre.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(rre,"getHeaderTimeoutConfig");Y0.exports=rre});var Zg={};$e(Zg,{customFunctionsServer:()=>ire,ready:()=>aB,start:()=>nre});function nre(e){let t=e.securePort>0;return{async handleFile(r,s,n,i){xn||(xn=oB(t),_t.http((await xn).server));let o=await xn,c=(0,jg.dirname)(n),u=(0,jg.dirname)(s);if(u.startsWith("/")&&(u=u.slice(1)),!W0.has(c)){W0.add(c);try{o.register(are(c,u))}catch(_){if(_.message==="Root plugin has already booted")Ge.warn(`Could not load root fastify route for ${n}, this may require a restart to install properly`);else throw _}}},ready:aB}}async function ire(){try{Ge.info("In Custom Functions Fastify server"+process.cwd()),Ge.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Ge.debug(`Custom Functions server process ${process.pid} starting up.`),await ore();let e=Z0.get(eB.CONFIG_PARAMS.HTTP_SECUREPORT)>0,t;try{t=xn=await oB(e)}catch(r){throw Ge.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw Ge.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){Ge.error(`Custom Functions ${process.pid} Error: ${e}`),Ge.error(e),process.exit(1)}}async function ore(){try{Ge.info("Custom Functions starting configuration."),await tB.setUsersToGlobal(),Ge.info("Custom Functions completed configuration.")}catch(e){Ge.error(e)}}function are(e,t){return async function(r){try{Ge.info("Custom Functions starting buildRoutes"),Ge.trace("Loading fastify routes folder "+e),(0,Q0.existsSync)(e)&&r.register(j0.default,n=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:n.hdbCore,logger:Ge.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((n,i,o)=>{n?.message?Ge.error(n.message):n&&Ge.error(n),o()})}catch(s){Ge.error(`Custom Functions errored buildRoutes: ${s}`)}}}async function oB(e){Ge.info("Custom Functions starting buildServer.");let t=(0,rB.default)(e),r=(0,z0.default)(t);r.server.headersTimeout=(0,nB.default)(),r.setErrorHandler(iB.serverErrorHandler);let s=(0,sB.default)();return s&&r.register(J0.default,s),r.register(function(n,i,o){n.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(X0.default),await r.register(sre),await r.after(),mg(r),Ge.info("Custom Functions completed buildServer."),r}function aB(){if(xn)return xn.then?xn.then(e=>e.ready()):xn.ready()}var jg,Q0,z0,J0,X0,j0,Z0,eB,Ge,sre,tB,rB,sB,nB,iB,xn,W0,cB=Ae(()=>{jg=require("path"),Q0=require("fs"),z0=v(require("fastify")),J0=v(require("@fastify/cors")),X0=v(Rg()),j0=v(require("@fastify/autoload")),Z0=v(j()),eB=v(D()),Ge=v(G()),sre=v(H0()),tB=v(rs()),rB=v(F0()),sB=v(V0()),nB=v(K0()),iB=v(Wf());Ta();sr();W0=new Set;a(nre,"start");a(ire,"customFunctionsServer");a(ore,"setUp");a(are,"buildRouteFolder");a(oB,"buildServer");a(aB,"ready")});var eR={};$e(eR,{start:()=>cre});function cre(e){return{handleDirectory(t,r){if(t==="/"){let s=(0,fB.default)(r,e);return e.server.http(async(n,i)=>{if(!n.isWebSocket)return new Promise(o=>s(n._nodeRequest,n._nodeResponse,()=>{o(i(n))}))}),!0}},handleFile(t,r,s){lB||(lB=!0,e.server.http(async(n,i)=>{if(!n.isWebSocket){let o=uB.get(n.pathname);if(o)return{handlesHeaders:!0,body:(0,_B.default)(n,(0,dB.realpathSync)(o))}}return i(n)},{runFirst:!0})),uB.set(r,s)}}}var _B,dB,fB,uB,lB,EB=Ae(()=>{_B=v(require("send")),dB=require("fs"),fB=v(require("serve-static")),uB=new Map;a(cre,"start")});function _re(e,t=1,r){if(tR++,(0,Oo.startWorker)("server/threads/threadServer.js",{name:Jf.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(s){let n=new Promise((o,c)=>{function u(_){_.type===Jf.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(s.removeListener("message",u),o(s))}a(u,"onMessage"),s.on("message",u),s.on("error",c)});lre.push(n),await n,Ma.push(s),s.expectedIdle=1,s.lastIdle=0,s.requests=1,s.on("message",o=>{if(o.requestId){let c=zf.get(o.requestId);c&&c(o)}}),s.on("exit",i),s.on("shutdown",i);function i(){let o=Ma.indexOf(s);o>-1&&Ma.splice(o,1)}if(a(i,"removeWorker"),Pa){let o=Pa;Pa=[];for(let c of o)SB[c.localPort](null,c)}}}),r){let s=setInterval(()=>{rR?rR=!1:(clearInterval(s),console.log("shut down dynamic thread due to inactivity"),(0,Oo.shutdownWorkers)(),tR=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function TB(e=0,t){if(typeof e=="string")try{(0,Xf.existsSync)(e)&&(0,Xf.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=dre:r=fre(t):r=nR;let s=(0,va.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(s._handle){s._handle.onconnection=SB[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),rR=!0,r(o,(c,u)=>{if(!c){if(hB){let l=o._socket||new va.Socket({handle:o,writable:!0,readable:!0});hB.deliverSocket(l,e,u),l.resume()}else tR>0?(Pa.length===0&&setTimeout(()=>{Pa.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,Pa.push(o)):(console.log("start up a dynamic thread to handle request"),_re(0));qr(!1,"socket-routed");return}c.requests++;let _=o.fd;if(_>=0)c.postMessage({port:e,fd:_,data:u});else{let l=o._socket||new va.Socket({handle:o,writable:!0,readable:!0});pre(l,c,e)}qr(!0,"socket-routed")})};let n=jc();sR.info(`HarperDB ${n.version} Server running on port ${e}`)}return s.on("error",n=>{console.error("Error in socket server",n)}),process.env._UNREF_SERVER&&s.unref(),s}function nR(e,t){let r,s=0;for(let n of Ma){if(n.threadId===-1)continue;let i=n.expectedIdle/n.requests;if(i>s)r=n;else if(s>=Qf)return Qf=i,t(r);s=i}Qf=0,t(r)}function dre(e,t){let r={};e.getpeername(r);let s=r.address,n=Ba.get(s),i=Date.now();if(n&&n.worker.threadId!==-1)return n.lastUsed=i,t(n.worker);nR(e,o=>{Ba.set(s,{worker:o,lastUsed:i}),t(o)})}function fre(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(s,n){let i=new va.Socket({handle:s,readable:!0,writable:!0});s._socket=i,i.on("data",o=>{s.readStop();let u=o.toString("latin1").match(t)?.[1],_=Ba.get(u),l=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=l,n(_.worker);nR(s,d=>{Ba.set(u,{worker:d,lastUsed:l}),n(d,o)})})}a(r,"findByHeaderAffinity")}function hre(){Qf=0;for(let e of Ma)e.expectedIdle=e.recentELU.idle+Ere,e.requests=1;Ma.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function pre(e,t,r){let s=mre++;t.postMessage({port:r,requestId:s,event:"connection"}),e.on("data",n=>{let i=n.toString("latin1");t.postMessage({port:r,requestId:s,data:i,event:"data"})}).on("close",n=>{t.postMessage({port:r,requestId:s,event:"close",hadError:n})}).on("error",n=>{t.postMessage({port:r,requestId:s,event:"error",error:n})}).on("drain",n=>{t.postMessage({port:r,requestId:s,event:"drain",error:n})}).on("end",()=>{t.postMessage({port:r,requestId:s,event:"end"})}).resume(),zf.set(s,n=>{n.event=="data"&&e.write(Buffer.from(n.data,"latin1")),n.event=="end"&&(e.end(n.data&&Buffer.from(n.data,"latin1")),zf.delete(s)),n.event=="destroy"&&(e.destroy(),zf.delete(s))})}var Oo,va,Jf,sR,Xf,pB,ure,Ma,Pa,SB,hB,tR,lre,rR,Qf,mB,Ba,Ere,zf,mre,gB=Ae(()=>{Oo=v(Ye()),va=require("net"),Jf=v(D()),sR=v(G()),Xf=require("fs");yn();pB=require("worker_threads"),ure=v(Yi()),Ma=[],Pa=[],SB=[],tR=0,lre=[];pB.isMainThread&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});a(_re,"startHTTPWorker");a(TB,"startSocketServer");Qf=0;a(nR,"findMostIdleWorker");mB=36e5,Ba=new Map;a(dre,"findByRemoteAddressAffinity");a(fre,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Ba)r.lastUsed+mB<e&&Ba.delete(t)},mB).unref();Ere=1e3;a(hre,"updateWorkerIdleness");(0,Oo.setMonitorListener)(hre);zf=new Map,mre=1;a(pre,"proxySocket")});var cR={};$e(cR,{Request:()=>iR,createReuseportFd:()=>jf});var RB,iR,oR,aR,jf,Zf=Ae(()=>{RB=require("os"),iR=class{static{a(this,"Request")}#e;constructor(t,r){this.method=t.method;let s=t.url;this._nodeRequest=t,this._nodeResponse=r,this.url=s,this.headers=new aR(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 oR(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}},oR=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}},aR=class{constructor(t){this.asObject=t}static{a(this,"Headers")}set(t,r){this.asObject[t.toLowerCase()]=r}get(t){return this.asObject[t.toLowerCase()]}has(t){return this.asObject.hasOwnProperty(t.toLowerCase())}[Symbol.iterator](){return Object.entries(this.asObject)[Symbol.iterator]()}keys(){return Object.keys(this.asObject)}values(){return Object.values(this.asObject)}forEach(t){for(let[r,s]of this)t(s,r,this)}};(0,RB.platform)()!="win32"&&(jf=require("node-unix-socket").createReuseportFd)});var NB=T((Ome,bB)=>{"use strict";var Sre=require("cluster"),bo=j();bo.initSync();var OB=D(),Sme=require("util"),qn=G(),Tme=require("fs"),Tre=require("fastify"),gme=jc(),gre=require("@fastify/cors"),Rre=require("@fastify/compress"),Are=require("@fastify/static"),Ore=Rg(),bre=require("path"),{PACKAGE_ROOT:Nre}=D(),yre=Rn(),Ire=z(),wre=rs(),Cre=Yi(),{server:Dre}=(sr(),ee(Li)),{node_request_key:Rme}=(Zf(),ee(cR)),{authHandler:Lre,handlePostRequest:Ure,serverErrorHandler:Mre,reqBodyValidationHandler:Pre}=Wf(),Ame=require("net"),{registerContentHandlers:vre}=(Ta(),ee(fv)),Bre=6e4,Hre=1024*1024*1024,xre="TRUE",{CONFIG_PARAMS:ul}=OB,Ha;bB.exports={hdbServer:AB,start:AB};async function AB(e){try{qn.info("In Fastify server"+process.cwd()),qn.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),qn.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=Sre.isMaster,await qre();let t=e.securePort>0;Ha=Fre(t),await Ha.ready(),e||(e={}),e.isOperationsServer=!0;try{Dre.http(Ha.server,e),Ha.server.closeIdleConnections||await Ha.listen({port:0,host:"::"})}catch(r){throw Ha.close(),qn.error(r),qn.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),qn.fatal(t),process.exit(1)}}a(AB,"operationsServer");async function qre(){qn.trace("Configuring HarperDB process."),yre.setSchemaDataToGlobal(),await wre.setUsersToGlobal(),await Cre.getLicense()}a(qre,"setUp");function Fre(e){qn.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=Gre(e),r=Tre(t);r.server.headersTimeout=Vre(),r.setErrorHandler(Mre);let s=kre();s&&r.register(gre,s),r.register(function(i,o,c){i.setNotFoundHandler(function(u,_){r.server.emit("unhandled",u.raw,_.raw)}),c()}),r.register(Ore),r.register(Rre),r.register(Are,{root:bre.join(Nre,"studio/build-local")}),vre(r);let n=bo.get(OB.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!Ire.isEmpty(n)&&n.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[Pre,Lre],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),Ure(i,o)}),r.get("/health",()=>"HarperDB is running."),qn.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(Fre,"buildServer");function Gre(e){let t=bo.get(ul.OPERATIONSAPI_NETWORK_TIMEOUT),r=bo.get(ul.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:Hre,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}a(Gre,"getServerOptions");function kre(){let e=bo.get(ul.OPERATIONSAPI_NETWORK_CORS),t=bo.get(ul.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===xre)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(s,n)=>n(null,t.indexOf(s)!==-1))),r}a(kre,"getCORSOpts");function Vre(){return bo.get(ul.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??Bre}a(Vre,"getHeaderTimeoutConfig")});var vB=T((wme,PB)=>{"use strict";var{decode:$re}=require("msgpackr"),{isMainThread:Nme,parentPort:Yre,threadId:yme}=require("worker_threads"),lR=nt(),Fn=qe(),Kre=D(),bi=G(),yB=j(),wB=D();Ye();var Wre=gn(),{recordAction:Qre,recordActionBinary:zre}=(yn(),ee(ru)),{publishToStream:Jre}=lR,{ConsumerEvents:Xre}=require("nats"),Ime={durable:Fn.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:Fn.WORK_QUEUE_CONSUMER_NAMES.deliver_group},jre,Zre,ese,CB,DB;PB.exports={initialize:_R,workQueueListener:MB,setSubscription:tse,setIgnoreOrigin:sse,getDatabaseSubscriptions:rse};async function _R(){DB=!0,bi.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await lR.getNATSReferences();jre=e,Zre=e.info.server_name,ese=t,CB=r}a(_R,"initialize");var tE=new Map;function tse(e,t,r){let s=tE.get(e);s||tE.set(e,s=new Map),s.set(t,r),DB||_R().then(MB)}a(tse,"setSubscription");function rse(){return tE}a(rse,"getDatabaseSubscriptions");var LB;function sse(e){LB=e}a(sse,"setIgnoreOrigin");var UB=100,IB=new Array(UB),eE=0;async function MB(){let e=await CB.consumers.get(Fn.WORK_QUEUE_CONSUMER_NAMES.stream_name,Fn.WORK_QUEUE_CONSUMER_NAMES.durable_name),t=!1,r;for(Yre?.on("message",async s=>{let{type:n}=s;n===wB.ITC_EVENT_TYPES.SHUTDOWN&&(t=!0,r&&r.close?.()&&r.close())});!t;){r=await e.consume(),(async()=>{for await(let s of await r.status())if(s.type===Xre.HeartbeatsMissed){let n=s.data;bi.trace(`${n} clustering ingest consumer heartbeats missed`),n===2&&(bi.warn("Restarting clustering ingest consumer due to missed heartbeat threshold being met"),r.stop())}})();try{for await(let s of r)await IB[eE],IB[eE]=nse(s).catch(n=>{bi.error(n)}),++eE>=UB&&(eE=0)}catch(s){bi.error("Error consuming clustering ingest, restarting consumer",s)}lR.clearClientCache(),await _R()}}a(MB,"workQueueListener");async function nse(e){let t=$re(e.data);Qre(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let r=e.headers,s=!1,n=yB.get(Kre.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Fn.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Fn.MSG_HEADERS.TRANSACTED_NODES).indexOf(n)>-1&&(s=!0);let i=r.get(Fn.MSG_HEADERS.ORIGIN);if(s||(s=i===n&&!LB),zre(s,"echo",e.subject,t.operation,"ingest"),s){e.ack();return}r.append(Fn.MSG_HEADERS.TRANSACTED_NODES,n);try{let{operation:o,schema:c,next:u,table:_,records:l,hash_values:d,__origin:f,expiresAt:E}=t;bi.trace("processing message:",o,c,_,(l?"records: "+l.map(w=>w?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),bi.trace(`messageProcessor nats msg id: ${e.headers.get(Fn.MSG_HEADERS.NATS_MSG_ID)}`);let h;l||(l=d);let{timestamp:p,user:S,node_name:R}=f||{},I=tE.get(c)?.get(_);if(!I)throw new Error("Missing table for replication message",_);if(o==="define_schema")t.type=o,I.send(t);else if(l.length===1&&!u)I.send({type:uR(o),value:l[0],id:d?.[0],expiresAt:E,timestamp:p,table:_,onCommit:h,user:S,nodeName:R});else{let w=l.map((B,K)=>({type:uR(o),value:B,expiresAt:E,id:d?.[K],table:_}));for(;u;)w.push({type:uR(u.operation),value:u.record,expiresAt:u.expiresAt,id:u.id,table:u.table}),u=u.next;I.send({type:"transaction",writes:w,table:_,timestamp:p,onCommit:h,user:S,nodeName:R})}yB.get(wB.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&Jre(e.subject.split(".").slice(0,-1).join("."),Wre.createNatsTableStreamName(c,_),e.headers,e.data)}catch(o){bi.error(o)}e.ack()}a(nse,"messageProcessor");function uR(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(uR,"convertOperation")});var pR={};$e(pR,{disableNATS:()=>ose,publishToStream:()=>oE,setNATSReplicator:()=>dR,setPublishToStream:()=>ase,setSubscription:()=>mR,start:()=>ise});function ise(){sE.default.get(nE.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&use()}function ose(e=!0){FB=e}function ase(e,t){oE=e,mR=t}function use(){if(FB||process.env._DISABLE_NATS)return;let e=Ms(),t=Object.keys(e);t.push("system");for(let r of t){let s=e[r];for(let n in s){let i=s[n];dR(n,r,i)}}SR((r,s)=>{dR(r.tableName,r.databaseName,r),s&&kB(r)}),!BB&&(BB=!0)}function dR(e,t,r){if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.sources.some(n=>n?.isNATSReplicator))return;r.sourcedFrom(class extends qt{static{a(this,"NATSReplicator")}put(i){return s(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[De],record:i})}delete(){return s(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[De]})}publish(i){return s(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[De],record:i})}patch(i){return s(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this[De],record:i})}invalidate(){s(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[De]})}static defineSchema(i){kB(i)}static subscribe(){let i=new bs;return mR(t,e,i),i}static subscribeOnThisThread(i){return i<cse}static isEqual(i){return i.isNATSReplicator}static isNATSReplicator=!0;static shouldReceiveInvalidations=!0},{intermediateSource:!0});function s(n){let i=n?.transaction?.nats;if(!i)if(n?.transaction){n.transaction.nats=i=new rE(n.transaction,n);let o=n.transaction;for(;o.next;)o=o.next;o.next=n.transaction.nats,i.user=n.user,i.context=n}else i=GB;return i}a(s,"getNATSTransaction")}function kB(e){let t=sE.default.get(nE.default.CONFIG_PARAMS.CLUSTERING_NODENAME);oE(`${ER.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,hR.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 HB,ER,hR,xB,qB,sE,nE,iE,FB,oE,mR,cse,GB,BB,rE,fR,VB=Ae(()=>{ge();Ns();HB=v(nt()),ER=v(qe()),hR=v(gn());dc();xB=v(vB()),qB=v(wr()),sE=v(j()),nE=v(D()),iE=v(G());a(ise,"start");a(ose,"disableNATS");oE=HB.publishToStream,mR=xB.setSubscription;a(ase,"setPublishToStream");cse=2;a(use,"assignReplicationSource");a(dR,"setNATSReplicator");a(kB,"publishSchema");rE=class{constructor(t,r){this.transaction=t;this.options=r}static{a(this,"NATSTransaction")}user;writes_by_db=new Map;addWrite(t,r){r.expiresAt=this.context?.expiresAt;let s=this.writes_by_db.get(t);s||this.writes_by_db.set(t,s=[]),s.push(r)}commit({timestamp:t}){let r=sE.default.get(nE.default.CONFIG_PARAMS.CLUSTERING_NODENAME),s=[];for(let[n,i]of this.writes_by_db){let o=[],c=[],u,_;for(let l of i){let d=l.table,f=l.operation=="put"?"upsert":l.operation;u||(iE.trace(`Sending transaction event ${f}`),_=u={operation:f,schema:n,table:d,__origin:{user:this.user?.username,timestamp:t,node_name:r}},u.hash_values=c,f!=="delete"&&f!=="invalidate"&&(u.records=o)),u.table===d&&u.operation===f?(o.push(l.record),c.push(l.id)):_=_.next={operation:f,table:d,id:l.id,record:l.record},l.expiresAt&&(_.expiresAt=l.expiresAt)}u&&s.push(oE(`${ER.SUBJECT_PREFIXES.TXN}.${n}.${u.table}`,(0,hR.createNatsTableStreamName)(n,u.table),void 0,u)?.catch(l=>{throw iE.error("An error has occurred trying to replicate transaction",u,l),l.statusCode=504,l}))}return Promise.all(s)}},fR=class extends rE{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,qB.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};GB=new fR});var sH=T(yo=>{"use strict";var{isMainThread:lse,parentPort:dl,threadId:ll}=require("worker_threads"),{Socket:_se,createServer:dse}=require("net"),{createServer:fse,IncomingMessage:Ese}=require("http"),{createServer:hse}=require("https"),{readFileSync:xa,unlinkSync:$B,existsSync:mse}=require("fs"),qs=G(),ke=j(),Ar=D(),{server:uE}=(sr(),ee(Li)),{WebSocketServer:pse}=require("ws"),{createServer:Sse}=require("tls"),{getTicketKeys:Tse,restartNumber:gse,getWorkerIndex:YB}=Ye(),{Headers:JB}=(Jd(),ee(xM)),{recordAction:_l,recordActionBinary:Rse}=(yn(),ee(ru)),{Request:XB,createReuseportFd:KB}=(Zf(),ee(cR)),{checkMemoryLimit:Ase}=Yi(),jB=require("tls"),WB=jB.createSecureContext;jB.createSecureContext=function(e){if(!e.cert||!e.key)return WB(e);let t={...e};delete t.key,delete t.cert;let r=WB(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){gse<=1&&qs.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:vme,CONFIG_PARAMS:Ose}=Ar;ke.initSync();var bse=ke.get(Ose.HTTP_SESSIONAFFINITY),_n={};yo.registerServer=OR;yo.httpServer=bR;yo.deliverSocket=AR;yo.startServers=ZB;yo.when_components_loaded=null;uE.http=bR;uE.request=wse;uE.socket=Cse;uE.ws=Dse;var TR=[],aE=[],Nse,No={},cE={},yse=[],gR=[];function ZB(){return yo.when_components_loaded=NR().loadRootComponents(!0).then(()=>{dl?.on("message",t=>{let{port:r,fd:s,data:n}=t;if(s)AR(s,r,n);else if(t.requestId)Ise(t);else if(t.type===Ar.ITC_EVENT_TYPES.SHUTDOWN){qs.trace("received shutdown request",ll);for(let i in _n){let o=_n[i],c;o.closeIdleConnections&&(setInterval(()=>{o.closeIdleConnections()},25).unref(),setTimeout(()=>{o.closeAllConnections(),qs.info("Closed all http connections",i,ll)},4e3).unref()),o.close?.(()=>{if(ke.get(Ar.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&YB()==0)try{$B(ke.get(Ar.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET))}catch{}clearInterval(c),setTimeout(()=>{console.log("forced close server",i,ll),o.cantCleanupProperly||qs.warn("Had to forcefully exit the thread",ll),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(KB&&!bse)for(let t in _n){let r=_n[t];if(isNaN(t)&&YB()==0){mse(t)&&$B(t),e.push(new Promise((n,i)=>{r.listen({path:t},()=>{n(),qs.info("Domain socket listening on "+t)}).on("error",i)}));continue}let s;try{s=KB(+t,"::")}catch(n){console.error(`Unable to bind to port ${t}`,n);continue}e.push(new Promise((n,i)=>{r.listen({fd:s},()=>{n(),qs.trace("Listening on port "+t,ll)}).on("error",i)}))}Promise.all(e).then(()=>{dl?.postMessage({type:Ar.ITC_EVENT_TYPES.CHILD_STARTED})})})}a(ZB,"startServers");lse||ZB();function AR(e,t,r){let s=e?.read?e:new _se({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),n=_n[t];if(n.isSecure&&(s.startTime=performance.now()),n)typeof n=="function"?n(s):n.emit("connection",s),r&&s.emit("data",r);else{let i=a(o=>{setTimeout(()=>{let c=_n[t];c?(typeof c=="function"?c(s):c.emit("connection",s),r&&s.emit("data",r)):o<5?i(o+1):(qs.error(`Server on port ${t} was not registered`),s.destroy())},1e3)},"retry");i(1)}return s}a(AR,"deliverSocket");var QB=new Map;function Ise(e){let{port:t,event:r,data:s,requestId:n}=e,i;switch(i=QB.get(n),r){case"connection":i=AR(void 0,t),QB.set(n,i),i.write=(c,u,_)=>(dl.postMessage({requestId:n,event:"data",data:c.toString("latin1")}),_&&_(),!0),i.end=(c,u,_)=>(dl.postMessage({requestId:n,event:"end",data:c?.toString("latin1")}),_&&_(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),dl.postMessage({requestId:n,event:"destroy"})};break;case"data":i._readableState.destroyed||i.emit("data",Buffer.from(s,"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(Ise,"proxyRequest");function OR(e,t,r=!0){!+t&&t!==ke.get(Ar.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&(t=parseInt(ke.get(Ar.CONFIG_PARAMS.HTTP_PORT),10));let s=_n[t];if(s){let n=s.lastServer||s;if(n===e)throw new Error(`Can not register the same server twice for the same port ${t}`);if(r&&!!n.sessionIdContext!=!!e.sessionIdContext&&+t)throw new Error(`Can not mix secure HTTPS and insecure HTTP on the same port ${t}`);n.off("unhandled",zB),n.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(s.cantCleanupProperly=!0),e.emit("request",i,o)}),s.lastServer=e}else _n[t]=e;e.on("unhandled",zB)}a(OR,"registerServer");function eH(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=[],ke.get(Ar.CONFIG_PARAMS.HTTP_PORT)!=null&&t.push({port:ke.get(Ar.CONFIG_PARAMS.HTTP_PORT),secure:ke.get(Ar.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),ke.get(Ar.CONFIG_PARAMS.HTTP_SECUREPORT)!=null&&t.push({port:ke.get(Ar.CONFIG_PARAMS.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&ke.get(Ar.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:ke.get(Ar.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET),secure:!1}),t}a(eH,"getPorts");function bR(e,t){for(let{port:r,secure:s}of eH(t))tH(r,s,t?.isOperationsServer),typeof e=="function"?gR[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||r}):(e.isSecure=s,OR(e,r,!1)),cE[r]=RR(gR,r),Nse=RR(yse,r)}a(bR,"httpServer");function tH(e,t,r){if(!No[e]){let s=r?"operationsApi_network":"http",n={keepAliveTimeout:ke.get(s+"_keepAliveTimeout"),headersTimeout:ke.get(s+"_headersTimeout"),requestTimeout:ke.get(s+"_timeout")},i=ke.get(s+"_mtls");if(t){s=r?"operationsApi_":"";let c=ke.get(s+"tls_privateKey"),u=ke.get(s+"tls_certificate"),_=ke.get(s+"tls_certificateAuthority");Object.assign(n,{allowHTTP1:!0,key:xa(c),ciphers:ke.get("tls_ciphers"),cert:xa(u),ca:_&&xa(_),requestCert:!!i,ticketKeys:Tse()})}let o=Ase();No[e]=(t?hse:fse)(n,async(c,u)=>{try{let l=performance.now(),d=new XB(c,u);r&&(d.isOperationsServer=!0);let f=await cE[e](d);if(!f){if(d._nodeResponse.statusCode)return;f=rH(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 B of f.headers||[])u.setHeader(B[0],B[1]);return c.baseRequest=d,u.baseResponse=f,No[e].emit("unhandled",c,u)}let E=f.status||200,h=performance.now(),p=h-l,S=f.body,R;if(!f.handlesHeaders){let B=f.headers||new JB;if(S?S.length>=0&&(typeof S=="string"?B.set("Content-Length",Buffer.byteLength(S)):B.set("Content-Length",S.length),R=!0):(B.set("Content-Length","0"),R=!0),B.append){let K=`hdb;dur=${p.toFixed(2)}`;f.wasCacheMiss&&(K+=", miss"),B.append("Server-Timing",K,!0)}u.writeHead(E,B&&(B[Symbol.iterator]?Array.from(B):B)),R&&u.end(S)}let I=d.handlerPath,w=d.method;if(_l(p,"duration",I,w,f.wasCacheMiss==null?void 0:f.wasCacheMiss?"cache-miss":"cache-hit"),Rse(E<400,"success",I,w),!R)if(S?.pipe){S.pipe(u),S.destroy&&u.on("close",()=>{S.destroy()});let B=0;S.on("data",K=>{B+=K.length}),S.on("end",()=>{_l(performance.now()-h,"transfer",I,w),_l(B,"bytes-sent",I,w)})}else S?.then?S.then(B=>{u.end(B)},_):u.end(S)}catch(l){_(l)}function _(l){let d=l.headers;u.writeHead(l.statusCode||500,d&&(d[Symbol.iterator]?Array.from(d):d)),u.end(l.toString()),l.statusCode?l.statusCode===500?qs.warn(l):qs.info(l):qs.error(l)}a(_,"onError")}),t&&(No[e].on("secureConnection",c=>{c._parent.startTime&&_l(performance.now()-c._parent.startTime,"tls-handshake",e),_l(c.isSessionReused(),"tls-reused",e)}),No[e].isSecure=!0),OR(No[e],e)}return No[e]}a(tH,"getHTTPServer");function RR(e,t){let r=rH;for(let s=e.length;s>0;){let{listener:n,port:i}=e[--s];if(i===t||i==="all"){let o=r;r=a(c=>n(c,o),"next_callback")}}return r}a(RR,"makeCallbackChain");function rH(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new JB}}a(rH,"unhandled");function wse(e,t){bR(e,{requestOnly:!0,...t})}a(wse,"onRequest");function Cse(e,t){let r;if(t.securePort){let s=ke.get("tls_privateKey"),n=ke.get("tls_certificate"),i=t.mtls?.certificateAuthority||ke.get("tls_certificateAuthority");r=Sse({ciphers:ke.get("tls_ciphers"),key:xa(s),cert:xa(n),ca:i&&xa(i),requestCert:!!t.mtls},e),_n[t.securePort]=r}return t.port&&(r=dse(e),_n[t.port]=r),r}a(Cse,"onSocket");Object.defineProperty(Ese.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 Dse(e,t){for(let{port:r,secure:s}of eH(t)){aE[r]||(aE[r]=new pse({server:tH(r,s)}),aE[r].on("connection",async(i,o)=>{try{let c=new XB(o);c.isWebSocket=!0;let u=cE[r](c),_=o.headers["sec-websocket-protocol"]||"";for(let l=0;l<TR.length;l++){let d=TR[l];if(d.protocol){if(d.protocol===_){d.listener(i,c,u);break}}else d.listener(i,c,u)}}catch(c){qs.warn("Error handling WebSocket connection",c)}}),aE[r].on("error",i=>{console.log("Error in setting up WebSocket server",i)}));let n=t?.subProtocol||"";TR.push({listener:e,protocol:n}),cE[r]=RR(gR,r)}}a(Dse,"onWebSocket");function zB(e,t){t.writeHead(404),t.end(`Not found
|
|
27
|
+
`)}a(zB,"defaultNotFound")});async function aH({clientId:e,user:t,clean:r,will:s}){let n;if(e&&!r){let i=await yR.getResource(e,{});n=new CR(e,t,i),i&&(n.sessionWasPresent=!0)}else{if(e){let i=await yR.get(e);i&&i.delete()}n=new _E(e,t)}return s&&(s.id=e,s.user={username:t?.username},fl.put(s)),n}function IR(){return lE++,lE>65500&&(lE=1),lE}function wR(e,t,r=e){let{topic:s,retain:n}=e;e.data=t,e.async=!0,e.authorize=!0;let i=pi.getMatch(s);if(!i)throw new Error(`Can not publish to topic ${s} as it does not exist, no resource has been defined to handle this topic`);e.url=i.relativeURL;let o=i.Resource;return Xe(r,()=>n?t===void 0?o.delete(e,r):o.put(e,e.data,r):o.publish(e,e.data,r))}var nH,Io,iH,oH,yR,fl,lE,_E,CR,cH=Ae(()=>{ge();Pu();nH=v(wr()),Io=v(G());Xi();iH=v(Ye()),oH=v(sH());sr();yR=dt({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"}]}}]}),fl=dt({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,iH.getWorkerIndex)()===0&&(async()=>{await oH.when_components_loaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of fl.search({})){let t=e.data,r=Object.assign({},e);r.user?.username&&(r.user=await _t.getUser(r.user.username)),Xe(r,()=>{try{wR(r,t)}finally{fl.delete(e.id,r)}})}})();a(aH,"getSession");lE=1;a(IR,"getNextMessageId");_E=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;subscriptions=[];awaitingAcks;sessionWasPresent;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,s){let{topic:n,rh:i,startTime:o}=t,c=n.indexOf("?"),u,_;if(c>-1?(u=n.slice(c),_=n.slice(0,c)):_=n,!_)throw new Error("No topic provided");if(_.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");let l=this.subscriptions.find(R=>R.topic===n),d;l?(d=i>0,l.end(),this.subscriptions.splice(this.subscriptions.indexOf(l),1)):d=i===2;let f={search:u,async:!0,authorize:!0,user:this.user,startTime:o,omitCurrent:d,url:""};o&&(0,Io.trace)("Resuming subscription from",n,"from",o);let E=pi.getMatch(_);if(!E){let R=new Error(`The topic ${n} 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 I=R.split("/"),w;for(let q=0;q<I.length;q++)if(I[q].indexOf("+")>-1)if(I[q]==="+")w=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(s&&w)throw new Error("Filters can not be combined");let B=!0;I[I.length-1]==="#"&&(I.length--,B=!1),w&&(s=a(q=>{let P=q.id;if(!Array.isArray(P)||B&&P.length!==I.length)return!1;for(let Q=0;Q<I.length;Q++)if(I[Q]!=="+"&&I[Q]!==P[Q])return!1;return!0},"filter"));let K=I.indexOf("+");f.url="/"+(K>-1?I.slice(0,K):I).concat("").join("/")}}let h=E.path,p=E.Resource,S=await Xe(f,async()=>{let R=await p.subscribe(f);if(!R)throw new Error(`No subscription was returned from subscribe for topic ${n}`);if(!R[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${n}`);return(async()=>{for await(let I of R)try{let w;if(I.type&&I.type!=="put"&&I.type!=="delete"&&I.type!=="message"&&I.type!=="patch"||s&&!s(I))continue;r?(I.topic=n,w=this.needsAcknowledge(I)):(I.acknowledge?.(),w=IR());let B=I.id;Array.isArray(B)&&(B=Sa(B)),B==null&&(B=""),this.listener(h+"/"+B,I.value,w,t)}catch(w){(0,Io.warn)(w)}})(),R});return S.topic=n,S.qos=t.qos,this.subscriptions.push(S),S}resume(){}needsAcknowledge(t){let r=IR();return t.acknowledge&&(this.awaitingAcks||(this.awaitingAcks=new Map),this.awaitingAcks.set(r,t.acknowledge)),r}acknowledge(t){let r=this.awaitingAcks?.get(t);r&&(this.awaitingAcks.delete(t),r())}async removeSubscription(t){let r=this.subscriptions.find(s=>s.topic===t);if(r)return r.end(),!0}async publish(t,r){return t.user=this.user,wR(t,r)}setListener(t){this.listener=t}disconnect(t){let r={};Xe(r,async()=>{if(!t){let s=await fl.get(this.sessionId,r);s?.doesExist()&&await wR(s,s.data,r)}await fl.delete(this.sessionId,r)}).catch(s=>{(0,Io.warn)(`Error publishing MQTT will for ${this.sessionId}`,s)});for(let s of this.subscriptions)s.end();this.subscriptions=[]}};a(wR,"publish");CR=class extends _E{static{a(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,s){super(t,r),this.sessionRecord=s||{id:t,subscriptions:[]}}async resume(){for(let t of this.sessionRecord.subscriptions||[])await this.resumeSubscription({omitCurrent:!0,topic:t.topic,qos:t.qos,startTime:t.startTime},!0,t.acks?r=>!t.acks.includes(r.timestamp):null)}resumeSubscription(t,r,s){return super.addSubscription(t,r,s)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=IR(),s={topic:t.topic,timestamp:t.timestamp};return t.acknowledge&&(s.acknowledge=t.acknowledge),this.awaitingAcks.set(r,s),r}acknowledge(t){let r=this.awaitingAcks.get(t);this.awaitingAcks.delete(t),r.acknowledge?.();let s=r.topic;for(let[,n]of this.awaitingAcks)if(n.topic===s&&n.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===s){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,Io.trace)("Received ack",s,r.timestamp),this.sessionRecord.update();return}}for(let n of this.sessionRecord.subscriptions)n.topic===s&&(n.startTime=r.timestamp);this.sessionRecord.update()}async addSubscription(t,r){await this.resumeSubscription(t,r);let{qos:s,startTime:n}=t;return s>0&&!n&&(this.sessionRecord.subscriptions=this.subscriptions.map(i=>{let o=i.startTime;return o||(o=i.startTime=(0,nH.getNextMonotonicTime)()),(0,Io.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),yR.put(this.sessionRecord)),t.qos}}});var DR={};$e(DR,{bypassAuth:()=>Lse,start:()=>Use});function Lse(){fH=!0}function Use({server:e,port:t,network:r,webSocket:s,securePort:n,requireAuthentication:i}){let o=e.mqtt={requireAuthentication:i},c,u=r?.mtls;return s&&(c=e.ws((_,l,d)=>{if(_.protocol==="mqtt"){let{onMessage:f,onClose:E}=_H(_,(h,p)=>{if(_.send(h),p&&_._socket.writableNeedDrain)return new Promise(S=>this._socket.once("drain",S))},l,Promise.resolve(d).then(()=>l?.user),o);_.on("message",f),_.on("close",E),_.on("error",h=>{(0,Or.info)("WebSocket error",h)})}},{subProtocol:"mqtt"})),(t||n)&&(c=e.socket(async _=>{let l;if(u)if(_.authorized)try{let E=u.user;l!==null&&((E===void 0||E==="Common Name"||E==="CN")&&(E=_.getPeerCertificate().subject.CN),l=await e.getUser(E,null,null))}catch(E){(0,Or.error)(E)}else return(0,Or.info)(`Unauthorized connection attempt, no authorized client certificate provided, error: ${_.authorizationError}`),_.end();!l&&fH&&_.remoteAddress.includes("127.0.0.1")&&(l=await(0,dH.getSuperUser)());let{onMessage:d,onClose:f}=_H(_,E=>_.write(E),null,l,o);_.on("data",d),_.on("close",f),_.on("error",E=>{(0,Or.info)("Socket error",E)})},{port:t,securePort:n,mtls:u})),c}function _H(e,t,r,s,n){lH||(lH=!0,tu(d=>{dE>0&&d.push({metric:"mqtt-connections",connections:dE,byThread:!0})}));let i;dE++;let o,c={protocolVersion:4},u=(0,EE.parser)({protocolVersion:5});function _(d){u.parse(d)}a(_,"onMessage");function l(){dE--,i||(i=!0,o?.disconnect(),ss(!1,"connection","mqtt","disconnect"))}return a(l,"onClose"),u.on("packet",async d=>{s?.then&&(s=await s),o?.then&&await o;try{switch(d.cmd){case"connect":if(c.protocolVersion=d.protocolVersion,d.username)try{s=await _t.getUser(d.username,d.password.toString(),r),(0,fE.get)(dn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&uH.notify({username:s.username,status:dn.AUTH_AUDIT_STATUS.SUCCESS,type:dn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,fE.get)(dn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&uH.error({username:s.username,status:dn.AUTH_AUDIT_STATUS.FAILURE,type:dn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),f({cmd:"connack",reasonCode:4,returnCode:134})}if(!s&&n.requireAuthentication)return ss(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:4,returnCode:134});try{if(n.authorizeClient?.(d,s),d.will){let w=e.deserialize||(e.deserialize=mo(r?.headers.get?.("content-type")));d.will.data=d.will.payload?.length>0?w(d.will.payload):void 0,delete d.will.payload}o=aH({user:s,...d}),o=await o}catch(w){return(0,Or.error)(w),ss(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:w.code||5,returnCode:w.code||128})}ss(!0,"connection","mqtt","connect"),f({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((w,B,K,q)=>{try{let P=w.indexOf("/",1),Q=P>0?w.slice(0,P):w;f({cmd:"publish",topic:w,payload:E(B),messageId:K||Math.floor(Math.random()*1e8),qos:q.qos},Q)}catch(P){(0,Or.error)(P),o?.disconnect()}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let h=[];for(let w of d.subscriptions){let B;try{B=(await o.addSubscription(w,w.qos>=1)).qos||0}catch(K){(0,Or.error)(K),B=c.protocolVersion<5?128:K.statusCode===403?135:K.statusCode===404?143:128}h.push(B)}await o.committed,f({cmd:"suback",granted:h,messageId:d.messageId});break;case"unsubscribe":{let w=[];for(let B of d.unsubscriptions)w.push(o.removeSubscription(B)?0:17);f({cmd:"unsuback",granted:w,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=mo(r?.headers.get?.("content-type"))),R=d.payload?.length>0?S(d.payload):void 0,I;try{I=await o.publish(d,R)}catch(w){(0,Or.warn)(w),d.qos>0&&f({cmd:p,messageId:d.messageId,reasonCode:128},d.topic);break}d.qos>0&&f({cmd:p,messageId:d.messageId,reasonCode:I===!1?144:0},d.topic);break;case"pubrec":f({cmd:"pubrel",messageId:d.messageId,reasonCode:0});break;case"pubcomp":case"puback":o.acknowledge(d.messageId);break;case"pingreq":f({cmd:"pingresp"});break;case"disconnect":i=!0,o?.disconnect(!0),ss(!0,"connection","mqtt","disconnect"),e.close?e.close():e.end();break}}catch(h){(0,Or.error)(h),f({cmd:"disconnect"})}function f(h,p){let S=(0,EE.generate)(h,c);t(S),qr(S.length,"bytes-sent",p,h.cmd,"mqtt")}a(f,"sendPacket");function E(h){return Ti(h,r)}a(E,"serialize")}),{onMessage:_,onClose:l}}var EE,dH,fE,dn,Or,uH,fH,lH,dE,EH=Ae(()=>{EE=require("mqtt-packet");cH();dH=v(rs());Ta();yn();sr();fE=v(j()),dn=v(D()),Or=v(G()),uH=(0,Or.loggerWithTag)("auth-event"),fH=(0,fE.get)(dn.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(Lse,"bypassAuth");a(Use,"start");dE=0;a(_H,"onSocket")});var uf={};$e(uf,{component_errors:()=>Fa,loadComponent:()=>hE,loadComponentDirectories:()=>OH,setErrorReporter:()=>Bse});function OH(e,t){t&&(UR=t),e&&(MR=e);let r=[];if((0,Fs.existsSync)(LR)){let n=(0,Fs.readdirSync)(LR,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Ot.join)(LR,o);r.push(hE(c,UR,"hdb",!1))}}let s=process.env.RUN_HDB_APP;return s&&r.push(hE(s,UR,s,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{AH=!0})}function Bse(e){hl=e}async function hE(e,t,r,s,n,i){if(!mH.has(e)){mH.set(e,!0),n&&(MR=n);try{let o;s&&(Fa=new Map);let c=(0,Ot.join)(e,s?"harperdb-config.yaml":"config.yaml");(0,Fs.existsSync)(c)?o=s?(0,RH.getConfigObj)():(0,pH.parseDocument)((0,Fs.readFileSync)(c,"utf8"),{simpleKeys:!0}).toJSON():o=PR;let u=[],_=s;for(let l in o){let d=o[l];if(Fa.set(s?l:(0,Ot.basename)(e),!1),!d)continue;let f,E=d.package;try{if(E){let I=e,w;for(;!(0,Fs.existsSync)(w=(0,Ot.join)(I,"node_modules",l));)if(I=(0,Ot.dirname)(I),I.length<(0,gH.getHdbBasePath)().length){w=null;break}if(w)f=await hE(w,t,r,!1),_=!0;else throw new Error(`Unable to find package ${l}:${E}`)}else f=vse[l];if(!f)continue;u.push(f);let h=a(I=>(I.origin=r,dt(I)),"ensureTable"),p=d.network||(d.port||d.securePort)&&d,S=p?.securePort||p?.https&&p.port,R=!p?.https&&p?.port;if(qa.isMainThread&&(f=await f.startOnMainThread?.({server:_t,ensureTable:h,port:R,securePort:S,resources:t,...d})||f,s&&p))for(let I of[R,S])try{if(+I&&!hH.includes(I)){let w=vR.get(BR.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);w&&El.default.warn("Session affinity is not recommended and may cause memory leaks"),(w||!jf)&&(hH.push(I),TB(I,w))}}catch(w){console.error("Error listening on socket",I,w,l)}if(t.isWorker&&(f=await f.start?.({server:_t,ensureTable:h,port:R,securePort:S,resources:t,...d})||f),MR.set(f,!0),(f.handleFile||f.handleDirectory)&&d.files){if(d.files.includes(".."))throw(0,TH.handleHDBError)("Can not reference parent directories");let I=(0,Ot.join)(e,d.files).replace(/\\/g,"/"),w=I.indexOf("/*");if(w>-1&&d.files!==PR[l]?.files&&!(0,Fs.existsSync)(I.slice(0,w)))throw new Error(`The path '${I.slice(0,w)}' does not exist and cannot be used as the base of the resolved 'files' path value '${d.files}'`);let B=(0,Ot.basename)(e),K=d.path||"/";K=K.startsWith("/")?K:K.startsWith("./")?"/"+B+K.slice(2):K==="."?"/"+B:"/"+B+"/"+K;let q,P,Q;if(d.root){let J=d.root;J.startsWith("/")&&(J=J.slice(1)),J.endsWith("/")&&(J=J.slice(0,-1)),J+="/",P=(0,Ot.join)(e,J)}else(Q=I.indexOf("/*"))>-1&&(P=I.slice(0,Q+1),q=(0,Ot.relative)(e,P));let Y=!1;if(qa.isMainThread&&f.setupDirectory&&(Y=await f.setupDirectory?.(K,P,t)),t.isWorker&&f.handleDirectory&&(Y=await f.handleDirectory?.(K,P,t)),Y)continue;for(let J of await(0,SH.default)(I,{onlyFiles:!1,objectMode:!0})){let{path:re,dirent:Ie}=J;_=!0;let se=(0,Ot.relative)(e,re).replace(/\\/g,"/");if(q)if(se.startsWith(q))se=se.slice(q.length+1);else throw new Error(`The root path '${d.root}' does not reference a valid part of the file path '${se}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`);let ut=K+(K.endsWith("/")?"":"/")+se;try{if(Ie.isFile()){let de=await Pse(re);qa.isMainThread&&await f.setupFile?.(de,ut,re,t),t.isWorker&&await f.handleFile?.(de,ut,re,t)}else qa.isMainThread&&await f.setupDirectory?.(ut,re,t),t.isWorker&&await f.handleDirectory?.(ut,re,t)}catch(de){de.message=`Could not load ${Ie.isFile()?"file":"directory"} '${re}'${d.module?" using '"+d.module+"'":""} for application '${e}' due to: ${de.message}`,hl?.(de),((0,Ga.getWorkerIndex)()===0?console:El.default).error(de),t.set(d.path||"/",new ml(de)),Fa.set(s?l:(0,Ot.basename)(e),de.message)}}}}catch(h){h.message=`Could not load component '${l}' for application '${(0,Ot.basename)(e)}' due to: ${h.message}`,hl?.(h),((0,Ga.getWorkerIndex)()===0?console:El.default).error(h),t.set(d.path||"/",new ml(h),null,!0),Fa.set(s?l:(0,Ot.basename)(e),h.message)}}if(qa.isMainThread&&!AH&&i&&(0,Ga.watchDir)(e,async()=>OH()),o.extensionModule)return await Xl((0,Ot.join)(e,o.extensionModule));if(!_&&t.isWorker){let l=`${e} did not load any modules, resources, or files, is this a valid component?`;hl?.(new Error(l)),((0,Ga.getWorkerIndex)()===0?console:El.default).error(l),Fa.set((0,Ot.basename)(e),l)}}catch(o){console.error(`Could not load application directory ${e}`,o),o.message=`Could not load application due to ${o.message}`,hl?.(o),t.set("",new ml(o))}}}var Fs,Ot,qa,pH,vR,BR,SH,Ga,El,TH,gH,Mse,RH,Pse,LR,MR,AH,UR,Fa,vse,PR,hH,mH,hl,ml,lf=Ae(()=>{Fs=require("fs"),Ot=require("path"),qa=require("worker_threads"),pH=require("yaml"),vR=v(j()),BR=v(D());HO();GO();kO();gv();cB();EB();SH=v(require("fast-glob")),Ga=v(Ye()),El=v(G());Oh();sr();TH=v(Z());Ns();ge();gB();gH=v(j()),Mse=v(NB());ef();VB();EH();RH=v(Pr());Zf();({readFile:Pse}=Fs.promises),LR=vR.get(BR.CONFIG_PARAMS.COMPONENTSROOT),MR=new Map,Fa=new Map;a(OH,"loadComponentDirectories");vse={REST:Nf,rest:Nf,graphqlSchema:Ah,jsResource:Nh,fastifyRoutes:Zg,login:Ih,static:eR,operationsApi:Mse,customFunctions:{},http:{},clustering:pR,authentication:vu,mqtt:DR},PR={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(PR,"static",{value:{files:"web/**"}});hH=[],mH=new Map;a(Bse,"setErrorReporter");a(hE,"loadComponent");ml=class extends qt{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 NR=T((ape,NH)=>{var{isMainThread:bH}=require("worker_threads"),{getTables:Hse}=(ge(),ee(xe)),{loadComponentDirectories:xse,loadComponent:qse}=(lf(),ee(uf)),{resetResources:Fse}=(Pu(),ee(HM)),Gse=VT(),kse=Pr(),{dirname:Vse}=require("path"),{getConnection:$se}=nt(),Yse=j(),Kse=D(),HR=new Map;async function Wse(e=!1){!bH&&Yse.get(Kse.CONFIG_PARAMS.CLUSTERING_ENABLED)&&$se();try{bH&&await Gse()}catch(s){console.error(s)}let t=Fse();Hse(),t.isWorker=e,await qse(Vse(kse.getConfigFilePath()),t,"hdb",!0,HR),await xse(HR,t);let r=[];for(let[s]of HR)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}a(Wse,"loadRootComponents");NH.exports.loadRootComponents=Wse});var Ye=T((upe,yi)=>{"use strict";var{Worker:Qse,MessageChannel:zse,parentPort:fn,isMainThread:kR,threadId:Jse,workerData:Gn}=require("worker_threads"),{PACKAGE_ROOT:Xse}=D(),{join:CH,isAbsolute:jse,extname:Zse}=require("path"),{server:DH}=(sr(),ee(Li)),{watch:ene,readdir:tne}=require("fs/promises"),{totalmem:yH}=require("os"),pl=D(),LH=j(),kn=G(),{randomBytes:rne}=require("crypto"),{_assignPackageExport:sne}=require("../index"),nne=D(),IH=1024*1024,Ni=[],Es=[],ine=50,VR=1e4,one="restart",UH="request_thread_info",MH="resource_report",PH="thread_info",vH="added-port",ane="ack",xR;sne("threads",Es);yi.exports={startWorker:qR,restartWorkers:YR,shutdownWorkers:dne,workers:Ni,setMonitorListener:gne,onMessageFromWorkers:fne,onMessageByType:GH,broadcast:hne,broadcastWithAcknowledgement:pne,setChildListenerByType:_ne,getWorkerIndex:BH,getWorkerCount:HH,getTicketKeys:xH,setMainIsWorker:une,setTerminateTimeout:cne,restartNumber:Gn?.restartNumber||1};Es.onMessageByType=GH;Es.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=Es.find(s=>s.threadId===e);if(r)return r.postMessage(t),!0};var $R;function cne(e){VR=e}a(cne,"setTerminateTimeout");function BH(){return Gn?Gn.workerIndex:$R?0:void 0}a(BH,"getWorkerIndex");function HH(){return Gn?Gn.workerCount:$R?1:void 0}a(HH,"getWorkerCount");function une(e){$R=e}a(une,"setMainIsWorker");var mE;function xH(){return mE||(mE=kR?rne(48):Gn.ticketKeys,mE)}a(xH,"getTicketKeys");Object.defineProperty(DH,"workerIndex",{get(){return BH()}});Object.defineProperty(DH,"workerCount",{get(){return HH()}});var qH={[UH](e,t){Sne(t)},[MH](e,t){Tne(t,e)}};function qR(e,t={}){let r=process.constrainedMemory?.()||yH();r=Math.min(r,yH(),2e4*IH);let s=LH.get(pl.CONFIG_PARAMS.MAXHEAPMEMORY)??Math.max(Math.floor(r/IH/(10+(t.threadCount||1)/4)),512),n=Math.min(Math.max(s>>6,16),64),i=[],o=[];for(let u of Es){let _=new zse;_.existingPort=u,i.push(_),o.push(_.port2)}Zse(e)||(e+=".js");let c=new Qse(jse(e)?e:CH(Xse,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:s,maxYoungGenerationSizeMb:n},execArgv:["--enable-source-maps"],argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(u=>u.existingPort.threadId),workerIndex:t.workerIndex,workerCount:t.threadCount,name:t.name,restartNumber:yi.exports.restartNumber,ticketKeys:xH()},transferList:o},t));for(let{port1:u,existingPort:_}of i)_.postMessage({type:vH,port:u,threadId:c.threadId},[u]);return SE(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>qR(e,t),c.on("error",u=>{console.error("Worker error:",u),kn.error("Worker error:",u)}),c.on("exit",u=>{Ni.splice(Ni.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<ine?(t.unexpectedRestarts=c.unexpectedRestarts+1,qR(e,t)):kn.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",u=>{qH[u.type]?.(u,c)}),Ni.push(c),Ane(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(qR,"startWorker");var lne=[pl.THREAD_TYPES.HTTP];async function YR(e=null,t=2,r=!0){if(kR){if(r){let{loadRootComponents:o}=NR();await o()}yi.exports.restartNumber++,t<1&&(t=t*Ni.length);let s=[],n=[];for(let o of Ni.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;kn.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:yi.exports.restartNumber,type:pl.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=lne.indexOf(o.name)>-1,u=new Promise(_=>{let l=setTimeout(()=>o.terminate(),VR*2).unref();o.on("exit",()=>{clearTimeout(l),s.splice(s.indexOf(u)),!c&&r&&o.startCopy(),_()})});if(s.push(u),c&&r){let _=o.startCopy(),l=new Promise(d=>{let f=a(E=>{E.type===nne.ITC_EVENT_TYPES.CHILD_STARTED&&(kn.trace("Worker has started",_.threadId),d(),n.splice(n.indexOf(l)),_.off("message",f))},"startListener");kn.trace("Waiting for worker to start",_.threadId),_.on("message",f)});n.push(l),s.length>=t&&await Promise.race(s),n.length>=t&&await Promise.race(n)}}await Promise.all(s),await Promise.all(n);let{restartService:i}=Qd();r&&(e==="http"||!e)&&LH.get(pl.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else fn.postMessage({type:one,workerType:e})}a(YR,"restartWorkers");function _ne(e,t){qH[e]=t}a(_ne,"setChildListenerByType");function dne(e){return YR(e,1/0,!1)}a(dne,"shutdownWorkers");var FH=[];function fne(e){FH.push(e)}a(fne,"onMessageFromWorkers");var FR=new Map;function GH(e,t){let r=FR.get(e);r||FR.set(e,r=[]),r.push(t)}a(GH,"onMessageByType");var Ene=10;async function hne(e){let t=0;for(let r of Es)try{r.postMessage(e),t++>Ene&&(t=0,await new Promise(setImmediate))}catch(s){kn.error("Unable to send message to worker",s)}}a(hne,"broadcast");var pE=new Map,mne=1;function pne(e){return new Promise(t=>{let r=0;for(let s of Es)try{let n=mne++,i=a(()=>{pE.delete(n),--r===0&&t(),s!==fn&&--s.refCount===0&&s.unref()},"ack_handler");i.port=s,s.ref(),s.refCount=(s.refCount||0)+1,pE.set(e.requestId=n,i),s.hasAckCloseListener||(s.hasAckCloseListener=!0,s.on(s.close?"close":"exit",()=>{for(let[,o]of pE)o.port===s&&o()})),s.postMessage(e),r++}catch(n){kn.error("Unable to send message to worker",n)}r===0&&t()})}a(pne,"broadcastWithAcknowledgement");function Sne(e){e.postMessage({type:PH,workers:kH()})}a(Sne,"sendThreadInfo");function kH(){let e=Date.now();return Ni.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(kH,"getChildWorkerInfo");function Tne(e,t){e.resources=t,e.resources.updated=Date.now()}a(Tne,"recordResourceReport");var GR;function gne(e){GR=e}a(gne,"setMonitorListener");var Rne=1e3,wH=!1;function Ane(){wH||(wH=!0,setInterval(()=>{for(let e of Ni){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}GR&&GR()},Rne).unref())}a(Ane,"startMonitoring");var One=1e3;if(fn){SE(fn);for(let e=0,t=Gn.addPorts.length;e<t;e++){let r=Gn.addPorts[e];r.threadId=Gn.addThreadIds[e],SE(r)}setInterval(()=>{let e=process.memoryUsage();fn.postMessage({type:MH,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},One).unref(),xR=a(()=>new Promise((e,t)=>{fn.on("message",r),fn.postMessage({type:UH});function r(s){s.type===PH&&(fn.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else xR=kH;yi.exports.getThreadInfo=xR;function SE(e,t){Es.push(e),e.on("message",r=>{if(r.type===vH)r.port.threadId=r.threadId,SE(r.port);else if(r.type===ane){let s=pE.get(r.id);s&&s()}else{for(let n of FH)n(r,e);let s=FR.get(r.type);if(s)for(let n of s)try{n(r,e)}catch(i){kn.error(i)}}}).on("close",()=>{Es.splice(Es.indexOf(e),1)}).on("exit",()=>{Es.splice(Es.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(SE,"addPort");if(kR){let e,t,r=a(async(s,n)=>{n&&(e=n);for(let i of await tne(s,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(CH(s,i.name));try{for await(let{filename:i}of ene(s,{persistent:!1}))t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await YR(),console.log("Reloaded HarperDB components")},100)}catch(i){console.warn("Error trying to watch component directory",s,i)}},"watch_dir");yi.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else fn.on("message",async e=>{let{type:t}=e;t===pl.ITC_EVENT_TYPES.SHUTDOWN&&(yi.exports.restartNumber=e.restartNumber,fn.unref(),setTimeout(()=>{kn.warn("Thread did not voluntarily terminate",Jse),process.exit(0)},VR).unref())})});var Qw={};$e(Qw,{AUDIT_STORE_OPTIONS:()=>jH,createAuditEntry:()=>r_,openAuditStore:()=>AE,readAuditEntry:()=>Pt,setAuditRetention:()=>Nne,transactionKeyEncoder:()=>XH});function AE(e){let t=e.auditStore=e.openDB(QH.AUDIT_STORE_NAME,jH);t.rootStore=e;let r=[];t.addDeleteRemovalCallback=function(i,o){return r[i]=o,{remove(){delete r[i]}}};let s=null;function n(i=TE){clearTimeout(s),s=setTimeout(async()=>{if(t.rootStore.status==="closed")return;let o=0,c;try{for(let{key:u,value:_}of t.getRange({start:0,snapshot:!1,end:Date.now()-KR})){if((_[0]&15)===zR){let l=Pt(_),d=l.tableId;r[d]?.(l.recordId)}if(c=t.remove(u),await new Promise(setImmediate),++o>=bne){i=10;break}}await c}finally{o===0&&(i=Math.min(i<<1,KR/10)),n(i)}},i).unref()}return a(n,"scheduleAuditCleanup"),t.scheduleAuditCleanup=n,(0,RE.getWorkerIndex)()===(0,RE.getWorkerCount)()-1&&n(TE),t}function Nne(e,t=TE){KR=e,TE=t}function r_(e,t,r,s,n,i,o){let c=ZH[i];if(!c)throw new Error(`Invalid audit entry type ${i}`);let u=1;s&&(s>1?ka.setFloat64(0,s):hs.set(kh),u=9),f(0),f(t),d(r),ka.setFloat64(u,e),u+=8,n?d(n):hs[u++]=0,hs[s?8:0]=c;let l=hs.subarray(0,u);if(o)return Buffer.concat([l,o]);return l;function d(E){let h=u;u+=1,u=(0,Va.writeKey)(E,hs,u);let p=u-h-1;p>127?p>16383?(XR.error("Key or username was too large for audit entry",E),u=h+1,hs[h]=0):(hs.copyWithin(h+2,h+1,u),ka.setUint16(h,p|32768),u++):hs[h]=p}function f(E){E<128?hs[u++]=E:E<16384?(ka.setUint16(u,E|32768),u+=2):E<1056964608?(ka.setUint32(u,E|3221225472),u+=4):(hs[u]=255,ka.setUint32(u+1,E),u+=5)}}function Pt(e){try{let t=e.dataView||(e.dataView=new JR(e.buffer,e.byteOffset,e.byteLength)),r;e[0]==66&&(r=t.readFloat64());let s=t.readInt(),n=t.readInt(),i=t.readInt(),o=t.readInt(),c=t.position,u=t.position+=o,_=t.readFloat64();o=t.readInt();let l=t.position,d=t.position+=o;return{type:ZH[s&7],tableId:i,get recordId(){return WH(e,c,u)},version:_,previousLocalTime:r,get user(){return d>l?WH(e,l,d):void 0},getValue(f,E,h){if(s&WR||s&QR&&!E)return f.decoder.decode(e.subarray(t.position));if(s&QR&&h)return jR(f.getEntry(this.recordId),h,f)}}}catch{return XR.error("Reading audit entry error",e),{}}}function WH(e,t,r){let s=e.subarray(t,r);return(0,Va.readKey)(s,0,r-t)}var Va,gE,QH,zH,RE,JH,XR,hs,ka,XH,jH,KR,bne,TE,WR,QR,VH,zR,$H,YH,KH,ZH,JR,Pi=Ae(()=>{Va=require("ordered-binary"),gE=v(j()),QH=v(mt()),zH=v(D()),RE=v(Ye()),JH=v(z());Tc();XR=v(G());OE();(0,gE.initSync)();hs=Buffer.alloc(1024),ka=new DataView(hs.buffer,hs.byteOffset,1024),XH={writeKey(e,t,r){return e===Sc?(t.set(Sc,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,Va.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,Va.readKey)(e,t,r)}},jH={encoding:"binary",keyEncoder:XH},KR=(0,JH.convertToMS)((0,gE.get)(zH.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,bne=1e3,TE=1e4;a(AE,"openAuditStore");a(Nne,"setAuditRetention");WR=16,QR=32,VH=1,zR=2,$H=3,YH=4,KH=5,ZH={put:VH|WR,[VH]:"put",delete:zR,[zR]:"delete",message:$H|WR,[$H]:"message",invalidate:YH,[YH]:"invalidate",patch:KH|QR,[KH]:"patch"};a(r_,"createAuditEntry");a(Pt,"readAuditEntry");JR=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(WH,"readKeySafely")});var ZR={};$e(ZR,{add:()=>bE,applyReverse:()=>ex,getRecordAtTime:()=>jR,rebuildUpdateBefore:()=>NE});function bE(e,t,r){isNaN(e[t])?e[t]=r.value:e[t]+=r.value}function NE(e,t){let r=null;for(let s in e)if(s in t){let n=t[s];if(n?.__op__){let i=e[s];if(i?.__op__)if(i.__op__===n.__op__)r||(r={}),r[s]=i;else throw new Error("Can not merge updates with different operations");else r||(r={}),r[s]=i,bE(r,s,n)}}else r||(r={}),r[s]=e[s];return r}function ex(e,t){for(let r in t){let s=t[r];if(s?.__op__){let n=yne[s.__op__]?.reverse;if(n)n(e,r,{value:s.value});else throw new Error(`Unsupported operation ${s.__op__}`)}else e[r]=tx}}function jR(e,t,r){let s=r.rootStore.auditStore,n=Object.assign({},e.value),i=e.localTime;for(;i>t;){let u=s.get(i),_=Pt(u);switch(_.type){case"put":n=_.getValue(r);break;case"patch":ex(n,_.getValue(r));break;case"delete":n=null}i=_.previousLocalTime}let o={},c=0;for(let u in n)n[u]===tx&&(o[u]=!0,c++);for(;c>0&&i>0;){let u=s.get(i),_=Pt(u),l;switch(_.type){case"put":l=_.getValue(r);break;case"patch":l=_.getValue(r);break}for(let d in l)o[d]&&(n[d]=l[d],o[d]=!1,c--);i=_.previousLocalTime}if(c>0)for(let u in o)n[u]=null;return n}var yne,tx,OE=Ae(()=>{Pi();a(bE,"add");bE.reverse=function(e,t,r){isNaN(e[t])||(e[t]-=r.value)};yne={add:bE};a(NE,"rebuildUpdateBefore");a(ex,"applyReverse");tx={};a(jR,"getRecordAtTime")});function Yr(e){return e[Ut]||(e[Ut]=Object.create(null))}function DE(e,t){let r=e.prototype,s={},n=t.attributes||t.properties||[];for(let o of n){let c=o.name,u,_;if(o.resolve)_={get(){return o.resolve(this,this[Re])},set(l){return o.set(this,l)},configurable:!0};else{switch(o.type){case"String":u=a(function(l){if(!(typeof l=="string"||l==null&&o.nullable!==!1))throw new ms.ClientError(`${c} must be a string, attempt to assign ${l}`);Yr(this)[c]=l},"set");break;case"ID":u=a(function(l){if(!(typeof l=="string"||l?.length>0&&l.every?.(d=>typeof d=="string")||l==null&&o.nullable!==!1))throw new ms.ClientError(`${c} must be a string, attempt to assign ${l}`);Yr(this)[c]=l},"set");break;case"Float":case"Number":u=a(function(l){if(!(typeof l=="number"||l==null&&o.nullable!==!1))throw new ms.ClientError(`${c} must be a number, attempt to assign ${l}`);Yr(this)[c]=l},"set");break;case"Int":u=a(function(l){if(!(l>>0===l||l==null&&o.nullable!==!1))if(typeof l=="number"&&Math.abs((l>>0)-l)<=1)l=Math.round(l);else throw new ms.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${l}`);Yr(this)[c]=l},"set");break;case"Long":u=a(function(l){if(!(Math.round(l)===l&&Math.abs(l)<=9007199254740992||l==null&&o.nullable!==!1))if(typeof l=="number"&&Math.abs(l)<=9007199254740992)l=Math.round(l);else throw new ms.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${l}`);Yr(this)[c]=l},"set");break;case"BigInt":u=a(function(l){if(!(typeof l=="bigint"||l==null&&o.nullable!==!1))if(typeof l=="string"||typeof l=="number")l=BigInt(l);else throw new ms.ClientError(`${c} must be a number, attempt to assign ${l}`);Yr(this)[c]=l},"set");break;case"Boolean":u=a(function(l){if(!(typeof l=="boolean"||l==null&&o.nullable!==!1))throw new ms.ClientError(`${c} must be a boolean, attempt to assign ${l}`);Yr(this)[c]=l},"set");break;case"Date":u=a(function(l){if(!(l instanceof Date||l==null&&o.nullable!==!1))if(typeof l=="string"||typeof l=="number")l=new Date(l);else throw new ms.ClientError(`${c} must be a Date, attempt to assign ${l}`);Yr(this)[c]=l},"set");break;case"Bytes":u=a(function(l){if(!(l instanceof Uint8Array||l==null&&o.nullable!==!1))throw new ms.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${l}`);Yr(this)[c]=l},"set");break;case"Any":case void 0:u=a(function(l){Yr(this)[c]=l},"set");break;default:u=a(function(l){if(!(typeof l=="object"||l==null&&o.nullable!==!1))throw new ms.ClientError(`${c} must be an object, attempt to assign ${l}`);Yr(this)[c]=l},"set")}_={get(){let l=this[Ut];if(l&&c in l){let f=l[c];if(f?.__op__){let E=this[ye]?.[c];return f.update(E)}return f}let d=this[ye]?.[c];if(d&&typeof d=="object"){let f=rx(d,o);if(f)return l||(l=this[Ut]=Object.create(null)),l[c]=f}return d},set:u,enumerable:!0,configurable:!0}}_.get.isAttribute=!0,s[c]=_,(!(c in r)||Object.getOwnPropertyDescriptor(r,c)?.get?.isAttribute)&&Object.defineProperty(r,c,_)}i("getProperty",function(o){let c=s[o];if(c)return c.get.call(this);let u=this[Ut];return u?.[o]!==void 0?u[o]:this[ye]?.[o]}),i("set",function(o,c){let u=s[o];if(u)return u.set.call(this,c);if(t.sealed)throw new ms.ClientError("Can not add a property to a sealed table schema");Yr(this)[o]=c}),i("deleteProperty",function(o){Yr(this)[o]=void 0}),i("toJSON",function(){let o=this[Ut],c;for(let _ in o){c||(c=Object.assign({},this[ye]));let l=o[_];if(l?.__op__){let d=c[_];l=l.update(d)}c[_]=l}return Object.keys(this).length>0&&(c||(c=Object.assign({},this[ye])),Object.assign(c,this)),c||this[ye]}),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 rx(e,t){let r;switch(e.constructor){case Object:return t?((r=t.TrackedObject)||(t.TrackedObject=r=class{static{a(this,"TrackedObject")}constructor(n){this[ye]=n}},DE(r,t)),new r(e)):new yE(e);case Array:let s=new wE(e.length);s[ye]=e;for(let n=0,i=e.length;n<i;n++){let o=e[n];o&&typeof o=="object"&&(o=rx(o,t?.elements)),s[n]=o}return s;default:return e}}function X_(e){let t=e[Ut],r;for(let n in t){r||(r=Object.assign({},e[ye]));let i=t[n];if(i&&typeof i=="object")if(i.__op__){let o=r[n];i=i.update(o)}else i=X_(i);r[n]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[ye])),Object.assign(r,e)),r||e[ye]}function Co(e,t=e[Ut]){let r;if(e[ye]&&e.constructor===Array&&!Object.isFrozen(e)){r=e;for(let s=0,n=e.length;s<n;s++){let i=e[s];if(i&&typeof i=="object"){let o=Co(i);o!==i&&r===e&&(r=e.slice(0)),i=o}r[s]=i}return Object.freeze(r)}for(let s in t){r||(r=Object.assign({},e[ye]));let n=t[s];if(n&&typeof n=="object")if(n.__op__){let i=ZR[n?.__op__];if(i)i(r,s,n);else throw new Error("Invalid CRDT operation "+n.__op__);continue}else n=Co(n);r[s]=n}return r?Object.freeze(r):e[ye]||e}function IE(e){let t=e[ye];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[wo]||e.length!==t.length)return!0;for(let r=0,s=e.length;r<s;r++){let n=t[r],i=e[r];if(n&&i?.[ye]===n){if(IE(i))return!0}else return!0}}else{let r=e[Ut];if(r&&!t)return!0;for(let s in r){let n=r[s];if(n&&typeof n=="object"){let i=t[s];if(i&&n[ye]===i){if(IE(n))return!0}else return!0}else return!0}}return!1}var ms,Ut,yE,wo,wE,CE,j_=Ae(()=>{Ns();ms=v(Z());OE();Ut=Symbol("own-data");a(Yr,"getChanges");a(DE,"assignTrackedAccessors");a(rx,"trackObject");yE=class{static{a(this,"GenericTrackedObject")}constructor(t){this[ye]=t}};DE(yE,{});a(X_,"collapseData");a(Co,"deepFreeze");a(IE,"hasChanges");wo=Symbol.for("has-array-changes"),wE=class extends Array{static{a(this,"TrackedArray")}[wo];constructor(t){super(t)}splice(...t){return this[wo]=!0,super.splice(...t)}push(...t){return this[wo]=!0,super.push(...t)}pop(){return this[wo]=!0,super.pop()}unshift(...t){return this[wo]=!0,super.unshift(...t)}shift(){return this[wo]=!0,super.shift()}};wE.prototype.constructor=Array;CE=class{constructor(t){this.value=t}static{a(this,"Addition")}__op__="add";update(t){return(+t||0)+this.value}}});var Sp={};$e(Sp,{CONTEXT:()=>Re,ID_PROPERTY:()=>De,IS_COLLECTION:()=>ps,RECORD_PROPERTY:()=>ye,Resource:()=>qt,snake_case:()=>wne,transformForSelect:()=>UE});function wne(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function sx(e,t){if(Sl=!1,e==="")return null;if(e=e.slice(1),e.indexOf("/")===-1)return e===""?(Sl=!0,null):(e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e)));let r=e.split("/"),s=new tA;for(let n=0;n<r.length;n++){let i=r[n];if(!i&&n===r.length-1){Sl=!0;break}s[n]=t.coerceId(decodeURIComponent(i))}return s}function Kr(e,t){s.reliesOnPrototype=!0;let r=t.hasContent;return s;function s(n,i,o){let c,u,_,l;if(r?o?(l=i,o=o[Re]||o):i?typeof n=="object"&&n&&(!Array.isArray(n)||typeof n[0]=="object")?(l=n,c=l[this.primaryKey]??null,o=i[Re]||i):l=i:(l=n,c=l[De]??l[this.primaryKey]??null):i?o=i[Re]||i:n&&typeof n=="object"&&!Array.isArray(n)&&(o=n),c===void 0)if(typeof n=="string")c=n;else if(typeof n=="object"&&n)if(u=n,n[Symbol.iterator]){c=[],_=!0;for(let E of n){if(typeof E=="object"&&E)break;c.push(E)}c.length===0?c=null:(c.length===1&&(c=c[0]),u.slice&&(u=u.slice(c.length,u.length),u.length===0&&(u=null,_=!1)))}else{if(typeof(c=n.url)=="string"){let E=c.indexOf("?");if(E>-1){let p=this.parseQuery(c.slice(E+1));u?u=Object.assign(p,u):u=p,c=c.slice(0,E)}let h=this.parsePath(c,o,u);h?.id!==void 0?(h.query&&(u?u=Object.assign(h.query,u):u=h.query),_=h.isCollection,c=h.id):c=h}c===void 0&&(c=n.id??null,c==null&&(_=!0))}else c=n??null,c==null&&(_=!0);o||(o={});let d;if(u?.ensureLoaded!=null||u?.async||_?(d=Object.assign({},t),u?.ensureLoaded!=null&&(d.ensureLoaded=u.ensureLoaded),u?.async&&(d.async=u.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,u,o):t.type==="update"?E.doesExist?.()===!1?E.allowCreate(o.user,l,o):E.allowUpdate(o.user,l,o):t.type==="create"?E.allowCreate(o.user,l,o):E.allowDelete(o.user,u,o);if(h?.then)return h.then(p=>{if(!p)throw new LE(o.user);return typeof l?.then=="function"?l.then(S=>e(E,u,o,S)):e(E,u,o,l)});if(!h)throw new LE(o.user)}return typeof l?.then=="function"?l.then(h=>e(E,u,o,h)):e(E,u,o,l)}a(f,"authorizeActionOnResource")}}function Wr(e,t){let r=new ox.ClientError(`The ${e.constructor.name} does not have a ${t} method implemented`,405);r.allow=[],r.method=t;for(let s of["get","put","post","delete","query","move","copy"])typeof e[s]=="function"&&r.allow.push(s);throw r}function eA(e,t,r){let s=e[ye];if(s){let n=e[Ut];return i=>{let o,c;return e.hasOwnProperty(i)&&typeof(o=e[i])!="function"?o:n&&i in n?n[i]:(c=t?.[i])?c(e,r):s[i]}}else return t?n=>{let i=t[n];return i?i(e,r):e[n]}:n=>e[n]}function UE(e,t){let r=t?.propertyResolvers,s=t[Re],n;if(typeof e=="string")return a(function o(c){return c.then?c.then(o):Array.isArray(c)?c.map(o):eA(c,r,s)(e)},"transform");if(typeof e=="object"){if(e.asArray)return a(function c(u){if(u.then)return u.then(c);if(Array.isArray(u))return u.map(c);let _=[],l=i(eA(u,r,s));for(let d of e)_.push(l(d));return _},"transform");let o=e.forceNulls;return a(function c(u){if(u.then)return u.then(c);if(Array.isArray(u))return u.map(f=>f&&typeof f=="object"?c(f):f);let _={},l=i(eA(u,r,s)),d;for(let f of e){let E=l(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){n||(n={});let u=n[c.name];if(!u){let l=r[c.name]?.definition?.tableClass;u=n[c.name]=UE(c.select||c,l)}let _=o(c.name);return u(_)}else return o(c);else return c}}a(i,"handleProperty")}var nx,ix,ox,Re,De,ps,ye,Ine,qt,LE,Sl,tA,Ns=Ae(()=>{nx=require("crypto");dc();ix=require("../index"),ox=v(Z());j_();Xi();bf();Re=Symbol.for("context"),De=Symbol.for("primary-key"),ps=Symbol("is-collection"),ye=Symbol("stored-record"),Ine={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},qt=class{static{a(this,"Resource")}static transactions;constructor(t,r){this[De]=t;let s=r?.[Re];this[Re]=s!==void 0?s:r||null}static get=Kr(function(t,r,s,n){let i=t.get?.(r);if(i?.then)return i.then(o);return o(i);function o(c){let u;if((u=r?.select)&&c!=null&&!c.selectApplied){let _=UE(u,t.constructor);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",resetTransaction:!0,ensureLoaded:!0,async:!0});static put=Kr(function(t,r,s,n){if(Array.isArray(n)&&t[ps]){let i=[],o=s.authorize;for(let c of n){let u=t.constructor,_=u.getResource(c[u.primaryKey],s,{async:!0});_.then?i.push(_.then(l=>l.put(c,s))):i.push(_.put(c,s))}return Promise.all(i)}return t.put?t.put(n,r):Wr(t,"put")},{hasContent:!0,type:"update"});static patch=Kr(function(t,r,s,n){return t.patch?t.patch(n,r):Wr(t,"patch")},{hasContent:!0,type:"update"});static delete=Kr(function(t,r,s,n){return t.delete?t.delete(r):Wr(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,nx.randomUUID)()}static create(t,r,s){let n;return t==null?n=this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?n=[...t,this.getNewId()]:typeof t!="object"?n=[t,this.getNewId()]:(n=this.getNewId(),s=r,r=t),Xe(s,()=>{let i=new this(n,s),o=i.update?i.update(r):Wr(i,"update");return s.newLocation=n,s.createdResource=!0,o?.then?o.then(()=>n):n})}static invalidate=Kr(function(t,r,s,n){return t.invalidate?t.invalidate(r):Wr(t,"delete")},{hasContent:!1,type:"update"});static post=Kr(function(t,r,s,n){return t[De]!=null&&t.update?.(),t.post(n,r)},{hasContent:!0,type:"create"});static connect=Kr(function(t,r,s,n){return t.connect?t.connect(n,r):Wr(t,"connect")},{hasContent:!0,type:"read"});static subscribe=Kr(function(t,r,s,n){return t.subscribe?t.subscribe(r):Wr(t,"subscribe")},{type:"read"});static publish=Kr(function(t,r,s,n){return t[De]!=null&&t.update?.(),t.publish?t.publish(n,r):Wr(t,"publish")},{hasContent:!0,type:"create"});static search=Kr(function(t,r,s,n){let i=t.search?t.search(r):Wr(t,"search"),o=s.select;if(o&&s.hasOwnProperty("select")&&i!=null&&!i.selectApplied){let c=UE(o,t.constructor);return i.map(c)}return i},{type:"read"});static query=Kr(function(t,r,s,n){return t.search?t.search(n,r):Wr(t,"search")},{hasContent:!0,type:"read"});static copy=Kr(function(t,r,s,n){return t.copy?t.copy(n,r):Wr(t,"copy")},{type:"create"});static move=Kr(function(t,r,s,n){return t.move?t.move(n,r):Wr(t,"move")},{type:"delete"});post(t){if(this[ps])return this.constructor.create(this[De],t,this[Re]);Wr(this,"post")}static isCollection(t){return t?.[ps]}static coerceId(t){return t}static parseQuery(t){return Of(t)}static parsePath(t,r,s){let n=t.indexOf(".");if(n>-1){let o=t.slice(n+1);t=t.slice(0,n);let c=r?.headers&&Ine[o];if(c)r.headers.set("accept",c);else if(s)s.property=o;else return{query:{property:o},id:sx(t,this),isCollection:Sl}}let i=sx(t,this);return Sl?{id:i,isCollection:!0}:i}static getResource(t,r,s){let n,i=r[Re],o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=s?.isCollection;let c=o&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let u;if(i.resourceCache?u=i.resourceCache:u=i.resourceCache=[],u.asMap){let _=u.asMap.get(t);if(n=_?.find(l=>l.constructor===c),n)return n;_||u.asMap.set(t,_=[]),_.push(n=new c(t,i))}else{if(n=u.find(_=>_[De]===t&&_.constructor===c),n)return n;if(u.push(n=new c(t,i)),u.length>10){let _=new Map;for(let l of u){let d=l[De],f=_.get(d);f?f.push(l):_.set(d,[l])}i.resourceCache.length=0,i.resourceCache.asMap=_}}}else n=new c(t,i);return o&&(n[ps]=!0),n}subscribe(t){return new bs}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new bs}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[Re]}};qt.prototype[Re]=null;(0,ix._assignPackageExport)("Resource",qt);a(wne,"snake_case");LE=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(sx,"pathToId");tA=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(Kr,"transactional");a(Wr,"missingMethod");a(eA,"selectFromObject");a(UE,"transformForSelect")});function cx(e,t,r,s){let n=e.primaryStore.env.path,i=e.primaryStore.tableId;$a||((0,ME.onMessageByType)(ax,l=>{ux(l.path)}),$a=Object.create(null));let o=$a[n]||($a[n]=[]);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=Sa(t);let u=new sA(r);u.startTime=s;let _=c.get(t);return _?_.push(u):(c.set(t,_=[u]),_.tables=c,_.key=t),u.subscriptions=_,u}function ux(e,t){if(!$a)return;let r=$a[e];if(!r)return;try{r.auditStore.resetReadTxn()}catch(n){throw n.message+=" in "+e,n}let s;for(let{key:n,value:i}of r.auditStore.getRange({start:r.lastTxnTime,exclusiveStart:!0})){r.lastTxnTime=n;let o=Pt(i),c=r[o.tableId];if(!c)continue;let u=o.recordId,_,l=Sa(o.recordId),d=0;do{let f=c.get(l);if(f){for(let h of f)if(!(d>0&&!(h.includeDescendants&&!(h.onlyChildren&&d>1)))){if(h.startTime>=n){(0,rA.info)("omitting",u,h.startTime,n);continue}try{if(h.crossThreads===!1&&!t)continue;let p;h.supportsTransactions&&h.txnInProgress!==o.version&&(p=!0,h.txnInProgress||(s?s.push(h):s=[h]),h.txnInProgress=o.version),h.listener(u,o,n,p)}catch(p){console.error(p),(0,rA.info)(p)}}}if(l==null)break;let E=l.lastIndexOf?.("/",l.length-2);E>-1?l=l.slice(0,E):l=null,d++}while(!0)}if(s)for(let n of s)n.txnInProgress=null,n.listener(null,{type:"end_txn"},r.lastTxnTime,!0)}function lx(e,t){let r=t||e,s=r.env;if(t&&!t.cache&&(t.cache=new Map),!s.hasBroadcastListener){s.hasBroadcastListener=!0;let n=s.path;r.on("aftercommit",()=>{(0,ME.broadcast)({type:ax,path:n}),ux(n,!0)})}}var rA,ME,ax,$a,Lpe,sA,_x=Ae(()=>{rA=v(G()),ME=v(Ye());dc();Pu();Pi();ax="transaction",Lpe=Buffer.alloc(4096);a(cx,"addSubscription");sA=class extends bs{static{a(this,"Subscription")}listener;subscriptions;startTime;constructor(t){super(),this.listener=t,this.on("close",()=>this.end())}end(){if(this.subscriptions){if(this.subscriptions.splice(this.subscriptions.indexOf(this),1),this.subscriptions.length===0){let t=this.subscriptions.tables,r=this.subscriptions.key;if(t.delete(r),t.size===0){let s=t.envs,n=t.dbi;delete s[n]}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}};a(ux,"notifyFromTransactionData");a(lx,"listenToCommits")});var Bg={};$e(Bg,{coerceType:()=>PE,makeTable:()=>HE,setServerUtilities:()=>Hne,updateResource:()=>vE});function HE(e){let{primaryKey:t,indices:r,tableId:s,tableName:n,primaryStore:i,databasePath:o,databaseName:c,auditStore:u,schemaDefined:_,dbisDB:l}=e,{expirationMS:d,evictionMS:f,audit:E,trackDeletes:h}=e,{attributes:p}=e;p||(p=[]),lx(i,u);let S=Yh(i,s,u),R=0,I,w,B,K={},q=Promise.resolve(),P,Q,Y;for(let V of p)(V.assignCreatedTime||V.name==="__createdtime__")&&(P=V),(V.assignUpdatedTime||V.name==="__updatedtime__")&&(Q=V),V.expiresAt&&(Y=V),V.isPrimaryKey&&(K=V);let J,re=[],Ie=[],se=1,ut=2,de={},lt={},gs=864e5,bA,vl,Yn,NA=!1,eh,hq=i.getRange({start:!1,end:!1}).constructor,mq=10,pq=6;E&&wA();class Qe extends qt{static name=n;static primaryStore=i;static auditStore=u;static primaryKey=t;static tableName=n;static indices=r;static audit=E;static databasePath=o;static databaseName=c;static attributes=p;static expirationTimer;static createdTimeProperty=P;static updatedTimeProperty=Q;static propertyResolvers;static sources=[];static get expirationMS(){return d}static dbisDB=l;static schemaDefined=_;static sourcedFrom(m,g){g&&(this.sourceOptions=g,(g.expiration||g.eviction||g.scanInterval)&&this.setTTLExpiration(g)),g?.intermediateSource?(m.intermediateSource=!0,this.sources.unshift(m)):this.sources.push(m),w=m.get&&(!m.get.reliesOnPrototype||m.prototype.get);let N=a(b=>{let y=this.sources.slice(0,-1);if(y=y.filter(L=>L[b]&&(!L[b].reliesOnPrototype||L.prototype[b])),y.length>0)if(y.length===1){let L=y[0];return(U,M,x)=>{if(U?.source!==L)return L[b](M,x,U)}}else return(L,U,M)=>{let x=[];for(let W of y){if(L?.source===W)break;x.push(W[b](U,M,L))}return Promise.all(x)}},"getApplyToIntermediateSource"),A=this.sources[this.sources.length-1],O=a(b=>{if(A[b]&&(!A[b].reliesOnPrototype||A.prototype[b]))return(y,L,U)=>{if(!y?.source)return A[b](L,U,y)}},"getApplyToCanonicalSource");return de={put:O("put"),patch:O("patch"),delete:O("delete"),publish:O("publish")},lt={put:N("put"),patch:N("patch"),delete:N("delete"),publish:N("publish"),invalidate:N("invalidate")},(async()=>{let b=!1,y=a(async(L,U)=>{let M=L.value,x=L.table?st[c][L.table]:Qe;if(c===Gs.SYSTEM_SCHEMA_NAME&&(L.table===Gs.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||L.table===Gs.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(b=!0),L.id===void 0&&(L.id=M[x.primaryKey],L.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(L));L.source=m;let W=await x.getResource(L.id,U,Ya);switch(L.type){case"put":return W._writeUpdate(M,!0,Ya);case"patch":return W._writeUpdate(M,!1,Ya);case"delete":return W._writeDelete(Ya);case"publish":return W._writePublish(M,Ya);case"invalidate":return W.invalidate(Ya);default:Ze.error("Unknown operation",L.type,L.id)}},"writeUpdate");try{let L=m.subscribe;L&&h==null&&(h=!0);let U=m.subscribeOnThisThread?m.subscribeOnThisThread((0,Do.getWorkerIndex)()):(0,Do.getWorkerIndex)()===0,M=L&&U&&await m.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(M){let x;for await(let W of M)try{if(!(W.type==="transaction"?W.writes[0]:W)){Ze.error("Bad subscription event",W);continue}if(W.source=m,x)if(W.beginTxn)x.resolve();else{y(W,x);continue}if(W.type==="end_txn")continue;let le=Xe(W,()=>{if(W.type==="transaction"){let te=[];for(let ne of W.writes)try{te.push(y(ne,W))}catch(He){throw He.message+=" writing "+JSON.stringify(ne)+" of event "+JSON.stringify(W),He}return Promise.all(te)}else if(W.type==="define_schema"){let te=this.attributes.slice(0),ne;for(let He of W.attributes)te.find(ie=>ie.name===He.name)||(te.push(He),ne=!0);ne&&(dt({table:n,database:c,attributes:te,origin:"cluster"}),Nl.signalSchemaChange(new yl.SchemaEventMsg(process.pid,Gs.OPERATIONS_ENUM.CREATE_TABLE,c,n)))}else return W.beginTxn?(x=W,y(W,W),new Promise(te=>{x.resolve=te})):y(W,W)});b&&(await le,Nl.signalUserChange(new yl.UserEventMsg(process.pid))),W.onCommit&&(le?.then?le.then(W.onCommit):W.onCommit())}catch(Se){Ze.error("error in subscription handler",Se)}}}catch(L){Ze.error(L)}})(),this}static getResource(m,g,N){let A=super.getResource(m,g,N);if(m!=null){Xa(m);try{if(A.hasOwnProperty(ye))return A;if(typeof m=="object"&&m&&!Array.isArray(m))throw new Error(`Invalid id ${JSON.stringify(m)}`);let O=!N?.async||i.cache?.get(m),b=Nr(g),y=b.getReadTxn();if(y?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return th(m,g,{transaction:y},O,L=>{if(L?vE(A,L):A[ye]=null,g.onlyIfCached&&g.noCacheStore){if(!A.doesExist())throw new Ss.ServerError("Entry is not cached",504)}else if(N?.ensureLoaded){let U=rh(m,L,g,A);if(U)return b?.disregardReadTxn(),A[nA]=!0,oA(U,M=>(vE(A,M),A))}return A})}catch(O){throw O.message.includes("Unable to serialize object")&&(O.message+=": "+JSON.stringify(m)),O}}return A}ensureLoaded(){let m=rh(this[De],this[Qr],this[Re]);if(m)return this[nA]=!0,oA(m,g=>{this[Qr]=g,this[ye]=g.value,this[Ol]=g.version})}static setTTLExpiration(m){if(typeof m=="number")d=m*1e3,f||(f=0);else if(m&&typeof m=="object")d=m.expiration*1e3,f=(m.eviction||0)*1e3,gs=m.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(d<0)throw new Error("Expiration can not be negative");gs=gs||(d+f)/4,nh()}static enableAuditing(m=!0){E=m,m&&wA(),Qe.audit=m}static coerceId(m){return m===""?null:PE(m,K)}static async dropTable(){if(delete st[c][n],c===o){for(let m of p)l.remove(Qe.tableName+"/"+m.name),r[m.name]?.drop();l.remove(Qe.tableName+"/"),i.drop(),await l.committed}else console.log("legacy dropTable"),await i.close(),await fs.remove(data_path),await fs.remove(data_path===standard_path?data_path+MDB_LOCK_FILE_SUFFIX:path.join(path.dirname(data_path),MDB_LEGACY_LOCK_FILE_NAME));Nl.signalSchemaChange(new yl.SchemaEventMsg(process.pid,Gs.OPERATIONS_ENUM.DROP_TABLE,c,n))}get(m){if(typeof m=="string")return this.getProperty(m);if(this[ps])return this.search(m);if(this[De]===null){if(m?.conditions)return this.search(m);let g=Qe.getRecordCount();return{recordCount:g.recordCount,estimatedRecordRange:g.estimatedRange,records:"./",name:n,database:c,attributes:p}}if(m?.property)return this.getProperty(m.property);if(this.doesExist()||m?.ensureLoaded===!1||this[Re]?.returnNonexistent)return this}allowRead(m,g){let N=Hl(m);if(N?.read){if(N.isSuperUser)return!0;let A=N.attribute_permissions,O=g?.select;if(A?.length>0||NA&&O){if(g||(g={}),O){let b=A?.length>0&&iA(A,"read");g.select=O.map(y=>{let L=y.name||y;if(!b||b[L]){let U=Yn[L]?.definition?.tableClass;if(U){if(y.name||(y={name:y}),!U.prototype.allowRead.call(null,m,y))return!1;if(!y.select)return y.name}return y}}).filter(Boolean)}else g.select=A.filter(b=>b.read&&!Yn[b.attribute_name]).map(b=>b.attribute_name);return g}else return!0}}allowUpdate(m,g){let N=Hl(m);if(N?.update){let A=N.attribute_permissions;if(A?.length>0){let O=iA(A,"update");for(let b in g)if(!O[b])return!1;for(let b of A){let y=b.attribute_name;!b.update&&!(y in g)&&(g[y]=this.getProperty(y))}}return!0}}allowCreate(m,g){if(this[ps]){let N=Hl(m);if(N?.insert){let A=N.attribute_permissions;if(A?.length>0){let O=iA(A,"insert");for(let b in g)if(!O[b])return!1}else return!0}}else return this.allowUpdate(m,{})}allowDelete(m){return Hl(m)?.delete}update(m,g){if(!Nr(this[Re]))throw new Error("Can not update a table resource outside of a transaction");if(m===!1)return this;let A;return typeof m=="object"&&m&&(g?(Object.isFrozen(m)&&(m=Object.assign({},m)),this[ye]={},this[Ut]=m):(A=this[Ut],A&&(m=Object.assign(A,m)),this[Ut]=A=m)),this._writeUpdate(this[Ut],g),this}addTo(m,g){if(typeof g=="number")this[Tl]===fx?this.set(m,(+this.getProperty(m)||0)+g):(this[Tl]||this.update(),this.set(m,new CE(g)));else throw new Error("Can not add a non-numeric value")}subtractFrom(m,g){if(typeof g=="number")return this.addTo(m,-g);throw new Error("Can not subtract a non-numeric value")}invalidate(m){let g=this[Re],N=this[De];Xa(N),Nr(this[Re]).addWrite({key:N,store:i,invalidated:!0,entry:this[Qr],nodeName:this[Re]?.nodeName,before:de.invalidate?.bind(this,g,N),beforeIntermediate:lt.invalidate?.bind(this,g,N),commit:(O,b)=>{if(b?.version>O)return;let y=null;for(let L in r)y||(y={}),y[L]=this.getProperty(L);S(N,y,this[Qr],O,gl,E,this[Re],0,"invalidate")}})}static evict(m,g,N){let A=this.Source,O;if(!((w||E)&&(!g||(O=i.getEntry(m),!O||!g)||O.version!==N))){if(w){if(i.hasLock(m,O.version))return;let b;for(let y in r)b||(b={}),b[y]=g[y];if(b)return S(m,b,O,N,Rl,null,null,0,null,!0)}return i.ifVersion(N,()=>{Bl(m,g,null)}),E?S(m,null,O,N,Rl,null,null,0,null,!0):i.remove(m,N)}}lock(){throw new Error("Not yet implemented")}static operation(m,g){return m.table||=n,m.schema||=c,Tx.operation(m,g)}put(m){this.update(m,!0)}patch(m){this.update(m,!1)}_writeUpdate(m,g,N){let A=this[Re],O=Nr(A),b=this[De];Xa(b);let y=this[Qr];this[Tl]=g?fx:Pne;let L={key:b,store:i,entry:y,nodeName:A?.nodeName,validate:U=>{m||(m=this[Ut]),g||m&&IE(m)?(this.validate(m,!g),A?.source||(Q&&(m[Q.name]=Q.type==="Date"?new Date(U):Q.type==="String"?new Date(U).toISOString():U),g&&(t&&m[t]!==b&&(m[t]=b),P&&(y?.value?m[P.name]=y?.value[P.name]:m[P.name]=P.type==="Date"?new Date(U):P.type==="String"?new Date(U).toISOString():U),m=Co(m)))):O.removeWrite(L)},before:g?de.put?()=>de.put(A,b,m):null:de.patch?()=>de.patch(A,b,m):de.put?()=>de.put(A,b,Co(this)):null,beforeIntermediate:g?lt.put?()=>lt.put(A,b,m):null:lt.patch?()=>lt.patch(A,b,m):lt.put?()=>lt.put(A,b,Co(this)):null,commit:(U,M,x)=>{x&&(A&&M?.version>(A.lastModified||0)&&(A.lastModified=M.version),this[Qr]=M,g||(this[ye]=M?.value??null)),this[Ut]=m,this[Ol]=U;let W=M?.value,Se=m;if(this[Tl]=0,M?.version>U)if(E){let He=M.localTime,ie=M.version;for(;Se&&(He>U||ie>U&&He>0);){let _e=u.get(He),Ve=Pt(_e);if(ie=Ve.version,ie>U)if(Ve.type==="patch"){let Me=Ve.getValue(i);Se=NE(Se,Me)}else(Ve.type==="put"||Ve.type==="delete")&&(Se=null);He=Ve.previousLocalTime}}else g?Se=null:Se=NE(Se,W);let le=Co(this,Se);this[ye]=le;let te;g||(te=m),Bl(b,W,le);let ne=g?"put":"patch";S(b,le,M,U,0,E,A,A.expiresAt||(d?d+Date.now():0),ne,!1,te)}};O.addWrite(L)}async delete(m){if(typeof m=="string")return this.deleteProperty(m);if(this[ps]){for await(let g of this.search(m))(await Qe.getResource(g[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(m);return}return this[ye]?this._writeDelete(m):!1}_writeDelete(m){let g=Nr(this[Re]),N=this[De];Xa(N);let A=this[Re];return g.addWrite({key:N,store:i,resource:this,nodeName:A?.nodeName,before:de.delete?.bind(this,A,N),beforeIntermediate:lt.delete?.bind(this,A,N),commit:(O,b,y)=>{let L=b?.value;y&&(A&&b?.version>(A.lastModified||0)&&(A.lastModified=b.version),vE(this,b)),!(b?.version>O)&&(Bl(this[De],L),Ze.trace("Write delete entry",N,O),E||h?(S(N,null,this[Qr],O,0,E,this[Re],0,"delete"),E||nh()):i.remove(this[De]))}}),!0}search(m){let g=this[Re],N=Nr(g);if(!m)throw new Error("No query provided");let A=m.conditions;A?A.length===void 0&&(A=A[Symbol.iterator]?Array.from(A):[A]):A=Array.isArray(m)?m:m[Symbol.iterator]?Array.from(m):[],this[De]&&(A=[{attribute:null,comparator:"prefix",value:this[De]}].concat(A));let O,b={};function y(oe,bt){let tt;switch(bt){case"and":case void 0:if(oe.length<1)throw new Error('An "and" operator requires at least one condition');tt=!0;break;case"or":if(oe.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+bt)}let Mt=tt&&{},Rs;for(let Pe of oe){if(Pe.conditions){Pe.conditions=y(Pe.conditions,Pe.operator);continue}let rt=Pe[0]??Pe.attribute,As=rt==null?K:vn(p,rt);if(As){if(tt){let Ci=Oi(rt),ks=Mt[Ci];ks?(ks.push(Pe),Rs=!0):Mt[Ci]=[Pe]}As.type&&(Pe[1]===void 0?Pe.value=U(Pe.value,As):Pe[1]=U(Pe[1],As))}else if(rt!=null)throw(0,Ss.handleHDBError)(new Error,`${rt} is not a defined attribute`,404)}if(m.enforceExecutionOrder)return oe;if(Rs)for(let Pe in Mt){let rt=Mt[Pe],As=rt.length;if(As>1)for(let Ci=0;Ci<As;Ci++){let ks=rt[Ci];if(ks.comparator==="ge"||ks.comparator==="greater_than_equal")for(let Kn=0;Kn<As;Kn++){let Po=rt[Kn];(Po.comparator==="le"||Po.comparator==="less_than_equal")&&(ks.comparator="between",ks.value=[ks.value,Po.value],oe.splice(oe.indexOf(Po),1))}if(ks.comparator==="equals"||!ks.comparator){for(let Kn=0;Kn<As;Kn++)if(Kn!==Ci){let Po=rt[Kn];oe.splice(oe.indexOf(Po),1)}break}}}return oe}a(y,"prepareConditions");function L(oe,bt){if(m.enforceExecutionOrder)return oe;for(let tt of oe)tt.conditions&&(tt.conditions=L(tt.conditions,tt.operator));return oe.length>1&&bt!=="or"?(0,Sx.sortBy)(oe,Sg(Qe)):oe}a(L,"orderConditions");function U(oe,bt){return Array.isArray(oe)?oe.map(tt=>PE(tt,bt)):PE(oe,bt)}a(U,"coerceTypedValues");let M=m.operator;(A.length>0||M)&&(A=y(A,M));let x=typeof m.sort=="object"&&m.sort,W;if(x&&M!=="or"){let oe=x.attribute;if(O=A.find(bt=>Oi(bt.attribute)===Oi(oe)),!O){if(!vn(p,oe))throw(0,Ss.handleHDBError)(new Error,`${Array.isArray(oe)?oe.join("."):oe} is not a defined attribute`,404);O={attribute:oe},A.push(O)}O.descending=!!x.descending}A=L(A,M),x&&(A[0]===O?x.next&&(W={dbOrderedAttribute:x.attribute,attribute:x.next.attribute,descending:x.next.descending,next:x.next.next}):(O&&A.splice(A.indexOf(O),1),W=x));function Se(oe,bt){let tt=oe[0];if(bt==="or"){let Mt=te(tt);for(let Pe=1;Pe<oe.length;Pe++){let rt=oe[Pe],As=te(rt);Mt=Mt.concat(As)}let Rs=new Set;return Mt.filter(Pe=>{let rt=Pe.key??Pe;return Rs.has(rt)?!1:(Rs.add(rt),!0)})}else{let Mt=te(tt),Rs=oe.slice(1).map(Pe=>Zu(Pe,Qe,g,b)).filter(Boolean);return Rs.length>0?yA(Mt,ne,g,Rs):Mt}}a(Se,"executeConditions");let le=m.reverse===!0;function te(oe){return oe.conditions?Se(oe.conditions,oe.operator):ju(oe,N,oe.descending||le,Qe,m.allowFullScan,b)}a(te,"executeCondition");let ne=m.select;if(A.length===0&&(A=[{attribute:t,comparator:"greater_than",value:!0}]),m.explain)return{conditions:A,operator:M,postOrdering:W,selectApplied:!!ne};let He=N.useReadTxn(),ie=Se(A,M);(m.offset||m.limit!==void 0)&&(ie=ie.slice(m.offset,m.limit!==void 0?(m.offset||0)+m.limit:void 0));let _e=m.ensureLoaded!==!1,Ve=Qe.transformEntryForSelect(ne,g,b,_e,!0),Me=Qe.transformToOrderedSelect(ie,ne,W,g,Ve);return Me.onDone=()=>{Me.results=null,N.doneReadTxn()},Me.selectApplied=!0,Me}static transformToOrderedSelect(m,g,N,A,O){let b=new hq;if(N){m=yA(m,g,A,null);let y;b.iterate=function(){let U,M=m[Symbol.asyncIterator]?m[Symbol.asyncIterator]():m[Symbol.iterator](),x,W=N.dbOrderedAttribute,Se,le,te=!0;function ne(ie){let _e=ie.next&&ne(ie.next),Ve=ie.descending;return(Me,oe)=>{let bt=sh(Me,ie.attribute,A),tt=sh(oe,ie.attribute,A),Mt=Ve?(0,Lo.compareKeys)(tt,bt):(0,Lo.compareKeys)(bt,tt);return Mt===0?_e?.(Me,oe)||0:Mt}}a(ne,"createComparator");let He=ne(N);return{async next(){let ie;if(U)if(ie=U.next(),ie.done){if(x)return b.onDone&&b.onDone(),ie}else return{value:await O(ie.value)};y=[],Se&&y.push(Se);do if(ie=await M.next(),ie.done){if(x=!0,y.length)break;return b.onDone&&b.onDone(),ie}else{let _e=ie.value;if(_e?.then&&(_e=await _e),W){let Ve=sh(_e,W,A);if(te)te=!1,le=Ve;else if(Ve!==le){le=Ve,Se=_e;break}}y.push(_e)}while(!0);return N.isGrouped,y.sort(He),U=y[Symbol.iterator](),ie=U.next(),ie.done?(b.onDone&&b.onDone(),ie):{value:await O(ie.value)}},return(){b.onDone&&b.onDone(),M.return()},throw(){b.onDone&&b.onDone(),M.throw()}}};let L=a(U=>{if(typeof g=="object"&&Array.isArray(U.attribute))for(let M=0;M<g.length;M++){let x=g[M],W;if(x.name===U.attribute[0]){for(W=x.sort||(x.sort={});W.next;)W=W.next;W.attribute=U.attribute.slice(1),W.descending=U.descending}else x===U.attribute[0]&&(g[M]=W={name:x,sort:{attribute:U.attribute.slice(1),descending:U.descending}})}U.next&&L(U.next)},"applySortingOnSelect");L(N)}else b.iterate=(m[Symbol.asyncIterator]||m[Symbol.iterator]).bind(m),b=b.map(O);return b}static transformEntryForSelect(m,g,N,A,O){if(m&&(m===t||m?.length===1&&m[0]===t)){let U=a(M=>M?.key??M,"transform");return m===t?U:m.asArray?M=>[U(M)]:M=>({[t]:U(M)})}let b;A&&w&&!m?.every(U=>{let M;return typeof U=="object"?M=U.name:M=U,r[M]||M===t})&&(b=!0);let y,L=a(U=>{let M;if(U){if(eh=U,M=U.value||U.deref?.(),!M&&(U.key===void 0||U.deref)){if(U=th(U.key??U,g,{transaction:Nr(g).getReadTxn(),lazy:m?.length<4},!1,x=>x),U?.then)return U.then(L);M=U?.value}if(b&&(U.metadataFlags&(gl|Rl)||U.expiresAt&&U.expiresAt<Date.now())){let x=rh(U.key??U,U,g);if(x?.then)return x.then(L)}}if(M==null)return O?Ka.SKIP:M;if(m&&!(m[0]==="*"&&m.length===1)){let x,W=a((le,te)=>{let ne;typeof le=="object"?ne=le.name:ne=le;let He=Yn?.[ne],ie;if(He){let _e=N?.[ne];if(_e)if(_e.fromRecord)ie=_e.fromRecord(M);else{let Me=Oi(U.key);ie=_e.get(Me),ie||(ie=[])}else ie=He(M,g,U);let Ve=a(Me=>{if(Me&&typeof Me=="object"){let oe=He.definition?.tableClass||Qe;y||(y={});let bt=y[ne]||(y[ne]=oe.transformEntryForSelect(ne===le?null:le.select||(Array.isArray(le)?le:null),g,_e,A));if(Array.isArray(Me)){let tt=[],Mt=oe.transformToOrderedSelect(Me,le.select,typeof le.sort=="object"&&le.sort,g,bt)[Symbol.asyncIterator](),Rs=a(rt=>{for(;!rt.done;){if(rt?.then)return rt.then(Rs);tt.push(rt.value),rt=Mt.next()}te(tt,ne)},"nextValue"),Pe=Rs(Mt.next());Pe&&(x||(x=[]),x.push(Pe));return}else if(Me=bt(Me),Me?.then){x||(x=[]),x.push(Me.then(tt=>te(tt,ne)));return}}te(Me,ne)},"handleResolvedValue");ie?.then?(x||(x=[]),x.push(ie.then(Ve))):Ve(ie);return}else ie=M[ne],ie&&typeof ie=="object"&&ne!==le&&(ie=this.transformEntryForSelect(le.select||le,g,null)({value:ie}));te(ie,ne)},"selectAttribute"),Se;if(typeof m=="string")W(m,le=>{Se=le});else if(Array.isArray(m))if(m.asArray)Se=[],m.forEach((le,te)=>{le==="*"?m[te]=M:W(le,ne=>Se[te]=ne)});else{Se={};let le=m.forceNulls;for(let te of m)if(te==="*")for(let ne in M)Se[ne]=M[ne];else W(te,(ne,He)=>{ne===void 0&&le&&(ne=null),Se[He]=ne})}else throw new Ss.ClientError("Invalid select"+m);return x?Promise.all(x).then(()=>Se):Se}return M},"transform");return L}async subscribe(m){if(!u)throw new Error("Can not subscribe to a table without an audit log");E||dt({table:n,database:c,schemaDefined:_,attributes:p,audit:!0}),m||(m={});let g=!m.rawEvents,N=cx(Qe,this[De]??null,function(y,L,U,M){try{let x=L.getValue?.(i,g);if(!x&&L.type==="patch"&&g){let W=i.getEntry(y);W?.version===L.version?x=W.value:x=L.getValue?.(i,!0,U)}this.send({id:y,timestamp:U,value:x,version:L.version,type:L.type,beginTxn:M})}catch(x){Ze.error(x)}},m.startTime||0,this[ps]);this[ps]&&(N.includeDescendants=!0,m.onlyChildren&&(N.onlyChildren=!0)),m.crossThreads===!1&&(N.crossThreads=!1),m.supportsTransactions&&(N.supportsTransactions=!0);let A=this[De],O=m.previousCount;O>1e3&&(O=1e3);let b=m.startTime;if(this[ps]){if(b){if(O)throw new Ss.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:y,value:L}of u.getRange({start:b,exclusiveStart:!0})){let U=Pt(L);if(U.tableId!==s)continue;let M=U.recordId;(A==null||mx(A,M))&&N.send({id:M,timestamp:y,...U}),N.startTime=y}}else if(O){let y=[];for(let{key:L,value:U}of u.getRange({start:"z",end:!1,reverse:!0}))try{let M=Pt(U);if(M.tableId!==s)continue;let x=M.recordId;if(A==null||mx(A,x)){let W=M.getValue(i,g,L);if(y.push({id:x,timestamp:L,value:W,version:M.version,type:M.type}),--O<=0)break}}catch(M){Ze.error("Error getting history entry",L,M)}for(let L=y.length;L>0;)N.send(y[--L]);y[0]&&(N.startTime=y[0].timestamp)}else if(!m.omitCurrent)for(let{key:y,value:L,version:U,localTime:M}of i.getRange({start:A??!1,end:A==null?void 0:[A,Lo.MAXIMUM_KEY],versions:!0}))L&&N.send({id:y,version:U,timestamp:M,value:L})}else{O&&!b&&(b=0);let y=this[Qr]?.localTime;if(y===$h&&(i.cache?.delete(A),this[Qr]=i.getEntry(A),Ze.warn("re-retrieved record",y,this[Qr]?.localTime),y=this[Qr]?.localTime),Ze.trace("Subscription from",b,"from",A,y),b<y){let L=[],U=y;do{let M=u.get(U);if(M){m.omitCurrent=!0;let x=Pt(M),W=x.getValue(i,g,U);L.push({id:A,value:W,timestamp:U,...x}),U=x.previousLocalTime}else break;O&&O--}while(U>b&&O!==0);for(let M=L.length;M>0;)N.send(L[--M]);N.startTime=y}!m.omitCurrent&&this.doesExist()&&N.send({id:A,version:this[Ol],timestamp:y,value:this})}return m.listener&&N.on("data",m.listener),N}doesExist(){return!!(this[ye]||this[Tl])}publish(m,g){this._writePublish(m,g)}_writePublish(m,g){let N=Nr(this[Re]),A=this[De]||null;Xa(A);let O=this[Re];N.addWrite({key:A,store:i,entry:this[Qr],nodeName:O?.nodeName,validate:()=>{this.validate(m)},before:de.publish?.bind(this,O,A,m),beforeIntermediate:lt.publish?.bind(this,O,A,m),commit:(b,y,L)=>{y===void 0&&h&&!E&&nh(),S(A,y?.value??null,y,y?.version||b,0,!0,O,y?.expiresAt,"message",!1,m)}})}validate(m,g){let N,A=a((O,b,y)=>{if(b.type&&O!=null)if(g&&O.__op__&&(O=O.value),b.properties){typeof O!="object"&&(N||(N=[])).push(`Property ${y} must be an object${b.type?" ("+b.type+")":""}`);let L=b.properties;for(let U=0,M=L.length;U<M;U++){let x=L[U],W=A(O[x.name],x,y+"."+x.name);W&&(O[x.name]=W)}}else switch(b.type){case"Int":(typeof O!="number"||O>>0!==O)&&(N||(N=[])).push(`Property ${y} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof O!="number"||!(Math.floor(O)===O&&Math.abs(O)<=9007199254740992))&&(N||(N=[])).push(`Property ${y} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof O!="number"&&(N||(N=[])).push(`Property ${y} must be a number`);break;case"ID":typeof O=="string"||O?.length>0&&O.every?.(L=>typeof L=="string")||(N||(N=[])).push(`Property ${y} must be a string, or an array of strings`);break;case"String":typeof O!="string"&&(N||(N=[])).push(`Property ${y} must be a string`);break;case"Boolean":typeof O!="boolean"&&(N||(N=[])).push(`Property ${y} must be a boolean`);break;case"Date":if(!(O instanceof Date)){if(typeof O=="string"||typeof O=="number")return new Date(O);(N||(N=[])).push(`Property ${y} must be a Date`)}break;case"BigInt":if(typeof O!="bigint"){if(typeof O=="string"||typeof O=="number")return BigInt(O);(N||(N=[])).push(`Property ${y} must be a bigint`)}break;case"Bytes":O instanceof Uint8Array||(N||(N=[])).push(`Property ${y} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(O)){if(b.elements)for(let L=0,U=O.length;L<U;L++){let M=O[L],x=A(M,b.elements,y+"[*]");x&&(O[L]=x)}}else(N||(N=[])).push(`Property ${y} must be a Buffer or Uint8Array`);break}b.nullable===!1&&O==null&&(N||(N=[])).push(`Property ${y} is required (and not does not allow null values)`)},"validateValue");for(let O=0,b=p.length;O<b;O++){let y=p[O];if(!y.relationship&&(!g||y.name in m)){let L=A(m[y.name],y,y.name);L&&(m[y.name]=L)}}if(N)throw new Ss.ClientError(N.join(". "))}getUpdatedTime(){return this[Ol]}wasLoadedFromSource(){return w?!!this[nA]:void 0}static async addAttributes(m){let g=p.slice(0);for(let N of m){if(!N.name)throw new Ss.ClientError("Attribute name is required");if(N.name.match(/[`/]/))throw new Ss.ClientError("Attribute names cannot include backticks or forward slashes");g.push(N)}return dt({table:n,database:c,schemaDefined:_,attributes:g}),Qe.indexingOperation}static async removeAttributes(m){let g=p.filter(N=>!m.includes(N.name));return dt({table:n,database:c,schemaDefined:_,attributes:g}),Qe.indexingOperation}static getRecordCount(m){let g=i.getStats().entryCount,N=5e3,A=1e3,O;g>N&&!m?.exactCount&&(O=A);let b=0;for(let{value:y}of i.getRange({start:!0,lazy:!0,limit:O}))y!=null&&b++;if(O){let y=b;b=0;for(let{value:ne}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:O}))ne!=null&&b++;let L=O*2,U=(b+y)/L,M=Math.pow((b-y+1)/O/2,2)+U*(1-U)/L,x=Math.max(Math.sqrt(M)*g,1),W=Math.round(U*g),Se=Math.max(W-1.96*x,0),le=Math.min(W+1.96*x,g),te=Math.pow(10,Math.round(Math.log10(x)));return te>W&&(te=te/10),b=Math.round(W/te)*te,{recordCount:b,estimatedRange:[Math.round(Se),Math.round(le)]}}return{recordCount:b}}static updatedAttributes(){Yn=this.propertyResolvers={$id:(m,g,N)=>({value:N.key}),$updatedtime:(m,g,N)=>N.version,$record:(m,g,N)=>N?{value:m}:m};for(let m of this.attributes){m.resolve=null;let g=m.relationship;if(g)if(NA=!0,g.to)m.elements?.definition?(Yn[m.name]=m.resolve=(N,A,O)=>{let b=N[g.from?g.from:t],y=m.elements.definition.tableClass;return O?ju({attribute:g.to,value:b},Nr(A).getReadTxn(),!1,y).asArray:y.search([{attribute:g.to,value:b}],A).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 "${n}" must have an array type referencing a table as the elements`);else if(g.from){let N=m.definition||m.elements?.definition;N?(Yn[m.name]=m.resolve=(A,O,b)=>{let y=A[g.from];if(y!==void 0){if(m.elements){let L,U=y.map(M=>{let x=b?N.tableClass.primaryStore.getEntry(M,{transaction:Nr(O).getReadTxn()}):N.tableClass.get(M,O);return x?.then&&(L=!0),x});return g.filterMissing?L?Promise.all(U).then(M=>M.filter(px)):U.filter(px):L?Promise.all(U):U}return b?N.tableClass.primaryStore.getEntry(y,{transaction:Nr(O).getReadTxn()}):N.tableClass.get(y,O)}},m.set=(A,O)=>{if(Array.isArray(O)){let b=O.map(y=>y[De]||y[N.tableClass.primaryKey]);A[g.from]=b}else{let b=O[De]||O[N.tableClass.primaryKey];A[g.from]=b}},m.resolve.definition=m.definition||m.elements?.definition):console.error(`The relationship property "${m.name}" in table "${n}" must be a type that references a table`)}else console.error(`The relationship directive on "${m.name}" in table "${n}" must use either "from" or "to" arguments`)}DE(this,this)}static async deleteHistory(m=0){let g;for(let{key:N,value:A}of u.getRange({start:0,end:m}))await Al(),Pt(A).tableId===s&&(g=u.remove(N));await g}static async*getHistory(m=0,g=1/0){for(let{key:N,value:A}of u.getRange({start:m,end:g})){await Al();let O=Pt(A);O.tableId===s&&(yield{id:O.recordId,localTime:N,version:O.version,type:O.type,value:O.getValue(i,!0,N),user:O.user})}}static async getHistoryOfRecord(m){let g=[];if(m==null)throw new Error("An id is required");let N=i.getEntry(m);if(!N)return g;let A=N.localTime;if(!A)throw new Error("The entry does not have a local audit time");let O=0;do{await Al();let b=u.get(A);if(b){let y=Pt(b);g.push({id:y.recordId,localTime:A,version:y.version,type:y.type,value:y.getValue(i,!0,A),user:y.user}),A=y.previousLocalTime}else break}while(O<1e3&&A);return g.reverse()}static cleanup(){J?.remove()}}Qe.updatedAttributes();let Sq=Qe.prototype;return Sq[Mne]=!0,d&&Qe.setTTLExpiration(d/1e3),Y&&Tq(),Qe;function Bl(V,m,g){let N;for(let A in r){let O=r[A],b=O.isIndexing,y=g?.[A],L=m?.[A];if(y===L&&!b)continue;N=!0;let U=O.indexNulls,M=(0,bl.getIndexedValues)(L,U);if(M){dx&&O.prefetch(M.map(x=>({key:x,value:V})),hx);for(let x=0,W=M.length;x<W;x++)O.remove(M[x],V)}if(M=(0,bl.getIndexedValues)(y,U),M){dx&&O.prefetch(M.map(x=>({key:x,value:V})),hx);for(let x=0,W=M.length;x<W;x++)O.put(M[x],V)}}return N}a(Bl,"updateIndices");function Xa(V){switch(typeof V){case"number":return!0;case"string":if(V.length<659)return!0;if(V.length>Ex)throw new Error("Primary key size is too large: "+V.length);break;case"object":if(V===null)return!0;break;case"bigint":if(V<2n**64n&&V>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof V)}if((0,Lo.writeKey)(V,vne,0)>Ex)throw new Error("Primary key size is too large: "+V.length);return!0}a(Xa,"checkValidId");function th(V,m,g,N,A){let O=a(()=>{if(m?.transaction?.stale&&(m.transaction.stale=!1),g.transaction?.isDone)return A(null,V);let b=i.getEntry(V,g);return b&&m&&(b?.version>(m.lastModified||0)&&(m.lastModified=b.version),b?.localTime&&!m.lastRefreshed&&(m.lastRefreshed=b.localTime)),A(b,V)},"whenPrefetched");return N?O():se>0?(se--,O()):new Promise((b,y)=>{se===0?(se--,i.prefetch([V],()=>{L(),U()})):(re.push(V),Ie.push(U),re.length>pq&&(se--,L()));function L(){if(re.length>0){let M=Ie;i.prefetch(re,()=>{se===-1?L():se++;for(let x of M)x()}),re=[],Ie=[],ut>2&&ut--}else se=ut,ut<mq&&ut++}a(L,"prefetch");function U(){try{b(O())}catch(M){y(M)}}a(U,"load")})}a(th,"loadLocalRecord");function Hl(V){if(!V?.role)return;let m=V.role.permission;if(m.super_user)return Bne;let g=m[c],N,A=g?.tables;if(A)return A[n];if(c==="data"&&(N=m[n])&&!N.tables)return N}a(Hl,"getTablePermissions");function rh(V,m,g,N){if(w){let A;if(g.noCache?A=!0:(m?(!m.value||m.metadataFlags&(gl|Rl)||m.expiresAt&&m.expiresAt<Date.now())&&(A=!0):A=!0,ss(!A,"cache-hit",n)),A){let O=IA(V,m,g).then(b=>(b?.value?.[ye]&&Ze.error("Can not assign a record with a record property"),g&&(b?.version>(g.lastModified||0)&&(g.lastModified=b.version),g.lastRefreshed=Date.now()),b));if(g?.onlyIfCached||m?.value&&N?.allowStaleWhileRevalidate?.(m,V)){if(O.catch(b=>Ze.warn(b)),g?.onlyIfCached&&!N.doesExist())throw new Ss.ServerError("Entry is not cached",504);return}else return O}}}a(rh,"ensureLoadedFromSource");function Nr(V){let m=V?.transaction;if(m){if(!m.lmdbDb)return m.lmdbDb=i,m;do{if(m.lmdbDb?.path===i.path)return m;let g=m.next;if(!g)return m=m.next=new Ji,m.lmdbDb=i,m;m=g}while(!0)}else return new z_}a(Nr,"txnForContext");function sh(V,m,g){if(!V)return;eh=V;let N=V.value||V.deref?.()||(eh=i.getEntry(V.key))?.value;if(typeof m=="object"){let O=Yn,b=N;for(let y=0,L=m.length;y<L;y++){let U=m[y],M=O?.[U];b=M&&b?M(b,g,!0)?.value:b?.[U],O=M?.definition?.tableClass?.propertyResolvers}return b}let A=Yn[m];return A?A(N,g):N[m]}a(sh,"getAttributeValue");function yA(V,m,g,N){let A=Nr(g).getReadTxn(),O=N?.length,b={transaction:A,lazy:O>0||typeof m=="string"||m?.length<4,alwaysPrefetch:!0};function y(L,U){let M=L?.value;if(!M)return Ka.SKIP;for(let x=0;x<O;x++)if(!N[x](M,L))return Ka.SKIP;return U!==void 0&&(L.key=U),L}if(a(y,"processEntry"),O>0||!V.hasEntries){let L=V.map(U=>typeof U=="object"&&U.key!==void 0?O>0?y(U):U:U==null?Ka.SKIP:th(U,g,b,!1,y));return Array.isArray(V)&&(L=L.filter(U=>U!==Ka.SKIP)),L.hasEntries=!0,L}return V}a(yA,"transformToEntries");async function IA(V,m,g){let N=m?.metadataFlags,A=m?.version,O,b;if(!i.attemptLock(V,A,()=>{clearTimeout(b);let M=i.getEntry(V);!M||!M.value||M.metadataFlags&(gl|Rl)?O(IA(V,i.getEntry(V),g)):O(M)}))return new Promise(M=>{O=M,b=setTimeout(()=>{i.unlock(V,A)},Une)});let y=m?.value,L={requestContext:g,replacingRecord:y,replacingVersion:A,source:null,resourceCache:g?.resourceCache},U=g?.responseHeaders;return new Promise((M,x)=>{let W;oA(Xe(L,async Se=>{let le=performance.now(),te,ne,He;try{for(let Me of Qe.sources)if(Me.get&&(!Me.get.reliesOnPrototype||Me.prototype.get)&&(L.source=Me,te=await Me.get(V,L),te))break;He=N≷let _e=L.lastModified||He&&A;ne=He||_e>A||!y,_e||(_e=(0,bl.getNextMonotonicTime)());let Ve=performance.now()-le;if(qr(Ve,"cache-resolution",n),U&&U.append("Server-Timing",`cache-resolve;dur=${Ve.toFixed(2)}`),Se.timestamp=_e,d&&!L.expiresAt&&(L.expiresAt=Date.now()+d),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]!==V&&(te[t]=V)}W=!0,M({version:_e,value:te})}catch(_e){_e.message+=` while resolving record ${V} for ${n}`,y&&((_e.code==="ECONNRESET"||_e.code==="ECONNREFUSED"||_e.code==="EAI_AGAIN")&&!g?.mustRevalidate||g?.staleIfError&&(_e.statusCode===500||_e.statusCode===502||_e.statusCode===503||_e.statusCode===504))?(M({version:A,value:y}),Ze.trace(_e.message,"(returned stale record)")):x(_e),L.transaction.abort();return}if(g?.noCacheStore){L.transaction.abort();return}Nr(L).addWrite({key:V,store:i,entry:m,nodeName:"source",commit:(_e,Ve)=>{if(Ve?.version!==A)return;let Me=Bl(V,y,te);te?(lt.put?.(L,V,te),S(V,te,Ve,_e,0,E&&ne||null,L,L.expiresAt,"put",!!He)):(lt.delete?.(L,V),E||h?S(V,null,Ve,_e,0,E&&ne||null,L,0,"delete",!!He):i.remove(V,A))}})}),()=>{i.unlock(V,A)},Se=>{i.unlock(V,A),W&&Ze.error("Error committing cache update",Se)})})}a(IA,"getFromSource");function nh(){if(gs!==bA&&(bA=gs,(0,Do.getWorkerIndex)()===(0,Do.getWorkerCount)()-1)){if(vl&&clearTimeout(vl),!gs)return;let V=new Date;V.setMonth(0),V.setDate(1),V.setHours(0),V.setMinutes(0),V.setSeconds(0);let m=Math.ceil((Date.now()-V.getTime())/gs)*gs+V.getTime(),g=a(N=>{Ze.trace(`Scheduled next cleanup scan at ${new Date(N)}ms`),vl=setTimeout(()=>q=q.then(async()=>{if(g(Math.max(N+gs,Date.now())),i.rootStore.status!=="open"){clearTimeout(vl);return}let A=50,O=new Array(A),b=0;Ze.trace(`Starting cleanup scan for ${n}`);try{let y=0;for(let{key:L,value:U,version:M,expiresAt:x}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let W;U===null&&!E&&M+Lne<Date.now()?W=i.remove(L,M):x&&x+f<Date.now()&&(W=Qe.evict(L,U,M),y++),W&&(await O[b],O[b]=W.catch(Se=>{Ze.error("Cleanup error",Se)}),++b>=A&&(b=0)),await Al()}Ze.trace(`Finished cleanup scan for ${n}, evicted ${y} entries`)}catch(y){Ze.trace(`Error in cleanup scan for ${n}:`,y)}}),Math.min(N-Date.now(),2147483647)).unref()},"startNextTimer");g(m)}}a(nh,"scheduleCleanup");function wA(){J=u?.addDeleteRemovalCallback(s,V=>{let m=i.getEntry(V);m?.value===null&&i.remove(V,m.version)})}a(wA,"addDeleteRemoval");function Tq(){(0,Do.getWorkerIndex)()===0&&setInterval(async()=>{try{let V=Y.name,m=r[V];if(!m)throw new Error(`expiresAt attribute ${Y} must be indexed`);for(let{value:g}of m.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let N=i.getEntry(g);N?.value?.[V]<Date.now()&&Qe.evict(g,N.value,N.version),await Al()}}catch(V){Ze.error("Error in evicting old records",V)}},Dne).unref()}a(Tq,"runRecordExpirationEviction")}function iA(e,t){let r=e.attr_object||(e.attr_object={}),s=r[t];if(s)return s;s=r[t]=Object.create(null);for(let n of e)s[n.attribute_name]=n[t];return s}function hx(){}function Hne(e){Tx=e}function PE(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"&&!xne.test(e)&&(e+="Z"),e==="null"?null:new Date(e)):!r||r==="Any"?(0,BE.autoCast)(e):e}function mx(e,t){if(e==null)return!0;if(!Array.isArray(t))return e===t;if(Array.isArray(e)){let r=e.length;if(e[r-1]===null&&r--,t.length>=r){for(let s=0;s<r;s++)if(t[s]!==e[s])return!1;return!0}return!1}else if(t[0]===e)return!0}function oA(e,t,r){return e?.then?e.then(t,r):t(e)}function vE(e,t){e[Qr]=t,e[ye]=t?.value??null,e[Ol]=t?.version}function px(e){return e!=null}var Gs,Ka,bl,Sx,Il,Ss,Nl,yl,Ze,Lo,Do,BE,Cne,Tx,Dne,Lne,dx,Une,Ol,Mne,Qr,Tl,fx,Pne,nA,Ya,gl,Rl,vne,Ex,Bne,Kpe,xne,Al,xf=Ae(()=>{Gs=v(D()),Ka=require("lmdb"),bl=v(wr()),Sx=require("lodash");Ns();qp();Il=v(j());_x();Ss=v(Z()),Nl=v(An()),yl=v(Ls());ge();bf();Ze=v(G());j_();Xi();Lo=require("ordered-binary"),Do=v(Ye());Pi();BE=v(z());Tc();yn();OE();Cne=new Uint8Array(9);Cne[8]=192;Dne=6e4,Lne=864e5;Il.initSync();dx=Il.get(Gs.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Une=1e4,Ol=Symbol.for("version"),Mne=Symbol.for("incremental-update"),Qr=Symbol("entry"),Tl=Symbol("is-saving"),fx=1,Pne=2,nA=Symbol("loaded-from-source"),Ya={isNotification:!0,ensureLoaded:!1},gl=1,Rl=8,vne=Buffer.allocUnsafeSlow(8192),Ex=1978,Bne={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},Kpe=(0,BE.convertToMS)(Il.get(Gs.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(HE,"makeTable");a(iA,"attributesAsObject");a(hx,"noop");a(Hne,"setServerUtilities");xne=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(PE,"coerceType");a(mx,"isDescendantId");Al=a(()=>new Promise(setImmediate),"rest");a(oA,"when");a(vE,"updateResource");a(px,"exists")});var xe={};$e(xe,{database:()=>Qc,databases:()=>st,dropDatabase:()=>$p,dropTableMeta:()=>$ne,getDatabases:()=>Ms,getTables:()=>qne,onUpdatedTable:()=>SR,readMetaDb:()=>wl,resetDatabases:()=>Fne,table:()=>dt,tables:()=>Cr});function qne(){return kE||Ms(),Cr||{}}function Ms(){if(kE)return st;kE=!0,za=new Map;let e=(0,Zt.getHdbBasePath)()&&(0,et.join)((0,Zt.getHdbBasePath)(),Jr.DATABASES_DIR_NAME),t=(0,Zt.get)(Jr.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,Zt.get)(Jr.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,zr.existsSync)(e)?e:(0,et.join)((0,Zt.getHdbBasePath)(),Jr.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,zr.existsSync)(e))for(let r of(0,zr.readdirSync)(e,{withFileTypes:!0})){let s=(0,et.basename)(r.name,".mdb");r.isFile()&&(0,et.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&wl((0,et.join)(e,r.name),null,s)}if((0,zr.existsSync)((0,Qa.getBaseSchemaPath)())){for(let r of(0,zr.readdirSync)((0,Qa.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let s=(0,et.join)((0,Qa.getBaseSchemaPath)(),r.name),n=(0,et.join)((0,Qa.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,zr.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,et.extname)(i.name).toLowerCase()===".mdb"){let o=(0,et.join)(n,i.name);wl((0,et.join)(s,i.name),(0,et.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let s=t[r],n=s.path;if((0,zr.existsSync)(n))for(let o of(0,zr.readdirSync)(n,{withFileTypes:!0}))o.isFile()&&(0,et.extname)(o.name).toLowerCase()===".mdb"&&wl((0,et.join)(n,o.name),(0,et.basename)(o.name,".mdb"),r);let i=s.tables;if(i)for(let o in i){let c=i[o],u=(0,et.join)(c.path,(0,et.basename)(o+".mdb"));(0,zr.existsSync)(u)&&wl(u,o,r,null,!0)}}for(let r in st){let s=za.get(r);if(s){let n=st[r];r.includes("delete")&&Ts.trace(`defined tables ${Array.from(s.keys())}`);for(let i in n)s.has(i)||(Ts.trace(`delete table class ${i}`),delete n[i])}else if(delete st[r],r==="data"){for(let n in Cr)delete Cr[n];delete Cr[VE]}}return za=null,st}}function Fne(){kE=!1;for(let[,e]of Ii)e.needsDeletion=!0;Ms();for(let[e,t]of Ii)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),Ii.delete(e));return st}function wl(e,t,r=uA,s,n){let i=new aA.default(e,!1);try{let o=Ii.get(e);o?o.needsDeletion=!1:(o=(0,qE.open)(i),Ii.set(e,o));let c=new Uo.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(xE.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(s?(0,zr.existsSync)(s)&&(i.path=s,_=(0,qE.open)(i),_.isLegacy=!0):_=AE(o));let l=Ox(r),d=l[VE],f=new Map;for(let{key:E,value:h}of u.getRange({start:!1})){let[p,S]=E.toString().split("/");S===""?S=h.name:S||(S=p,p=t,h.name||(h.name=S,h.indexed=!h.is_hash_attribute)),d?.add(p);let R=f.get(p);R||f.set(p,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:p,primary:S}=h;if(!S){for(let J of p)if(J.is_hash_attribute||J.isPrimaryKey){S=J;break}if(!S){Ts.fatal(`Unable to find a primary key attribute on table ${E}, with attributes: ${JSON.stringify(p)}`);continue}}let R=l[E],I={},w=[],B,K,q=typeof S.audit=="boolean"?S.audit:(0,Zt.get)(Jr.CONFIG_PARAMS.LOGGING_AUDITLOG),P=S.trackDeletes,Q=S.expiration,Y=S.eviction;if(R)I=R.indices,w=R.attributes,R.schemaVersion++;else{B=S.tableId,B?B>=(u.get(Wa)||0)&&u.putSync(Wa,B+1):(S.tableId=B=u.get(Wa),B||(B=1),u.putSync(Wa,B+1),u.putSync(S.key,S));let J=new Uo.default(!S.is_hash_attribute,S.is_hash_attribute);K=s_(o.openDB(S.key,J)),K.rootStore=o,K.tableId=B}for(let J of p){J.attribute=J.name;try{if(!J.is_hash_attribute&&(J.indexed||J.attribute&&!J.name)){if(!I[J.name]){let Ie=new Uo.default(!J.is_hash_attribute,J.is_hash_attribute);I[J.name]=o.openDB(J.key,Ie),I[J.name].indexNulls=J.indexNulls}let re=w.find(Ie=>Ie.name===J.name);re?w.splice(w.indexOf(re),1,J):w.push(J)}}catch(re){Ts.error("Error trying to update attribute",J,w,I,re)}}if(!R){R=bx(l,E,HE({primaryStore:K,auditStore:_,audit:q,expirationMS:Q&&Q*1e3,evictionMS:Y&&Y*1e3,trackDeletes:P,tableName:E,tableId:B,primaryKey:S.name,databasePath:n?r+"/"+E:r,databaseName:r,indices:I,attributes:p,schemaDefined:S.schemaDefined,dbisDB:u})),R.schemaVersion=1;for(let J of lA)J(R)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function Ox(e){let t=st[e];if(t||(e==="data"?t=st[e]=Cr:e==="system"?Object.defineProperty(st,"system",{value:t=Object.create(null),configurable:!0}):t=st[e]=Object.create(null)),za&&!za.has(e)){let r=new Set;t[VE]=r,za.set(e,r)}return t}function bx(e,t,r){return e[t]=r,r}function Qc({database:e,table:t}){e||(e=uA),Ms();let r=Ox(e),s=(0,et.join)((0,Zt.getHdbBasePath)(),Jr.DATABASES_DIR_NAME),n=(0,Zt.get)(Jr.CONFIG_PARAMS.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(n.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&n[e]?.tables?.[t]?.path;s=i||n[e]?.path||process.env.STORAGE_PATH||(0,Zt.get)(Jr.CONFIG_PARAMS.STORAGE_PATH)||((0,zr.existsSync)(s)?s:(0,et.join)((0,Zt.getHdbBasePath)(),Jr.LEGACY_DATABASES_DIR_NAME));let o=(0,et.join)(s,(i?t:e)+".mdb"),c=Ii.get(o);if(!c){let u=new aA.default(o,!1);c=(0,qE.open)(u),Ii.set(o,c)}return c}async function $p(e){if(!st[e])throw new Error("Schema does not exist");let t=st[e];for(let r in t){let n=t[r].primaryStore.rootStore;Ii.delete(n.path),n.status==="open"&&(await n.close(),await gx.remove(n.path))}if(e==="data"){for(let r in Cr)delete Cr[r];delete Cr[VE]}delete st[e]}function dt({table:e,database:t,expiration:r,eviction:s,scanInterval:n,attributes:i,audit:o,trackDeletes:c,schemaDefined:u,origin:_}){t||(t=uA);let l=Qc({database:t,table:e}),d=st[t],f=d?.[e];if(l.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let E,h,p,S;u==null&&(u=!0);let R=new Uo.default(!1);for(let P of i)P.attribute?(P.name=P.attribute,P.indexed=!0):P.attribute=P.name,P.expiresAt&&(P.indexed=!0);let I,w;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 P=l.auditStore;P||(P=AE(l)),h=i.find(re=>re.isPrimaryKey)||{},E=h.name,h.is_hash_attribute=!0,h.schemaDefined=u,c&&(h.trackDeletes=!0),o=h.audit=typeof o=="boolean"?o:(0,Zt.get)(Jr.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(h.expiration=r),s&&(h.eviction=s),_&&(h.origins?h.origins.includes(_)||h.origins.push(_):h.origins=[_]),Ts.trace(`${e} table loading, opening primary store`);let Q=new Uo.default(!1,!0),Y=e+"/",J=s_(l.openDB(Y,Q));J.rootStore=l,S=l.dbisDb=l.openDB(xE.INTERNAL_DBIS_NAME,R),J.tableId=S.get(Wa),J.tableId||(J.tableId=1),S.putSync(Wa,J.tableId+1),h.tableId=J.tableId,f=bx(d,e,HE({primaryStore:J,auditStore:P,audit:o,trackDeletes:c,expirationMS:r&&r*1e3,evictionMS:s&&s*1e3,primaryKey:E,tableName:e,tableId:J.tableId,databasePath:t,databaseName:t,indices:{},attributes:i,schemaDefined:u,dbisDB:S})),f.schemaVersion=1,I=!0,q(),S.put(Y,h)}p=f.indices,S=S||(l.dbisDb=l.openDB(xE.INTERNAL_DBIS_NAME,R)),f.dbisDB=S;let B=[];for(let{key:P,value:Q}of S.getRange({start:!0})){let[Y,J]=P.toString().split("/");if(J===""&&(J=Q.name),J){if(Y!==e)continue}else J=Y;if(!i.find(Ie=>Ie.name===J)?.indexed&&Q.indexed&&!Q.isPrimaryKey){q(),I=!0,S.remove(P);let Ie=f.indices[Y];Ie&&B.push(Ie)}}let K=[];try{for(let P of i||[]){if(P.relationship)continue;let Q=e+"/"+(P.name||"");Object.defineProperty(P,"key",{value:Q,configurable:!0});let Y=S.get(Q);if(P.isPrimaryKey){if(Y=Y||S.get(Q=e+"/")||{},o!==f.audit||(+r||void 0)!==(+Y.expiration||void 0)||(+s||void 0)!==(+Y.eviction||void 0)){let re=Object.assign({},Y);typeof o=="boolean"&&(o&&f.enableAuditing(o),re.audit=o),r&&(re.expiration=+r),s&&(re.eviction=+s),I=!0,q(),S.put(Q,re)}continue}Y?.attribute&&!Y.name&&(Y.indexed=!0);let J=!Y||Y.type!==P.type||Y.indexed!==P.indexed||JSON.stringify(Y.attributes)!==JSON.stringify(P.attributes)||JSON.stringify(Y.elements)!==JSON.stringify(P.elements);if(P.indexed){let re=new Uo.default(!0,!1),Ie=l.openDB(Q,re);(J||Y.indexingPID&&Y.indexingPID!==process.pid||Y.restartNumber<Cl.workerData?.restartNumber)&&(I=!0,q(),Y=S.get(Q),(J||Y.indexingPID&&Y.indexingPID!==process.pid||Y.restartNumber<Cl.workerData?.restartNumber)&&(I=!0,P.lastIndexedKey=Y?.lastIndexedKey||!1,P.indexingPID=process.pid,Ie.isIndexing=!0,Object.defineProperty(P,"dbi",{value:Ie}),P.indexNulls===void 0&&(P.indexNulls=!0),K.push(P)),S.put(Q,P)),Y?.indexNulls&&P.indexNulls===void 0&&(P.indexNulls=!0),Ie.indexNulls=P.indexNulls,p[P.name]=Ie}else J&&(I=!0,q(),S.put(Q,P))}}finally{w&&w()}if(I&&(f.schemaVersion++,f.updatedAttributes()),Ts.trace(`${e} table loading, running index`),K.length>0||B.length>0?f.indexingOperation=Vne(f,K,B):I&&FE.signalSchemaChange(new GE.SchemaEventMsg(process.pid,"schema-change",f.databaseName,f.tableName)),f.origin=_,I)for(let P of lA)P(f,_!=="cluster");return(r||s||n)&&f.setTTLExpiration({expiration:r,eviction:s,scanInterval:n}),Ts.trace(`${e} table loaded`),f;function q(){w||l.transactionSync(()=>({then(P){w=P}}))}a(q,"startTxn")}async function Vne(e,t,r){try{let s=e.schemaVersion;await FE.signalSchemaChange(new GE.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let n;for(let u of r)n=u.drop();let i,o=0,c=t.length;if(await new Promise(u=>setImmediate(u)),c>0){let u=0;for(let{key:_,value:l,version:d}of e.primaryStore.getRange({start:t[0].lastIndexedKey,lazy:c<4,versions:!0,snapshot:!1}))if(l){if(u++,n=e.primaryStore.ifVersion(_,d,()=>{for(let f=0;f<c;f++){let E=t[f],h=E.name,p=(0,Rx.getIndexedValues)(l[h]);if(p)for(let S=0,R=p.length;S<R;S++)E.dbi.put(p[S],_)}}),n.then(()=>u--,f=>{u--,Ts.error(f)}),Cl.workerData&&Cl.workerData.restartNumber!==Ax.restartNumber&&(i=!0),++o%100===0||i){for(let f of t)f.lastIndexedKey=_,e.dbisDB.put(f.key,f);if(i)return}u>Gne?await n:u>kne&&await new Promise(f=>setImmediate(f))}for(let _ of t)delete _.lastIndexedKey,delete _.indexingPID,_.dbi.isIndexing=!1,n=e.dbisDB.put(_.key,_)}await n,await FE.signalSchemaChange(new GE.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){Ts.error("Error in indexing",s)}}function $ne({table:e,database:t}){let r=Qc({database:t,table:e}),s=[],n=r.dbisDb;for(let i of n.getKeys({start:e+"/",end:e+"0"}))s.push(n.remove(i));return Promise.all(s)}function SR(e){lA.push(e)}var Zt,xE,qE,et,zr,Qa,Uo,aA,Jr,gx,cA,Rx,FE,GE,Cl,Ts,Ax,uA,VE,Cr,st,Wa,lA,kE,Ii,za,Gne,kne,ge=Ae(()=>{Zt=v(j()),xE=v(mt()),qE=require("lmdb"),et=require("path"),zr=require("fs"),Qa=v(ze());xf();Uo=v(n_()),aA=v(o_()),Jr=v(D()),gx=v(require("fs-extra")),cA=require("../index"),Rx=v(wr()),FE=v(An()),GE=v(Ls()),Cl=require("worker_threads"),Ts=v(G()),Ax=v(Ye());Pi();Tc();uA="data",VE=Symbol("defined-tables");(0,Zt.initSync)();Cr=Object.create(null),st=Object.create(null);(0,cA._assignPackageExport)("databases",st);(0,cA._assignPackageExport)("tables",Cr);Wa=Symbol.for("next-table-id"),lA=[],Ii=new Map;a(qne,"getTables");a(Ms,"getDatabases");a(Fne,"resetDatabases");a(wl,"readMetaDb");a(Ox,"ensureDB");a(bx,"setTable");a(Qc,"database");a($p,"dropDatabase");a(dt,"table");Gne=1e3,kne=10;a(Vne,"runIndexing");a($ne,"dropTableMeta");a(SR,"onUpdatedTable")});var z=T((tSe,xx)=>{"use strict";var wi=require("path"),Cx=require("fs-extra"),br=G(),Nx=require("fs-extra"),$E=require("os"),Yne=require("net"),Kne=require("recursive-iterator"),ct=D(),Wne=aO(),yx=require("papaparse"),YE=require("moment"),{inspect:Qne}=require("util"),Ix=require("is-number"),eSe=require("lodash"),zne=require("minimist"),Jne=require("https"),Xne=require("http"),{hdb_errors:KE}=Z(),jne=/^((\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)))$/,Dx=require("util").promisify(setTimeout),Zne=100,eie=5,tie="",rie=4,wx={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};xx.exports={isEmpty:Xr,isEmptyOrZeroLength:En,arrayHasEmptyValues:iie,arrayHasEmptyOrZeroLengthValues:oie,buildFolderPath:aie,isBoolean:Lx,errorizeMessage:sie,stripFileExtension:uie,autoCast:lie,autoCastJSON:Ux,autoCastJSONDeep:dA,removeDir:_ie,compareVersions:die,isCompatibleDataVersion:fie,escapeRawValue:Eie,unescapeValue:hie,stringifyProps:mie,timeoutPromise:Sie,isClusterOperation:gie,getClusterUser:Aie,checkGlobalSchemaTable:Rie,getHomeDir:Px,getPropsFilePath:pie,promisifyPapaParse:Oie,removeBOM:vx,createEventPromise:bie,checkProcessRunning:Nie,checkSchemaTableExist:yie,checkSchemaExists:Bx,checkTableExists:Hx,getStartOfTomorrowInSeconds:Iie,getLimitKey:wie,isObject:cie,isNotEmptyAndHasValue:nie,autoCasterIsNumberCheck:Mx,backtickASTSchemaItems:Cie,isPortTaken:Tie,createForkArgs:Die,autoCastBoolean:Lie,async_set_timeout:Dx,getTableHashAttribute:Uie,doesSchemaExist:Mie,doesTableExist:Pie,stringifyObj:vie,ms_to_time:Bie,changeExtension:Hie,getEnvCliRootPath:fA,noBootFile:xie,httpRequest:qie,transformReq:Fie,convertToMS:Gie,PACKAGE_ROOT:ct.PACKAGE_ROOT};function sie(e){return e instanceof Error?e:new Error(e)}a(sie,"errorizeMessage");function Xr(e){return e==null}a(Xr,"isEmpty");function nie(e){return!Xr(e)&&(e||e===0||e===""||Lx(e))}a(nie,"isNotEmptyAndHasValue");function En(e){return Xr(e)||e.length===0||e.size===0}a(En,"isEmptyOrZeroLength");function iie(e){if(Xr(e))return!0;for(let t=0;t<e.length;t++)if(Xr(e[t]))return!0;return!1}a(iie,"arrayHasEmptyValues");function oie(e){if(En(e))return!0;for(let t=0;t<e.length;t++)if(En(e[t]))return!0;return!1}a(oie,"arrayHasEmptyOrZeroLengthValues");function aie(...e){try{return e.join(wi.sep)}catch{console.error(e)}}a(aie,"buildFolderPath");function Lx(e){return Xr(e)?!1:e===!0||e===!1}a(Lx,"isBoolean");function cie(e){return Xr(e)?!1:typeof e=="object"}a(cie,"isObject");function uie(e){return En(e)?tie:e.slice(0,-rie)}a(uie,"stripFileExtension");function lie(e){return Xr(e)||e===""||typeof e!="string"?e:wx[e]!==void 0?wx[e]:Mx(e)===!0?Number(e):jne.test(e)?new Date(e):e}a(lie,"autoCast");function Ux(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(Ux,"autoCastJSON");function dA(e){if(e&&typeof e=="object"){if(Array.isArray(e))for(let t=0,r=e.length;t<r;t++){let s=e[t],n=dA(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=dA(r);s!==r&&(e[t]=s)}return e}else return Ux(e)}a(dA,"autoCastJSONDeep");function Mx(e){if(e.startsWith("0.")&&Ix(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&Ix(e))}a(Mx,"autoCasterIsNumberCheck");async function _ie(e){if(En(e))throw new Error(`Directory path: ${e} does not exist`);try{await Nx.emptyDir(e),await Nx.remove(e)}catch(t){throw br.error(`Error removing files in ${e} -- ${t}`),t}}a(_ie,"removeDir");function die(e,t){if(En(e)){br.info("Invalid current version sent as parameter.");return}if(En(t)){br.info("Invalid upgrade version sent as parameter.");return}let r,s=/(\.0+)+$/,n=e.version?e.version:e,i=t.version?t.version:t,o=n.replace(s,"").split("."),c=i.replace(s,"").split("."),u=Math.min(o.length,c.length);for(let _=0;_<u;_++)if(r=parseInt(o[_],10)-parseInt(c[_],10),r)return r;return o.length-c.length}a(die,"compareVersions");function fie(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(fie,"isCompatibleDataVersion");function Eie(e){if(Xr(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(Eie,"escapeRawValue");function hie(e){if(Xr(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(hie,"unescapeValue");function mie(e,t){if(Xr(e))return br.info("Properties object is null"),"";let r="";return e.each(function(s,n){try{if(t&&t[s]){let i=t[s];for(let o of i)r+=";"+o+$E.EOL}!En(s)&&s[0]===";"?r+=" "+s+n+$E.EOL:En(s)||(r+=s+"="+n+$E.EOL)}catch{br.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(mie,"stringifyProps");function Px(){let e;try{e=$E.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(Px,"getHomeDir");function pie(){let e=wi.join(Px(),ct.HDB_HOME_DIR_NAME,ct.BOOT_PROPS_FILE_NAME);return Cx.existsSync(e)||(e=wi.join(__dirname,"../","hdb_boot_properties.file")),e}a(pie,"getPropsFilePath");function Sie(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(Sie,"timeoutPromise");async function Tie(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=Yne.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(Tie,"isPortTaken");function gie(e){try{return ct.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){br.error(`Error checking operation against cluster ops ${t}`)}return!1}a(gie,"isClusterOperation");function Rie(e,t){let r=(ge(),ee(xe)).getDatabases();if(!r[e])return KE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return KE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Rie,"checkGlobalSchemaTable");function Aie(e,t){if(Xr(t)){br.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Xr(e)||En(e)){br.warn("No users to search.");return}let r;try{let s=e.get(t);s&&s.role.permission.cluster_user===!0&&s.active===!0&&(r=s)}catch(s){br.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){br.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(Aie,"getClusterUser");function Oie(){yx.parsePromise=function(e,t,r){return new Promise(function(s,n){yx.parse(e,{header:!0,transformHeader:vx,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}a(Oie,"promisifyPapaParse");function vx(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(vx,"removeBOM");function bie(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;br.info(`Got cluster status event response: ${Qne(n)}`);try{i.cancel()}catch{br.error("Error trying to cancel timeout.")}s(n)})})}a(bie,"createEventPromise");async function Nie(e){let t=!0,r=0;do await Dx(Zne*r++),(await Wne.findPs(e)).length>0&&(t=!1);while(t&&r<eie);if(t)throw new Error(`process ${e} was not started`)}a(Nie,"checkProcessRunning");function yie(e,t){let r=Bx(e);if(r)return r;let s=Hx(e,t);if(s)return s}a(yie,"checkSchemaTableExist");function Bx(e){let{getDatabases:t}=(ge(),ee(xe));if(!t()[e])return KE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(Bx,"checkSchemaExists");function Hx(e,t){let{getDatabases:r}=(ge(),ee(xe));if(!r()[e][t])return KE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Hx,"checkTableExists");function Iie(){let e=YE().utc().add(1,ct.MOMENT_DAYS_TAG).startOf(ct.MOMENT_DAYS_TAG).unix(),t=YE().utc().unix();return e-t}a(Iie,"getStartOfTomorrowInSeconds");function wie(){return YE().utc().format("DD-MM-YYYY")}a(wie,"getLimitKey");function Cie(e){try{let t=new Kne(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){br.error("Got an error back ticking items."),br.error(t)}}a(Cie,"backtickASTSchemaItems");function Die(e){return[e]}a(Die,"createForkArgs");function Lie(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(Lie,"autoCastBoolean");function Uie(e,t){let{getDatabases:r}=(ge(),ee(xe)),s=r()[e]?.[t];return s?.primaryKey||s?.hash_attribute}a(Uie,"getTableHashAttribute");function Mie(e){let{getDatabases:t}=(ge(),ee(xe));return t()[e]!==void 0}a(Mie,"doesSchemaExist");function Pie(e,t){let{getDatabases:r}=(ge(),ee(xe));return r()[e]?.[t]!==void 0}a(Pie,"doesTableExist");function vie(e){try{return JSON.stringify(e)}catch{return e}}a(vie,"stringifyObj");function Bie(e){let t=YE.duration(e),r=t.seconds()>0?t.seconds()+"s":"",s=t.minutes()>0?t.minutes()+"m ":"",n=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+n+s+r}a(Bie,"ms_to_time");function Hie(e,t){let r=wi.basename(e,wi.extname(e));return wi.join(wi.dirname(e),r+t)}a(Hie,"changeExtension");function fA(){if(process.env[ct.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[ct.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=zne(process.argv);if(e[ct.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[ct.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(fA,"getEnvCliRootPath");var _A;function xie(){if(_A)return _A;let e=fA();fA()&&Cx.pathExistsSync(wi.join(e,ct.HDB_CONFIG_FILE))&&(_A=!0)}a(xie,"noBootFile");function qie(e,t){let r;return e.protocol==="http:"?r=Xne:r=Jne,new Promise((s,n)=>{let i=r.request(e,o=>{o.setEncoding("utf8");let c={body:"",headers:o.headers};o.on("data",u=>{c.body+=u}),o.on("end",()=>{s(c)})});i.on("error",o=>{n(o)}),i.write(JSON.stringify(t)),i.end()})}a(qie,"httpRequest");function Fie(e){if(!e.schema&&!e.database){e.schema=ct.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(Fie,"transformReq");function Gie(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(Gie,"convertToMS")});var j=T((sSe,kx)=>{"use strict";var EA=require("fs-extra"),Mo=require("path"),qx=require("os"),kie=require("properties-reader"),Ll=G(),Dl=z(),ae=D(),WE=Pr(),Vie="Error initializing environment manager",QE="BOOT_PROPS_FILE_PATH",Fx=!1,$ie={[ae.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[ae.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[ae.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Vn={};kx.exports={BOOT_PROPS_FILE_PATH:QE,getHdbBasePath:Yie,setHdbBasePath:Kie,get:Gx,initSync:Qie,setProperty:Le,initTestEnvironment:zie};function Yie(){return Vn[ae.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(Yie,"getHdbBasePath");function Kie(e){Vn[ae.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(Kie,"setHdbBasePath");function Gx(e){let t=WE.getConfigValue(e);return t===void 0?Vn[e]:t}a(Gx,"get");function Le(e,t){$ie[e]&&(Vn[e]=t),WE.updateConfigObject(e,t)}a(Le,"setProperty");function Wie(){let e;try{e=Dl.getPropsFilePath(),EA.accessSync(e,EA.constants.F_OK|EA.constants.R_OK),Fx=!0;let t=kie(e);return Vn[ae.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(ae.HDB_SETTINGS_NAMES.INSTALL_USER),Vn[ae.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(ae.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Vn[QE]=e,!0}catch{return Ll.trace(`Environment manager found no properties file at ${e}`),!1}}a(Wie,"doesPropFileExist");function Qie(e=!1){try{(Fx||Wie()||Dl.noBootFile())&&(WE.initConfig(e),Vn[ae.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=WE.getConfigValue(ae.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Ll.error(Vie),Ll.error(t),console.error(t),process.exit(1)}}a(Qie,"initSync");function zie(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,u=Mo.join(__dirname,"../../","unitTests");Vn[QE]=Mo.join(u,"hdb_boot_properties.file"),Le(ae.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Mo.join(u,"settings.test")),Le(ae.HDB_SETTINGS_NAMES.INSTALL_USER,qx.userInfo()?qx.userInfo().username:void 0),Le(ae.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Le(ae.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Mo.join(u,"envDir","log")),Le(ae.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Le(ae.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Le(ae.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Le(ae.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Mo.join(u,"envDir")),Le(ae.CONFIG_PARAMS.STORAGE_PATH,Mo.join(u,"envDir")),n&&(Le(ae.CONFIG_PARAMS.HTTP_SECUREPORT,Gx(ae.CONFIG_PARAMS.HTTP_PORT)),Le(ae.CONFIG_PARAMS.HTTP_PORT,null)),Le(ae.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!n),Le(ae.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Le(ae.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Dl.isEmpty(i)?!1:i),Le(ae.CONFIG_PARAMS.HTTP_CORS,Dl.isEmpty(i)?!1:i),Le(ae.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Le(ae.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Le(ae.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Le(ae.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Le(ae.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Mo.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Le(ae.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Dl.isEmpty(c)?!1:c),o&&(Le("CORS_ACCESSLIST",o),Le(ae.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),s&&(Le(ae.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),Le(ae.CONFIG_PARAMS.HTTP_TIMEOUT,s)),t&&(Le(ae.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Le(ae.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(Le(ae.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Le(ae.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${QE}. Please check your boot props and settings files`;Ll.fatal(r),Ll.error(t)}}a(zie,"initTestEnvironment")});var Wx=T((iSe,Kx)=>{"use strict";var Yx=require("joi"),{string:Ul,boolean:Vx,array:Jie}=Yx.types(),$x=D(),Xie=Je();Kx.exports=jie;function jie(e){let t=Yx.object({operation:Ul.valid($x.OPERATIONS_ENUM.ADD_NODE,$x.OPERATIONS_ENUM.UPDATE_NODE).required(),node_name:Ul.required(),subscriptions:Jie.items({schema:Ul.required(),table:Ul.optional(),hash_attribute:Ul.optional(),subscribe:Vx.required(),publish:Vx.required()}).min(1).required()});return Xie.validateBySchema(e,t)}a(jie,"updateRemoteSourceValidator")});var Ml=T((aSe,Qx)=>{"use strict";var hA=class{static{a(this,"UpdateRemoteResponseObject")}constructor(t,r,s=void 0){this.status=t,this.message=r,this.system_info=s}};Qx.exports=hA});var Zx=T((uSe,jx)=>{"use strict";var Zie=Wx(),$n=G(),mA=qe(),zx=D(),pA=os(),SA=nt(),Jx=uu(),eoe=K_(),{Node:toe,NodeSubscription:Xx}=di(),TA=Ml(),gA=z(),roe=j(),{cloneDeep:soe}=require("lodash"),{broadcast:noe}=Ye();jx.exports=ioe;async function ioe(e){try{let t=Zie(e);if(t)return $n.error(`Validation error in updateRemoteSource: ${t.message}`),new TA(mA.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,t.message);let{subscriptions:r,node_name:s,system_info:n}=e,i=[],o=soe(await pA.getNodeRecord(s)),c=!gA.isEmptyOrZeroLength(o);o=c?o[0]:o,c&&$n.trace(`Existing record found for ${s}, updating records subscriptions`);for(let _=0,l=r.length;_<l;_++){let d=r[_],f=d.schema,E=d.table;if(!gA.doesSchemaExist(f)){$n.trace(`updateRemoteSource creating schema: ${f}`);try{await Jx.createSchema({operation:"create_schema",schema:f})}catch(h){$n.error(h)}}if(E&&!gA.doesTableExist(f,E)){let h=new eoe(f,E,d.hash_attribute);d.attributes&&(h.attributes=d.attributes),$n.trace(`updateRemoteSource creating table: ${E} in schema: ${f} with attributes: ${JSON.stringify(d.attributes)}`);try{await Jx.createTable(h)}catch(p){$n.error(p)}$n.trace(`Creating local stream for ${f}.${E}`),await SA.createLocalTableStream(f,E)}if(f===zx.SYSTEM_SCHEMA_NAME&&await SA.createLocalTableStream(f,E),await SA.updateWorkStream(d,s),c){let h=!1;for(let p=0,S=o.subscriptions.length;p<S;p++){let R=o.subscriptions[p];if(R.schema===f&&R.table===E){R.publish=d.publish,R.subscribe=d.subscribe,h=!0;break}}h||o.subscriptions.push(new Xx(f,E,d.publish,d.subscribe))}else i.push(new Xx(f,E,d.publish,d.subscribe))}c||(o=new toe(s,i,void 0),$n.trace(`No record found for ${s}, creating a new one`));let u=Object.create({});return Object.assign(u,o),u.system_info=n,await pA.upsertNodeRecord(u),noe({type:"nats_update"}),new TA(mA.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,`Node ${roe.get(zx.CONFIG_PARAMS.CLUSTERING_NODENAME)} successfully updated remote source`,await pA.getSystemInfo())}catch(t){$n.error(t);let r=t.message?t.message:t;return new TA(mA.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(ioe,"updateRemoteSource")});var sq=T((_Se,rq)=>{"use strict";var tq=require("joi"),{string:eq}=tq.types(),ooe=D(),aoe=Je();rq.exports=coe;function coe(e){let t=tq.object({operation:eq.valid(ooe.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:eq.required()});return aoe.validateBySchema(e,t)}a(coe,"removeRemoteSourceValidator")});var iq=T((fSe,nq)=>{"use strict";var uoe=sq(),zE=G(),JE=qe(),RA=D(),loe=os(),_oe=z(),doe=nt(),foe=j(),XE=Ml(),{NodeSubscription:Eoe}=di(),hoe=ta(),moe=ti(),{broadcast:poe}=Ye(),Soe=foe.get(RA.CONFIG_PARAMS.CLUSTERING_NODENAME);nq.exports=Toe;async function Toe(e){try{let t=uoe(e);if(t)return zE.error(`Validation error in removeRemoteSource: ${t.message}`),new XE(JE.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,t.message);let r=e.node_name,s=await loe.getNodeRecord(r);if(_oe.isEmptyOrZeroLength(s)){let i=`No record found for node '${r}'`;return zE.error(i),new XE(JE.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,i)}s=s[0];for(let i=0,o=s.subscriptions.length;i<o;i++){let c=s.subscriptions[i];zE.trace(`remove remote source removing subscription: ${c.schema}.${c.table} for node: ${r}`);let u=new Eoe(c.schema,c.table,!1,!1);await doe.updateWorkStream(u,r)}let n=new hoe(RA.SYSTEM_SCHEMA_NAME,RA.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await moe.deleteRecord(n),poe({type:"nats_update"}),new XE(JE.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,`Node ${Soe} successfully removed node '${r}'.`)}catch(t){zE.error(t);let r=t.message?t.message:t;return new XE(JE.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(Toe,"removeRemoteSource")});var lq=T((hSe,uq)=>{"use strict";var jE=G(),ZE=D(),oq=qe(),aq=j(),goe=z(),cq=Ml(),Roe=os(),Aoe=Sd(),Ooe=Lr();uq.exports=boe;async function boe(e){try{jE.trace("getRemoteSourceConfig called");let t=process.uptime()*1e3,r=goe.ms_to_time(t),s=new Noe(aq.get(ZE.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),aq.get(ZE.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT),r,await Roe.getSystemInfo());try{let n={name:e.node_name,system_info:e.system_info},i=new Aoe(ZE.SYSTEM_SCHEMA_NAME,ZE.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[n]);await Ooe.update(i)}catch(n){jE.error("Get remote config encountered an error updating system info for node:",e.node_name,n)}return jE.trace("getRemoteSourceConfig response:",s),new cq(oq.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,s)}catch(t){jE.error(t);let r=t.message?t.message:t;return new cq(oq.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(boe,"getRemoteSourceConfig");function Noe(e,t,r,s){this.uptime=r,this.ports={clustering:e,operations_api:t},this.system_info=s}a(Noe,"ConfigResponseObject")});var Eq=T((pSe,fq)=>{"use strict";var _q=j();_q.initSync();var dq=nt(),Pl=G(),Ja=D(),AA=qe(),yoe=Zx(),Ioe=iq(),woe=lq(),Coe=Ml(),{encode:Doe,decode:Loe}=require("msgpackr"),Uoe=Rn(),Moe=jn(),Poe=require("util"),voe=D(),{isMainThread:Boe,parentPort:Hoe}=require("worker_threads");Ye();var xoe=Poe.promisify(Uoe.setSchemaDataToGlobal),OA=_q.get(Ja.CONFIG_PARAMS.CLUSTERING_NODENAME);fq.exports=qoe;async function qoe(){try{Pl.notify("Starting reply service."),await xoe();let e=await dq.getConnection(),t=`${OA}.__request__`,r=e.subscribe(t,{queue:OA});await Foe(r)}catch(e){Pl.error(e)}}a(qoe,"initialize");async function Foe(e){for await(let t of e){let r=Loe(t.data),s;switch(r.operation){case Ja.OPERATIONS_ENUM.ADD_NODE:case Ja.OPERATIONS_ENUM.UPDATE_NODE:s=await yoe(r);break;case Ja.OPERATIONS_ENUM.REMOVE_NODE:s=await Ioe(r);break;case Ja.OPERATIONS_ENUM.CLUSTER_STATUS:s=await woe(r);break;case Ja.OPERATIONS_ENUM.DESCRIBE_ALL:s=await Goe();break;default:let n=`node '${OA}' reply service received unrecognized request operation`;Pl.error(n),s=new Coe(AA.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,n)}Pl.trace(s),t.respond(Doe(s))}}a(Foe,"handleRequest");async function Goe(){try{return{status:AA.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,message:await Moe.describeAll()}}catch(e){return Pl.error(e),{status:AA.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,message:e.message}}}a(Goe,"getRemoteDescribeAll");Boe||Hoe.on("message",async e=>{let{type:t}=e;t===voe.ITC_EVENT_TYPES.SHUTDOWN&&dq.closeConnection()})});var koe=Eq();(async()=>{try{await koe()}catch(e){console.error("Error launching Nats reply service."),console.error(e)}})();
|