harperdb 4.3.24 → 4.3.25
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 +22 -22
- package/bin/lite.js +17 -17
- package/launchServiceScripts/launchInstallNATSServer.js +1 -1
- package/launchServiceScripts/launchNatsIngestService.js +17 -17
- package/launchServiceScripts/launchNatsReplyService.js +17 -17
- package/launchServiceScripts/launchUpdateNodes4-0-0.js +17 -17
- package/npm-shrinkwrap.json +245 -245
- package/package.json +2 -2
- package/server/jobs/jobProcess.js +17 -17
- package/server/serverHelpers/Headers.d.ts +1 -1
- package/server/threads/threadServer.js +17 -17
- package/studio/build-local/asset-manifest.json +47 -46
- package/studio/build-local/index.html +1 -1
- package/studio/build-local/static/css/main.e1f8b48c.css +13 -0
- package/studio/build-local/static/js/23.3b9f7144.chunk.js +1 -0
- package/studio/build-local/static/js/239.183c6cbc.chunk.js +2 -0
- package/studio/build-local/static/js/{228.302d7db9.chunk.js → 279.7890bce3.chunk.js} +1 -1
- package/studio/build-local/static/js/311.3d832d8b.chunk.js +2 -0
- package/studio/build-local/static/js/311.3d832d8b.chunk.js.LICENSE.txt +38 -0
- package/studio/build-local/static/js/43.73dc432d.chunk.js +2 -0
- package/studio/build-local/static/js/452.03944f0d.chunk.js +2 -0
- package/studio/build-local/static/js/{446.5237e847.chunk.js.LICENSE.txt → 452.03944f0d.chunk.js.LICENSE.txt} +2 -2
- package/studio/build-local/static/js/545.e12f8571.chunk.js +1 -0
- package/studio/build-local/static/js/591.7498da00.chunk.js +2 -0
- package/studio/build-local/static/js/805.6aab06e2.chunk.js +1 -0
- package/studio/build-local/static/js/806.adb20036.chunk.js +1 -0
- package/studio/build-local/static/js/833.5b133801.chunk.js +1 -0
- package/studio/build-local/static/js/851.e7004b75.chunk.js +1 -0
- package/studio/build-local/static/js/860.727e7fc8.chunk.js +1 -0
- package/studio/build-local/static/js/browse-csvupload.02fdfbea.chunk.js +1 -0
- package/studio/build-local/static/js/browse-datatable.c2eb203f.chunk.js +1 -0
- package/studio/build-local/static/js/browse-entitymanager.0db076c3.chunk.js +1 -0
- package/studio/build-local/static/js/browse-jsonviewer.90814e97.chunk.js +1 -0
- package/studio/build-local/static/js/custom-functions.01f632d1.chunk.js +1 -0
- package/studio/build-local/static/js/instance-charts.217c477d.chunk.js +1 -0
- package/studio/build-local/static/js/instance-cluster.7f6df625.chunk.js +1 -0
- package/studio/build-local/static/js/instance-config.59b29ef6.chunk.js +1 -0
- package/studio/build-local/static/js/instance-query.44ba3d7b.chunk.js +1 -0
- package/studio/build-local/static/js/instance-roles.38ef8e77.chunk.js +1 -0
- package/studio/build-local/static/js/instance-status.694a7846.chunk.js +1 -0
- package/studio/build-local/static/js/instance-users-datatable.d61ab3ef.chunk.js +1 -0
- package/studio/build-local/static/js/instance-users-edit.ff5bfa06.chunk.js +1 -0
- package/studio/build-local/static/js/instance-users.c71b71f2.chunk.js +1 -0
- package/studio/build-local/static/js/instance.47c8b74b.chunk.js +1 -0
- package/studio/build-local/static/js/instances.1ec58722.chunk.js +1 -0
- package/studio/build-local/static/js/main.c58a5ba7.js +2 -0
- package/studio/build-local/static/js/{main.7106edfd.js.LICENSE.txt → main.c58a5ba7.js.LICENSE.txt} +0 -33
- package/studio/build-local/static/js/offline-app.31c18661.chunk.js +1 -0
- package/studio/build-local/static/js/online-app.0d8194e1.chunk.js +1 -0
- package/studio/build-local/static/js/organization-billing.21b2d3c9.chunk.js +1 -0
- package/studio/build-local/static/js/organization-users.532711dd.chunk.js +1 -0
- package/studio/build-local/static/js/organization.99a1e759.chunk.js +1 -0
- package/studio/build-local/static/js/organizations.4933fdbc.chunk.js +1 -0
- package/studio/build-local/static/js/profile.e4e06bdf.chunk.js +1 -0
- package/studio/build-local/static/js/resetPassword.3478535b.chunk.js +1 -0
- package/studio/build-local/static/js/roles-jsonviewer.bf1011d5.chunk.js +1 -0
- package/studio/build-local/static/js/signIn.0134746e.chunk.js +1 -0
- package/studio/build-local/static/js/signUp.c8fce52d.chunk.js +1 -0
- package/studio/build-local/static/js/structure-reloader.f65842a1.chunk.js +1 -0
- package/studio/build-local/static/js/topnav.0fa4de77.chunk.js +1 -0
- package/studio/build-local/static/js/updatePassword.bc881b36.chunk.js +1 -0
- package/utility/scripts/restartHdb.js +17 -17
- package/studio/build-local/static/css/main.6c0f1b63.css +0 -13
- package/studio/build-local/static/js/110.ca4244a6.chunk.js +0 -2
- package/studio/build-local/static/js/287.21477cf9.chunk.js +0 -1
- package/studio/build-local/static/js/409.17daa4fe.chunk.js +0 -2
- package/studio/build-local/static/js/424.ad87c8fd.chunk.js +0 -1
- package/studio/build-local/static/js/446.5237e847.chunk.js +0 -2
- package/studio/build-local/static/js/662.92e32ffc.chunk.js +0 -1
- package/studio/build-local/static/js/718.74e9355d.chunk.js +0 -1
- package/studio/build-local/static/js/723.c58acced.chunk.js +0 -2
- package/studio/build-local/static/js/731.8a941eb3.chunk.js +0 -1
- package/studio/build-local/static/js/807.510f66df.chunk.js +0 -2
- package/studio/build-local/static/js/807.510f66df.chunk.js.LICENSE.txt +0 -5
- package/studio/build-local/static/js/926.88d6f9ce.chunk.js +0 -1
- package/studio/build-local/static/js/browse-csvupload.453237f3.chunk.js +0 -1
- package/studio/build-local/static/js/browse-datatable.b9ef2d28.chunk.js +0 -1
- package/studio/build-local/static/js/browse-entitymanager.50827a5a.chunk.js +0 -1
- package/studio/build-local/static/js/browse-jsonviewer.a2534004.chunk.js +0 -1
- package/studio/build-local/static/js/custom-functions.dd7e182c.chunk.js +0 -1
- package/studio/build-local/static/js/instance-charts.34d15f02.chunk.js +0 -1
- package/studio/build-local/static/js/instance-cluster.5bce430c.chunk.js +0 -1
- package/studio/build-local/static/js/instance-config.70c17b53.chunk.js +0 -1
- package/studio/build-local/static/js/instance-query.4f6eec62.chunk.js +0 -1
- package/studio/build-local/static/js/instance-roles.507a4ed0.chunk.js +0 -1
- package/studio/build-local/static/js/instance-status.ce9d7f64.chunk.js +0 -1
- package/studio/build-local/static/js/instance-users-datatable.190640fd.chunk.js +0 -1
- package/studio/build-local/static/js/instance-users-edit.d2444479.chunk.js +0 -1
- package/studio/build-local/static/js/instance-users.eabfbbde.chunk.js +0 -1
- package/studio/build-local/static/js/instance.a163623f.chunk.js +0 -1
- package/studio/build-local/static/js/instances.6b88a87c.chunk.js +0 -1
- package/studio/build-local/static/js/main.7106edfd.js +0 -2
- package/studio/build-local/static/js/offline-app.7371216b.chunk.js +0 -1
- package/studio/build-local/static/js/online-app.db436eec.chunk.js +0 -1
- package/studio/build-local/static/js/organization-billing.b2f260f0.chunk.js +0 -1
- package/studio/build-local/static/js/organization-users.b6171b18.chunk.js +0 -1
- package/studio/build-local/static/js/organization.7800f16a.chunk.js +0 -1
- package/studio/build-local/static/js/organizations.8bb505f2.chunk.js +0 -1
- package/studio/build-local/static/js/profile.292bdd86.chunk.js +0 -1
- package/studio/build-local/static/js/resetPassword.8fdfba77.chunk.js +0 -1
- package/studio/build-local/static/js/roles-jsonviewer.c11f1816.chunk.js +0 -1
- package/studio/build-local/static/js/signIn.b11bdc50.chunk.js +0 -1
- package/studio/build-local/static/js/signUp.564d4e0b.chunk.js +0 -1
- package/studio/build-local/static/js/structure-reloader.b6de4091.chunk.js +0 -1
- package/studio/build-local/static/js/topnav.4fd41d60.chunk.js +0 -1
- package/studio/build-local/static/js/updatePassword.e23019c7.chunk.js +0 -1
- /package/studio/build-local/static/js/{723.c58acced.chunk.js.LICENSE.txt → 239.183c6cbc.chunk.js.LICENSE.txt} +0 -0
- /package/studio/build-local/static/js/{110.ca4244a6.chunk.js.LICENSE.txt → 43.73dc432d.chunk.js.LICENSE.txt} +0 -0
- /package/studio/build-local/static/js/{409.17daa4fe.chunk.js.LICENSE.txt → 591.7498da00.chunk.js.LICENSE.txt} +0 -0
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
"use strict";var Mq=Object.create;var fc=Object.defineProperty;var Pq=Object.getOwnPropertyDescriptor;var Uq=Object.getOwnPropertyNames;var vq=Object.getPrototypeOf,Bq=Object.prototype.hasOwnProperty;var a=(e,t)=>fc(e,"name",{value:t,configurable:!0});var Re=(e,t)=>()=>(e&&(t=e(e=0)),t);var g=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Fe=(e,t)=>{for(var r in t)fc(e,r,{get:t[r],enumerable:!0})},EO=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of Uq(t))!Bq.call(e,s)&&s!==r&&fc(e,s,{get:()=>t[s],enumerable:!(n=Pq(t,s))||n.enumerable});return e};var H=(e,t,r)=>(r=e!=null?Mq(vq(e)):{},EO(t||!e||!e.__esModule?fc(r,"default",{value:e,enumerable:!0}):r,e)),ie=e=>EO(fc({},"__esModule",{value:!0}),e);var pO=g((cce,mO)=>{var Hq=require("fast-glob"),{statSync:Uh,existsSync:vh,readFileSync:xq,writeFileSync:Gq}=require("fs"),{spawnSync:qq,spawn:Fq,execFileSync:ace}=require("child_process"),{isMainThread:kq}=require("worker_threads"),{join:ei,relative:hO}=require("path"),{PACKAGE_ROOT:Nn}=P(),{tmpdir:Vq,platform:$q}=require("os");require("source-map-support").install();var Yq=["resources","server","dataLayer","components"],Ec="ts-build",Bh,Kq=__filename.endsWith("tsBuild.js");if(Kq){if(kq){let r;try{Uh(ei(Nn,Ec)),r=!0}catch{}if(r)for(let n of Hq.sync(Yq.map(s=>s+"/**/*.ts"),{cwd:Nn})){let s=0,i=0;try{s=Uh(ei(Nn,n)).mtimeMs-5e3,i=Uh(ei(Nn,Ec,n.replace(/.ts$/,".js"))).mtimeMs}catch{}if(s>i){console.warn(`TypeScript ${n} is not compiled`+(i?` (TS source file was modified at ${new Date(s)} and compiled file at ${new Date(i)})`:"")+", consider enabling auto-compilation of TypeScript in your IDE), compiling now."),Bh=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),Bh=!0;if(Bh){let n=ei(Nn,"node_modules/.bin/tsc");$q()==="win32"&&(n+=".cmd");let s=qq(n,{cwd:Nn});if(s.stdout?.length&&console.log(s.stdout.toString()),s.stderr?.length&&console.log(s.stderr.toString()),r){let i=ei(Vq(),"harperdb-tsc.pid"),o;if(vh(i))try{process.kill(+xq(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=Fq(n,["--watch"],{cwd:Nn,detached:!0,stdio:"ignore"});Gq(i,c.pid.toString()),c.unref()}}}}let e=mO.constructor,t=e._findPath;e._findPath=function(r,n,s){if(r.startsWith(".")&&!s&&n.length===1&&n[0].startsWith(Nn)&&!n[0].includes("node_modules")){let i=hO(Nn,n[0]),o;i.startsWith(Ec)?o=ei(Nn,hO(Ec,i)):o=ei(Nn,Ec,i);let c=ei(o,r),u=c+".js";if(vh(u))return u;if(c.includes(".")&&vh(c))return c}return t(r,n,s)}}});var P=g((_ce,LO)=>{"use strict";var an=require("path"),Wq=require("fs"),{relative:uce,join:lce}=an,{existsSync:Qq}=Wq;function zq(){let e=__dirname;for(;!Qq(an.join(e,"package.json"));){let t=an.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(zq,"getHDBPackageRoot");var ti=zq(),SO="js",c_=SO,Jq="harperdb-config.yaml",jq="defaultConfig.yaml",Xq="hdb",TO=`harperdb.${c_}`,gO=`customFunctionsServer.${c_}`,Zq=`restartHdb.${c_}`,xh="HarperDB",a_="Custom Functions",u_="Clustering Hub",l_="Clustering Leaf",eF="Clustering Ingest Service",tF="Clustering Reply Service",rF="foreground.pid",nF="hdb.pid",sF="data",iF={HDB:xh,CLUSTERING_HUB:u_,CLUSTERING_LEAF:l_,CLUSTERING_INGEST_SERVICE:eF,CLUSTERING_REPLY_SERVICE:tF,CUSTOM_FUNCTIONS:a_,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"},oF={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},aF={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},cF={harperdb:xh,"clustering hub":u_,"clustering leaf":l_,"custom functions":a_,custom_functions:a_,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},uF={CLUSTERING_HUB_PROC_DESCRIPTOR:u_,CLUSTERING_LEAF_PROC_DESCRIPTOR:l_},Hh={HDB:an.join(ti,"server/harperdb"),CUSTOM_FUNCTIONS:an.join(ti,"server/customFunctions"),CLUSTERING_HUB:an.join(ti,"server/nats"),CLUSTERING_LEAF:an.join(ti,"server/nats")},lF={HDB:an.join(Hh.HDB,TO),CUSTOM_FUNCTIONS:an.join(Hh.CUSTOM_FUNCTIONS,gO)},_F={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:an.join(ti,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:an.join(ti,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:an.join(ti,"launchServiceScripts/launchUpdateNodes4-0-0.js")},dF={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},RO="support@harperdb.io",fF="customer-success@harperdb.io",AO=1,EF=4141,OO="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",hF="https://www.harperdb.io/product",mF=`For support, please submit a request at ${OO} or contact ${RO}`,bO=`For license support, please contact ${fF}`,pF="None of the specified records were found.",SF="hash attribute not found",TF=`Your current license only supports ${AO} role. ${bO}`,gF="Your current license only supports 3 connections to a node.",RF="127.0.0.1",AF=1,OF=/^\.$/,bF=/^\.\.$/,yF="U+002E",NF=/\//g,IF="U+002F",wF=/U\+002F/g,CF=/^U\+002E$/,DF=/^U\+002EU\+002E$/,LF="d",MF=999999,PF="*",UF="--max-old-space-size=",vF="system",BF="__hdb_hash",HF=".harperdb",xF=".hdb",GF="keys",qF="hdb_boot_properties.file",FF=".updateConfig.json",kF="SIGTSTP",VF=24,$F=6e4,YF=448,KF="blob",WF="trash",QF="database",zF="schema",JF="transactions",jF=".count",XF="id",ZF="PROCESS_NAME",yO={SETTINGS_PATH_KEY:"settings_path"},NO=require("lodash"),ek={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"},tk={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},rk={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},nk={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"},sk={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"},Pr="hdb_internal:",ik={CREATE_SCHEMA:Pr+"create_schema",CREATE_TABLE:Pr+"create_table",CREATE_ATTRIBUTE:Pr+"create_attribute",ADD_USER:Pr+"add_user",ALTER_USER:Pr+"alter_user",DROP_USER:Pr+"drop_user",HDB_NODES:Pr+"hdb_nodes",HDB_USERS:Pr+"hdb_users",HDB_WORKERS:Pr+"hdb_workers",CATCHUP:Pr+"catchup",SCHEMA_CATCHUP:Pr+"schema_catchup",WORKER_ROOM:Pr+"cluster_workers"},ok={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"},ak="060493.ks",ck=".license",uk={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},te={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"},lk={CSV:".csv",JSON:".json"},_k={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},dk={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},hc={};hc[te.INSERT]=te.INSERT;hc[te.UPDATE]=te.UPDATE;hc[te.UPSERT]=te.UPSERT;hc[te.DELETE]=te.DELETE;var Ge=Object.create(null);Ge[te.DESCRIBE_ALL]=te.DESCRIBE_ALL;Ge[te.DESCRIBE_TABLE]=te.DESCRIBE_TABLE;Ge[te.DESCRIBE_SCHEMA]=te.DESCRIBE_SCHEMA;Ge[te.READ_LOG]=te.READ_LOG;Ge[te.ADD_NODE]=te.ADD_NODE;Ge[te.LIST_USERS]=te.LIST_USERS;Ge[te.LIST_ROLES]=te.LIST_ROLES;Ge[te.USER_INFO]=te.USER_INFO;Ge[te.SQL]=te.SQL;Ge[te.GET_JOB]=te.GET_JOB;Ge[te.SEARCH_JOBS_BY_START_DATE]=te.SEARCH_JOBS_BY_START_DATE;Ge[te.DELETE_FILES_BEFORE]=te.DELETE_FILES_BEFORE;Ge[te.EXPORT_LOCAL]=te.EXPORT_LOCAL;Ge[te.EXPORT_TO_S3]=te.EXPORT_TO_S3;Ge[te.CLUSTER_STATUS]=te.CLUSTER_STATUS;Ge[te.REMOVE_NODE]=te.REMOVE_NODE;Ge[te.RESTART]=te.RESTART;Ge[te.CUSTOM_FUNCTIONS_STATUS]=te.CUSTOM_FUNCTIONS_STATUS;Ge[te.GET_CUSTOM_FUNCTIONS]=te.GET_CUSTOM_FUNCTIONS;Ge[te.GET_CUSTOM_FUNCTION]=te.GET_CUSTOM_FUNCTION;Ge[te.SET_CUSTOM_FUNCTION]=te.SET_CUSTOM_FUNCTION;Ge[te.DROP_CUSTOM_FUNCTION]=te.DROP_CUSTOM_FUNCTION;Ge[te.ADD_CUSTOM_FUNCTION_PROJECT]=te.ADD_CUSTOM_FUNCTION_PROJECT;Ge[te.DROP_CUSTOM_FUNCTION_PROJECT]=te.DROP_CUSTOM_FUNCTION_PROJECT;Ge[te.PACKAGE_CUSTOM_FUNCTION_PROJECT]=te.PACKAGE_CUSTOM_FUNCTION_PROJECT;Ge[te.DEPLOY_CUSTOM_FUNCTION_PROJECT]=te.DEPLOY_CUSTOM_FUNCTION_PROJECT;var fk={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",COPYDB:"copy-db"},Ek={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},IO={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"},hk=NO.invert(IO),mk={CUSTOMFUNCTIONS_ENABLED:"customFunctions_enabled",CUSTOMFUNCTIONS_NETWORK_PORT:"customFunctions_network_port",CUSTOMFUNCTIONS_TLS_CERTIFICATE:"customFunctions_tls_certificate",CUSTOMFUNCTIONS_NETWORK_CORS:"customFunctions_network_cors",CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST:"customFunctions_network_corsAccessList",CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT:"customFunctions_network_headersTimeout",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT:"customFunctions_network_keepAliveTimeout",CUSTOMFUNCTIONS_TLS_PRIVATEKEY:"customFunctions_tls_privateKey",CUSTOMFUNCTIONS_TLS_CERT_AUTH:"customFunctions_tls_certificateAuthority",CUSTOMFUNCTIONS_NETWORK_TIMEOUT:"customFunctions_network_timeout",CUSTOMFUNCTIONS_NODEENV:"customFunctions_nodeEnv",CUSTOMFUNCTIONS_ROOT:"customFunctions_root"},w={ANALYTICS_AGGREGATEPERIOD:"analytics_aggregatePeriod",AUTHENTICATION_AUTHORIZELOCAL:"authentication_authorizeLocal",AUTHENTICATION_CACHETTL:"authentication_cacheTTL",AUTHENTICATION_ENABLESESSIONS:"authentication_enableSessions",AUTHENTICATION_OPERATIONTOKENTIMEOUT:"authentication_operationTokenTimeout",AUTHENTICATION_REFRESHTOKENTIMEOUT:"authentication_refreshTokenTimeout",CLUSTERING_USER:"clustering_user",CLUSTERING_ENABLED:"clustering_enabled",CLUSTERING_HUBSERVER_CLUSTER_NAME:"clustering_hubServer_cluster_name",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT:"clustering_hubServer_cluster_network_port",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES:"clustering_hubServer_cluster_network_routes",CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT:"clustering_hubServer_leafNodes_network_port",CLUSTERING_HUBSERVER_NETWORK_PORT:"clustering_hubServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_PORT:"clustering_leafServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_ROUTES:"clustering_leafServer_network_routes",CLUSTERING_LEAFSERVER_STREAMS_MAXAGE:"clustering_leafServer_streams_maxAge",CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES:"clustering_leafServer_streams_maxBytes",CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS:"clustering_leafServer_streams_maxMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS:"clustering_leafServer_streams_maxConsumeMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS:"clustering_leafServer_streams_maxIngestThreads",CLUSTERING_LEAFSERVER_STREAMS_PATH:"clustering_leafServer_streams_path",CLUSTERING_NODENAME:"clustering_nodeName",CLUSTERING_TLS_CERTIFICATE:"clustering_tls_certificate",CLUSTERING_TLS_PRIVATEKEY:"clustering_tls_privateKey",CLUSTERING_TLS_CERT_AUTH:"clustering_tls_certificateAuthority",CLUSTERING_TLS_INSECURE:"clustering_tls_insecure",CLUSTERING_TLS_VERIFY:"clustering_tls_verify",CLUSTERING_LOGLEVEL:"clustering_logLevel",CLUSTERING_REPUBLISHMESSAGES:"clustering_republishMessages",CLUSTERING_DATABASELEVEL:"clustering_databaseLevel",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",THREADS:"threads",THREADS_COUNT:"threads_count",THREADS_DEBUG:"threads_debug",THREADS_DEBUG_STARTINGPORT:"threads_debug_startingPort",THREADS_DEBUG_PORT:"threads_debug_port",THREADS_DEBUG_HOST:"threads_debug_host",THREADS_DEBUG_WAITFORDEBUGGER:"threads_debug_waitForDebugger",THREADS_MAXHEAPMEMORY:"threads_maxHeapMemory",HTTP_SESSIONAFFINITY:"http_sessionAffinity",HTTP_COMPRESSIONTHRESHOLD:"http_compressionThreshold",HTTP_CORS:"http_cors",HTTP_CORSACCESSLIST:"http_corsAccessList",HTTP_HEADERSTIMEOUT:"http_headersTimeout",HTTP_KEEPALIVETIMEOUT:"http_keepAliveTimeout",HTTP_TIMEOUT:"http_timeout",HTTP_PORT:"http_port",HTTP_SECUREPORT:"http_securePort",HTTP_MTLS:"http_mtls",HTTP_MTLS_REQUIRED:"http_mtls_required",HTTP_MTLS_USER:"http_mtls_user",HTTP_MAXHEADERSIZE:"http_maxHeaderSize",HTTP_THREADRANGE:"http_threadRange",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:"operationsApi_tls",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_MAXTRANSACTIONQUEUETIME:"storage_maxTransactionQueueTime",STORAGE_PATH:"storage_path",STORAGE_AUDIT_PATH:"storage_audit_path",STORAGE_MAXFREESPACETOLOAD:"storage_maxFreeSpaceToLoad",STORAGE_MAXFREESPACETORETAIN:"storage_maxFreeSpaceToRetain",STORAGE_PAGESIZE:"storage_pageSize",STORAGE_COMPRESSION_DICTIONARY:"storage_compression_dictionary",STORAGE_COMPRESSION_THRESHOLD:"storage_compression_threshold",STORAGE_COMPACTONSTART:"storage_compactOnStart",STORAGE_COMPACTONSTARTKEEPBACKUP:"storage_compactOnStartKeepBackup",DATABASES:"databases",IGNORE_SCRIPTS:"ignoreScripts",MQTT_NETWORK_PORT:"mqtt_network_port",MQTT_WEBSOCKET:"mqtt_webSocket",MQTT_NETWORK_SECUREPORT:"mqtt_network_securePort",MQTT_NETWORK_MTLS:"mqtt_network_mtls",MQTT_NETWORK_MTLS_REQUIRED:"mqtt_network_mtls_required",MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY:"mqtt_network_mtls_certificateAuthority",MQTT_NETWORK_MTLS_USER:"mqtt_network_mtls_user",MQTT_REQUIREAUTHENTICATION:"mqtt_requireAuthentication",COMPONENTSROOT:"componentsRoot",TLS_CERTIFICATE:"tls_certificate",TLS_PRIVATEKEY:"tls_privateKey",TLS_CERTIFICATEAUTHORITY:"tls_certificateAuthority",TLS_CIPHERS:"tls_ciphers",TLS:"tls",CLONED:"cloned"},wO={settings_path:yO.SETTINGS_PATH_KEY,hdb_root_key:w.ROOTPATH,hdb_root:w.ROOTPATH,rootpath:w.ROOTPATH,server_port_key:w.OPERATIONSAPI_NETWORK_PORT,server_port:w.OPERATIONSAPI_NETWORK_PORT,cert_key:w.TLS_CERTIFICATE,certificate:w.TLS_CERTIFICATE,private_key_key:w.TLS_PRIVATEKEY,private_key:w.TLS_PRIVATEKEY,http_secure_enabled_key:w.OPERATIONSAPI_NETWORK_HTTPS,https_on:w.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:w.OPERATIONSAPI_NETWORK_CORS,cors_on:w.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:w.LOGGING_LEVEL,log_level:w.LOGGING_LEVEL,log_path_key:w.LOGGING_ROOT,log_path:w.LOGGING_ROOT,clustering_node_name_key:w.CLUSTERING_NODENAME,node_name:w.CLUSTERING_NODENAME,clustering_enabled_key:w.CLUSTERING_ENABLED,clustering:w.CLUSTERING_ENABLED,max_http_threads:w.THREADS_COUNT,max_hdb_processes:w.THREADS_COUNT,server_timeout_key:w.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:w.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:w.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:w.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:w.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:w.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:w.LOGGING_AUDITLOG,disable_transaction_log:w.LOGGING_AUDITLOG,operation_token_timeout_key:w.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:w.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:w.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:w.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:w.HTTP_PORT,custom_functions_port:w.HTTP_PORT,custom_functions_directory_key:w.COMPONENTSROOT,custom_functions_directory:w.COMPONENTSROOT,max_custom_function_processes:w.THREADS_COUNT,log_to_file:w.LOGGING_FILE,log_to_stdstreams:w.LOGGING_STDSTREAMS,local_studio_on:w.LOCALSTUDIO_ENABLED,clustering_port:w.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:w.CLUSTERING_USER,clustering_enabled:w.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:w.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:w.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:w.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:w.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:w.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:w.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:w.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:w.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:w.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxconsumemsgs:w.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS,clustering_leafserver_streams_maxingestthreads:w.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS,clustering_leafserver_streams_maxmsgs:w.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:w.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:w.CLUSTERING_NODENAME,clustering_tls_certificate:w.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:w.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:w.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:w.CLUSTERING_TLS_INSECURE,clustering_tls_verify:w.CLUSTERING_TLS_VERIFY,clustering_loglevel:w.CLUSTERING_LOGLEVEL,clustering_republishmessages:w.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:w.CLUSTERING_DATABASELEVEL,customfunctions_network_port:w.HTTP_PORT,customfunctions_tls_certificate:w.TLS_CERTIFICATE,customfunctions_network_cors:w.HTTP_CORS,customfunctions_network_corsaccesslist:w.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:w.HTTP_HEADERSTIMEOUT,customfunctions_network_https:w.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:w.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:w.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:w.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:w.HTTP_TIMEOUT,customfunctions_tls:w.TLS,http_threads:w.THREADS_COUNT,threads:w.THREADS_COUNT,threads_count:w.THREADS_COUNT,threads_debug:w.THREADS_DEBUG,threads_debug_startingport:w.THREADS_DEBUG_STARTINGPORT,threads_debug_port:w.THREADS_DEBUG_PORT,threads_debug_host:w.THREADS_DEBUG_HOST,threads_debug_waitfordebugger:w.THREADS_DEBUG_WAITFORDEBUGGER,threads_maxheapmemory:w.THREADS_MAXHEAPMEMORY,http_session_affinity:w.HTTP_SESSIONAFFINITY,http_compressionthreshold:w.HTTP_COMPRESSIONTHRESHOLD,http_cors:w.HTTP_CORS,http_corsaccesslist:w.HTTP_CORSACCESSLIST,http_headerstimeout:w.HTTP_HEADERSTIMEOUT,http_keepalivetimeout:w.HTTP_KEEPALIVETIMEOUT,http_timeout:w.HTTP_TIMEOUT,http_port:w.HTTP_PORT,http_secureport:w.HTTP_SECUREPORT,http_mtls:w.HTTP_MTLS,http_mtls_user:w.HTTP_MTLS_USER,http_mtls_required:w.HTTP_MTLS_REQUIRED,http_maxheadersize:w.HTTP_MAXHEADERSIZE,http_threadrange:w.HTTP_THREADRANGE,customfunctions_processes:w.THREADS_COUNT,customfunctions_root:w.COMPONENTSROOT,localstudio_enabled:w.LOCALSTUDIO_ENABLED,logging_file:w.LOGGING_FILE,logging_level:w.LOGGING_LEVEL,logging_root:w.LOGGING_ROOT,logging_rotation_enabled:w.LOGGING_ROTATION_ENABLED,logging_rotation_compress:w.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:w.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:w.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:w.LOGGING_ROTATION_PATH,logging_stdstreams:w.LOGGING_STDSTREAMS,logging_auditlog:w.LOGGING_AUDITLOG,logging_auditretention:w.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:w.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:w.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:w.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:w.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_network_cors:w.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:w.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:w.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:w.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:w.OPERATIONSAPI_NETWORK_PORT,operationsapi_network_domainsocket:w.OPERATIONSAPI_NETWORK_DOMAINSOCKET,operationsapi_network_secureport:w.OPERATIONSAPI_NETWORK_SECUREPORT,operationsapi_tls:w.OPERATIONSAPI_TLS,operationsapi_tls_certificate:w.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_tls_privatekey:w.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:w.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY,operationsapi_network_timeout:w.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_root:w.ROOTPATH,databases:w.DATABASES,storage_path:w.STORAGE_PATH,storage_maxtransactionqueuetime:w.STORAGE_MAXTRANSACTIONQUEUETIME,ignorescripts:w.IGNORE_SCRIPTS,mqtt_network_port:w.MQTT_NETWORK_PORT,mqtt_websocket:w.MQTT_WEBSOCKET,mqtt_network_secureport:w.MQTT_NETWORK_SECUREPORT,mqtt_network_mtls:w.MQTT_NETWORK_MTLS,mqtt_network_mtls_certificateAuthority:w.MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY,mqtt_network_mtls_user:w.MQTT_NETWORK_MTLS_USER,mqtt_network_mtls_required:w.MQTT_NETWORK_MTLS_REQUIRED,mqtt_requireauthentication:w.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:w.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:w.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:w.AUTHENTICATION_CACHETTL,authentication_enablesessions:w.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:w.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:w.AUTHENTICATION_REFRESHTOKENTIMEOUT,componentsroot:w.COMPONENTSROOT,tls:w.TLS,tls_certificate:w.TLS_CERTIFICATE,tls_privatekey:w.TLS_PRIVATEKEY,tls_certificateauthority:w.TLS_CERTIFICATEAUTHORITY,tls_ciphers:w.TLS_CIPHERS};for(let e in w){let t=w[e];wO[t.toLowerCase()]=t}var pk={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},Sk={csv_file_load:"csv_file_load",csv_data_load:te.CSV_DATA_LOAD,csv_url_load:te.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",restart_service:"restart_service"},Tk={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"},gk={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},Rk={VERSION_DEFAULT:"2.2.0"},Ak={DEVELOPMENT:8192,DEFAULT:512},Ok={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"},bk={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"},yk={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST",ERR_INVALID_ARG_TYPE:"ERR_INVALID_ARG_TYPE"},CO={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},Nk=Symbol("metadata"),Ik="__clustering__",wk=Object.values(CO),Ck=15984864e5,DO={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},Dk=NO.invert(DO),Lk={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"},Mk=111,Pk=`\r
|
|
2
|
-
`,
|
|
3
|
-
`}a(gs,"createLogRecord");function gc(e){Ss&&kO(e),Qn&&process.stdout.write(e)}a(gc,"logStdOut");function E_(e){Ss&&kO(e),Qn&&process.stderr.write(e)}a(E_,"logStdErr");function kO(e){
|
|
4
|
-
`).slice(1)){s=s.trim();let[i]=s.split(" ",1),o=s.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=o}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,n])=>({pid:Number.parseInt(r,10),name:dV.basename(n.comm),cmd:n.args,ppid:Number.parseInt(n.ppid,10),uid:Number.parseInt(n.uid,10),cpu:Number.parseFloat(n["%cpu"]),memory:Number.parseFloat(n["%mem"])}))}a(mV,"findPs")});var ft=g((Tce,QO)=>{"use strict";var pV="__dbis__",SV="__txns__",TV="__environment_name__",gV="__dbi_defintion__",RV={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"},AV=["__createdtime__","__updatedtime__"],OV="\uFFFF",WO={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},bV=Object.values(WO);QO.exports={AUDIT_STORE_NAME:SV,INTERNAL_DBIS_NAME:pV,DBI_DEFINITION_NAME:gV,SEARCH_TYPES:RV,TIMESTAMP_NAMES:AV,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:TV,TRANSACTIONS_DBI_NAMES_ENUM:WO,TRANSACTIONS_DBIS:bV,OVERFLOW_MARKER:OV}});var Ur=g((gce,nb)=>{"use strict";var zO=P(),JO=ft(),jO={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},XO=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),ZO={500:XO("There was an error processing your request."),400:"Invalid request"},yV=ZO[jO.INTERNAL_SERVER_ERROR],NV={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.`},IV={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},wV={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"},CV={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 ${JO.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${JO.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"},DV={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${zO.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 ${zO.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"},eb={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"},LV={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."},MV={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`},PV={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"},UV={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},vV={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`},tb={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.`},rb={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}`},BV={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."},HV={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},xV={...eb,...wV,...NV,...LV,...MV,...PV,...UV,...vV,...DV,...tb,...rb,...BV,...HV,...IV};nb.exports={CHECK_LOGS_WRAPPER:XO,HDB_ERROR_MSGS:xV,DEFAULT_ERROR_MSGS:ZO,DEFAULT_ERROR_RESP:yV,HTTP_STATUS_CODES:jO,LMDB_ERRORS_ENUM:CV,AUTHENTICATION_ERROR_MSGS:eb,VALIDATION_ERROR_MSGS:tb,ITC_ERRORS:rb}});var se=g((Ace,ob)=>{"use strict";var $o=Ur(),GV=$(),qV=P(),h_=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,sb),this.statusCode=n||$o.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||($o.DEFAULT_ERROR_MSGS[n]?$o.DEFAULT_ERROR_MSGS[n]:$o.DEFAULT_ERROR_MSGS[$o.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,s&&(this.logLevel=s),typeof this.message!="string"&&(this.stack=t.stack),i&&GV[s](i)}},Wh=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}},Qh=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function sb(e,t,r,n=qV.LOG_LEVELS.ERROR,s=null,i=!1){if(ib(e))return e;let o=new h_(e,t,r,n,s);return i&&delete o.stack,o}a(sb,"handleHDBError");function ib(e){return e.__proto__.constructor.name===h_.name}a(ib,"isHDBError");ob.exports={isHDBError:ib,handleHDBError:sb,ClientError:Wh,ServerError:Qh,hdb_errors:$o}});var je=g((bce,fb)=>{"use strict";var yc=P(),FV=z(),ur=ee(),Nc=require("path"),kV=require("minimist"),ab=require("fs-extra"),cb=require("lodash");ur.initSync();var{CONFIG_PARAMS:ri,DATABASES_PARAM_CONFIG:Rc,SYSTEM_SCHEMA_NAME:m_}=yc,Ac,Oc,bc;function ub(){if(Ac!==void 0)return Ac;if(ur.getHdbBasePath()!==void 0)return Ac=ur.get(ri.STORAGE_PATH)||Nc.join(ur.getHdbBasePath(),yc.DATABASES_DIR_NAME),Ac}a(ub,"getBaseSchemaPath");function lb(){if(Oc!==void 0)return Oc;if(ur.getHdbBasePath()!==void 0)return Oc=db(m_),Oc}a(lb,"getSystemSchemaPath");function _b(){if(bc!==void 0)return bc;if(ur.getHdbBasePath()!==void 0)return bc=ur.get(yc.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||Nc.join(ur.getHdbBasePath(),yc.TRANSACTIONS_DIR_NAME),bc}a(_b,"getTransactionAuditStoreBasePath");function VV(e,t){let r=ur.get(ri.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||Nc.join(_b(),e.toString())}a(VV,"getTransactionAuditStorePath");function db(e,t){e=e.toString(),t=t&&t.toString();let r=ur.get(yc.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||Nc.join(ub(),e)}a(db,"getSchemaPath");function $V(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,kV(process.argv));let n=r[ri.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!FV.isObject(n))throw o;i=n}for(let o of i){let c=o[m_];if(!c)continue;let u=ur.get(ri.DATABASES);u=u??{};let _=c?.tables?.[t]?.[Rc.PATH];if(_)return cb.set(u,[m_,Rc.TABLES,t,Rc.PATH],_),ur.setProperty(ri.DATABASES,u),_;let l=c?.[Rc.PATH];if(l)return cb.set(u,[m_,Rc.PATH],l),ur.setProperty(ri.DATABASES,u),l}}let s=r[ri.STORAGE_PATH.toUpperCase()];if(s){if(!ab.pathExistsSync(s))throw new Error(s+" does not exist");let i=Nc.join(s,e);return ab.mkdirsSync(i),ur.setProperty(ri.STORAGE_PATH,s),i}return lb()}a($V,"initSystemSchemaPaths");function YV(){Ac=void 0,Oc=void 0,bc=void 0}a(YV,"resetPaths");fb.exports={getBaseSchemaPath:ub,getSystemSchemaPath:lb,getTransactionAuditStorePath:VV,getTransactionAuditStoreBasePath:_b,getSchemaPath:db,initSystemSchemaPaths:$V,resetPaths:YV}});var vr=g((wce,Sb)=>{"use strict";var KV=Ur().LMDB_ERRORS_ENUM,Nce=require("lmdb"),WV=ft(),Ice=require("buffer").Buffer,{OVERFLOW_MARKER:Eb,MAX_SEARCH_KEY_LENGTH:p_}=WV,hb=["number","string","symbol","boolean","bigint"];function QV(e){if(e=e?.primaryStore||e,!e)throw new Error(KV.ENV_REQUIRED)}a(QV,"validateEnv");function zV(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(zV,"stringifyData");function JV(e){return e instanceof Date?e.valueOf():e}a(JV,"convertKeyValueToWrite");function jV(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(hb.includes(typeof e))return e.length>p_?[e.slice(0,p_)+Eb]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(hb.includes(typeof i))i.length>p_?r.push(i.slice(0,p_)+Eb):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(jV,"getIndexedValues");var S_=0,mb=0;function pb(){mb=Date.now()-performance.now()}a(pb,"adjustStartTime");pb();var XV=6e4;setInterval(pb,XV).unref();function ZV(){let e=performance.now()+mb;return e>S_?(S_=e,e):(S_+=488e-6,S_)}a(ZV,"getNextMonotonicTime");Sb.exports={validateEnv:QV,stringifyData:zV,convertKeyValueToWrite:JV,getNextMonotonicTime:ZV,getIndexedValues:jV}});var Tb,In,zh,Ic=Re(()=>{Tb=require("events"),In=class extends Tb.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;drainCloseListener;currentDrainResolver;[Symbol.asyncIterator](){let t=new zh;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(){let t=this.queue?.shift();return t||this.emit("drained"),t}waitForDrain(){return new Promise(t=>{!this.queue||this.queue.length===0?t(!0):(this.once("drained",()=>t(!0)),this.currentDrainResolver=t,this.drainCloseListener||(this.drainCloseListener=!0,this.on("close",()=>{this.currentDrainResolver?.(!1)})))})}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)}},zh=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 Gi={};Fe(Gi,{server:()=>at});var gb,at,lr=Re(()=>{gb=require("../index"),at={};(0,gb._assignPackageExport)("server",at)});var Xh={};Fe(Xh,{loadGQLSchema:()=>r$,start:()=>jh,startOnMainThread:()=>t$});function jh({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:u,NamedTypeNode:_,StringValueNode:l}=await import("graphql"),d=o(new c(r.toString(),s)),E=new Map,f=[],h;for(let S of d.definitions)switch(S.kind){case u.OBJECT_TYPE_DEFINITION:let x=function(U){if(U.kind==="NonNullType"){let Q=x(U.type);return Q.nullable=!1,Q}if(U.kind==="ListType")return{type:"array",elements:x(U.type)};let M={type:U.name?.value};return Object.defineProperty(M,"location",{value:U.loc.startToken}),M};a(x,"getProperty");let T=S.name.value,R=[],N={table:null,database:null,properties:R};E.set(T,N);for(let U of S.directives){if(U.name.value==="table"){for(let F of U.arguments)N[F.name.value]=F.value.value;N.schema&&(N.database=N.schema),N.table||(N.table=T),N.audit&&(N.audit=N.audit!=="false"),N.attributes=N.properties,f.push(N)}if(U.name.value==="sealed"&&(N.sealed=!0),U.name.value==="export"){N.export=!0;for(let F of U.arguments)F.name.value==="name"&&(N.export={name:F.value.value})}}let b=!1;for(let U of S.fields){let F=x(U.type);F.name=U.name.value,R.push(F);for(let M of U.directives)if(M.name.value==="primaryKey")b?console.warn("Can not define two attributes as a primary key"):(F.isPrimaryKey=!0,b=!0);else if(M.name.value==="indexed")F.indexed=!0;else if(M.name.value==="relationship"){let Q={};for(let J of M.arguments)Q[J.name.value]=J.value.value;F.relationship=Q}else if(M.name.value==="createdTime")F.assignCreatedTime=!0;else if(M.name.value==="updatedTime")F.assignUpdatedTime=!0;else if(M.name.value==="expiresAt")F.expiresAt=!0;else if(M.name.value==="allow"){let Q=F.authorizedRoles=[];for(let J of M.arguments)J.name.value==="role"&&Q.push(J.value.value)}}N.type=T,T==="Query"&&(h=N)}function p(S){let T=E.get(S.type);T?(Object.defineProperty(S,"properties",{value:T.properties}),Object.defineProperty(S,"definition",{value:T})):S.type==="array"?p(S.elements):e$.includes(S.type)||(0,Rb.getWorkerIndex)()===0&&console.error(`The type ${S.type} is unknown at line ${S.location.line}, column ${S.location.column}, in ${s}`)}a(p,"connectPropertyType");for(let S of E.values())for(let T of S.properties)p(T);for(let S of f)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,Jh.dirname)(n),S.tableClass):i.set((0,Jh.dirname)(n)+"/"+(S.export.name||S.type),S.tableClass))}}var Jh,Rb,e$,t$,r$,Ab=Re(()=>{Jh=require("path");Ae();Rb=H(We()),e$=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];a(jh,"start");t$=jh,r$=jh({ensureTable:Et}).handleFile});async function T_(e){let t=(0,yb.pathToFileURL)(e).toString();return n$?(wc||(wc=s$(o$)),(await(await wc).import(t)).namespace):import(t)}async function s$(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),wc=new Compartment({console,Math,Date,fetch:i$,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,bb.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){Object.assign(s,{Resource:$t,tables:Br,databases:ct})}};let n=await(0,Ob.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)}}),wc}function i$(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 o$(){return{Resource:$t,tables:Br}}var Ob,bb,yb,n$,wc,Zh=Re(()=>{cn();Ae();Ob=require("fs/promises"),bb=require("path"),yb=require("url"),n$=!1;a(T_,"secureImport");a(s$,"getCompartment");a(i$,"secureOnlyFetch");a(o$,"getGlobalVars")});var tm={};Fe(tm,{handleFile:()=>a$});async function a$(e,t,r,n){let s=new Map,i=await T_(r);c(i.default)&&n.set((0,em.dirname)(t),i.default),o(i,(0,em.dirname)(t));function o(u,_){for(let l in u){let d=u[l];c(d)?n.set(_+"/"+l,d):typeof d=="object"&&o(d,_+"/"+l)}}a(o,"recurseForResources");function c(u){return typeof u=="function"&&(u.get||u.put||u.post||u.delete)}return a(c,"isResource"),s}var em,Nb=Re(()=>{Zh();em=require("path");a(a$,"handleFile")});var nm={};Fe(nm,{start:()=>c$});function c$({resources:e}){e.set("login",rm),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var rm,Ib=Re(()=>{cn();a(c$,"start");rm=class extends $t{static{a(this,"Login")}static async get(t,r,n){}static async post(t,r,n){let{username:s,password:i,redirect:o}=r;return{data:await n.login(s,i)}}}});var Ub={};Fe(Ub,{parse:()=>im,streamAsJSON:()=>Cc,stringify:()=>qi});function Cc(e){return new sm({value:e})}function wb(e){return console.error(e),JSON.stringify(e.toString())}function Cb(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function qi(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===Mb)return Pb(e);if(t.resolution)return t.resolution.then(()=>qi(e));throw t}}function Pb(e){let t=typeof e;if(t==="object"){if(e===null)return"null";e.toJSON&&(e=e.toJSON());let r;if(Array.isArray(e)){r="[";for(let n=0;n<e.length;n++)n>0&&(r+=","),r+=Pb(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+qi(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function im(e){return _$.test(e)?u$.parse(e):JSON.parse(e)}var Db,Lb,u$,l$,Mb,sm,_$,om=Re(()=>{Db=require("stream"),Lb=H(require("json-bigint-fixes")),u$=(0,Lb.default)({useNativeBigInt:!0}),l$=1e4,Mb={};BigInt.prototype.toJSON=function(){throw Mb};a(Cc,"streamAsJSON");sm=class extends Db.Readable{static{a(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0),this.activeIterators=[]}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],n=t[Symbol.iterator];if((n||r)&&!t.then){yield"[";let s=!0;if((r||n)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();this.activeIterators.push(i);let o;for(;;)if(o=i.next(),o.then&&(yield o.then(c=>(o=c,""))),o.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else s?s=!1:yield",",yield*this.serialize(o.value)}for(let i of t)s?s=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(s=>this.serialize(s),wb)}catch(s){yield wb(s)}else yield qi(t)}else yield qi(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);Cb(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>l$?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 Cb(this.readIterator(t.childIterator),n=>{if(n)return t.childIterator=null,this.readIterator(t)});do{let n=t.next();if(n.done)return!0;if(r=n.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(s=>{if(s&&typeof s.return=="function")return t.childIterator=s,this.readIterator(t);if(this.push(s+""))return this.readIterator(t)});if(typeof r.return=="function")return t.childIterator=r,this.readIterator(t)}}while(this.push(r))}catch(r){return console.error(r),this.push(r.toString()),this.push(null),!0}}_destroy(t,r){for(let n of this.activeIterators)t?n.throw(t):n.return();r()}};a(wb,"handleError");a(Cb,"when");a(qi,"stringify");a(Pb,"jsStringify");_$=/[[,:]\s*-?\d{16,}/;a(im,"parse")});var Wb=g(($ce,Kb)=>{"use strict";var am=require("recursive-iterator"),d$=require("alasql"),cm=require("clone"),vb=z(),{handleHDBError:Bb,hdb_errors:f$}=se(),{HDB_ERROR_MSGS:Hb,HTTP_STATUS_CODES:xb}=f$,{getDatabases:E$}=(Ae(),ie(ke)),h$=["DISTINCT_ARRAY"],Gb=Symbol("validateTables"),um=Symbol("validateTable"),Vce=Symbol("getAllColumns"),qb=Symbol("validateAllColumns"),g_=Symbol("findColumn"),Fb=Symbol("validateOrderBy"),Dc=Symbol("validateSegment"),lm=Symbol("validateColumn"),kb=Symbol("setColumnsForTable"),Vb=Symbol("checkColumnsForAsterisk"),$b=Symbol("validateGroupBy"),Yb=Symbol("hasColumns"),_m=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[Gb](),this[Vb](),this[qb]()}[Gb](){if(this[Yb]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[um](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[um](t.table)})}}[Yb](){let t=!1,r=new am(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[um](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=E$();if(!r[t.databaseid])throw Bb(new Error,Hb.SCHEMA_NOT_FOUND(t.databaseid),xb.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw Bb(new Error,Hb.TABLE_NOT_FOUND(t.databaseid,t.tableid),xb.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=cm(s);i.table=cm(t),this.attributes.push(i)})}[g_](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)}[Vb](){let t=new am(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[kb](r.tableid)}[kb](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new d$.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[qb](){this[Dc](this.statement.columns,!1),this[Dc](this.statement.joins,!1),this[Dc](this.statement.where,!1),this[$b](this.statement.group,!1),this[Dc](this.statement.order,!0)}[Dc](t,r){if(!t)return;let n=new am(t),s=[];for(let{node:i,path:o}of n)!vb.isEmpty(i)&&!vb.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[Fb](i):s.push(this[lm](i)));return s}[$b](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&h$.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=cm(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[g_](n)[0];s&&r.push(s)}}}),this.statement.group.forEach(n=>{let s=null;if(!n.columnid)r.forEach((i,o)=>{if(i.toString()===n.toString()){s=i,r.splice(o,1);return}});else{let i=this[g_](n);if(!i||i.length===0)throw`unknown column '${n.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${n.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){s=o,r.splice(c,1);return}})}if(!s)throw`group by column '${n.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[Fb](t){let r=this.statement.columns.filter(n=>n.as===t.columnid);if(r.length>1)throw`ambiguous column reference ${(t.tableid?t.tableid+".":"")+t.columnid} in order by`;r.length===0&&this[lm](t)}[lm](t){let r=this[g_](t),n=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${n}`;if(r.length>1)throw`ambiguous column reference ${n}`;return r[0]}};Kb.exports=_m});var zb=g((Kce,Qb)=>{"use strict";var dm=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")}};Qb.exports=dm});var jb=g((Qce,Jb)=>{"use strict";var fm=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};Jb.exports=fm});var ty={};Fe(ty,{HAS_EXPIRATION:()=>gm,LAST_TIMESTAMP_PLACEHOLDER:()=>Pc,LOCAL_TIMESTAMP:()=>m$,METADATA:()=>Lc,NO_TIMESTAMP:()=>hm,PENDING_LOCAL_TIME:()=>Rm,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>Tm,RecordEncoder:()=>Sm,TIMESTAMP_ASSIGN_LAST:()=>S$,TIMESTAMP_ASSIGN_NEW:()=>Zb,TIMESTAMP_ASSIGN_PREVIOUS:()=>ey,TIMESTAMP_PLACEHOLDER:()=>R_,TIMESTAMP_RECORD_PREVIOUS:()=>mm,getUpdateRecord:()=>Am,handleLocalTimeForGets:()=>y_});function g$(){return Mc[0]=Mc[0]^64,p$.getFloat64(0)}function y_(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?.[Lc];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?.[Lc]>=0?c.value:c};let n=e.getRange;e.getRange=function(i){let o=n.call(this,i);return i.valuesForKey?o.map(c=>c?.value):i.values===!1||i.onlyCount?o:o.map(c=>{let u=c.value,_=u[Lc];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c})};let s=e.useReadTransaction();if(s.done(),!s.done.isTracked){let i=s.constructor,o=s.use,c=s.done;i.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,Fi.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let u=0;u<Fi.length;u++){let _=Fi[u].deref();(!_||_.isDone||_.isCommitted)&&Fi.splice(u--,1)}},i.prototype.done.isTracked=!0}return e}function Am(e,t,r){return function(n,s,i,o,c=-1,u,_,l,d="put",E,f){if(E||u==null?Yo=i?.localTime?mm|ey:hm:Yo=u?i?.localTime?mm|16384:Zb|16384:hm,l>0&&(c|=gm),O_=c,pm=l,i?.version===o&&u===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:Yo>0},p;try{E&&(h.ifVersion=p=i?.version??null);let S=e.put(n,s,h);if(u){let T=_?.user?.username;if(f&&(A_=e.encoder.encode(f)),E&&i?.localTime){let R=i?.localTime,N=r.get(R);if(N){let b=vt(N).previousLocalTime;return r.put(R,b_(o,t,n,b,T,d,A_),{ifVersion:p}),S}}r.put(Pc,b_(o,t,n,i?.localTime?1:0,T,d,A_),{append:d!=="invalidate",instructedWrite:!0,ifVersion:p})}return S}catch(S){throw S.message+=" id: "+n+" options: "+h,S}}}var Xb,Em,R_,Pc,Tm,m$,Lc,Mc,p$,hm,Zb,S$,ey,mm,gm,Rm,T$,A_,Yo,O_,pm,Sm,Fi,Uc=Re(()=>{Xb=require("msgpackr");ni();Em=H($()),R_=new Uint8Array([1,1,1,1,4,64,0,0]),Pc=new Uint8Array([1,1,1,1,1,0,0,0]),Tm=new Uint8Array([1,1,1,1,3,64,0,0]),m$=Symbol("local-timestamp"),Lc=Symbol("metadata"),Mc=new Uint8Array(8),p$=new DataView(Mc.buffer,0,8),hm=0,Zb=0,S$=1,ey=3,mm=4,gm=16,Rm=1,Yo=0,O_=-1,pm=0,Sm=class extends Xb.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(n,s){if(Yo||O_>=0){let i=0,o=Yo;o&&(i+=8,Yo=0);let c=O_,u=pm;c>=0&&(i+=2,O_=-1,u&&(i+=8,pm=0));let _=T$=r.call(this,n,s|2048|i);A_=_.subarray((_.start||0)+i,_.end);let l=_.start||0;return o&&(R_[4]=o,R_[5]=o>>8,_.set(R_,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,n,s)}}decode(t,r){let n=r?.start||0,s=r>-1?r:r?.end||t.length,i=t[n],o=0;try{if(i<32&&s>2){let c=n,u;if(i===2){if(t.copy)t.copy(Mc,0,c),c+=8;else for(let d=0;d<8;d++)Mc[d]=t[c++];u=g$(),i=t[c]}let _;i<32&&(o=i,c+=2,o&gm&&(_=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8));let l=super.decode(t.subarray(c,s),s-c);return{localTime:u,value:l,[Lc]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(g$,"getTimestamp");a(y_,"handleLocalTimeForGets");Fi=[];setInterval(()=>{for(let e=0;e<Fi.length;e++){let t=Fi[e].deref();!t||t.isDone||t.isCommitted?Fi.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(Em.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):Em.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(Am,"getUpdateRecord")});var vc=g((Zce,ny)=>{"use strict";var ry=ee(),R$=P(),{RecordEncoder:A$}=(Uc(),ie(ty)),Xce=require("fs");ry.initSync();var O$=ry.get(R$.CONFIG_PARAMS.STORAGE_CACHING)!==!1,Om=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=O$&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:A$})}};ny.exports=Om});var Bc=g((tue,sy)=>{"use strict";var Hr=ee(),un=P();Hr.initSync();var N_=class{static{a(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=2048,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.eventTurnBatching=!1,this.noSync=Hr.get(un.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Hr.get(un.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Hr.get(un.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",Hr.get(un.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=Hr.get(un.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),Hr.get(un.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=Hr.get(un.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),Hr.get(un.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=Hr.get(un.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),Hr.get(un.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=Hr.get(un.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=Hr.get(un.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};sy.exports=N_;N_.MAX_DBS=1e4});var Qe=g((nue,Ey)=>{"use strict";var ym=require("lmdb"),wn=require("fs-extra"),xr=require("path"),I_=vr(),ay=$(),_r=Ur().LMDB_ERRORS_ENUM,w_=jb(),Nm=vc(),cy=Bc(),si=ft(),iy=P(),{table:b$,resetDatabases:y$}=(Ae(),ie(ke)),oy=ee(),Cn=si.INTERNAL_DBIS_NAME,uy=si.DBI_DEFINITION_NAME,N$="data.mdb",I$="lock.mdb",Hc=".mdb",w$="-lock",bm=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=ln(t,r),this.key_type=this.dbi[si.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[si.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new ym.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function C_(e,t){if(e===void 0)throw new Error(_r.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(_r.ENV_NAME_REQUIRED)}a(C_,"pathEnvNameValidation");async function Im(e,t,r=!0){try{await wn.access(e)}catch(n){throw n.code==="ENOENT"?new Error(_r.INVALID_BASE_PATH):n}try{let n=xr.join(e,t+Hc);return await wn.access(n,wn.constants.R_OK|wn.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await wn.access(xr.join(e,t,N$),wn.constants.R_OK|wn.constants.F_OK),xr.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(_r.INVALID_ENVIRONMENT)}else throw new Error(_r.INVALID_ENVIRONMENT);throw n}}a(Im,"validateEnvironmentPath");function D_(e,t){if(I_.validateEnv(e),t===void 0)throw new Error(_r.DBI_NAME_REQUIRED)}a(D_,"validateEnvDBIName");async function C$(e,t,r=!1,n=!1){C_(e,t);let s=xr.basename(e);t=t.toString();let i=oy.get(iy.CONFIG_PARAMS.DATABASES);i||oy.setProperty(iy.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await Im(e,t,n),ly(e,t,r)}catch(o){if(o.message===_r.INVALID_ENVIRONMENT){let c=xr.join(e,t);await wn.mkdirp(n?c:e);let u=new cy(n?c:c+Hc,!1),_=ym.open(u);_.dbis=Object.create(null);let l=new Nm(!1);_.openDB(Cn,l),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=wm(e,t,r);return _[si.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(C$,"createEnvironment");async function D$(e,t,r,n=!0){C_(e,t),t=t.toString();let s=xr.join(e,t);return b$({table:t,database:xr.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(D$,"copyEnvironment");async function ly(e,t,r=!1){C_(e,t),t=t.toString();let n=wm(e,t,r);if(global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null)),global.lmdb_map[n]!==void 0)return global.lmdb_map[n];let s=await Im(e,t),i=xr.join(e,t+Hc),o=s!=i,c=new cy(s,o),u=ym.open(c);u.dbis=Object.create(null);let _=dy(u);for(let l=0;l<_.length;l++)ln(u,_[l]);return u[si.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=u,u}a(ly,"openEnvironment");async function L$(e,t,r=!1){C_(e,t),t=t.toString();let n=xr.join(e,t+Hc),s=await Im(e,t);if(global.lmdb_map!==void 0){let i=wm(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await _y(o),delete global.lmdb_map[i]}}await wn.remove(s),await wn.remove(s===n?s+w$:xr.join(xr.dirname(s),I$))}a(L$,"deleteEnvironment");async function _y(e){I_.validateEnv(e);let t=e[si.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(_y,"closeEnvironment");function wm(e,t,r=!1){let s=`${xr.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(wm,"getCachedEnvironmentName");function M$(e){I_.validateEnv(e);let t=Object.create(null),r=ln(e,Cn);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==Cn)try{t[n]=Object.assign(new w_,s)}catch{ay.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(M$,"listDBIDefinitions");function dy(e){I_.validateEnv(e);let t=[],r=ln(e,Cn);for(let{key:n}of r.getRange({start:!1}))n!==Cn&&t.push(n);return t}a(dy,"listDBIs");function P$(e,t){let n=ln(e,Cn).getEntry(t),s=new w_;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{ay.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(P$,"getDBIDefinition");function fy(e,t,r,n=!r){if(D_(e,t),t=t.toString(),t===Cn)throw new Error(_r.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return ln(e,t)}catch(s){if(s.message===_r.DBI_DOES_NOT_EXIST){let i=new Nm(r,n===!0),o=e.openDB(t,i),c=new w_(r===!0,n);return o[uy]=c,ln(e,Cn).putSync(t,c),e.dbis[t]=o,o}throw s}}a(fy,"createDBI");function ln(e,t){if(D_(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Cn?r=P$(e,t):r=new w_,r===void 0)throw new Error(_r.DBI_DOES_NOT_EXIST);let n;try{let s=new Nm(r.dup_sort,r.useVersions);if(n=e.openDB(t,s),n.db===void 0)throw new Error("MDB_NOTFOUND")}catch(s){throw s.message.includes("MDB_NOTFOUND")===!0?new Error(_r.DBI_DOES_NOT_EXIST):s}return n[uy]=r,e.dbis[t]=n,n}a(ln,"openDBI");function U$(e,t){D_(e,t),t=t.toString();let r=ln(e,t),n=r.getStats();return r[si.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(U$,"statDBI");async function v$(e,t){try{let r=xr.join(e,t+Hc);return(await wn.stat(r)).size}catch{throw new Error(_r.INVALID_ENVIRONMENT)}}a(v$,"environmentDataSize");function B$(e,t){if(D_(e,t),t=t.toString(),t===Cn)throw new Error(_r.CANNOT_DROP_INTERNAL_DBIS_NAME);ln(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],ln(e,Cn).removeSync(t)}a(B$,"dropDBI");function H$(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{ln(e,i)}catch(o){if(o.message===_r.DBI_DOES_NOT_EXIST)fy(e,i,i!==t,i===t),n=!0;else throw o}}n&&y$()}a(H$,"initializeDBIs");Ey.exports={openDBI:ln,openEnvironment:ly,createEnvironment:C$,listDBIs:dy,listDBIDefinitions:M$,createDBI:fy,dropDBI:B$,statDBI:U$,deleteEnvironment:L$,initializeDBIs:H$,TransactionCursor:bm,environmentDataSize:v$,copyEnvironment:D$,closeEnvironment:_y}});var my=g((iue,hy)=>{"use strict";var Cm=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};hy.exports=Cm});var Sy=g((aue,py)=>{"use strict";var Dm=class{static{a(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n,this.original_records=s}};py.exports=Dm});var gy=g((uue,Ty)=>{"use strict";var Lm=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};Ty.exports=Lm});var Ko=g((Eue,Oy)=>{"use strict";var x$=Qe(),G$=my(),q$=Sy(),F$=gy(),zn=vr(),xc=Ur().LMDB_ERRORS_ENUM,k$=ft(),Rs=P(),V$=z(),$$=require("uuid"),_ue=require("lmdb"),{handleHDBError:Y$,hdb_errors:K$}=se(),{OVERFLOW_MARKER:due,MAX_SEARCH_KEY_LENGTH:fue}=k$,Ry=ee();Ry.initSync();var L_=Ry.get(Rs.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Mm=Rs.TIME_STAMP_NAMES_ENUM.CREATED_TIME,ki=Rs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function W$(e,t,r,n,s=zn.getNextMonotonicTime()){Bm(e,t,r,n),Pm(e,t,r);let i=new G$,o=[],c=[];for(let u=0;u<n.length;u++){let _=n[u];Ay(_,!0,s);let l=Q$(e,t,r,_),d=_[t];o.push(l),c.push(d)}return Um(o,c,n,i,s)}a(W$,"insertRecords");function Q$(e,t,r,n){let s=n[t];return e.dbis[t].ifNoExists(s,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||n.hasOwnProperty(o)===!1)continue;let c=n[o];if(typeof c=="function"){let l=c([[{}]]);Array.isArray(l)&&(c=l[0][Rs.FUNC_VAL],n[o]=c)}let u=zn.getIndexedValues(c),_=e.dbis[o];if(u){L_&&_.prefetch(u.map(l=>({key:l,value:s})),M_);for(let l=0,d=u.length;l<d;l++)_.put(u[l],s)}}L_&&e.dbis[t].prefetch([s],M_),e.dbis[t].put(s,n,n[ki])})}a(Q$,"insertRecord");function z$(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(z$,"removeSkippedRecords");function Ay(e,t,r){let n=r>0;(n||!Number.isInteger(e[ki]))&&(e[ki]=r||(r=zn.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[Mm]))&&(e[Mm]=r||zn.getNextMonotonicTime()):delete e[Mm]}a(Ay,"setTimestamps");function Pm(e,t,r){r.indexOf(Rs.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Rs.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Rs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Rs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),x$.initializeDBIs(e,t,r)}a(Pm,"initializeTransaction");async function J$(e,t,r,n,s=zn.getNextMonotonicTime()){Bm(e,t,r,n),Pm(e,t,r);let i=new q$,o=[],c=[],u=[];for(let _=0;_<n.length;_++){let l=n[_],d=l[t],E;try{E=vm(e,t,l,d,i,!0,s)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(E),u.push(d)}return Um(c,u,n,i,s,o)}a(J$,"updateRecords");async function j$(e,t,r,n,s=zn.getNextMonotonicTime()){try{Bm(e,t,r,n)}catch(u){throw Y$(u,u.message,K$.HTTP_STATUS_CODES.BAD_REQUEST)}Pm(e,t,r);let i=new F$,o=[],c=[];for(let u=0;u<n.length;u++){let _=n[u],l;V$.isEmpty(_[t])?(l=$$.v4(),_[t]=l):l=_[t];let d=vm(e,t,_,l,i,!1,s);o.push(d),c.push(l)}return Um(o,c,n,i,s)}a(j$,"upsertRecords");async function Um(e,t,r,n,s,i=[]){let o=await Promise.all(e);for(let c=0,u=o.length;c<u;c++)o[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||zn.getNextMonotonicTime(),z$(r,i),n}a(Um,"finalizeWrite");function vm(e,t,r,n,s,i=!1,o){let c=e.dbis[t],u=c.getEntry(n),_=u?.value,l=_;if(!_){if(i)return!1;_={}}if(Ay(r,!l,o),Number.isInteger(r[ki])&&_[ki]>r[ki])return!1;l&&s.original_records.push(_);let d,E=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 T=_[h];if(typeof p=="function"){let N=p([[_]]);Array.isArray(N)&&(p=N[0][Rs.FUNC_VAL],r[h]=p)}if(p===T)continue;let R=zn.getIndexedValues(T);if(R){L_&&S.prefetch(R.map(N=>({key:N,value:n})),M_);for(let N=0,b=R.length;N<b;N++)S.remove(R[N],n)}if(R=zn.getIndexedValues(p),R){L_&&S.prefetch(R.map(N=>({key:N,value:n})),M_);for(let N=0,b=R.length;N<b;N++)S.put(R[N],n)}}let f=Object.assign({},_,r);c.put(n,f,f[ki])},"do_put");return u?d=c.ifVersion(n,u.version,E):d=c.ifNoExists(n,E),d.then(f=>f?!0:vm(e,t,r,n,s,i,o))}a(vm,"updateUpsertRecord");function X$(e,t,r){if(zn.validateEnv(e),t===void 0)throw new Error(xc.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(xc.WRITE_ATTRIBUTES_REQUIRED):new Error(xc.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(X$,"validateBasic");function Bm(e,t,r,n){if(X$(e,t,r),!Array.isArray(n))throw n===void 0?new Error(xc.RECORDS_REQUIRED):new Error(xc.RECORDS_MUST_BE_ARRAY)}a(Bm,"validateWrite");function M_(){}a(M_,"noop");Oy.exports={insertRecords:W$,updateRecords:J$,upsertRecords:j$}});var Vi=g((mue,Z$)=>{Z$.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"},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]},hdb_durable_session:{hash_attribute:"id",name:"hdb_durable_session",schema:"system",attributes:[{attribute:"id"}]},hdb_session_will:{hash_attribute:"id",name:"hdb_session_will",schema:"system",attributes:[{attribute:"id"}]}}});var jn=g((pue,Ny)=>{"use strict";var yy=z(),by=P(),Wo=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Jn=require("joi"),ii={schema_format:{pattern:Wo,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},e1=Jn.alternatives(Jn.string().min(1).max(ii.schema_length.maximum).pattern(Wo).messages({"string.pattern.base":"{:#label} "+ii.schema_format.message}),Jn.number(),Jn.array()).required(),t1=Jn.alternatives(Jn.string().min(1).max(ii.schema_length.maximum).pattern(Wo).messages({"string.pattern.base":"{:#label} "+ii.schema_format.message}),Jn.number()),r1=Jn.alternatives(Jn.string().min(1).max(ii.schema_length.maximum).pattern(Wo).messages({"string.pattern.base":"{:#label} "+ii.schema_format.message}),Jn.number()).required();function n1(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>ii.schema_length.maximum?`'${e}' maximum of 250 characters`:Wo.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(n1,"checkValidTable");function s1(e,t){return yy.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(s1,"validateSchemaExists");function i1(e,t){let r=t.state.ancestors[0].schema;return yy.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(i1,"validateTableExists");function o1(e,t){return e.toLowerCase()===by.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${by.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(o1,"validateSchemaName");Ny.exports={common_validators:ii,schema_regex:Wo,hdb_schema_table:e1,validateSchemaExists:s1,validateTableExists:i1,validateSchemaName:o1,checkValidTable:n1,hdb_database:t1,hdb_table:r1}});var Xe=g((Tue,Iy)=>{"use strict";var dr=require("validate.js");dr.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||dr.validators.type.checks[t](e)?null:` must be a '${t}' value`};dr.validators.type.checks={Object:function(e){return dr.isObject(e)&&!dr.isArray(e)},Array:dr.isArray,Integer:dr.isInteger,Number:dr.isNumber,String:dr.isString,Date:dr.isDate,Boolean:function(e){return typeof e=="boolean"}};dr.validators.hasValidFileExt=function(e,t){return dr.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};Iy.exports={validateObject:a1,validateObjectAsync:c1,validateBySchema:u1};function a1(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=dr(e,t,{format:"flat"});return r?new Error(r):null}a(a1,"validateObject");async function c1(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await dr.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(c1,"validateObjectAsync");function u1(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(u1,"validateBySchema")});var P_=g((Rue,wy)=>{var{common_validators:Xn}=jn(),qc=Xe(),Gc="is required",gt={database:{presence:!1,format:Xn.schema_format,length:Xn.schema_length},schema:{presence:!1,format:Xn.schema_format,length:Xn.schema_length},table:{presence:!0,format:Xn.schema_format,length:Xn.schema_length},attribute:{presence:!0,format:Xn.schema_format,length:Xn.schema_length},hash_attribute:{presence:!0,format:Xn.schema_format,length:Xn.schema_length}};function Fc(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(Fc,"makeAttributesStrings");function l1(e){return e=Fc(e),gt.table.presence=!1,gt.attribute.presence=!1,gt.hash_attribute.presence=!1,qc.validateObject(e,gt)}a(l1,"schema_object");function _1(e){return e=Fc(e),gt.table.presence={message:Gc},gt.attribute.presence=!1,gt.hash_attribute.presence=!1,qc.validateObject(e,gt)}a(_1,"table_object");function d1(e){return e=Fc(e),gt.table.presence={message:Gc},gt.attribute.presence=!1,qc.validateObject(e,gt)}a(d1,"create_table_object");function f1(e){return e=Fc(e),gt.table.presence={message:Gc},gt.attribute.presence={message:Gc},gt.hash_attribute.presence=!1,qc.validateObject(e,gt)}a(f1,"attribute_object");function E1(e){return e=Fc(e),gt.table.presence={message:Gc},gt.attribute.presence=!1,gt.hash_attribute.presence=!1,qc.validateObject(e,gt)}a(E1,"describe_table");function h1(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(h1,"validateTableResidence");wy.exports={schema_object:l1,create_table_object:d1,table_object:_1,attribute_object:f1,describe_table:E1,validateTableResidence:h1}});var Dy=g((Oue,Cy)=>{"use strict";var m1=require("uuid"),Hm=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||m1.v4(),this.schema_table=`${this.schema}.${this.table}`}};Cy.exports=Hm});var U_=g((yue,Ly)=>{"use strict";var p1=Dy(),xm=class extends p1{static{a(this,"LMDBCreateAttributeObject")}constructor(t,r,n,s,i=!0,o=!1){super(t,r,n,s),this.dup_sort=i,this.is_hash_attribute=o}};Ly.exports=xm});var Py=g((Iue,My)=>{"use strict";My.exports=T1;var S1="inserted";function T1(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===S1?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(T1,"returnObject")});var v_=g((Cue,xy)=>{"use strict";var g1=P(),Gm=Qe(),R1=Ko(),{getSystemSchemaPath:A1,getSchemaPath:O1}=je(),b1=Vi(),y1=P_(),N1=U_(),I1=Py(),{handleHDBError:Uy,hdb_errors:By}=se(),vy=z(),{HTTP_STATUS_CODES:w1}=By,qm=b1.hdb_attribute,Hy=[];for(let e=0;e<qm.attributes.length;e++)Hy.push(qm.attributes[e].attribute);var C1="inserted";xy.exports=D1;async function D1(e){let t=y1.attribute_object(e);if(t)throw Uy(new Error,t.message,By.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&vy.checkGlobalSchemaTable(e.schema,e.table);if(r)throw Uy(new Error,r,w1.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=vy.isEmpty(e.dup_sort)||e.dup_sort=="true";let n=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(n=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(n)&&n.length>0){for(let i of n)if(i.attribute===e.attribute)throw new Error(`attribute '${i.attribute}' already exists in ${e.schema}.${e.table}`)}let s=new N1(e.schema,e.table,e.attribute,e.id);try{let i=await Gm.openEnvironment(O1(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}`);Gm.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await Gm.openEnvironment(A1(),g1.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await R1.insertRecords(o,qm.hash_attribute,Hy,[s]);return I1(C1,c,{records:[s]},u)}catch(i){throw i}}a(D1,"lmdbCreateAttribute")});var km=g((Lue,qy)=>{var{hdb_table:L1,hdb_database:Gy}=jn(),M1=Xe(),Fm=require("joi"),P1={undefined:"undefined",null:"null"},U1=a((e,t)=>{let r=Object.keys(e),n=r.length,s;for(let i=0;i<n;i++){let o=r[i];(!o||o.length===0||P1[o]!==void 0)&&(s===void 0?s=`Invalid attribute name: '${o}'`:s+=`. Invalid attribute name: '${o}'`)}return s?t.message(s):e},"custom_records_val"),v1=Fm.object({database:Gy,schema:Gy,table:L1,records:Fm.array().items(Fm.object().custom(U1)).required()});qy.exports=function(e){return M1.validateBySchema(e,v1)}});var kc=g((Uue,ky)=>{"use strict";var As=z(),Fy=$(),Pue=km(),{getDatabases:B1}=(Ae(),ie(ke)),{ClientError:$i}=se();ky.exports=H1;function H1(e){if(As.isEmpty(e))throw new $i("invalid update parameters defined.");if(As.isEmptyOrZeroLength(e.schema))throw new $i("invalid schema specified.");if(As.isEmptyOrZeroLength(e.table))throw new $i("invalid table specified.");if(!Array.isArray(e.records))throw new $i("records must be an array");let t=B1()[e.schema]?.[e.table];if(As.isEmpty(t))throw new $i(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,n=new Set,s={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&As.isEmptyOrZeroLength(o[r]))throw Fy.error("a valid hash attribute must be provided with update record:",o),new $i("a valid hash attribute must be provided with update record, check log for more info");if(!As.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw Fy.error(`a valid hash value must be provided with ${e.operation} record:`,o),new $i(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!As.isEmpty(o[r])&&o[r]!==""&&n.has(As.autoCast(o[r]))&&(o.skip=!0),n.add(As.autoCast(o[r]));for(let c in o)s[c]=1}),s[r]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(s)}}a(H1,"insertUpdateValidate")});var Vc=g((Bue,Vy)=>{"use strict";var x1=P().OPERATIONS_ENUM,Vm=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=x1.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};Vy.exports=Vm});var $c=g((Gue,Yy)=>{"use strict";var xue=Vc(),B_=P(),$m=z(),$y=$(),G1=require("uuid"),{handleHDBError:H_,hdb_errors:q1}=se(),{HDB_ERROR_MSGS:x_,HTTP_STATUS_CODES:G_}=q1;Yy.exports=F1;function F1(e,t,r){for(let s=0;s<t.length;s++)k1(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];V1(i,r,e.operation)}}a(F1,"processRows");function k1(e){if(Buffer.byteLength(String(e))>B_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw H_(new Error,x_.ATTR_NAME_LENGTH_ERR(e),G_.BAD_REQUEST,void 0,void 0,!0);if($m.isEmptyOrZeroLength(e)||$m.isEmpty(e.trim()))throw H_(new Error,x_.ATTR_NAME_NULLISH_ERR,G_.BAD_REQUEST,void 0,void 0,!0)}a(k1,"validateAttribute");function V1(e,t,r){if(!e.hasOwnProperty(t)||$m.isEmptyOrZeroLength(e[t])){if(r===B_.OPERATIONS_ENUM.INSERT||r===B_.OPERATIONS_ENUM.UPSERT){e[t]=G1.v4();return}throw $y.error("Update transaction aborted due to record with no hash value:",e),H_(new Error,x_.RECORD_MISSING_HASH_ERR,G_.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>B_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw $y.error(e),H_(new Error,x_.HASH_VAL_LENGTH_ERR,G_.BAD_REQUEST,void 0,void 0,!0)}a(V1,"validateHash")});var Wy=g((Fue,Ky)=>{"use strict";var Ym=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};Ky.exports=Ym});var Jy=g((Vue,zy)=>{"use strict";var Km=Qe(),$1=$(),Qy=Ur().LMDB_ERRORS_ENUM;zy.exports=Y1;async function Y1(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 Km.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==Qy.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await Km.closeEnvironment(global.lmdb_map[n]),await Km.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==Qy.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){$1.error(t)}}a(Y1,"cleanLMDBMap")});var Os=g((Yue,eN)=>{"use strict";var Yc=require("crypto"),K1=ee(),{CONFIG_PARAMS:W1}=P(),Xy="aes-256-cbc",Q1=32,z1=16,Wm=64,Zy=32,J1=Wm+Zy,jy=new Map;eN.exports={encrypt:j1,decrypt:X1,createNatsTableStreamName:Z1};function j1(e){let t=Yc.randomBytes(Q1),r=Yc.randomBytes(z1),n=Yc.createCipheriv(Xy,Buffer.from(t),r),s=n.update(e);s=Buffer.concat([s,n.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=s.toString("hex");return i+o+c}a(j1,"encrypt");function X1(e){let t=e.substr(0,Wm),r=e.substr(Wm,Zy),n=e.substr(J1,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Yc.createDecipheriv(Xy,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(X1,"decrypt");function Z1(e,t){let r=K1.get(W1.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=jy.get(r);return n||(n=Yc.createHash("md5").update(r).digest("hex"),jy.set(r,n)),n}a(Z1,"createNatsTableStreamName")});var bs=g((Que,rN)=>{"use strict";var Wue=Gr(),Kc=$(),tN=P_(),eY=Os(),q_=z(),{handleHDBError:F_,hdb_errors:tY}=se(),{HDB_ERROR_MSGS:k_,HTTP_STATUS_CODES:Qm}=tY,rY=ee();rY.initSync();var{getDatabases:zm}=(Ae(),ie(ke)),nY=require("fs-extra");rN.exports={describeAll:sY,describeTable:V_,describeSchema:iY};async function sY(e){try{let t=q_.isEmptyOrZeroLength(e),r,n;t||(r=e.hdb_user.role.permission,n=r.super_user||r.cluster_user);let s=zm(),i={},o={},c=[],u=e?.exact_count;for(let l in s){i[l]=!0,!t&&!n&&(o[l]=e.hdb_user.role.permission[l].describe);let d=s[l];for(let E in d)try{let f;if(t||n)f=await V_({schema:l,table:E,exact_count:u});else if(r&&r[l].describe&&r[l].tables[E].describe){let h=r[l].tables[E].attribute_permissions;f=await V_({schema:l,table:E,exact_count:u},h)}f&&c.push(f)}catch(f){Kc.error(f)}}let _={};for(let l in c)t||n?(_[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||n?_[l]={}:o[l]&&(_[l]={});return _}catch(t){return Kc.error("Got an error in describeAll"),Kc.error(t),F_(new Error,k_.DESCRIBE_ALL_ERR)}}a(sY,"describeAll");async function V_(e,t){q_.transformReq(e);let{schema:r,table:n}=e;r=r?.toString(),n=n?.toString();let s=t;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(s=e.hdb_user.role.permission[r].tables[n].attribute_permissions);let i=tN.describe_table(e);if(i)throw i;let c=zm()[r];if(!c)throw F_(new Error,k_.SCHEMA_NOT_FOUND(e.schema),Qm.NOT_FOUND);let u=c[n];if(!u)throw F_(new Error,k_.TABLE_NOT_FOUND(e.schema,e.table),Qm.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(h=>({type:h.type,name:h.name})):void 0}))}a(_,"pushAtt");let l=[];if(s){let f={};s.forEach(h=>{h.describe&&(f[h.attribute_name]=!0)}),u.attributes.forEach(h=>{f[h.name]&&_(h)})}else u.attributes?.forEach(f=>_(f));let d;try{d=(await nY.stat(u.primaryStore.env.path)).size}catch(f){Kc.warn("unable to get database size",f)}let E={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,db_size:d};E.clustering_stream_name=eY.createNatsTableStreamName(E.schema,E.name);try{let f=u.getRecordCount({exactCount:e.exact_count==="true"});E.record_count=f.recordCount,E.estimated_record_range=f.estimatedRange;let h=u.auditStore;if(h)for(let p of h.getKeys({reverse:!0,limit:1}))E.last_updated_record=p[0];if(!E.last_updated_record&&u.indices.__updatedtime__)for(let p of u.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))E.last_updated_record=p}catch(f){Kc.warn(`unable to stat table dbi due to ${f}`)}return E}a(V_,"descTable");async function iY(e){q_.transformReq(e);let t=tN.schema_object(e);if(t)throw t;let r;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(r=e.hdb_user.role.permission[e.schema]);let n=e.schema.toString(),i=zm()[n];if(!i)throw F_(new Error,k_.SCHEMA_NOT_FOUND(e.schema),Qm.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),q_.isEmpty(u)||u.describe){let _=await V_({schema:e.schema,table:c,exact_count:e.exact_count},u?u.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(iY,"describeSchema")});var ys=g((Xue,aN)=>{var oY=Vi(),{callbackify:sN,promisify:aY}=require("util"),{getDatabases:iN}=(Ae(),ie(ke));aN.exports={setSchemaDataToGlobal:nN,getTableSchema:cY,getSystemSchema:uY,setSchemaDataToGlobalAsync:aY(nN)};var oN=bs(),Jue=sN(oN.describeAll),jue=sN(oN.describeTable);function nN(e){global.hdb_schema=iN(),e&&e()}a(nN,"setSchemaDataToGlobal");function cY(e,t,r){let n=iN()[e];if(!n)return r(`schema ${e} does not exist`);let s=n[t];return s?r(null,{schema:e,name:t,hash_attribute:s.primaryKey}):r(`table ${e}.${t} does not exist`)}a(cY,"getTableSchema");function uY(){return oY}a(uY,"getSystemSchema")});var qr=g((ele,_N)=>{"use strict";var Y_=km(),Yt=z(),lY=require("util"),K_=Dn(),_Y=ys(),cN=$(),{handleHDBError:Yi,hdb_errors:dY}=se(),{HTTP_STATUS_CODES:Ki}=dY,fY=lY.promisify(_Y.getTableSchema),EY="updated",uN="inserted",lN="upserted";_N.exports={insert:mY,update:pY,upsert:SY,validation:hY,flush:TY};async function hY(e){if(Yt.isEmpty(e))throw new Error("invalid update parameters defined.");if(Yt.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Yt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await fY(e.schema,e.table),r=Y_(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let n=t.hash_attribute,s=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&Yt.isEmptyOrZeroLength(c[n]))throw cN.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(!Yt.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw cN.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!Yt.isEmpty(c[n])&&c[n]!==""&&s.has(Yt.autoCast(c[n]))&&(c.skip=!0),s.add(Yt.autoCast(c[n]));for(let u in c)i[u]=1}),i[n]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(i)}}a(hY,"validation");async function mY(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Y_(e);if(t)throw Yi(new Error,t.message,Ki.BAD_REQUEST);Yt.transformReq(e);let r=Yt.checkSchemaTableExist(e.schema,e.table);if(r)throw Yi(new Error,r,Ki.BAD_REQUEST);let n=await K_.createRecords(e);return $_(uN,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(mY,"insertData");async function pY(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Y_(e);if(t)throw Yi(new Error,t.message,Ki.BAD_REQUEST);Yt.transformReq(e);let r=Yt.checkSchemaTableExist(e.schema,e.table);if(r)throw Yi(new Error,r,Ki.BAD_REQUEST);let n=await K_.updateRecords(e);return Yt.isEmpty(n.existing_rows)?$_(EY,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):$_(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(pY,"updateData");async function SY(e){if(e.operation!=="upsert")throw Yi(new Error,"invalid operation, must be upsert",Ki.INTERNAL_SERVER_ERROR);let t=Y_(e);if(t)throw Yi(new Error,t.message,Ki.BAD_REQUEST);Yt.transformReq(e);let r=Yt.checkSchemaTableExist(e.schema,e.table);if(r)throw Yi(new Error,r,Ki.BAD_REQUEST);let n=await K_.upsertRecords(e);return $_(lN,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(SY,"upsertData");function $_(e,t,r,n,s,i){let o={message:`${e} ${t.length} of ${t.length+n.length} records`,new_attributes:s,txn_time:i};return e===uN?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===lN?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a($_,"returnObject");function TY(e){return Yt.transformReq(e),K_.flush(e.schema,e.table)}a(TY,"flush")});var jm=g((rle,EN)=>{var gY=Xe(),Jm=require("joi"),{hdb_table:RY,hdb_database:dN}=jn(),fN={schema:dN,database:dN,table:RY},AY={date:Jm.date().iso().required()},OY={timestamp:Jm.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};EN.exports=function(e,t){let r=t==="timestamp"?{...fN,...OY}:{...fN,...AY},n=Jm.object(r);return gY.validateBySchema(e,n)}});var pN=g((nle,mN)=>{var bY=Xe(),Xm=require("joi"),{hdb_table:yY,hdb_database:hN}=jn(),NY=Xm.object({schema:hN,database:hN,table:yY,hash_values:Xm.array().required(),ids:Xm.array()});mN.exports=function(e){return bY.validateBySchema(e,NY)}});var TN=g((sle,SN)=>{"use strict";var Zm=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i){this.operation=t,this.schema=r,this.table=n,this.hash_attribute=s,this.records=i}},ep=class{static{a(this,"NoSQLSeachObject")}constructor(t,r,n,s,i,o){this.schema=t,this.table=r,this.search_attribute=n,this.hash_attribute=s,this.get_attributes=i,this.search_value=o}},tp=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};SN.exports={InsertObject:Zm,NoSQLSeachObject:ep,DeleteResponseObject:tp}});var ci=g((ole,bN)=>{"use strict";var RN=jm(),IY=pN(),Wi=z(),gN=require("moment"),AN=$(),{promisify:wY,callbackify:CY}=require("util"),Qi=P(),DY=ys(),rp=wY(DY.getTableSchema),np=Dn(),{DeleteResponseObject:LY}=TN(),{handleHDBError:oi,hdb_errors:MY}=se(),{HDB_ERROR_MSGS:W_,HTTP_STATUS_CODES:ai}=MY,PY="records successfully deleted",UY=CY(ON);bN.exports={delete:UY,deleteRecord:ON,deleteFilesBefore:vY,deleteAuditLogsBefore:BY};async function vY(e){let t=RN(e,"date");if(t)throw oi(t,t.message,ai.BAD_REQUEST,void 0,void 0,!0);if(Wi.transformReq(e),!gN(e.date,gN.ISO_8601).isValid())throw oi(new Error,W_.INVALID_DATE,ai.BAD_REQUEST,Qi.LOG_LEVELS.ERROR,W_.INVALID_DATE,!0);let n=Wi.checkSchemaTableExist(e.schema,e.table);if(n)throw oi(new Error,n,ai.NOT_FOUND,Qi.LOG_LEVELS.ERROR,n,!0);let s=await np.deleteRecordsBefore(e);if(await rp(e.schema,e.table),AN.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(vY,"deleteFilesBefore");async function BY(e){let t=RN(e,"timestamp");if(t)throw oi(t,t.message,ai.BAD_REQUEST,void 0,void 0,!0);if(Wi.transformReq(e),isNaN(e.timestamp))throw oi(new Error,W_.INVALID_VALUE("Timestamp"),ai.BAD_REQUEST,Qi.LOG_LEVELS.ERROR,W_.INVALID_VALUE("Timestamp"),!0);let r=Wi.checkSchemaTableExist(e.schema,e.table);if(r)throw oi(new Error,r,ai.NOT_FOUND,Qi.LOG_LEVELS.ERROR,r,!0);let n=await np.deleteAuditLogsBefore(e);return await rp(e.schema,e.table),AN.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(BY,"deleteAuditLogsBefore");async function ON(e){e.ids&&(e.hash_values=e.ids);let t=IY(e);if(t)throw oi(t,t.message,ai.BAD_REQUEST,void 0,void 0,!0);Wi.transformReq(e);let r=Wi.checkSchemaTableExist(e.schema,e.table);if(r)throw oi(new Error,r,ai.NOT_FOUND,Qi.LOG_LEVELS.ERROR,r,!0);try{await rp(e.schema,e.table);let n=await np.deleteRecords(e);return Wi.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${PY}`),n}catch(n){if(n.message===Qi.SEARCH_NOT_FOUND_MESSAGE){let s=new LY;return s.message=Qi.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(ON,"deleteRecord")});var Q_=g((cle,IN)=>{var HY=require("crypto"),yN=9;function xY(e){let t=qY(yN),r=NN(e+t);return t+r}a(xY,"createHash");function GY(e,t){let r=e?.substr(0,yN),n=r+NN(t+r);return e===n}a(GY,"validateHash");function qY(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,n="";for(let s=0;s<e;s++){let i=Math.floor(Math.random()*r);n+=t[i]}return n}a(qY,"generateSalt");function NN(e){return HY.createHash("md5").update(e).digest("hex")}a(NN,"md5");IN.exports={hash:xY,validate:GY}});var CN=g((lle,wN)=>{var sp=Xe(),Zt={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 FY(e){return Zt.password.presence=!0,Zt.username.presence=!0,Zt.role.presence=!0,Zt.active.presence=!0,sp.validateObject(e,Zt)}a(FY,"addUserValidation");function kY(e){return Zt.password.presence=!1,Zt.username.presence=!0,Zt.role.presence=!1,Zt.active.presence=!1,sp.validateObject(e,Zt)}a(kY,"alterUserValidation");function VY(e){return Zt.password.presence=!1,Zt.username.presence=!0,Zt.role.presence=!1,Zt.active.presence=!1,sp.validateObject(e,Zt)}a(VY,"dropUserValidation");wN.exports={addUserValidation:FY,alterUserValidation:kY,dropUserValidation:VY}});var Ve=g((fle,LN)=>{"use strict";var{platform:dle}=require("os"),$Y="nats-server.zip",ip="nats-server",YY=process.platform==="win32"?`${ip}.exe`:ip,KY=/^[^\s.,*>]+$/,DN="__request__",WY=a(e=>`${e}.${DN}`,"REQUEST_SUBJECT"),QY={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},zY={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},JY={HUB:"hub.pid",LEAF:"leaf.pid"},jY={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},XY={SUCCESS:"success",ERROR:"error"},ZY={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},eK={TXN:"txn",MSGID:"msgid"},Qo={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},tK={[Qo.ERR]:1,[Qo.WRN]:2,[Qo.INF]:3,[Qo.DBG]:4,[Qo.TRC]:5},rK={debug:"-D",trace:"-DVV"};LN.exports={NATS_SERVER_ZIP:$Y,NATS_SERVER_NAME:ip,NATS_BINARY_NAME:YY,PID_FILES:JY,NATS_CONFIG_FILES:zY,SERVER_SUFFIX:jY,NATS_TERM_CONSTRAINTS_RX:KY,REQUEST_SUFFIX:DN,UPDATE_REMOTE_RESPONSE_STATUSES:XY,CLUSTER_STATUS_STATUSES:ZY,REQUEST_SUBJECT:WY,SUBJECT_PREFIXES:eK,MSG_HEADERS:QY,LOG_LEVELS:Qo,LOG_LEVEL_FLAGS:rK,LOG_LEVEL_HIERARCHY:tK}});var PN=g((hle,MN)=>{"use strict";var nK={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 Pq=Object.create;var fc=Object.defineProperty;var Uq=Object.getOwnPropertyDescriptor;var vq=Object.getOwnPropertyNames;var Bq=Object.getPrototypeOf,Hq=Object.prototype.hasOwnProperty;var a=(e,t)=>fc(e,"name",{value:t,configurable:!0});var Re=(e,t)=>()=>(e&&(t=e(e=0)),t);var g=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Fe=(e,t)=>{for(var r in t)fc(e,r,{get:t[r],enumerable:!0})},EO=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of vq(t))!Hq.call(e,s)&&s!==r&&fc(e,s,{get:()=>t[s],enumerable:!(n=Uq(t,s))||n.enumerable});return e};var x=(e,t,r)=>(r=e!=null?Pq(Bq(e)):{},EO(t||!e||!e.__esModule?fc(r,"default",{value:e,enumerable:!0}):r,e)),ie=e=>EO(fc({},"__esModule",{value:!0}),e);var pO=g((cce,mO)=>{var xq=require("fast-glob"),{statSync:Uh,existsSync:vh,readFileSync:Gq,writeFileSync:qq}=require("fs"),{spawnSync:Fq,spawn:kq,execFileSync:ace}=require("child_process"),{isMainThread:Vq}=require("worker_threads"),{join:ei,relative:hO}=require("path"),{PACKAGE_ROOT:Nn}=P(),{tmpdir:$q,platform:Yq}=require("os");require("source-map-support").install();var Kq=["resources","server","dataLayer","components"],Ec="ts-build",Bh,Wq=__filename.endsWith("tsBuild.js");if(Wq){if(Vq){let r;try{Uh(ei(Nn,Ec)),r=!0}catch{}if(r)for(let n of xq.sync(Kq.map(s=>s+"/**/*.ts"),{cwd:Nn})){let s=0,i=0;try{s=Uh(ei(Nn,n)).mtimeMs-5e3,i=Uh(ei(Nn,Ec,n.replace(/.ts$/,".js"))).mtimeMs}catch{}if(s>i){console.warn(`TypeScript ${n} is not compiled`+(i?` (TS source file was modified at ${new Date(s)} and compiled file at ${new Date(i)})`:"")+", consider enabling auto-compilation of TypeScript in your IDE), compiling now."),Bh=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),Bh=!0;if(Bh){let n=ei(Nn,"node_modules/.bin/tsc");Yq()==="win32"&&(n+=".cmd");let s=Fq(n,{cwd:Nn});if(s.stdout?.length&&console.log(s.stdout.toString()),s.stderr?.length&&console.log(s.stderr.toString()),r){let i=ei($q(),"harperdb-tsc.pid"),o;if(vh(i))try{process.kill(+Gq(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=kq(n,["--watch"],{cwd:Nn,detached:!0,stdio:"ignore"});qq(i,c.pid.toString()),c.unref()}}}}let e=mO.constructor,t=e._findPath;e._findPath=function(r,n,s){if(r.startsWith(".")&&!s&&n.length===1&&n[0].startsWith(Nn)&&!n[0].includes("node_modules")){let i=hO(Nn,n[0]),o;i.startsWith(Ec)?o=ei(Nn,hO(Ec,i)):o=ei(Nn,Ec,i);let c=ei(o,r),u=c+".js";if(vh(u))return u;if(c.includes(".")&&vh(c))return c}return t(r,n,s)}}});var P=g((_ce,LO)=>{"use strict";var an=require("path"),Qq=require("fs"),{relative:uce,join:lce}=an,{existsSync:zq}=Qq;function Jq(){let e=__dirname;for(;!zq(an.join(e,"package.json"));){let t=an.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(Jq,"getHDBPackageRoot");var ti=Jq(),SO="js",c_=SO,jq="harperdb-config.yaml",Xq="defaultConfig.yaml",Zq="hdb",TO=`harperdb.${c_}`,gO=`customFunctionsServer.${c_}`,eF=`restartHdb.${c_}`,xh="HarperDB",a_="Custom Functions",u_="Clustering Hub",l_="Clustering Leaf",tF="Clustering Ingest Service",rF="Clustering Reply Service",nF="foreground.pid",sF="hdb.pid",iF="data",oF={HDB:xh,CLUSTERING_HUB:u_,CLUSTERING_LEAF:l_,CLUSTERING_INGEST_SERVICE:tF,CLUSTERING_REPLY_SERVICE:rF,CUSTOM_FUNCTIONS:a_,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"},aF={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},cF={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},uF={harperdb:xh,"clustering hub":u_,"clustering leaf":l_,"custom functions":a_,custom_functions:a_,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},lF={CLUSTERING_HUB_PROC_DESCRIPTOR:u_,CLUSTERING_LEAF_PROC_DESCRIPTOR:l_},Hh={HDB:an.join(ti,"server/harperdb"),CUSTOM_FUNCTIONS:an.join(ti,"server/customFunctions"),CLUSTERING_HUB:an.join(ti,"server/nats"),CLUSTERING_LEAF:an.join(ti,"server/nats")},_F={HDB:an.join(Hh.HDB,TO),CUSTOM_FUNCTIONS:an.join(Hh.CUSTOM_FUNCTIONS,gO)},dF={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:an.join(ti,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:an.join(ti,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:an.join(ti,"launchServiceScripts/launchUpdateNodes4-0-0.js")},fF={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},RO="support@harperdb.io",EF="customer-success@harperdb.io",AO=1,hF=4141,OO="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",mF="https://www.harperdb.io/product",pF=`For support, please submit a request at ${OO} or contact ${RO}`,bO=`For license support, please contact ${EF}`,SF="None of the specified records were found.",TF="hash attribute not found",gF=`Your current license only supports ${AO} role. ${bO}`,RF="Your current license only supports 3 connections to a node.",AF="127.0.0.1",OF=1,bF=/^\.$/,yF=/^\.\.$/,NF="U+002E",IF=/\//g,wF="U+002F",CF=/U\+002F/g,DF=/^U\+002E$/,LF=/^U\+002EU\+002E$/,MF="d",PF=999999,UF="*",vF="--max-old-space-size=",BF="system",HF="__hdb_hash",xF=".harperdb",GF=".hdb",qF="keys",FF="hdb_boot_properties.file",kF=".updateConfig.json",VF="SIGTSTP",$F=24,YF=6e4,KF=448,WF="blob",QF="trash",zF="database",JF="schema",jF="transactions",XF=".count",ZF="id",ek="PROCESS_NAME",yO={SETTINGS_PATH_KEY:"settings_path"},NO=require("lodash"),tk={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"},rk={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},nk={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},sk={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"},ik={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"},Pr="hdb_internal:",ok={CREATE_SCHEMA:Pr+"create_schema",CREATE_TABLE:Pr+"create_table",CREATE_ATTRIBUTE:Pr+"create_attribute",ADD_USER:Pr+"add_user",ALTER_USER:Pr+"alter_user",DROP_USER:Pr+"drop_user",HDB_NODES:Pr+"hdb_nodes",HDB_USERS:Pr+"hdb_users",HDB_WORKERS:Pr+"hdb_workers",CATCHUP:Pr+"catchup",SCHEMA_CATCHUP:Pr+"schema_catchup",WORKER_ROOM:Pr+"cluster_workers"},ak={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"},ck="060493.ks",uk=".license",lk={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},te={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"},_k={CSV:".csv",JSON:".json"},dk={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},fk={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},hc={};hc[te.INSERT]=te.INSERT;hc[te.UPDATE]=te.UPDATE;hc[te.UPSERT]=te.UPSERT;hc[te.DELETE]=te.DELETE;var Ge=Object.create(null);Ge[te.DESCRIBE_ALL]=te.DESCRIBE_ALL;Ge[te.DESCRIBE_TABLE]=te.DESCRIBE_TABLE;Ge[te.DESCRIBE_SCHEMA]=te.DESCRIBE_SCHEMA;Ge[te.READ_LOG]=te.READ_LOG;Ge[te.ADD_NODE]=te.ADD_NODE;Ge[te.LIST_USERS]=te.LIST_USERS;Ge[te.LIST_ROLES]=te.LIST_ROLES;Ge[te.USER_INFO]=te.USER_INFO;Ge[te.SQL]=te.SQL;Ge[te.GET_JOB]=te.GET_JOB;Ge[te.SEARCH_JOBS_BY_START_DATE]=te.SEARCH_JOBS_BY_START_DATE;Ge[te.DELETE_FILES_BEFORE]=te.DELETE_FILES_BEFORE;Ge[te.EXPORT_LOCAL]=te.EXPORT_LOCAL;Ge[te.EXPORT_TO_S3]=te.EXPORT_TO_S3;Ge[te.CLUSTER_STATUS]=te.CLUSTER_STATUS;Ge[te.REMOVE_NODE]=te.REMOVE_NODE;Ge[te.RESTART]=te.RESTART;Ge[te.CUSTOM_FUNCTIONS_STATUS]=te.CUSTOM_FUNCTIONS_STATUS;Ge[te.GET_CUSTOM_FUNCTIONS]=te.GET_CUSTOM_FUNCTIONS;Ge[te.GET_CUSTOM_FUNCTION]=te.GET_CUSTOM_FUNCTION;Ge[te.SET_CUSTOM_FUNCTION]=te.SET_CUSTOM_FUNCTION;Ge[te.DROP_CUSTOM_FUNCTION]=te.DROP_CUSTOM_FUNCTION;Ge[te.ADD_CUSTOM_FUNCTION_PROJECT]=te.ADD_CUSTOM_FUNCTION_PROJECT;Ge[te.DROP_CUSTOM_FUNCTION_PROJECT]=te.DROP_CUSTOM_FUNCTION_PROJECT;Ge[te.PACKAGE_CUSTOM_FUNCTION_PROJECT]=te.PACKAGE_CUSTOM_FUNCTION_PROJECT;Ge[te.DEPLOY_CUSTOM_FUNCTION_PROJECT]=te.DEPLOY_CUSTOM_FUNCTION_PROJECT;var Ek={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",COPYDB:"copy-db"},hk={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},IO={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"},mk=NO.invert(IO),pk={CUSTOMFUNCTIONS_ENABLED:"customFunctions_enabled",CUSTOMFUNCTIONS_NETWORK_PORT:"customFunctions_network_port",CUSTOMFUNCTIONS_TLS_CERTIFICATE:"customFunctions_tls_certificate",CUSTOMFUNCTIONS_NETWORK_CORS:"customFunctions_network_cors",CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST:"customFunctions_network_corsAccessList",CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT:"customFunctions_network_headersTimeout",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT:"customFunctions_network_keepAliveTimeout",CUSTOMFUNCTIONS_TLS_PRIVATEKEY:"customFunctions_tls_privateKey",CUSTOMFUNCTIONS_TLS_CERT_AUTH:"customFunctions_tls_certificateAuthority",CUSTOMFUNCTIONS_NETWORK_TIMEOUT:"customFunctions_network_timeout",CUSTOMFUNCTIONS_NODEENV:"customFunctions_nodeEnv",CUSTOMFUNCTIONS_ROOT:"customFunctions_root"},w={ANALYTICS_AGGREGATEPERIOD:"analytics_aggregatePeriod",AUTHENTICATION_AUTHORIZELOCAL:"authentication_authorizeLocal",AUTHENTICATION_CACHETTL:"authentication_cacheTTL",AUTHENTICATION_ENABLESESSIONS:"authentication_enableSessions",AUTHENTICATION_OPERATIONTOKENTIMEOUT:"authentication_operationTokenTimeout",AUTHENTICATION_REFRESHTOKENTIMEOUT:"authentication_refreshTokenTimeout",CLUSTERING_USER:"clustering_user",CLUSTERING_ENABLED:"clustering_enabled",CLUSTERING_HUBSERVER_CLUSTER_NAME:"clustering_hubServer_cluster_name",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT:"clustering_hubServer_cluster_network_port",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES:"clustering_hubServer_cluster_network_routes",CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT:"clustering_hubServer_leafNodes_network_port",CLUSTERING_HUBSERVER_NETWORK_PORT:"clustering_hubServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_PORT:"clustering_leafServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_ROUTES:"clustering_leafServer_network_routes",CLUSTERING_LEAFSERVER_STREAMS_MAXAGE:"clustering_leafServer_streams_maxAge",CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES:"clustering_leafServer_streams_maxBytes",CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS:"clustering_leafServer_streams_maxMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS:"clustering_leafServer_streams_maxConsumeMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS:"clustering_leafServer_streams_maxIngestThreads",CLUSTERING_LEAFSERVER_STREAMS_PATH:"clustering_leafServer_streams_path",CLUSTERING_NODENAME:"clustering_nodeName",CLUSTERING_TLS_CERTIFICATE:"clustering_tls_certificate",CLUSTERING_TLS_PRIVATEKEY:"clustering_tls_privateKey",CLUSTERING_TLS_CERT_AUTH:"clustering_tls_certificateAuthority",CLUSTERING_TLS_INSECURE:"clustering_tls_insecure",CLUSTERING_TLS_VERIFY:"clustering_tls_verify",CLUSTERING_LOGLEVEL:"clustering_logLevel",CLUSTERING_REPUBLISHMESSAGES:"clustering_republishMessages",CLUSTERING_DATABASELEVEL:"clustering_databaseLevel",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",THREADS:"threads",THREADS_COUNT:"threads_count",THREADS_DEBUG:"threads_debug",THREADS_DEBUG_STARTINGPORT:"threads_debug_startingPort",THREADS_DEBUG_PORT:"threads_debug_port",THREADS_DEBUG_HOST:"threads_debug_host",THREADS_DEBUG_WAITFORDEBUGGER:"threads_debug_waitForDebugger",THREADS_MAXHEAPMEMORY:"threads_maxHeapMemory",HTTP_SESSIONAFFINITY:"http_sessionAffinity",HTTP_COMPRESSIONTHRESHOLD:"http_compressionThreshold",HTTP_CORS:"http_cors",HTTP_CORSACCESSLIST:"http_corsAccessList",HTTP_HEADERSTIMEOUT:"http_headersTimeout",HTTP_KEEPALIVETIMEOUT:"http_keepAliveTimeout",HTTP_TIMEOUT:"http_timeout",HTTP_PORT:"http_port",HTTP_SECUREPORT:"http_securePort",HTTP_MTLS:"http_mtls",HTTP_MTLS_REQUIRED:"http_mtls_required",HTTP_MTLS_USER:"http_mtls_user",HTTP_MAXHEADERSIZE:"http_maxHeaderSize",HTTP_THREADRANGE:"http_threadRange",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:"operationsApi_tls",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_MAXTRANSACTIONQUEUETIME:"storage_maxTransactionQueueTime",STORAGE_PATH:"storage_path",STORAGE_AUDIT_PATH:"storage_audit_path",STORAGE_MAXFREESPACETOLOAD:"storage_maxFreeSpaceToLoad",STORAGE_MAXFREESPACETORETAIN:"storage_maxFreeSpaceToRetain",STORAGE_PAGESIZE:"storage_pageSize",STORAGE_COMPRESSION_DICTIONARY:"storage_compression_dictionary",STORAGE_COMPRESSION_THRESHOLD:"storage_compression_threshold",STORAGE_COMPACTONSTART:"storage_compactOnStart",STORAGE_COMPACTONSTARTKEEPBACKUP:"storage_compactOnStartKeepBackup",DATABASES:"databases",IGNORE_SCRIPTS:"ignoreScripts",MQTT_NETWORK_PORT:"mqtt_network_port",MQTT_WEBSOCKET:"mqtt_webSocket",MQTT_NETWORK_SECUREPORT:"mqtt_network_securePort",MQTT_NETWORK_MTLS:"mqtt_network_mtls",MQTT_NETWORK_MTLS_REQUIRED:"mqtt_network_mtls_required",MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY:"mqtt_network_mtls_certificateAuthority",MQTT_NETWORK_MTLS_USER:"mqtt_network_mtls_user",MQTT_REQUIREAUTHENTICATION:"mqtt_requireAuthentication",COMPONENTSROOT:"componentsRoot",TLS_CERTIFICATE:"tls_certificate",TLS_PRIVATEKEY:"tls_privateKey",TLS_CERTIFICATEAUTHORITY:"tls_certificateAuthority",TLS_CIPHERS:"tls_ciphers",TLS:"tls",CLONED:"cloned"},wO={settings_path:yO.SETTINGS_PATH_KEY,hdb_root_key:w.ROOTPATH,hdb_root:w.ROOTPATH,rootpath:w.ROOTPATH,server_port_key:w.OPERATIONSAPI_NETWORK_PORT,server_port:w.OPERATIONSAPI_NETWORK_PORT,cert_key:w.TLS_CERTIFICATE,certificate:w.TLS_CERTIFICATE,private_key_key:w.TLS_PRIVATEKEY,private_key:w.TLS_PRIVATEKEY,http_secure_enabled_key:w.OPERATIONSAPI_NETWORK_HTTPS,https_on:w.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:w.OPERATIONSAPI_NETWORK_CORS,cors_on:w.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:w.LOGGING_LEVEL,log_level:w.LOGGING_LEVEL,log_path_key:w.LOGGING_ROOT,log_path:w.LOGGING_ROOT,clustering_node_name_key:w.CLUSTERING_NODENAME,node_name:w.CLUSTERING_NODENAME,clustering_enabled_key:w.CLUSTERING_ENABLED,clustering:w.CLUSTERING_ENABLED,max_http_threads:w.THREADS_COUNT,max_hdb_processes:w.THREADS_COUNT,server_timeout_key:w.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:w.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:w.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:w.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:w.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:w.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:w.LOGGING_AUDITLOG,disable_transaction_log:w.LOGGING_AUDITLOG,operation_token_timeout_key:w.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:w.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:w.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:w.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:w.HTTP_PORT,custom_functions_port:w.HTTP_PORT,custom_functions_directory_key:w.COMPONENTSROOT,custom_functions_directory:w.COMPONENTSROOT,max_custom_function_processes:w.THREADS_COUNT,log_to_file:w.LOGGING_FILE,log_to_stdstreams:w.LOGGING_STDSTREAMS,local_studio_on:w.LOCALSTUDIO_ENABLED,clustering_port:w.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:w.CLUSTERING_USER,clustering_enabled:w.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:w.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:w.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:w.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:w.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:w.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:w.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:w.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:w.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:w.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxconsumemsgs:w.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS,clustering_leafserver_streams_maxingestthreads:w.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS,clustering_leafserver_streams_maxmsgs:w.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:w.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:w.CLUSTERING_NODENAME,clustering_tls_certificate:w.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:w.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:w.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:w.CLUSTERING_TLS_INSECURE,clustering_tls_verify:w.CLUSTERING_TLS_VERIFY,clustering_loglevel:w.CLUSTERING_LOGLEVEL,clustering_republishmessages:w.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:w.CLUSTERING_DATABASELEVEL,customfunctions_network_port:w.HTTP_PORT,customfunctions_tls_certificate:w.TLS_CERTIFICATE,customfunctions_network_cors:w.HTTP_CORS,customfunctions_network_corsaccesslist:w.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:w.HTTP_HEADERSTIMEOUT,customfunctions_network_https:w.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:w.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:w.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:w.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:w.HTTP_TIMEOUT,customfunctions_tls:w.TLS,http_threads:w.THREADS_COUNT,threads:w.THREADS_COUNT,threads_count:w.THREADS_COUNT,threads_debug:w.THREADS_DEBUG,threads_debug_startingport:w.THREADS_DEBUG_STARTINGPORT,threads_debug_port:w.THREADS_DEBUG_PORT,threads_debug_host:w.THREADS_DEBUG_HOST,threads_debug_waitfordebugger:w.THREADS_DEBUG_WAITFORDEBUGGER,threads_maxheapmemory:w.THREADS_MAXHEAPMEMORY,http_session_affinity:w.HTTP_SESSIONAFFINITY,http_compressionthreshold:w.HTTP_COMPRESSIONTHRESHOLD,http_cors:w.HTTP_CORS,http_corsaccesslist:w.HTTP_CORSACCESSLIST,http_headerstimeout:w.HTTP_HEADERSTIMEOUT,http_keepalivetimeout:w.HTTP_KEEPALIVETIMEOUT,http_timeout:w.HTTP_TIMEOUT,http_port:w.HTTP_PORT,http_secureport:w.HTTP_SECUREPORT,http_mtls:w.HTTP_MTLS,http_mtls_user:w.HTTP_MTLS_USER,http_mtls_required:w.HTTP_MTLS_REQUIRED,http_maxheadersize:w.HTTP_MAXHEADERSIZE,http_threadrange:w.HTTP_THREADRANGE,customfunctions_processes:w.THREADS_COUNT,customfunctions_root:w.COMPONENTSROOT,localstudio_enabled:w.LOCALSTUDIO_ENABLED,logging_file:w.LOGGING_FILE,logging_level:w.LOGGING_LEVEL,logging_root:w.LOGGING_ROOT,logging_rotation_enabled:w.LOGGING_ROTATION_ENABLED,logging_rotation_compress:w.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:w.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:w.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:w.LOGGING_ROTATION_PATH,logging_stdstreams:w.LOGGING_STDSTREAMS,logging_auditlog:w.LOGGING_AUDITLOG,logging_auditretention:w.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:w.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:w.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:w.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:w.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_network_cors:w.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:w.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:w.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:w.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:w.OPERATIONSAPI_NETWORK_PORT,operationsapi_network_domainsocket:w.OPERATIONSAPI_NETWORK_DOMAINSOCKET,operationsapi_network_secureport:w.OPERATIONSAPI_NETWORK_SECUREPORT,operationsapi_tls:w.OPERATIONSAPI_TLS,operationsapi_tls_certificate:w.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_tls_privatekey:w.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:w.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY,operationsapi_network_timeout:w.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_root:w.ROOTPATH,databases:w.DATABASES,storage_path:w.STORAGE_PATH,storage_maxtransactionqueuetime:w.STORAGE_MAXTRANSACTIONQUEUETIME,ignorescripts:w.IGNORE_SCRIPTS,mqtt_network_port:w.MQTT_NETWORK_PORT,mqtt_websocket:w.MQTT_WEBSOCKET,mqtt_network_secureport:w.MQTT_NETWORK_SECUREPORT,mqtt_network_mtls:w.MQTT_NETWORK_MTLS,mqtt_network_mtls_certificateAuthority:w.MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY,mqtt_network_mtls_user:w.MQTT_NETWORK_MTLS_USER,mqtt_network_mtls_required:w.MQTT_NETWORK_MTLS_REQUIRED,mqtt_requireauthentication:w.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:w.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:w.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:w.AUTHENTICATION_CACHETTL,authentication_enablesessions:w.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:w.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:w.AUTHENTICATION_REFRESHTOKENTIMEOUT,componentsroot:w.COMPONENTSROOT,tls:w.TLS,tls_certificate:w.TLS_CERTIFICATE,tls_privatekey:w.TLS_PRIVATEKEY,tls_certificateauthority:w.TLS_CERTIFICATEAUTHORITY,tls_ciphers:w.TLS_CIPHERS};for(let e in w){let t=w[e];wO[t.toLowerCase()]=t}var Sk={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},Tk={csv_file_load:"csv_file_load",csv_data_load:te.CSV_DATA_LOAD,csv_url_load:te.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",restart_service:"restart_service"},gk={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"},Rk={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},Ak={VERSION_DEFAULT:"2.2.0"},Ok={DEVELOPMENT:8192,DEFAULT:512},bk={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"},yk={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"},Nk={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST",ERR_INVALID_ARG_TYPE:"ERR_INVALID_ARG_TYPE"},CO={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},Ik=Symbol("metadata"),wk="__clustering__",Ck=Object.values(CO),Dk=15984864e5,DO={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},Lk=NO.invert(DO),Mk={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"},Pk=111,Uk=`\r
|
|
2
|
+
`,vk={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Bk=["*","%"],Hk="unauthorized_access",xk="func_val",Gk={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},qk={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},Fk={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",START_JOB:"start_job",NATS_CONSUMER_UPDATE:"nats_consumer_update"},kk={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},Vk={HTTP:"http"},$k={STOPPED:"stopped",ONLINE:"online"},Yk="3.x.x",Kk={SUCCESS:"success",FAILURE:"failure"},Wk={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};LO.exports={LOCAL_HARPERDB_OPERATIONS:Ge,HDB_SUPPORT_ADDRESS:RO,HDB_SUPPORT_URL:OO,HDB_PRICING_URL:mF,SUPPORT_HELP_MSG:pF,LICENSE_HELP_MSG:bO,HDB_PROC_NAME:TO,HDB_PROC_DESCRIPTOR:xh,CLUSTERING_LEAF_PROC_DESCRIPTOR:l_,CLUSTERING_HUB_PROC_DESCRIPTOR:u_,SYSTEM_SCHEMA_NAME:BF,HASH_FOLDER_NAME:HF,HDB_HOME_DIR_NAME:xF,UPDATE_FILE_NAME:kF,LICENSE_KEY_DIR_NAME:qF,BOOT_PROPS_FILE_NAME:FF,JOB_TYPE_ENUM:Tk,JOB_STATUS_ENUM:lk,SYSTEM_TABLE_NAMES:sk,SYSTEM_TABLE_HASH_ATTRIBUTES:ik,OPERATIONS_ENUM:te,VALID_S3_FILE_TYPES:_k,S3_BUCKET_AUTH_KEYS:dk,VALID_SQL_OPS_ENUM:fk,GEO_CONVERSION_ENUM:hk,HDB_SETTINGS_NAMES:IO,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:mk,SERVICE_ACTIONS_ENUM:Ek,CLUSTER_MESSAGE_TYPE_ENUM:gk,CLUSTER_CONNECTION_DIRECTION_ENUM:Rk,CLUSTER_EVENTS_DEFS_ENUM:bk,PERIOD_REGEX:bF,DOUBLE_PERIOD_REGEX:yF,UNICODE_PERIOD:NF,FORWARD_SLASH_REGEX:IF,UNICODE_FORWARD_SLASH:wF,ESCAPED_FORWARD_SLASH_REGEX:CF,ESCAPED_PERIOD_REGEX:DF,ESCAPED_DOUBLE_PERIOD_REGEX:LF,REG_KEY_FILE_NAME:ck,RESTART_TIMEOUT_MS:YF,HDB_FILE_PERMISSIONS:KF,DATABASES_DIR_NAME:zF,LEGACY_DATABASES_DIR_NAME:JF,TRANSACTIONS_DIR_NAME:jF,LIMIT_COUNT_NAME:XF,ID_ATTRIBUTE_STRING:ZF,INSERT_MODULE_ENUM:rk,UPGRADE_JSON_FIELD_NAMES_ENUM:nk,RESTART_CODE:VF,RESTART_CODE_NUM:$F,CLUSTER_OPERATIONS:hc,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:ak,HDB_INTERNAL_SC_CHANNEL_PREFIX:Pr,INTERNAL_SC_CHANNELS:ok,CLUSTERING_MESSAGE_TYPES:Mk,HDB_FILE_SUFFIX:GF,BLOB_FOLDER_NAME:WF,HDB_TRASH_DIR:QF,ORIGINATOR_SET_VALUE:Pk,LICENSE_VALUES:Ak,RAM_ALLOCATION_ENUM:Ok,TIME_STAMP_NAMES_ENUM:CO,TIME_STAMP_NAMES:Ck,PERMS_UPDATE_RELEASE_TIMESTAMP:Dk,SEARCH_NOT_FOUND_MESSAGE:SF,SEARCH_ATTRIBUTE_NOT_FOUND:TF,LICENSE_ROLE_DENIED_RESPONSE:gF,LICENSE_MAX_CONNS_REACHED:RF,BASIC_LICENSE_MAX_NON_CU_ROLES:AO,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:hF,VALUE_SEARCH_COMPARATORS:DO,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:Lk,LICENSE_FILE_NAME:uk,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:yk,NEW_LINE:Uk,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:OF,MOMENT_DAYS_TAG:MF,API_TURNOVER_SEC:PF,LOOPBACK:AF,CODE_EXTENSION:c_,WILDCARD_SEARCH_VALUE:UF,NODE_ERROR_CODES:Nk,JAVASCRIPT_EXTENSION:SO,PERMS_CRUD_ENUM:vk,UNAUTHORIZED_PERMISSION_NAME:Hk,SEARCH_WILDCARDS:Bk,FUNC_VAL:xk,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:Gk,JWT_ENUM:qk,CLUSTERING_FLAG:wk,ITC_EVENT_TYPES:Fk,CUSTOM_FUNCTION_PROC_NAME:gO,CUSTOM_FUNCTION_PROC_DESCRIPTOR:a_,SERVICES:kk,THREAD_TYPES:Vk,MEM_SETTING_KEY:vF,HDB_RESTART_SCRIPT:eF,PROCESS_DESCRIPTORS:oF,SERVICE_SERVERS:_F,SERVICE_SERVERS_CWD:Hh,PROCESS_DESCRIPTORS_VALIDATE:uF,LAUNCH_SERVICE_SCRIPTS:dF,LOG_LEVELS:cF,PROCESS_NAME_ENV_PROP:ek,LOG_NAMES:aF,PM2_PROCESS_STATUSES:$k,CONFIG_PARAM_MAP:wO,CONFIG_PARAMS:w,HDB_CONFIG_FILE:jq,HDB_DEFAULT_CONFIG_FILE:Xq,ROLE_TYPES_ENUM:fF,BOOT_PROP_PARAMS:yO,INSTALL_PROMPTS:tk,HDB_ROOT_DIR_NAME:Zq,CLUSTERING_PROCESSES:lF,FOREGROUND_PID_FILE:nF,PACKAGE_ROOT:ti,PRE_4_0_0_VERSION:Yk,DATABASES_PARAM_CONFIG:Sk,METADATA_PROPERTY:Ik,AUTH_AUDIT_STATUS:Kk,AUTH_AUDIT_TYPES:Wk,HDB_PID_FILE:sF,DEFAULT_DATABASE_NAME:iF,LEGACY_CONFIG_PARAMS:pk};pO()});var Gh=g((fce,UO)=>{"use strict";var MO=require("minimist");UO.exports=Qk;function Qk(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=PO(process.env),n=PO(MO(process.argv))):(r=process.env,n=MO(process.argv));let s={};for(let i=0,o=e.length;i<o;i++){let c=e[i];n[c]!==void 0?s[c]=n[c].toString().trim():r[c]!==void 0&&(s[c]=r[c].toString().trim())}return s}a(Qk,"assignCMDENVVariables");function PO(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}a(PO,"objKeysToLowerCase")});var $=g((hce,Kh)=>{"use strict";var xi=require("fs-extra"),{workerData:zk,threadId:Jk}=require("worker_threads"),Ts=require("path"),HO=require("yaml"),xO=require("properties-reader"),Tt=P(),vO=Gh(),jk=require("os"),{PACKAGE_ROOT:Fh}=P(),{_assignPackageExport:Xk}=require("../index"),pc={};for(let e in console)pc[e]||(pc[e]=console[e]);var cr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},GO={STDOUT:"stdOut",STDERR:"stdErr"},Zk=Ts.join(Fh,"logs"),eV=Ts.join(Fh,"config/yaml/",Tt.HDB_DEFAULT_CONFIG_FILE),tV=1e4,Ss,Qn,ar,__,d_,Sc,Vo,mc;mc===void 0&&qO();Kh.exports={notify:VO,fatal:$O,error:Tc,warn:Yh,info:f_,debug:$h,trace:Vh,setLogLevel:cV,log_level:ar,loggerWithTag:rV,suppressLogging:nV,initLogSettings:qO,setupConsoleLogging:FO,logCustomLevel:oV,closeLogFile:kh,getLogFilePath:()=>Sc,OUTPUTS:GO,AuthAuditLog:_V};Xk("logger",Kh.exports);function qO(e=!1){try{if(mc===void 0||e){kh();let t=aV(),r=vO(["ROOTPATH"]);try{mc=xO(t)}catch(n){if(!r.ROOTPATH||r.ROOTPATH&&!xi.pathExistsSync(Ts.join(r.ROOTPATH,Tt.HDB_CONFIG_FILE)))throw n}({level:ar,config_log_path:d_,to_file:Ss,to_stream:Qn}=uV(r.ROOTPATH?Ts.join(r.ROOTPATH,Tt.HDB_CONFIG_FILE):mc.get("settings_path"))),__=Tt.LOG_NAMES.HDB,Sc=Ts.join(d_,__)}}catch(t){if(mc=void 0,t.code===Tt.NODE_ERROR_CODES.ENOENT||t.code===Tt.NODE_ERROR_CODES.ERR_INVALID_ARG_TYPE){let r=vO(Object.keys(Tt.CONFIG_PARAM_MAP),!0);for(let o in r){let c=Tt.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let u=r[o];if(c===Tt.CONFIG_PARAMS.LOGGING_LEVEL){ar=u;continue}if(c===Tt.CONFIG_PARAMS.LOGGING_STDSTREAMS){Qn=u;continue}c===Tt.CONFIG_PARAMS.LOGGING_FILE&&(Ss=c)}let{default_level:n,default_to_file:s,default_to_stream:i}=lV();Ss=Ss===void 0?s:Ss,Ss=BO(Ss),Qn=Qn===void 0?i:Qn,Qn=BO(Qn),ar=ar===void 0?n:ar,d_=Zk,__=Tt.LOG_NAMES.INSTALL,Sc=Ts.join(d_,__);return}throw Tc("Error initializing log settings"),Tc(t),t}process.env.DEV_MODE&&(Qn=!0),FO()}a(qO,"initLogSettings");var qh=!0;function FO(){ko("error",Tc),ko("warn",Yh),ko("log",f_),ko("info",f_),ko("debug",$h),ko("trace",Vh)}a(FO,"setupConsoleLogging");function ko(e,t){console[e]=function(...r){if(qh&&t(...r),!/PM2 log:|App \[/.test(r[0]))return pc[e](...r)}}a(ko,"logConsole");function rV(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(VO),fatal:r($O),error:r(Tc),warn:r(Yh),info:r(f_),debug:r($h),trace:r(Vh)};function r(n){return function(...s){return n(t,...s)}}}a(rV,"loggerWithTag");function nV(e){try{qh=!1,e()}finally{qh=!0}}a(nV,"suppressLogging");var sV=zk?.name?.replace(/ /g,"-")||"main";function gs(e,t){let r=new Date(Date.now()).toISOString(),n="",s=t.length,i=s-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||sV+"/"+Jk);c<s;c++){let _=t[c];_ instanceof Error&&_.stack?n+=_.stack:typeof _=="object"?n+=JSON.stringify(_):n+=_,c<i&&(n+=" ")}return`${r} [${o.join("] [")}]: ${n}
|
|
3
|
+
`}a(gs,"createLogRecord");function gc(e){Ss&&kO(e),Qn&&process.stdout.write(e)}a(gc,"logStdOut");function E_(e){Ss&&kO(e),Qn&&process.stderr.write(e)}a(E_,"logStdErr");function kO(e){iV(),Vo?xi.appendFileSync(Vo,e):pc.log(e)}a(kO,"logToFile");function kh(){try{xi.closeSync(Vo)}catch{}Vo=null}a(kh,"closeLogFile");function iV(){if(!Vo){try{if(!Sc)debugger;Vo=xi.openSync(Sc,"a")}catch(e){pc.error(e)}setTimeout(()=>{kh()},tV).unref()}}a(iV,"openLogFile");function f_(...e){cr[ar]<=cr.info&&gc(gs("info",e))}a(f_,"info");function Vh(...e){cr[ar]<=cr.trace&&gc(gs("trace",e))}a(Vh,"trace");function Tc(...e){cr[ar]<=cr.error&&E_(gs("error",e))}a(Tc,"error");function $h(...e){cr[ar]<=cr.debug&&gc(gs("debug",e))}a($h,"debug");function VO(...e){cr[ar]<=cr.notify&&gc(gs("notify",e))}a(VO,"notify");function $O(...e){cr[ar]<=cr.fatal&&E_(gs("fatal",e))}a($O,"fatal");function Yh(...e){cr[ar]<=cr.warn&&E_(gs("warn",e))}a(Yh,"warn");function oV(e,t,...r){t===GO.STDERR?E_(gs(e,r)):gc(gs(e,r))}a(oV,"logCustomLevel");function aV(){let e;try{e=jk.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Ts.join(e,Tt.HDB_HOME_DIR_NAME,Tt.BOOT_PROPS_FILE_NAME);return xi.existsSync(t)||(t=Ts.join(Fh,"utility/hdb_boot_properties.file")),t}a(aV,"getPropsFilePath");function cV(e){ar=e}a(cV,"setLogLevel");function BO(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(BO,"autoCastBoolean");function uV(e){try{if(e.includes("config/settings.js")){let o=xO(e);return{level:o.get(Tt.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:Ts.dirname(o.get(Tt.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(Tt.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(Tt.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=HO.parseDocument(xi.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),n=t.getIn(["logging","root"]),s=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]);return{level:r,config_log_path:n,to_file:s,to_stream:i}}catch(t){if(t.code===Tt.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(uV,"getLogConfig");function lV(){try{let e=HO.parseDocument(xi.readFileSync(eV,"utf8")),t=e.getIn(["logging","level"]),r=e.getIn(["logging","file"]),n=e.getIn(["logging","stdStreams"]);return{default_level:t,default_to_file:r,default_to_stream:n}}catch(e){console.error("Error accessing default config file for logging"),console.error(e)}}a(lV,"getDefaultConfig");function _V(e,t,r,n,s,i){this.username=e,this.status=t,this.type=r,this.originating_ip=n,this.request_method=s,this.path=i}a(_V,"AuthAuditLog")});var KO=g((pce,YO)=>{"use strict";var dV=require("util"),fV=require("path"),EV=require("child_process"),hV=dV.promisify(EV.execFile),mV=1e3*1e3*10;YO.exports={findPs:pV};async function pV(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:n}=await hV("ps",["wwxo",`pid,${r}`],{maxBuffer:mV});for(let s of n.trim().split(`
|
|
4
|
+
`).slice(1)){s=s.trim();let[i]=s.split(" ",1),o=s.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=o}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,n])=>({pid:Number.parseInt(r,10),name:fV.basename(n.comm),cmd:n.args,ppid:Number.parseInt(n.ppid,10),uid:Number.parseInt(n.uid,10),cpu:Number.parseFloat(n["%cpu"]),memory:Number.parseFloat(n["%mem"])}))}a(pV,"findPs")});var ft=g((Tce,QO)=>{"use strict";var SV="__dbis__",TV="__txns__",gV="__environment_name__",RV="__dbi_defintion__",AV={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"},OV=["__createdtime__","__updatedtime__"],bV="\uFFFF",WO={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},yV=Object.values(WO);QO.exports={AUDIT_STORE_NAME:TV,INTERNAL_DBIS_NAME:SV,DBI_DEFINITION_NAME:RV,SEARCH_TYPES:AV,TIMESTAMP_NAMES:OV,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:gV,TRANSACTIONS_DBI_NAMES_ENUM:WO,TRANSACTIONS_DBIS:yV,OVERFLOW_MARKER:bV}});var Ur=g((gce,nb)=>{"use strict";var zO=P(),JO=ft(),jO={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},XO=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),ZO={500:XO("There was an error processing your request."),400:"Invalid request"},NV=ZO[jO.INTERNAL_SERVER_ERROR],IV={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.`},wV={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},CV={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"},DV={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 ${JO.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${JO.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"},LV={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${zO.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 ${zO.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"},eb={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"},MV={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."},PV={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`},UV={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"},vV={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},BV={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`},tb={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.`},rb={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}`},HV={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."},xV={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},GV={...eb,...CV,...IV,...MV,...PV,...UV,...vV,...BV,...LV,...tb,...rb,...HV,...xV,...wV};nb.exports={CHECK_LOGS_WRAPPER:XO,HDB_ERROR_MSGS:GV,DEFAULT_ERROR_MSGS:ZO,DEFAULT_ERROR_RESP:NV,HTTP_STATUS_CODES:jO,LMDB_ERRORS_ENUM:DV,AUTHENTICATION_ERROR_MSGS:eb,VALIDATION_ERROR_MSGS:tb,ITC_ERRORS:rb}});var se=g((Ace,ob)=>{"use strict";var $o=Ur(),qV=$(),FV=P(),h_=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,sb),this.statusCode=n||$o.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||($o.DEFAULT_ERROR_MSGS[n]?$o.DEFAULT_ERROR_MSGS[n]:$o.DEFAULT_ERROR_MSGS[$o.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,s&&(this.logLevel=s),typeof this.message!="string"&&(this.stack=t.stack),i&&qV[s](i)}},Wh=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}},Qh=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function sb(e,t,r,n=FV.LOG_LEVELS.ERROR,s=null,i=!1){if(ib(e))return e;let o=new h_(e,t,r,n,s);return i&&delete o.stack,o}a(sb,"handleHDBError");function ib(e){return e.__proto__.constructor.name===h_.name}a(ib,"isHDBError");ob.exports={isHDBError:ib,handleHDBError:sb,ClientError:Wh,ServerError:Qh,hdb_errors:$o}});var je=g((bce,fb)=>{"use strict";var yc=P(),kV=z(),ur=ee(),Nc=require("path"),VV=require("minimist"),ab=require("fs-extra"),cb=require("lodash");ur.initSync();var{CONFIG_PARAMS:ri,DATABASES_PARAM_CONFIG:Rc,SYSTEM_SCHEMA_NAME:m_}=yc,Ac,Oc,bc;function ub(){if(Ac!==void 0)return Ac;if(ur.getHdbBasePath()!==void 0)return Ac=ur.get(ri.STORAGE_PATH)||Nc.join(ur.getHdbBasePath(),yc.DATABASES_DIR_NAME),Ac}a(ub,"getBaseSchemaPath");function lb(){if(Oc!==void 0)return Oc;if(ur.getHdbBasePath()!==void 0)return Oc=db(m_),Oc}a(lb,"getSystemSchemaPath");function _b(){if(bc!==void 0)return bc;if(ur.getHdbBasePath()!==void 0)return bc=ur.get(yc.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||Nc.join(ur.getHdbBasePath(),yc.TRANSACTIONS_DIR_NAME),bc}a(_b,"getTransactionAuditStoreBasePath");function $V(e,t){let r=ur.get(ri.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||Nc.join(_b(),e.toString())}a($V,"getTransactionAuditStorePath");function db(e,t){e=e.toString(),t=t&&t.toString();let r=ur.get(yc.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||Nc.join(ub(),e)}a(db,"getSchemaPath");function YV(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,VV(process.argv));let n=r[ri.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!kV.isObject(n))throw o;i=n}for(let o of i){let c=o[m_];if(!c)continue;let u=ur.get(ri.DATABASES);u=u??{};let _=c?.tables?.[t]?.[Rc.PATH];if(_)return cb.set(u,[m_,Rc.TABLES,t,Rc.PATH],_),ur.setProperty(ri.DATABASES,u),_;let l=c?.[Rc.PATH];if(l)return cb.set(u,[m_,Rc.PATH],l),ur.setProperty(ri.DATABASES,u),l}}let s=r[ri.STORAGE_PATH.toUpperCase()];if(s){if(!ab.pathExistsSync(s))throw new Error(s+" does not exist");let i=Nc.join(s,e);return ab.mkdirsSync(i),ur.setProperty(ri.STORAGE_PATH,s),i}return lb()}a(YV,"initSystemSchemaPaths");function KV(){Ac=void 0,Oc=void 0,bc=void 0}a(KV,"resetPaths");fb.exports={getBaseSchemaPath:ub,getSystemSchemaPath:lb,getTransactionAuditStorePath:$V,getTransactionAuditStoreBasePath:_b,getSchemaPath:db,initSystemSchemaPaths:YV,resetPaths:KV}});var vr=g((wce,Sb)=>{"use strict";var WV=Ur().LMDB_ERRORS_ENUM,Nce=require("lmdb"),QV=ft(),Ice=require("buffer").Buffer,{OVERFLOW_MARKER:Eb,MAX_SEARCH_KEY_LENGTH:p_}=QV,hb=["number","string","symbol","boolean","bigint"];function zV(e){if(e=e?.primaryStore||e,!e)throw new Error(WV.ENV_REQUIRED)}a(zV,"validateEnv");function JV(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(JV,"stringifyData");function jV(e){return e instanceof Date?e.valueOf():e}a(jV,"convertKeyValueToWrite");function XV(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(hb.includes(typeof e))return e.length>p_?[e.slice(0,p_)+Eb]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(hb.includes(typeof i))i.length>p_?r.push(i.slice(0,p_)+Eb):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(XV,"getIndexedValues");var S_=0,mb=0;function pb(){mb=Date.now()-performance.now()}a(pb,"adjustStartTime");pb();var ZV=6e4;setInterval(pb,ZV).unref();function e$(){let e=performance.now()+mb;return e>S_?(S_=e,e):(S_+=488e-6,S_)}a(e$,"getNextMonotonicTime");Sb.exports={validateEnv:zV,stringifyData:JV,convertKeyValueToWrite:jV,getNextMonotonicTime:e$,getIndexedValues:XV}});var Tb,In,zh,Ic=Re(()=>{Tb=require("events"),In=class extends Tb.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;drainCloseListener;currentDrainResolver;[Symbol.asyncIterator](){let t=new zh;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(){let t=this.queue?.shift();return t||this.emit("drained"),t}waitForDrain(){return new Promise(t=>{!this.queue||this.queue.length===0?t(!0):(this.once("drained",()=>t(!0)),this.currentDrainResolver=t,this.drainCloseListener||(this.drainCloseListener=!0,this.on("close",()=>{this.currentDrainResolver?.(!1)})))})}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)}},zh=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 Gi={};Fe(Gi,{server:()=>at});var gb,at,lr=Re(()=>{gb=require("../index"),at={};(0,gb._assignPackageExport)("server",at)});var Xh={};Fe(Xh,{loadGQLSchema:()=>n$,start:()=>jh,startOnMainThread:()=>r$});function jh({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:u,NamedTypeNode:_,StringValueNode:l}=await import("graphql"),d=o(new c(r.toString(),s)),E=new Map,f=[],h;for(let S of d.definitions)switch(S.kind){case u.OBJECT_TYPE_DEFINITION:let B=function(U){if(U.kind==="NonNullType"){let Q=B(U.type);return Q.nullable=!1,Q}if(U.kind==="ListType")return{type:"array",elements:B(U.type)};let M={type:U.name?.value};return Object.defineProperty(M,"location",{value:U.loc.startToken}),M};a(B,"getProperty");let T=S.name.value,R=[],y={table:null,database:null,properties:R};E.set(T,y);for(let U of S.directives){if(U.name.value==="table"){for(let F of U.arguments)y[F.name.value]=F.value.value;y.schema&&(y.database=y.schema),y.table||(y.table=T),y.audit&&(y.audit=y.audit!=="false"),y.attributes=y.properties,f.push(y)}if(U.name.value==="sealed"&&(y.sealed=!0),U.name.value==="export"){y.export=!0;for(let F of U.arguments)F.name.value==="name"&&(y.export={name:F.value.value})}}let I=!1;for(let U of S.fields){let F=B(U.type);F.name=U.name.value,R.push(F);for(let M of U.directives)if(M.name.value==="primaryKey")I?console.warn("Can not define two attributes as a primary key"):(F.isPrimaryKey=!0,I=!0);else if(M.name.value==="indexed")F.indexed=!0;else if(M.name.value==="relationship"){let Q={};for(let J of M.arguments)Q[J.name.value]=J.value.value;F.relationship=Q}else if(M.name.value==="createdTime")F.assignCreatedTime=!0;else if(M.name.value==="updatedTime")F.assignUpdatedTime=!0;else if(M.name.value==="expiresAt")F.expiresAt=!0;else if(M.name.value==="allow"){let Q=F.authorizedRoles=[];for(let J of M.arguments)J.name.value==="role"&&Q.push(J.value.value)}}y.type=T,T==="Query"&&(h=y)}function p(S){let T=E.get(S.type);T?(Object.defineProperty(S,"properties",{value:T.properties}),Object.defineProperty(S,"definition",{value:T})):S.type==="array"?p(S.elements):t$.includes(S.type)||(0,Rb.getWorkerIndex)()===0&&console.error(`The type ${S.type} is unknown at line ${S.location.line}, column ${S.location.column}, in ${s}`)}a(p,"connectPropertyType");for(let S of E.values())for(let T of S.properties)p(T);for(let S of f)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,Jh.dirname)(n),S.tableClass):i.set((0,Jh.dirname)(n)+"/"+(S.export.name||S.type),S.tableClass))}}var Jh,Rb,t$,r$,n$,Ab=Re(()=>{Jh=require("path");Ae();Rb=x(We()),t$=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];a(jh,"start");r$=jh,n$=jh({ensureTable:Et}).handleFile});async function T_(e){let t=(0,yb.pathToFileURL)(e).toString();return s$?(wc||(wc=i$(a$)),(await(await wc).import(t)).namespace):import(t)}async function i$(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),wc=new Compartment({console,Math,Date,fetch:o$,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,bb.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){Object.assign(s,{Resource:$t,tables:Br,databases:ct})}};let n=await(0,Ob.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)}}),wc}function o$(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 a$(){return{Resource:$t,tables:Br}}var Ob,bb,yb,s$,wc,Zh=Re(()=>{cn();Ae();Ob=require("fs/promises"),bb=require("path"),yb=require("url"),s$=!1;a(T_,"secureImport");a(i$,"getCompartment");a(o$,"secureOnlyFetch");a(a$,"getGlobalVars")});var tm={};Fe(tm,{handleFile:()=>c$});async function c$(e,t,r,n){let s=new Map,i=await T_(r);c(i.default)&&n.set((0,em.dirname)(t),i.default),o(i,(0,em.dirname)(t));function o(u,_){for(let l in u){let d=u[l];c(d)?n.set(_+"/"+l,d):typeof d=="object"&&o(d,_+"/"+l)}}a(o,"recurseForResources");function c(u){return typeof u=="function"&&(u.get||u.put||u.post||u.delete)}return a(c,"isResource"),s}var em,Nb=Re(()=>{Zh();em=require("path");a(c$,"handleFile")});var nm={};Fe(nm,{start:()=>u$});function u$({resources:e}){e.set("login",rm),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var rm,Ib=Re(()=>{cn();a(u$,"start");rm=class extends $t{static{a(this,"Login")}static async get(t,r,n){}static async post(t,r,n){let{username:s,password:i,redirect:o}=r;return{data:await n.login(s,i)}}}});var Ub={};Fe(Ub,{parse:()=>im,streamAsJSON:()=>Cc,stringify:()=>qi});function Cc(e){return new sm({value:e})}function wb(e){return console.error(e),JSON.stringify(e.toString())}function Cb(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function qi(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===Mb)return Pb(e);if(t.resolution)return t.resolution.then(()=>qi(e));throw t}}function Pb(e){let t=typeof e;if(t==="object"){if(e===null)return"null";e.toJSON&&(e=e.toJSON());let r;if(Array.isArray(e)){r="[";for(let n=0;n<e.length;n++)n>0&&(r+=","),r+=Pb(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+qi(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function im(e){return d$.test(e)?l$.parse(e):JSON.parse(e)}var Db,Lb,l$,_$,Mb,sm,d$,om=Re(()=>{Db=require("stream"),Lb=x(require("json-bigint-fixes")),l$=(0,Lb.default)({useNativeBigInt:!0}),_$=1e4,Mb={};BigInt.prototype.toJSON=function(){throw Mb};a(Cc,"streamAsJSON");sm=class extends Db.Readable{static{a(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0),this.activeIterators=[]}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],n=t[Symbol.iterator];if((n||r)&&!t.then){yield"[";let s=!0;if((r||n)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();this.activeIterators.push(i);let o;for(;;)if(o=i.next(),o.then&&(yield o.then(c=>(o=c,""))),o.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else s?s=!1:yield",",yield*this.serialize(o.value)}for(let i of t)s?s=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(s=>this.serialize(s),wb)}catch(s){yield wb(s)}else yield qi(t)}else yield qi(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);Cb(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>_$?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 Cb(this.readIterator(t.childIterator),n=>{if(n)return t.childIterator=null,this.readIterator(t)});do{let n=t.next();if(n.done)return!0;if(r=n.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(s=>{if(s&&typeof s.return=="function")return t.childIterator=s,this.readIterator(t);if(this.push(s+""))return this.readIterator(t)});if(typeof r.return=="function")return t.childIterator=r,this.readIterator(t)}}while(this.push(r))}catch(r){return console.error(r),this.push(r.toString()),this.push(null),!0}}_destroy(t,r){for(let n of this.activeIterators)t?n.throw(t):n.return();r()}};a(wb,"handleError");a(Cb,"when");a(qi,"stringify");a(Pb,"jsStringify");d$=/[[,:]\s*-?\d{16,}/;a(im,"parse")});var Wb=g(($ce,Kb)=>{"use strict";var am=require("recursive-iterator"),f$=require("alasql"),cm=require("clone"),vb=z(),{handleHDBError:Bb,hdb_errors:E$}=se(),{HDB_ERROR_MSGS:Hb,HTTP_STATUS_CODES:xb}=E$,{getDatabases:h$}=(Ae(),ie(ke)),m$=["DISTINCT_ARRAY"],Gb=Symbol("validateTables"),um=Symbol("validateTable"),Vce=Symbol("getAllColumns"),qb=Symbol("validateAllColumns"),g_=Symbol("findColumn"),Fb=Symbol("validateOrderBy"),Dc=Symbol("validateSegment"),lm=Symbol("validateColumn"),kb=Symbol("setColumnsForTable"),Vb=Symbol("checkColumnsForAsterisk"),$b=Symbol("validateGroupBy"),Yb=Symbol("hasColumns"),_m=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[Gb](),this[Vb](),this[qb]()}[Gb](){if(this[Yb]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[um](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[um](t.table)})}}[Yb](){let t=!1,r=new am(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[um](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=h$();if(!r[t.databaseid])throw Bb(new Error,Hb.SCHEMA_NOT_FOUND(t.databaseid),xb.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw Bb(new Error,Hb.TABLE_NOT_FOUND(t.databaseid,t.tableid),xb.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=cm(s);i.table=cm(t),this.attributes.push(i)})}[g_](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)}[Vb](){let t=new am(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[kb](r.tableid)}[kb](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new f$.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[qb](){this[Dc](this.statement.columns,!1),this[Dc](this.statement.joins,!1),this[Dc](this.statement.where,!1),this[$b](this.statement.group,!1),this[Dc](this.statement.order,!0)}[Dc](t,r){if(!t)return;let n=new am(t),s=[];for(let{node:i,path:o}of n)!vb.isEmpty(i)&&!vb.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[Fb](i):s.push(this[lm](i)));return s}[$b](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&m$.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=cm(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[g_](n)[0];s&&r.push(s)}}}),this.statement.group.forEach(n=>{let s=null;if(!n.columnid)r.forEach((i,o)=>{if(i.toString()===n.toString()){s=i,r.splice(o,1);return}});else{let i=this[g_](n);if(!i||i.length===0)throw`unknown column '${n.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${n.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){s=o,r.splice(c,1);return}})}if(!s)throw`group by column '${n.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[Fb](t){let r=this.statement.columns.filter(n=>n.as===t.columnid);if(r.length>1)throw`ambiguous column reference ${(t.tableid?t.tableid+".":"")+t.columnid} in order by`;r.length===0&&this[lm](t)}[lm](t){let r=this[g_](t),n=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${n}`;if(r.length>1)throw`ambiguous column reference ${n}`;return r[0]}};Kb.exports=_m});var zb=g((Kce,Qb)=>{"use strict";var dm=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")}};Qb.exports=dm});var jb=g((Qce,Jb)=>{"use strict";var fm=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};Jb.exports=fm});var ty={};Fe(ty,{HAS_EXPIRATION:()=>gm,LAST_TIMESTAMP_PLACEHOLDER:()=>Pc,LOCAL_TIMESTAMP:()=>p$,METADATA:()=>Lc,NO_TIMESTAMP:()=>hm,PENDING_LOCAL_TIME:()=>Rm,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>Tm,RecordEncoder:()=>Sm,TIMESTAMP_ASSIGN_LAST:()=>T$,TIMESTAMP_ASSIGN_NEW:()=>Zb,TIMESTAMP_ASSIGN_PREVIOUS:()=>ey,TIMESTAMP_PLACEHOLDER:()=>R_,TIMESTAMP_RECORD_PREVIOUS:()=>mm,getUpdateRecord:()=>Am,handleLocalTimeForGets:()=>y_});function R$(){return Mc[0]=Mc[0]^64,S$.getFloat64(0)}function y_(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?.[Lc];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?.[Lc]>=0?c.value:c};let n=e.getRange;e.getRange=function(i){let o=n.call(this,i);return i.valuesForKey?o.map(c=>c?.value):i.values===!1||i.onlyCount?o:o.map(c=>{let u=c.value,_=u[Lc];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c})};let s=e.useReadTransaction();if(s.done(),!s.done.isTracked){let i=s.constructor,o=s.use,c=s.done;i.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,Fi.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let u=0;u<Fi.length;u++){let _=Fi[u].deref();(!_||_.isDone||_.isCommitted)&&Fi.splice(u--,1)}},i.prototype.done.isTracked=!0}return e}function Am(e,t,r){return function(n,s,i,o,c=-1,u,_,l,d="put",E,f){if(E||u==null?Yo=i?.localTime?mm|ey:hm:Yo=u?i?.localTime?mm|16384:Zb|16384:hm,l>0&&(c|=gm),O_=c,pm=l,i?.version===o&&u===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:Yo>0},p;try{E&&(h.ifVersion=p=i?.version??null);let S=e.put(n,s,h);if(u){let T=_?.user?.username;if(f&&(A_=e.encoder.encode(f)),E&&i?.localTime){let R=i?.localTime,y=r.get(R);if(y){let I=vt(y).previousLocalTime;return r.put(R,b_(o,t,n,I,T,d,A_),{ifVersion:p}),S}}r.put(Pc,b_(o,t,n,i?.localTime?1:0,T,d,A_),{append:d!=="invalidate",instructedWrite:!0,ifVersion:p})}return S}catch(S){throw S.message+=" id: "+n+" options: "+h,S}}}var Xb,Em,R_,Pc,Tm,p$,Lc,Mc,S$,hm,Zb,T$,ey,mm,gm,Rm,g$,A_,Yo,O_,pm,Sm,Fi,Uc=Re(()=>{Xb=require("msgpackr");ni();Em=x($()),R_=new Uint8Array([1,1,1,1,4,64,0,0]),Pc=new Uint8Array([1,1,1,1,1,0,0,0]),Tm=new Uint8Array([1,1,1,1,3,64,0,0]),p$=Symbol("local-timestamp"),Lc=Symbol("metadata"),Mc=new Uint8Array(8),S$=new DataView(Mc.buffer,0,8),hm=0,Zb=0,T$=1,ey=3,mm=4,gm=16,Rm=1,Yo=0,O_=-1,pm=0,Sm=class extends Xb.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(n,s){if(Yo||O_>=0){let i=0,o=Yo;o&&(i+=8,Yo=0);let c=O_,u=pm;c>=0&&(i+=2,O_=-1,u&&(i+=8,pm=0));let _=g$=r.call(this,n,s|2048|i);A_=_.subarray((_.start||0)+i,_.end);let l=_.start||0;return o&&(R_[4]=o,R_[5]=o>>8,_.set(R_,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,n,s)}}decode(t,r){let n=r?.start||0,s=r>-1?r:r?.end||t.length,i=t[n],o=0;try{if(i<32&&s>2){let c=n,u;if(i===2){if(t.copy)t.copy(Mc,0,c),c+=8;else for(let d=0;d<8;d++)Mc[d]=t[c++];u=R$(),i=t[c]}let _;i<32&&(o=i,c+=2,o&gm&&(_=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8));let l=super.decode(t.subarray(c,s),s-c);return{localTime:u,value:l,[Lc]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(R$,"getTimestamp");a(y_,"handleLocalTimeForGets");Fi=[];setInterval(()=>{for(let e=0;e<Fi.length;e++){let t=Fi[e].deref();!t||t.isDone||t.isCommitted?Fi.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(Em.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):Em.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(Am,"getUpdateRecord")});var vc=g((Zce,ny)=>{"use strict";var ry=ee(),A$=P(),{RecordEncoder:O$}=(Uc(),ie(ty)),Xce=require("fs");ry.initSync();var b$=ry.get(A$.CONFIG_PARAMS.STORAGE_CACHING)!==!1,Om=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=b$&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:O$})}};ny.exports=Om});var Bc=g((tue,sy)=>{"use strict";var Hr=ee(),un=P();Hr.initSync();var N_=class{static{a(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=2048,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.eventTurnBatching=!1,this.noSync=Hr.get(un.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Hr.get(un.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Hr.get(un.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",Hr.get(un.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=Hr.get(un.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),Hr.get(un.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=Hr.get(un.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),Hr.get(un.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=Hr.get(un.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),Hr.get(un.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=Hr.get(un.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=Hr.get(un.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};sy.exports=N_;N_.MAX_DBS=1e4});var Qe=g((nue,Ey)=>{"use strict";var ym=require("lmdb"),wn=require("fs-extra"),xr=require("path"),I_=vr(),ay=$(),_r=Ur().LMDB_ERRORS_ENUM,w_=jb(),Nm=vc(),cy=Bc(),si=ft(),iy=P(),{table:y$,resetDatabases:N$}=(Ae(),ie(ke)),oy=ee(),Cn=si.INTERNAL_DBIS_NAME,uy=si.DBI_DEFINITION_NAME,I$="data.mdb",w$="lock.mdb",Hc=".mdb",C$="-lock",bm=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=ln(t,r),this.key_type=this.dbi[si.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[si.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new ym.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function C_(e,t){if(e===void 0)throw new Error(_r.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(_r.ENV_NAME_REQUIRED)}a(C_,"pathEnvNameValidation");async function Im(e,t,r=!0){try{await wn.access(e)}catch(n){throw n.code==="ENOENT"?new Error(_r.INVALID_BASE_PATH):n}try{let n=xr.join(e,t+Hc);return await wn.access(n,wn.constants.R_OK|wn.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await wn.access(xr.join(e,t,I$),wn.constants.R_OK|wn.constants.F_OK),xr.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(_r.INVALID_ENVIRONMENT)}else throw new Error(_r.INVALID_ENVIRONMENT);throw n}}a(Im,"validateEnvironmentPath");function D_(e,t){if(I_.validateEnv(e),t===void 0)throw new Error(_r.DBI_NAME_REQUIRED)}a(D_,"validateEnvDBIName");async function D$(e,t,r=!1,n=!1){C_(e,t);let s=xr.basename(e);t=t.toString();let i=oy.get(iy.CONFIG_PARAMS.DATABASES);i||oy.setProperty(iy.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await Im(e,t,n),ly(e,t,r)}catch(o){if(o.message===_r.INVALID_ENVIRONMENT){let c=xr.join(e,t);await wn.mkdirp(n?c:e);let u=new cy(n?c:c+Hc,!1),_=ym.open(u);_.dbis=Object.create(null);let l=new Nm(!1);_.openDB(Cn,l),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=wm(e,t,r);return _[si.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(D$,"createEnvironment");async function L$(e,t,r,n=!0){C_(e,t),t=t.toString();let s=xr.join(e,t);return y$({table:t,database:xr.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(L$,"copyEnvironment");async function ly(e,t,r=!1){C_(e,t),t=t.toString();let n=wm(e,t,r);if(global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null)),global.lmdb_map[n]!==void 0)return global.lmdb_map[n];let s=await Im(e,t),i=xr.join(e,t+Hc),o=s!=i,c=new cy(s,o),u=ym.open(c);u.dbis=Object.create(null);let _=dy(u);for(let l=0;l<_.length;l++)ln(u,_[l]);return u[si.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=u,u}a(ly,"openEnvironment");async function M$(e,t,r=!1){C_(e,t),t=t.toString();let n=xr.join(e,t+Hc),s=await Im(e,t);if(global.lmdb_map!==void 0){let i=wm(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await _y(o),delete global.lmdb_map[i]}}await wn.remove(s),await wn.remove(s===n?s+C$:xr.join(xr.dirname(s),w$))}a(M$,"deleteEnvironment");async function _y(e){I_.validateEnv(e);let t=e[si.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(_y,"closeEnvironment");function wm(e,t,r=!1){let s=`${xr.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(wm,"getCachedEnvironmentName");function P$(e){I_.validateEnv(e);let t=Object.create(null),r=ln(e,Cn);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==Cn)try{t[n]=Object.assign(new w_,s)}catch{ay.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(P$,"listDBIDefinitions");function dy(e){I_.validateEnv(e);let t=[],r=ln(e,Cn);for(let{key:n}of r.getRange({start:!1}))n!==Cn&&t.push(n);return t}a(dy,"listDBIs");function U$(e,t){let n=ln(e,Cn).getEntry(t),s=new w_;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{ay.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(U$,"getDBIDefinition");function fy(e,t,r,n=!r){if(D_(e,t),t=t.toString(),t===Cn)throw new Error(_r.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return ln(e,t)}catch(s){if(s.message===_r.DBI_DOES_NOT_EXIST){let i=new Nm(r,n===!0),o=e.openDB(t,i),c=new w_(r===!0,n);return o[uy]=c,ln(e,Cn).putSync(t,c),e.dbis[t]=o,o}throw s}}a(fy,"createDBI");function ln(e,t){if(D_(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Cn?r=U$(e,t):r=new w_,r===void 0)throw new Error(_r.DBI_DOES_NOT_EXIST);let n;try{let s=new Nm(r.dup_sort,r.useVersions);if(n=e.openDB(t,s),n.db===void 0)throw new Error("MDB_NOTFOUND")}catch(s){throw s.message.includes("MDB_NOTFOUND")===!0?new Error(_r.DBI_DOES_NOT_EXIST):s}return n[uy]=r,e.dbis[t]=n,n}a(ln,"openDBI");function v$(e,t){D_(e,t),t=t.toString();let r=ln(e,t),n=r.getStats();return r[si.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(v$,"statDBI");async function B$(e,t){try{let r=xr.join(e,t+Hc);return(await wn.stat(r)).size}catch{throw new Error(_r.INVALID_ENVIRONMENT)}}a(B$,"environmentDataSize");function H$(e,t){if(D_(e,t),t=t.toString(),t===Cn)throw new Error(_r.CANNOT_DROP_INTERNAL_DBIS_NAME);ln(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],ln(e,Cn).removeSync(t)}a(H$,"dropDBI");function x$(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{ln(e,i)}catch(o){if(o.message===_r.DBI_DOES_NOT_EXIST)fy(e,i,i!==t,i===t),n=!0;else throw o}}n&&N$()}a(x$,"initializeDBIs");Ey.exports={openDBI:ln,openEnvironment:ly,createEnvironment:D$,listDBIs:dy,listDBIDefinitions:P$,createDBI:fy,dropDBI:H$,statDBI:v$,deleteEnvironment:M$,initializeDBIs:x$,TransactionCursor:bm,environmentDataSize:B$,copyEnvironment:L$,closeEnvironment:_y}});var my=g((iue,hy)=>{"use strict";var Cm=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};hy.exports=Cm});var Sy=g((aue,py)=>{"use strict";var Dm=class{static{a(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n,this.original_records=s}};py.exports=Dm});var gy=g((uue,Ty)=>{"use strict";var Lm=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};Ty.exports=Lm});var Ko=g((Eue,Oy)=>{"use strict";var G$=Qe(),q$=my(),F$=Sy(),k$=gy(),zn=vr(),xc=Ur().LMDB_ERRORS_ENUM,V$=ft(),Rs=P(),$$=z(),Y$=require("uuid"),_ue=require("lmdb"),{handleHDBError:K$,hdb_errors:W$}=se(),{OVERFLOW_MARKER:due,MAX_SEARCH_KEY_LENGTH:fue}=V$,Ry=ee();Ry.initSync();var L_=Ry.get(Rs.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Mm=Rs.TIME_STAMP_NAMES_ENUM.CREATED_TIME,ki=Rs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Q$(e,t,r,n,s=zn.getNextMonotonicTime()){Bm(e,t,r,n),Pm(e,t,r);let i=new q$,o=[],c=[];for(let u=0;u<n.length;u++){let _=n[u];Ay(_,!0,s);let l=z$(e,t,r,_),d=_[t];o.push(l),c.push(d)}return Um(o,c,n,i,s)}a(Q$,"insertRecords");function z$(e,t,r,n){let s=n[t];return e.dbis[t].ifNoExists(s,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||n.hasOwnProperty(o)===!1)continue;let c=n[o];if(typeof c=="function"){let l=c([[{}]]);Array.isArray(l)&&(c=l[0][Rs.FUNC_VAL],n[o]=c)}let u=zn.getIndexedValues(c),_=e.dbis[o];if(u){L_&&_.prefetch(u.map(l=>({key:l,value:s})),M_);for(let l=0,d=u.length;l<d;l++)_.put(u[l],s)}}L_&&e.dbis[t].prefetch([s],M_),e.dbis[t].put(s,n,n[ki])})}a(z$,"insertRecord");function J$(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(J$,"removeSkippedRecords");function Ay(e,t,r){let n=r>0;(n||!Number.isInteger(e[ki]))&&(e[ki]=r||(r=zn.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[Mm]))&&(e[Mm]=r||zn.getNextMonotonicTime()):delete e[Mm]}a(Ay,"setTimestamps");function Pm(e,t,r){r.indexOf(Rs.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Rs.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Rs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Rs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),G$.initializeDBIs(e,t,r)}a(Pm,"initializeTransaction");async function j$(e,t,r,n,s=zn.getNextMonotonicTime()){Bm(e,t,r,n),Pm(e,t,r);let i=new F$,o=[],c=[],u=[];for(let _=0;_<n.length;_++){let l=n[_],d=l[t],E;try{E=vm(e,t,l,d,i,!0,s)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(E),u.push(d)}return Um(c,u,n,i,s,o)}a(j$,"updateRecords");async function X$(e,t,r,n,s=zn.getNextMonotonicTime()){try{Bm(e,t,r,n)}catch(u){throw K$(u,u.message,W$.HTTP_STATUS_CODES.BAD_REQUEST)}Pm(e,t,r);let i=new k$,o=[],c=[];for(let u=0;u<n.length;u++){let _=n[u],l;$$.isEmpty(_[t])?(l=Y$.v4(),_[t]=l):l=_[t];let d=vm(e,t,_,l,i,!1,s);o.push(d),c.push(l)}return Um(o,c,n,i,s)}a(X$,"upsertRecords");async function Um(e,t,r,n,s,i=[]){let o=await Promise.all(e);for(let c=0,u=o.length;c<u;c++)o[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||zn.getNextMonotonicTime(),J$(r,i),n}a(Um,"finalizeWrite");function vm(e,t,r,n,s,i=!1,o){let c=e.dbis[t],u=c.getEntry(n),_=u?.value,l=_;if(!_){if(i)return!1;_={}}if(Ay(r,!l,o),Number.isInteger(r[ki])&&_[ki]>r[ki])return!1;l&&s.original_records.push(_);let d,E=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 T=_[h];if(typeof p=="function"){let y=p([[_]]);Array.isArray(y)&&(p=y[0][Rs.FUNC_VAL],r[h]=p)}if(p===T)continue;let R=zn.getIndexedValues(T);if(R){L_&&S.prefetch(R.map(y=>({key:y,value:n})),M_);for(let y=0,I=R.length;y<I;y++)S.remove(R[y],n)}if(R=zn.getIndexedValues(p),R){L_&&S.prefetch(R.map(y=>({key:y,value:n})),M_);for(let y=0,I=R.length;y<I;y++)S.put(R[y],n)}}let f=Object.assign({},_,r);c.put(n,f,f[ki])},"do_put");return u?d=c.ifVersion(n,u.version,E):d=c.ifNoExists(n,E),d.then(f=>f?!0:vm(e,t,r,n,s,i,o))}a(vm,"updateUpsertRecord");function Z$(e,t,r){if(zn.validateEnv(e),t===void 0)throw new Error(xc.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(xc.WRITE_ATTRIBUTES_REQUIRED):new Error(xc.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(Z$,"validateBasic");function Bm(e,t,r,n){if(Z$(e,t,r),!Array.isArray(n))throw n===void 0?new Error(xc.RECORDS_REQUIRED):new Error(xc.RECORDS_MUST_BE_ARRAY)}a(Bm,"validateWrite");function M_(){}a(M_,"noop");Oy.exports={insertRecords:Q$,updateRecords:j$,upsertRecords:X$}});var Vi=g((mue,e1)=>{e1.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"},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]},hdb_durable_session:{hash_attribute:"id",name:"hdb_durable_session",schema:"system",attributes:[{attribute:"id"}]},hdb_session_will:{hash_attribute:"id",name:"hdb_session_will",schema:"system",attributes:[{attribute:"id"}]}}});var jn=g((pue,Ny)=>{"use strict";var yy=z(),by=P(),Wo=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Jn=require("joi"),ii={schema_format:{pattern:Wo,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},t1=Jn.alternatives(Jn.string().min(1).max(ii.schema_length.maximum).pattern(Wo).messages({"string.pattern.base":"{:#label} "+ii.schema_format.message}),Jn.number(),Jn.array()).required(),r1=Jn.alternatives(Jn.string().min(1).max(ii.schema_length.maximum).pattern(Wo).messages({"string.pattern.base":"{:#label} "+ii.schema_format.message}),Jn.number()),n1=Jn.alternatives(Jn.string().min(1).max(ii.schema_length.maximum).pattern(Wo).messages({"string.pattern.base":"{:#label} "+ii.schema_format.message}),Jn.number()).required();function s1(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>ii.schema_length.maximum?`'${e}' maximum of 250 characters`:Wo.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(s1,"checkValidTable");function i1(e,t){return yy.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(i1,"validateSchemaExists");function o1(e,t){let r=t.state.ancestors[0].schema;return yy.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(o1,"validateTableExists");function a1(e,t){return e.toLowerCase()===by.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${by.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(a1,"validateSchemaName");Ny.exports={common_validators:ii,schema_regex:Wo,hdb_schema_table:t1,validateSchemaExists:i1,validateTableExists:o1,validateSchemaName:a1,checkValidTable:s1,hdb_database:r1,hdb_table:n1}});var Xe=g((Tue,Iy)=>{"use strict";var dr=require("validate.js");dr.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||dr.validators.type.checks[t](e)?null:` must be a '${t}' value`};dr.validators.type.checks={Object:function(e){return dr.isObject(e)&&!dr.isArray(e)},Array:dr.isArray,Integer:dr.isInteger,Number:dr.isNumber,String:dr.isString,Date:dr.isDate,Boolean:function(e){return typeof e=="boolean"}};dr.validators.hasValidFileExt=function(e,t){return dr.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};Iy.exports={validateObject:c1,validateObjectAsync:u1,validateBySchema:l1};function c1(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=dr(e,t,{format:"flat"});return r?new Error(r):null}a(c1,"validateObject");async function u1(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await dr.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(u1,"validateObjectAsync");function l1(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(l1,"validateBySchema")});var P_=g((Rue,wy)=>{var{common_validators:Xn}=jn(),qc=Xe(),Gc="is required",gt={database:{presence:!1,format:Xn.schema_format,length:Xn.schema_length},schema:{presence:!1,format:Xn.schema_format,length:Xn.schema_length},table:{presence:!0,format:Xn.schema_format,length:Xn.schema_length},attribute:{presence:!0,format:Xn.schema_format,length:Xn.schema_length},hash_attribute:{presence:!0,format:Xn.schema_format,length:Xn.schema_length}};function Fc(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(Fc,"makeAttributesStrings");function _1(e){return e=Fc(e),gt.table.presence=!1,gt.attribute.presence=!1,gt.hash_attribute.presence=!1,qc.validateObject(e,gt)}a(_1,"schema_object");function d1(e){return e=Fc(e),gt.table.presence={message:Gc},gt.attribute.presence=!1,gt.hash_attribute.presence=!1,qc.validateObject(e,gt)}a(d1,"table_object");function f1(e){return e=Fc(e),gt.table.presence={message:Gc},gt.attribute.presence=!1,qc.validateObject(e,gt)}a(f1,"create_table_object");function E1(e){return e=Fc(e),gt.table.presence={message:Gc},gt.attribute.presence={message:Gc},gt.hash_attribute.presence=!1,qc.validateObject(e,gt)}a(E1,"attribute_object");function h1(e){return e=Fc(e),gt.table.presence={message:Gc},gt.attribute.presence=!1,gt.hash_attribute.presence=!1,qc.validateObject(e,gt)}a(h1,"describe_table");function m1(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(m1,"validateTableResidence");wy.exports={schema_object:_1,create_table_object:f1,table_object:d1,attribute_object:E1,describe_table:h1,validateTableResidence:m1}});var Dy=g((Oue,Cy)=>{"use strict";var p1=require("uuid"),Hm=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||p1.v4(),this.schema_table=`${this.schema}.${this.table}`}};Cy.exports=Hm});var U_=g((yue,Ly)=>{"use strict";var S1=Dy(),xm=class extends S1{static{a(this,"LMDBCreateAttributeObject")}constructor(t,r,n,s,i=!0,o=!1){super(t,r,n,s),this.dup_sort=i,this.is_hash_attribute=o}};Ly.exports=xm});var Py=g((Iue,My)=>{"use strict";My.exports=g1;var T1="inserted";function g1(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===T1?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(g1,"returnObject")});var v_=g((Cue,xy)=>{"use strict";var R1=P(),Gm=Qe(),A1=Ko(),{getSystemSchemaPath:O1,getSchemaPath:b1}=je(),y1=Vi(),N1=P_(),I1=U_(),w1=Py(),{handleHDBError:Uy,hdb_errors:By}=se(),vy=z(),{HTTP_STATUS_CODES:C1}=By,qm=y1.hdb_attribute,Hy=[];for(let e=0;e<qm.attributes.length;e++)Hy.push(qm.attributes[e].attribute);var D1="inserted";xy.exports=L1;async function L1(e){let t=N1.attribute_object(e);if(t)throw Uy(new Error,t.message,By.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&vy.checkGlobalSchemaTable(e.schema,e.table);if(r)throw Uy(new Error,r,C1.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=vy.isEmpty(e.dup_sort)||e.dup_sort=="true";let n=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(n=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(n)&&n.length>0){for(let i of n)if(i.attribute===e.attribute)throw new Error(`attribute '${i.attribute}' already exists in ${e.schema}.${e.table}`)}let s=new I1(e.schema,e.table,e.attribute,e.id);try{let i=await Gm.openEnvironment(b1(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}`);Gm.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await Gm.openEnvironment(O1(),R1.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await A1.insertRecords(o,qm.hash_attribute,Hy,[s]);return w1(D1,c,{records:[s]},u)}catch(i){throw i}}a(L1,"lmdbCreateAttribute")});var km=g((Lue,qy)=>{var{hdb_table:M1,hdb_database:Gy}=jn(),P1=Xe(),Fm=require("joi"),U1={undefined:"undefined",null:"null"},v1=a((e,t)=>{let r=Object.keys(e),n=r.length,s;for(let i=0;i<n;i++){let o=r[i];(!o||o.length===0||U1[o]!==void 0)&&(s===void 0?s=`Invalid attribute name: '${o}'`:s+=`. Invalid attribute name: '${o}'`)}return s?t.message(s):e},"custom_records_val"),B1=Fm.object({database:Gy,schema:Gy,table:M1,records:Fm.array().items(Fm.object().custom(v1)).required()});qy.exports=function(e){return P1.validateBySchema(e,B1)}});var kc=g((Uue,ky)=>{"use strict";var As=z(),Fy=$(),Pue=km(),{getDatabases:H1}=(Ae(),ie(ke)),{ClientError:$i}=se();ky.exports=x1;function x1(e){if(As.isEmpty(e))throw new $i("invalid update parameters defined.");if(As.isEmptyOrZeroLength(e.schema))throw new $i("invalid schema specified.");if(As.isEmptyOrZeroLength(e.table))throw new $i("invalid table specified.");if(!Array.isArray(e.records))throw new $i("records must be an array");let t=H1()[e.schema]?.[e.table];if(As.isEmpty(t))throw new $i(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,n=new Set,s={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&As.isEmptyOrZeroLength(o[r]))throw Fy.error("a valid hash attribute must be provided with update record:",o),new $i("a valid hash attribute must be provided with update record, check log for more info");if(!As.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw Fy.error(`a valid hash value must be provided with ${e.operation} record:`,o),new $i(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!As.isEmpty(o[r])&&o[r]!==""&&n.has(As.autoCast(o[r]))&&(o.skip=!0),n.add(As.autoCast(o[r]));for(let c in o)s[c]=1}),s[r]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(s)}}a(x1,"insertUpdateValidate")});var Vc=g((Bue,Vy)=>{"use strict";var G1=P().OPERATIONS_ENUM,Vm=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=G1.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};Vy.exports=Vm});var $c=g((Gue,Yy)=>{"use strict";var xue=Vc(),B_=P(),$m=z(),$y=$(),q1=require("uuid"),{handleHDBError:H_,hdb_errors:F1}=se(),{HDB_ERROR_MSGS:x_,HTTP_STATUS_CODES:G_}=F1;Yy.exports=k1;function k1(e,t,r){for(let s=0;s<t.length;s++)V1(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];$1(i,r,e.operation)}}a(k1,"processRows");function V1(e){if(Buffer.byteLength(String(e))>B_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw H_(new Error,x_.ATTR_NAME_LENGTH_ERR(e),G_.BAD_REQUEST,void 0,void 0,!0);if($m.isEmptyOrZeroLength(e)||$m.isEmpty(e.trim()))throw H_(new Error,x_.ATTR_NAME_NULLISH_ERR,G_.BAD_REQUEST,void 0,void 0,!0)}a(V1,"validateAttribute");function $1(e,t,r){if(!e.hasOwnProperty(t)||$m.isEmptyOrZeroLength(e[t])){if(r===B_.OPERATIONS_ENUM.INSERT||r===B_.OPERATIONS_ENUM.UPSERT){e[t]=q1.v4();return}throw $y.error("Update transaction aborted due to record with no hash value:",e),H_(new Error,x_.RECORD_MISSING_HASH_ERR,G_.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>B_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw $y.error(e),H_(new Error,x_.HASH_VAL_LENGTH_ERR,G_.BAD_REQUEST,void 0,void 0,!0)}a($1,"validateHash")});var Wy=g((Fue,Ky)=>{"use strict";var Ym=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};Ky.exports=Ym});var Jy=g((Vue,zy)=>{"use strict";var Km=Qe(),Y1=$(),Qy=Ur().LMDB_ERRORS_ENUM;zy.exports=K1;async function K1(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 Km.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==Qy.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await Km.closeEnvironment(global.lmdb_map[n]),await Km.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==Qy.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){Y1.error(t)}}a(K1,"cleanLMDBMap")});var Os=g((Yue,eN)=>{"use strict";var Yc=require("crypto"),W1=ee(),{CONFIG_PARAMS:Q1}=P(),Xy="aes-256-cbc",z1=32,J1=16,Wm=64,Zy=32,j1=Wm+Zy,jy=new Map;eN.exports={encrypt:X1,decrypt:Z1,createNatsTableStreamName:eY};function X1(e){let t=Yc.randomBytes(z1),r=Yc.randomBytes(J1),n=Yc.createCipheriv(Xy,Buffer.from(t),r),s=n.update(e);s=Buffer.concat([s,n.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=s.toString("hex");return i+o+c}a(X1,"encrypt");function Z1(e){let t=e.substr(0,Wm),r=e.substr(Wm,Zy),n=e.substr(j1,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Yc.createDecipheriv(Xy,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(Z1,"decrypt");function eY(e,t){let r=W1.get(Q1.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=jy.get(r);return n||(n=Yc.createHash("md5").update(r).digest("hex"),jy.set(r,n)),n}a(eY,"createNatsTableStreamName")});var bs=g((Que,rN)=>{"use strict";var Wue=Gr(),Kc=$(),tN=P_(),tY=Os(),q_=z(),{handleHDBError:F_,hdb_errors:rY}=se(),{HDB_ERROR_MSGS:k_,HTTP_STATUS_CODES:Qm}=rY,nY=ee();nY.initSync();var{getDatabases:zm}=(Ae(),ie(ke)),sY=require("fs-extra");rN.exports={describeAll:iY,describeTable:V_,describeSchema:oY};async function iY(e){try{let t=q_.isEmptyOrZeroLength(e),r,n;t||(r=e.hdb_user.role.permission,n=r.super_user||r.cluster_user);let s=zm(),i={},o={},c=[],u=e?.exact_count;for(let l in s){i[l]=!0,!t&&!n&&(o[l]=e.hdb_user.role.permission[l].describe);let d=s[l];for(let E in d)try{let f;if(t||n)f=await V_({schema:l,table:E,exact_count:u});else if(r&&r[l].describe&&r[l].tables[E].describe){let h=r[l].tables[E].attribute_permissions;f=await V_({schema:l,table:E,exact_count:u},h)}f&&c.push(f)}catch(f){Kc.error(f)}}let _={};for(let l in c)t||n?(_[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||n?_[l]={}:o[l]&&(_[l]={});return _}catch(t){return Kc.error("Got an error in describeAll"),Kc.error(t),F_(new Error,k_.DESCRIBE_ALL_ERR)}}a(iY,"describeAll");async function V_(e,t){q_.transformReq(e);let{schema:r,table:n}=e;r=r?.toString(),n=n?.toString();let s=t;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(s=e.hdb_user.role.permission[r].tables[n].attribute_permissions);let i=tN.describe_table(e);if(i)throw i;let c=zm()[r];if(!c)throw F_(new Error,k_.SCHEMA_NOT_FOUND(e.schema),Qm.NOT_FOUND);let u=c[n];if(!u)throw F_(new Error,k_.TABLE_NOT_FOUND(e.schema,e.table),Qm.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(h=>({type:h.type,name:h.name})):void 0}))}a(_,"pushAtt");let l=[];if(s){let f={};s.forEach(h=>{h.describe&&(f[h.attribute_name]=!0)}),u.attributes.forEach(h=>{f[h.name]&&_(h)})}else u.attributes?.forEach(f=>_(f));let d;try{d=(await sY.stat(u.primaryStore.env.path)).size}catch(f){Kc.warn("unable to get database size",f)}let E={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,db_size:d};E.clustering_stream_name=tY.createNatsTableStreamName(E.schema,E.name);try{let f=u.getRecordCount({exactCount:e.exact_count==="true"});E.record_count=f.recordCount,E.estimated_record_range=f.estimatedRange;let h=u.auditStore;if(h)for(let p of h.getKeys({reverse:!0,limit:1}))E.last_updated_record=p[0];if(!E.last_updated_record&&u.indices.__updatedtime__)for(let p of u.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))E.last_updated_record=p}catch(f){Kc.warn(`unable to stat table dbi due to ${f}`)}return E}a(V_,"descTable");async function oY(e){q_.transformReq(e);let t=tN.schema_object(e);if(t)throw t;let r;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(r=e.hdb_user.role.permission[e.schema]);let n=e.schema.toString(),i=zm()[n];if(!i)throw F_(new Error,k_.SCHEMA_NOT_FOUND(e.schema),Qm.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),q_.isEmpty(u)||u.describe){let _=await V_({schema:e.schema,table:c,exact_count:e.exact_count},u?u.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(oY,"describeSchema")});var ys=g((Xue,aN)=>{var aY=Vi(),{callbackify:sN,promisify:cY}=require("util"),{getDatabases:iN}=(Ae(),ie(ke));aN.exports={setSchemaDataToGlobal:nN,getTableSchema:uY,getSystemSchema:lY,setSchemaDataToGlobalAsync:cY(nN)};var oN=bs(),Jue=sN(oN.describeAll),jue=sN(oN.describeTable);function nN(e){global.hdb_schema=iN(),e&&e()}a(nN,"setSchemaDataToGlobal");function uY(e,t,r){let n=iN()[e];if(!n)return r(`schema ${e} does not exist`);let s=n[t];return s?r(null,{schema:e,name:t,hash_attribute:s.primaryKey}):r(`table ${e}.${t} does not exist`)}a(uY,"getTableSchema");function lY(){return aY}a(lY,"getSystemSchema")});var qr=g((ele,_N)=>{"use strict";var Y_=km(),Yt=z(),_Y=require("util"),K_=Dn(),dY=ys(),cN=$(),{handleHDBError:Yi,hdb_errors:fY}=se(),{HTTP_STATUS_CODES:Ki}=fY,EY=_Y.promisify(dY.getTableSchema),hY="updated",uN="inserted",lN="upserted";_N.exports={insert:pY,update:SY,upsert:TY,validation:mY,flush:gY};async function mY(e){if(Yt.isEmpty(e))throw new Error("invalid update parameters defined.");if(Yt.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Yt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await EY(e.schema,e.table),r=Y_(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let n=t.hash_attribute,s=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&Yt.isEmptyOrZeroLength(c[n]))throw cN.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(!Yt.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw cN.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!Yt.isEmpty(c[n])&&c[n]!==""&&s.has(Yt.autoCast(c[n]))&&(c.skip=!0),s.add(Yt.autoCast(c[n]));for(let u in c)i[u]=1}),i[n]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(i)}}a(mY,"validation");async function pY(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Y_(e);if(t)throw Yi(new Error,t.message,Ki.BAD_REQUEST);Yt.transformReq(e);let r=Yt.checkSchemaTableExist(e.schema,e.table);if(r)throw Yi(new Error,r,Ki.BAD_REQUEST);let n=await K_.createRecords(e);return $_(uN,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(pY,"insertData");async function SY(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Y_(e);if(t)throw Yi(new Error,t.message,Ki.BAD_REQUEST);Yt.transformReq(e);let r=Yt.checkSchemaTableExist(e.schema,e.table);if(r)throw Yi(new Error,r,Ki.BAD_REQUEST);let n=await K_.updateRecords(e);return Yt.isEmpty(n.existing_rows)?$_(hY,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):$_(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(SY,"updateData");async function TY(e){if(e.operation!=="upsert")throw Yi(new Error,"invalid operation, must be upsert",Ki.INTERNAL_SERVER_ERROR);let t=Y_(e);if(t)throw Yi(new Error,t.message,Ki.BAD_REQUEST);Yt.transformReq(e);let r=Yt.checkSchemaTableExist(e.schema,e.table);if(r)throw Yi(new Error,r,Ki.BAD_REQUEST);let n=await K_.upsertRecords(e);return $_(lN,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(TY,"upsertData");function $_(e,t,r,n,s,i){let o={message:`${e} ${t.length} of ${t.length+n.length} records`,new_attributes:s,txn_time:i};return e===uN?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===lN?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a($_,"returnObject");function gY(e){return Yt.transformReq(e),K_.flush(e.schema,e.table)}a(gY,"flush")});var jm=g((rle,EN)=>{var RY=Xe(),Jm=require("joi"),{hdb_table:AY,hdb_database:dN}=jn(),fN={schema:dN,database:dN,table:AY},OY={date:Jm.date().iso().required()},bY={timestamp:Jm.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};EN.exports=function(e,t){let r=t==="timestamp"?{...fN,...bY}:{...fN,...OY},n=Jm.object(r);return RY.validateBySchema(e,n)}});var pN=g((nle,mN)=>{var yY=Xe(),Xm=require("joi"),{hdb_table:NY,hdb_database:hN}=jn(),IY=Xm.object({schema:hN,database:hN,table:NY,hash_values:Xm.array().required(),ids:Xm.array()});mN.exports=function(e){return yY.validateBySchema(e,IY)}});var TN=g((sle,SN)=>{"use strict";var Zm=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i){this.operation=t,this.schema=r,this.table=n,this.hash_attribute=s,this.records=i}},ep=class{static{a(this,"NoSQLSeachObject")}constructor(t,r,n,s,i,o){this.schema=t,this.table=r,this.search_attribute=n,this.hash_attribute=s,this.get_attributes=i,this.search_value=o}},tp=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};SN.exports={InsertObject:Zm,NoSQLSeachObject:ep,DeleteResponseObject:tp}});var ci=g((ole,bN)=>{"use strict";var RN=jm(),wY=pN(),Wi=z(),gN=require("moment"),AN=$(),{promisify:CY,callbackify:DY}=require("util"),Qi=P(),LY=ys(),rp=CY(LY.getTableSchema),np=Dn(),{DeleteResponseObject:MY}=TN(),{handleHDBError:oi,hdb_errors:PY}=se(),{HDB_ERROR_MSGS:W_,HTTP_STATUS_CODES:ai}=PY,UY="records successfully deleted",vY=DY(ON);bN.exports={delete:vY,deleteRecord:ON,deleteFilesBefore:BY,deleteAuditLogsBefore:HY};async function BY(e){let t=RN(e,"date");if(t)throw oi(t,t.message,ai.BAD_REQUEST,void 0,void 0,!0);if(Wi.transformReq(e),!gN(e.date,gN.ISO_8601).isValid())throw oi(new Error,W_.INVALID_DATE,ai.BAD_REQUEST,Qi.LOG_LEVELS.ERROR,W_.INVALID_DATE,!0);let n=Wi.checkSchemaTableExist(e.schema,e.table);if(n)throw oi(new Error,n,ai.NOT_FOUND,Qi.LOG_LEVELS.ERROR,n,!0);let s=await np.deleteRecordsBefore(e);if(await rp(e.schema,e.table),AN.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(BY,"deleteFilesBefore");async function HY(e){let t=RN(e,"timestamp");if(t)throw oi(t,t.message,ai.BAD_REQUEST,void 0,void 0,!0);if(Wi.transformReq(e),isNaN(e.timestamp))throw oi(new Error,W_.INVALID_VALUE("Timestamp"),ai.BAD_REQUEST,Qi.LOG_LEVELS.ERROR,W_.INVALID_VALUE("Timestamp"),!0);let r=Wi.checkSchemaTableExist(e.schema,e.table);if(r)throw oi(new Error,r,ai.NOT_FOUND,Qi.LOG_LEVELS.ERROR,r,!0);let n=await np.deleteAuditLogsBefore(e);return await rp(e.schema,e.table),AN.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(HY,"deleteAuditLogsBefore");async function ON(e){e.ids&&(e.hash_values=e.ids);let t=wY(e);if(t)throw oi(t,t.message,ai.BAD_REQUEST,void 0,void 0,!0);Wi.transformReq(e);let r=Wi.checkSchemaTableExist(e.schema,e.table);if(r)throw oi(new Error,r,ai.NOT_FOUND,Qi.LOG_LEVELS.ERROR,r,!0);try{await rp(e.schema,e.table);let n=await np.deleteRecords(e);return Wi.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${UY}`),n}catch(n){if(n.message===Qi.SEARCH_NOT_FOUND_MESSAGE){let s=new MY;return s.message=Qi.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(ON,"deleteRecord")});var Q_=g((cle,IN)=>{var xY=require("crypto"),yN=9;function GY(e){let t=FY(yN),r=NN(e+t);return t+r}a(GY,"createHash");function qY(e,t){let r=e?.substr(0,yN),n=r+NN(t+r);return e===n}a(qY,"validateHash");function FY(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,n="";for(let s=0;s<e;s++){let i=Math.floor(Math.random()*r);n+=t[i]}return n}a(FY,"generateSalt");function NN(e){return xY.createHash("md5").update(e).digest("hex")}a(NN,"md5");IN.exports={hash:GY,validate:qY}});var CN=g((lle,wN)=>{var sp=Xe(),Zt={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 kY(e){return Zt.password.presence=!0,Zt.username.presence=!0,Zt.role.presence=!0,Zt.active.presence=!0,sp.validateObject(e,Zt)}a(kY,"addUserValidation");function VY(e){return Zt.password.presence=!1,Zt.username.presence=!0,Zt.role.presence=!1,Zt.active.presence=!1,sp.validateObject(e,Zt)}a(VY,"alterUserValidation");function $Y(e){return Zt.password.presence=!1,Zt.username.presence=!0,Zt.role.presence=!1,Zt.active.presence=!1,sp.validateObject(e,Zt)}a($Y,"dropUserValidation");wN.exports={addUserValidation:kY,alterUserValidation:VY,dropUserValidation:$Y}});var Ve=g((fle,LN)=>{"use strict";var{platform:dle}=require("os"),YY="nats-server.zip",ip="nats-server",KY=process.platform==="win32"?`${ip}.exe`:ip,WY=/^[^\s.,*>]+$/,DN="__request__",QY=a(e=>`${e}.${DN}`,"REQUEST_SUBJECT"),zY={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},JY={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},jY={HUB:"hub.pid",LEAF:"leaf.pid"},XY={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},ZY={SUCCESS:"success",ERROR:"error"},eK={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},tK={TXN:"txn",MSGID:"msgid"},Qo={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},rK={[Qo.ERR]:1,[Qo.WRN]:2,[Qo.INF]:3,[Qo.DBG]:4,[Qo.TRC]:5},nK={debug:"-D",trace:"-DVV"};LN.exports={NATS_SERVER_ZIP:YY,NATS_SERVER_NAME:ip,NATS_BINARY_NAME:KY,PID_FILES:jY,NATS_CONFIG_FILES:JY,SERVER_SUFFIX:XY,NATS_TERM_CONSTRAINTS_RX:WY,REQUEST_SUFFIX:DN,UPDATE_REMOTE_RESPONSE_STATUSES:ZY,CLUSTER_STATUS_STATUSES:eK,REQUEST_SUBJECT:QY,SUBJECT_PREFIXES:tK,MSG_HEADERS:zY,LOG_LEVELS:Qo,LOG_LEVEL_FLAGS:nK,LOG_LEVEL_HIERARCHY:rK}});var PN=g((hle,MN)=>{"use strict";var sK={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
|
-
`)},sK="certificate.pem",iK="privateKey.pem",oK="ca.pem";MN.exports={CERTIFICATE_VALUES:nK,CERTIFICATE_PEM_NAME:sK,PRIVATEKEY_PEM_NAME:iK,CA_PEM_NAME:oK}});var op=g((ple,GN)=>{"use strict";var HN=require("fs-extra"),oe=require("joi"),aK=require("os"),{boolean:be,string:er,number:tt,array:z_}=oe.types(),{totalmem:UN}=require("os"),zi=require("path"),cK=$(),J_=z(),mle=PN(),vN=P(),uK=Xe(),BN="log",lK="components",_K="Invalid logging.rotation.maxSize unit. Available units are G, M or K",dK="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",fK="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",EK="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",hK="rootPath config parameter is undefined",mK="clustering.enabled config parameter is undefined",Ji=tt.min(0).required(),j_=z_.items({host:er.required(),port:Ji}).empty(null),Zn,xN=!1;GN.exports={configValidator:pK,routesValidator:OK,route_constraints:j_};function pK(e,t=!1){if(xN=t,Zn=e.rootPath,J_.isEmpty(Zn))throw hK;let r=be.required(),n=tt.min(0).max(1e3).empty(null).default(AK),s=er.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Wc),i=er.optional().empty(null),o=er.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=oe.string().empty(null).default(Wc),u=oe.custom(TK).empty(null).default(Wc),_=e.clustering?.enabled;if(J_.isEmpty(_))throw mK;let l=oe.object({certificate:i,certificateAuthority:i,privateKey:i}),d;return _===!0?d=oe.object({enabled:r,hubServer:oe.object({cluster:oe.object({name:oe.required().empty(null),network:oe.object({port:Ji,routes:j_}).required()}).required(),leafNodes:oe.object({network:oe.object({port:Ji}).required()}).required(),network:oe.object({port:Ji}).required()}).required(),leafServer:oe.object({network:oe.object({port:Ji,routes:j_}).required(),streams:oe.object({maxAge:tt.min(120).allow(null).optional(),maxBytes:tt.min(1).allow(null).optional(),maxMsgs:tt.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:oe.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:be.optional(),databaseLevel:be.optional(),tls:oe.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:be.required(),verify:be.optional()}),user:er.optional().empty(null)}).required():d=oe.object({enabled:r,tls:oe.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:be.required()})}).required(),oe.object({authentication:oe.object({authorizeLocal:be,cacheTTL:tt.required(),enableSessions:be}),analytics:oe.object({aggregatePeriod:tt}),componentsRoot:s.optional(),clustering:d,localStudio:oe.object({enabled:r}).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:er.custom(RK).optional().empty(null),maxSize:er.custom(gK).optional().empty(null),path:er.optional().empty(null).default(Wc)}).required(),root:s,stdStreams:be.required(),auditLog:be.required()}).required(),operationsApi:oe.object({network:oe.object({cors:be.optional(),corsAccessList:z_.optional(),headersTimeout:tt.min(1).optional(),keepAliveTimeout:tt.min(1).optional(),port:tt.optional().empty(null),domainSocket:oe.optional().empty("hdb/operations-server").default(Wc),securePort:tt.optional().empty(null),timeout:tt.min(1).optional()}).optional(),tls:oe.alternatives([oe.array().items(l),l])}).required(),rootPath:er.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:oe.object({network:oe.object({port:Ji,securePort:Ji,mtls:oe.alternatives([be.optional(),oe.object({user:er.optional(),certificateAuthority:i,required:be.optional()})])}).required(),webSocket:be.optional(),requireAuthentication:be.optional()}),http:oe.object({compressionThreshold:tt.optional(),cors:be.optional(),corsAccessList:z_.optional(),headersTimeout:tt.min(1).optional(),port:tt.min(0).optional().empty(null),securePort:tt.min(0).optional().empty(null),maxHeaderSize:tt.optional(),mtls:oe.alternatives([be.optional(),oe.object({user:er.optional(),certificateAuthority:i,required:be.optional()})]),threadRange:oe.alternatives([z_.optional(),er.optional()])}).required(),threads:oe.alternatives(n.optional(),oe.object({count:n.optional(),debug:oe.alternatives(be.optional(),oe.object({startingPort:tt.min(1).optional(),host:er.optional(),waitForDebugger:be.optional()})),maxHeapMemory:tt.min(0).optional()})),storage:oe.object({writeAsync:be.required(),overlappingSync:be.optional(),caching:be.optional(),compression:oe.alternatives([be.optional(),oe.object({dictionary:er.optional(),threshold:tt.optional()})]),compactOnStart:be.optional(),compactOnStartKeepBackup:be.optional(),noReadAhead:be.optional(),path:u,prefetchWrites:be.optional(),maxFreeSpaceToLoad:tt.optional(),maxFreeSpaceToRetain:tt.optional()}).required(),ignoreScripts:be.optional(),tls:oe.alternatives([oe.array().items(l),l])}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(pK,"configValidator");function SK(e){return xN||HN.existsSync(e)?null:`Specified path ${e} does not exist.`}a(SK,"doesPathExist");function TK(e,t){oe.assert(e,er.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=SK(e);if(r)return t.message(r)}a(TK,"validatePath");function gK(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(_K);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(fK):e}a(gK,"validateRotationMaxSize");function RK(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(dK);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(EK):e}a(RK,"validateRotationInterval");function AK(e,t){let r=t.state.path.join("."),n=aK.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||UN();return i=Math.round(Math.min(i,UN())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),cK.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(AK,"setDefaultThreads");function Wc(e,t){let r=t.state.path.join(".");if(!J_.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(J_.isEmpty(Zn))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return zi.join(Zn,lK);case"logging.root":return zi.join(Zn,BN);case"clustering.leafServer.streams.path":return zi.join(Zn,"clustering","leaf");case"storage.path":let n=zi.join(Zn,vN.LEGACY_DATABASES_DIR_NAME);return HN.existsSync(n)?n:zi.join(Zn,vN.DATABASES_DIR_NAME);case"logging.rotation.path":return zi.join(Zn,BN);case"operationsApi.network.domainSocket":return r==null?null:zi.join(Zn,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Wc,"setDefaultRoot");function OK(e){let t=oe.object({routes:j_});return uK.validateBySchema({routes:e},t)}a(OK,"routesValidator")});var Er=g((gle,QN)=>{"use strict";var kr=P(),Bt=z(),It=$(),{configValidator:bK,routesValidator:qN}=op(),fr=require("fs-extra"),yK=require("yaml"),Ln=require("path"),NK=require("is-number"),kN=require("properties-reader"),IK=require("lodash"),{handleHDBError:wK}=se(),{HTTP_STATUS_CODES:CK,HDB_ERROR_MSGS:X_}=Ur(),Tle=require("minimist"),{server:DK}=(lr(),ie(Gi)),{DATABASES_PARAM_CONFIG:Qc,CONFIG_PARAMS:Fr,CONFIG_PARAM_MAP:Mn}=kr,LK="Unable to get config value because config is uninitialized",MK="Config successfully initialized",PK="Error backing up config file",UK="Empty parameter sent to getConfigValue",VN=Ln.join(kr.PACKAGE_ROOT,"config","yaml",kr.HDB_DEFAULT_CONFIG_FILE),vK="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",FN={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"},Z_,wt,ed;QN.exports={createConfigFile:BK,getDefaultConfig:HK,getConfigValue:YN,initConfig:cp,flattenConfig:zo,updateConfigValue:KN,updateConfigObject:GK,getConfiguration:kK,setConfiguration:VK,readConfigFile:lp,getClusteringRoutes:$K,initOldConfig:WN,getConfigFromFile:YK,getConfigFilePath:ji,addConfig:KK,deleteConfigFromFile:WK,getConfigObj:QK};function BK(e,t=!1){let r=ui(VN);Z_=zo(r.toJSON());let n;for(let c in e){let u=Mn[c.toLowerCase()];if(u===Fr.DATABASES){Array.isArray(e[c])?n=e[c]:n=Object.keys(e[c]).map(_=>({[_]:e[c][_]}));continue}if(!u&&(c.endsWith("_package")||c.endsWith("_port"))&&(u=c),u!==void 0){let _=u.split("_"),l=ap(u,e[c]);u==="rootPath"&&l?.endsWith("/")&&(l=l.slice(0,-1));try{r.setIn([..._],l)}catch(d){It.error(d)}}}n&&$N(r,n),up(r,t);let s=r.toJSON();wt=zo(s);let i=r.getIn(["rootPath"]),o=Ln.join(i,kr.HDB_CONFIG_FILE);fr.createFileSync(o),fr.writeFileSync(o,String(r)),It.trace(`Config file written to ${o}`)}a(BK,"createConfigFile");function $N(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!Bt.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(Qc.TABLES))for(let i in n[s][Qc.TABLES])for(let o in n[s][Qc.TABLES][i]){let c=n[s][Qc.TABLES][i][o],u=[Fr.DATABASES,s,Qc.TABLES,i,o];e.hasIn(u)?e.setIn(u,c):e.addIn(u,c)}else for(let i in n[s]){let o=n[s][i],c=[Fr.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){It.error("Error parsing schemas CLI/env config arguments",n)}}a($N,"setSchemasConfig");function HK(e){if(Z_===void 0){let r=ui(VN);Z_=zo(r.toJSON())}let t=Mn[e.toLowerCase()];if(t!==void 0)return Z_[t.toLowerCase()]}a(HK,"getDefaultConfig");function YN(e){if(e==null){It.error(UK);return}if(wt===void 0){It.trace(LK);return}let t=Mn[e.toLowerCase()];if(t!==void 0)return wt[t.toLowerCase()]}a(YN,"getConfigValue");function ji(e=Bt.getPropsFilePath()){let t=Bt.getEnvCliRootPath();return t?Ln.join(t,kr.HDB_CONFIG_FILE):kN(e).get(kr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(ji,"getConfigFilePath");function cp(e=!1){if(wt===void 0||e){let t;if(!Bt.noBootFile()){t=Bt.getPropsFilePath();try{fr.accessSync(t,fr.constants.F_OK|fr.constants.R_OK)}catch(i){throw It.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=ji(t),n;if(r.includes("config/settings.js"))try{WN(r);return}catch(i){if(i.code!==kr.NODE_ERROR_CODES.ENOENT)throw i}try{n=ui(r)}catch(i){if(i.code===kr.NODE_ERROR_CODES.ENOENT){It.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 It.error(i),new Error(`Error reading HarperDB config file at ${r}`)}xK(n,r),up(n);let s=n.toJSON();if(DK.config=s,wt=zo(s),wt.logging_rotation_rotate)for(let i in FN)wt[i]&&It.error(`Config ${FN[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);It.trace(MK)}}a(cp,"initConfig");function xK(e,t){let r=e.getIn(["rootPath"]),n=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Ln.join(r,"database")),n=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],Ln.join(r,"clustering","leaf")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Ln.join(r,"log")),n=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),n=!0),e.hasIn(["authentication"])||(e.addIn(["authentication"],{cacheTTL:3e4,enableSessions:!0,operationTokenTimeout:e.getIn(["operationsApi","authentication","operationTokenTimeout"])??"1d",refreshTokenTimeout:e.getIn(["operationsApi","authentication","refreshTokenTimeout"])??"30d"}),n=!0),e.hasIn(["analytics"])||(e.addIn(["analytics"],{aggregatePeriod:60}),n=!0),n&&(It.trace("Updating config file with missing config params"),fr.writeFileSync(t,String(e)))}a(xK,"checkForUpdatedConfig");function up(e,t=!1){let r=e.toJSON();r.componentsRoot=r.componentsRoot??r?.customFunctions?.root,r?.http?.threads&&(r.threads=r?.http?.threads);let n=bK(r,t);if(n.error)throw X_.CONFIG_VALIDATION(n.error.message);typeof n.value.threads=="object"?e.setIn(["threads","count"],n.value.threads.count):e.setIn(["threads"],n.value.threads),e.setIn(["componentsRoot"],n.value.componentsRoot),e.setIn(["logging","root"],n.value.logging.root),e.setIn(["storage","path"],n.value.storage.path),e.setIn(["logging","rotation","path"],n.value.logging.rotation.path),e.setIn(["clustering","leafServer","streams","path"],n.value.clustering.leafServer.streams?.path),e.setIn(["operationsApi","network","domainSocket"],n.value?.operationsApi?.network?.domainSocket)}a(up,"validateConfig");function GK(e,t){wt===void 0&&(wt={});let r=Mn[e.toLowerCase()];if(r===void 0){It.trace(`Unable to update config object because config param '${e}' does not exist`);return}wt[r.toLowerCase()]=t}a(GK,"updateConfigObject");function KN(e,t,r=void 0,n=!1,s=!1,i=!1){wt===void 0&&cp();let o=YN(Mn.hdb_root),c=Ln.join(o,kr.HDB_CONFIG_FILE),u=ui(c),_;if(r===void 0&&e.toLowerCase()===Fr.DATABASES)_=t;else if(r===void 0){let E;if(i)E=e;else if(E=Mn[e.toLowerCase()],E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let f=E.split("_"),h=ap(E,t);u.setIn([...f],h)}else for(let E in r){let f=Mn[E.toLowerCase()];if(f===Fr.HTTP_SECUREPORT&&r[E]===wt[Fr.HTTP_PORT]?.toString()&&u.setIn(["http","port"],null),f===Fr.OPERATIONSAPI_NETWORK_SECUREPORT&&r[E]===wt[Fr.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&u.setIn(["operationsApi","network","port"],null),f===Fr.DATABASES){_=r[E];continue}if(f?.startsWith("threads_")){let h=u.getIn(["threads"]);h>=0&&(u.deleteIn(["threads"]),u.setIn(["threads","count"],h))}if(!f&&(E.endsWith("_package")||E.endsWith("_port"))&&(f=E),f!==void 0){let h=f.split("_"),p=kr.LEGACY_CONFIG_PARAMS[E.toUpperCase()];p&&p.startsWith("customFunctions")&&u.hasIn(p.split("_"))&&(f=p,h=p.split("_"));let S=ap(f,r[E]);f==="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(T){It.error(T)}}}_&&$N(u,_),up(u);let l=u.getIn(["rootPath"]),d=Ln.join(l,kr.HDB_CONFIG_FILE);n===!0&&qK(c,l),fr.writeFileSync(d,String(u)),s&&(wt=zo(u.toJSON())),It.trace(`Config parameter: ${e} updated with value: ${t}`)}a(KN,"updateConfigValue");function qK(e,t){try{let r=Ln.join(t,"backup",`${kr.HDB_CONFIG_FILE}.bak`);fr.copySync(e,r),It.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){It.error(PK),It.error(r)}}a(qK,"backupConfigFile");var FK=["databases"];function zo(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)),ed=e,r(e);function r(n){let s={};for(let i in n)if(n.hasOwnProperty(i)){if(typeof n[i]=="object"&&n[i]!==null&&!Array.isArray(n[i])&&!FK.includes(i)){let o=r(n[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let u=i+"_"+c;!Fr[u.toUpperCase()]&&Mn[u]&&(s[Mn[u].toLowerCase()]=o[c]),s[u]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(zo,"flattenConfig");function ap(e,t){if(e===Fr.CLUSTERING_NODENAME||e===Fr.CLUSTERING_USER){if(t==null)return t;if(!isNaN(t))return t.toString();if(typeof t=="string"&&t.toLowerCase()==="true"||typeof t=="string"&&t.toLowerCase()==="false")return t}else{if(NK(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(ap,"castConfigValue");function kK(){let e=Bt.getPropsFilePath(),t=ji(e);return ui(t).toJSON()}a(kK,"getConfiguration");async function VK(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return KN(void 0,void 0,s,!0),vK}catch(i){throw typeof i=="string"||i instanceof String?wK(i,i,CK.BAD_REQUEST,void 0,void 0,!0):i}}a(VK,"setConfiguration");function lp(){let e=Bt.getPropsFilePath();try{fr.accessSync(e,fr.constants.F_OK|fr.constants.R_OK)}catch(n){if(!Bt.noBootFile())throw It.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=ji(e);return ui(t).toJSON()}a(lp,"readConfigFile");function ui(e){return yK.parseDocument(fr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(ui,"parseYamlDoc");function $K(){let e=lp(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Bt.isEmptyOrZeroLength(t)?[]:t;let r=qN(t);if(r)throw X_.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Bt.isEmptyOrZeroLength(n)?[]:n;let s=qN(n);if(s)throw X_.CONFIG_VALIDATION(s.message);if(!Bt.isEmptyOrZeroLength(n)&&!Bt.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.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 X_.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a($K,"getClusteringRoutes");function WN(e){let t=kN(e);wt={};for(let r in Mn){let n=t.get(r.toUpperCase());if(Bt.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=Mn[r].toLowerCase();s===Fr.LOGGING_ROOT?wt[s]=Ln.dirname(n):wt[s]=n}return wt}a(WN,"initOldConfig");function YK(e){let t=lp();return IK.get(t,e.replaceAll("_","."))}a(YK,"getConfigFromFile");async function KK(e,t){let r=ui(ji());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await fr.writeFile(ji(),String(r))}a(KK,"addConfig");function WK(e){let t=ji(Bt.getPropsFilePath()),r=ui(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=Ln.join(n,kr.HDB_CONFIG_FILE);fr.writeFileSync(s,String(r))}a(WK,"deleteConfigFromFile");function QK(){return ed||(cp(),ed)}a(QK,"getConfigObj")});var JN=g((Ale,zN)=>{"use strict";var td=P(),rd=class{static{a(this,"BaseLicense")}constructor(t=0,r=td.RAM_ALLOCATION_ENUM.DEFAULT,n=td.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},_p=class extends rd{static{a(this,"ExtendedLicense")}constructor(t=0,r=td.RAM_ALLOCATION_ENUM.DEFAULT,n=td.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};zN.exports={BaseLicense:rd,ExtendedLicense:_p}});var Xi=g((ble,rI)=>{"use strict";var jo=require("fs-extra"),XN=Q_(),ZN=require("crypto"),zK=require("moment"),JK=require("uuid").v4,tr=$(),fp=require("path"),jK=z(),li=P(),{totalmem:jN}=require("os"),XK=JN().ExtendedLicense,Jo="invalid license key format",ZK="061183",eW="mofi25",tW="aes-256-cbc",rW=16,nW=32,eI=ee();eI.initSync();var dp;rI.exports={validateLicense:tI,generateFingerPrint:iW,licenseSearch:mp,getLicense:cW,checkMemoryLimit:uW};function Ep(){return fp.join(eI.getHdbBasePath(),li.LICENSE_KEY_DIR_NAME,li.LICENSE_FILE_NAME)}a(Ep,"getLicenseDirPath");function sW(){let e=Ep();return fp.join(e,li.LICENSE_FILE_NAME)}a(sW,"getLicenseFilePath");function hp(){let e=Ep();return fp.join(e,li.REG_KEY_FILE_NAME)}a(hp,"getFingerPrintFilePath");async function iW(){let e=hp();try{return await jo.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await oW();throw tr.error(`Error writing fingerprint file to ${e}`),tr.error(t),new Error("There was an error generating the fingerprint")}}a(iW,"generateFingerPrint");async function oW(){let e=JK(),t=XN.hash(e),r=hp();try{await jo.mkdirp(Ep()),await jo.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw tr.error(`Error writing fingerprint file to ${r}`),tr.error(n),new Error("There was an error generating the fingerprint")}return t}a(oW,"writeFingerprint");function tI(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:li.RAM_ALLOCATION_ENUM.DEFAULT,version:li.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return tr.error("empty license key passed to validate."),r;let n=hp(),s=!1;try{s=jo.statSync(n)}catch(i){tr.error(i)}if(s){let i;try{i=jo.readFileSync(n,"utf8")}catch{tr.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(eW),c=o[1];c=Buffer.concat([Buffer.from(c)],rW);let u=Buffer.concat([Buffer.from(i)],nW),_=ZN.createDecipheriv(tW,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 f=aW(o[0],i);if(f)l=f;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Jo),tr.error(Jo),new Error(Jo)}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(Jo),tr.error(Jo),new Error(Jo)}else r.exp_date=l;r.exp_date<zK().valueOf()&&(r.valid_date=!1),XN.validate(o[1],`${ZK}${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||tr.error("Invalid licence"),r}a(tI,"validateLicense");function aW(e,t){try{let r=ZN.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{tr.warn("Check old license failed")}}a(aW,"checkOldLicense");function mp(){let e=new XK,t=[];try{t=jo.readFileSync(sW(),"utf-8").split(li.NEW_LINE)}catch(r){r.code==="ENOENT"?tr.info("no license file found"):tr.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(jK.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=tI(s.license_key,s.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.ram_allocation=i.ram_allocation,e.enterprise=!0)}catch(s){tr.error("There was an error parsing the license string."),tr.error(s),e.ram_allocation=li.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return dp=e,e}a(mp,"licenseSearch");async function cW(){return dp||await mp(),dp}a(cW,"getLicense");function uW(){let e=mp().ram_allocation,t=process.constrainedMemory?.()||jN();if(t=Math.round(Math.min(t,jN())/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(uW,"checkMemoryLimit")});var _n=g((Cle,SI)=>{"use strict";var oI="username is required",aI="nothing to update, must supply active, role or password to update",cI="password cannot be an empty string",uI="If role is specified, it cannot be empty.",lI="active must be true or false";SI.exports={addUser:SW,alterUser:TW,dropUser:RW,getSuperUser:yW,userInfo:AW,listUsers:sd,listUsersExternal:OW,setUsersToGlobal:Zo,findAndValidateUser:mI,getClusterUser:NW,USERNAME_REQUIRED:oI,ALTERUSER_NOTHING_TO_UPDATE:aI,EMPTY_PASSWORD:cI,EMPTY_ROLE:uI,ACTIVE_BOOLEAN:lI};var _I=qr(),lW=ci(),Tp=Q_(),dI=CN(),fI=Gr(),gp=Ns(),Vr=z(),EI=require("validate.js"),Oe=$(),{promisify:_W}=require("util"),Rp=Os(),nI=P(),sI=Ve(),dW=Er(),Nle=ee(),Ile=Xi(),fW=Vi(),{table:wle}=(Ae(),ie(ke)),{handleHDBError:es,hdb_errors:EW}=se(),{HTTP_STATUS_CODES:ts,AUTHENTICATION_ERROR_MSGS:pp,HDB_ERROR_MSGS:Xo}=EW,{UserEventMsg:Ap}=Pn(),Sp=require("lodash"),{server:Op}=(lr(),ie(Gi)),hW=$();Op.getUser=(e,t)=>mI(e,t,t!=null);var hI={username:!0,active:!0,role:!0,password:!0},iI=new Map,nd=fI.searchByValue,mW=fI.searchByHash,pW=_W(lW.delete);async function SW(e){let t=EI.cleanAttributes(e,hI),r=dI.addUserValidation(t);if(r)throw es(new Error,r.message,ts.BAD_REQUEST,void 0,void 0,!0);let n={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},s;try{s=await nd(n),s=s&&Array.from(s)}catch(u){throw Oe.error("There was an error searching for a role in add user"),Oe.error(u),u}if(!s||s.length<1)throw es(new Error,Xo.ROLE_NAME_NOT_FOUND(t.role),ts.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw es(new Error,Xo.DUP_ROLES_FOUND(t.role),ts.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=Rp.encrypt(t.password)),t.password=Tp.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await _I.insert(i)}catch(u){throw Oe.error("There was an error searching for a user."),Oe.error(u),u}Oe.debug(o);try{await Zo()}catch(u){throw Oe.error("Got an error setting users to global"),Oe.error(u),u}if(o.skipped_hashes.length===1)throw es(new Error,Xo.USER_ALREADY_EXISTS(t.username),ts.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=s[0],gp.signalUserChange(new Ap(process.pid)),`${c.username} successfully added`}a(SW,"addUser");async function TW(e){let t=EI.cleanAttributes(e,hI);if(Vr.isEmptyOrZeroLength(t.username))throw new Error(oI);if(Vr.isEmptyOrZeroLength(t.password)&&Vr.isEmptyOrZeroLength(t.role)&&Vr.isEmptyOrZeroLength(t.active))throw new Error(aI);if(!Vr.isEmpty(t.password)&&Vr.isEmptyOrZeroLength(t.password.trim()))throw new Error(cI);if(!Vr.isEmpty(t.active)&&!Vr.isBoolean(t.active))throw new Error(lI);let r=gW(t.username);if(!Vr.isEmpty(t.password)&&!Vr.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Rp.encrypt(t.password)),t.password=Tp.hash(t.password)),t.role==="")throw new Error(uI);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 nd(i)||[])}catch(c){throw Oe.error("Got an error searching for a role."),Oe.error(c),c}if(!o||o.length===0){let c=Xo.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Oe.error(c),es(new Error,c,ts.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=Xo.ALTER_USER_DUP_ROLES(t.role);throw Oe.error(c),es(new Error,c,ts.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let n={operation:"update",schema:"system",table:"hdb_user",records:[t]},s;try{s=await _I.update(n)}catch(i){throw Oe.error("Error during update."),Oe.error(i),i}try{await Zo()}catch(i){throw Oe.error("Got an error setting users to global"),Oe.error(i),i}return gp.signalUserChange(new Ap(process.pid)),s}a(TW,"alterUser");function gW(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(gW,"isClusterUser");async function RW(e){try{let t=dI.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 es(new Error,Xo.USER_NOT_EXIST(e.username),ts.NOT_FOUND,void 0,void 0,!0);let n;try{n=await pW(r)}catch(s){throw Oe.error("Got an error deleting a user."),Oe.error(s),s}Oe.debug(n);try{await Zo()}catch(s){throw Oe.error("Got an error setting users to global."),Oe.error(s),s}return gp.signalUserChange(new Ap(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(RW,"dropUser");async function AW(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=Sp.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await mW(r)}catch(s){throw Oe.error("Got an error searching for a role."),Oe.error(s),s}t.role=n[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Oe.error(r),r}return t}a(AW,"userInfo");async function OW(){let e;try{e=await sd()}catch(t){throw Oe.error("Got an error listing users."),Oe.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(OW,"listUsersExternal");async function sd(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await nd(e)}catch(o){throw Oe.error("Got an error searching for roles."),Oe.error(o),o}let r={};for(let o of t)r[o.id]=Sp.cloneDeep(o);if(Object.keys(r).length===0)return null;let n={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},s;try{s=await nd(n)}catch(o){throw Oe.error("Got an error searching for users."),Oe.error(o),o}let i=new Map;for(let o of s)o=Sp.cloneDeep(o),o.role=r[o.role],bW(o.role),i.set(o.username,o);return i}catch(e){throw Oe.error("got an error listing users"),Oe.error(e),Vr.errorizeMessage(e)}return null}a(sd,"listUsers");function bW(e){try{if(!e){Oe.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(fW)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Oe.error("Got an error trying to set system permissions."),Oe.error(t)}}a(bW,"appendSystemTablesToRole");async function Zo(){try{let e=await sd();global.hdb_users=e}catch(e){throw Oe.error(e),e}}a(Zo,"setUsersToGlobal");async function mI(e,t,r=!0){global.hdb_users||await Zo();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw es(new Error,pp.GENERIC_AUTH_FAIL,ts.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw es(new Error,pp.USER_INACTIVE,ts.UNAUTHORIZED,void 0,void 0,!0);let s={active:n.active,username:n.username};if(n.refresh_token&&(s.refresh_token=n.refresh_token),n.role&&(s.role=n.role),r===!0){if(iI.get(t)===n.password)return s;if(Tp.validate(n.password,t))iI.set(t,n.password);else throw es(new Error,pp.GENERIC_AUTH_FAIL,ts.UNAUTHORIZED,void 0,void 0,!0)}return s}a(mI,"findAndValidateUser");async function yW(){global.hdb_users||await Zo();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(yW,"getSuperUser");async function NW(){let e=await sd(),t=dW.getConfigFromFile(nI.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Vr.isEmpty(r)&&r?.role?.role===nI.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=Rp.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+sI.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+sI.SERVER_SUFFIX.ADMIN,r}a(NW,"getClusterUser");var pI=[];Op.invalidateUser=function(e){for(let t of pI)try{t(e)}catch(r){hW.error("Error invalidating user",r)}};Op.onInvalidatedUser=function(e){pI.push(e)}});var Jc=g((Ple,AI)=>{"use strict";var Zi=$(),$r=P(),IW=Jy(),Lle=ys(),Mle=bs(),wW=_n(),{validateEvent:TI}=Pn(),zc=Dn(),CW=require("process"),{resetDatabases:DW}=(Ae(),ie(ke)),LW={[$r.ITC_EVENT_TYPES.SCHEMA]:MW,[$r.ITC_EVENT_TYPES.USER]:RI};async function MW(e){let t=TI(e);if(t){Zi.error(t);return}Zi.trace("ITC schemaHandler received schema event:",e),await IW(e.message),await PW(e.message)}a(MW,"schemaHandler");async function PW(e){try{zc.resetReadTxn($r.SYSTEM_SCHEMA_NAME,$r.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),zc.resetReadTxn($r.SYSTEM_SCHEMA_NAME,$r.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),zc.resetReadTxn($r.SYSTEM_SCHEMA_NAME,$r.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=DW();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Zi.error(t)}}a(PW,"syncSchemaMetadata");var gI=[];async function RI(e){try{try{zc.resetReadTxn($r.SYSTEM_SCHEMA_NAME,$r.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),zc.resetReadTxn($r.SYSTEM_SCHEMA_NAME,$r.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Zi.warn(r)}let t=TI(e);if(t){Zi.error(t);return}Zi.trace(`ITC userHandler ${$r.HDB_ITC_CLIENT_PREFIX}${CW.pid} received user event:`,e),await wW.setUsersToGlobal();for(let r of gI)r()}catch(t){Zi.error(t)}}a(RI,"userHandler");RI.addListener=function(e){gI.push(e)};AI.exports=LW});var Pn=g((Gle,bI)=>{"use strict";var vle=$(),bp=z(),UW=P(),{ITC_ERRORS:jc}=Ur(),{parentPort:Ble,threadId:vW,isMainThread:BW,workerData:Hle}=require("worker_threads"),{onMessageFromWorkers:HW,broadcast:xle,broadcastWithAcknowledgement:xW}=We();bI.exports={sendItcEvent:GW,validateEvent:OI,SchemaEventMsg:qW,UserEventMsg:FW};var id;HW(async(e,t)=>{id=id||Jc(),OI(e),id[e.type]&&await id[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function GW(e){return!BW&&e.message&&(e.message.originator=vW),xW(e)}a(GW,"sendItcEvent");function OI(e){if(typeof e!="object")return jc.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||bp.isEmpty(e.type))return jc.MISSING_TYPE;if(!e.hasOwnProperty("message")||bp.isEmpty(e.message))return jc.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||bp.isEmpty(e.message.originator))return jc.MISSING_ORIGIN;if(UW.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return jc.INVALID_EVENT(e.type)}a(OI,"validateEvent");function qW(e,t,r,n=void 0,s=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=n,this.attribute=s}a(qW,"SchemaEventMsg");function FW(e){this.originator=e}a(FW,"UserEventMsg")});var Ns=g((kle,wI)=>{"use strict";var yI=P(),Fle=z(),od=$(),NI=Wy(),ea,{sendItcEvent:II}=Pn();function kW(e){try{od.trace("signalSchemaChange called with message:",e),ea=ea||Jc();let t=new NI(yI.ITC_EVENT_TYPES.SCHEMA,e);return ea.schema(t),II(t)}catch(t){od.error(t)}}a(kW,"signalSchemaChange");function VW(e){try{od.trace("signalUserChange called with message:",e),ea=ea||Jc();let t=new NI(yI.ITC_EVENT_TYPES.USER,e);return ea.user(t),II(t)}catch(t){od.error(t)}}a(VW,"signalUserChange");wI.exports={signalSchemaChange:kW,signalUserChange:VW}});var ad=g(($le,DI)=>{"use strict";var CI=z(),$W=P(),YW=$(),KW=v_(),WW=U_(),QW=Ns(),{SchemaEventMsg:zW}=Pn(),JW="already exists in";DI.exports=jW;async function jW(e,t,r){if(CI.isEmptyOrZeroLength(r))return r;let n=[];CI.isEmptyOrZeroLength(t.attributes)||t.attributes.forEach(i=>{n.push(i.attribute)});let s=r.filter(i=>n.indexOf(i)<0);return s.length===0||await Promise.all(s.map(async i=>{await XW(e,t.schema,t.name,i)})),s}a(jW,"lmdbCheckForNewAttributes");async function XW(e,t,r,n){let s=new WW(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await ZW(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(JW))YW.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(XW,"createNewAttribute");async function ZW(e){let t;return t=await KW(e),QW.signalSchemaChange(new zW(process.pid,$W.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(ZW,"createAttribute")});var ta=g((Kle,LI)=>{"use strict";var yp=class{static{a(this,"LMDBTransactionObject")}constructor(t,r,n,s,i=void 0){this.operation=t,this.user_name=r,this.timestamp=n,this.hash_values=s,this.origin=i}};LI.exports=yp});var PI=g((Qle,MI)=>{"use strict";var eQ=ta(),tQ=P().OPERATIONS_ENUM,Np=class extends eQ{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(tQ.INSERT,r,n,s,i),this.records=t}};MI.exports=Np});var vI=g((Jle,UI)=>{"use strict";var rQ=ta(),nQ=P().OPERATIONS_ENUM,Ip=class extends rQ{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(nQ.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};UI.exports=Ip});var HI=g((Xle,BI)=>{"use strict";var sQ=ta(),iQ=P().OPERATIONS_ENUM,wp=class extends sQ{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(iQ.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};BI.exports=wp});var GI=g((e_e,xI)=>{"use strict";var oQ=ta(),aQ=P().OPERATIONS_ENUM,Cp=class extends oQ{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(aQ.DELETE,n,s,t,i),this.original_records=r}};xI.exports=Cp});var Xc=g((n_e,VI)=>{"use strict";var r_e=require("path"),qI=Qe(),cQ=PI(),uQ=vI(),lQ=HI(),_Q=GI(),ra=ft(),FI=z(),{CONFIG_PARAMS:dQ}=P(),kI=ee();kI.initSync();var cd=P().OPERATIONS_ENUM,{getTransactionAuditStorePath:fQ}=je();VI.exports=EQ;async function EQ(e,t){if(kI.get(dQ.LOGGING_AUDITLOG)===!1)return;let r=fQ(e.schema,e.table),n=await qI.openEnvironment(r,e.table,!0),s=hQ(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){qI.initializeDBIs(n,ra.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,ra.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[ra.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[ra.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),FI.isEmpty(s.user_name)||n.dbis[ra.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[ra.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(EQ,"writeTransaction");function hQ(e,t){let r=FI.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===cd.INSERT)return new cQ(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===cd.UPDATE)return new uQ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===cd.UPSERT)return new lQ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===cd.DELETE)return new _Q(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(hQ,"createTransactionObject")});var Dp=g((o_e,$I)=>{"use strict";var mQ=kc(),i_e=Vc(),Zc=P(),pQ=$c(),SQ=Ko().insertRecords,TQ=Qe(),gQ=$(),RQ=ad(),{getSchemaPath:AQ}=je(),OQ=Xc();$I.exports=bQ;async function bQ(e){try{let{schema_table:t,attributes:r}=mQ(e);pQ(e,r,t.hash_attribute),e.schema!==Zc.SYSTEM_SCHEMA_NAME&&(r.includes(Zc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Zc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Zc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Zc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await RQ(e.hdb_auth_header,t,r),s=AQ(e.schema,e.table),i=await TQ.openEnvironment(s,e.table),o=await SQ(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await OQ(e,o)}catch(c){gQ.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:n,txn_time:o.txn_time}}catch(t){throw t}}a(bQ,"lmdbCreateRecords")});var WI=g((c_e,KI)=>{"use strict";var YI=P(),yQ=Dp(),NQ=Vc(),IQ=require("fs-extra"),{getSchemaPath:wQ}=je();KI.exports=CQ;async function CQ(e){let t=[{name:e.schema,createddate:Date.now()}],r=new NQ(YI.SYSTEM_SCHEMA_NAME,YI.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await yQ(r),await IQ.mkdirp(wQ(e.schema))}a(CQ,"lmdbCreateSchema")});var zI=g((l_e,QI)=>{"use strict";var Lp=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.deleted=t,this.skipped=r,this.txn_time=n,this.original_records=s}};QI.exports=Lp});var ZI=g((h_e,XI)=>{"use strict";var JI=Qe(),Mp=vr(),Pp=Ur().LMDB_ERRORS_ENUM,DQ=ft(),jI=$(),d_e=z(),LQ=require("lmdb"),MQ=zI(),PQ=P(),{OVERFLOW_MARKER:f_e,MAX_SEARCH_KEY_LENGTH:E_e}=DQ,UQ=PQ.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function vQ(e,t,r,n){if(Mp.validateEnv(e),t===void 0)throw new Error(Pp.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Pp.IDS_REQUIRED):new Error(Pp.IDS_MUST_BE_ITERABLE);try{let s=JI.listDBIs(e);JI.initializeDBIs(e,t,s);let i=new MQ,o,c=[],u=[];for(let E=0,f=r.length;E<f;E++)try{o=r[E];let h=e.dbis[t].get(o);if(!h||n&&h[UQ]>n){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,LQ.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<s.length;S++){let T=s[S];if(!h.hasOwnProperty(T)||T===t)continue;let R=e.dbis[T],N=h[T];if(N!=null)try{let b=Mp.getIndexedValues(N);if(b)for(let x=0,U=b.length;x<U;x++)R.remove(b[x],o)}catch{jI.warn(`cannot delete from attribute: ${T}, ${N}:${o}`)}}});c.push(p),u.push(o),i.original_records.push(h)}catch(h){jI.warn(h),i.skipped.push(o)}let _=[],l=await Promise.all(c);for(let E=0,f=l.length;E<f;E++)l[E]===!0?i.deleted.push(u[E]):(i.skipped.push(u[E]),_.push(E));let d=0;for(let E=0;E<_.length;E++){let f=_[E];i.original_records.splice(f-d,1),d++}return i.txn_time=Mp.getNextMonotonicTime(),i}catch(s){throw s}}a(vQ,"deleteRecords");XI.exports={deleteRecords:vQ}});var eu=g((p_e,tw)=>{"use strict";var na=z(),BQ=ZI(),HQ=Qe(),{getSchemaPath:xQ}=je(),GQ=Xc(),qQ=$();tw.exports=FQ;async function FQ(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(na.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(na.isEmptyOrZeroLength(e.hash_values)&&!na.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][n];na.isEmpty(u)||e.hash_values.push(u)}}if(na.isEmptyOrZeroLength(e.hash_values))return ew([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(na.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[n]:e.hash_values[c]}}let s=xQ(e.schema,e.table),i=await HQ.openEnvironment(s,e.table),o=await BQ.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await GQ(e,o)}catch(c){qQ.error(`unable to write transaction due to ${c.message}`)}return ew(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(FQ,"lmdbDeleteRecords");function ew(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(ew,"createDeleteResponse")});var vp=g((g_e,rw)=>{"use strict";var kQ=P(),T_e=vr();function Up(e,t){let r=Object.create(null);if(t.length===1&&kQ.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let n=0;n<t.length;n++){let s=t[n],i=e[s];r[s]=i===void 0?null:i}return r}a(Up,"parseRow");function VQ(e,t,r,n){let s=Up(r,e);n.push(s)}a(VQ,"searchAll");function $Q(e,t,r,n){let s=Up(r,e);n[t]=s}a($Q,"searchAllToMap");function YQ(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(YQ,"iterateDBI");function eo(e,t,r,n,s){let i=Object.create(null);i[s]=e;let o;n===s?o=e:(o=t,n!==void 0&&(i[n]=o)),r[0].push(o),r[1].push(i)}a(eo,"pushResults");function KQ(e,t,r,n,s,i){t.toString().endsWith(e)&&eo(t,r,n,s,i)}a(KQ,"endsWith");function WQ(e,t,r,n,s,i){t.toString().includes(e)&&eo(t,r,n,s,i)}a(WQ,"contains");function QQ(e,t,r,n,s,i){t>e&&eo(t,r,n,s,i)}a(QQ,"greaterThanCompare");function zQ(e,t,r,n,s,i){t>=e&&eo(t,r,n,s,i)}a(zQ,"greaterThanEqualCompare");function JQ(e,t,r,n,s,i){t<e&&eo(t,r,n,s,i)}a(JQ,"lessThanCompare");function jQ(e,t,r,n,s,i){t<=e&&eo(t,r,n,s,i)}a(jQ,"lessThanEqualCompare");rw.exports={parseRow:Up,searchAll:VQ,searchAllToMap:$Q,iterateDBI:YQ,endsWith:KQ,contains:WQ,greaterThanCompare:QQ,greaterThanEqualCompare:zQ,lessThanCompare:JQ,lessThanEqualCompare:jQ,pushResults:eo}});var sa=g((y_e,uw)=>{"use strict";var _i=Qe(),A_e=$(),Yr=vr(),ud=ft(),ht=Ur().LMDB_ERRORS_ENUM,O_e=z(),XQ=P(),ld=vp(),{parseRow:ZQ}=ld,b_e=require("lmdb"),{OVERFLOW_MARKER:nw,MAX_SEARCH_KEY_LENGTH:ez}=ud;function sw(e,t,r,n=!1,s=void 0,i=void 0){return to(e,t,r,(o,c)=>c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}))}a(sw,"iterateFullIndex");function tu(e,t,r,n,s,i=!1,o=void 0,c=void 0,u=!1,_=!1){return to(e,t,r,(l,d,E,f)=>{let R={transaction:l,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!u:!_,exclusiveStart:i===!0?_:u};return f===r?(R.values=!1,d.getRange(R).map(N=>({value:N}))):d.getRange(R)})}a(tu,"iterateRangeBetween");function to(e,t,r,n){let s=e.database||e,i=_i.openDBI(s,r);i[ud.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&_i.openDBI(s,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=n(o,i,s,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(to,"setupTransaction");function iw(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(nw)){if(!s)if(r)s=_i.openDBI(e,r);else{let u=_i.listDBIs(e);for(let _=0,l=u.length;_<l&&(s=_i.openDBI(e,u[_]),!s[ud.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(iw,"getOverflowCheck");function tz(e,t,r,n=!1,s=void 0,i=void 0){if(Yr.validateEnv(e),t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);return to(e,t,t,(o,c,u)=>(_d(r),r=ru(u,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(_=>ZQ(_.value,r))))}a(tz,"searchAll");function rz(e,t,r,n=!1,s=void 0,i=void 0){if(Yr.validateEnv(e),t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);_d(r),r=ru(e.database||e,r);let o=new Map;for(let{key:c,value:u}of sw(e,t,t,n,s,i))o.set(c,ld.parseRow(u,r));return o}a(rz,"searchAllToMap");function nz(e,t,r=!1,n=void 0,s=void 0){if(Yr.validateEnv(e),t===void 0)throw new Error(ht.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=sw(e,void 0,t,r,n,s),c=o.transaction,u=iw(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(nz,"iterateDBI");function sz(e,t){if(Yr.validateEnv(e),t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);return _i.statDBI(e,t).entryCount}a(sz,"countAll");function iz(e,t,r,n,s=!1,i=void 0,o=void 0){return di(e,r,n),to(e,t,r,(c,u,_,l)=>(n=Yr.convertKeyValueToWrite(n),l===r?u.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:u.getValues(n,{transaction:c,reverse:s,limit:i,offset:o}).map(d=>({key:n,value:d}))))}a(iz,"equals");function oz(e,t,r){return di(e,t,r),_i.openDBI(e,t).getValuesCount(r)}a(oz,"count");function az(e,t,r,n,s=!1,i=void 0,o=void 0){return di(e,r,n),to(e,null,r,(c,u)=>{n=Yr.convertKeyValueToWrite(n);let _=!0;typeof n=="number"&&(_=!1);let l;if(s===!0){let d;for(let E of u.getKeys({transaction:c,start:n}))if(!E.startsWith(n)){d=E;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),l=u.getRange({transaction:c,start:d,end:void 0,reverse:s,limit:i,offset:o}).map(E=>{let{key:f}=E;if(f!==d){if(f.toString().startsWith(n))return E;if(_===!0)return l.DONE}}),l.filter(E=>E)}else return l=u.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(n))return d;if(_===!0)return l.DONE}),_?l:l.filter(d=>d)})}a(az,"startsWith");function cz(e,t,r,n,s=!1,i=void 0,o=void 0){return ow(e,t,r,n,s,i,o,!0)}a(cz,"endsWith");function ow(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return di(e,r,n),to(e,null,r,(u,_,l,d)=>{let E=iw(l,u,d,r);return o=Number.isInteger(o)?o:0,_.getKeys({transaction:u,end:s?!1:void 0,reverse:s}).flatMap(f=>{let h=f.toString();return h.endsWith(nw)?_.getValues(f,{transaction:u}).map(p=>{let S=E(f,p);if(c?S.endsWith(n):S.includes(n))return{key:S,value:p}}).filter(p=>p):(c?h.endsWith(n):h.includes(n))?_[ud.DBI_DEFINITION_NAME].is_hash_attribute?{key:f,value:f}:_.getValues(f,{transaction:u}).map(p=>({key:f,value:p})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(ow,"contains");function uz(e,t,r,n,s=!1,i=void 0,o=void 0){di(e,r,n);let c=typeof n,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),tu(e,t,r,n,u,s,i,o,!0,!1)}a(uz,"greaterThan");function lz(e,t,r,n,s=!1,i=void 0,o=void 0){di(e,r,n);let c=typeof n,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),tu(e,t,r,n,u,s,i,o,!1,!1)}a(lz,"greaterThanEqual");function _z(e,t,r,n,s=!1,i=void 0,o=void 0){di(e,r,n);let c=typeof n,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),tu(e,t,r,u,n,s,i,o,!1,!0)}a(_z,"lessThan");function dz(e,t,r,n,s=!1,i=void 0,o=void 0){di(e,r,n);let c=typeof n,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),tu(e,t,r,u,n,s,i,o,!1,!1)}a(dz,"lessThanEqual");function fz(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(Yr.validateEnv(e),r===void 0)throw new Error(ht.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(ht.START_VALUE_REQUIRED);if(s===void 0)throw new Error(ht.END_VALUE_REQUIRED);if(n=Yr.convertKeyValueToWrite(n),s=Yr.convertKeyValueToWrite(s),n>s)throw new Error(ht.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return tu(e,t,r,n,s,i,o,c)}a(fz,"between");function Ez(e,t,r,n){Yr.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);if(_d(r),r=ru(s,r),n===void 0)throw new Error(ht.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=ld.parseRow(c,r)),o}a(Ez,"searchByHash");function hz(e,t,r){Yr.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ht.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(hz,"checkHashExists");function mz(e,t,r,n,s=[]){return cw(e,t,r,n,s),aw(e,t,r,n,s).map(i=>i[1])}a(mz,"batchSearchByHash");function pz(e,t,r,n,s=[]){cw(e,t,r,n,s);let i=new Map;for(let[o,c]of aw(e,t,r,n,s))i.set(o,c);return i}a(pz,"batchSearchByHashToMap");function aw(e,t,r,n,s=[]){return to(e,t,t,(i,o,c)=>{r=ru(c,r);let u=r.length<3;return n.map(_=>{let l=c.dbis[t].get(_,{transaction:i,lazy:u});if(l)return[_,ld.parseRow(l,r)];s.push(_)}).filter(_=>_)})}a(aw,"batchHashSearch");function cw(e,t,r,n,s){if(Yr.validateEnv(e),t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);if(_d(r),n==null)throw new Error(ht.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(ht.IDS_MUST_BE_ITERABLE)}a(cw,"initializeBatchSearchByHash");function _d(e){if(!Array.isArray(e))throw e===void 0?new Error(ht.FETCH_ATTRIBUTES_REQUIRED):new Error(ht.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(_d,"validateFetchAttributes");function di(e,t,r){if(Yr.validateEnv(e),t===void 0)throw new Error(ht.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ht.SEARCH_VALUE_REQUIRED);if(r?.length>ez)throw new Error(ht.SEARCH_VALUE_TOO_LARGE)}a(di,"validateComparisonFunctions");function ru(e,t){return t.length===1&&XQ.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=_i.listDBIs(e)),t}a(ru,"setGetWholeRowAttributes");uw.exports={searchAll:tz,searchAllToMap:rz,count:oz,countAll:sz,equals:iz,startsWith:az,endsWith:cz,contains:ow,searchByHash:Ez,setGetWholeRowAttributes:ru,batchSearchByHash:mz,batchSearchByHashToMap:pz,checkHashExists:hz,iterateDBI:nz,greaterThan:uz,greaterThanEqual:lz,lessThan:_z,lessThanEqual:dz,between:fz}});var ia=g((I_e,Ew)=>{var lw=require("lodash"),_w=Xe(),he=require("joi"),Sz=z(),{hdb_schema_table:nu,checkValidTable:dw,hdb_table:fw,hdb_database:dd}=jn(),{handleHDBError:Tz,hdb_errors:gz}=se(),{getDatabases:Rz}=(Ae(),ie(ke)),{HTTP_STATUS_CODES:Az}=gz,Oz=he.object({database:dd,schema:dd,table:fw,search_attribute:nu,search_value:he.any().required(),get_attributes:he.array().min(1).items(he.alternatives(nu,he.object())).optional(),desc:he.bool(),limit:he.number().integer().min(1),offset:he.number().integer().min(0)}),bz=he.object({database:dd,schema:dd,table:fw,operator:he.string().valid("and","or").default("and").lowercase(),offset:he.number().integer().min(0),limit:he.number().integer().min(1),get_attributes:he.array().min(1).items(he.alternatives(nu,he.object())).optional(),sort:he.object({attribute:he.alternatives(nu,he.array().min(1)),descending:he.bool().optional()}).optional(),conditions:he.array().min(1).items(he.alternatives(he.object({operator:he.string().valid("and","or").default("and").lowercase(),conditions:he.array()}),he.object({search_attribute:he.alternatives(nu,he.array().min(1)),search_type:he.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:he.when("search_type",{switch:[{is:"equals",then:he.any()},{is:"between",then:he.array().items(he.alternatives([he.string(),he.number()])).length(2)}],otherwise:he.alternatives(he.string(),he.number())}).required()}))).required()});Ew.exports=function(e,t){let r=null;switch(t){case"value":r=_w.validateBySchema(e,Oz);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(dw("database",e.schema)),i(dw("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(o=>typeof o=="string"||typeof o=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(o=>typeof o=="string"||typeof o=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),s&&(r=new Error(s.trim()));break;case"conditions":r=_w.validateBySchema(e,bz);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=Sz.checkGlobalSchemaTable(e.schema,e.table);if(s)return Tz(new Error,s,Az.NOT_FOUND);let o=Rz()[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,E=l.conditions.length;d<E;d++){let f=l.conditions[d];f.conditions?u(f):c.push(f.search_attribute)}},"addConditions");t==="conditions"&&u(e);let _=lw.filter(c,l=>l!=="*"&&l.attribute!=="*"&&!Array.isArray(l)&&!l.name&&!lw.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 Bp=g((C_e,hw)=>{"use strict";var yz=Qe(),Nz=ia(),{getSchemaPath:Iz}=je();hw.exports=wz;function wz(e){let t=Nz(e,"hashes");if(t)throw t;let r=Iz(e.schema,e.table);return yz.openEnvironment(r,e.table)}a(wz,"initialize")});var Hp=g((L_e,mw)=>{"use strict";var Cz=sa(),Dz=Bp();mw.exports=Lz;async function Lz(e){let t=await Dz(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return Cz.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(Lz,"lmdbGetDataByHash")});var oa=g((P_e,pw)=>{"use strict";var xp=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};pw.exports=xp});var Tw=g((B_e,Sw)=>{"use strict";var v_e=oa(),Mz=sa(),Pz=Bp();Sw.exports=Uz;async function Uz(e){let t=await Pz(e),r=global.hdb_schema[e.schema][e.table];return Mz.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(Uz,"lmdbSearchByHash")});var rs=g((x_e,gw)=>{"use strict";var Gp=class{static{a(this,"SearchObject")}constructor(t,r,n,s,i,o,c,u=!1,_=void 0,l=void 0){this.schema=t,this.table=r,this.search_attribute=n,this.search_value=s,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=u,this.limit=_,this.offset=l}};gw.exports=Gp});var fd=g((q_e,Nw)=>{"use strict";var rr=sa(),vz=Qe(),Bz=z(),me=ft(),ro=P(),Hz=Vi(),Rw=Ur().LMDB_ERRORS_ENUM,{getSchemaPath:xz}=je(),Is=ro.SEARCH_WILDCARDS;async function Gz(e,t,r){let n;e.schema===ro.SYSTEM_SCHEMA_NAME?n=Hz[e.table]:n=global.hdb_schema[e.schema][e.table];let s=yw(e,n.hash_attribute,r,t);return Ow(e,s,n.hash_attribute,r)}a(Gz,"prepSearch");async function Ow(e,t,r,n){let s=xz(e.schema,e.table),i=await vz.openEnvironment(s,e.table),o=bw(i,e,t,r),c=o.transaction||i;if([me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,me.SEARCH_TYPES.SEARCH_ALL,me.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(qz(e,r)===!1){let l=e.search_attribute;if(l===r)return n?Aw(o,()=>!0):o.map(E=>({[r]:E.key}));let d=a(E=>({[r]:E.value,[l]:E.key}),"toObject");return n?Aw(o,d):o.map(d)}let _=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return n===!0?rr.batchSearchByHashToMap(c,r,e.get_attributes,_):rr.batchSearchByHash(c,r,e.get_attributes,_)}a(Ow,"executeSearch");function bw(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<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 me.SEARCH_TYPES.EQUALS:s=rr.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.CONTAINS:s=rr.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.ENDS_WITH:case me.SEARCH_TYPES._ENDS_WITH:s=rr.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.STARTS_WITH:case me.SEARCH_TYPES._STARTS_WITH:s=rr.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return rr.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return rr.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case me.SEARCH_TYPES.SEARCH_ALL:return rr.searchAll(e,n,t.get_attributes,o,c,u);case me.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return rr.searchAllToMap(e,n,t.get_attributes,o,c,u);case me.SEARCH_TYPES.BETWEEN:s=rr.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case me.SEARCH_TYPES.GREATER_THAN:case me.SEARCH_TYPES._GREATER_THAN:s=rr.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.GREATER_THAN_EQUAL:case me.SEARCH_TYPES._GREATER_THAN_EQUAL:s=rr.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.LESS_THAN:case me.SEARCH_TYPES._LESS_THAN:s=rr.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.LESS_THAN_EQUAL:case me.SEARCH_TYPES._LESS_THAN_EQUAL:s=rr.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return s}a(bw,"searchByType");function Aw(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(Aw,"createMapFromIterable");function qz(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.search_attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let n=!1;for(let s=0;s<e.get_attributes.length;s++)if(r.indexOf(e.get_attributes[s])<0){n=!0;break}return n}a(qz,"checkToFetchMore");function yw(e,t,r,n){if(Bz.isEmpty(n)){let s=e.search_value;typeof s=="object"?s=JSON.stringify(s):s=s.toString();let i=s.charAt(0),o=s.charAt(s.length-1),c=!1;if(e.search_attribute===t&&(c=!0),Is.indexOf(s)>-1)return r===!0?me.SEARCH_TYPES.SEARCH_ALL_TO_MAP:me.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(Is[0])<0&&s.indexOf(Is[1])<0)return c===!0?r===!0?me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:me.SEARCH_TYPES.EQUALS;if(Is.indexOf(i)>=0&&Is.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),me.SEARCH_TYPES.CONTAINS;if(Is.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),me.SEARCH_TYPES.ENDS_WITH;if(Is.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),me.SEARCH_TYPES.STARTS_WITH;if(s.includes(Is[0])||s.includes(Is[1]))return me.SEARCH_TYPES.EQUALS;throw new Error(Rw.UNKNOWN_SEARCH_TYPE)}else switch(n){case ro.VALUE_SEARCH_COMPARATORS.BETWEEN:return me.SEARCH_TYPES.BETWEEN;case ro.VALUE_SEARCH_COMPARATORS.GREATER:return me.SEARCH_TYPES.GREATER_THAN;case ro.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return me.SEARCH_TYPES.GREATER_THAN_EQUAL;case ro.VALUE_SEARCH_COMPARATORS.LESS:return me.SEARCH_TYPES.LESS_THAN;case ro.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return me.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(Rw.UNKNOWN_SEARCH_TYPE)}}a(yw,"createSearchTypeFromSearchObject");Nw.exports={executeSearch:Ow,createSearchTypeFromSearchObject:yw,prepSearch:Gz,searchByType:bw}});var ww=g((V_e,Iw)=>{"use strict";var k_e=rs(),Fz=ia(),kz=z(),Vz=P(),$z=fd();Iw.exports=Yz;function Yz(e,t){if(!kz.isEmpty(t)&&Vz.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=Fz(e,"value");if(n)throw n;return $z.prepSearch(e,t,!0)}a(Yz,"lmdbGetDataByValue")});var su=g((K_e,Cw)=>{"use strict";var Y_e=rs(),Kz=ia(),Wz=z(),Qz=P(),zz=fd();Cw.exports=Jz;async function Jz(e,t){if(!Wz.isEmpty(t)&&Qz.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=Kz(e,"value");if(n)throw n;return zz.prepSearch(e,t,!1)}a(Jz,"lmdbSearchByValue")});var Lw=g((z_e,Dw)=>{"use strict";var Q_e=ft(),qp=class{static{a(this,"SearchByConditionsObject")}constructor(t,r,n,s,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=n,this.limit=i,this.offset=o,this.conditions=s,this.operator=c}},Fp=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},kp=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};Dw.exports={SearchByConditionsObject:qp,SearchCondition:Fp,SortAttribute:kp}});var Bw=g((Z_e,vw)=>{"use strict";var j_e=Lw().SearchByConditionsObject,jz=rs(),Xz=ia(),Vp=sa(),Ed=ft(),{Resource:X_e}=(cn(),ie($p)),Uw=fd(),Zz=vp(),e2=require("lodash"),{getSchemaPath:t2}=je(),Mw=Qe(),{handleHDBError:r2,hdb_errors:n2}=se(),{HTTP_STATUS_CODES:s2}=n2,i2=1e8;vw.exports=o2;async function o2(e){let t=Xz(e,"conditions");if(t)throw r2(t,t.message,s2.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=t2(e.schema,e.table),n=await Mw.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)Mw.openDBI(n,_.search_attribute);let i=e2.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let l=_.search_type;l===Ed.SEARCH_TYPES.EQUALS?_.estimated_count=Vp.count(n,_.search_attribute,_.search_value):l===Ed.SEARCH_TYPES.CONTAINS||l===Ed.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=i2}return _.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await Pw(o,e,i[0],s.hash_attribute),u;if(!e.operator||e.operator.toLowerCase()==="and"){let _=n.dbis[s.hash_attribute],l=i.slice(1).map(Uw.filterByType),d=l.length,E=Vp.setGetWholeRowAttributes(n,e.get_attributes);u=c.map(f=>_.get(f,{transaction:o,lazy:!0})),d>0&&(u=u.filter(f=>{for(let h=0;h<d;h++)if(!l[h](f))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(f=>Zz.parseRow(f,E))}else{for(let d=1;d<i.length;d++){let E=i[d],f=await Pw(o,e,E,s.hash_attribute);c=c.concat(f)}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=Vp.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(o2,"lmdbSearchByConditions");async function Pw(e,t,r,n){let s=new jz(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===Ed.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,Uw.searchByType(e,s,i,n).map(o=>o.value)}a(Pw,"executeConditionSearch")});var aa=g((tde,Hw)=>{"use strict";var a2=P().OPERATIONS_ENUM,Yp=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=a2.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};Hw.exports=Yp});var Kp=g((nde,Yw)=>{"use strict";var Fw=rs(),kw=aa(),Vw=su(),$w=eu(),hr=P(),xw=z(),Gw=Qe(),{getTransactionAuditStorePath:c2,getSchemaPath:u2}=je(),qw=$();Yw.exports=l2;async function l2(e){try{if(xw.isEmpty(global.hdb_schema[e.schema])||xw.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await _2(e),await d2(e);let t=u2(e.schema,e.table);try{await Gw.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")qw.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=c2(e.schema,e.table);await Gw.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")qw.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(l2,"lmdbDropTable");async function _2(e){let t=new Fw(hr.SYSTEM_SCHEMA_NAME,hr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,hr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[hr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await Vw(t)),n=[];for(let i=0;i<r.length;i++){let o=r[i];n.push(o.id)}if(n.length===0)return;let s=new kw(hr.SYSTEM_SCHEMA_NAME,hr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await $w(s)}a(_2,"deleteAttributesFromSystem");async function d2(e){let t=new Fw(hr.SYSTEM_SCHEMA_NAME,hr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[hr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,hr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,hr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await Vw(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let o=r[i];o.name===e.table&&o.schema===e.schema&&(n=o)}if(!n)throw new Error(`${e.schema}.${e.table} was not found`);let s=new kw(hr.SYSTEM_SCHEMA_NAME,hr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await $w(s)}catch(i){throw i}}a(d2,"dropTableFromSystem")});var Ww=g((ide,Kw)=>{"use strict";var f2=require("fs-extra"),E2=rs(),h2=oa(),m2=aa(),p2=Kp(),S2=eu(),T2=Hp(),g2=su(),ws=P(),{getSchemaPath:R2}=je(),{handleHDBError:A2,hdb_errors:O2}=se(),{HDB_ERROR_MSGS:b2,HTTP_STATUS_CODES:y2}=O2;Kw.exports=N2;async function N2(e){let t;try{t=await I2(e.schema);let r=new E2(ws.SYSTEM_SCHEMA_NAME,ws.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,ws.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[ws.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await g2(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await p2(c)}catch(u){if(u.message!=="invalid environment")throw u}}let s=new m2(ws.SYSTEM_SCHEMA_NAME,ws.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await S2(s);let i=R2(t);await f2.remove(i)}catch(r){throw r}}a(N2,"lmdbDropSchema");async function I2(e){let t=new h2(ws.SYSTEM_SCHEMA_NAME,ws.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[ws.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await T2(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw A2(new Error,b2.SCHEMA_NOT_FOUND(e),y2.NOT_FOUND,void 0,void 0,!0);return n}a(I2,"validateDropSchema")});var hd=g((ade,Qw)=>{"use strict";var Wp=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};Qw.exports=Wp});var Jw=g((lde,zw)=>{"use strict";var w2=require("fs-extra"),md=Qe(),{getTransactionAuditStorePath:C2}=je(),Qp=ft(),ude=hd();zw.exports=D2;async function D2(e){let t;try{let r=C2(e.schema,e.table);await w2.mkdirp(r),t=await md.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{md.createDBI(t,Qp.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),md.createDBI(t,Qp.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),md.createDBI(t,Qp.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(D2,"createTransactionsAuditEnvironment")});var eC=g((dde,Zw)=>{"use strict";var zp=P(),jw=Qe(),L2=Ko(),{getSystemSchemaPath:M2,getSchemaPath:P2}=je(),U2=Vi(),v2=v_(),Jp=U_(),B2=$(),H2=Jw(),Xp=U2.hdb_table,Xw=[];for(let e=0;e<Xp.attributes.length;e++)Xw.push(Xp.attributes[e].attribute);Zw.exports=x2;async function x2(e,t){let r=P2(t.schema,t.table),n=new Jp(t.schema,t.table,zp.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new Jp(t.schema,t.table,zp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Jp(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await jw.createEnvironment(r,t.table),e!==void 0){let o=await jw.openEnvironment(M2(),zp.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await L2.insertRecords(o,Xp.hash_attribute,Xw,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await jp(n),await jp(s),await jp(i)}await H2(t)}catch(o){throw o}}a(x2,"lmdbCreateTable");async function jp(e){try{await v2(e)}catch(t){B2.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(jp,"createAttribute")});var rC=g((Ede,tC)=>{"use strict";var G2=kc(),q2=$c(),F2=ad(),iu=P(),k2=Ko().updateRecords,V2=Qe(),{getSchemaPath:$2}=je(),Y2=Xc(),K2=$();tC.exports=W2;async function W2(e){try{let{schema_table:t,attributes:r}=G2(e);q2(e,r,t.hash_attribute),e.schema!==iu.SYSTEM_SCHEMA_NAME&&(r.includes(iu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(iu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(iu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(iu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await F2(e.hdb_auth_header,t,r),s=$2(e.schema,e.table),i=await V2.openEnvironment(s,e.table),o=await k2(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await Y2(e,o)}catch(c){K2.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:n,txn_time:o.txn_time}}catch(t){throw t}}a(W2,"lmdbUpdateRecords")});var sC=g((mde,nC)=>{"use strict";var Q2=P().OPERATIONS_ENUM,Zp=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=Q2.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};nC.exports=Zp});var oC=g((Tde,iC)=>{"use strict";var Sde=sC(),z2=kc(),J2=$c(),j2=ad(),ou=P(),X2=Ko().upsertRecords,Z2=Qe(),{getSchemaPath:eJ}=je(),tJ=Xc(),rJ=$(),{handleHDBError:nJ,hdb_errors:sJ}=se();iC.exports=iJ;async function iJ(e){let t;try{t=z2(e)}catch(u){throw nJ(u,u.message,sJ.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;J2(e,n,r.hash_attribute),e.schema!==ou.SYSTEM_SCHEMA_NAME&&(n.includes(ou.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(ou.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(ou.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(ou.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await j2(e.hdb_auth_header,r,n),i=eJ(e.schema,e.table),o=await Z2.openEnvironment(i,e.table),c=await X2(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await tJ(e,c)}catch(u){rJ.error(`unable to write transaction due to ${u.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:s,txn_time:c.txn_time}}a(iJ,"lmdbUpsertRecords")});var cC=g((Rde,aC)=>{"use strict";var eS=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};aC.exports=eS});var lC=g((Ode,uC)=>{"use strict";var tS=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,n=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=n}};uC.exports=tS});var fC=g((Nde,dC)=>{"use strict";var rS=Qe(),{getTransactionAuditStorePath:oJ}=je(),yde=cC(),au=ft(),aJ=z(),_C=lC(),cJ=require("util").promisify,uJ=cJ(setTimeout),lJ=1e4,_J=100;dC.exports=dJ;async function dJ(e){let t=oJ(e.schema,e.table),r=await rS.openEnvironment(t,e.table,!0),n=rS.listDBIs(r);rS.initializeDBIs(r,au.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new _C;do s=await fJ(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=s.start_timestamp),s.end_timestamp!==void 0&&(i.end_timestamp=s.end_timestamp),i.transactions_deleted+=s.transactions_deleted,await uJ(_J);while(s.transactions_deleted>0);return i}a(dJ,"deleteAuditLogsBefore");async function fJ(e,t){let r=new _C;try{let n=e.dbis[au.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let{key:i,value:o}of n.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),s=n.remove(i);let c=o[au.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];aJ.isEmpty(c)||(s=e.dbis[au.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)s=e.dbis[au.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>lJ)break}return await s,r}catch(n){throw n}}a(fJ,"deleteTransactions")});var hC=g((wde,EC)=>{"use strict";var nS=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};EC.exports=nS});var pC=g((Lde,mC)=>{"use strict";var EJ=rs(),hJ=aa(),Dde=hC(),ns=P(),mJ=z(),sS=Qe(),pJ=Vi(),SJ=su(),TJ=eu(),{getSchemaPath:gJ}=je();mC.exports=RJ;async function RJ(e,t=!0){let r;e.schema===ns.SYSTEM_SCHEMA_NAME?r=pJ[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await OJ(e),s=gJ(e.schema,e.table),i=await sS.openEnvironment(s,e.table);return t===!0&&await AJ(e,i,r.hash_attribute),sS.dropDBI(i,e.attribute),n}a(RJ,"lmdbDropAttribute");async function AJ(e,t,r){let n=sS.openDBI(t,r),s,i=e.attribute;for(let{key:o,value:c,version:u}of n.getRange({start:!1,versions:!0})){let _={};for(let l in c)l!==i&&(_[l]=c[l]);s=t.dbis[r].put(o,_,u)}await s}a(AJ,"removeAttributeFromAllObjects");async function OJ(e){let t=new EJ(ns.SYSTEM_SCHEMA_NAME,ns.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,ns.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[ns.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,ns.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await SJ(t)).filter(o=>o[ns.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(mJ.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[ns.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new hJ(ns.SYSTEM_SCHEMA_NAME,ns.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return TJ(i)}a(OJ,"dropAttributeFromSystem")});var OC=g((Ude,AC)=>{"use strict";var iS=Qe(),ca=ft(),Pde=vr(),oS=P(),SC=z(),{getTransactionAuditStorePath:bJ}=je(),yJ=sa(),pd=ta(),NJ=$();AC.exports=IJ;async function IJ(e){let t=bJ(e.schema,e.table),r=await iS.openEnvironment(t,e.table,!0),n=iS.listDBIs(r);iS.initializeDBIs(r,ca.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case oS.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return TC(r,e.search_values);case oS.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,CJ(r,e.search_values,s);case oS.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return wJ(r,e.search_values);default:return TC(r)}}a(IJ,"readAuditLog");function TC(e,t=[0,Date.now()]){SC.isEmpty(t[0])&&(t[0]=0),SC.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[ca.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let s of r.getKeys({start:t[1]}))if(s!==t[1]){n=s;break}return r.getRange({start:t[0],end:n}).map(({value:s})=>Object.assign(new pd,s))}a(TC,"searchTransactionsByTimestamp");function wJ(e,t=[]){let r=new Map;for(let n=0;n<t.length;n++){let s=t[n],i=[];for(let o of e.dbis[ca.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,RC(e,i))}return Object.fromEntries(r)}a(wJ,"searchTransactionsByUsername");function CJ(e,t,r){let n=new Map;for(let c=0,u=t.length;c<u;c++){let _=t[c],l=yJ.equals(e,ca.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,ca.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,_);for(let{value:d}of l){let E=Number(d);n.has(E)?n.get(E).push(_.toString()):n.set(E,[_.toString()])}}let s=Array.from(n.keys()),i=RC(e,s),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],_=u.timestamp,l=n.get(_);gC(u,"records",r,l,o),gC(u,"original_records",r,l,o)}return Object.fromEntries(o)}a(CJ,"searchTransactionsByHashValues");function gC(e,t,r,n,s){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],u=c[r].toString();if(n.indexOf(u)>=0)if(s.has(u)){let _=s.get(u),l=_[_.length-1];if(l.timestamp===i)l[t]=[c];else{let d=new pd(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new pd(e.operation,e.user_name,i,void 0);_[t]=[c],s.set(u,[_])}}}a(gC,"loopRecords");function RC(e,t){let r=[];try{let n=e.dbis[ca.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let s=0;s<t.length;s++)try{let i=n.get(t[s]);if(i){let o=Object.assign(new pd,i);r.push(o)}}catch(i){NJ.warn(i)}return r}catch(n){throw n}}a(RC,"batchSearchTransactions")});var yC=g((xde,bC)=>{"use strict";var{getSchemaPath:Bde}=je(),Hde=Qe(),{database:DJ}=(Ae(),ie(ke));bC.exports={writeTransaction:LJ};async function LJ(e,t,r){return DJ({database:e,table:t}).transaction(r)}a(LJ,"writeTransaction")});var CC=g((qde,wC)=>{"use strict";var{getSchemaPath:NC}=je(),IC=Qe();wC.exports={flush:MJ,resetReadTxn:PJ};async function MJ(e,t){return(await IC.openEnvironment(NC(e,t),t.toString())).flushed}a(MJ,"flush");async function PJ(e,t){try{(await IC.openEnvironment(NC(e,t),t.toString())).resetReadTxn()}catch{}}a(PJ,"resetReadTxn")});var PC=g((kde,MC)=>{"use strict";var{Readable:UJ}=require("stream"),{getDatabases:vJ}=(Ae(),ie(ke)),{readSync:BJ,openSync:HJ,createReadStream:DC}=require("fs"),{open:xJ}=require("lmdb"),LC=vc(),GJ=Bc(),{AUDIT_STORE_OPTIONS:qJ}=(ni(),ie(UC)),{INTERNAL_DBIS_NAME:FJ,AUDIT_STORE_NAME:kJ}=ft();MC.exports=$J;var aS=32768,VJ=100;async function $J(e){let t=e.database||e.schema||"data",r=vJ()[t],n=new Date().toISOString(),s=e.tables||e.table&&[e.table];if(s){let _=r[s[0]];if(!_)throw new Error(`Can not find table ${s[0]}`);let l=_.dbisDB,d=xJ({noSync:!0,maxDbs:GJ.MAX_DBS}),E,f=d.openDB(FJ,new LC(!1)),h=l.useReadTransaction(),p=0,S=a(async function(R,N){N.encoding="binary",N.encoder=void 0;let b=d.openDB(R,N),x=l.openDB(R,N);for(let{key:U,version:F,value:M}of x.getRange({start:null,transaction:h,versions:x.useVersions}))E=b.put(U,M,F),p++%VJ===0&&(await new Promise(Q=>setTimeout(Q,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:R,value:N}of l.getRange({transaction:h,start:!1}))if(s.some(b=>R.startsWith?.(b+"/"))){f.put(R,N);let[,b]=R.split("/"),x=!b,U=new LC(!x,x);await S(R,U)}e.include_audit&&await S(kJ,Object.assign({},qJ)),await E;let T=DC(d.path);return T.headers=u(),T.on("close",()=>{h.done(),d.close()}),T}let o=r[Object.keys(r)[0]].primaryStore,c=HJ(o.path);return o.transaction(()=>{let _=Buffer.alloc(aS);BJ(c,_,0,aS),o.resetReadTxn();let l=o.useReadTransaction();l.renew();let d=DC(null,{fd:c,start:aS}),E=new UJ.from(async function*(){yield _;for await(let f of d)l.openTimer&&(l.openTimer=0),yield f;l.done()}());return E.headers=u(),E});function u(){let _=new Map;return _.set("content-type","application/octet-stream"),_.set("content-disposition",`attachment; filename="${t}"`),_.set("date",n),_}}a($J,"getBackup")});var HC=g(($de,BC)=>{"use strict";var YJ=$(),{handleHDBError:KJ}=se(),WJ=zb(),QJ=v_(),zJ=Dp(),JJ=WI(),jJ=eu(),XJ=Hp(),ZJ=Tw(),e4=ww(),t4=su(),r4=Bw(),n4=Ww(),s4=eC(),i4=rC(),o4=oC(),a4=fC(),c4=Kp(),u4=pC(),l4=OC(),_4=yC(),vC=CC(),d4=PC(),cS=class extends WJ{static{a(this,"LMDBBridge")}async searchByConditions(t){return r4(t)}async getDataByHash(t){return await XJ(t)}async searchByHash(t){return await ZJ(t)}async getDataByValue(t,r){return await e4(t,r)}async searchByValue(t){return await t4(t)}async createSchema(t){return await JJ(t)}async dropSchema(t){return await n4(t)}async createTable(t,r){return await s4(t,r)}async dropTable(t){return await c4(t)}async createAttribute(t){return await QJ(t)}async createRecords(t){return await zJ(t)}async updateRecords(t){return await i4(t)}async upsertRecords(t){try{return await o4(t)}catch(r){throw KJ(r,null,null,YJ.ERR,r)}}async deleteRecords(t){return await jJ(t)}async dropAttribute(t){return await u4(t)}async deleteAuditLogsBefore(t){return await a4(t)}async readAuditLog(t){return await l4(t)}writeTransaction(t,r,n){return _4.writeTransaction(t,r,n)}flush(t,r){return vC.flush(t,r)}resetReadTxn(t,r){return vC.resetReadTxn(t,r)}getBackup(t){return d4(t)}};BC.exports=cS});function m4(){h4=setInterval(function(){for(let e of uS)if(e.stale){let t=e[ye]?.url;FC.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},E4).unref()}var lS,qC,FC,kC,VC,$C,xC,uS,f4,cu,GC,no,Sd,E4,h4,_S=Re(()=>{lS=H(vr()),qC=H(se()),FC=H($());cn();kC=H(ee()),VC=H(P()),$C=H(z()),xC=100,uS=new Set,f4=(0,$C.convertToMS)(kC.get(VC.CONFIG_PARAMS.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3,no=class e{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;overloadChecked;open=1;getReadTxn(){if(this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn)return this.readTxn.openTimer&&(this.readTxn.openTimer=0),this.readTxn;if(this.open===1)return this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxnsUsed=1,this.readTxn.openTimer&&(this.readTxn.openTimer=0),uS.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(uS.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(cu&&!this.overloadChecked&&performance.now()-GC>f4)throw new qC.ServerError("Outstanding write transactions have too long of queue, please try again later",503);this.overloadChecked=!0}addWrite(t){if(this.open===0)throw new Error("Can not use a transaction that is no longer open");if(this.open===2){let r=new e;return r.addWrite(t),r.commit({})}else this.writes.push(t)}removeWrite(t){let r=this.writes.indexOf(t);r>-1&&(this.writes[r]=null)}commit(t={}){let r=this.timestamp;r||(r=this.timestamp=t.timestamp=t.timestamp||(0,lS.getNextMonotonicTime)());let n=t.retries||0;if(this.validated<this.writes.length)try{let d=this.validated;this.validated=this.writes.length;for(let f=d;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let E;for(let f=d;f<this.validated;f++){let h=this.writes[f];h&&(h.before||h.beforeIntermediate)&&(E=!0)}if(E)return(async()=>{try{for(let f=0;f<2;f++){let h;for(let p=d;p<this.validated;p++){let S=this.writes[p];if(!S)continue;let T=S[f===0?"before":"beforeIntermediate"];if(T){let R=T();h?h.push?h.push(R):h=[h,R]:h=R}}h&&await(h.push?Promise.all(h):h)}}catch(f){throw this.abort(),f}return this.commit(t)})()}catch(d){throw this.abort(),d}n||this.doneReadTxn(),this.open=t?.letItLinger?2:0;let s,i=[],o=0;this.writes=this.writes.filter(d=>d);let c=a(d=>{d.commit(r,d.entry,n)},"doWrite"),u=a(()=>{let d=this.writes[o++];if(d)if(d.key){n>0&&(d.entry=d.store.getEntry(d.key));let E=d.store.ifVersion(d.key,d.entry?.version??null,u);s=s||E}else u();else for(let E of this.writes)c(E)},"nextCondition"),_=this.lmdbDb;if(this.writes.length>0&&(_?.retryRisk&&(_.retryRisk*=.99),this.writes.length+(_?.retryRisk||0)<xC>>n?u():s=this.writes[0].store.transaction(()=>{for(let d of this.writes)d.entry=d.store.getEntry(d.key),c(d);return!0})),s)return cu||(cu=s,GC=performance.now(),cu.then(()=>{cu=null})),s.then(d=>d?(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}))):(_&&(_.retryRisk=(_.retryRisk||0)+xC/2),t?t.retries=n+1:t={retries:1},this.commit(t)));let l={txnTime:r};if(this.next){let d=this.next?.commit(t);if(d?.then)return d?.then(E=>({txnTime:r,next:E}));l.next=d}return l}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=0,this.writes=[]}},Sd=class extends no{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,lS.getNextMonotonicTime)())}getReadTxn(){}},E4=3e4;a(m4,"startMonitoringTxns");m4()});function rt(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===1&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let n=e.transaction=new no;e.timestamp&&(n.timestamp=e.timestamp),n[ye]=e,e.resourceCache||(e.resourceCache=[]);let s;try{if(s=t(n),s?.then)return s.then(i,o)}catch(c){o(c)}return i(s);function i(c){let u=n.commit({letItLinger:r?.letItLinger});return u.then?u.then(()=>c):c}function o(c){throw n.abort({}),c}}var YC,so=Re(()=>{YC=require("../index");cn();_S();a(rt,"transaction");(0,YC._assignPackageExport)("transaction",rt);rt.commit=function(e){let t=(e[ye]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};rt.abort=function(e){let t=(e[ye]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var eD={};Fe(eD,{ResourceBridge:()=>ES});function hS({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 WC(e,t){let r=ss(e),n=hS(e,r);if(!r)throw new Un.ClientError(`Table ${e.table} not found`);let s;n&&r.attributes.length-n.length>2&&n.length<5&&(s=!0);let i={user:e.hdb_user},o;rt(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:s,select:n},i);return l=l&&gd(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 ss(e){let t=e.database||e.schema||S4,r=mr()[t];if(!r)throw(0,Un.handleHDBError)(new Error,p4.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function QC(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}async function*zC(e,t,r){let n;for await(let s of e.getHistory(t,r)){let i=s.type;i==="put"&&(i="upsert");let{id:o,version:c,value:u}=s;n?.timestamp===c?(n.hash_values.push(o),n.records.push(u)):(n&&(yield n),n={operation:i,user_name:s.user,timestamp:c,hash_values:[o],records:[u]})}n&&(yield n)}var JC,Td,Un,jC,XC,vn,dS,fS,ZC,p4,S4,T4,g4,KC,ES,tD=Re(()=>{"use strict";JC=H(HC()),Td=H(ia()),Un=H(se());Ae();jC=H(kc()),XC=H($c()),vn=H(P()),dS=H(Ns()),fS=H(Pn()),ZC=H(z());so();Rd();({HDB_ERROR_MSGS:p4}=Un.hdb_errors),S4="data",T4=1e4,g4=10,ES=class extends JC.default{static{a(this,"ResourceBridge")}constructor(t){super(t),KC=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,Td.default)(t,"conditions");if(r)throw(0,Un.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=ss(t);if(!n)throw new Un.ClientError(`Table ${t.table} not found`);let s=t.conditions.map(i);function i(o){return o.conditions?(o.conditions=o.conditions.map(i),o):{attribute:o.search_attribute??o.attribute,comparator:o.search_type??o.comparator,value:o.search_value!==void 0?o.search_value:o.value}}return a(i,"mapCondition"),n.search({conditions:s,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:hS(t,n),sort:t.sort,allowFullScan:!0})}async createTable(t,r){let n=r.attributes,s=!!n,i=r.primary_key||r.hash_attribute;if(n)for(let o of n)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new Un.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");n=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}Et({database:r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration})}async createAttribute(t){return await ss(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=ss(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=a((o,c,u)=>(c=Object.assign({},c),delete c[n],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}))s=i(o,c,u),await new Promise(_=>setImmediate(_));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){ss(t).dropTable()}createSchema(t){return ua({database:t.schema,table:null}),dS.signalSchemaChange(new fS.SchemaEventMsg(process.pid,vn.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await mS(t.schema),dS.signalSchemaChange(new fS.SchemaEventMsg(process.pid,vn.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,KC.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,jC.default)(t);(0,XC.default)(t,n,r.primaryKey);let s,i=mr()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return rt(o,async c=>{if(!i.schemaDefined){s=[];for(let l of n)i.attributes.find(E=>E.name==l)||s.push(l);s.length>0&&await i.addAttributes(s.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=gd(d));for(let E in l)if(Object.prototype.hasOwnProperty.call(l,E)){let f=l[E];if(typeof f=="function")try{let h=f([[d]]);Array.isArray(h)&&(f=h[0].func_val,l[E]=f)}catch(h){throw h.message+="Trying to set key "+E+" on object"+JSON.stringify(l),h}}if(d)for(let E in d)Object.prototype.hasOwnProperty.call(l,E)||(l[E]=d[E]);await i.put(l,o),u.push(l[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:u,new_attributes:s,skipped_hashes:_}})}async deleteRecords(t){let r=mr()[t.schema][t.table],n={user:t.hdb_user};return rt(n,async s=>{let i=t.hash_values||t.records.map(u=>u[r.primaryKey]),o=[],c=[];for(let u of i)await r.delete(u,n)?o.push(u):c.push(u);return QC(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=mr()[t.schema][t.table];if(!r.createdTimeProperty)throw new Un.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let n=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:vn.VALUE_SEARCH_COMPARATORS.LESS}]}),s=!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,ZC.async_set_timeout)(g4),u=[],s=!0},"chunkDelete");for await(let l of n)u.push(l[r.primaryKey]),c++,c%T4===0&&await _();return u.length>0&&await _(),s?QC(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,Td.default)(t,"hashes");if(r)throw r;return WC(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of WC(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&vn.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);t.select!==void 0&&(t.get_attributes=t.select),t.attribute!==void 0&&(t.search_attribute=condition.attribute),t.value!==void 0&&(t.search_value=condition.value);let n=(0,Td.default)(t,"value");if(n)throw n;let s=ss(t);if(!s)throw new Un.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===vn.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return s.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:hS(t,s)})}async getDataByValue(t,r){let n=new Map,s=ss(t);t.get_attributes&&!t.get_attributes.includes(s.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(s.primaryKey);for await(let i of this.searchByValue(t,r))n.set(i[s.primaryKey],i);return n}resetReadTxn(t,r){ss({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return ss(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=ss(t),n={};switch(t.search_type){case vn.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)n[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.type;return c==="put"&&(c="upsert"),{operation:c,timestamp:o.version,user_name:o.user,hash_values:[i],records:[o.value]}});return n;case vn.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let s=t.search_values;for await(let i of zC(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return zC(r,t.search_values?.[0],t.search_values?.[1])}}};a(hS,"getSelect");a(WC,"getRecords");a(ss,"getTable");a(QC,"createDeleteResponse");a(zC,"groupRecordsInHistory")});var Dn=g((ife,rD)=>{"use strict";var{ResourceBridge:R4}=(tD(),ie(eD)),A4=ee();A4.initSync();var Ad;function O4(){return Ad||(Ad=new R4,Ad)}a(O4,"getBridge");rD.exports=O4()});var oD=g((afe,iD)=>{"use strict";var nD=require("lodash"),uu=require("mathjs"),b4=require("jsonata"),sD=z();iD.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?nD.uniqWith(e,nD.isEqual):e,searchJSON:y4,mad:lu.bind(null,uu.mad),mean:lu.bind(null,uu.mean),mode:lu.bind(null,uu.mode),prod:lu.bind(null,uu.prod),median:lu.bind(null,uu.median)};function lu(e,t,r,n){return n===1?t==null?[]:[t]:n===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(lu,"aggregateFunction");function y4(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(sD.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),sD.isEmpty(this.__ala__.res[r])){let n=b4(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(y4,"searchJSON")});var cD=g((ufe,aD)=>{"use strict";var Rt=require("moment"),pS="YYYY-MM-DDTHH:mm:ss.SSSZZ";Rt.suppressDeprecationWarnings=!0;aD.exports={current_date:()=>Rt().utc().format("YYYY-MM-DD"),current_time:()=>Rt().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return Rt(e).utc().format("YYYY");case"month":return Rt(e).utc().format("MM");case"day":return Rt(e).utc().format("DD");case"hour":return Rt(e).utc().format("HH");case"minute":return Rt(e).utc().format("mm");case"second":return Rt(e).utc().format("ss");case"millisecond":return Rt(e).utc().format("SSS");default:break}},date:e=>Rt(e).utc().format(pS),date_format:(e,t)=>Rt(e).utc().format(t),date_add:(e,t,r)=>Rt(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>Rt(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let n=Rt(e).utc(),s=Rt(t).utc();return r?n.diff(s,r,!0):n.diff(s)},now:()=>Rt().utc().valueOf(),get_server_time:()=>Rt().format(pS),offset_utc:(e,t)=>Rt(e).utc().utcOffset(t).format(pS)}});var dD=g((lfe,_D)=>{"use strict";var N4=require("@turf/area"),I4=require("@turf/length"),w4=require("@turf/circle"),C4=require("@turf/difference"),D4=require("@turf/distance"),L4=require("@turf/boolean-contains"),M4=require("@turf/boolean-equal"),P4=require("@turf/boolean-disjoint"),U4=require("@turf/helpers"),uD=P(),Te=z(),Cs=$();_D.exports={geoArea:v4,geoLength:B4,geoCircle:H4,geoDifference:x4,geoDistance:lD,geoNear:G4,geoContains:q4,geoEqual:F4,geoCrosses:k4,geoConvert:V4};function v4(e){if(Te.isEmpty(e))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e));try{return N4.default(e)}catch(t){return Cs.trace(t,e),NaN}}a(v4,"geoArea");function B4(e,t){if(Te.isEmpty(e))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e));try{return I4.default(e,{units:t||"kilometers"})}catch(r){return Cs.trace(r,e),NaN}}a(B4,"geoLength");function H4(e,t,r){if(Te.isEmpty(e))return NaN;if(Te.isEmpty(t))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e));try{return w4.default(e,t,{units:r||"kilometers"})}catch(n){return Cs.trace(n,e,t),NaN}}a(H4,"geoCircle");function x4(e,t){if(Te.isEmpty(e))return NaN;if(Te.isEmpty(t))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return C4(e,t)}catch(r){return Cs.trace(r,e,t),NaN}}a(x4,"geoDifference");function lD(e,t,r){if(Te.isEmpty(e))return NaN;if(Te.isEmpty(t))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return D4.default(e,t,{units:r||"kilometers"})}catch(n){return Cs.trace(n,e,t),NaN}}a(lD,"geoDistance");function G4(e,t,r,n){if(Te.isEmpty(e)||Te.isEmpty(t))return!1;if(Te.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return lD(e,t,n)<=r}catch(s){return Cs.trace(s,e,t),!1}}a(G4,"geoNear");function q4(e,t){if(Te.isEmpty(e)||Te.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return L4.default(e,t)}catch(r){return Cs.trace(r,e,t),!1}}a(q4,"geoContains");function F4(e,t){if(Te.isEmpty(e)||Te.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return M4.default(e,t)}catch(r){return Cs.trace(r,e,t),!1}}a(F4,"geoEqual");function k4(e,t){if(Te.isEmpty(e)||Te.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return!P4.default(e,t)}catch(r){return Cs.trace(r,e,t),!1}}a(k4,"geoCrosses");function V4(e,t,r){if(Te.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(Te.isEmpty(t))throw new Error("geo_type is required");if(Te.isEmpty(uD.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(uD.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Te.autoCastJSON(e)),U4[t](e,r)}a(V4,"geoConvert")});var Od=g((dfe,fD)=>{var io=oD(),Kr=cD(),is=dD();fD.exports=e=>{e.aggr.mad=e.aggr.MAD=io.mad,e.aggr.mean=e.aggr.MEAN=io.mean,e.aggr.mode=e.aggr.MODE=io.mode,e.aggr.prod=e.aggr.PROD=io.prod,e.aggr.median=e.aggr.MEDIAN=io.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=io.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=io.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Kr.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Kr.current_time,e.fn.extract=e.fn.EXTRACT=Kr.extract,e.fn.date=e.fn.DATE=Kr.date,e.fn.date_format=e.fn.DATE_FORMAT=Kr.date_format,e.fn.date_add=e.fn.DATE_ADD=Kr.date_add,e.fn.date_sub=e.fn.DATE_SUB=Kr.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Kr.date_diff,e.fn.now=e.fn.NOW=Kr.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Kr.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Kr.get_server_time,e.fn.getdate=e.fn.GETDATE=Kr.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Kr.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=is.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=is.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=is.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=is.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=is.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=is.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=is.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=is.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=is.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=is.geoNear}});var pD=g((ffe,mD)=>{"use strict";var _u=require("lodash"),pr=require("alasql");pr.options.cache=!1;var $4=Od(),ED=require("clone"),bd=require("recursive-iterator"),fe=$(),Le=z(),la=Dn(),Y4=P(),{hdb_errors:K4}=se(),{getDatabases:hD}=(Ae(),ie(ke)),W4="IS NULL",Bn="There was a problem performing this search. Please check the logs and try again.";$4(pr);var SS=class{static{a(this,"SQLSearch")}constructor(t,r){if(Le.isEmpty(t))throw fe.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),Le.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!Le.isEmptyOrZeroLength(n))return fe.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw fe.error("Error thrown from checkEmptySQL in SQLSearch class method search."),fe.error(n),new Error(Bn)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw fe.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),fe.error(n),new Error(Bn)}if(Object.keys(this.data).length===0)return fe.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw fe.error("Error thrown from processJoins in SQLSearch class method search."),fe.error(n),new Error(Bn)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw fe.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),fe.error(n),new Error(Bn)}try{return t=await this._finalSQL(),t}catch(n){throw fe.error("Error thrown from finalSQL in SQLSearch class method search."),fe.error(n),new Error(Bn)}}_getColumns(){let t=new bd(this.statement);for(let{node:r,path:n}of t)r&&r.columnid&&(this.columns[n[0]]||(this.columns[n[0]]=[]),this.columns[n[0]].push(ED(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=_u.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let n=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[n]={},this.data[n].__hash_name=hD()[r.databaseid][r.tableid].primaryKey,this.data[n].__merged_data={},this.data[n].__merged_attributes=[],this.data[n].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(Le.isEmpty(this.statement.where)){fe.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new bd(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!Le.isEmpty(r)&&r.right)if(Le.isNotEmptyAndHasValue(r.right.value)){let n=Le.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new pr.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=Le.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new pr.yy.LogicValue({value:i}):n instanceof pr.yy.StringValue&&Le.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new pr.yy.NumValue({value:i}))});if(t){fe.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new bd(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let n=new Set,s=r.left.columnid?r.left:r.right,i=this._findColumn(s);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!Le.isEmpty(Y4.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(Le.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(Le.isEmptyOrZeroLength(r.left.columnid)||Le.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[o].ignore=!0,this.comparator_search_values[o].comparators=[];continue}this.comparator_search_values[o].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(Le.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let c=!1;switch(r.op){case"=":!Le.isEmpty(r.right.value)||!Le.isEmpty(r.left.value)?n.add(Le.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let u=Array.isArray(r.right)?r.right:r.left;for(let _=0;_<u.length;_++)if(u[_].value)n.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,...n])}}}_setAliasesForColumns(){if(Le.isEmptyOrZeroLength(this.all_table_attributes)&&Le.isEmptyOrZeroLength(this.statement.from)&&Le.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((n,s)=>{if(n.columnid==="*"){t.push(s);return}if(n.aggregatorid&&(this.has_aggregator=!0),!n.aggregatorid&&!n.funcid)if(n.as_orig=n.as?n.as:n.columnid,this.statement.joins)if(r[n.as_orig]>=0){let i=r[n.as_orig]+1;n.as=`[${n.as_orig+i}]`,r[n.as_orig]=i}else n.as=`[${n.as_orig}]`,r[n.as_orig]=0;else n.as=`[${n.as_orig}]`;!n.aggregatorid&&n.funcid&&n.args&&(n.as_orig=n.as?n.as:n.toString().replace(/'/g,'"'),n.as=`[${n.as_orig}]`),n.aggregatorid&&n.expression.columnid!=="*"&&(n.as_orig=n.as?n.as:n.expression.tableid?`${n.aggregatorid}(${n.expression.tableid}.${n.expression.columnid})`:`${n.aggregatorid}(${n.expression.columnid})`,n.as=`[${n.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&_u.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(n=>{if(t.columnid_orig&&t.tableid_orig)return(n.table.as===t.tableid_orig||n.table.tableid===t.tableid_orig)&&n.attribute===t.columnid_orig;if(t.tableid)return(n.table.as===t.tableid||n.table.tableid===t.tableid)&&n.attribute===t.columnid;let s=t.columnid_orig?t.columnid_orig:t.columnid;return n.attribute===s});if(Le.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);Le.isEmptyOrZeroLength(n)||(r=this.all_table_attributes.filter(s=>s.attribute===n[0].columnid&&n[0].tableid&&n[0].tableid===(s.table.as?s.table.as:s.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(Le.isEmptyOrZeroLength(this.all_table_attributes)&&!Le.isEmptyOrZeroLength(this.columns.columns))return t;if(Le.isEmptyOrZeroLength(this.all_table_attributes)&&Le.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await pr.promise(r)}catch(r){throw fe.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),fe.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let n=this._findColumn(r);n&&this.fetch_attributes.push(ED(n))})}_addColumnToMergedAttributes(t,r){this.data[t].__merged_attributes.push(r),this.data[t].__merged_attr_map[r]=this.data[t].__merged_attributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__merged_data[r].splice(0,1,r)}_updateMergedAttribute(t,r,n,s){let i=this.data[t].__merged_attr_map[n];this.data[t].__merged_data[r].splice(i,1,s)}async _getFetchAttributeValues(){if(Le.isEmptyOrZeroLength(Object.keys(this.columns)))return[];this._addFetchColumns(this.columns.joins);let t=null;try{t=this.statement.where?this.statement.where.toString():""}catch{throw new Error("Could not generate proper where clause")}this.columns.where&&this._addFetchColumns(this.columns.where);let r=this._isSimpleSelect();if(r?this._addFetchColumns(this.columns.columns):(!this.columns.where&&this.fetch_attributes.length===0)|t.indexOf(W4)>-1&&this.tables.forEach(s=>{let i={columnid:hD()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=_u.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return s[o]||(s[o]=[],s[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(s[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,o=this.data[i].__hash_name,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},u=!1,_=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(u=!0),!Le.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!Le.isEmptyOrZeroLength(this.exact_search_values[_].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[_].values);let l=await la.getDataByHash(c);for(let d of c.hash_values)l.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d))}catch(l){throw fe.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),fe.error(l),new Error(Bn)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[_].values).map(async l=>{let d=Object.assign({},c);d.search_value=l;let E=await la.getDataByValue(d);for(let[f,h]of E)this.data[i].__merged_data[f]?this._updateMergedAttribute(i,f,s.attribute,h[s.attribute]):(this.data[i].__merged_data[f]=[...n[i]],this._updateMergedAttribute(i,f,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,f))}))}catch(l){throw fe.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),fe.error(l),new Error(Bn)}else if(!Le.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!Le.isEmptyOrZeroLength(this.comparator_search_values[_].comparators))try{let l=this.comparator_search_values[_].comparators;for(let d=0,E=l.length;d<E;d++){let f=l[d];c.search_attribute=f.attribute,c.search_value=f.search_value;let h=await la.getDataByValue(c,f.operation);if(u)for(let[p]of h)this.data[i].__merged_data[p]||(this.data[i].__merged_data[p]=[...n[i]],this._setMergedHashAttribute(i,p));else for(let[p,S]of h)this.data[i].__merged_data[p]?this._updateMergedAttribute(i,p,s.attribute,S[s.attribute]):(this.data[i].__merged_data[p]=[...n[i]],this._updateMergedAttribute(i,p,s.attribute,S[s.attribute]),this._setMergedHashAttribute(i,p))}}catch(l){throw fe.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),fe.error(l),new Error(Bn)}else try{c.search_attribute=s.attribute,c.search_value="*";let l=await la.getDataByValue(c);if(u)for(let[d]of l)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d));else for(let[d,E]of l)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,s.attribute,E[s.attribute]):(this.data[i].__merged_data[d]=[...n[i]],this._updateMergedAttribute(i,d,s.attribute,E[s.attribute]),this._setMergedHashAttribute(i,d))}catch(l){throw fe.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),fe.error(l),new Error(Bn)}}}_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 pr.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(s=>{let i=s.aggregatorid?s.expression:s,o=s.aggregatorid?s.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===o});r[0]||r.push(this._findColumn(t.expression));let n=r[0];if(t.is_func=!!n.funcid,t.is_aggregator=!!n.aggregatorid,n.as)if(n.as&&!t.expression.tableid)t.expression.columnid=n.as,t.expression.columnid_orig=n.as_orig;else{let s=new pr.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new pr.yy.Column,t.expression),t.initial_select_column.as=`[${t.expression.columnid_orig}]`,t.expression.columnid=t.initial_select_column.as;return}if(!t.is_aggregator){let s=t.is_func?new pr.yy.FuncValue:new pr.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(f=>{f.joinmode&&f.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(f.table);let h=f.joinmode+" JOIN ? AS "+(f.as?f.as:f.table.tableid);f.on&&(h+=" ON "+f.on.toString()),i.push(h),t.push(Object.values(this.data[`${f.table.databaseid_orig}_${f.table.as?f.table.as_orig:f.table.tableid_orig}`].__merged_data))});let o=[],c={};s.forEach(f=>{let h=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__hash_name,p=f.as?f.as_orig:f.tableid_orig;o.push({key:`'${p}.${h}'`,schema:f.databaseid_orig,table:f.as?f.as_orig:f.tableid_orig,keys:new Set}),r.push(`${f.as?f.as:f.tableid}.\`${h}\` AS "${p}.${h}"`),c[f.as?f.as_orig:f.tableid_orig]=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.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(f=>{f.is_func?r.push(f.initial_select_column.toString()):f.initial_select_column.tableid?r.push(`${f.initial_select_column.tableid}.${f.initial_select_column.columnid} AS ${f.expression.columnid}`):r.push(`${f.initial_select_column.columnid} AS ${f.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 E=[];try{let f=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${u} ${_} ${l} ${d}`,h=this._convertColumnsToIndexes(f,s);E=await pr.promise(h,t),t=null}catch(f){throw fe.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),fe.error(f),new Error("There was a problem processing the data.")}if(E&&E.length>0){for(let f=0,h=E.length;f<h;f++){let p=E[f];o.forEach(S=>{p[S.key]!==null&&p[S.key]!==void 0&&S.keys.add(p[S.key])})}o.forEach(f=>{let h=Object.keys(this.data[`${f.schema}_${f.table}`].__merged_data),p=_u.difference(h,[...f.keys].map(S=>S.toString()));for(let S=0,T=p.length;S<T;S++){let R=p[S];delete this.data[`${f.schema}_${f.table}`].__merged_data[R]}})}return{existing_attributes:c,joined_length:E?E.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new bd(this.columns);for(let{node:i}of s)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&n.push(o)}}n=_u.uniqBy(n,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(n)}catch(i){throw fe.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),fe.error(i),new Error(Bn)}}async _getData(t){try{let r=t.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]?n[i].columns.push(s.attribute):n[i]={schema:s.table.databaseid,table:s.table.tableid,columns:[s.attribute]},n},{});for(let n in r){let s=r[n],i=this.data[n].__merged_data,o=[];for(let l in i)o.push(i[l][0]);this.data[n].__merged_attributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:o,get_attributes:s.columns},u=await la.getDataByHash(c),_=s.columns.length;for(let l=0,d=o.length;l<d;l++){let E=o[l],f=u.get(E);for(let h=0;h<_;h++){let p=s.columns[h],S=f[p]===void 0?null:f[p];this.data[n].__merged_data[E].push(S)}}}}catch(r){throw fe.error("Error thrown from getDataByHash function in SQLSearch class method getData."),fe.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(s=>{s.as=s.as?s.as:s.table.tableid,t.push(Object.values(this.data[`${s.table.databaseid_orig}_${s.table.as?s.table.as_orig:s.table.tableid_orig}`].__merged_data)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,u=o.aggregatorid?o.as_orig:c.as_orig;return s.expression.tableid?c.columnid_orig===s.expression.columnid_orig&&c.tableid_orig===s.expression.tableid_orig:c.columnid_orig===s.expression.columnid_orig||s.expression.columnid_orig===u}).length===0&&(s.expression.columnid=s.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let n;try{let s=this._buildSQL();fe.trace(`Final SQL: ${s}`),n=await pr.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),fe.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw fe.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),fe.error(s),new Error("There was a problem running the generated sql.")}return n}_translateUndefinedValues(t){try{let r=[];for(let n of t){let s=Object.create(null);Object.keys(n).forEach(i=>{n[i]===void 0?s[i]=null:s[i]=n[i]}),r.push(s)}return r}catch(r){return fe.error(K4.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),fe.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return r=r.replace(/NOT\(NULL\)/g,"NOT NULL"),this.statement.columns.forEach(n=>{if(n.funcid&&n.as){let s=n.toString().replace(" AS "+n.as,"");r=r.replace(n.toString(),s)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let n=t,s={};r.forEach(i=>{i.databaseid_orig?s[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:s[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=s[i],_=new RegExp(`${u}.\`${o}\``,"g"),l=`${u}.[${c}]`;n=n.replace(_,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=new RegExp(`\`${o}\``,"g"),_=`[${c}]`;n=n.replace(u,_)});return n}async _simpleSQLQuery(){let t=this.statement.columns.reduce((n,s)=>(s.as_orig&&s.as_orig!=s.columnid_orig?n[s.columnid_orig]=s.as_orig:n[s.columnid_orig]||(n[s.columnid_orig]=s.columnid_orig),n),{}),r=this.fetch_attributes.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]||(n[i]={}),n[i][t[s.attribute]]=null,n},{});for(let n of this.fetch_attributes){let s=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,i={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]};try{i.search_attribute=n.attribute,i.search_value="*";let o=await la.getDataByValue(i);for(let[c,u]of o)this.data[s].__merged_data[c]||(u[n.attribute]===void 0&&(u[n.attribute]=null),this.data[s].__merged_data[c]=Object.assign({},r[s])),this.data[s].__merged_data[c][t[n.attribute]]=u[n.attribute]??null}catch(o){throw fe.error("There was an error when processing this SQL operation. Check your logs"),fe.error(o),new Error(Bn)}}return Object.values(Object.values(this.data)[0].__merged_data)}};mD.exports=SS});var Gr=g((hfe,SD)=>{"use strict";var Q4=Wb();SD.exports={searchByConditions:J4,searchByHash:j4,searchByValue:X4,search:Z4};var TS=Dn(),{transformReq:gS}=z(),z4=pD();async function J4(e){return gS(e),TS.searchByConditions(e)}a(J4,"searchByConditions");async function j4(e){gS(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of TS.searchByHash(e))r&&t.push(r);return t}a(j4,"searchByHash");async function X4(e){gS(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of TS.searchByValue(e))t.push(r);return t}a(X4,"searchByValue");function Z4(e,t){try{let r=new Q4(e);r.validate(),new z4(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(Z4,"search")});var yd=g((pfe,TD)=>{"use strict";var e3=Dn();TD.exports={writeTransaction:t3};function t3(e,t,r){return e3.writeTransaction(e,t,r)}a(t3,"writeTransaction")});var OD=g((gfe,AD)=>{"use strict";var r3=Gr(),n3=ys(),gD=$(),s3=qr(),Tfe=yd(),i3=require("clone"),AS=require("alasql"),o3=Od(),RD=require("util"),a3=RD.promisify(n3.getTableSchema),c3=RD.promisify(r3.search),u3=P(),RS=z();o3(AS);AD.exports={update:_3};var l3="There was a problem performing this update. Please check the logs and try again.";async function _3({statement:e,hdb_user:t}){let r=await a3(e.table.databaseid,e.table.tableid),n=d3(e.columns);RS.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=i3(s),c=RS.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,_=AS.parse(u).statements[0],l=await c3(_),d=f3(n,l);return E3(o,d,t)}a(_3,"update");function d3(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=AS.compile(`SELECT ${r.expression.toString()} AS [${u3.FUNC_VAL}] FROM ?`)}),t}catch(t){throw gD.error(t),new Error(l3)}}a(d3,"createUpdateRecord");function f3(e,t){return RS.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(f3,"buildUpdateRecords");async function E3(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await s3.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){gD.error(`Error delete new_attributes from update response: ${i}`)}return s}a(E3,"updateRecords")});var yD=g((bfe,bD)=>{var h3=require("alasql"),m3=Gr(),p3=$(),S3=Dn(),bS=require("util"),OS=z(),T3=P(),g3=ys(),Afe=yd(),Ofe=qr(),R3="record",A3="successfully deleted",O3=bS.callbackify(I3),b3=bS.promisify(m3.search),y3=bS.promisify(g3.getTableSchema);bD.exports={convertDelete:O3};function N3(e){return`${e.deleted_hashes.length} ${R3}${e.deleted_hashes.length===1?"":"s"} ${A3}`}a(N3,"generateReturnMessage");async function I3({statement:e,hdb_user:t}){let r=await y3(e.table.databaseid,e.table.tableid);OS.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=OS.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=h3.parse(o).statements[0],u={operation:T3.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{u.records=await b3(c);let _=await S3.deleteRecords(u);return OS.isEmptyOrZeroLength(_.message)&&(_.message=N3(_)),delete _.txn_time,_}catch(_){throw p3.error(_),_.hdb_code?_.message:_}}a(I3,"convertDelete")});var DD=g((Nfe,CD)=>{"use strict";var w3=bs(),{hdb_errors:ND}=se(),{getDatabases:ID}=(Ae(),ie(ke));CD.exports={checkSchemaExists:wD,checkSchemaTableExists:C3,schema_describe:w3};async function wD(e){if(!ID()[e])return ND.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(wD,"checkSchemaExists");async function C3(e,t){let r=await wD(e);if(r)return r;if(!ID()[e][t])return ND.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(C3,"checkSchemaTableExists")});var du=g((wfe,D3)=>{D3.exports={name:"harperdb",version:"4.3.24",description:"HarperDB is a distributed database, caching service, streaming broker, and application development platform focused on performance and ease of use.",keywords:["database","nosql","api","distributed","broker","mqtt","real-time","enterprise","Fastify","NATS","HarperDB","Harper","clustering","replication","REST","WebSockets","decentralized","server-sent events","document store"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{"minimum-node":"16.0.0","go-lang":"1.21.7","nats-server":"2.10.11"},exports:{".":"./index.js"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"SEE LICENSE IN LICENSE",scripts:{submodules:"git submodule update --init --recursive",build:"eslint -c ./.eslintbuild bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/","cover:test":"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && nyc --no-clean --reporter=lcovonly npm run test:apitests && nyc --no-clean --reporter=lcovonly npm run test:resources && nyc --no-clean --reporter=lcovonly npm run test:logging && nyc --no-clean --reporter=lcovonly npm run test:upgrade && nyc --no-clean --reporter=lcovonly npm run test:nats && nyc --no-clean --reporter=lcovonly npm run test:cfserver && nyc --no-clean --reporter=lcovonly npm run test:hdbserver && nyc --no-clean --reporter=lcovonly npm run test:bin && nyc --no-clean --reporter=lcovonly npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license",test:"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && npm run test:apitests && npm run test:resources && npm run test:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:bin && npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:resources":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/resources/**/*.js' --config '../unitTests/.mocharc.json'","test:bin":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/bin/**/*.js' --config '../unitTests/.mocharc.json'","test:main":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","test:lmdbbridge":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","test:lmdbutility":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","test:hdbserver":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","test:cfserver":"npm run submodules && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/fastifyRoutes/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","test:nats":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","test:upgrade":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","test:apitests":"pm2 kill && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*-test.mjs' --config '../unitTests/.mocharc.json'","test:logging":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test"},dependencies:{"@aws-sdk/client-s3":"3.635.0","@aws-sdk/lib-storage":"3.635.0","@endo/static-module-record":"^1.0.4","@fastify/autoload":"5.7.1","@fastify/compress":"~6.5.0","@fastify/cors":"~8.5.0","@fastify/static":"~6.12.0","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"4.1.10","cbor-x":"1.5.8",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2","fast-glob":"3.3.2",fastify:"~4.26.2","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.12.2","json-bigint-fixes":"1.1.0",json2csv:"5.0.7",jsonata:"1.8.7",jsonwebtoken:"9.0.2",lmdb:"3.0.14",lodash:"4.17.21",mathjs:"11.12.0",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.30.1","mqtt-packet":"~8.2.1",msgpackr:"1.10.1",nats:"2.19.0",needle:"3.3.1","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.4.1",prompt:"1.3.0","properties-reader":"2.3.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^0.18.0","serve-static":"1.15.0",ses:"1.1.0","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.22.9","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.1","validate.js":"0.13.1",ws:"8.17.1",yaml:"2.4.1"},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.8",chai:"4.4.1","chai-integer":"0.1.0",esbuild:"^0.20.2",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.3.0","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",mqtt:"~4.3.8",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.4.2","why-is-node-still-running":"^1.0.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","utf-8-validate":"^5.0.10"}}});var pu={};Fe(pu,{addAnalyticsListener:()=>mu,recordAction:()=>Sr,recordActionBinary:()=>Wr,setAnalyticsEnabled:()=>L3});function L3(e){GD=e}function Sr(e,t,r,n,s){if(!GD)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=wd.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:n,type:s},wd.set(i,o)}Nd||M3()}function Wr(e,t,r,n,s){Sr(!!e,t,r,n,s)}function mu(e){kD.push(e)}function M3(){Nd=performance.now(),setTimeout(async()=>{let e=performance.now()-Nd;Nd=0;let t=[],r={time:Date.now(),period:e,threadId:oo.threadId,metrics:t};for(let[s,i]of wd){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 VD){let E=Math.floor(c*d),f=o[E-1];if(E>u){let h=E-u;if(f===l){let p=_[_.length-1];typeof p=="number"?_[_.length-1]={value:p,count:1+h}:p.count+=h}else _.push(h>1?{value:f,count:h}:f),l=f;u=E}}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 $D()}let n=process.memoryUsage();t.push({metric:"memory",threadId:oo.threadId,byThread:!0,...n});for(let s of kD)s(t);wd=new Map,oo.parentPort?oo.parentPort.postMessage({type:FD,report:r}):WD({report:r})},qD).unref()}async function P3(e,t=6e4){let r=IS(),n=YD(),s=new Promise(p=>{let S=performance.now();setImmediate(()=>{let T=performance.now();T-S>5e3&&(0,fu.warn)("Unusually high event queue latency on the main thread of "+Math.round(T-S)+"ms"),S=performance.now()}),n.primaryStore.prefetch([1],()=>{let T=performance.now();T-S>5e3&&(0,fu.warn)("Unusually high task queue latency on the main thread of "+Math.round(T-S)+"ms"),p(T-S)})}),i;for(let p of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(p.value?.time){i=p.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,u=new Map,_=[],l;for(let{key:p,value:S}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!S)continue;if(o){if(p>o+t)break}else o=p;l=p;let{metrics:T,threadId:R}=S;for(let N of T||[]){let{path:b,method:x,type:U,metric:F,count:M,total:Q,distribution:J,threads:j,...ae}=N;M||(M=1);let ce=F+(b?"-"+b:"");x!==void 0&&(ce+="-"+x),U!==void 0&&(ce+="-"+U);let de=c.get(ce);if(de){if(de.threads){let Ne=de.threads[R];if(Ne)de=Ne;else{de.threads[R]=Object.assign({},ae);continue}}de.count||(de.count=1);let Be=de.count;for(let Ne in ae){let He=ae[Ne];typeof He=="number"&&(de[Ne]=(de[Ne]*Be+He*M)/(Be+M))}de.count+=M,Q>=0&&(de.total+=Q,de.ratio=de.total/de.count)}else de=Object.assign({period:t},N),delete de.distribution,c.set(ce,de),de.byThread&&(de.threads=[],de.threads[R]=Object.assign({},ae),_.push(de));if(J){J=J.map(Ne=>typeof Ne=="number"?{value:Ne,count:1}:Ne);let Be=u.get(ce);Be?Be.push(...J):u.set(ce,J)}}await $D()}for(let p of _){let{path:S,method:T,type:R,metric:N,count:b,total:x,distribution:U,threads:F,...M}=p;F=F.filter(Q=>Q);for(let Q in M){if(typeof p[Q]!="number")continue;let J=0;for(let j of F){let ae=j[Q];typeof ae=="number"&&(J+=ae)}p[Q]=J}p.count=F.length,delete p.threads,delete p.byThread}for(let[p,S]of u){let T=c.get(p);S.sort((Ne,He)=>Ne.value>He.value?1:-1);let R=T.count-1,N=[],b=0,x=0,U;for(let Ne of VD){let He=R*Ne;for(;b<He;)U=S[x++],b+=U.count,x===1&&b--;let n_=S[x>1?x-2:0];U||(U=S[0]),N.push(U.value-(U.value-n_.value)*(b-He)/U.count)}let[F,M,Q,J,j,ae,ce,de,Be]=N;Object.assign(T,{p1:F,p10:M,p25:Q,median:J,p75:j,p90:ae,p95:ce,p99:de,p999:Be})}let d;for(let[p,S]of c)S.id=(0,Id.getNextMonotonicTime)(),S.time=l,n.primaryStore.put(S.id,S,{append:!0}).then(T=>{T||n.primaryStore.put(S.id,S)}),d=!0;let E=Date.now(),{idle:f,active:h}=performance.eventLoopUtilization();if(d||h*10>f){let p=(0,Id.getNextMonotonicTime)(),S={id:p,metric:"main-thread-utilization",idle:f-LD,active:h-MD,taskQueueLatency:await s,time:E,...process.memoryUsage()};n.primaryStore.put(p,S,{append:!0}).then(T=>{T||n.primaryStore.put(p,S)})}LD=f,MD=h}async function PD(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function IS(){return UD||(UD=Et({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function YD(){return vD||(vD=Et({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function B3(){KD=!0;let e=(0,hu.get)(NS.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await P3(qD,e),await PD(IS(),U3),await PD(YD(),v3)},Math.min(e/2,2147483647)).unref()}function WD(e,t){let r=e.report;r.threadId=t?.threadId||oo.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(BD+=n.mean*n.count);r.totalBytesProcessed=BD,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(HD.get(t))}),HD.set(t,t.performance.eventLoopUtilization())),r.id=(0,Id.getNextMonotonicTime)(),IS().primaryStore.put(r.id,r),KD||B3(),H3&&(QD=G3(r))}async function G3(e){if(await QD,!fi){let r=(0,Eu.dirname)((0,fu.getLogFilePath)());try{fi=await(0,yS.open)((0,Eu.join)(r,"analytics.log"),"r+")}catch{fi=await(0,yS.open)((0,Eu.join)(r,"analytics.log"),"w+")}}let t=(await fi.stat()).size;if(t>x3){let r=Buffer.alloc(t);await fi.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await fi.write(r,{position:0}),await fi.truncate(r.length),t=r.length}await fi.write(JSON.stringify(e)+`
|
|
8
|
-
`,t)}var oo,xD,fu,Eu,yS,Id,hu,NS,wd,GD,Nd,qD,FD,kD,VD,LD,MD,$D,
|
|
6
|
+
`)},iK="certificate.pem",oK="privateKey.pem",aK="ca.pem";MN.exports={CERTIFICATE_VALUES:sK,CERTIFICATE_PEM_NAME:iK,PRIVATEKEY_PEM_NAME:oK,CA_PEM_NAME:aK}});var op=g((ple,GN)=>{"use strict";var HN=require("fs-extra"),oe=require("joi"),cK=require("os"),{boolean:be,string:er,number:tt,array:z_}=oe.types(),{totalmem:UN}=require("os"),zi=require("path"),uK=$(),J_=z(),mle=PN(),vN=P(),lK=Xe(),BN="log",_K="components",dK="Invalid logging.rotation.maxSize unit. Available units are G, M or K",fK="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",EK="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",hK="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",mK="rootPath config parameter is undefined",pK="clustering.enabled config parameter is undefined",Ji=tt.min(0).required(),j_=z_.items({host:er.required(),port:Ji}).empty(null),Zn,xN=!1;GN.exports={configValidator:SK,routesValidator:bK,route_constraints:j_};function SK(e,t=!1){if(xN=t,Zn=e.rootPath,J_.isEmpty(Zn))throw mK;let r=be.required(),n=tt.min(0).max(1e3).empty(null).default(OK),s=er.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Wc),i=er.optional().empty(null),o=er.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=oe.string().empty(null).default(Wc),u=oe.custom(gK).empty(null).default(Wc),_=e.clustering?.enabled;if(J_.isEmpty(_))throw pK;let l=oe.object({certificate:i,certificateAuthority:i,privateKey:i}),d;return _===!0?d=oe.object({enabled:r,hubServer:oe.object({cluster:oe.object({name:oe.required().empty(null),network:oe.object({port:Ji,routes:j_}).required()}).required(),leafNodes:oe.object({network:oe.object({port:Ji}).required()}).required(),network:oe.object({port:Ji}).required()}).required(),leafServer:oe.object({network:oe.object({port:Ji,routes:j_}).required(),streams:oe.object({maxAge:tt.min(120).allow(null).optional(),maxBytes:tt.min(1).allow(null).optional(),maxMsgs:tt.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:oe.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:be.optional(),databaseLevel:be.optional(),tls:oe.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:be.required(),verify:be.optional()}),user:er.optional().empty(null)}).required():d=oe.object({enabled:r,tls:oe.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:be.required()})}).required(),oe.object({authentication:oe.object({authorizeLocal:be,cacheTTL:tt.required(),enableSessions:be}),analytics:oe.object({aggregatePeriod:tt}),componentsRoot:s.optional(),clustering:d,localStudio:oe.object({enabled:r}).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:er.custom(AK).optional().empty(null),maxSize:er.custom(RK).optional().empty(null),path:er.optional().empty(null).default(Wc)}).required(),root:s,stdStreams:be.required(),auditLog:be.required()}).required(),operationsApi:oe.object({network:oe.object({cors:be.optional(),corsAccessList:z_.optional(),headersTimeout:tt.min(1).optional(),keepAliveTimeout:tt.min(1).optional(),port:tt.optional().empty(null),domainSocket:oe.optional().empty("hdb/operations-server").default(Wc),securePort:tt.optional().empty(null),timeout:tt.min(1).optional()}).optional(),tls:oe.alternatives([oe.array().items(l),l])}).required(),rootPath:er.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:oe.object({network:oe.object({port:Ji,securePort:Ji,mtls:oe.alternatives([be.optional(),oe.object({user:er.optional(),certificateAuthority:i,required:be.optional()})])}).required(),webSocket:be.optional(),requireAuthentication:be.optional()}),http:oe.object({compressionThreshold:tt.optional(),cors:be.optional(),corsAccessList:z_.optional(),headersTimeout:tt.min(1).optional(),port:tt.min(0).optional().empty(null),securePort:tt.min(0).optional().empty(null),maxHeaderSize:tt.optional(),mtls:oe.alternatives([be.optional(),oe.object({user:er.optional(),certificateAuthority:i,required:be.optional()})]),threadRange:oe.alternatives([z_.optional(),er.optional()])}).required(),threads:oe.alternatives(n.optional(),oe.object({count:n.optional(),debug:oe.alternatives(be.optional(),oe.object({startingPort:tt.min(1).optional(),host:er.optional(),waitForDebugger:be.optional()})),maxHeapMemory:tt.min(0).optional()})),storage:oe.object({writeAsync:be.required(),overlappingSync:be.optional(),caching:be.optional(),compression:oe.alternatives([be.optional(),oe.object({dictionary:er.optional(),threshold:tt.optional()})]),compactOnStart:be.optional(),compactOnStartKeepBackup:be.optional(),noReadAhead:be.optional(),path:u,prefetchWrites:be.optional(),maxFreeSpaceToLoad:tt.optional(),maxFreeSpaceToRetain:tt.optional()}).required(),ignoreScripts:be.optional(),tls:oe.alternatives([oe.array().items(l),l])}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(SK,"configValidator");function TK(e){return xN||HN.existsSync(e)?null:`Specified path ${e} does not exist.`}a(TK,"doesPathExist");function gK(e,t){oe.assert(e,er.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=TK(e);if(r)return t.message(r)}a(gK,"validatePath");function RK(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(dK);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(EK):e}a(RK,"validateRotationMaxSize");function AK(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(fK);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(hK):e}a(AK,"validateRotationInterval");function OK(e,t){let r=t.state.path.join("."),n=cK.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||UN();return i=Math.round(Math.min(i,UN())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),uK.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(OK,"setDefaultThreads");function Wc(e,t){let r=t.state.path.join(".");if(!J_.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(J_.isEmpty(Zn))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return zi.join(Zn,_K);case"logging.root":return zi.join(Zn,BN);case"clustering.leafServer.streams.path":return zi.join(Zn,"clustering","leaf");case"storage.path":let n=zi.join(Zn,vN.LEGACY_DATABASES_DIR_NAME);return HN.existsSync(n)?n:zi.join(Zn,vN.DATABASES_DIR_NAME);case"logging.rotation.path":return zi.join(Zn,BN);case"operationsApi.network.domainSocket":return r==null?null:zi.join(Zn,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Wc,"setDefaultRoot");function bK(e){let t=oe.object({routes:j_});return lK.validateBySchema({routes:e},t)}a(bK,"routesValidator")});var Er=g((gle,QN)=>{"use strict";var kr=P(),Bt=z(),It=$(),{configValidator:yK,routesValidator:qN}=op(),fr=require("fs-extra"),NK=require("yaml"),Ln=require("path"),IK=require("is-number"),kN=require("properties-reader"),wK=require("lodash"),{handleHDBError:CK}=se(),{HTTP_STATUS_CODES:DK,HDB_ERROR_MSGS:X_}=Ur(),Tle=require("minimist"),{server:LK}=(lr(),ie(Gi)),{DATABASES_PARAM_CONFIG:Qc,CONFIG_PARAMS:Fr,CONFIG_PARAM_MAP:Mn}=kr,MK="Unable to get config value because config is uninitialized",PK="Config successfully initialized",UK="Error backing up config file",vK="Empty parameter sent to getConfigValue",VN=Ln.join(kr.PACKAGE_ROOT,"config","yaml",kr.HDB_DEFAULT_CONFIG_FILE),BK="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",FN={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"},Z_,wt,ed;QN.exports={createConfigFile:HK,getDefaultConfig:xK,getConfigValue:YN,initConfig:cp,flattenConfig:zo,updateConfigValue:KN,updateConfigObject:qK,getConfiguration:VK,setConfiguration:$K,readConfigFile:lp,getClusteringRoutes:YK,initOldConfig:WN,getConfigFromFile:KK,getConfigFilePath:ji,addConfig:WK,deleteConfigFromFile:QK,getConfigObj:zK};function HK(e,t=!1){let r=ui(VN);Z_=zo(r.toJSON());let n;for(let c in e){let u=Mn[c.toLowerCase()];if(u===Fr.DATABASES){Array.isArray(e[c])?n=e[c]:n=Object.keys(e[c]).map(_=>({[_]:e[c][_]}));continue}if(!u&&(c.endsWith("_package")||c.endsWith("_port"))&&(u=c),u!==void 0){let _=u.split("_"),l=ap(u,e[c]);u==="rootPath"&&l?.endsWith("/")&&(l=l.slice(0,-1));try{r.setIn([..._],l)}catch(d){It.error(d)}}}n&&$N(r,n),up(r,t);let s=r.toJSON();wt=zo(s);let i=r.getIn(["rootPath"]),o=Ln.join(i,kr.HDB_CONFIG_FILE);fr.createFileSync(o),fr.writeFileSync(o,String(r)),It.trace(`Config file written to ${o}`)}a(HK,"createConfigFile");function $N(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!Bt.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(Qc.TABLES))for(let i in n[s][Qc.TABLES])for(let o in n[s][Qc.TABLES][i]){let c=n[s][Qc.TABLES][i][o],u=[Fr.DATABASES,s,Qc.TABLES,i,o];e.hasIn(u)?e.setIn(u,c):e.addIn(u,c)}else for(let i in n[s]){let o=n[s][i],c=[Fr.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){It.error("Error parsing schemas CLI/env config arguments",n)}}a($N,"setSchemasConfig");function xK(e){if(Z_===void 0){let r=ui(VN);Z_=zo(r.toJSON())}let t=Mn[e.toLowerCase()];if(t!==void 0)return Z_[t.toLowerCase()]}a(xK,"getDefaultConfig");function YN(e){if(e==null){It.error(vK);return}if(wt===void 0){It.trace(MK);return}let t=Mn[e.toLowerCase()];if(t!==void 0)return wt[t.toLowerCase()]}a(YN,"getConfigValue");function ji(e=Bt.getPropsFilePath()){let t=Bt.getEnvCliRootPath();return t?Ln.join(t,kr.HDB_CONFIG_FILE):kN(e).get(kr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(ji,"getConfigFilePath");function cp(e=!1){if(wt===void 0||e){let t;if(!Bt.noBootFile()){t=Bt.getPropsFilePath();try{fr.accessSync(t,fr.constants.F_OK|fr.constants.R_OK)}catch(i){throw It.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=ji(t),n;if(r.includes("config/settings.js"))try{WN(r);return}catch(i){if(i.code!==kr.NODE_ERROR_CODES.ENOENT)throw i}try{n=ui(r)}catch(i){if(i.code===kr.NODE_ERROR_CODES.ENOENT){It.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 It.error(i),new Error(`Error reading HarperDB config file at ${r}`)}GK(n,r),up(n);let s=n.toJSON();if(LK.config=s,wt=zo(s),wt.logging_rotation_rotate)for(let i in FN)wt[i]&&It.error(`Config ${FN[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);It.trace(PK)}}a(cp,"initConfig");function GK(e,t){let r=e.getIn(["rootPath"]),n=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Ln.join(r,"database")),n=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],Ln.join(r,"clustering","leaf")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Ln.join(r,"log")),n=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),n=!0),e.hasIn(["authentication"])||(e.addIn(["authentication"],{cacheTTL:3e4,enableSessions:!0,operationTokenTimeout:e.getIn(["operationsApi","authentication","operationTokenTimeout"])??"1d",refreshTokenTimeout:e.getIn(["operationsApi","authentication","refreshTokenTimeout"])??"30d"}),n=!0),e.hasIn(["analytics"])||(e.addIn(["analytics"],{aggregatePeriod:60}),n=!0),n&&(It.trace("Updating config file with missing config params"),fr.writeFileSync(t,String(e)))}a(GK,"checkForUpdatedConfig");function up(e,t=!1){let r=e.toJSON();r.componentsRoot=r.componentsRoot??r?.customFunctions?.root,r?.http?.threads&&(r.threads=r?.http?.threads);let n=yK(r,t);if(n.error)throw X_.CONFIG_VALIDATION(n.error.message);typeof n.value.threads=="object"?e.setIn(["threads","count"],n.value.threads.count):e.setIn(["threads"],n.value.threads),e.setIn(["componentsRoot"],n.value.componentsRoot),e.setIn(["logging","root"],n.value.logging.root),e.setIn(["storage","path"],n.value.storage.path),e.setIn(["logging","rotation","path"],n.value.logging.rotation.path),e.setIn(["clustering","leafServer","streams","path"],n.value.clustering.leafServer.streams?.path),e.setIn(["operationsApi","network","domainSocket"],n.value?.operationsApi?.network?.domainSocket)}a(up,"validateConfig");function qK(e,t){wt===void 0&&(wt={});let r=Mn[e.toLowerCase()];if(r===void 0){It.trace(`Unable to update config object because config param '${e}' does not exist`);return}wt[r.toLowerCase()]=t}a(qK,"updateConfigObject");function KN(e,t,r=void 0,n=!1,s=!1,i=!1){wt===void 0&&cp();let o=YN(Mn.hdb_root),c=Ln.join(o,kr.HDB_CONFIG_FILE),u=ui(c),_;if(r===void 0&&e.toLowerCase()===Fr.DATABASES)_=t;else if(r===void 0){let E;if(i)E=e;else if(E=Mn[e.toLowerCase()],E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let f=E.split("_"),h=ap(E,t);u.setIn([...f],h)}else for(let E in r){let f=Mn[E.toLowerCase()];if(f===Fr.HTTP_SECUREPORT&&r[E]===wt[Fr.HTTP_PORT]?.toString()&&u.setIn(["http","port"],null),f===Fr.OPERATIONSAPI_NETWORK_SECUREPORT&&r[E]===wt[Fr.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&u.setIn(["operationsApi","network","port"],null),f===Fr.DATABASES){_=r[E];continue}if(f?.startsWith("threads_")){let h=u.getIn(["threads"]);h>=0&&(u.deleteIn(["threads"]),u.setIn(["threads","count"],h))}if(!f&&(E.endsWith("_package")||E.endsWith("_port"))&&(f=E),f!==void 0){let h=f.split("_"),p=kr.LEGACY_CONFIG_PARAMS[E.toUpperCase()];p&&p.startsWith("customFunctions")&&u.hasIn(p.split("_"))&&(f=p,h=p.split("_"));let S=ap(f,r[E]);f==="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(T){It.error(T)}}}_&&$N(u,_),up(u);let l=u.getIn(["rootPath"]),d=Ln.join(l,kr.HDB_CONFIG_FILE);n===!0&&FK(c,l),fr.writeFileSync(d,String(u)),s&&(wt=zo(u.toJSON())),It.trace(`Config parameter: ${e} updated with value: ${t}`)}a(KN,"updateConfigValue");function FK(e,t){try{let r=Ln.join(t,"backup",`${kr.HDB_CONFIG_FILE}.bak`);fr.copySync(e,r),It.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){It.error(UK),It.error(r)}}a(FK,"backupConfigFile");var kK=["databases"];function zo(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)),ed=e,r(e);function r(n){let s={};for(let i in n)if(n.hasOwnProperty(i)){if(typeof n[i]=="object"&&n[i]!==null&&!Array.isArray(n[i])&&!kK.includes(i)){let o=r(n[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let u=i+"_"+c;!Fr[u.toUpperCase()]&&Mn[u]&&(s[Mn[u].toLowerCase()]=o[c]),s[u]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(zo,"flattenConfig");function ap(e,t){if(e===Fr.CLUSTERING_NODENAME||e===Fr.CLUSTERING_USER){if(t==null)return t;if(!isNaN(t))return t.toString();if(typeof t=="string"&&t.toLowerCase()==="true"||typeof t=="string"&&t.toLowerCase()==="false")return t}else{if(IK(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(ap,"castConfigValue");function VK(){let e=Bt.getPropsFilePath(),t=ji(e);return ui(t).toJSON()}a(VK,"getConfiguration");async function $K(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return KN(void 0,void 0,s,!0),BK}catch(i){throw typeof i=="string"||i instanceof String?CK(i,i,DK.BAD_REQUEST,void 0,void 0,!0):i}}a($K,"setConfiguration");function lp(){let e=Bt.getPropsFilePath();try{fr.accessSync(e,fr.constants.F_OK|fr.constants.R_OK)}catch(n){if(!Bt.noBootFile())throw It.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=ji(e);return ui(t).toJSON()}a(lp,"readConfigFile");function ui(e){return NK.parseDocument(fr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(ui,"parseYamlDoc");function YK(){let e=lp(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Bt.isEmptyOrZeroLength(t)?[]:t;let r=qN(t);if(r)throw X_.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Bt.isEmptyOrZeroLength(n)?[]:n;let s=qN(n);if(s)throw X_.CONFIG_VALIDATION(s.message);if(!Bt.isEmptyOrZeroLength(n)&&!Bt.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.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 X_.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(YK,"getClusteringRoutes");function WN(e){let t=kN(e);wt={};for(let r in Mn){let n=t.get(r.toUpperCase());if(Bt.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=Mn[r].toLowerCase();s===Fr.LOGGING_ROOT?wt[s]=Ln.dirname(n):wt[s]=n}return wt}a(WN,"initOldConfig");function KK(e){let t=lp();return wK.get(t,e.replaceAll("_","."))}a(KK,"getConfigFromFile");async function WK(e,t){let r=ui(ji());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await fr.writeFile(ji(),String(r))}a(WK,"addConfig");function QK(e){let t=ji(Bt.getPropsFilePath()),r=ui(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=Ln.join(n,kr.HDB_CONFIG_FILE);fr.writeFileSync(s,String(r))}a(QK,"deleteConfigFromFile");function zK(){return ed||(cp(),ed)}a(zK,"getConfigObj")});var JN=g((Ale,zN)=>{"use strict";var td=P(),rd=class{static{a(this,"BaseLicense")}constructor(t=0,r=td.RAM_ALLOCATION_ENUM.DEFAULT,n=td.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},_p=class extends rd{static{a(this,"ExtendedLicense")}constructor(t=0,r=td.RAM_ALLOCATION_ENUM.DEFAULT,n=td.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};zN.exports={BaseLicense:rd,ExtendedLicense:_p}});var Xi=g((ble,rI)=>{"use strict";var jo=require("fs-extra"),XN=Q_(),ZN=require("crypto"),JK=require("moment"),jK=require("uuid").v4,tr=$(),fp=require("path"),XK=z(),li=P(),{totalmem:jN}=require("os"),ZK=JN().ExtendedLicense,Jo="invalid license key format",eW="061183",tW="mofi25",rW="aes-256-cbc",nW=16,sW=32,eI=ee();eI.initSync();var dp;rI.exports={validateLicense:tI,generateFingerPrint:oW,licenseSearch:mp,getLicense:uW,checkMemoryLimit:lW};function Ep(){return fp.join(eI.getHdbBasePath(),li.LICENSE_KEY_DIR_NAME,li.LICENSE_FILE_NAME)}a(Ep,"getLicenseDirPath");function iW(){let e=Ep();return fp.join(e,li.LICENSE_FILE_NAME)}a(iW,"getLicenseFilePath");function hp(){let e=Ep();return fp.join(e,li.REG_KEY_FILE_NAME)}a(hp,"getFingerPrintFilePath");async function oW(){let e=hp();try{return await jo.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await aW();throw tr.error(`Error writing fingerprint file to ${e}`),tr.error(t),new Error("There was an error generating the fingerprint")}}a(oW,"generateFingerPrint");async function aW(){let e=jK(),t=XN.hash(e),r=hp();try{await jo.mkdirp(Ep()),await jo.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw tr.error(`Error writing fingerprint file to ${r}`),tr.error(n),new Error("There was an error generating the fingerprint")}return t}a(aW,"writeFingerprint");function tI(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:li.RAM_ALLOCATION_ENUM.DEFAULT,version:li.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return tr.error("empty license key passed to validate."),r;let n=hp(),s=!1;try{s=jo.statSync(n)}catch(i){tr.error(i)}if(s){let i;try{i=jo.readFileSync(n,"utf8")}catch{tr.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(tW),c=o[1];c=Buffer.concat([Buffer.from(c)],nW);let u=Buffer.concat([Buffer.from(i)],sW),_=ZN.createDecipheriv(rW,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 f=cW(o[0],i);if(f)l=f;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Jo),tr.error(Jo),new Error(Jo)}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(Jo),tr.error(Jo),new Error(Jo)}else r.exp_date=l;r.exp_date<JK().valueOf()&&(r.valid_date=!1),XN.validate(o[1],`${eW}${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||tr.error("Invalid licence"),r}a(tI,"validateLicense");function cW(e,t){try{let r=ZN.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{tr.warn("Check old license failed")}}a(cW,"checkOldLicense");function mp(){let e=new ZK,t=[];try{t=jo.readFileSync(iW(),"utf-8").split(li.NEW_LINE)}catch(r){r.code==="ENOENT"?tr.info("no license file found"):tr.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(XK.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=tI(s.license_key,s.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.ram_allocation=i.ram_allocation,e.enterprise=!0)}catch(s){tr.error("There was an error parsing the license string."),tr.error(s),e.ram_allocation=li.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return dp=e,e}a(mp,"licenseSearch");async function uW(){return dp||await mp(),dp}a(uW,"getLicense");function lW(){let e=mp().ram_allocation,t=process.constrainedMemory?.()||jN();if(t=Math.round(Math.min(t,jN())/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(lW,"checkMemoryLimit")});var _n=g((Cle,SI)=>{"use strict";var oI="username is required",aI="nothing to update, must supply active, role or password to update",cI="password cannot be an empty string",uI="If role is specified, it cannot be empty.",lI="active must be true or false";SI.exports={addUser:TW,alterUser:gW,dropUser:AW,getSuperUser:NW,userInfo:OW,listUsers:sd,listUsersExternal:bW,setUsersToGlobal:Zo,findAndValidateUser:mI,getClusterUser:IW,USERNAME_REQUIRED:oI,ALTERUSER_NOTHING_TO_UPDATE:aI,EMPTY_PASSWORD:cI,EMPTY_ROLE:uI,ACTIVE_BOOLEAN:lI};var _I=qr(),_W=ci(),Tp=Q_(),dI=CN(),fI=Gr(),gp=Ns(),Vr=z(),EI=require("validate.js"),Oe=$(),{promisify:dW}=require("util"),Rp=Os(),nI=P(),sI=Ve(),fW=Er(),Nle=ee(),Ile=Xi(),EW=Vi(),{table:wle}=(Ae(),ie(ke)),{handleHDBError:es,hdb_errors:hW}=se(),{HTTP_STATUS_CODES:ts,AUTHENTICATION_ERROR_MSGS:pp,HDB_ERROR_MSGS:Xo}=hW,{UserEventMsg:Ap}=Pn(),Sp=require("lodash"),{server:Op}=(lr(),ie(Gi)),mW=$();Op.getUser=(e,t)=>mI(e,t,t!=null);var hI={username:!0,active:!0,role:!0,password:!0},iI=new Map,nd=fI.searchByValue,pW=fI.searchByHash,SW=dW(_W.delete);async function TW(e){let t=EI.cleanAttributes(e,hI),r=dI.addUserValidation(t);if(r)throw es(new Error,r.message,ts.BAD_REQUEST,void 0,void 0,!0);let n={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},s;try{s=await nd(n),s=s&&Array.from(s)}catch(u){throw Oe.error("There was an error searching for a role in add user"),Oe.error(u),u}if(!s||s.length<1)throw es(new Error,Xo.ROLE_NAME_NOT_FOUND(t.role),ts.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw es(new Error,Xo.DUP_ROLES_FOUND(t.role),ts.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=Rp.encrypt(t.password)),t.password=Tp.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await _I.insert(i)}catch(u){throw Oe.error("There was an error searching for a user."),Oe.error(u),u}Oe.debug(o);try{await Zo()}catch(u){throw Oe.error("Got an error setting users to global"),Oe.error(u),u}if(o.skipped_hashes.length===1)throw es(new Error,Xo.USER_ALREADY_EXISTS(t.username),ts.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=s[0],gp.signalUserChange(new Ap(process.pid)),`${c.username} successfully added`}a(TW,"addUser");async function gW(e){let t=EI.cleanAttributes(e,hI);if(Vr.isEmptyOrZeroLength(t.username))throw new Error(oI);if(Vr.isEmptyOrZeroLength(t.password)&&Vr.isEmptyOrZeroLength(t.role)&&Vr.isEmptyOrZeroLength(t.active))throw new Error(aI);if(!Vr.isEmpty(t.password)&&Vr.isEmptyOrZeroLength(t.password.trim()))throw new Error(cI);if(!Vr.isEmpty(t.active)&&!Vr.isBoolean(t.active))throw new Error(lI);let r=RW(t.username);if(!Vr.isEmpty(t.password)&&!Vr.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Rp.encrypt(t.password)),t.password=Tp.hash(t.password)),t.role==="")throw new Error(uI);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 nd(i)||[])}catch(c){throw Oe.error("Got an error searching for a role."),Oe.error(c),c}if(!o||o.length===0){let c=Xo.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Oe.error(c),es(new Error,c,ts.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=Xo.ALTER_USER_DUP_ROLES(t.role);throw Oe.error(c),es(new Error,c,ts.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let n={operation:"update",schema:"system",table:"hdb_user",records:[t]},s;try{s=await _I.update(n)}catch(i){throw Oe.error("Error during update."),Oe.error(i),i}try{await Zo()}catch(i){throw Oe.error("Got an error setting users to global"),Oe.error(i),i}return gp.signalUserChange(new Ap(process.pid)),s}a(gW,"alterUser");function RW(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(RW,"isClusterUser");async function AW(e){try{let t=dI.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 es(new Error,Xo.USER_NOT_EXIST(e.username),ts.NOT_FOUND,void 0,void 0,!0);let n;try{n=await SW(r)}catch(s){throw Oe.error("Got an error deleting a user."),Oe.error(s),s}Oe.debug(n);try{await Zo()}catch(s){throw Oe.error("Got an error setting users to global."),Oe.error(s),s}return gp.signalUserChange(new Ap(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(AW,"dropUser");async function OW(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=Sp.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await pW(r)}catch(s){throw Oe.error("Got an error searching for a role."),Oe.error(s),s}t.role=n[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Oe.error(r),r}return t}a(OW,"userInfo");async function bW(){let e;try{e=await sd()}catch(t){throw Oe.error("Got an error listing users."),Oe.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(bW,"listUsersExternal");async function sd(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await nd(e)}catch(o){throw Oe.error("Got an error searching for roles."),Oe.error(o),o}let r={};for(let o of t)r[o.id]=Sp.cloneDeep(o);if(Object.keys(r).length===0)return null;let n={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},s;try{s=await nd(n)}catch(o){throw Oe.error("Got an error searching for users."),Oe.error(o),o}let i=new Map;for(let o of s)o=Sp.cloneDeep(o),o.role=r[o.role],yW(o.role),i.set(o.username,o);return i}catch(e){throw Oe.error("got an error listing users"),Oe.error(e),Vr.errorizeMessage(e)}return null}a(sd,"listUsers");function yW(e){try{if(!e){Oe.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(EW)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Oe.error("Got an error trying to set system permissions."),Oe.error(t)}}a(yW,"appendSystemTablesToRole");async function Zo(){try{let e=await sd();global.hdb_users=e}catch(e){throw Oe.error(e),e}}a(Zo,"setUsersToGlobal");async function mI(e,t,r=!0){global.hdb_users||await Zo();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw es(new Error,pp.GENERIC_AUTH_FAIL,ts.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw es(new Error,pp.USER_INACTIVE,ts.UNAUTHORIZED,void 0,void 0,!0);let s={active:n.active,username:n.username};if(n.refresh_token&&(s.refresh_token=n.refresh_token),n.role&&(s.role=n.role),r===!0){if(iI.get(t)===n.password)return s;if(Tp.validate(n.password,t))iI.set(t,n.password);else throw es(new Error,pp.GENERIC_AUTH_FAIL,ts.UNAUTHORIZED,void 0,void 0,!0)}return s}a(mI,"findAndValidateUser");async function NW(){global.hdb_users||await Zo();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(NW,"getSuperUser");async function IW(){let e=await sd(),t=fW.getConfigFromFile(nI.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Vr.isEmpty(r)&&r?.role?.role===nI.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=Rp.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+sI.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+sI.SERVER_SUFFIX.ADMIN,r}a(IW,"getClusterUser");var pI=[];Op.invalidateUser=function(e){for(let t of pI)try{t(e)}catch(r){mW.error("Error invalidating user",r)}};Op.onInvalidatedUser=function(e){pI.push(e)}});var Jc=g((Ple,AI)=>{"use strict";var Zi=$(),$r=P(),wW=Jy(),Lle=ys(),Mle=bs(),CW=_n(),{validateEvent:TI}=Pn(),zc=Dn(),DW=require("process"),{resetDatabases:LW}=(Ae(),ie(ke)),MW={[$r.ITC_EVENT_TYPES.SCHEMA]:PW,[$r.ITC_EVENT_TYPES.USER]:RI};async function PW(e){let t=TI(e);if(t){Zi.error(t);return}Zi.trace("ITC schemaHandler received schema event:",e),await wW(e.message),await UW(e.message)}a(PW,"schemaHandler");async function UW(e){try{zc.resetReadTxn($r.SYSTEM_SCHEMA_NAME,$r.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),zc.resetReadTxn($r.SYSTEM_SCHEMA_NAME,$r.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),zc.resetReadTxn($r.SYSTEM_SCHEMA_NAME,$r.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=LW();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Zi.error(t)}}a(UW,"syncSchemaMetadata");var gI=[];async function RI(e){try{try{zc.resetReadTxn($r.SYSTEM_SCHEMA_NAME,$r.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),zc.resetReadTxn($r.SYSTEM_SCHEMA_NAME,$r.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Zi.warn(r)}let t=TI(e);if(t){Zi.error(t);return}Zi.trace(`ITC userHandler ${$r.HDB_ITC_CLIENT_PREFIX}${DW.pid} received user event:`,e),await CW.setUsersToGlobal();for(let r of gI)r()}catch(t){Zi.error(t)}}a(RI,"userHandler");RI.addListener=function(e){gI.push(e)};AI.exports=MW});var Pn=g((Gle,bI)=>{"use strict";var vle=$(),bp=z(),vW=P(),{ITC_ERRORS:jc}=Ur(),{parentPort:Ble,threadId:BW,isMainThread:HW,workerData:Hle}=require("worker_threads"),{onMessageFromWorkers:xW,broadcast:xle,broadcastWithAcknowledgement:GW}=We();bI.exports={sendItcEvent:qW,validateEvent:OI,SchemaEventMsg:FW,UserEventMsg:kW};var id;xW(async(e,t)=>{id=id||Jc(),OI(e),id[e.type]&&await id[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function qW(e){return!HW&&e.message&&(e.message.originator=BW),GW(e)}a(qW,"sendItcEvent");function OI(e){if(typeof e!="object")return jc.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||bp.isEmpty(e.type))return jc.MISSING_TYPE;if(!e.hasOwnProperty("message")||bp.isEmpty(e.message))return jc.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||bp.isEmpty(e.message.originator))return jc.MISSING_ORIGIN;if(vW.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return jc.INVALID_EVENT(e.type)}a(OI,"validateEvent");function FW(e,t,r,n=void 0,s=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=n,this.attribute=s}a(FW,"SchemaEventMsg");function kW(e){this.originator=e}a(kW,"UserEventMsg")});var Ns=g((kle,wI)=>{"use strict";var yI=P(),Fle=z(),od=$(),NI=Wy(),ea,{sendItcEvent:II}=Pn();function VW(e){try{od.trace("signalSchemaChange called with message:",e),ea=ea||Jc();let t=new NI(yI.ITC_EVENT_TYPES.SCHEMA,e);return ea.schema(t),II(t)}catch(t){od.error(t)}}a(VW,"signalSchemaChange");function $W(e){try{od.trace("signalUserChange called with message:",e),ea=ea||Jc();let t=new NI(yI.ITC_EVENT_TYPES.USER,e);return ea.user(t),II(t)}catch(t){od.error(t)}}a($W,"signalUserChange");wI.exports={signalSchemaChange:VW,signalUserChange:$W}});var ad=g(($le,DI)=>{"use strict";var CI=z(),YW=P(),KW=$(),WW=v_(),QW=U_(),zW=Ns(),{SchemaEventMsg:JW}=Pn(),jW="already exists in";DI.exports=XW;async function XW(e,t,r){if(CI.isEmptyOrZeroLength(r))return r;let n=[];CI.isEmptyOrZeroLength(t.attributes)||t.attributes.forEach(i=>{n.push(i.attribute)});let s=r.filter(i=>n.indexOf(i)<0);return s.length===0||await Promise.all(s.map(async i=>{await ZW(e,t.schema,t.name,i)})),s}a(XW,"lmdbCheckForNewAttributes");async function ZW(e,t,r,n){let s=new QW(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await eQ(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(jW))KW.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(ZW,"createNewAttribute");async function eQ(e){let t;return t=await WW(e),zW.signalSchemaChange(new JW(process.pid,YW.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(eQ,"createAttribute")});var ta=g((Kle,LI)=>{"use strict";var yp=class{static{a(this,"LMDBTransactionObject")}constructor(t,r,n,s,i=void 0){this.operation=t,this.user_name=r,this.timestamp=n,this.hash_values=s,this.origin=i}};LI.exports=yp});var PI=g((Qle,MI)=>{"use strict";var tQ=ta(),rQ=P().OPERATIONS_ENUM,Np=class extends tQ{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(rQ.INSERT,r,n,s,i),this.records=t}};MI.exports=Np});var vI=g((Jle,UI)=>{"use strict";var nQ=ta(),sQ=P().OPERATIONS_ENUM,Ip=class extends nQ{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(sQ.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};UI.exports=Ip});var HI=g((Xle,BI)=>{"use strict";var iQ=ta(),oQ=P().OPERATIONS_ENUM,wp=class extends iQ{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(oQ.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};BI.exports=wp});var GI=g((e_e,xI)=>{"use strict";var aQ=ta(),cQ=P().OPERATIONS_ENUM,Cp=class extends aQ{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(cQ.DELETE,n,s,t,i),this.original_records=r}};xI.exports=Cp});var Xc=g((n_e,VI)=>{"use strict";var r_e=require("path"),qI=Qe(),uQ=PI(),lQ=vI(),_Q=HI(),dQ=GI(),ra=ft(),FI=z(),{CONFIG_PARAMS:fQ}=P(),kI=ee();kI.initSync();var cd=P().OPERATIONS_ENUM,{getTransactionAuditStorePath:EQ}=je();VI.exports=hQ;async function hQ(e,t){if(kI.get(fQ.LOGGING_AUDITLOG)===!1)return;let r=EQ(e.schema,e.table),n=await qI.openEnvironment(r,e.table,!0),s=mQ(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){qI.initializeDBIs(n,ra.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,ra.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[ra.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[ra.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),FI.isEmpty(s.user_name)||n.dbis[ra.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[ra.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(hQ,"writeTransaction");function mQ(e,t){let r=FI.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===cd.INSERT)return new uQ(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===cd.UPDATE)return new lQ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===cd.UPSERT)return new _Q(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===cd.DELETE)return new dQ(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(mQ,"createTransactionObject")});var Dp=g((o_e,$I)=>{"use strict";var pQ=kc(),i_e=Vc(),Zc=P(),SQ=$c(),TQ=Ko().insertRecords,gQ=Qe(),RQ=$(),AQ=ad(),{getSchemaPath:OQ}=je(),bQ=Xc();$I.exports=yQ;async function yQ(e){try{let{schema_table:t,attributes:r}=pQ(e);SQ(e,r,t.hash_attribute),e.schema!==Zc.SYSTEM_SCHEMA_NAME&&(r.includes(Zc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Zc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Zc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Zc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await AQ(e.hdb_auth_header,t,r),s=OQ(e.schema,e.table),i=await gQ.openEnvironment(s,e.table),o=await TQ(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await bQ(e,o)}catch(c){RQ.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:n,txn_time:o.txn_time}}catch(t){throw t}}a(yQ,"lmdbCreateRecords")});var WI=g((c_e,KI)=>{"use strict";var YI=P(),NQ=Dp(),IQ=Vc(),wQ=require("fs-extra"),{getSchemaPath:CQ}=je();KI.exports=DQ;async function DQ(e){let t=[{name:e.schema,createddate:Date.now()}],r=new IQ(YI.SYSTEM_SCHEMA_NAME,YI.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await NQ(r),await wQ.mkdirp(CQ(e.schema))}a(DQ,"lmdbCreateSchema")});var zI=g((l_e,QI)=>{"use strict";var Lp=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.deleted=t,this.skipped=r,this.txn_time=n,this.original_records=s}};QI.exports=Lp});var ZI=g((h_e,XI)=>{"use strict";var JI=Qe(),Mp=vr(),Pp=Ur().LMDB_ERRORS_ENUM,LQ=ft(),jI=$(),d_e=z(),MQ=require("lmdb"),PQ=zI(),UQ=P(),{OVERFLOW_MARKER:f_e,MAX_SEARCH_KEY_LENGTH:E_e}=LQ,vQ=UQ.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function BQ(e,t,r,n){if(Mp.validateEnv(e),t===void 0)throw new Error(Pp.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Pp.IDS_REQUIRED):new Error(Pp.IDS_MUST_BE_ITERABLE);try{let s=JI.listDBIs(e);JI.initializeDBIs(e,t,s);let i=new PQ,o,c=[],u=[];for(let E=0,f=r.length;E<f;E++)try{o=r[E];let h=e.dbis[t].get(o);if(!h||n&&h[vQ]>n){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,MQ.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<s.length;S++){let T=s[S];if(!h.hasOwnProperty(T)||T===t)continue;let R=e.dbis[T],y=h[T];if(y!=null)try{let I=Mp.getIndexedValues(y);if(I)for(let B=0,U=I.length;B<U;B++)R.remove(I[B],o)}catch{jI.warn(`cannot delete from attribute: ${T}, ${y}:${o}`)}}});c.push(p),u.push(o),i.original_records.push(h)}catch(h){jI.warn(h),i.skipped.push(o)}let _=[],l=await Promise.all(c);for(let E=0,f=l.length;E<f;E++)l[E]===!0?i.deleted.push(u[E]):(i.skipped.push(u[E]),_.push(E));let d=0;for(let E=0;E<_.length;E++){let f=_[E];i.original_records.splice(f-d,1),d++}return i.txn_time=Mp.getNextMonotonicTime(),i}catch(s){throw s}}a(BQ,"deleteRecords");XI.exports={deleteRecords:BQ}});var eu=g((p_e,tw)=>{"use strict";var na=z(),HQ=ZI(),xQ=Qe(),{getSchemaPath:GQ}=je(),qQ=Xc(),FQ=$();tw.exports=kQ;async function kQ(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(na.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(na.isEmptyOrZeroLength(e.hash_values)&&!na.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][n];na.isEmpty(u)||e.hash_values.push(u)}}if(na.isEmptyOrZeroLength(e.hash_values))return ew([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(na.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[n]:e.hash_values[c]}}let s=GQ(e.schema,e.table),i=await xQ.openEnvironment(s,e.table),o=await HQ.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await qQ(e,o)}catch(c){FQ.error(`unable to write transaction due to ${c.message}`)}return ew(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(kQ,"lmdbDeleteRecords");function ew(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(ew,"createDeleteResponse")});var vp=g((g_e,rw)=>{"use strict";var VQ=P(),T_e=vr();function Up(e,t){let r=Object.create(null);if(t.length===1&&VQ.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let n=0;n<t.length;n++){let s=t[n],i=e[s];r[s]=i===void 0?null:i}return r}a(Up,"parseRow");function $Q(e,t,r,n){let s=Up(r,e);n.push(s)}a($Q,"searchAll");function YQ(e,t,r,n){let s=Up(r,e);n[t]=s}a(YQ,"searchAllToMap");function KQ(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(KQ,"iterateDBI");function eo(e,t,r,n,s){let i=Object.create(null);i[s]=e;let o;n===s?o=e:(o=t,n!==void 0&&(i[n]=o)),r[0].push(o),r[1].push(i)}a(eo,"pushResults");function WQ(e,t,r,n,s,i){t.toString().endsWith(e)&&eo(t,r,n,s,i)}a(WQ,"endsWith");function QQ(e,t,r,n,s,i){t.toString().includes(e)&&eo(t,r,n,s,i)}a(QQ,"contains");function zQ(e,t,r,n,s,i){t>e&&eo(t,r,n,s,i)}a(zQ,"greaterThanCompare");function JQ(e,t,r,n,s,i){t>=e&&eo(t,r,n,s,i)}a(JQ,"greaterThanEqualCompare");function jQ(e,t,r,n,s,i){t<e&&eo(t,r,n,s,i)}a(jQ,"lessThanCompare");function XQ(e,t,r,n,s,i){t<=e&&eo(t,r,n,s,i)}a(XQ,"lessThanEqualCompare");rw.exports={parseRow:Up,searchAll:$Q,searchAllToMap:YQ,iterateDBI:KQ,endsWith:WQ,contains:QQ,greaterThanCompare:zQ,greaterThanEqualCompare:JQ,lessThanCompare:jQ,lessThanEqualCompare:XQ,pushResults:eo}});var sa=g((y_e,uw)=>{"use strict";var _i=Qe(),A_e=$(),Yr=vr(),ud=ft(),ht=Ur().LMDB_ERRORS_ENUM,O_e=z(),ZQ=P(),ld=vp(),{parseRow:ez}=ld,b_e=require("lmdb"),{OVERFLOW_MARKER:nw,MAX_SEARCH_KEY_LENGTH:tz}=ud;function sw(e,t,r,n=!1,s=void 0,i=void 0){return to(e,t,r,(o,c)=>c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}))}a(sw,"iterateFullIndex");function tu(e,t,r,n,s,i=!1,o=void 0,c=void 0,u=!1,_=!1){return to(e,t,r,(l,d,E,f)=>{let R={transaction:l,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!u:!_,exclusiveStart:i===!0?_:u};return f===r?(R.values=!1,d.getRange(R).map(y=>({value:y}))):d.getRange(R)})}a(tu,"iterateRangeBetween");function to(e,t,r,n){let s=e.database||e,i=_i.openDBI(s,r);i[ud.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&_i.openDBI(s,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=n(o,i,s,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(to,"setupTransaction");function iw(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(nw)){if(!s)if(r)s=_i.openDBI(e,r);else{let u=_i.listDBIs(e);for(let _=0,l=u.length;_<l&&(s=_i.openDBI(e,u[_]),!s[ud.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(iw,"getOverflowCheck");function rz(e,t,r,n=!1,s=void 0,i=void 0){if(Yr.validateEnv(e),t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);return to(e,t,t,(o,c,u)=>(_d(r),r=ru(u,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(_=>ez(_.value,r))))}a(rz,"searchAll");function nz(e,t,r,n=!1,s=void 0,i=void 0){if(Yr.validateEnv(e),t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);_d(r),r=ru(e.database||e,r);let o=new Map;for(let{key:c,value:u}of sw(e,t,t,n,s,i))o.set(c,ld.parseRow(u,r));return o}a(nz,"searchAllToMap");function sz(e,t,r=!1,n=void 0,s=void 0){if(Yr.validateEnv(e),t===void 0)throw new Error(ht.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=sw(e,void 0,t,r,n,s),c=o.transaction,u=iw(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(sz,"iterateDBI");function iz(e,t){if(Yr.validateEnv(e),t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);return _i.statDBI(e,t).entryCount}a(iz,"countAll");function oz(e,t,r,n,s=!1,i=void 0,o=void 0){return di(e,r,n),to(e,t,r,(c,u,_,l)=>(n=Yr.convertKeyValueToWrite(n),l===r?u.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:u.getValues(n,{transaction:c,reverse:s,limit:i,offset:o}).map(d=>({key:n,value:d}))))}a(oz,"equals");function az(e,t,r){return di(e,t,r),_i.openDBI(e,t).getValuesCount(r)}a(az,"count");function cz(e,t,r,n,s=!1,i=void 0,o=void 0){return di(e,r,n),to(e,null,r,(c,u)=>{n=Yr.convertKeyValueToWrite(n);let _=!0;typeof n=="number"&&(_=!1);let l;if(s===!0){let d;for(let E of u.getKeys({transaction:c,start:n}))if(!E.startsWith(n)){d=E;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),l=u.getRange({transaction:c,start:d,end:void 0,reverse:s,limit:i,offset:o}).map(E=>{let{key:f}=E;if(f!==d){if(f.toString().startsWith(n))return E;if(_===!0)return l.DONE}}),l.filter(E=>E)}else return l=u.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(n))return d;if(_===!0)return l.DONE}),_?l:l.filter(d=>d)})}a(cz,"startsWith");function uz(e,t,r,n,s=!1,i=void 0,o=void 0){return ow(e,t,r,n,s,i,o,!0)}a(uz,"endsWith");function ow(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return di(e,r,n),to(e,null,r,(u,_,l,d)=>{let E=iw(l,u,d,r);return o=Number.isInteger(o)?o:0,_.getKeys({transaction:u,end:s?!1:void 0,reverse:s}).flatMap(f=>{let h=f.toString();return h.endsWith(nw)?_.getValues(f,{transaction:u}).map(p=>{let S=E(f,p);if(c?S.endsWith(n):S.includes(n))return{key:S,value:p}}).filter(p=>p):(c?h.endsWith(n):h.includes(n))?_[ud.DBI_DEFINITION_NAME].is_hash_attribute?{key:f,value:f}:_.getValues(f,{transaction:u}).map(p=>({key:f,value:p})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(ow,"contains");function lz(e,t,r,n,s=!1,i=void 0,o=void 0){di(e,r,n);let c=typeof n,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),tu(e,t,r,n,u,s,i,o,!0,!1)}a(lz,"greaterThan");function _z(e,t,r,n,s=!1,i=void 0,o=void 0){di(e,r,n);let c=typeof n,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),tu(e,t,r,n,u,s,i,o,!1,!1)}a(_z,"greaterThanEqual");function dz(e,t,r,n,s=!1,i=void 0,o=void 0){di(e,r,n);let c=typeof n,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),tu(e,t,r,u,n,s,i,o,!1,!0)}a(dz,"lessThan");function fz(e,t,r,n,s=!1,i=void 0,o=void 0){di(e,r,n);let c=typeof n,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),tu(e,t,r,u,n,s,i,o,!1,!1)}a(fz,"lessThanEqual");function Ez(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(Yr.validateEnv(e),r===void 0)throw new Error(ht.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(ht.START_VALUE_REQUIRED);if(s===void 0)throw new Error(ht.END_VALUE_REQUIRED);if(n=Yr.convertKeyValueToWrite(n),s=Yr.convertKeyValueToWrite(s),n>s)throw new Error(ht.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return tu(e,t,r,n,s,i,o,c)}a(Ez,"between");function hz(e,t,r,n){Yr.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);if(_d(r),r=ru(s,r),n===void 0)throw new Error(ht.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=ld.parseRow(c,r)),o}a(hz,"searchByHash");function mz(e,t,r){Yr.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ht.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(mz,"checkHashExists");function pz(e,t,r,n,s=[]){return cw(e,t,r,n,s),aw(e,t,r,n,s).map(i=>i[1])}a(pz,"batchSearchByHash");function Sz(e,t,r,n,s=[]){cw(e,t,r,n,s);let i=new Map;for(let[o,c]of aw(e,t,r,n,s))i.set(o,c);return i}a(Sz,"batchSearchByHashToMap");function aw(e,t,r,n,s=[]){return to(e,t,t,(i,o,c)=>{r=ru(c,r);let u=r.length<3;return n.map(_=>{let l=c.dbis[t].get(_,{transaction:i,lazy:u});if(l)return[_,ld.parseRow(l,r)];s.push(_)}).filter(_=>_)})}a(aw,"batchHashSearch");function cw(e,t,r,n,s){if(Yr.validateEnv(e),t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);if(_d(r),n==null)throw new Error(ht.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(ht.IDS_MUST_BE_ITERABLE)}a(cw,"initializeBatchSearchByHash");function _d(e){if(!Array.isArray(e))throw e===void 0?new Error(ht.FETCH_ATTRIBUTES_REQUIRED):new Error(ht.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(_d,"validateFetchAttributes");function di(e,t,r){if(Yr.validateEnv(e),t===void 0)throw new Error(ht.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ht.SEARCH_VALUE_REQUIRED);if(r?.length>tz)throw new Error(ht.SEARCH_VALUE_TOO_LARGE)}a(di,"validateComparisonFunctions");function ru(e,t){return t.length===1&&ZQ.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=_i.listDBIs(e)),t}a(ru,"setGetWholeRowAttributes");uw.exports={searchAll:rz,searchAllToMap:nz,count:az,countAll:iz,equals:oz,startsWith:cz,endsWith:uz,contains:ow,searchByHash:hz,setGetWholeRowAttributes:ru,batchSearchByHash:pz,batchSearchByHashToMap:Sz,checkHashExists:mz,iterateDBI:sz,greaterThan:lz,greaterThanEqual:_z,lessThan:dz,lessThanEqual:fz,between:Ez}});var ia=g((I_e,Ew)=>{var lw=require("lodash"),_w=Xe(),he=require("joi"),Tz=z(),{hdb_schema_table:nu,checkValidTable:dw,hdb_table:fw,hdb_database:dd}=jn(),{handleHDBError:gz,hdb_errors:Rz}=se(),{getDatabases:Az}=(Ae(),ie(ke)),{HTTP_STATUS_CODES:Oz}=Rz,bz=he.object({database:dd,schema:dd,table:fw,search_attribute:nu,search_value:he.any().required(),get_attributes:he.array().min(1).items(he.alternatives(nu,he.object())).optional(),desc:he.bool(),limit:he.number().integer().min(1),offset:he.number().integer().min(0)}),yz=he.object({database:dd,schema:dd,table:fw,operator:he.string().valid("and","or").default("and").lowercase(),offset:he.number().integer().min(0),limit:he.number().integer().min(1),get_attributes:he.array().min(1).items(he.alternatives(nu,he.object())).optional(),sort:he.object({attribute:he.alternatives(nu,he.array().min(1)),descending:he.bool().optional()}).optional(),conditions:he.array().min(1).items(he.alternatives(he.object({operator:he.string().valid("and","or").default("and").lowercase(),conditions:he.array()}),he.object({search_attribute:he.alternatives(nu,he.array().min(1)),search_type:he.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:he.when("search_type",{switch:[{is:"equals",then:he.any()},{is:"between",then:he.array().items(he.alternatives([he.string(),he.number()])).length(2)}],otherwise:he.alternatives(he.string(),he.number())}).required()}))).required()});Ew.exports=function(e,t){let r=null;switch(t){case"value":r=_w.validateBySchema(e,bz);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(dw("database",e.schema)),i(dw("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(o=>typeof o=="string"||typeof o=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(o=>typeof o=="string"||typeof o=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),s&&(r=new Error(s.trim()));break;case"conditions":r=_w.validateBySchema(e,yz);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=Tz.checkGlobalSchemaTable(e.schema,e.table);if(s)return gz(new Error,s,Oz.NOT_FOUND);let o=Az()[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,E=l.conditions.length;d<E;d++){let f=l.conditions[d];f.conditions?u(f):c.push(f.search_attribute)}},"addConditions");t==="conditions"&&u(e);let _=lw.filter(c,l=>l!=="*"&&l.attribute!=="*"&&!Array.isArray(l)&&!l.name&&!lw.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 Bp=g((C_e,hw)=>{"use strict";var Nz=Qe(),Iz=ia(),{getSchemaPath:wz}=je();hw.exports=Cz;function Cz(e){let t=Iz(e,"hashes");if(t)throw t;let r=wz(e.schema,e.table);return Nz.openEnvironment(r,e.table)}a(Cz,"initialize")});var Hp=g((L_e,mw)=>{"use strict";var Dz=sa(),Lz=Bp();mw.exports=Mz;async function Mz(e){let t=await Lz(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return Dz.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(Mz,"lmdbGetDataByHash")});var oa=g((P_e,pw)=>{"use strict";var xp=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};pw.exports=xp});var Tw=g((B_e,Sw)=>{"use strict";var v_e=oa(),Pz=sa(),Uz=Bp();Sw.exports=vz;async function vz(e){let t=await Uz(e),r=global.hdb_schema[e.schema][e.table];return Pz.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(vz,"lmdbSearchByHash")});var rs=g((x_e,gw)=>{"use strict";var Gp=class{static{a(this,"SearchObject")}constructor(t,r,n,s,i,o,c,u=!1,_=void 0,l=void 0){this.schema=t,this.table=r,this.search_attribute=n,this.search_value=s,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=u,this.limit=_,this.offset=l}};gw.exports=Gp});var fd=g((q_e,Nw)=>{"use strict";var rr=sa(),Bz=Qe(),Hz=z(),me=ft(),ro=P(),xz=Vi(),Rw=Ur().LMDB_ERRORS_ENUM,{getSchemaPath:Gz}=je(),Is=ro.SEARCH_WILDCARDS;async function qz(e,t,r){let n;e.schema===ro.SYSTEM_SCHEMA_NAME?n=xz[e.table]:n=global.hdb_schema[e.schema][e.table];let s=yw(e,n.hash_attribute,r,t);return Ow(e,s,n.hash_attribute,r)}a(qz,"prepSearch");async function Ow(e,t,r,n){let s=Gz(e.schema,e.table),i=await Bz.openEnvironment(s,e.table),o=bw(i,e,t,r),c=o.transaction||i;if([me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,me.SEARCH_TYPES.SEARCH_ALL,me.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(Fz(e,r)===!1){let l=e.search_attribute;if(l===r)return n?Aw(o,()=>!0):o.map(E=>({[r]:E.key}));let d=a(E=>({[r]:E.value,[l]:E.key}),"toObject");return n?Aw(o,d):o.map(d)}let _=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return n===!0?rr.batchSearchByHashToMap(c,r,e.get_attributes,_):rr.batchSearchByHash(c,r,e.get_attributes,_)}a(Ow,"executeSearch");function bw(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<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 me.SEARCH_TYPES.EQUALS:s=rr.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.CONTAINS:s=rr.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.ENDS_WITH:case me.SEARCH_TYPES._ENDS_WITH:s=rr.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.STARTS_WITH:case me.SEARCH_TYPES._STARTS_WITH:s=rr.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return rr.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return rr.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case me.SEARCH_TYPES.SEARCH_ALL:return rr.searchAll(e,n,t.get_attributes,o,c,u);case me.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return rr.searchAllToMap(e,n,t.get_attributes,o,c,u);case me.SEARCH_TYPES.BETWEEN:s=rr.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case me.SEARCH_TYPES.GREATER_THAN:case me.SEARCH_TYPES._GREATER_THAN:s=rr.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.GREATER_THAN_EQUAL:case me.SEARCH_TYPES._GREATER_THAN_EQUAL:s=rr.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.LESS_THAN:case me.SEARCH_TYPES._LESS_THAN:s=rr.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.LESS_THAN_EQUAL:case me.SEARCH_TYPES._LESS_THAN_EQUAL:s=rr.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return s}a(bw,"searchByType");function Aw(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(Aw,"createMapFromIterable");function Fz(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.search_attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let n=!1;for(let s=0;s<e.get_attributes.length;s++)if(r.indexOf(e.get_attributes[s])<0){n=!0;break}return n}a(Fz,"checkToFetchMore");function yw(e,t,r,n){if(Hz.isEmpty(n)){let s=e.search_value;typeof s=="object"?s=JSON.stringify(s):s=s.toString();let i=s.charAt(0),o=s.charAt(s.length-1),c=!1;if(e.search_attribute===t&&(c=!0),Is.indexOf(s)>-1)return r===!0?me.SEARCH_TYPES.SEARCH_ALL_TO_MAP:me.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(Is[0])<0&&s.indexOf(Is[1])<0)return c===!0?r===!0?me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:me.SEARCH_TYPES.EQUALS;if(Is.indexOf(i)>=0&&Is.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),me.SEARCH_TYPES.CONTAINS;if(Is.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),me.SEARCH_TYPES.ENDS_WITH;if(Is.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),me.SEARCH_TYPES.STARTS_WITH;if(s.includes(Is[0])||s.includes(Is[1]))return me.SEARCH_TYPES.EQUALS;throw new Error(Rw.UNKNOWN_SEARCH_TYPE)}else switch(n){case ro.VALUE_SEARCH_COMPARATORS.BETWEEN:return me.SEARCH_TYPES.BETWEEN;case ro.VALUE_SEARCH_COMPARATORS.GREATER:return me.SEARCH_TYPES.GREATER_THAN;case ro.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return me.SEARCH_TYPES.GREATER_THAN_EQUAL;case ro.VALUE_SEARCH_COMPARATORS.LESS:return me.SEARCH_TYPES.LESS_THAN;case ro.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return me.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(Rw.UNKNOWN_SEARCH_TYPE)}}a(yw,"createSearchTypeFromSearchObject");Nw.exports={executeSearch:Ow,createSearchTypeFromSearchObject:yw,prepSearch:qz,searchByType:bw}});var ww=g((V_e,Iw)=>{"use strict";var k_e=rs(),kz=ia(),Vz=z(),$z=P(),Yz=fd();Iw.exports=Kz;function Kz(e,t){if(!Vz.isEmpty(t)&&$z.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=kz(e,"value");if(n)throw n;return Yz.prepSearch(e,t,!0)}a(Kz,"lmdbGetDataByValue")});var su=g((K_e,Cw)=>{"use strict";var Y_e=rs(),Wz=ia(),Qz=z(),zz=P(),Jz=fd();Cw.exports=jz;async function jz(e,t){if(!Qz.isEmpty(t)&&zz.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=Wz(e,"value");if(n)throw n;return Jz.prepSearch(e,t,!1)}a(jz,"lmdbSearchByValue")});var Lw=g((z_e,Dw)=>{"use strict";var Q_e=ft(),qp=class{static{a(this,"SearchByConditionsObject")}constructor(t,r,n,s,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=n,this.limit=i,this.offset=o,this.conditions=s,this.operator=c}},Fp=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},kp=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};Dw.exports={SearchByConditionsObject:qp,SearchCondition:Fp,SortAttribute:kp}});var Bw=g((Z_e,vw)=>{"use strict";var j_e=Lw().SearchByConditionsObject,Xz=rs(),Zz=ia(),Vp=sa(),Ed=ft(),{Resource:X_e}=(cn(),ie($p)),Uw=fd(),e2=vp(),t2=require("lodash"),{getSchemaPath:r2}=je(),Mw=Qe(),{handleHDBError:n2,hdb_errors:s2}=se(),{HTTP_STATUS_CODES:i2}=s2,o2=1e8;vw.exports=a2;async function a2(e){let t=Zz(e,"conditions");if(t)throw n2(t,t.message,i2.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=r2(e.schema,e.table),n=await Mw.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)Mw.openDBI(n,_.search_attribute);let i=t2.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let l=_.search_type;l===Ed.SEARCH_TYPES.EQUALS?_.estimated_count=Vp.count(n,_.search_attribute,_.search_value):l===Ed.SEARCH_TYPES.CONTAINS||l===Ed.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=o2}return _.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await Pw(o,e,i[0],s.hash_attribute),u;if(!e.operator||e.operator.toLowerCase()==="and"){let _=n.dbis[s.hash_attribute],l=i.slice(1).map(Uw.filterByType),d=l.length,E=Vp.setGetWholeRowAttributes(n,e.get_attributes);u=c.map(f=>_.get(f,{transaction:o,lazy:!0})),d>0&&(u=u.filter(f=>{for(let h=0;h<d;h++)if(!l[h](f))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(f=>e2.parseRow(f,E))}else{for(let d=1;d<i.length;d++){let E=i[d],f=await Pw(o,e,E,s.hash_attribute);c=c.concat(f)}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=Vp.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(a2,"lmdbSearchByConditions");async function Pw(e,t,r,n){let s=new Xz(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===Ed.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,Uw.searchByType(e,s,i,n).map(o=>o.value)}a(Pw,"executeConditionSearch")});var aa=g((tde,Hw)=>{"use strict";var c2=P().OPERATIONS_ENUM,Yp=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=c2.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};Hw.exports=Yp});var Kp=g((nde,Yw)=>{"use strict";var Fw=rs(),kw=aa(),Vw=su(),$w=eu(),hr=P(),xw=z(),Gw=Qe(),{getTransactionAuditStorePath:u2,getSchemaPath:l2}=je(),qw=$();Yw.exports=_2;async function _2(e){try{if(xw.isEmpty(global.hdb_schema[e.schema])||xw.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await d2(e),await f2(e);let t=l2(e.schema,e.table);try{await Gw.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")qw.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=u2(e.schema,e.table);await Gw.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")qw.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(_2,"lmdbDropTable");async function d2(e){let t=new Fw(hr.SYSTEM_SCHEMA_NAME,hr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,hr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[hr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await Vw(t)),n=[];for(let i=0;i<r.length;i++){let o=r[i];n.push(o.id)}if(n.length===0)return;let s=new kw(hr.SYSTEM_SCHEMA_NAME,hr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await $w(s)}a(d2,"deleteAttributesFromSystem");async function f2(e){let t=new Fw(hr.SYSTEM_SCHEMA_NAME,hr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[hr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,hr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,hr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await Vw(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let o=r[i];o.name===e.table&&o.schema===e.schema&&(n=o)}if(!n)throw new Error(`${e.schema}.${e.table} was not found`);let s=new kw(hr.SYSTEM_SCHEMA_NAME,hr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await $w(s)}catch(i){throw i}}a(f2,"dropTableFromSystem")});var Ww=g((ide,Kw)=>{"use strict";var E2=require("fs-extra"),h2=rs(),m2=oa(),p2=aa(),S2=Kp(),T2=eu(),g2=Hp(),R2=su(),ws=P(),{getSchemaPath:A2}=je(),{handleHDBError:O2,hdb_errors:b2}=se(),{HDB_ERROR_MSGS:y2,HTTP_STATUS_CODES:N2}=b2;Kw.exports=I2;async function I2(e){let t;try{t=await w2(e.schema);let r=new h2(ws.SYSTEM_SCHEMA_NAME,ws.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,ws.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[ws.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await R2(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await S2(c)}catch(u){if(u.message!=="invalid environment")throw u}}let s=new p2(ws.SYSTEM_SCHEMA_NAME,ws.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await T2(s);let i=A2(t);await E2.remove(i)}catch(r){throw r}}a(I2,"lmdbDropSchema");async function w2(e){let t=new m2(ws.SYSTEM_SCHEMA_NAME,ws.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[ws.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await g2(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw O2(new Error,y2.SCHEMA_NOT_FOUND(e),N2.NOT_FOUND,void 0,void 0,!0);return n}a(w2,"validateDropSchema")});var hd=g((ade,Qw)=>{"use strict";var Wp=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};Qw.exports=Wp});var Jw=g((lde,zw)=>{"use strict";var C2=require("fs-extra"),md=Qe(),{getTransactionAuditStorePath:D2}=je(),Qp=ft(),ude=hd();zw.exports=L2;async function L2(e){let t;try{let r=D2(e.schema,e.table);await C2.mkdirp(r),t=await md.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{md.createDBI(t,Qp.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),md.createDBI(t,Qp.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),md.createDBI(t,Qp.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(L2,"createTransactionsAuditEnvironment")});var eC=g((dde,Zw)=>{"use strict";var zp=P(),jw=Qe(),M2=Ko(),{getSystemSchemaPath:P2,getSchemaPath:U2}=je(),v2=Vi(),B2=v_(),Jp=U_(),H2=$(),x2=Jw(),Xp=v2.hdb_table,Xw=[];for(let e=0;e<Xp.attributes.length;e++)Xw.push(Xp.attributes[e].attribute);Zw.exports=G2;async function G2(e,t){let r=U2(t.schema,t.table),n=new Jp(t.schema,t.table,zp.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new Jp(t.schema,t.table,zp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Jp(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await jw.createEnvironment(r,t.table),e!==void 0){let o=await jw.openEnvironment(P2(),zp.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await M2.insertRecords(o,Xp.hash_attribute,Xw,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await jp(n),await jp(s),await jp(i)}await x2(t)}catch(o){throw o}}a(G2,"lmdbCreateTable");async function jp(e){try{await B2(e)}catch(t){H2.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(jp,"createAttribute")});var rC=g((Ede,tC)=>{"use strict";var q2=kc(),F2=$c(),k2=ad(),iu=P(),V2=Ko().updateRecords,$2=Qe(),{getSchemaPath:Y2}=je(),K2=Xc(),W2=$();tC.exports=Q2;async function Q2(e){try{let{schema_table:t,attributes:r}=q2(e);F2(e,r,t.hash_attribute),e.schema!==iu.SYSTEM_SCHEMA_NAME&&(r.includes(iu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(iu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(iu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(iu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await k2(e.hdb_auth_header,t,r),s=Y2(e.schema,e.table),i=await $2.openEnvironment(s,e.table),o=await V2(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await K2(e,o)}catch(c){W2.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:n,txn_time:o.txn_time}}catch(t){throw t}}a(Q2,"lmdbUpdateRecords")});var sC=g((mde,nC)=>{"use strict";var z2=P().OPERATIONS_ENUM,Zp=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=z2.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};nC.exports=Zp});var oC=g((Tde,iC)=>{"use strict";var Sde=sC(),J2=kc(),j2=$c(),X2=ad(),ou=P(),Z2=Ko().upsertRecords,eJ=Qe(),{getSchemaPath:tJ}=je(),rJ=Xc(),nJ=$(),{handleHDBError:sJ,hdb_errors:iJ}=se();iC.exports=oJ;async function oJ(e){let t;try{t=J2(e)}catch(u){throw sJ(u,u.message,iJ.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;j2(e,n,r.hash_attribute),e.schema!==ou.SYSTEM_SCHEMA_NAME&&(n.includes(ou.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(ou.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(ou.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(ou.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await X2(e.hdb_auth_header,r,n),i=tJ(e.schema,e.table),o=await eJ.openEnvironment(i,e.table),c=await Z2(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await rJ(e,c)}catch(u){nJ.error(`unable to write transaction due to ${u.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:s,txn_time:c.txn_time}}a(oJ,"lmdbUpsertRecords")});var cC=g((Rde,aC)=>{"use strict";var eS=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};aC.exports=eS});var lC=g((Ode,uC)=>{"use strict";var tS=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,n=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=n}};uC.exports=tS});var fC=g((Nde,dC)=>{"use strict";var rS=Qe(),{getTransactionAuditStorePath:aJ}=je(),yde=cC(),au=ft(),cJ=z(),_C=lC(),uJ=require("util").promisify,lJ=uJ(setTimeout),_J=1e4,dJ=100;dC.exports=fJ;async function fJ(e){let t=aJ(e.schema,e.table),r=await rS.openEnvironment(t,e.table,!0),n=rS.listDBIs(r);rS.initializeDBIs(r,au.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new _C;do s=await EJ(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=s.start_timestamp),s.end_timestamp!==void 0&&(i.end_timestamp=s.end_timestamp),i.transactions_deleted+=s.transactions_deleted,await lJ(dJ);while(s.transactions_deleted>0);return i}a(fJ,"deleteAuditLogsBefore");async function EJ(e,t){let r=new _C;try{let n=e.dbis[au.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let{key:i,value:o}of n.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),s=n.remove(i);let c=o[au.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];cJ.isEmpty(c)||(s=e.dbis[au.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)s=e.dbis[au.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>_J)break}return await s,r}catch(n){throw n}}a(EJ,"deleteTransactions")});var hC=g((wde,EC)=>{"use strict";var nS=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};EC.exports=nS});var pC=g((Lde,mC)=>{"use strict";var hJ=rs(),mJ=aa(),Dde=hC(),ns=P(),pJ=z(),sS=Qe(),SJ=Vi(),TJ=su(),gJ=eu(),{getSchemaPath:RJ}=je();mC.exports=AJ;async function AJ(e,t=!0){let r;e.schema===ns.SYSTEM_SCHEMA_NAME?r=SJ[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await bJ(e),s=RJ(e.schema,e.table),i=await sS.openEnvironment(s,e.table);return t===!0&&await OJ(e,i,r.hash_attribute),sS.dropDBI(i,e.attribute),n}a(AJ,"lmdbDropAttribute");async function OJ(e,t,r){let n=sS.openDBI(t,r),s,i=e.attribute;for(let{key:o,value:c,version:u}of n.getRange({start:!1,versions:!0})){let _={};for(let l in c)l!==i&&(_[l]=c[l]);s=t.dbis[r].put(o,_,u)}await s}a(OJ,"removeAttributeFromAllObjects");async function bJ(e){let t=new hJ(ns.SYSTEM_SCHEMA_NAME,ns.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,ns.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[ns.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,ns.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await TJ(t)).filter(o=>o[ns.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(pJ.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[ns.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new mJ(ns.SYSTEM_SCHEMA_NAME,ns.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return gJ(i)}a(bJ,"dropAttributeFromSystem")});var OC=g((Ude,AC)=>{"use strict";var iS=Qe(),ca=ft(),Pde=vr(),oS=P(),SC=z(),{getTransactionAuditStorePath:yJ}=je(),NJ=sa(),pd=ta(),IJ=$();AC.exports=wJ;async function wJ(e){let t=yJ(e.schema,e.table),r=await iS.openEnvironment(t,e.table,!0),n=iS.listDBIs(r);iS.initializeDBIs(r,ca.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case oS.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return TC(r,e.search_values);case oS.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,DJ(r,e.search_values,s);case oS.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return CJ(r,e.search_values);default:return TC(r)}}a(wJ,"readAuditLog");function TC(e,t=[0,Date.now()]){SC.isEmpty(t[0])&&(t[0]=0),SC.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[ca.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let s of r.getKeys({start:t[1]}))if(s!==t[1]){n=s;break}return r.getRange({start:t[0],end:n}).map(({value:s})=>Object.assign(new pd,s))}a(TC,"searchTransactionsByTimestamp");function CJ(e,t=[]){let r=new Map;for(let n=0;n<t.length;n++){let s=t[n],i=[];for(let o of e.dbis[ca.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,RC(e,i))}return Object.fromEntries(r)}a(CJ,"searchTransactionsByUsername");function DJ(e,t,r){let n=new Map;for(let c=0,u=t.length;c<u;c++){let _=t[c],l=NJ.equals(e,ca.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,ca.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,_);for(let{value:d}of l){let E=Number(d);n.has(E)?n.get(E).push(_.toString()):n.set(E,[_.toString()])}}let s=Array.from(n.keys()),i=RC(e,s),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],_=u.timestamp,l=n.get(_);gC(u,"records",r,l,o),gC(u,"original_records",r,l,o)}return Object.fromEntries(o)}a(DJ,"searchTransactionsByHashValues");function gC(e,t,r,n,s){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],u=c[r].toString();if(n.indexOf(u)>=0)if(s.has(u)){let _=s.get(u),l=_[_.length-1];if(l.timestamp===i)l[t]=[c];else{let d=new pd(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new pd(e.operation,e.user_name,i,void 0);_[t]=[c],s.set(u,[_])}}}a(gC,"loopRecords");function RC(e,t){let r=[];try{let n=e.dbis[ca.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let s=0;s<t.length;s++)try{let i=n.get(t[s]);if(i){let o=Object.assign(new pd,i);r.push(o)}}catch(i){IJ.warn(i)}return r}catch(n){throw n}}a(RC,"batchSearchTransactions")});var yC=g((xde,bC)=>{"use strict";var{getSchemaPath:Bde}=je(),Hde=Qe(),{database:LJ}=(Ae(),ie(ke));bC.exports={writeTransaction:MJ};async function MJ(e,t,r){return LJ({database:e,table:t}).transaction(r)}a(MJ,"writeTransaction")});var CC=g((qde,wC)=>{"use strict";var{getSchemaPath:NC}=je(),IC=Qe();wC.exports={flush:PJ,resetReadTxn:UJ};async function PJ(e,t){return(await IC.openEnvironment(NC(e,t),t.toString())).flushed}a(PJ,"flush");async function UJ(e,t){try{(await IC.openEnvironment(NC(e,t),t.toString())).resetReadTxn()}catch{}}a(UJ,"resetReadTxn")});var PC=g((kde,MC)=>{"use strict";var{Readable:vJ}=require("stream"),{getDatabases:BJ}=(Ae(),ie(ke)),{readSync:HJ,openSync:xJ,createReadStream:DC}=require("fs"),{open:GJ}=require("lmdb"),LC=vc(),qJ=Bc(),{AUDIT_STORE_OPTIONS:FJ}=(ni(),ie(UC)),{INTERNAL_DBIS_NAME:kJ,AUDIT_STORE_NAME:VJ}=ft();MC.exports=YJ;var aS=32768,$J=100;async function YJ(e){let t=e.database||e.schema||"data",r=BJ()[t],n=new Date().toISOString(),s=e.tables||e.table&&[e.table];if(s){let _=r[s[0]];if(!_)throw new Error(`Can not find table ${s[0]}`);let l=_.dbisDB,d=GJ({noSync:!0,maxDbs:qJ.MAX_DBS}),E,f=d.openDB(kJ,new LC(!1)),h=l.useReadTransaction(),p=0,S=a(async function(R,y){y.encoding="binary",y.encoder=void 0;let I=d.openDB(R,y),B=l.openDB(R,y);for(let{key:U,version:F,value:M}of B.getRange({start:null,transaction:h,versions:B.useVersions}))E=I.put(U,M,F),p++%$J===0&&(await new Promise(Q=>setTimeout(Q,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:R,value:y}of l.getRange({transaction:h,start:!1}))if(s.some(I=>R.startsWith?.(I+"/"))){f.put(R,y);let[,I]=R.split("/"),B=!I,U=new LC(!B,B);await S(R,U)}e.include_audit&&await S(VJ,Object.assign({},FJ)),await E;let T=DC(d.path);return T.headers=u(),T.on("close",()=>{h.done(),d.close()}),T}let o=r[Object.keys(r)[0]].primaryStore,c=xJ(o.path);return o.transaction(()=>{let _=Buffer.alloc(aS);HJ(c,_,0,aS),o.resetReadTxn();let l=o.useReadTransaction();l.renew();let d=DC(null,{fd:c,start:aS}),E=new vJ.from(async function*(){yield _;for await(let f of d)l.openTimer&&(l.openTimer=0),yield f;l.done()}());return E.headers=u(),E});function u(){let _=new Map;return _.set("content-type","application/octet-stream"),_.set("content-disposition",`attachment; filename="${t}"`),_.set("date",n),_}}a(YJ,"getBackup")});var HC=g(($de,BC)=>{"use strict";var KJ=$(),{handleHDBError:WJ}=se(),QJ=zb(),zJ=v_(),JJ=Dp(),jJ=WI(),XJ=eu(),ZJ=Hp(),e4=Tw(),t4=ww(),r4=su(),n4=Bw(),s4=Ww(),i4=eC(),o4=rC(),a4=oC(),c4=fC(),u4=Kp(),l4=pC(),_4=OC(),d4=yC(),vC=CC(),f4=PC(),cS=class extends QJ{static{a(this,"LMDBBridge")}async searchByConditions(t){return n4(t)}async getDataByHash(t){return await ZJ(t)}async searchByHash(t){return await e4(t)}async getDataByValue(t,r){return await t4(t,r)}async searchByValue(t){return await r4(t)}async createSchema(t){return await jJ(t)}async dropSchema(t){return await s4(t)}async createTable(t,r){return await i4(t,r)}async dropTable(t){return await u4(t)}async createAttribute(t){return await zJ(t)}async createRecords(t){return await JJ(t)}async updateRecords(t){return await o4(t)}async upsertRecords(t){try{return await a4(t)}catch(r){throw WJ(r,null,null,KJ.ERR,r)}}async deleteRecords(t){return await XJ(t)}async dropAttribute(t){return await l4(t)}async deleteAuditLogsBefore(t){return await c4(t)}async readAuditLog(t){return await _4(t)}writeTransaction(t,r,n){return d4.writeTransaction(t,r,n)}flush(t,r){return vC.flush(t,r)}resetReadTxn(t,r){return vC.resetReadTxn(t,r)}getBackup(t){return f4(t)}};BC.exports=cS});function p4(){m4=setInterval(function(){for(let e of uS)if(e.stale){let t=e[ye]?.url;FC.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},h4).unref()}var lS,qC,FC,kC,VC,$C,xC,uS,E4,cu,GC,no,Sd,h4,m4,_S=Re(()=>{lS=x(vr()),qC=x(se()),FC=x($());cn();kC=x(ee()),VC=x(P()),$C=x(z()),xC=100,uS=new Set,E4=(0,$C.convertToMS)(kC.get(VC.CONFIG_PARAMS.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3,no=class e{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;overloadChecked;open=1;getReadTxn(){if(this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn)return this.readTxn.openTimer&&(this.readTxn.openTimer=0),this.readTxn;if(this.open===1)return this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxnsUsed=1,this.readTxn.openTimer&&(this.readTxn.openTimer=0),uS.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(uS.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(cu&&!this.overloadChecked&&performance.now()-GC>E4)throw new qC.ServerError("Outstanding write transactions have too long of queue, please try again later",503);this.overloadChecked=!0}addWrite(t){if(this.open===0)throw new Error("Can not use a transaction that is no longer open");if(this.open===2){let r=new e;return r.addWrite(t),r.commit({})}else this.writes.push(t)}removeWrite(t){let r=this.writes.indexOf(t);r>-1&&(this.writes[r]=null)}commit(t={}){let r=this.timestamp;r||(r=this.timestamp=t.timestamp=t.timestamp||(0,lS.getNextMonotonicTime)());let n=t.retries||0;if(this.validated<this.writes.length)try{let d=this.validated;this.validated=this.writes.length;for(let f=d;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let E;for(let f=d;f<this.validated;f++){let h=this.writes[f];h&&(h.before||h.beforeIntermediate)&&(E=!0)}if(E)return(async()=>{try{for(let f=0;f<2;f++){let h;for(let p=d;p<this.validated;p++){let S=this.writes[p];if(!S)continue;let T=S[f===0?"before":"beforeIntermediate"];if(T){let R=T();h?h.push?h.push(R):h=[h,R]:h=R}}h&&await(h.push?Promise.all(h):h)}}catch(f){throw this.abort(),f}return this.commit(t)})()}catch(d){throw this.abort(),d}n||this.doneReadTxn(),this.open=t?.letItLinger?2:0;let s,i=[],o=0;this.writes=this.writes.filter(d=>d);let c=a(d=>{d.commit(r,d.entry,n)},"doWrite"),u=a(()=>{let d=this.writes[o++];if(d)if(d.key){n>0&&(d.entry=d.store.getEntry(d.key));let E=d.store.ifVersion(d.key,d.entry?.version??null,u);s=s||E}else u();else for(let E of this.writes)c(E)},"nextCondition"),_=this.lmdbDb;if(this.writes.length>0&&(_?.retryRisk&&(_.retryRisk*=.99),this.writes.length+(_?.retryRisk||0)<xC>>n?u():s=this.writes[0].store.transaction(()=>{for(let d of this.writes)d.entry=d.store.getEntry(d.key),c(d);return!0})),s)return cu||(cu=s,GC=performance.now(),cu.then(()=>{cu=null})),s.then(d=>d?(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}))):(_&&(_.retryRisk=(_.retryRisk||0)+xC/2),t?t.retries=n+1:t={retries:1},this.commit(t)));let l={txnTime:r};if(this.next){let d=this.next?.commit(t);if(d?.then)return d?.then(E=>({txnTime:r,next:E}));l.next=d}return l}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=0,this.writes=[]}},Sd=class extends no{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,lS.getNextMonotonicTime)())}getReadTxn(){}},h4=3e4;a(p4,"startMonitoringTxns");p4()});function rt(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===1&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let n=e.transaction=new no;e.timestamp&&(n.timestamp=e.timestamp),n[ye]=e,e.resourceCache||(e.resourceCache=[]);let s;try{if(s=t(n),s?.then)return s.then(i,o)}catch(c){o(c)}return i(s);function i(c){let u=n.commit({letItLinger:r?.letItLinger});return u.then?u.then(()=>c):c}function o(c){throw n.abort({}),c}}var YC,so=Re(()=>{YC=require("../index");cn();_S();a(rt,"transaction");(0,YC._assignPackageExport)("transaction",rt);rt.commit=function(e){let t=(e[ye]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};rt.abort=function(e){let t=(e[ye]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var eD={};Fe(eD,{ResourceBridge:()=>ES});function hS({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 WC(e,t){let r=ss(e),n=hS(e,r);if(!r)throw new Un.ClientError(`Table ${e.table} not found`);let s;n&&r.attributes.length-n.length>2&&n.length<5&&(s=!0);let i={user:e.hdb_user},o;rt(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:s,select:n},i);return l=l&&gd(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 ss(e){let t=e.database||e.schema||T4,r=mr()[t];if(!r)throw(0,Un.handleHDBError)(new Error,S4.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function QC(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}async function*zC(e,t,r){let n;for await(let s of e.getHistory(t,r)){let i=s.type;i==="put"&&(i="upsert");let{id:o,version:c,value:u}=s;n?.timestamp===c?(n.hash_values.push(o),n.records.push(u)):(n&&(yield n),n={operation:i,user_name:s.user,timestamp:c,hash_values:[o],records:[u]})}n&&(yield n)}var JC,Td,Un,jC,XC,vn,dS,fS,ZC,S4,T4,g4,R4,KC,ES,tD=Re(()=>{"use strict";JC=x(HC()),Td=x(ia()),Un=x(se());Ae();jC=x(kc()),XC=x($c()),vn=x(P()),dS=x(Ns()),fS=x(Pn()),ZC=x(z());so();Rd();({HDB_ERROR_MSGS:S4}=Un.hdb_errors),T4="data",g4=1e4,R4=10,ES=class extends JC.default{static{a(this,"ResourceBridge")}constructor(t){super(t),KC=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,Td.default)(t,"conditions");if(r)throw(0,Un.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=ss(t);if(!n)throw new Un.ClientError(`Table ${t.table} not found`);let s=t.conditions.map(i);function i(o){return o.conditions?(o.conditions=o.conditions.map(i),o):{attribute:o.search_attribute??o.attribute,comparator:o.search_type??o.comparator,value:o.search_value!==void 0?o.search_value:o.value}}return a(i,"mapCondition"),n.search({conditions:s,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:hS(t,n),sort:t.sort,allowFullScan:!0})}async createTable(t,r){let n=r.attributes,s=!!n,i=r.primary_key||r.hash_attribute;if(n)for(let o of n)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new Un.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");n=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}Et({database:r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration})}async createAttribute(t){return await ss(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=ss(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=a((o,c,u)=>(c=Object.assign({},c),delete c[n],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}))s=i(o,c,u),await new Promise(_=>setImmediate(_));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){ss(t).dropTable()}createSchema(t){return ua({database:t.schema,table:null}),dS.signalSchemaChange(new fS.SchemaEventMsg(process.pid,vn.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await mS(t.schema),dS.signalSchemaChange(new fS.SchemaEventMsg(process.pid,vn.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,KC.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,jC.default)(t);(0,XC.default)(t,n,r.primaryKey);let s,i=mr()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return rt(o,async c=>{if(!i.schemaDefined){s=[];for(let l of n)i.attributes.find(E=>E.name==l)||s.push(l);s.length>0&&await i.addAttributes(s.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=gd(d));for(let E in l)if(Object.prototype.hasOwnProperty.call(l,E)){let f=l[E];if(typeof f=="function")try{let h=f([[d]]);Array.isArray(h)&&(f=h[0].func_val,l[E]=f)}catch(h){throw h.message+="Trying to set key "+E+" on object"+JSON.stringify(l),h}}if(d)for(let E in d)Object.prototype.hasOwnProperty.call(l,E)||(l[E]=d[E]);await i.put(l,o),u.push(l[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:u,new_attributes:s,skipped_hashes:_}})}async deleteRecords(t){let r=mr()[t.schema][t.table],n={user:t.hdb_user};return rt(n,async s=>{let i=t.hash_values||t.records.map(u=>u[r.primaryKey]),o=[],c=[];for(let u of i)await r.delete(u,n)?o.push(u):c.push(u);return QC(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=mr()[t.schema][t.table];if(!r.createdTimeProperty)throw new Un.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let n=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:vn.VALUE_SEARCH_COMPARATORS.LESS}]}),s=!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,ZC.async_set_timeout)(R4),u=[],s=!0},"chunkDelete");for await(let l of n)u.push(l[r.primaryKey]),c++,c%g4===0&&await _();return u.length>0&&await _(),s?QC(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,Td.default)(t,"hashes");if(r)throw r;return WC(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of WC(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&vn.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);t.select!==void 0&&(t.get_attributes=t.select),t.attribute!==void 0&&(t.search_attribute=condition.attribute),t.value!==void 0&&(t.search_value=condition.value);let n=(0,Td.default)(t,"value");if(n)throw n;let s=ss(t);if(!s)throw new Un.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===vn.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return s.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:hS(t,s)})}async getDataByValue(t,r){let n=new Map,s=ss(t);t.get_attributes&&!t.get_attributes.includes(s.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(s.primaryKey);for await(let i of this.searchByValue(t,r))n.set(i[s.primaryKey],i);return n}resetReadTxn(t,r){ss({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return ss(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=ss(t),n={};switch(t.search_type){case vn.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)n[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.type;return c==="put"&&(c="upsert"),{operation:c,timestamp:o.version,user_name:o.user,hash_values:[i],records:[o.value]}});return n;case vn.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let s=t.search_values;for await(let i of zC(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return zC(r,t.search_values?.[0],t.search_values?.[1])}}};a(hS,"getSelect");a(WC,"getRecords");a(ss,"getTable");a(QC,"createDeleteResponse");a(zC,"groupRecordsInHistory")});var Dn=g((ife,rD)=>{"use strict";var{ResourceBridge:A4}=(tD(),ie(eD)),O4=ee();O4.initSync();var Ad;function b4(){return Ad||(Ad=new A4,Ad)}a(b4,"getBridge");rD.exports=b4()});var oD=g((afe,iD)=>{"use strict";var nD=require("lodash"),uu=require("mathjs"),y4=require("jsonata"),sD=z();iD.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?nD.uniqWith(e,nD.isEqual):e,searchJSON:N4,mad:lu.bind(null,uu.mad),mean:lu.bind(null,uu.mean),mode:lu.bind(null,uu.mode),prod:lu.bind(null,uu.prod),median:lu.bind(null,uu.median)};function lu(e,t,r,n){return n===1?t==null?[]:[t]:n===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(lu,"aggregateFunction");function N4(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(sD.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),sD.isEmpty(this.__ala__.res[r])){let n=y4(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(N4,"searchJSON")});var cD=g((ufe,aD)=>{"use strict";var Rt=require("moment"),pS="YYYY-MM-DDTHH:mm:ss.SSSZZ";Rt.suppressDeprecationWarnings=!0;aD.exports={current_date:()=>Rt().utc().format("YYYY-MM-DD"),current_time:()=>Rt().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return Rt(e).utc().format("YYYY");case"month":return Rt(e).utc().format("MM");case"day":return Rt(e).utc().format("DD");case"hour":return Rt(e).utc().format("HH");case"minute":return Rt(e).utc().format("mm");case"second":return Rt(e).utc().format("ss");case"millisecond":return Rt(e).utc().format("SSS");default:break}},date:e=>Rt(e).utc().format(pS),date_format:(e,t)=>Rt(e).utc().format(t),date_add:(e,t,r)=>Rt(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>Rt(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let n=Rt(e).utc(),s=Rt(t).utc();return r?n.diff(s,r,!0):n.diff(s)},now:()=>Rt().utc().valueOf(),get_server_time:()=>Rt().format(pS),offset_utc:(e,t)=>Rt(e).utc().utcOffset(t).format(pS)}});var dD=g((lfe,_D)=>{"use strict";var I4=require("@turf/area"),w4=require("@turf/length"),C4=require("@turf/circle"),D4=require("@turf/difference"),L4=require("@turf/distance"),M4=require("@turf/boolean-contains"),P4=require("@turf/boolean-equal"),U4=require("@turf/boolean-disjoint"),v4=require("@turf/helpers"),uD=P(),Te=z(),Cs=$();_D.exports={geoArea:B4,geoLength:H4,geoCircle:x4,geoDifference:G4,geoDistance:lD,geoNear:q4,geoContains:F4,geoEqual:k4,geoCrosses:V4,geoConvert:$4};function B4(e){if(Te.isEmpty(e))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e));try{return I4.default(e)}catch(t){return Cs.trace(t,e),NaN}}a(B4,"geoArea");function H4(e,t){if(Te.isEmpty(e))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e));try{return w4.default(e,{units:t||"kilometers"})}catch(r){return Cs.trace(r,e),NaN}}a(H4,"geoLength");function x4(e,t,r){if(Te.isEmpty(e))return NaN;if(Te.isEmpty(t))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e));try{return C4.default(e,t,{units:r||"kilometers"})}catch(n){return Cs.trace(n,e,t),NaN}}a(x4,"geoCircle");function G4(e,t){if(Te.isEmpty(e))return NaN;if(Te.isEmpty(t))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return D4(e,t)}catch(r){return Cs.trace(r,e,t),NaN}}a(G4,"geoDifference");function lD(e,t,r){if(Te.isEmpty(e))return NaN;if(Te.isEmpty(t))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return L4.default(e,t,{units:r||"kilometers"})}catch(n){return Cs.trace(n,e,t),NaN}}a(lD,"geoDistance");function q4(e,t,r,n){if(Te.isEmpty(e)||Te.isEmpty(t))return!1;if(Te.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return lD(e,t,n)<=r}catch(s){return Cs.trace(s,e,t),!1}}a(q4,"geoNear");function F4(e,t){if(Te.isEmpty(e)||Te.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return M4.default(e,t)}catch(r){return Cs.trace(r,e,t),!1}}a(F4,"geoContains");function k4(e,t){if(Te.isEmpty(e)||Te.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return P4.default(e,t)}catch(r){return Cs.trace(r,e,t),!1}}a(k4,"geoEqual");function V4(e,t){if(Te.isEmpty(e)||Te.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return!U4.default(e,t)}catch(r){return Cs.trace(r,e,t),!1}}a(V4,"geoCrosses");function $4(e,t,r){if(Te.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(Te.isEmpty(t))throw new Error("geo_type is required");if(Te.isEmpty(uD.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(uD.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Te.autoCastJSON(e)),v4[t](e,r)}a($4,"geoConvert")});var Od=g((dfe,fD)=>{var io=oD(),Kr=cD(),is=dD();fD.exports=e=>{e.aggr.mad=e.aggr.MAD=io.mad,e.aggr.mean=e.aggr.MEAN=io.mean,e.aggr.mode=e.aggr.MODE=io.mode,e.aggr.prod=e.aggr.PROD=io.prod,e.aggr.median=e.aggr.MEDIAN=io.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=io.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=io.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Kr.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Kr.current_time,e.fn.extract=e.fn.EXTRACT=Kr.extract,e.fn.date=e.fn.DATE=Kr.date,e.fn.date_format=e.fn.DATE_FORMAT=Kr.date_format,e.fn.date_add=e.fn.DATE_ADD=Kr.date_add,e.fn.date_sub=e.fn.DATE_SUB=Kr.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Kr.date_diff,e.fn.now=e.fn.NOW=Kr.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Kr.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Kr.get_server_time,e.fn.getdate=e.fn.GETDATE=Kr.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Kr.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=is.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=is.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=is.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=is.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=is.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=is.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=is.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=is.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=is.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=is.geoNear}});var pD=g((ffe,mD)=>{"use strict";var _u=require("lodash"),pr=require("alasql");pr.options.cache=!1;var Y4=Od(),ED=require("clone"),bd=require("recursive-iterator"),fe=$(),Le=z(),la=Dn(),K4=P(),{hdb_errors:W4}=se(),{getDatabases:hD}=(Ae(),ie(ke)),Q4="IS NULL",Bn="There was a problem performing this search. Please check the logs and try again.";Y4(pr);var SS=class{static{a(this,"SQLSearch")}constructor(t,r){if(Le.isEmpty(t))throw fe.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),Le.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!Le.isEmptyOrZeroLength(n))return fe.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw fe.error("Error thrown from checkEmptySQL in SQLSearch class method search."),fe.error(n),new Error(Bn)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw fe.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),fe.error(n),new Error(Bn)}if(Object.keys(this.data).length===0)return fe.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw fe.error("Error thrown from processJoins in SQLSearch class method search."),fe.error(n),new Error(Bn)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw fe.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),fe.error(n),new Error(Bn)}try{return t=await this._finalSQL(),t}catch(n){throw fe.error("Error thrown from finalSQL in SQLSearch class method search."),fe.error(n),new Error(Bn)}}_getColumns(){let t=new bd(this.statement);for(let{node:r,path:n}of t)r&&r.columnid&&(this.columns[n[0]]||(this.columns[n[0]]=[]),this.columns[n[0]].push(ED(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=_u.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let n=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[n]={},this.data[n].__hash_name=hD()[r.databaseid][r.tableid].primaryKey,this.data[n].__merged_data={},this.data[n].__merged_attributes=[],this.data[n].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(Le.isEmpty(this.statement.where)){fe.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new bd(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!Le.isEmpty(r)&&r.right)if(Le.isNotEmptyAndHasValue(r.right.value)){let n=Le.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new pr.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=Le.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new pr.yy.LogicValue({value:i}):n instanceof pr.yy.StringValue&&Le.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new pr.yy.NumValue({value:i}))});if(t){fe.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new bd(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let n=new Set,s=r.left.columnid?r.left:r.right,i=this._findColumn(s);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!Le.isEmpty(K4.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(Le.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(Le.isEmptyOrZeroLength(r.left.columnid)||Le.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[o].ignore=!0,this.comparator_search_values[o].comparators=[];continue}this.comparator_search_values[o].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(Le.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let c=!1;switch(r.op){case"=":!Le.isEmpty(r.right.value)||!Le.isEmpty(r.left.value)?n.add(Le.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let u=Array.isArray(r.right)?r.right:r.left;for(let _=0;_<u.length;_++)if(u[_].value)n.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,...n])}}}_setAliasesForColumns(){if(Le.isEmptyOrZeroLength(this.all_table_attributes)&&Le.isEmptyOrZeroLength(this.statement.from)&&Le.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((n,s)=>{if(n.columnid==="*"){t.push(s);return}if(n.aggregatorid&&(this.has_aggregator=!0),!n.aggregatorid&&!n.funcid)if(n.as_orig=n.as?n.as:n.columnid,this.statement.joins)if(r[n.as_orig]>=0){let i=r[n.as_orig]+1;n.as=`[${n.as_orig+i}]`,r[n.as_orig]=i}else n.as=`[${n.as_orig}]`,r[n.as_orig]=0;else n.as=`[${n.as_orig}]`;!n.aggregatorid&&n.funcid&&n.args&&(n.as_orig=n.as?n.as:n.toString().replace(/'/g,'"'),n.as=`[${n.as_orig}]`),n.aggregatorid&&n.expression.columnid!=="*"&&(n.as_orig=n.as?n.as:n.expression.tableid?`${n.aggregatorid}(${n.expression.tableid}.${n.expression.columnid})`:`${n.aggregatorid}(${n.expression.columnid})`,n.as=`[${n.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&_u.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(n=>{if(t.columnid_orig&&t.tableid_orig)return(n.table.as===t.tableid_orig||n.table.tableid===t.tableid_orig)&&n.attribute===t.columnid_orig;if(t.tableid)return(n.table.as===t.tableid||n.table.tableid===t.tableid)&&n.attribute===t.columnid;let s=t.columnid_orig?t.columnid_orig:t.columnid;return n.attribute===s});if(Le.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);Le.isEmptyOrZeroLength(n)||(r=this.all_table_attributes.filter(s=>s.attribute===n[0].columnid&&n[0].tableid&&n[0].tableid===(s.table.as?s.table.as:s.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(Le.isEmptyOrZeroLength(this.all_table_attributes)&&!Le.isEmptyOrZeroLength(this.columns.columns))return t;if(Le.isEmptyOrZeroLength(this.all_table_attributes)&&Le.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await pr.promise(r)}catch(r){throw fe.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),fe.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let n=this._findColumn(r);n&&this.fetch_attributes.push(ED(n))})}_addColumnToMergedAttributes(t,r){this.data[t].__merged_attributes.push(r),this.data[t].__merged_attr_map[r]=this.data[t].__merged_attributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__merged_data[r].splice(0,1,r)}_updateMergedAttribute(t,r,n,s){let i=this.data[t].__merged_attr_map[n];this.data[t].__merged_data[r].splice(i,1,s)}async _getFetchAttributeValues(){if(Le.isEmptyOrZeroLength(Object.keys(this.columns)))return[];this._addFetchColumns(this.columns.joins);let t=null;try{t=this.statement.where?this.statement.where.toString():""}catch{throw new Error("Could not generate proper where clause")}this.columns.where&&this._addFetchColumns(this.columns.where);let r=this._isSimpleSelect();if(r?this._addFetchColumns(this.columns.columns):(!this.columns.where&&this.fetch_attributes.length===0)|t.indexOf(Q4)>-1&&this.tables.forEach(s=>{let i={columnid:hD()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=_u.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return s[o]||(s[o]=[],s[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(s[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,o=this.data[i].__hash_name,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},u=!1,_=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(u=!0),!Le.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!Le.isEmptyOrZeroLength(this.exact_search_values[_].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[_].values);let l=await la.getDataByHash(c);for(let d of c.hash_values)l.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d))}catch(l){throw fe.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),fe.error(l),new Error(Bn)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[_].values).map(async l=>{let d=Object.assign({},c);d.search_value=l;let E=await la.getDataByValue(d);for(let[f,h]of E)this.data[i].__merged_data[f]?this._updateMergedAttribute(i,f,s.attribute,h[s.attribute]):(this.data[i].__merged_data[f]=[...n[i]],this._updateMergedAttribute(i,f,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,f))}))}catch(l){throw fe.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),fe.error(l),new Error(Bn)}else if(!Le.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!Le.isEmptyOrZeroLength(this.comparator_search_values[_].comparators))try{let l=this.comparator_search_values[_].comparators;for(let d=0,E=l.length;d<E;d++){let f=l[d];c.search_attribute=f.attribute,c.search_value=f.search_value;let h=await la.getDataByValue(c,f.operation);if(u)for(let[p]of h)this.data[i].__merged_data[p]||(this.data[i].__merged_data[p]=[...n[i]],this._setMergedHashAttribute(i,p));else for(let[p,S]of h)this.data[i].__merged_data[p]?this._updateMergedAttribute(i,p,s.attribute,S[s.attribute]):(this.data[i].__merged_data[p]=[...n[i]],this._updateMergedAttribute(i,p,s.attribute,S[s.attribute]),this._setMergedHashAttribute(i,p))}}catch(l){throw fe.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),fe.error(l),new Error(Bn)}else try{c.search_attribute=s.attribute,c.search_value="*";let l=await la.getDataByValue(c);if(u)for(let[d]of l)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d));else for(let[d,E]of l)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,s.attribute,E[s.attribute]):(this.data[i].__merged_data[d]=[...n[i]],this._updateMergedAttribute(i,d,s.attribute,E[s.attribute]),this._setMergedHashAttribute(i,d))}catch(l){throw fe.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),fe.error(l),new Error(Bn)}}}_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 pr.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(s=>{let i=s.aggregatorid?s.expression:s,o=s.aggregatorid?s.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===o});r[0]||r.push(this._findColumn(t.expression));let n=r[0];if(t.is_func=!!n.funcid,t.is_aggregator=!!n.aggregatorid,n.as)if(n.as&&!t.expression.tableid)t.expression.columnid=n.as,t.expression.columnid_orig=n.as_orig;else{let s=new pr.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new pr.yy.Column,t.expression),t.initial_select_column.as=`[${t.expression.columnid_orig}]`,t.expression.columnid=t.initial_select_column.as;return}if(!t.is_aggregator){let s=t.is_func?new pr.yy.FuncValue:new pr.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(f=>{f.joinmode&&f.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(f.table);let h=f.joinmode+" JOIN ? AS "+(f.as?f.as:f.table.tableid);f.on&&(h+=" ON "+f.on.toString()),i.push(h),t.push(Object.values(this.data[`${f.table.databaseid_orig}_${f.table.as?f.table.as_orig:f.table.tableid_orig}`].__merged_data))});let o=[],c={};s.forEach(f=>{let h=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__hash_name,p=f.as?f.as_orig:f.tableid_orig;o.push({key:`'${p}.${h}'`,schema:f.databaseid_orig,table:f.as?f.as_orig:f.tableid_orig,keys:new Set}),r.push(`${f.as?f.as:f.tableid}.\`${h}\` AS "${p}.${h}"`),c[f.as?f.as_orig:f.tableid_orig]=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.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(f=>{f.is_func?r.push(f.initial_select_column.toString()):f.initial_select_column.tableid?r.push(`${f.initial_select_column.tableid}.${f.initial_select_column.columnid} AS ${f.expression.columnid}`):r.push(`${f.initial_select_column.columnid} AS ${f.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 E=[];try{let f=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${u} ${_} ${l} ${d}`,h=this._convertColumnsToIndexes(f,s);E=await pr.promise(h,t),t=null}catch(f){throw fe.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),fe.error(f),new Error("There was a problem processing the data.")}if(E&&E.length>0){for(let f=0,h=E.length;f<h;f++){let p=E[f];o.forEach(S=>{p[S.key]!==null&&p[S.key]!==void 0&&S.keys.add(p[S.key])})}o.forEach(f=>{let h=Object.keys(this.data[`${f.schema}_${f.table}`].__merged_data),p=_u.difference(h,[...f.keys].map(S=>S.toString()));for(let S=0,T=p.length;S<T;S++){let R=p[S];delete this.data[`${f.schema}_${f.table}`].__merged_data[R]}})}return{existing_attributes:c,joined_length:E?E.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new bd(this.columns);for(let{node:i}of s)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&n.push(o)}}n=_u.uniqBy(n,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(n)}catch(i){throw fe.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),fe.error(i),new Error(Bn)}}async _getData(t){try{let r=t.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]?n[i].columns.push(s.attribute):n[i]={schema:s.table.databaseid,table:s.table.tableid,columns:[s.attribute]},n},{});for(let n in r){let s=r[n],i=this.data[n].__merged_data,o=[];for(let l in i)o.push(i[l][0]);this.data[n].__merged_attributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:o,get_attributes:s.columns},u=await la.getDataByHash(c),_=s.columns.length;for(let l=0,d=o.length;l<d;l++){let E=o[l],f=u.get(E);for(let h=0;h<_;h++){let p=s.columns[h],S=f[p]===void 0?null:f[p];this.data[n].__merged_data[E].push(S)}}}}catch(r){throw fe.error("Error thrown from getDataByHash function in SQLSearch class method getData."),fe.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(s=>{s.as=s.as?s.as:s.table.tableid,t.push(Object.values(this.data[`${s.table.databaseid_orig}_${s.table.as?s.table.as_orig:s.table.tableid_orig}`].__merged_data)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,u=o.aggregatorid?o.as_orig:c.as_orig;return s.expression.tableid?c.columnid_orig===s.expression.columnid_orig&&c.tableid_orig===s.expression.tableid_orig:c.columnid_orig===s.expression.columnid_orig||s.expression.columnid_orig===u}).length===0&&(s.expression.columnid=s.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let n;try{let s=this._buildSQL();fe.trace(`Final SQL: ${s}`),n=await pr.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),fe.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw fe.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),fe.error(s),new Error("There was a problem running the generated sql.")}return n}_translateUndefinedValues(t){try{let r=[];for(let n of t){let s=Object.create(null);Object.keys(n).forEach(i=>{n[i]===void 0?s[i]=null:s[i]=n[i]}),r.push(s)}return r}catch(r){return fe.error(W4.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),fe.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return r=r.replace(/NOT\(NULL\)/g,"NOT NULL"),this.statement.columns.forEach(n=>{if(n.funcid&&n.as){let s=n.toString().replace(" AS "+n.as,"");r=r.replace(n.toString(),s)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let n=t,s={};r.forEach(i=>{i.databaseid_orig?s[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:s[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=s[i],_=new RegExp(`${u}.\`${o}\``,"g"),l=`${u}.[${c}]`;n=n.replace(_,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=new RegExp(`\`${o}\``,"g"),_=`[${c}]`;n=n.replace(u,_)});return n}async _simpleSQLQuery(){let t=this.statement.columns.reduce((n,s)=>(s.as_orig&&s.as_orig!=s.columnid_orig?n[s.columnid_orig]=s.as_orig:n[s.columnid_orig]||(n[s.columnid_orig]=s.columnid_orig),n),{}),r=this.fetch_attributes.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]||(n[i]={}),n[i][t[s.attribute]]=null,n},{});for(let n of this.fetch_attributes){let s=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,i={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]};try{i.search_attribute=n.attribute,i.search_value="*";let o=await la.getDataByValue(i);for(let[c,u]of o)this.data[s].__merged_data[c]||(u[n.attribute]===void 0&&(u[n.attribute]=null),this.data[s].__merged_data[c]=Object.assign({},r[s])),this.data[s].__merged_data[c][t[n.attribute]]=u[n.attribute]??null}catch(o){throw fe.error("There was an error when processing this SQL operation. Check your logs"),fe.error(o),new Error(Bn)}}return Object.values(Object.values(this.data)[0].__merged_data)}};mD.exports=SS});var Gr=g((hfe,SD)=>{"use strict";var z4=Wb();SD.exports={searchByConditions:j4,searchByHash:X4,searchByValue:Z4,search:e3};var TS=Dn(),{transformReq:gS}=z(),J4=pD();async function j4(e){return gS(e),TS.searchByConditions(e)}a(j4,"searchByConditions");async function X4(e){gS(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of TS.searchByHash(e))r&&t.push(r);return t}a(X4,"searchByHash");async function Z4(e){gS(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of TS.searchByValue(e))t.push(r);return t}a(Z4,"searchByValue");function e3(e,t){try{let r=new z4(e);r.validate(),new J4(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(e3,"search")});var yd=g((pfe,TD)=>{"use strict";var t3=Dn();TD.exports={writeTransaction:r3};function r3(e,t,r){return t3.writeTransaction(e,t,r)}a(r3,"writeTransaction")});var OD=g((gfe,AD)=>{"use strict";var n3=Gr(),s3=ys(),gD=$(),i3=qr(),Tfe=yd(),o3=require("clone"),AS=require("alasql"),a3=Od(),RD=require("util"),c3=RD.promisify(s3.getTableSchema),u3=RD.promisify(n3.search),l3=P(),RS=z();a3(AS);AD.exports={update:d3};var _3="There was a problem performing this update. Please check the logs and try again.";async function d3({statement:e,hdb_user:t}){let r=await c3(e.table.databaseid,e.table.tableid),n=f3(e.columns);RS.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=o3(s),c=RS.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,_=AS.parse(u).statements[0],l=await u3(_),d=E3(n,l);return h3(o,d,t)}a(d3,"update");function f3(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=AS.compile(`SELECT ${r.expression.toString()} AS [${l3.FUNC_VAL}] FROM ?`)}),t}catch(t){throw gD.error(t),new Error(_3)}}a(f3,"createUpdateRecord");function E3(e,t){return RS.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(E3,"buildUpdateRecords");async function h3(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await i3.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){gD.error(`Error delete new_attributes from update response: ${i}`)}return s}a(h3,"updateRecords")});var yD=g((bfe,bD)=>{var m3=require("alasql"),p3=Gr(),S3=$(),T3=Dn(),bS=require("util"),OS=z(),g3=P(),R3=ys(),Afe=yd(),Ofe=qr(),A3="record",O3="successfully deleted",b3=bS.callbackify(w3),y3=bS.promisify(p3.search),N3=bS.promisify(R3.getTableSchema);bD.exports={convertDelete:b3};function I3(e){return`${e.deleted_hashes.length} ${A3}${e.deleted_hashes.length===1?"":"s"} ${O3}`}a(I3,"generateReturnMessage");async function w3({statement:e,hdb_user:t}){let r=await N3(e.table.databaseid,e.table.tableid);OS.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=OS.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=m3.parse(o).statements[0],u={operation:g3.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{u.records=await y3(c);let _=await T3.deleteRecords(u);return OS.isEmptyOrZeroLength(_.message)&&(_.message=I3(_)),delete _.txn_time,_}catch(_){throw S3.error(_),_.hdb_code?_.message:_}}a(w3,"convertDelete")});var DD=g((Nfe,CD)=>{"use strict";var C3=bs(),{hdb_errors:ND}=se(),{getDatabases:ID}=(Ae(),ie(ke));CD.exports={checkSchemaExists:wD,checkSchemaTableExists:D3,schema_describe:C3};async function wD(e){if(!ID()[e])return ND.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(wD,"checkSchemaExists");async function D3(e,t){let r=await wD(e);if(r)return r;if(!ID()[e][t])return ND.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(D3,"checkSchemaTableExists")});var du=g((wfe,L3)=>{L3.exports={name:"harperdb",version:"4.3.25",description:"HarperDB is a distributed database, caching service, streaming broker, and application development platform focused on performance and ease of use.",keywords:["database","nosql","api","distributed","broker","mqtt","real-time","enterprise","Fastify","NATS","HarperDB","Harper","clustering","replication","REST","WebSockets","decentralized","server-sent events","document store"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{"minimum-node":"16.0.0","go-lang":"1.21.7","nats-server":"2.10.11"},exports:{".":"./index.js"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"SEE LICENSE IN LICENSE",scripts:{submodules:"git submodule update --init --recursive",build:"eslint -c ./.eslintbuild bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/","cover:test":"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && nyc --no-clean --reporter=lcovonly npm run test:apitests && nyc --no-clean --reporter=lcovonly npm run test:resources && nyc --no-clean --reporter=lcovonly npm run test:logging && nyc --no-clean --reporter=lcovonly npm run test:upgrade && nyc --no-clean --reporter=lcovonly npm run test:nats && nyc --no-clean --reporter=lcovonly npm run test:cfserver && nyc --no-clean --reporter=lcovonly npm run test:hdbserver && nyc --no-clean --reporter=lcovonly npm run test:bin && nyc --no-clean --reporter=lcovonly npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license",test:"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && npm run test:apitests && npm run test:resources && npm run test:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:bin && npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:resources":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/resources/**/*.js' --config '../unitTests/.mocharc.json'","test:bin":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/bin/**/*.js' --config '../unitTests/.mocharc.json'","test:main":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","test:lmdbbridge":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","test:lmdbutility":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","test:hdbserver":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","test:cfserver":"npm run submodules && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/fastifyRoutes/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","test:nats":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","test:upgrade":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","test:apitests":"pm2 kill && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*-test.mjs' --config '../unitTests/.mocharc.json'","test:logging":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test"},dependencies:{"@aws-sdk/client-s3":"3.635.0","@aws-sdk/lib-storage":"3.635.0","@endo/static-module-record":"^1.0.4","@fastify/autoload":"5.7.1","@fastify/compress":"~6.5.0","@fastify/cors":"~8.5.0","@fastify/static":"~6.12.0","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"4.1.10","cbor-x":"1.5.8",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2","fast-glob":"3.3.2",fastify:"~4.26.2","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.12.2","json-bigint-fixes":"1.1.0",json2csv:"5.0.7",jsonata:"1.8.7",jsonwebtoken:"9.0.2",lmdb:"3.1.3",lodash:"4.17.21",mathjs:"11.12.0",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.30.1","mqtt-packet":"~8.2.1",msgpackr:"1.10.1",nats:"2.19.0",needle:"3.3.1","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.4.1",prompt:"1.3.0","properties-reader":"2.3.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^0.18.0","serve-static":"1.15.0",ses:"1.1.0","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.22.9","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.1","validate.js":"0.13.1",ws:"8.17.1",yaml:"2.4.1"},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.8",chai:"4.4.1","chai-integer":"0.1.0",esbuild:"^0.20.2",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.3.0","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",mqtt:"~4.3.8",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.4.2","why-is-node-still-running":"^1.0.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","utf-8-validate":"^5.0.10"}}});var pu={};Fe(pu,{addAnalyticsListener:()=>mu,recordAction:()=>Sr,recordActionBinary:()=>Wr,setAnalyticsEnabled:()=>M3});function M3(e){GD=e}function Sr(e,t,r,n,s){if(!GD)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=wd.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:n,type:s},wd.set(i,o)}Nd||P3()}function Wr(e,t,r,n,s){Sr(!!e,t,r,n,s)}function mu(e){kD.push(e)}function P3(){Nd=performance.now(),setTimeout(async()=>{let e=performance.now()-Nd;Nd=0;let t=[],r={time:Date.now(),period:e,threadId:oo.threadId,metrics:t};for(let[s,i]of wd){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 VD){let E=Math.floor(c*d),f=o[E-1];if(E>u){let h=E-u;if(f===l){let p=_[_.length-1];typeof p=="number"?_[_.length-1]={value:p,count:1+h}:p.count+=h}else _.push(h>1?{value:f,count:h}:f),l=f;u=E}}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 $D()}let n=process.memoryUsage();t.push({metric:"memory",threadId:oo.threadId,byThread:!0,...n});for(let s of kD)s(t);wd=new Map,oo.parentPort?oo.parentPort.postMessage({type:FD,report:r}):WD({report:r})},qD).unref()}async function U3(e,t=6e4){let r=IS(),n=YD(),s=new Promise(p=>{let S=performance.now();setImmediate(()=>{let T=performance.now();T-S>5e3&&(0,fu.warn)("Unusually high event queue latency on the main thread of "+Math.round(T-S)+"ms"),S=performance.now()}),n.primaryStore.prefetch([1],()=>{let T=performance.now();T-S>5e3&&(0,fu.warn)("Unusually high task queue latency on the main thread of "+Math.round(T-S)+"ms"),p(T-S)})}),i;for(let p of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(p.value?.time){i=p.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,u=new Map,_=[],l;for(let{key:p,value:S}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!S)continue;if(o){if(p>o+t)break}else o=p;l=p;let{metrics:T,threadId:R}=S;for(let y of T||[]){let{path:I,method:B,type:U,metric:F,count:M,total:Q,distribution:J,threads:j,...ae}=y;M||(M=1);let ce=F+(I?"-"+I:"");B!==void 0&&(ce+="-"+B),U!==void 0&&(ce+="-"+U);let de=c.get(ce);if(de){if(de.threads){let Ne=de.threads[R];if(Ne)de=Ne;else{de.threads[R]=Object.assign({},ae);continue}}de.count||(de.count=1);let Be=de.count;for(let Ne in ae){let He=ae[Ne];typeof He=="number"&&(de[Ne]=(de[Ne]*Be+He*M)/(Be+M))}de.count+=M,Q>=0&&(de.total+=Q,de.ratio=de.total/de.count)}else de=Object.assign({period:t},y),delete de.distribution,c.set(ce,de),de.byThread&&(de.threads=[],de.threads[R]=Object.assign({},ae),_.push(de));if(J){J=J.map(Ne=>typeof Ne=="number"?{value:Ne,count:1}:Ne);let Be=u.get(ce);Be?Be.push(...J):u.set(ce,J)}}await $D()}for(let p of _){let{path:S,method:T,type:R,metric:y,count:I,total:B,distribution:U,threads:F,...M}=p;F=F.filter(Q=>Q);for(let Q in M){if(typeof p[Q]!="number")continue;let J=0;for(let j of F){let ae=j[Q];typeof ae=="number"&&(J+=ae)}p[Q]=J}p.count=F.length,delete p.threads,delete p.byThread}for(let[p,S]of u){let T=c.get(p);S.sort((Ne,He)=>Ne.value>He.value?1:-1);let R=T.count-1,y=[],I=0,B=0,U;for(let Ne of VD){let He=R*Ne;for(;I<He;)U=S[B++],I+=U.count,B===1&&I--;let n_=S[B>1?B-2:0];U||(U=S[0]),y.push(U.value-(U.value-n_.value)*(I-He)/U.count)}let[F,M,Q,J,j,ae,ce,de,Be]=y;Object.assign(T,{p1:F,p10:M,p25:Q,median:J,p75:j,p90:ae,p95:ce,p99:de,p999:Be})}let d;for(let[p,S]of c)S.id=(0,Id.getNextMonotonicTime)(),S.time=l,n.primaryStore.put(S.id,S,{append:!0}).then(T=>{T||n.primaryStore.put(S.id,S)}),d=!0;let E=Date.now(),{idle:f,active:h}=performance.eventLoopUtilization();if(d||h*10>f){let p=(0,Id.getNextMonotonicTime)(),S={id:p,metric:"main-thread-utilization",idle:f-LD,active:h-MD,taskQueueLatency:await s,time:E,...process.memoryUsage()};n.primaryStore.put(p,S,{append:!0}).then(T=>{T||n.primaryStore.put(p,S)})}LD=f,MD=h}async function PD(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function IS(){return UD||(UD=Et({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function YD(){return vD||(vD=Et({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function H3(){KD=!0;let e=(0,hu.get)(NS.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await U3(qD,e),await PD(IS(),v3),await PD(YD(),B3)},Math.min(e/2,2147483647)).unref()}function WD(e,t){let r=e.report;r.threadId=t?.threadId||oo.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(BD+=n.mean*n.count);r.totalBytesProcessed=BD,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(HD.get(t))}),HD.set(t,t.performance.eventLoopUtilization())),r.id=(0,Id.getNextMonotonicTime)(),IS().primaryStore.put(r.id,r),KD||H3(),x3&&(QD=q3(r))}async function q3(e){if(await QD,!fi){let r=(0,Eu.dirname)((0,fu.getLogFilePath)());try{fi=await(0,yS.open)((0,Eu.join)(r,"analytics.log"),"r+")}catch{fi=await(0,yS.open)((0,Eu.join)(r,"analytics.log"),"w+")}}let t=(await fi.stat()).size;if(t>G3){let r=Buffer.alloc(t);await fi.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await fi.write(r,{position:0}),await fi.truncate(r.length),t=r.length}await fi.write(JSON.stringify(e)+`
|
|
8
|
+
`,t)}var oo,xD,fu,Eu,yS,Id,hu,NS,wd,GD,Nd,qD,FD,kD,VD,LD,MD,$D,v3,B3,UD,vD,KD,BD,HD,x3,QD,fi,G3,Ds=Re(()=>{oo=require("worker_threads"),xD=x(We());Ae();fu=x($()),Eu=require("path"),yS=require("fs/promises"),Id=x(vr()),hu=x(ee()),NS=x(P());lr();(0,hu.initSync)();wd=new Map,GD=(0,hu.get)(NS.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(M3,"setAnalyticsEnabled");a(Sr,"recordAction");at.recordAnalytics=Sr;a(Wr,"recordActionBinary");Nd=0,qD=1e3,FD="analytics-report",kD=[];a(mu,"addAnalyticsListener");VD=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(P3,"sendAnalytics");a(U3,"aggregation");LD=0,MD=0,$D=a(()=>new Promise(setImmediate),"rest");a(PD,"cleanup");v3=36e5,B3=31536e6;a(IS,"getRawAnalyticsTable");a(YD,"getAnalyticsTable");(0,xD.setChildListenerByType)(FD,WD);a(H3,"startScheduledTasks");BD=0,HD=new Map,x3=!1;a(WD,"recordAnalytics");G3=1e6;a(q3,"logAnalytics")});var MS=g((Ffe,oL)=>{"use strict";var{decode:F3}=require("msgpackr"),{isMainThread:xfe,parentPort:Gfe,threadId:qfe}=require("worker_threads"),Ld=ut(),_a=Ve(),DS=P(),nr=$(),CS=ee(),k3=P(),{onMessageByType:V3}=We(),XD=Os(),{recordAction:zD,recordActionBinary:$3}=(Ds(),ie(pu)),{publishToStream:Y3}=Ld,{ConsumerEvents:JD}=require("nats"),K3=Gr(),{promisify:W3}=require("util"),ZD=W3(setTimeout),Md=1e4,Pd,Dd,Q3,z3,eL,Su=new Map,da=new Map;oL.exports={initialize:tL,ingestConsumer:LS,setSubscription:J3,setIgnoreOrigin:Z3,getDatabaseSubscriptions:X3,updateConsumer:rL};async function tL(){V3(DS.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await rL(n)}),eL=!0,nr.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await Ld.getNATSReferences();Pd=e,Dd=e.info.server_name,Q3=t,z3=r}a(tL,"initialize");async function rL(e){if(e.status==="start"){let{js:t,jsm:r}=await nL(e.node_domain_name);LS(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=Su.get(e.stream_name+e.node_domain_name);t&&(nr.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),Su.set(e.stream_name+e.node_domain_name,"close")),da.get(e.node_domain_name)==="failed"&&da.set(e.node_domain_name,"close")}}a(rL,"updateConsumer");var Ud=new Map;function J3(e,t,r){let n=Ud.get(e);n||Ud.set(e,n=new Map),n.set(t,r),eL||tL().then(j3)}a(J3,"setSubscription");async function j3(){let e=await K3.searchByValue({database:"system",table:"hdb_nodes",search_attribute:"name",search_value:"*"});for await(let t of e){let r=t.name+_a.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions)if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await nL(r),!n))break;let{schema:o,table:c}=i,u=XD.createNatsTableStreamName(o,c);LS(u,n,s,r)}}}a(j3,"accessConsumers");async function nL(e){let t,r,n=1;for(;!r;)try{t=await Pd.jetstream({domain:e}),r=await Pd.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(da.get(e)==="close")break;da.set(e,"failed"),n%10===1&&nr.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<Md?n++*100:Md;await ZD(i)}return{js:t,jsm:r}}a(nL,"connectToRemoteJS");function X3(){return Ud}a(X3,"getDatabaseSubscriptions");var sL;function Z3(e){sL=e}a(Z3,"setIgnoreOrigin");var iL=100,jD=new Array(iL),Cd=0;async function LS(e,t,r,n){let{connection:s}=await Ld.getNATSReferences();Pd=s,Dd=s.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,Dd),nr.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(_){if(da.get(n)==="close")break;o%10===1&&nr.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",_.message),_.code==="404"&&(nr.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await Ld.createConsumer(r,e,Dd,new Date(Date.now()).toISOString()));let l=o++*100<Md?o++*100:Md;await ZD(l)}let c=!1,u;for(;!c;){if(Su.get(e+n)==="close"||da.get(n)==="close"){Su.delete(e+n),c=!0;continue}u=await i.consume({max_messages:CS.get(DS.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),Su.set(e+n,u);let _=!1;(async()=>{for await(let l of await u.status())if(l.type===JD.ConsumerDeleted&&(await u.close(),c=!0),l.type===JD.HeartbeatsMissed){let d=l.data;nr.trace(`${d} clustering ingest consumer heartbeats missed, node: ${n} stream: ${u.consumer.stream}`),d===100&&(nr.warn(`Restarting clustering ingest consumer due to missed heartbeat threshold being met, node: ${n} stream: ${u.consumer.stream}`),u.stop(),_=!0)}})();try{for await(let l of u)await jD[Cd],jD[Cd]=ej(l).catch(d=>{nr.error(d)}),++Cd>=iL&&(Cd=0)}catch(l){l.message==="consumer deleted"?(nr.notify("Nats consumer deleted, closing messages for node:",n,"stream:",u.consumer.stream),await u.close(),c=!0):nr.error("Error consuming clustering ingest, restarting consumer",l)}}}a(LS,"ingestConsumer");async function ej(e){let t=F3(e.data);zD(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),nr.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=CS.get(DS.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(_a.MSG_HEADERS.TRANSACTED_NODES)&&r.values(_a.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(_a.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!sL),$3(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(_a.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:u,table:_,records:l,hash_values:d,__origin:E,expiresAt:f}=t;nr.trace("processing message:",o,c,_,(l?"records: "+l.map(B=>B?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),nr.trace(`messageProcessor nats msg id: ${e.headers.get(_a.MSG_HEADERS.NATS_MSG_ID)}`);let h;l||(l=d);let p=new Promise(B=>h=B),{timestamp:S,user:T,node_name:R}=E||{},y=Ud.get(c)?.get(_);if(!y)throw new Error("Missing table for replication message",_);if(o==="define_schema")t.type=o,t.onCommit=h,y.send(t);else if(l.length===1&&!u)y.send({type:wS(o),value:l[0],id:d?.[0],expiresAt:f,timestamp:S,table:_,onCommit:h,user:T,nodeName:R});else{let B=l.map((U,F)=>({type:wS(o),value:U,expiresAt:f,id:d?.[F],table:_}));for(;u;)B.push({type:wS(u.operation),value:u.record,expiresAt:u.expiresAt,id:u.id,table:u.table}),u=u.next;y.send({type:"transaction",writes:B,table:_,timestamp:S,onCommit:h,user:T,nodeName:R})}CS.get(k3.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&Y3(e.subject.split(".").slice(0,-1).join("."),XD.createNatsTableStreamName(c,_),e.headers,e.data),await p;let I=Date.now()-S;S&&zD(I,"replication-latency",e.subject,o,"ingest")}catch(o){nr.error(o)}e.ack()}a(ej,"messageProcessor");function wS(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(wS,"convertOperation")});var ut=g((Qfe,OL)=>{"use strict";var Ht=ee();Ht.initSync();var tj=require("fs-extra"),rj=require("semver"),Ru=require("path"),{monotonicFactory:nj}=require("ulidx"),cL=nj(),sj=require("util"),uL=require("child_process"),ij=sj.promisify(uL.exec),oj=uL.spawn,Kt=Ve(),Ie=P(),vd=z(),Hn=$(),Bd=Os(),aj=yd(),Tu=Er(),{broadcast:cj,onMessageByType:uj,getWorkerIndex:lj}=We(),{isMainThread:lL}=require("worker_threads"),{Encoder:_j,decode:BS}=require("msgpackr"),_L=new _j,{isEmpty:lo}=vd,dL=_n(),Vfe=48*36e11;lL&&uj(Ie.ITC_EVENT_TYPES.RESTART,()=>{Tr=void 0,uo=void 0});var{connect:dj,StorageType:fj,RetentionPolicy:Ej,AckPolicy:HS,DeliverPolicy:xS,DiscardPolicy:hj,NatsConnection:$fe,JetStreamManager:Yfe,JetStreamClient:Kfe,StringCodec:Wfe,JSONCodec:mj,createInbox:GS,headers:pj,ErrorCode:aL}=require("nats"),{PACKAGE_ROOT:Sj}=P(),Tj=du(),{recordAction:gj}=(Ds(),ie(pu)),fL=mj(),Rj="clustering",Aj=Tj.engines[Kt.NATS_SERVER_NAME],Oj=Ru.join(Sj,"dependencies"),vS=Ru.join(Oj,`${process.platform}-${process.arch}`,Kt.NATS_BINARY_NAME),PS,US,gu,ao,co;OL.exports={runCommand:EL,checkNATSServerInstalled:bj,createConnection:qS,getConnection:Au,getJetStreamManager:Ou,getJetStream:mL,getNATSReferences:os,getServerList:Nj,createLocalStream:FS,listStreams:pL,deleteLocalStream:Ij,getServerConfig:fa,listRemoteStreams:wj,viewStream:Cj,viewStreamIterator:Dj,publishToStream:Lj,request:Uj,reloadNATS:kS,reloadNATSHub:vj,reloadNATSLeaf:Bj,extractServerName:Pj,requestErrorHandler:Hj,createLocalTableStream:RL,createTableStreams:qj,purgeTableStream:AL,purgeSchemaTableStreams:Fj,getStreamInfo:kj,updateLocalStreams:$j,closeConnection:yj,getJsmServerName:Hd,addNatsMsgHeader:SL,clearClientCache:hL,updateRemoteConsumer:xj,createConsumer:TL,updateConsumerIterator:Gj};async function EL(e,t=void 0){let{stdout:r,stderr:n}=await ij(e,{cwd:t});if(n)throw new Error(n.replace(`
|
|
9
9
|
`,""));return r.replace(`
|
|
10
|
-
`,"")}a(fL,"runCommand");async function bj(){try{await tj.access(vS)}catch{return!1}let e=await fL(`${vS} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return rj.eq(t,Aj)}a(bj,"checkNATSServerInstalled");async function qS(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await _L.getClusterUser();if(lo(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}Hn.trace("create nats connection called");let i=await dj({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:Ht.get(Ie.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Ht.get(Ie.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Ht.get(Ie.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),Hn.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&Hn.error("Error with Nats client connection, connection closed",o),EL()}),i}a(qS,"createConnection");function EL(){Tr=void 0,ao=void 0,co=void 0,uo=void 0}a(EL,"clearClientCache");async function yj(){Tr&&(await Tr.drain(),Tr=void 0,ao=void 0,co=void 0,uo=void 0)}a(yj,"closeConnection");var Tr,uo;async function Au(){return uo||(uo=qS(Ht.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),Tr=await uo),Tr||uo}a(Au,"getConnection");async function Ou(){if(ao)return ao;lo(Tr)&&await Au();let{domain:e}=fa(Ie.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(lo(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return ao=await Tr.jetstreamManager({domain:e,timeout:6e4}),ao}a(Ou,"getJetStreamManager");async function hL(){if(co)return co;lo(Tr)&&await Au();let{domain:e}=fa(Ie.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(lo(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return co=Tr.jetstream({domain:e,timeout:6e4}),co}a(hL,"getJetStream");async function os(){let e=Tr||await Au(),t=ao||await Ou(),r=co||await hL();return{connection:e,jsm:t,js:r}}a(os,"getNATSReferences");async function Nj(e){let t=Ht.get(Ie.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await _L.getClusterUser(),s=await qS(t,r,n),i=GS(),o=s.subscribe(i),c=[],u,_=(async()=>{for await(let l of o){let d=dL.decode(l.data);d.response_time=Date.now()-u,c.push(d)}})();return u=Date.now(),await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await s.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await s.flush(),await vd.async_set_timeout(e),await o.drain(),await s.close(),await _,c}a(Nj,"getServerList");async function FS(e,t){let{jsm:r}=await os(),n=Ht.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Ht.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=Ht.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:fj.File,retention:Ej.Limits,subjects:t,discard:hj.Old,max_msgs:s,max_bytes:i,max_age:n})}a(FS,"createLocalStream");async function mL(){let{jsm:e}=await os(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(mL,"listStreams");async function Ij(e){let{jsm:t}=await os();await t.streams.delete(e)}a(Ij,"deleteLocalStream");async function wj(e){let{connection:t}=await os(),r=[],n=GS(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(dL.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:n}),await t.flush(),await s.drain(),await i,r}a(wj,"listRemoteStreams");async function Cj(e,t=void 0,r=void 0){let{jsm:n,js:s}=await os(),i=aL(),o={durable_name:i,ack_policy:HS.Explicit};t&&(o.deliver_policy=xS.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.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=BS(l.data),E={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};if(l.headers&&(E.origin=l.headers.get(Kt.MSG_HEADERS.ORIGIN)),_.push(E),l.ack(),l.info.pending===0)break}return await c.delete(),_}a(Cj,"viewStream");async function*Dj(e,t=void 0,r=void 0){let{jsm:n,js:s}=await os(),i=aL(),o={durable_name:i,ack_policy:HS.Explicit};t&&(o.deliver_policy=xS.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.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=BS(_.data);l[0]||(l=[l]);for(let d of l){let E={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};_.headers&&(E.origin=_.headers.get(Kt.MSG_HEADERS.ORIGIN)),yield E}if(_.ack(),_.info.pending===0)break}await c.delete()}a(Dj,"viewStreamIterator");async function Lj(e,t,r,n){Hn.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=pL(n,r);let{js:s}=await os(),i=await Hd(),o=`${e}.${i}`,c=n instanceof Uint8Array?n:lL.encode(n);try{Hn.trace(`publishToStream publishing to subject: ${o}`),gj(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(o,c,{headers:r})}catch(u){if(u.code&&u.code.toString()==="503")return TL(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){Hn.trace(`publishToStream creating stream: ${t}`);let l=o.split(".");l[2]="*",await FS(t,[o]),await s.publish(o,c,{headers:r})}else throw u}});throw u}}a(Lj,"publishToStream");function pL(e,t){t===void 0&&(t=pj());let r=Ht.get(Ie.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Kt.MSG_HEADERS.ORIGIN)&&r&&t.append(Kt.MSG_HEADERS.ORIGIN,r),t}a(pL,"addNatsMsgHeader");function fa(e){e=e.toLowerCase();let t=Ru.join(Ht.get(Ie.CONFIG_PARAMS.ROOTPATH),Rj);if(e===Ie.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return lo(US)&&(US={port:Tu.getConfigFromFile(Ie.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Tu.getConfigFromFile(Ie.CONFIG_PARAMS.CLUSTERING_NODENAME)+Kt.SERVER_SUFFIX.HUB,config_file:Kt.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Ru.join(t,Kt.PID_FILES.HUB),hdb_nats_path:t}),US;if(e===Ie.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return lo(PS)&&(PS={port:Tu.getConfigFromFile(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Tu.getConfigFromFile(Ie.CONFIG_PARAMS.CLUSTERING_NODENAME)+Kt.SERVER_SUFFIX.LEAF,config_file:Kt.NATS_CONFIG_FILES.LEAF_SERVER,domain:Tu.getConfigFromFile(Ie.CONFIG_PARAMS.CLUSTERING_NODENAME)+Kt.SERVER_SUFFIX.LEAF,pid_file_path:Ru.join(t,Kt.PID_FILES.LEAF),hdb_nats_path:t}),PS;Hn.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(fa,"getServerConfig");async function SL(e,t,r,n){try{await e.consumers.add(t,{ack_policy:HS.Explicit,durable_name:r,deliver_policy:xS.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(SL,"createConsumer");async function Mj(e,t,r){await e.consumers.delete(t,r)}a(Mj,"removeConsumer");function Pj(e){return e.split(".")[1]}a(Pj,"extractServerName");async function Uj(e,t,r=6e4,n=GS()){if(!vd.isObject(t))throw new Error("data param must be an object");let s=lL.encode(t),{connection:i}=await os(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return BS(c.data)}a(Uj,"request");function kS(e){return new Promise(async(t,r)=>{let n=oj(vS,["--signal",`reload=${e}`],{cwd:__dirname}),s,i;n.on("error",o=>{r(o)}),n.stdout.on("data",o=>{i+=o.toString()}),n.stderr.on("data",o=>{s+=o.toString()}),n.stderr.on("close",o=>{s&&r(s),t(i)})})}a(kS,"reloadNATS");async function vj(){let{pid_file_path:e}=fa(Ie.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await kS(e)}a(vj,"reloadNATSHub");async function Bj(){let{pid_file_path:e}=fa(Ie.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await kS(e)}a(Bj,"reloadNATSLeaf");function Hj(e,t,r){let n;switch(e.code){case oL.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case oL.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(Hj,"requestErrorHandler");async function xj(e,t){let r=t+Kt.SERVER_SUFFIX.LEAF,{connection:n}=await os(),{jsm:s}=await Kj(r),{schema:i,table:o}=e,c=Bd.createNatsTableStreamName(i,o),u=e.start_time?e.start_time:new Date(Date.now()).toISOString();await TL(async()=>{if(e.subscribe===!0)await SL(s,c,n.info.server_name,u);else try{await Mj(s,c,n.info.server_name)}catch(_){Hn.trace(_)}})}a(xj,"updateRemoteConsumer");async function Gj(e,t,r,n){let s=Bd.createNatsTableStreamName(e,t),i=r+Kt.SERVER_SUFFIX.LEAF,o={type:Ie.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!uL&&lj()<Ht.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=MS();await c(o)}await cj(o),n==="stop"&&await vd.async_set_timeout(1e3)}a(Gj,"updateConsumerIterator");function TL(e){return aj.writeTransaction(Ie.SYSTEM_SCHEMA_NAME,Ie.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(TL,"exclusiveLock");async function gL(e,t){let r=Bd.createNatsTableStreamName(e,t),n=await Hd(),s=Vj(e,t,n);await FS(r,[s])}a(gL,"createLocalTableStream");async function qj(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await gL(n,s)}}a(qj,"createTableStreams");async function RL(e,t,r=void 0){if(Ht.get(Ie.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=Bd.createNatsTableStreamName(e,t),{domain:s}=fa(Ie.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await Au()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")Hn.warn(n);else throw n}}a(RL,"purgeTableStream");async function Fj(e,t){if(Ht.get(Ie.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await RL(e,t[r])}a(Fj,"purgeSchemaTableStreams");async function kj(e){return(await Ou()).streams.info(e)}a(kj,"getStreamInfo");function Vj(e,t,r){return`${Kt.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(Vj,"createSubjectName");async function Hd(){if(gu)return gu;if(gu=(await Ou())?.nc?.info?.server_name,gu===void 0)throw new Error("Unable to get jetstream manager server name");return gu}a(Hd,"getJsmServerName");async function $j(){let e=await Ou(),t=await Hd(),r=await mL();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=Yj(n),c=i.split(".");if(c[c.length-1]===t&&!o||s.name==="__HARPERDB_WORK_QUEUE__")continue;let _=i.split(".");_[_.length-1]=t;let l=_.join(".");Hn.trace(`Updating stream subject name from: ${i} to: ${l}`),s.subjects[0]=l,await e.streams.update(s.name,s)}}a($j,"updateLocalStreams");function Yj(e){let{config:t}=e,r=!1,n=Ht.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Ht.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=Ht.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,n!==t.max_age&&(t.max_age=n,r=!0),s!==t.max_bytes&&(t.max_bytes=s,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(Yj,"updateStreamLimits");async function Kj(e){let t,r;try{t=await Tr.jetstream({domain:e}),r=await Tr.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw Hn.error("Unable to connect to:",e),n}return{js:t,jsm:r}}a(Kj,"connectToRemoteJS")});var bu=g((jfe,NL)=>{"use strict";var Ea=P_(),ha=DD(),Wj=$(),Qj=require("uuid").v4,Jfe=require("clone"),Gd=Ns(),ma=P(),zj=require("util"),Ei=Dn(),{handleHDBError:gr,hdb_errors:Jj}=se(),{HDB_ERROR_MSGS:xd,HTTP_STATUS_CODES:Rr}=Jj,{SchemaEventMsg:qd}=Pn(),OL=ut(),{getDatabases:jj}=(Ae(),ie(ke)),{transformReq:pa}=z();NL.exports={createSchema:Xj,createSchemaStructure:bL,createTable:Zj,createTableStructure:yL,createAttribute:sX,dropSchema:eX,dropTable:tX,dropAttribute:rX,getBackup:iX};async function Xj(e){let t=await bL(e);return Gd.signalSchemaChange(new qd(process.pid,e.operation,e.schema)),t}a(Xj,"createSchema");async function bL(e){let t=Ea.schema_object(e);if(t)throw gr(t,t.message,Rr.BAD_REQUEST,void 0,void 0,!0);if(pa(e),!await ha.checkSchemaExists(e.schema))throw gr(new Error,xd.SCHEMA_EXISTS_ERR(e.schema),Rr.BAD_REQUEST,ma.LOG_LEVELS.ERROR,xd.SCHEMA_EXISTS_ERR(e.schema),!0);return await Ei.createSchema(e),`database '${e.schema}' successfully created`}a(bL,"createSchemaStructure");async function Zj(e){return pa(e),e.hash_attribute=e.primary_key??e.hash_attribute,await yL(e)}a(Zj,"createTable");async function yL(e){let t=Ea.create_table_object(e);if(t)throw gr(t,t.message,Rr.BAD_REQUEST,void 0,void 0,!0);if(Ea.validateTableResidence(e.residence),!await ha.checkSchemaTableExists(e.schema,e.table))throw gr(new Error,xd.TABLE_EXISTS_ERR(e.schema,e.table),Rr.BAD_REQUEST,ma.LOG_LEVELS.ERROR,xd.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:Qj(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await Ei.createTable(n,e);else throw gr(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Rr.BAD_REQUEST);else await Ei.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(yL,"createTableStructure");async function eX(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=Ea.schema_object(e),n=t??r;if(n)throw gr(n,n.message,Rr.BAD_REQUEST,void 0,void 0,!0);pa(e);let s=await ha.checkSchemaExists(e.schema);if(s)throw gr(new Error,s,Rr.NOT_FOUND,ma.LOG_LEVELS.ERROR,s,!0);let i=await ha.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await Ei.dropSchema(e),Gd.signalSchemaChange(new qd(process.pid,e.operation,e.schema)),await OL.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(eX,"dropSchema");async function tX(e){let t=Ea.table_object(e);if(t)throw gr(t,t.message,Rr.BAD_REQUEST,void 0,void 0,!0);pa(e);let r=await ha.checkSchemaTableExists(e.schema,e.table);if(r)throw gr(new Error,r,Rr.NOT_FOUND,ma.LOG_LEVELS.ERROR,r,!0);return await Ei.dropTable(e),await OL.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(tX,"dropTable");async function rX(e){let t=Ea.attribute_object(e);if(t)throw gr(t,t.message,Rr.BAD_REQUEST,void 0,void 0,!0);pa(e);let r=await ha.checkSchemaTableExists(e.schema,e.table);if(r)throw gr(new Error,r,Rr.NOT_FOUND,ma.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw gr(new Error,"You cannot drop a hash attribute",Rr.BAD_REQUEST,void 0,void 0,!0);if(ma.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw gr(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Rr.BAD_REQUEST,void 0,void 0,!0);try{return await Ei.dropAttribute(e),nX(e),Gd.signalSchemaChange(new qd(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw Wj.error(`Got an error deleting attribute ${zj.inspect(e)}.`),n}}a(rX,"dropAttribute");function nX(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(nX,"dropAttributeFromGlobal");async function sX(e){pa(e);let t=jj()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw gr(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Rr.BAD_REQUEST,void 0,void 0,!0);return await Ei.createAttribute(e),Gd.signalSchemaChange(new qd(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(sX,"createAttribute");function iX(e){return Ei.getBackup(e)}a(iX,"getBackup")});var wL=g((Zfe,IL)=>{"use strict";var{OPERATIONS_ENUM:oX}=P(),VS=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=oX.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};IL.exports=VS});var $S=g((rEe,PL)=>{"use strict";var aX=Dn(),tEe=wL(),Fd=z(),kd=P(),cX=ee(),{handleHDBError:CL,hdb_errors:uX}=se(),{HDB_ERROR_MSGS:DL,HTTP_STATUS_CODES:LL}=uX,lX=Object.values(kd.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),ML="To use this operation audit log must be enabled in harperdb-config.yaml";PL.exports=_X;async function _X(e){if(Fd.isEmpty(e.schema))throw new Error(DL.SCHEMA_REQUIRED_ERR);if(Fd.isEmpty(e.table))throw new Error(DL.TABLE_REQUIRED_ERR);if(!cX.get(kd.CONFIG_PARAMS.LOGGING_AUDITLOG))throw CL(new Error,ML,LL.BAD_REQUEST,kd.LOG_LEVELS.ERROR,ML,!0);let t=Fd.checkSchemaTableExist(e.schema,e.table);if(t)throw CL(new Error,t,LL.NOT_FOUND,kd.LOG_LEVELS.ERROR,t,!0);if(!Fd.isEmpty(e.search_type)&&lX.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await aX.readAuditLog(e)}a(_X,"readAuditLog")});var vL=g((sEe,UL)=>{"use strict";var{OPERATIONS_ENUM:dX}=P(),YS=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=dX.GET_BACKUP,this.schema=t,this.table=r}};UL.exports=YS});var xL=g((cEe,HL)=>{"use strict";var fX=Dn(),oEe=vL(),KS=z(),EX=P(),aEe=ee(),{handleHDBError:hX,hdb_errors:mX}=se(),{HDB_ERROR_MSGS:BL,HTTP_STATUS_CODES:pX}=mX;HL.exports=SX;async function SX(e){if(KS.isEmpty(e.schema))throw new Error(BL.SCHEMA_REQUIRED_ERR);if(KS.isEmpty(e.table))throw new Error(BL.TABLE_REQUIRED_ERR);let t=KS.checkSchemaTableExist(e.schema,e.table);if(t)throw hX(new Error,t,pX.NOT_FOUND,EX.LOG_LEVELS.ERROR,t,!0);return await fX.getBackup(read_audit_log_object)}a(SX,"getBackup")});var $L=g((lEe,VL)=>{var hi=require("validate.js"),qL=Xe(),Sa=P(),{handleHDBError:TX,hdb_errors:gX}=se(),{HDB_ERROR_MSGS:mt,HTTP_STATUS_CODES:RX}=gX,WS=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),AX={STRUCTURE_USER:"structure_user"},GL=Object.values(Sa.ROLE_TYPES_ENUM),OX="attribute_permissions",bX="attribute_name",{PERMS_CRUD_ENUM:Ta}=Sa,yX=[OX,...Object.values(Ta)],FL=[Ta.READ,Ta.INSERT,Ta.UPDATE],NX=[bX,...FL];function IX(e){let t=WS();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,kL(e,t)}a(IX,"addRoleValidation");function wX(e){let t=WS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,kL(e,t)}a(wX,"alterRoleValidation");function CX(e){let t=WS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,qL.validateObject(e,t)}a(CX,"dropRoleValidation");var DX=["operation","role","id","permission","hdb_user","hdb_auth_header"];function kL(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)DX.includes(n[o])||s.push(n[o]);s.length>0&&At(mt.INVALID_ROLE_JSON_KEYS(s),r);let i=qL.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{At(o,r)}),e.permission){let o=LX(e);o&&At(o,r),GL.forEach(c=>{e.permission[c]&&!hi.isBoolean(e.permission[c])&&At(mt.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(GL.indexOf(o)<0){if(o===AX.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]||At(mt.SCHEMA_NOT_FOUND(d),r)}continue}At(mt.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){At(mt.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]){At(mt.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(_).forEach(l=>{yX.includes(l)||At(mt.INVALID_PERM_KEY(l),r,o,u)}),Object.values(Ta).forEach(l=>{hi.isDefined(_[l])?hi.isBoolean(_[l])||At(mt.TABLE_PERM_NOT_BOOLEAN(l),r,o,u):At(mt.TABLE_PERM_MISSING(l),r,o,u)}),hi.isDefined(_.attribute_permissions)){if(!hi.isArray(_.attribute_permissions)){At(mt.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{At(mt.ATTR_PERMS_ARRAY_MISSING,r,o,u);continue}if(_.attribute_permissions){let l=global.hdb_schema[o][u].attributes.map(({attribute:E})=>E),d={read:!1,insert:!1,update:!1};for(let E in _.attribute_permissions){let f=_.attribute_permissions[E];if(Object.keys(f).forEach(p=>{!NX.includes(p)&&p!==Ta.DELETE&&At(mt.INVALID_ATTR_PERM_KEY(p),r,o,u)}),!hi.isDefined(f.attribute_name)){At(mt.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=f.attribute_name;if(!l.includes(h)){At(mt.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}FL.forEach(p=>{hi.isDefined(f[p])?hi.isBoolean(f[p])||At(mt.ATTR_PERM_NOT_BOOLEAN(p,h),r,o,u):At(mt.ATTR_PERM_MISSING(p,h),r,o,u)}),!d.read&&f.read===!0&&(d.read=!0),!d.insert&&f.insert===!0&&(d.insert=!0),!d.update&&f.update===!0&&(d.update=!0)}if(_.read===!1&&d.read===!0||_.insert===!1&&d.insert===!0||_.update===!1&&d.update===!0){let E=`${o}.${u}`;At(mt.MISMATCHED_TABLE_ATTR_PERMS(E),r,o,u)}}}}return MX(r)}a(kL,"customValidate");VL.exports={addRoleValidation:IX,alterRoleValidation:wX,dropRoleValidation:CX};function LX(e){let{operation:t,permission:r}=e;if(t===Sa.OPERATIONS_ENUM.ADD_ROLE||t===Sa.OPERATIONS_ENUM.ALTER_ROLE){let n=r.super_user===!0,s=r.cluster_user===!0;if(Object.keys(r).length>1&&(n||s)){if(s&&n)return mt.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Sa.ROLE_TYPES_ENUM.SUPER_USER:Sa.ROLE_TYPES_ENUM.CLUSTER_USER;return mt.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(LX,"validateNoSUPerms");function MX(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:mt.ROLE_PERMS_ERROR,...e};return TX(new Error,n,RX.BAD_REQUEST)}else return null}a(MX,"generateRolePermResponse");function At(e,t,r,n){if(!r)t.main_permissions.push(e);else{let s=n?r+"_"+n:r;t.schema_permissions[s]?t.schema_permissions[s].push(e):t.schema_permissions[s]=[e]}}a(At,"addPermError")});var ZS=g((dEe,QL)=>{"use strict";var YL=qr(),KL=Gr(),PX=ci(),zS=$L(),JS=Ns(),UX=require("uuid").v4,vX=require("util"),Vd=P(),BX=z(),jS=KL.searchByValue,HX=KL.searchByHash,xX=vX.promisify(PX.delete),GX=rs(),qX=oa(),{hdb_errors:FX,handleHDBError:_o}=se(),{HDB_ERROR_MSGS:WL,HTTP_STATUS_CODES:yu}=FX,{UserEventMsg:XS}=Pn();QL.exports={addRole:kX,alterRole:VX,dropRole:$X,listRoles:YX};function QS(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(QS,"scrubRoleDetails");async function kX(e){let t=zS.addRoleValidation(e);if(t)throw t;e=QS(e);let r={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await jS(r)||[])}catch(i){throw _o(i)}if(n&&n.length>0)throw _o(new Error,WL.ROLE_ALREADY_EXISTS(e.role),yu.CONFLICT,void 0,void 0,!0);e.id||(e.id=UX());let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await YL.insert(s),JS.signalUserChange(new XS(process.pid)),e=QS(e),e}a(kX,"addRole");async function VX(e){let t=zS.alterRoleValidation(e);if(t)throw t;e=QS(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await YL.update(r)}catch(s){throw _o(s)}if(n&&n?.message==="updated 0 of 1 records")throw _o(new Error,"Invalid role id",yu.BAD_REQUEST,void 0,void 0,!0);return await JS.signalUserChange(new XS(process.pid)),e}a(VX,"alterRole");async function $X(e){let t=zS.dropRoleValidation(e);if(t)throw _o(new Error,t,yu.BAD_REQUEST,void 0,void 0,!0);let r=new qX(Vd.SYSTEM_SCHEMA_NAME,Vd.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await HX(r));if(n.length===0)throw _o(new Error,WL.ROLE_NOT_FOUND,yu.NOT_FOUND,void 0,void 0,!0);let s=new GX(Vd.SYSTEM_SCHEMA_NAME,Vd.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await jS(s)),o=!1;if(BX.isEmptyOrZeroLength(i)===!1){for(let u=0;u<i.length;u++)if(i[u].active===!0){o=!0;break}}if(o===!0)throw _o(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,yu.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await xX(c),JS.signalUserChange(new XS(process.pid)),`${n[0].role} successfully deleted`}a($X,"dropRole");async function YX(){return jS({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(YX,"listRoles")});var XL=g((EEe,jL)=>{"use strict";var KX=ee(),mi=require("joi"),WX=Xe(),zL=require("moment"),QX=require("fs-extra"),eT=require("path"),zX=require("lodash"),Nu=P(),{LOG_LEVELS:fo}=P(),JX="YYYY-MM-DD hh:mm:ss",jX=eT.resolve(__dirname,"../logs");jL.exports=function(e){return WX.validateBySchema(e,XX)};var XX=mi.object({from:mi.custom(JL),until:mi.custom(JL),level:mi.valid(fo.NOTIFY,fo.FATAL,fo.ERROR,fo.WARN,fo.INFO,fo.DEBUG,fo.TRACE),order:mi.valid("asc","desc"),limit:mi.number().min(1),start:mi.number().min(0),log_name:mi.custom(ZX)});function JL(e,t){if(zL(e,zL.ISO_8601).format(JX)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(JL,"validateDatetime");function ZX(e,t){if(zX.invert(Nu.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=KX.get(Nu.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?Nu.LOG_NAMES.HDB:e,i=s===Nu.LOG_NAMES.INSTALL?eT.join(jX,Nu.LOG_NAMES.INSTALL):eT.join(n,s);return QX.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(ZX,"validateReadLogPath")});var rT=g((mEe,eM)=>{"use strict";var $d=P(),eZ=$(),tZ=ee(),rZ=XL(),tT=require("path"),ZL=require("fs-extra"),{once:nZ}=require("events"),{handleHDBError:sZ,hdb_errors:iZ}=se(),{PACKAGE_ROOT:oZ}=P(),aZ=tT.join(oZ,"logs"),cZ=1e3,uZ=200;eM.exports=lZ;async function lZ(e){let t=rZ(e);if(t)throw sZ(t,t.message,iZ.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=tZ.get($d.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e.log_name===void 0?$d.LOG_NAMES.HDB:e.log_name,s=n===$d.LOG_NAMES.INSTALL?tT.join(aZ,$d.LOG_NAMES.INSTALL):tT.join(r,n),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?cZ:e.limit,E=e.order===void 0?void 0:e.order,f=e.start===void 0?0:e.start,h=f+d,p=0;E==="desc"&&!u&&!l&&(p=Math.max(ZL.statSync(s).size-(h+5)*uZ,0));let S=ZL.createReadStream(s,{start:p});S.on("error",U=>{eZ.error(U)});let T=0,R=[],N="",b;S.on("data",U=>{let F=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;U=N+U;let M=0,Q;for(;(Q=F.exec(U))&&!S.destroyed;){b&&(b.message=U.slice(M,Q.index),x(b));let[J,j,ae]=Q,ce=ae.split("] ["),de=ce[0],Be=ce[1];ce.splice(0,2),b={timestamp:j,thread:de,level:Be,tags:ce,message:""},M=Q.index+J.length}N=U.slice(M)}),S.on("end",U=>{S.destroyed||b&&(b.message=N.trim(),x(b))}),S.resume();function x(U){let F,M,Q;switch(!0){case(i&&c&&_):F=new Date(U.timestamp),M=new Date(u),Q=new Date(l),U.level===o&&F>=M&&F<=Q&&T<f?T++:U.level===o&&F>=M&&F<=Q&&(pi(U,E,R),T++,T===h&&S.destroy());break;case(i&&c):F=new Date(U.timestamp),M=new Date(u),U.level===o&&F>=M&&T<f?T++:U.level===o&&F>=M&&(pi(U,E,R),T++,T===h&&S.destroy());break;case(i&&_):F=new Date(U.timestamp),Q=new Date(l),U.level===o&&F<=Q&&T<f?T++:U.level===o&&F<=Q&&(pi(U,E,R),T++,T===h&&S.destroy());break;case(c&&_):F=new Date(U.timestamp),M=new Date(u),Q=new Date(l),F>=M&&F<=Q&&T<f?T++:F>=M&&F<=Q&&(pi(U,E,R),T++,T===h&&S.destroy());break;case i:U.level===o&&T<f?T++:U.level===o&&(pi(U,E,R),T++,T===h&&S.destroy());break;case c:F=new Date(U.timestamp),M=new Date(u),F>=M&&T<f?T++:F>=M&&T>=f&&(pi(U,E,R),T++,T===h&&S.destroy());break;case _:F=new Date(U.timestamp),Q=new Date(l),F<=Q&&T<f?T++:F<=Q&&T>=f&&(pi(U,E,R),T++,T===h&&S.destroy());break;default:T<f?T++:(pi(U,E,R),T++,T===h&&S.destroy())}}return a(x,"onLogMessage"),await nZ(S,"close"),R}a(lZ,"readLog");function pi(e,t,r){t==="desc"?_Z(e,r):t==="asc"?dZ(e,r):r.push(e)}a(pi,"pushLineToResult");function _Z(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)>r?n=i+1:s=i}t.splice(n,0,e)}a(_Z,"insertDescending");function dZ(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)<r?n=i+1:s=i}t.splice(n,0,e)}a(dZ,"insertAscending")});var Yd=g((REe,sM)=>{"use strict";var nT=require("joi"),{string:Iu,boolean:tM,date:fZ}=nT.types(),EZ=Xe(),{validateSchemaExists:SEe,validateTableExists:TEe,validateSchemaName:gEe}=jn(),hZ=P(),mZ=Ve(),rM=ee();rM.initSync();var pZ=Iu.invalid(rM.get(hZ.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(mZ.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(),nM={operation:Iu.valid("add_node","update_node","set_node_replication"),node_name:pZ,subscriptions:nT.array().items({table:Iu.optional(),schema:Iu.optional(),database:Iu.optional(),subscribe:tM.required(),publish:tM.required().custom(TZ),start_time:fZ.iso()}).min(1).required()};function SZ(e){return EZ.validateBySchema(e,nT.object(nM))}a(SZ,"addUpdateNodeValidator");function TZ(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(TZ,"checkForFalsy");sM.exports={addUpdateNodeValidator:SZ,validation_schema:nM}});var oM=g((OEe,iM)=>{var gZ=Xe(),RZ={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};iM.exports=function(e){return gZ.validateObject(e,RZ)}});var Kd=g((bEe,aM)=>{"use strict";var AZ=P().OPERATIONS_ENUM,sT=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=AZ.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};aM.exports=sT});var uM=g((NEe,cM)=>{"use strict";var OZ={OPERATION:"operation",REFRESH:"refresh"},iT=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},oT=class{static{a(this,"JWTRSAKeys")}constructor(t,r,n){this.public_key=t,this.private_key=r,this.passphrase=n}};cM.exports={JWTTokens:iT,TOKEN_TYPE_ENUM:OZ,JWTRSAKeys:oT}});var Du=g((wEe,fM)=>{"use strict";var Cu=require("jsonwebtoken"),aT=require("fs-extra"),cT=z(),dn=P(),{handleHDBError:Ar,hdb_errors:bZ}=se(),{HTTP_STATUS_CODES:Or,AUTHENTICATION_ERROR_MSGS:br}=bZ,wu=$(),lM=Q_(),_T=_n(),yZ=qr().update,NZ=Kd(),IZ=Ns(),{UserEventMsg:wZ}=Pn(),Si=ee();Si.initSync();var uT=require("path"),{JWTTokens:CZ,JWTRSAKeys:DZ,TOKEN_TYPE_ENUM:Wd}=uM(),LZ=Si.get(dn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Si.get(dn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",MZ=Si.get(dn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Si.get(dn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",Qd="RS256",lT;fM.exports={createTokens:PZ,validateOperationToken:vZ,refreshOperationToken:UZ,validateRefreshToken:dM};async function PZ(e){if(cT.isEmpty(e)||typeof e!="object")throw Ar(new Error,br.INVALID_AUTH_OBJECT,Or.BAD_REQUEST,void 0,void 0,!0);if(cT.isEmpty(e.username))throw Ar(new Error,br.USERNAME_REQUIRED,Or.BAD_REQUEST,void 0,void 0,!0);if(cT.isEmpty(e.password))throw Ar(new Error,br.PASSWORD_REQUIRED,Or.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await _T.findAndValidateUser(e.username,e.password),!t)throw Ar(new Error,br.INVALID_CREDENTIALS,Or.UNAUTHORIZED,void 0,void 0,!0)}catch(E){throw wu.error(E),Ar(new Error,br.INVALID_CREDENTIALS,Or.UNAUTHORIZED,void 0,void 0,!0)}let r=await zd(),n=!1,s=!1;t.role&&t.role.permission&&(n=t.role.permission.super_user===!0,s=t.role.permission.cluster_user===!0);let i={username:e.username,super_user:n,cluster_user:s},o=await _M(i,r.private_key,r.passphrase),c=await Cu.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:MZ,algorithm:Qd,subject:Wd.REFRESH}),u=lM.hash(c),_=new NZ(dn.SYSTEM_SCHEMA_NAME,dn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),l,d;try{l=await yZ(_)}catch(E){wu.error(E),d=E}if(d!==void 0||l.skipped_hashes.length>0)throw Ar(new Error,br.REFRESH_TOKEN_SAVE_FAILED,Or.INTERNAL_SERVER_ERROR);return IZ.signalUserChange(new wZ(process.pid)),new CZ(o,c)}a(PZ,"createTokens");async function _M(e,t,r){return await Cu.sign(e,{key:t,passphrase:r},{expiresIn:LZ,algorithm:Qd,subject:Wd.OPERATION})}a(_M,"signOperationToken");async function zd(){if(lT===void 0)try{let e=uT.join(Si.getHdbBasePath(),dn.LICENSE_KEY_DIR_NAME,dn.JWT_ENUM.JWT_PASSPHRASE_NAME),t=uT.join(Si.getHdbBasePath(),dn.LICENSE_KEY_DIR_NAME,dn.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=uT.join(Si.getHdbBasePath(),dn.LICENSE_KEY_DIR_NAME,dn.JWT_ENUM.JWT_PUBLIC_KEY_NAME),n=(await aT.readFile(e)).toString(),s=(await aT.readFile(t)).toString(),i=(await aT.readFile(r)).toString();lT=new DZ(i,s,n)}catch(e){throw wu.error(e),Ar(new Error,br.NO_ENCRYPTION_KEYS,Or.INTERNAL_SERVER_ERROR)}return lT}a(zd,"getJWTRSAKeys");async function UZ(e){if(!e)throw Ar(new Error,br.INVALID_BODY,Or.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw Ar(new Error,br.REFRESH_TOKEN_REQUIRED,Or.BAD_REQUEST,void 0,void 0,!0);await dM(e.refresh_token);let t=await zd(),r=await Cu.decode(e.refresh_token);return{operation_token:await _M({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(UZ,"refreshOperationToken");async function vZ(e){try{let t=await zd(),r=await Cu.verify(e,t.public_key,{algorithms:Qd,subject:Wd.OPERATION});return await _T.findAndValidateUser(r.username,void 0,!1)}catch(t){throw wu.warn(t),t.name&&t.name==="TokenExpiredError"?Ar(new Error,br.TOKEN_EXPIRED,Or.FORBIDDEN):Ar(new Error,br.INVALID_TOKEN,Or.UNAUTHORIZED)}}a(vZ,"validateOperationToken");async function dM(e){let t;try{let r=await zd(),n=await Cu.verify(e,r.public_key,{algorithms:Qd,subject:Wd.REFRESH});t=await _T.findAndValidateUser(n.username,void 0,!1)}catch(r){throw wu.warn(r),r.name&&r.name==="TokenExpiredError"?Ar(new Error,br.TOKEN_EXPIRED,Or.FORBIDDEN):Ar(new Error,br.INVALID_TOKEN,Or.UNAUTHORIZED)}if(!lM.validate(t.refresh_token,e))throw Ar(new Error,br.INVALID_TOKEN,Or.UNAUTHORIZED);return t}a(dM,"validateRefreshToken")});var dT=g((LEe,mM)=>{"use strict";var BZ=oM(),ga=require("passport"),HZ=require("passport-local").Strategy,xZ=require("passport-http").BasicStrategy,GZ=require("util"),qZ=_n(),hM=GZ.callbackify(qZ.findAndValidateUser),DEe=Ur(),FZ=P(),EM=Du();ga.use(new HZ(function(e,t,r){hM(e,t,r)}));ga.use(new xZ(function(e,t,r){hM(e,t,r)}));ga.serializeUser(function(e,t){t(null,e)});ga.deserializeUser(function(e,t){t(null,e)});function kZ(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let n,s;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");n=o[0],s=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("Must login")}switch(a(i,"handleResponse"),n){case"Basic":ga.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===FZ.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?EM.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):EM.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:ga.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(kZ,"authorize");function VZ(e,t){let r=BZ(e);if(r){t(r);return}let n={authorized:!0,messages:[]},s=e.user.role;if(!s?.permission)return t("Invalid role");let i=JSON.parse(s.permission);if(i.super_user)return t(null,n);if(!i[e.schema])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.schema} schema`),t(null,n);if(!i[e.schema].tables[e.table])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.table} table`),t(null,n);if(!i[e.schema].tables[e.table][e.operation])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return n.authorized=!1,n.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let o=i[e.schema].tables[e.table].attribute_permissions;for(let c in o)e.attributes.indexOf(o[c].attribute_name)>-1&&!o[c][e.operation]&&(n.authorized=!1,n.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,n)}a(VZ,"checkPermissions");mM.exports={authorize:kZ,checkPermissions:VZ}});var Ti=g((PEe,pM)=>{"use strict";var fT=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},ET=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};pM.exports={Node:fT,NodeSubscription:ET}});var TM=g((vEe,SM)=>{"use strict";var $Z=P().OPERATIONS_ENUM,hT=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=$Z.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};SM.exports=hT});var Lu=g((HEe,gM)=>{"use strict";var mT=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},pT=class{static{a(this,"RemotePayloadSubscription")}constructor(t,r,n,s,i,o,c){this.schema=t,this.table=r,this.hash_attribute=n,this.publish=s,this.subscribe=i,this.start_time=o,c!==void 0&&(this.attributes=c)}};gM.exports={RemotePayloadObject:mT,RemotePayloadSubscription:pT}});var AM=g((GEe,RM)=>{"use strict";var ST=class{static{a(this,"TableSizeObject")}constructor(t,r,n=0,s=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=n,this.record_count=s,this.transaction_log_size=i,this.transaction_log_record_count=o}};RM.exports=ST});var yM=g(($Ee,bM)=>{"use strict";var YZ=AM(),FEe=ft(),OM=Qe(),KZ=$(),{getSchemaPath:kEe,getTransactionAuditStorePath:VEe}=je(),{getDatabases:WZ}=(Ae(),ie(ke));bM.exports=QZ;async function QZ(e){let t=new YZ;try{let r=WZ()[e.schema]?.[e.name],n=r.primaryStore.getStats(),s=r.auditStore?.getStats(),i=await OM.environmentDataSize(schema_path,e.name),o=await OM.environmentDataSize(txn_path,e.name);t.schema=e.schema,t.table=e.name,t.table_size=i,t.record_count=n.entryCount,t.transaction_log_size=o,t.transaction_log_record_count=s.entryCount}catch(r){KZ.warn(`unable to stat table dbi due to ${r}`)}return t}a(QZ,"lmdbGetTableSize")});var IM=g((KEe,NM)=>{"use strict";var TT=class{static{a(this,"SystemInformationObject")}constructor(t,r,n,s,i,o,c){this.system=t,this.time=r,this.cpu=n,this.memory=s,this.disk=i,this.network=o,this.harperdb_processes=c}};NM.exports=TT});var Ra=g((XEe,LM)=>{"use strict";var zZ=require("fs-extra"),JZ=require("path"),sr=require("systeminformation"),gi=$(),wM=ut(),QEe=Ve(),jd=P(),jZ=yM(),XZ=bs(),{getThreadInfo:CM}=We(),DT=ee();DT.initSync();var ZZ=IM(),{openEnvironment:zEe}=Qe(),{getSchemaPath:JEe}=je(),{database:jEe,databases:gT}=(Ae(),ie(ke)),Jd;LM.exports={getHDBProcessInfo:bT,getNetworkInfo:NT,getDiskInfo:yT,getMemoryInfo:OT,getCPUInfo:AT,getTimeInfo:RT,getSystemInformation:IT,systemInformation:e5,getTableSize:wT,getMetrics:CT};function RT(){return sr.time()}a(RT,"getTimeInfo");async function AT(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:u,cache:_,...l}=await sr.cpu();l.cpu_speed=await sr.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:E,raw_currentload_irq:f,raw_currentload_nice:h,raw_currentload_system:p,raw_currentload_user:S,cpus:T,...R}=await sr.currentLoad();return R.cpus=[],T.forEach(N=>{let{raw_load:b,raw_load_idle:x,raw_load_irq:U,raw_load_nice:F,raw_load_system:M,raw_load_user:Q,...J}=N;R.cpus.push(J)}),l.current_load=R,l}catch(e){return gi.error(`error in getCPUInfo: ${e}`),{}}}a(AT,"getCPUInfo");async function OT(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await sr.mem();return Object.assign(s,process.memoryUsage())}catch(e){return gi.error(`error in getMemoryInfo: ${e}`),{}}}a(OT,"getMemoryInfo");async function bT(){let e={core:[],clustering:[]};try{let t=await sr.processes(),r;try{r=Number.parseInt(await zZ.readFile(JZ.join(DT.get(jd.CONFIG_PARAMS.ROOTPATH),jd.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===jd.NODE_ERROR_CODES.ENOENT)gi.warn("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB. This could be because HarperDB is not running.");else throw n}t.list.forEach(n=>{n.pid===r?e.core.push(n):n.name==="nats-server"&&e.clustering.push(n)});for(let n of e.core)for(let s of t.list)s.pid===n.parentPid&&(s.name==="PM2"||s.command==="PM2")&&(n.parent="PM2");return e}catch(t){return gi.error(`error in getHDBProcessInfo: ${t}`),e}}a(bT,"getHDBProcessInfo");async function yT(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await sr.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:u,..._}=await sr.fsStats();return e.read_write=_,e.size=await sr.fsSize(),e}catch(t){return gi.error(`error in getDiskInfo: ${t}`),e}}a(yT,"getDiskInfo");async function NT(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await sr.networkInterfaceDefault(),e.latency=await sr.inetChecksite("google.com"),(await sr.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:o,dhcp:c,dnsSuffix:u,ieee8021xAuth:_,ieee8021xState:l,carrier_changes:d,...E}=n;e.interfaces.push(E)}),(await sr.networkStats()).forEach(n=>{let{rx_sec:s,tx_sec:i,ms:o,...c}=n;e.stats.push(c)}),e}catch(t){return gi.error(`error in getNetworkInfo: ${t}`),e}}a(NT,"getNetworkInfo");async function IT(){if(Jd!==void 0)return Jd;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await sr.osInfo();e=c;let u=await sr.versions("node, npm");return e.node_version=u.node,e.npm_version=u.npm,Jd=e,Jd}catch(t){return gi.error(`error in getSystemInformation: ${t}`),e}}a(IT,"getSystemInformation");async function wT(){let e=[],t=await XZ.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await jZ(n));return e}a(wT,"getTableSize");async function CT(){let e={};for(let t in gT){let r=e[t]={},n=r.tables={};for(let s in gT[t])try{let i=gT[t][s];r.readers||(Object.assign(r,i.primaryStore.rootStore.getStats()),delete r.root,r.readers=i.primaryStore.rootStore.readerList().split(/\n\s+/).slice(1).map(u=>{let[_,l,d]=u.trim().split(" ");return{pid:_,thread:l,txnid:d}}),i.primaryStore.auditStore&&(r.audit=i.auditStore.getStats()));let o=i.primaryStore.getStats(),c={};for(let u of["treeDepth","treeBranchPageCount","treeLeafPageCount","entryCount","overflowPages"])c[u]=o[u];n[s]=c}catch(i){gi.notify(`Error getting stats for table ${s}: ${i}`)}}return e}a(CT,"getMetrics");async function DM(){if(DT.get(jd.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await wM.getNATSReferences(),t=await wM.listStreams(),r=[];for(let n of t){let s=[],i=await e.consumers.list(n.config.name);for await(let c of i)s.push({name:c.name,created:c.created,num_ack_pending:c.num_ack_pending,num_redelivered:c.num_redelivered,num_waiting:c.num_waiting,num_pending:c.num_pending});let o={stream_name:n.config.name,database:n.config.subjects[0].split(".")[1],table:n.config.subjects[0].split(".")[2],state:n.state,consumers:s};r.push(o)}return r}}a(DM,"getNatsStreamInfo");async function e5(e){let t=new ZZ;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await IT(),t.time=RT(),t.cpu=await AT(),t.memory=await OT(),t.disk=await yT(),t.network=await NT(),t.harperdb_processes=await bT(),t.table_size=await wT(),t.metrics=await CT(),t.threads=await CM(),t.replication=await DM(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await IT();break;case"time":t.time=RT();break;case"cpu":t.cpu=await AT();break;case"memory":t.memory=await OT();break;case"disk":t.disk=await yT();break;case"network":t.network=await NT();break;case"harperdb_processes":t.harperdb_processes=await bT();break;case"table_size":t.table_size=await wT();break;case"database_metrics":case"metrics":t.metrics=await CT();break;case"threads":t.threads=await CM();break;case"replication":t.replication=await DM();break;default:break}return t}a(e5,"systemInformation")});var Zd=g((ehe,MM)=>{"use strict";MM.exports={version:t5,printVersion:r5};var Xd=du();function t5(){if(Xd)return Xd.version}a(t5,"version");function r5(){Xd&&console.log(`HarperDB Version ${Xd.version}`)}a(r5,"printVersion")});var fn=g((she,BM)=>{"use strict";var n5=qr(),LT=z(),s5=require("util"),Eo=P(),PM=ee();PM.initSync();var i5=dT(),UM=Gr(),{Node:rhe,NodeSubscription:nhe}=Ti(),o5=oa(),a5=TM(),{RemotePayloadObject:c5,RemotePayloadSubscription:u5}=Lu(),{handleHDBError:l5,hdb_errors:_5}=se(),{HTTP_STATUS_CODES:d5,HDB_ERROR_MSGS:f5}=_5,E5=rs(),h5=Ra(),m5=Zd(),{getDatabases:p5}=(Ae(),ie(ke)),S5=s5.promisify(i5.authorize),T5=UM.searchByHash,g5=UM.searchByValue;BM.exports={authHeaderToUser:R5,isEmpty:A5,getNodeRecord:O5,upsertNodeRecord:b5,buildNodePayloads:y5,checkClusteringEnabled:N5,getAllNodeRecords:I5,getSystemInfo:w5,reverseSubscription:vM};async function R5(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await S5(t,null),e}a(R5,"authHeaderToUser");function A5(e){return e==null}a(A5,"isEmpty");async function O5(e){let t=new o5(Eo.SYSTEM_SCHEMA_NAME,Eo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return T5(t)}a(O5,"getNodeRecord");async function b5(e){let t=new a5(Eo.SYSTEM_SCHEMA_NAME,Eo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return n5.upsert(t)}a(b5,"upsertNodeRecord");function vM(e){if(LT.isEmpty(e.subscribe)||LT.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:n}=e,s={schema:t,table:r,hash_attribute:n};return e.subscribe===!0&&e.publish===!1?(s.subscribe=!1,s.publish=!0):e.subscribe===!1&&e.publish===!0?(s.subscribe=!0,s.publish=!1):(s.subscribe=e.subscribe,s.publish=e.publish),s}a(vM,"reverseSubscription");function y5(e,t,r,n){let s=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:u,table:_}=c,l=LT.getTableHashAttribute(u,_),{subscribe:d,publish:E}=vM(c),f=p5()[u]?.[_],h=new u5(u,_,l,E,d,c.start_time,f.schemaDefined?f.attributes:void 0);s.push(h)}return new c5(r,t,s,n)}a(y5,"buildNodePayloads");function N5(){if(!PM.get(Eo.CONFIG_PARAMS.CLUSTERING_ENABLED))throw l5(new Error,f5.CLUSTERING_NOT_ENABLED,d5.BAD_REQUEST,void 0,void 0,!0)}a(N5,"checkClusteringEnabled");async function I5(){let e=new E5(Eo.SYSTEM_SCHEMA_NAME,Eo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await g5(e))}a(I5,"getAllNodeRecords");async function w5(){let e=await h5.getSystemInformation();return{hdb_version:m5.version(),node_version:e.node_version,platform:e.platform}}a(w5,"getSystemInfo")});var MT=g((ohe,$M)=>{"use strict";var ef=ut(),HM=z(),xM=Ve(),GM=P(),tf=$(),qM=bu(),C5=hd(),{RemotePayloadObject:D5}=Lu(),{handleHDBError:FM,hdb_errors:L5}=se(),{HTTP_STATUS_CODES:kM}=L5,{NodeSubscription:VM}=Ti();$M.exports=M5;async function M5(e,t){let r;try{r=await ef.request(`${t}.${xM.REQUEST_SUFFIX}`,new D5(GM.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),tf.trace("Response from remote describe all request:",r)}catch(o){tf.error(`addNode received error from describe all request to remote node: ${o}`);let c=ef.requestErrorHandler(o,"add_node",t);throw FM(new Error,c,kM.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===xM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw FM(new Error,o,kM.INTERNAL_SERVER_ERROR,"error",o)}let n=r.message,s=[],i=[];for(let o of e){let{table:c}=o,u=o.database??o.schema??"data";if(u===GM.SYSTEM_SCHEMA_NAME){await ef.createLocalTableStream(u,c);let h=new VM(u,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=HM.doesSchemaExist(u),l=n[u]!==void 0,d=c?HM.doesTableExist(u,c):!0,E=c?n?.[u]?.[c]!==void 0:!0;if(!_&&!l||!d&&!E){s.push(o);continue}if(!_&&l&&(tf.trace(`addNode creating schema: ${u}`),await qM.createSchema({operation:"create_schema",schema:u})),!d&&E){tf.trace(`addNode creating table: ${c} in schema: ${u} with attributes ${JSON.stringify(n[u][c].attributes)}`);let h=new C5(u,c,n[u][c].hash_attribute);n[u][c].attributes&&(h.attributes=n[u][c].attributes),await qM.createTable(h)}await ef.createLocalTableStream(u,c);let f=new VM(u,c,o.publish,o.subscribe);f.start_time=o.start_time,i.push(f)}return{added:i,skipped:s}}a(M5,"reviewSubscriptions")});var of=g((che,WM)=>{"use strict";var{handleHDBError:rf,hdb_errors:P5}=se(),{HTTP_STATUS_CODES:nf}=P5,{addUpdateNodeValidator:U5}=Yd(),sf=$(),KM=P(),YM=Ve(),v5=z(),Mu=ut(),Pu=fn(),B5=ee(),H5=MT(),{Node:x5,NodeSubscription:G5}=Ti(),{broadcast:q5}=We(),F5="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",k5="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",V5=B5.get(KM.CONFIG_PARAMS.CLUSTERING_NODENAME);WM.exports=$5;async function $5(e,t=!1){sf.trace("addNode called with:",e),Pu.checkClusteringEnabled();let r=U5(e);if(r)throw rf(r,r.message,nf.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let d=await Pu.getNodeRecord(n);if(!v5.isEmptyOrZeroLength(d))throw rf(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,nf.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await H5(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=F5,o;let c=Pu.buildNodePayloads(s,V5,KM.OPERATIONS_ENUM.ADD_NODE,await Pu.getSystemInfo()),u=[];for(let d=0,E=s.length;d<E;d++){let f=s[d];s[d].start_time===void 0&&delete s[d].start_time,u.push(new G5(f.schema,f.table,f.publish,f.subscribe))}sf.trace("addNode sending remote payload:",c);let _;try{_=await Mu.request(`${n}.${YM.REQUEST_SUFFIX}`,c)}catch(d){sf.error(`addNode received error from request: ${d}`);for(let f=0,h=s.length;f<h;f++){let p=s[f];p.publish=!1,p.subscribe=!1,await Mu.updateRemoteConsumer(p,n)}let E=Mu.requestErrorHandler(d,"add_node",n);throw rf(new Error,E,nf.INTERNAL_SERVER_ERROR,"error",E)}if(_.status===YM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${n}: ${_.message}`;throw rf(new Error,d,nf.INTERNAL_SERVER_ERROR,"error",d)}sf.trace(_);for(let d=0,E=s.length;d<E;d++){let f=s[d];await Mu.updateRemoteConsumer(f,n),f.subscribe===!0&&await Mu.updateConsumerIterator(f.schema,f.table,n,"start")}let l=new x5(n,u,_.system_info);return await Pu.upsertNodeRecord(l),q5({type:"nats_update"}),i.length>0?o.message=k5:o.message=`Successfully added '${n}' to manifest`,o}a($5,"addNode")});var vT=g((_he,JM)=>{"use strict";var{handleHDBError:PT,hdb_errors:Y5}=se(),{HTTP_STATUS_CODES:UT}=Y5,{addUpdateNodeValidator:K5}=Yd(),Uu=$(),zM=P(),QM=Ve(),lhe=z(),vu=ut(),Bu=fn(),W5=ee(),{cloneDeep:Q5}=require("lodash"),z5=MT(),{Node:J5,NodeSubscription:j5}=Ti(),{broadcast:X5}=We(),Z5="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",e8="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",t8=W5.get(zM.CONFIG_PARAMS.CLUSTERING_NODENAME);JM.exports=r8;async function r8(e){Uu.trace("updateNode called with:",e),Bu.checkClusteringEnabled();let t=K5(e);if(t)throw PT(t,t.message,UT.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await Bu.getNodeRecord(r);s.length>0&&(n=Q5(s));let{added:i,skipped:o}=await z5(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=Z5,c;let u=Bu.buildNodePayloads(i,t8,zM.OPERATIONS_ENUM.UPDATE_NODE,await Bu.getSystemInfo());for(let l=0,d=i.length;l<d;l++){let E=i[l];Uu.trace(`updateNode updating work stream for node: ${r} subscription:`,E),i[l].start_time===void 0&&delete i[l].start_time}Uu.trace("updateNode sending remote payload:",u);let _;try{_=await vu.request(`${r}.${QM.REQUEST_SUFFIX}`,u)}catch(l){Uu.error(`updateNode received error from request: ${l}`);let d=vu.requestErrorHandler(l,"update_node",r);throw PT(new Error,d,UT.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===QM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let l=`Error returned from remote node ${r}: ${_.message}`;throw PT(new Error,l,UT.INTERNAL_SERVER_ERROR,"error",l)}Uu.trace(_);for(let l=0,d=i.length;l<d;l++){let E=i[l];await vu.updateRemoteConsumer(E,r),E.subscribe===!0?await vu.updateConsumerIterator(E.schema,E.table,r,"start"):await vu.updateConsumerIterator(E.schema,E.table,r,"stop")}return n||(n=[new J5(r,[],_.system_info)]),await n8(n[0],i,_.system_info),o.length>0?c.message=e8:c.message=`Successfully updated '${r}'`,c}a(r8,"updateNode");async function n8(e,t,r){let n=e;for(let s=0,i=t.length;s<i;s++){let o=t[s],c=!1;for(let u=0,_=e.subscriptions.length;u<_;u++){let l=n.subscriptions[u];if(l.schema===o.schema&&l.table===o.table){l.publish=o.publish,l.subscribe=o.subscribe,c=!0;break}}c||n.subscriptions.push(new j5(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await Bu.upsertNodeRecord(n),X5({type:"nats_update"})}a(n8,"updateNodeTable")});var tP=g((fhe,eP)=>{"use strict";var ZM=require("joi"),{string:jM}=ZM.types(),s8=Xe(),XM=P(),i8=ee(),o8=Ve();eP.exports=a8;function a8(e){let t=jM.invalid(i8.get(XM.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(o8.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=ZM.object({operation:jM.valid(XM.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return s8.validateBySchema(e,r)}a(a8,"removeNodeValidator")});var cf=g((hhe,oP)=>{"use strict";var{handleHDBError:rP,hdb_errors:c8}=se(),{HTTP_STATUS_CODES:nP}=c8,u8=tP(),Hu=$(),sP=fn(),l8=z(),af=P(),iP=Ve(),BT=ut(),_8=ee(),{RemotePayloadObject:d8}=Lu(),{NodeSubscription:f8}=Ti(),E8=aa(),h8=ci(),{broadcast:m8}=We(),p8=_8.get(af.CONFIG_PARAMS.CLUSTERING_NODENAME);oP.exports=S8;async function S8(e){Hu.trace("removeNode called with:",e),sP.checkClusteringEnabled();let t=u8(e);if(t)throw rP(t,t.message,nP.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await sP.getNodeRecord(r);if(l8.isEmptyOrZeroLength(n))throw rP(new Error,`Node '${r}' was not found.`,nP.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new d8(af.OPERATIONS_ENUM.REMOVE_NODE,p8,[]),i,o=!1;for(let u=0,_=n.subscriptions.length;u<_;u++){let l=n.subscriptions[u];l.subscribe===!0&&await BT.updateConsumerIterator(l.schema,l.table,r,"stop");try{await BT.updateRemoteConsumer(new f8(l.schema,l.table,!1,!1),r)}catch(d){Hu.error(d)}}try{i=await BT.request(`${r}.${iP.REQUEST_SUFFIX}`,s),Hu.trace("Remove node reply from remote node:",r,i)}catch(u){Hu.error("removeNode received error from request:",u),o=!0}let c=new E8(af.SYSTEM_SCHEMA_NAME,af.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await h8.deleteRecord(c),m8({type:"nats_update"}),i?.status===iP.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(Hu.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(S8,"removeNode")});var uP=g((phe,cP)=>{"use strict";var aP=require("joi"),{string:T8,array:g8}=aP.types(),R8=Xe(),A8=Yd();cP.exports=O8;function O8(e){let t=aP.object({operation:T8.valid("configure_cluster").required(),connections:g8.items(A8.validation_schema).required()});return R8.validateBySchema(e,t)}a(O8,"configureClusterValidator")});var HT=g((The,EP)=>{"use strict";var b8=P(),uf=$(),y8=z(),N8=cf(),I8=of(),lP=fn(),w8=uP(),{handleHDBError:_P,hdb_errors:C8}=se(),{HTTP_STATUS_CODES:dP}=C8,D8="Configure cluster complete.",L8="Failed to configure the cluster. Check the logs for more details.",M8="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";EP.exports=P8;async function P8(e){uf.trace("configure cluster called with:",e),lP.checkClusteringEnabled();let t=w8(e);if(t)throw _P(t,t.message,dP.BAD_REQUEST,void 0,void 0,!0);let r=await lP.getAllNodeRecords(),n=[];for(let l=0,d=r.length;l<d;l++){let E=await fP(N8,{operation:b8.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[l].name},r[l].name);n.push(E)}uf.trace("All results from configure_cluster remove node:",n);let s=[],i=e.connections.length;for(let l=0;l<i;l++){let d=e.connections[l],E=await fP(I8,d,d.node_name);s.push(E)}uf.trace("All results from configure_cluster add node:",s);let o=[],c=[],u=!1,_=n.concat(s);for(let l=0,d=_.length;l<d;l++){let E=_[l];E.status==="rejected"&&(uf.error(E),o.includes(E.node_name)||o.push(E.node_name)),(E?.result?.message?.includes?.("Successfully")||E?.result?.includes?.("Successfully"))&&(u=!0),!(typeof E.result=="string"&&E.result.includes("Successfully removed")||E.status==="rejected")&&c.push({node_name:E?.node_name,subscriptions:E?.result})}if(y8.isEmptyOrZeroLength(o))return{message:D8,connections:c};if(u)return{message:M8,failed_nodes:o,connections:c};throw _P(new Error,L8,dP.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(P8,"configureCluster");async function fP(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}a(fP,"functionWrapper")});var SP=g((Rhe,pP)=>{"use strict";var xu=require("joi"),U8=Xe(),{validateSchemaExists:hP,validateTableExists:v8,validateSchemaName:mP}=jn(),B8=xu.object({operation:xu.string().valid("purge_stream"),schema:xu.string().custom(hP).custom(mP).optional(),database:xu.string().custom(hP).custom(mP).optional(),table:xu.string().custom(v8).required()});function H8(e){return U8.validateBySchema(e,B8)}a(H8,"purgeStreamValidator");pP.exports=H8});var xT=g((Ohe,TP)=>{"use strict";var{handleHDBError:x8,hdb_errors:G8}=se(),{HTTP_STATUS_CODES:q8}=G8,F8=SP(),k8=ut(),V8=fn();TP.exports=$8;async function $8(e){e.schema=e.schema??e.database;let t=F8(e);if(t)throw x8(t,t.message,q8.BAD_REQUEST,void 0,void 0,!0);V8.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await k8.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}a($8,"purgeStream")});var FT=g((yhe,yP)=>{"use strict";var qT=fn(),Y8=ut(),AP=ee(),lf=P(),ho=Ve(),K8=z(),GT=$(),{RemotePayloadObject:W8}=Lu(),{ErrorCode:gP}=require("nats"),RP=AP.get(lf.CONFIG_PARAMS.CLUSTERING_ENABLED),OP=AP.get(lf.CONFIG_PARAMS.CLUSTERING_NODENAME);yP.exports={clusterStatus:Q8,buildNodeStatus:bP};async function Q8(){let e={node_name:OP,is_enabled:RP,connections:[]};if(!RP)return e;let t=await qT.getAllNodeRecords();if(K8.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(bP(t[n],e.connections));return await Promise.allSettled(r),e}a(Q8,"clusterStatus");async function bP(e,t){let r=e.name,n=new W8(lf.OPERATIONS_ENUM.CLUSTER_STATUS,OP,void 0,await qT.getSystemInfo()),s,i,o=ho.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();s=await Y8.request(ho.REQUEST_SUBJECT(r),n),i=Date.now()-u,s.status===ho.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=ho.CLUSTER_STATUS_STATUSES.CLOSED,GT.error(`Error getting node status from ${r} `,s))}catch(u){GT.warn(`Error getting node status from ${r}`,u),u.code===gP.NoResponders?o=ho.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===gP.Timeout?o=ho.CLUSTER_STATUS_STATUSES.TIMEOUT:o=ho.CLUSTER_STATUS_STATUSES.CLOSED}let c=new z8(r,o,s?.message?.ports?.clustering,s?.message?.ports?.operations_api,i,s?.message?.uptime,e.subscriptions,s?.message?.system_info);try{let u={name:r,system_info:s?.message?.system_info};e.system_info?.hdb_version!==lf.PRE_4_0_0_VERSION&&await qT.upsertNodeRecord(u)}catch(u){GT.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(bP,"buildNodeStatus");function z8(e,t,r,n,s,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:n},this.latency_ms=s,this.uptime=i,this.subscriptions=o,this.system_info=c}a(z8,"NodeStatusObject")});var VT=g((Ihe,NP)=>{"use strict";var{handleHDBError:J8,hdb_errors:j8}=se(),{HTTP_STATUS_CODES:X8}=j8,Z8=ut(),e6=fn(),kT=z(),_f=require("joi"),t6=Xe(),r6=2e3,n6=_f.object({timeout:_f.number().min(1),connected_nodes:_f.boolean(),routes:_f.boolean()});NP.exports=s6;async function s6(e){e6.checkClusteringEnabled();let t=t6.validateBySchema(e,n6);if(t)throw J8(t,t.message,X8.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||kT.autoCastBoolean(n),o=s===void 0||kT.autoCastBoolean(s),c={nodes:[]},u=await Z8.getServerList(r??r6),_={};if(i)for(let l=0,d=u.length;l<d;l++){let E=u[l].statsz;E&&(_[u[l].server.name]=E.routes)}for(let l=0,d=u.length;l<d;l++){if(u[l].statsz)continue;let E=u[l].server,f=u[l].data;if(E.name.endsWith("-hub")){let h={name:E.name.slice(0,-4),response_time:u[l].response_time};i&&(h.connected_nodes=[],_[E.name]&&_[E.name].forEach(p=>{h.connected_nodes.includes(p.name.slice(0,-4))||h.connected_nodes.push(p.name.slice(0,-4))})),o&&(h.routes=f.cluster?.urls?f.cluster?.urls.map(p=>({host:p.split(":")[0],port:kT.autoCast(p.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(s6,"clusterNetwork")});var DP=g((Che,CP)=>{"use strict";var $T=require("joi"),IP=Xe(),{route_constraints:wP}=op();CP.exports={setRoutesValidator:i6,deleteRoutesValidator:o6};function i6(e){let t=$T.object({server:$T.valid("hub","leaf").required(),routes:wP.required()});return IP.validateBySchema(e,t)}a(i6,"setRoutesValidator");function o6(e){let t=$T.object({routes:wP.required()});return IP.validateBySchema(e,t)}a(o6,"deleteRoutesValidator")});var KT=g((Lhe,UP)=>{"use strict";var mo=Er(),YT=z(),df=P(),LP=DP(),{handleHDBError:MP,hdb_errors:a6}=se(),{HTTP_STATUS_CODES:PP}=a6,c6="cluster routes successfully set",u6="cluster routes successfully deleted";UP.exports={setRoutes:l6,getRoutes:_6,deleteRoutes:d6};function l6(e){let t=LP.setRoutesValidator(e);if(t)throw MP(t,t.message,PP.BAD_REQUEST,void 0,void 0,!0);let r=mo.getClusteringRoutes(),n=e.server==="hub"?r.hub_routes:r.leaf_routes,s=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],o=[];for(let c=0,u=e.routes.length;c<u;c++){let _=e.routes[c];_.port=YT.autoCast(_.port);let l=n.some(E=>E.host===_.host&&E.port===_.port),d=s.some(E=>E.host===_.host&&E.port===_.port);l||d?i.push(_):(n.push(_),o.push(_))}return e.server==="hub"?mo.updateConfigValue(df.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n):mo.updateConfigValue(df.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n),{message:c6,set:o,skipped:i}}a(l6,"setRoutes");function _6(){let e=mo.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(_6,"getRoutes");function d6(e){let t=LP.deleteRoutesValidator(e);if(t)throw MP(t,t.message,PP.BAD_REQUEST,void 0,void 0,!0);let r=mo.getClusteringRoutes(),n=r.hub_routes,s=r.leaf_routes,i=[],o=[],c=!1,u=!1;for(let _=0,l=e.routes.length;_<l;_++){let d=e.routes[_],E=!1;for(let f=0,h=n.length;f<h;f++){let p=n[f];if(d.host===p.host&&d.port===p.port){n.splice(f,1),E=!0,c=!0,i.push(d);break}}if(!E){let f=!0;for(let h=0,p=s.length;h<p;h++){let S=s[h];if(d.host===S.host&&d.port===S.port){s.splice(h,1),u=!0,f=!1,i.push(d);break}}f&&o.push(d)}}return c&&(n=YT.isEmptyOrZeroLength(n)?null:n,mo.updateConfigValue(df.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n)),u&&(s=YT.isEmptyOrZeroLength(s)?null:s,mo.updateConfigValue(df.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s)),{message:u6,deleted:i,skipped:o}}a(d6,"deleteRoutes")});var BP=g((Phe,vP)=>{"use strict";var Gu=require("alasql"),po=require("recursive-iterator"),xn=$(),f6=z(),qu=P(),WT=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,h6(this.ast,this.affected_attributes,this.table_lookup,this.schema_lookup,this.table_to_schema_lookup)}getAttributesBySchemaTableName(t,r){if(!t||!r||!this.affected_attributes)return[];if(this.affected_attributes.has(t))return!this.affected_attributes.get(t).has(r)&&(r=this.table_lookup.get(r),!r)?[]:this.affected_attributes.get(t).get(r)}getAllTables(){let t=[];if(!this.affected_attributes)return t;for(let r of this.affected_attributes.keys())t.push(Array.from(this.affected_attributes.get(r).keys()));return t}getTablesBySchemaName(t){return!t||!this.affected_attributes?[]:Array.from(this.affected_attributes.get(t).keys())}getSchemas(){return this.affected_attributes?Array.from(this.affected_attributes.keys()):[]}getAst(){return this.ast}updateAttributeWildcardsForRolePerms(t){let r=this.ast.columns.filter(s=>qu.SEARCH_WILDCARDS.includes(s.columnid));if(r.length===0)return this.ast;let n=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(s=>!qu.SEARCH_WILDCARDS.includes(s.columnid)),r.forEach(s=>{let i=this.table_to_schema_lookup.has(s.tableid)?this.table_to_schema_lookup.get(s.tableid):n,o=this.table_lookup.has(s.tableid)?this.table_lookup.get(s.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][qu.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=E6(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(_=>!qu.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let l=new Gu.yy.Column({columnid:_});s.tableid&&(l.tableid=s.tableid),this.ast.columns.push(l),u.includes(_)||u.push(_)}),this.affected_attributes.get(i).set(o,u)}}),this.ast}};function E6(e){return e.filter(t=>t[qu.PERMS_CRUD_ENUM.READ])}a(E6,"filterReadRestrictedAttrs");function h6(e,t,r,n,s){m6(e,t,r,n,s)}a(h6,"interpretAST");function Fu(e,t,r,n,s){if(!(!e||!e.databaseid)&&(t.has(e.databaseid)||t.set(e.databaseid,new Map),t.get(e.databaseid).has(e.tableid)||t.get(e.databaseid).set(e.tableid,[]),e.as&&(r.has(e.as)||r.set(e.as,e.tableid),n&&!n.has(e.as)&&n.set(e.as,e.databaseid)),s)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),s.set(o,i)}}a(Fu,"addSchemaTableToMap");function m6(e,t,r,n,s){if(!e){xn.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof Gu.yy.Insert?g6(e,t,r):e instanceof Gu.yy.Select?p6(e,t,r,n,s):e instanceof Gu.yy.Update?S6(e,t,r):e instanceof Gu.yy.Delete?T6(e,t,r):xn.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(m6,"getRecordAttributesAST");function p6(e,t,r,n,s){if(!e){xn.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(f6.isEmptyOrZeroLength(i)){xn.error("No schema specified");return}e.from.forEach(c=>{Fu(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),Fu(c.table,t,r,n,s)});let o=new po(e.columns);for(let{node:c}of o)if(c&&c.columnid){let u=c.tableid,_=n.has(u)?n.get(u):i;if(u||(u=e.from[0].tableid),!t.get(_).has(u))if(r.has(u))u=r.get(u);else{xn.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 po(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{xn.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 po(c.on);for(let{node:_}of u)if(_&&_.columnid){let l=_.tableid,d=s.get(l);if(!t.get(d).has(l))if(r.has(l))l=r.get(l);else{xn.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 po(e.order);for(let{node:u}of c)if(u&&u.columnid){let _=u.tableid,l=n.has(_)?n.get(_):i;if(_||(_=e.from[0].tableid),!t.get(l).has(_))if(r.has(_))_=r.get(_);else{xn.info(`table specified as ${_} not found.`);return}t.get(l).get(_).indexOf(u.columnid)<0&&t.get(l).get(_).push(u.columnid)}}}a(p6,"getSelectAttributes");function S6(e,t,r){if(!e){xn.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new po(e.columns),s=e.table.databaseid;Fu(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&QT(e.table.tableid,s,i.columnid,t,r)}a(S6,"getUpdateAttributes");function T6(e,t,r){if(!e){xn.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new po(e.where),s=e.table.databaseid;Fu(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&QT(e.table.tableid,s,i.columnid,t,r)}a(T6,"getDeleteAttributes");function g6(e,t,r){if(!e){xn.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new po(e.columns),s=e.into.databaseid;Fu(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&QT(e.into.tableid,s,i.columnid,t,r)}a(g6,"getInsertAttributes");function QT(e,t,r,n,s){if(!n.get(t))return;let i=e;n.get(t).has(i)||(i=s.get(i)),n.get(t).get(i).push(r)}a(QT,"pushAttribute");vP.exports=WT});var jT=g((vhe,qP)=>{var ff=Xi(),HP=require("chalk"),Qr=$(),xP=require("prompt"),{promisify:R6}=require("util"),zT=P(),A6=require("fs-extra"),O6=require("path"),b6=z(),y6=Zd(),GP=ee();GP.initSync();var N6=require("moment"),I6=R6(xP.get),w6=O6.join(GP.getHdbBasePath(),zT.LICENSE_KEY_DIR_NAME,zT.LICENSE_FILE_NAME,zT.LICENSE_FILE_NAME);qP.exports={getFingerprint:D6,setLicense:C6,parseLicense:JT,register:L6,getRegistrationInfo:P6};async function C6(e){if(e&&e.key&&e.company){try{Qr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await JT(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw Qr.error(r),Qr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(C6,"setLicense");async function D6(){let e={};try{e=await ff.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw Qr.error(r),Qr.error(t),new Error(r)}return e}a(D6,"getFingerprint");async function JT(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");Qr.info("Validating license input...");let r=ff.validateLicense(e,t);if(Qr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(Qr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(Qr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{Qr.info("writing license to disk"),await A6.writeFile(w6,JSON.stringify({license_key:e,company:t}))}catch(n){throw Qr.error("Failed to write License"),n}return"Registration successful."}a(JT,"parseLicense");async function L6(){let e=await M6();return JT(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(L6,"register");async function M6(){let e=await ff.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:HP.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:HP.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{xP.start()}catch(n){Qr.error(n)}let r;try{r=await I6(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(M6,"promptForRegistration");async function P6(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await ff.getLicense()}catch(r){throw Qr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(b6.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=y6.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=N6.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(P6,"getRegistrationInfo")});var kP=g((Hhe,FP)=>{"use strict";var U6=Ve(),XT=class{static{a(this,"HubConfigObject")}constructor(t,r,n,s,i,o,c,u,_,l,d,E,f,h){this.port=t,o===null&&(o=void 0),this.server_name=r+U6.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.reconnect_error_reports=100,this.jetstream={enabled:!1},this.tls={cert_file:s,key_file:i,ca_file:o,insecure:c,verify:u},this.leafnodes={port:_,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c}},this.cluster={name:l,port:d,routes:E,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c,verify:u}},this.accounts={SYS:{users:f},HDB:{users:h}},this.system_account="SYS"}};FP.exports=XT});var YP=g((Ghe,$P)=>{"use strict";var VP=Ve(),ZT=class{static{a(this,"LeafConfigObject")}constructor(t,r,n,s,i,o,c,u,_,l,d){this.port=t,d===null&&(d=void 0),this.server_name=r+VP.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+VP.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"}};$P.exports=ZT});var WP=g((Fhe,KP)=>{"use strict";var eg=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};KP.exports=eg});var zP=g((Vhe,QP)=>{"use strict";var v6=Ve(),tg=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+v6.SERVER_SUFFIX.ADMIN,this.password=r}};QP.exports=tg});var sg=g((Yhe,XP)=>{"use strict";var Aa=require("path"),mf=require("fs-extra"),B6=kP(),H6=YP(),x6=WP(),G6=zP(),rg=_n(),ba=z(),yr=Er(),hf=P(),ku=Ve(),{CONFIG_PARAMS:pt}=hf,ya=$(),Vu=ee(),JP=Os(),ng=ut(),Oa="clustering",q6=1e4,jP=50;XP.exports={generateNatsConfig:k6,removeNatsConfig:V6,getHubConfigPath:F6};function F6(){let e=Vu.get(pt.ROOTPATH);return Aa.join(e,Oa,ku.NATS_CONFIG_FILES.HUB_SERVER)}a(F6,"getHubConfigPath");async function k6(e=!1,t=void 0){Vu.initSync();let r=Vu.get(pt.ROOTPATH),n=Aa.join(r,Oa,ku.PID_FILES.HUB),s=Aa.join(r,Oa,ku.PID_FILES.LEAF),i=yr.getConfigFromFile(pt.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=Aa.join(r,Oa,ku.NATS_CONFIG_FILES.HUB_SERVER),c=Aa.join(r,Oa,ku.NATS_CONFIG_FILES.LEAF_SERVER),u=yr.getConfigFromFile(pt.CLUSTERING_TLS_CERTIFICATE),_=yr.getConfigFromFile(pt.CLUSTERING_TLS_PRIVATEKEY),l=yr.getConfigFromFile(pt.CLUSTERING_TLS_CERT_AUTH),d=yr.getConfigFromFile(pt.CLUSTERING_TLS_INSECURE),E=yr.getConfigFromFile(pt.CLUSTERING_TLS_VERIFY),f=yr.getConfigFromFile(pt.CLUSTERING_NODENAME),h=yr.getConfigFromFile(pt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await ng.checkNATSServerInstalled()||pf("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let p=await rg.listUsers(),S=yr.getConfigFromFile(pt.CLUSTERING_USER),T=await rg.getClusterUser();(ba.isEmpty(T)||T.active!==!0)&&pf(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await Ef(pt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await Ef(pt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await Ef(pt.CLUSTERING_HUBSERVER_NETWORK_PORT),await Ef(pt.CLUSTERING_LEAFSERVER_NETWORK_PORT));let R=[],N=[];for(let[J,j]of p.entries())j.role.role===hf.ROLE_TYPES_ENUM.CLUSTER_USER&&j.active&&(R.push(new G6(j.username,JP.decrypt(j.hash))),N.push(new x6(j.username,JP.decrypt(j.hash))));let b=[],{hub_routes:x}=yr.getClusteringRoutes();if(!ba.isEmptyOrZeroLength(x))for(let J of x)b.push(`tls://${T.sys_name_encoded}:${T.uri_encoded_d_hash}@${J.host}:${J.port}`);let U=new B6(yr.getConfigFromFile(pt.CLUSTERING_HUBSERVER_NETWORK_PORT),f,n,u,_,l,d,E,h,yr.getConfigFromFile(pt.CLUSTERING_HUBSERVER_CLUSTER_NAME),yr.getConfigFromFile(pt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),b,R,N);l==null&&(delete U.tls.ca_file,delete U.leafnodes.tls.ca_file),t=ba.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===hf.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await mf.writeJson(o,U),ya.trace(`Hub server config written to ${o}`));let F=`tls://${T.sys_name_encoded}:${T.uri_encoded_d_hash}@0.0.0.0:${h}`,M=`tls://${T.uri_encoded_name}:${T.uri_encoded_d_hash}@0.0.0.0:${h}`,Q=new H6(yr.getConfigFromFile(pt.CLUSTERING_LEAFSERVER_NETWORK_PORT),f,s,i,[F],[M],R,N,u,_,l,d);l==null&&delete Q.tls.ca_file,(t===void 0||t===hf.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await mf.writeJson(c,Q),ya.trace(`Leaf server config written to ${c}`))}a(k6,"generateNatsConfig");async function Ef(e){let t=Vu.get(e);return ba.isEmpty(t)&&pf(`port undefined for '${e}'`),await ba.isPortTaken(t)&&pf(`'${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(Ef,"isPortAvailable");function pf(e){let t=`Error generating clustering config: ${e}`;ya.error(t),console.error(t),process.exit(1)}a(pf,"generateNatsConfigError");async function V6(e){let{port:t,config_file:r}=ng.getServerConfig(e),{username:n,decrypt_hash:s}=await rg.getClusterUser(),i=0,o=2e3;for(;i<jP;){try{let l=await ng.createConnection(t,n,s,!1);if(l.protocol.connected===!0){l.close();break}}catch(l){ya.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${l}`)}if(i++,i>=jP)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.`);let _=o*(i*2);_>3e4&&ya.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await ba.async_set_timeout(_)}let c="0".repeat(q6),u=Aa.join(Vu.get(pt.ROOTPATH),Oa,r);await mf.writeFile(u,c),await mf.remove(u),ya.notify(e,"started.")}a(V6,"removeNatsConfig")});var sU=g((Whe,nU)=>{"use strict";var zr=ee(),$6=Xi(),pe=P(),$u=Ve(),Ls=require("path"),{PACKAGE_ROOT:Tf}=P(),ZP=ee(),Sf=z(),Na="/dev/null",Y6=Ls.join(Tf,"launchServiceScripts"),eU=Ls.join(Tf,"utility/scripts"),K6=Ls.join(eU,pe.HDB_RESTART_SCRIPT),tU=Ls.resolve(Tf,"dependencies",`${process.platform}-${process.arch}`,$u.NATS_BINARY_NAME);function rU(){let t=$6.licenseSearch().ram_allocation||pe.RAM_ALLOCATION_ENUM.DEFAULT,r=pe.MEM_SETTING_KEY+t,n={[pe.PROCESS_NAME_ENV_PROP]:pe.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return Sf.noBootFile()&&(n[pe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Sf.getEnvCliRootPath()),{name:pe.PROCESS_DESCRIPTORS.HDB,script:pe.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:Tf}}a(rU,"generateMainServerConfig");var W6=9930;function Q6(){zr.initSync(!0);let e=zr.get(pe.CONFIG_PARAMS.ROOTPATH),t=Ls.join(e,"clustering",$u.NATS_CONFIG_FILES.HUB_SERVER),r=Ls.join(zr.get(pe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),pe.LOG_NAMES.HDB),n=ZP.get(pe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=$u.LOG_LEVEL_FLAGS[zr.get(pe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:pe.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==W6?"-"+n:""),script:tU,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[pe.PROCESS_NAME_ENV_PROP]:pe.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return zr.get(pe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Na,i.error_file=Na),i}a(Q6,"generateNatsHubServerConfig");var z6=9940;function J6(){zr.initSync(!0);let e=zr.get(pe.CONFIG_PARAMS.ROOTPATH),t=Ls.join(e,"clustering",$u.NATS_CONFIG_FILES.LEAF_SERVER),r=Ls.join(zr.get(pe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),pe.LOG_NAMES.HDB),n=ZP.get(pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=$u.LOG_LEVEL_FLAGS[zr.get(pe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:pe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==z6?"-"+n:""),script:tU,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[pe.PROCESS_NAME_ENV_PROP]:pe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return zr.get(pe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Na,i.error_file=Na),i}a(J6,"generateNatsLeafServerConfig");function j6(){zr.initSync();let e=Ls.join(zr.get(pe.CONFIG_PARAMS.LOGGING_ROOT),pe.LOG_NAMES.HDB),t={name:pe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:pe.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[pe.PROCESS_NAME_ENV_PROP]:pe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Y6,autorestart:!1};return zr.get(pe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Na,t.error_file=Na),t}a(j6,"generateClusteringUpgradeV4ServiceConfig");function X6(){let e={[pe.PROCESS_NAME_ENV_PROP]:pe.PROCESS_DESCRIPTORS.RESTART_HDB};return Sf.noBootFile()&&(e[pe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Sf.getEnvCliRootPath()),{...{name:pe.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:eU},script:K6}}a(X6,"generateRestart");function Z6(){return{apps:[rU()]}}a(Z6,"generateAllServiceConfigs");nU.exports={generateAllServiceConfigs:Z6,generateMainServerConfig:rU,generateRestart:X6,generateNatsHubServerConfig:Q6,generateNatsLeafServerConfig:J6,generateClusteringUpgradeV4ServiceConfig:j6}});var SU=g((Jhe,pU)=>{"use strict";var ve=P(),e9=z(),Ps=sg(),gf=ut(),Ms=Ve(),Ri=sU(),Rf=ee(),Ai=$(),t9=fn(),{startWorker:iU,onMessageFromWorkers:r9}=We(),n9=Ra(),zhe=require("util"),s9=require("child_process"),i9=require("fs"),{execFile:o9}=s9,we;pU.exports={enterPM2Mode:a9,start:Oi,stop:ig,reload:aU,restart:cU,list:og,describe:lU,connect:Us,kill:d9,startAllServices:f9,startService:ag,getUniqueServicesList:_U,restartAllServices:E9,isServiceRegistered:dU,reloadStopStart:fU,restartHdb:uU,deleteProcess:l9,startClusteringProcesses:hU,startClusteringThreads:mU,isHdbRestartRunning:_9,isClusteringRunning:m9,stopClustering:h9,reloadClustering:p9};var Yu=!1;r9(e=>{e.type==="restart"&&Rf.initSync(!0)});function a9(){Yu=!0}a(a9,"enterPM2Mode");function Us(){return we||(we=require("pm2")),new Promise((e,t)=>{we.connect((r,n)=>{Ai.setupConsoleLogging(),r&&t(r),e(n)})})}a(Us,"connect");var Nr,c9=10,oU;function Oi(e,t=!1){if(Yu)return u9(e);let r=o9(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=Nr.indexOf(r);o>-1&&Nr.splice(o,1),!oU&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<c9&&(i9.existsSync(Ps.getHubConfigPath())?Oi(e):(await Ps.generateNatsConfig(!0),Oi(e),await new Promise(c=>setTimeout(c,3e3)),await Ps.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Ps.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let o=Rf.get(ve.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,u,_=0,l;for(;u=c.exec(i);){if(u.index&&Ms.LOG_LEVEL_HIERARCHY[o]>=Ms.LOG_LEVEL_HIERARCHY[l||"info"]){let f=l===Ms.LOG_LEVELS.ERR||l===Ms.LOG_LEVELS.WRN?Ai.OUTPUTS.STDERR:Ai.OUTPUTS.STDOUT;Ai.logCustomLevel(l||"info",f,n,i.slice(_,u.index).trim())}let[d,E]=u;_=u.index+d.length,l=Ms.LOG_LEVELS[E]}if(Ms.LOG_LEVEL_HIERARCHY[o]>=Ms.LOG_LEVEL_HIERARCHY[l||"info"]){let d=l===Ms.LOG_LEVELS.ERR||l===Ms.LOG_LEVELS.WRN?Ai.OUTPUTS.STDERR:Ai.OUTPUTS.STDOUT;Ai.logCustomLevel(l||"info",d,n,i.slice(_).trim())}}if(a(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),Nr=[],!Nr&&!t){let i=a(()=>{oU=!0,Nr&&(Nr.map(o=>o.kill()),process.exit(0))},"kill_children");process.on("exit",i),process.on("SIGINT",i),process.on("SIGQUIT",i),process.on("SIGTERM",i)}Nr.push(r)}a(Oi,"start");function u9(e){return new Promise(async(t,r)=>{try{await Us()}catch(n){r(n)}we.start(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(u9,"startWithPM2");function ig(e){if(!Yu){for(let t of Nr||[])t.name===e&&(Nr.splice(Nr.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Us()}catch(n){r(n)}we.stop(e,async(n,s)=>{n&&(we.disconnect(),r(n)),we.delete(e,(i,o)=>{i&&(we.disconnect(),r(n)),we.disconnect(),t(o)})})})}a(ig,"stop");function aU(e){return new Promise(async(t,r)=>{try{await Us()}catch(n){r(n)}we.reload(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(aU,"reload");function cU(e){if(!Yu)for(let t of Nr||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await Us()}catch(n){r(n)}we.restart(e,(n,s)=>{we.disconnect(),t(s)})})}a(cU,"restart");function l9(e){return new Promise(async(t,r)=>{try{await Us()}catch(n){r(n)}we.delete(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(l9,"deleteProcess");async function uU(){await Oi(Ri.generateRestart())}a(uU,"restartHdb");async function _9(){let e=await og();for(let t in e)if(e[t].name===ve.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(_9,"isHdbRestartRunning");function og(){return new Promise(async(e,t)=>{try{await Us()}catch(r){t(r)}we.list((r,n)=>{r&&(we.disconnect(),t(r)),we.disconnect(),e(n)})})}a(og,"list");function lU(e){return new Promise(async(t,r)=>{try{await Us()}catch(n){r(n)}we.describe(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(lU,"describe");function d9(){if(!Yu){for(let e of Nr||[])e.kill();Nr=[];return}return new Promise(async(e,t)=>{try{await Us()}catch(r){t(r)}we.killDaemon((r,n)=>{r&&(we.disconnect(),t(r)),we.disconnect(),e(n)})})}a(d9,"kill");async function f9(){try{await hU(),await mU(),await Oi(Ri.generateAllServiceConfigs())}catch(e){throw we?.disconnect(),e}}a(f9,"startAllServices");async function ag(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case ve.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=Ri.generateMainServerConfig();break;case ve.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=Ri.generateNatsIngestServiceConfig();break;case ve.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=Ri.generateNatsReplyServiceConfig();break;case ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=Ri.generateNatsHubServerConfig(),await Oi(r,t),await Ps.removeNatsConfig(e);return;case ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=Ri.generateNatsLeafServerConfig(),await Oi(r,t),await Ps.removeNatsConfig(e);return;case ve.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=Ri.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Oi(r)}catch(r){throw we?.disconnect(),r}}a(ag,"startService");async function _U(){try{let e=await og(),t={};for(let r=0,n=e.length;r<n;r++){let s=e[r];t[s.name]===void 0&&(t[s.name]={name:s.name,exec_mode:s.pm2_env.exec_mode})}return t}catch(e){throw we?.disconnect(),e}}a(_U,"getUniqueServicesList");async function E9(e=[]){try{let t=!1,r=await _U();for(let n=0,s=Object.values(r).length;n<s;n++){let o=Object.values(r)[n].name;e.includes(o)||(o===ve.PROCESS_DESCRIPTORS.HDB?t=!0:await cU(o))}t&&await fU(ve.PROCESS_DESCRIPTORS.HDB)}catch(t){throw we?.disconnect(),t}}a(E9,"restartAllServices");async function dU(e){if(Nr?.find(r=>r.name===e))return!0;let t=await n9.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(dU,"isServiceRegistered");async function fU(e){let t=Rf.get(ve.CONFIG_PARAMS.THREADS_COUNT)??Rf.get(ve.CONFIG_PARAMS.THREADS),r=await lU(e),n=e9.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await ig(e),await ag(e)):e===ve.PROCESS_DESCRIPTORS.HDB?await uU():await aU(e)}a(fU,"reloadStopStart");var EU;async function hU(e=!1){for(let t in ve.CLUSTERING_PROCESSES){let r=ve.CLUSTERING_PROCESSES[t];await ag(r,e)}}a(hU,"startClusteringProcesses");async function mU(){EU=iU(ve.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:ve.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await gf.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await gf.updateLocalStreams();let e=await t9.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===ve.PRE_4_0_0_VERSION){Ai.info("Starting clustering upgrade 4.0.0 process"),iU(ve.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(mU,"startClusteringThreads");async function h9(){for(let e in ve.CLUSTERING_PROCESSES)if(e!==ve.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===ve.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await EU.terminate();else{let t=ve.CLUSTERING_PROCESSES[e];await ig(t)}}a(h9,"stopClustering");async function m9(){for(let e in ve.CLUSTERING_PROCESSES){let t=ve.CLUSTERING_PROCESSES[e];if(await dU(t)===!1)return!1}return!0}a(m9,"isClusteringRunning");async function p9(){await Ps.generateNatsConfig(!0),await gf.reloadNATSHub(),await gf.reloadNATSLeaf(),await Ps.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Ps.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(p9,"reloadClustering")});var yU={};Fe(yU,{compactOnStart:()=>S9,copyDb:()=>bU});async function S9(){Wu.notify("Running compact on start"),console.log("Running compact on start");let e=(0,cg.get)(bi.CONFIG_PARAMS.ROOTPATH),t=new Map,r=mr();try{for(let n in r){if(n==="system")continue;let s;for(let u in r[n]){s=r[n][u].primaryStore.path;break}if(!s){console.log("Couldn't find any tables in database",n);continue}let i=(0,Af.join)(e,"backup",n+".mdb"),o=(0,Af.join)(e,bi.DATABASES_DIR_NAME,n+"-copy.mdb"),c=await TU(n);console.log("Database",n,"before compact has a total record count of",c),t.set(n,{db_path:s,copy_dest:o,backup_dest:i,record_count:c}),await bU(n,o),console.log("Backing up",n,"to",i),await(0,So.move)(s,i,{overwrite:!0})}Ku();for(let[n,{db_path:s,copy_dest:i}]of t)console.log("Moving copy compacted",n,"to",s),await(0,So.move)(i,s,{overwrite:!0}),await(0,So.remove)((0,Af.join)(e,bi.DATABASES_DIR_NAME,`${n}-copy.mdb-lock`));Ku()}catch(n){Wu.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,ug.updateConfigValue)(bi.CONFIG_PARAMS.STORAGE_COMPACTONSTART,!1);for(let[s,{db_path:i,backup_dest:o}]of t){console.error("Moving backup database",o,"back to",i);try{await(0,So.move)(o,i,{overwrite:!0})}catch(c){console.error(c)}}throw Ku(),n}for(let[n,{backup_dest:s,record_count:i}]of t){let o=!0,c=await TU(n);if(console.log("Database",n,"after compact has a total record count of",c),i!==c){o=!1;let u=`There is a discrepancy between pre and post compact record count for database ${n}.
|
|
10
|
+
`,"")}a(EL,"runCommand");async function bj(){try{await tj.access(vS)}catch{return!1}let e=await EL(`${vS} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return rj.eq(t,Aj)}a(bj,"checkNATSServerInstalled");async function qS(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await dL.getClusterUser();if(lo(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}Hn.trace("create nats connection called");let i=await dj({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:Ht.get(Ie.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Ht.get(Ie.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Ht.get(Ie.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),Hn.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&Hn.error("Error with Nats client connection, connection closed",o),hL()}),i}a(qS,"createConnection");function hL(){Tr=void 0,ao=void 0,co=void 0,uo=void 0}a(hL,"clearClientCache");async function yj(){Tr&&(await Tr.drain(),Tr=void 0,ao=void 0,co=void 0,uo=void 0)}a(yj,"closeConnection");var Tr,uo;async function Au(){return uo||(uo=qS(Ht.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),Tr=await uo),Tr||uo}a(Au,"getConnection");async function Ou(){if(ao)return ao;lo(Tr)&&await Au();let{domain:e}=fa(Ie.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(lo(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return ao=await Tr.jetstreamManager({domain:e,timeout:6e4}),ao}a(Ou,"getJetStreamManager");async function mL(){if(co)return co;lo(Tr)&&await Au();let{domain:e}=fa(Ie.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(lo(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return co=Tr.jetstream({domain:e,timeout:6e4}),co}a(mL,"getJetStream");async function os(){let e=Tr||await Au(),t=ao||await Ou(),r=co||await mL();return{connection:e,jsm:t,js:r}}a(os,"getNATSReferences");async function Nj(e){let t=Ht.get(Ie.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await dL.getClusterUser(),s=await qS(t,r,n),i=GS(),o=s.subscribe(i),c=[],u,_=(async()=>{for await(let l of o){let d=fL.decode(l.data);d.response_time=Date.now()-u,c.push(d)}})();return u=Date.now(),await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await s.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await s.flush(),await vd.async_set_timeout(e),await o.drain(),await s.close(),await _,c}a(Nj,"getServerList");async function FS(e,t){let{jsm:r}=await os(),n=Ht.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Ht.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=Ht.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:fj.File,retention:Ej.Limits,subjects:t,discard:hj.Old,max_msgs:s,max_bytes:i,max_age:n})}a(FS,"createLocalStream");async function pL(){let{jsm:e}=await os(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(pL,"listStreams");async function Ij(e){let{jsm:t}=await os();await t.streams.delete(e)}a(Ij,"deleteLocalStream");async function wj(e){let{connection:t}=await os(),r=[],n=GS(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(fL.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:n}),await t.flush(),await s.drain(),await i,r}a(wj,"listRemoteStreams");async function Cj(e,t=void 0,r=void 0){let{jsm:n,js:s}=await os(),i=cL(),o={durable_name:i,ack_policy:HS.Explicit};t&&(o.deliver_policy=xS.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.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=BS(l.data),E={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};if(l.headers&&(E.origin=l.headers.get(Kt.MSG_HEADERS.ORIGIN)),_.push(E),l.ack(),l.info.pending===0)break}return await c.delete(),_}a(Cj,"viewStream");async function*Dj(e,t=void 0,r=void 0){let{jsm:n,js:s}=await os(),i=cL(),o={durable_name:i,ack_policy:HS.Explicit};t&&(o.deliver_policy=xS.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.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=BS(_.data);l[0]||(l=[l]);for(let d of l){let E={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};_.headers&&(E.origin=_.headers.get(Kt.MSG_HEADERS.ORIGIN)),yield E}if(_.ack(),_.info.pending===0)break}await c.delete()}a(Dj,"viewStreamIterator");async function Lj(e,t,r,n){Hn.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=SL(n,r);let{js:s}=await os(),i=await Hd(),o=`${e}.${i}`,c=n instanceof Uint8Array?n:_L.encode(n);try{Hn.trace(`publishToStream publishing to subject: ${o}`),gj(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(o,c,{headers:r})}catch(u){if(u.code&&u.code.toString()==="503")return gL(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){Hn.trace(`publishToStream creating stream: ${t}`);let l=o.split(".");l[2]="*",await FS(t,[o]),await s.publish(o,c,{headers:r})}else throw u}});throw u}}a(Lj,"publishToStream");function SL(e,t){t===void 0&&(t=pj());let r=Ht.get(Ie.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Kt.MSG_HEADERS.ORIGIN)&&r&&t.append(Kt.MSG_HEADERS.ORIGIN,r),t}a(SL,"addNatsMsgHeader");function fa(e){e=e.toLowerCase();let t=Ru.join(Ht.get(Ie.CONFIG_PARAMS.ROOTPATH),Rj);if(e===Ie.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return lo(US)&&(US={port:Tu.getConfigFromFile(Ie.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Tu.getConfigFromFile(Ie.CONFIG_PARAMS.CLUSTERING_NODENAME)+Kt.SERVER_SUFFIX.HUB,config_file:Kt.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Ru.join(t,Kt.PID_FILES.HUB),hdb_nats_path:t}),US;if(e===Ie.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return lo(PS)&&(PS={port:Tu.getConfigFromFile(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Tu.getConfigFromFile(Ie.CONFIG_PARAMS.CLUSTERING_NODENAME)+Kt.SERVER_SUFFIX.LEAF,config_file:Kt.NATS_CONFIG_FILES.LEAF_SERVER,domain:Tu.getConfigFromFile(Ie.CONFIG_PARAMS.CLUSTERING_NODENAME)+Kt.SERVER_SUFFIX.LEAF,pid_file_path:Ru.join(t,Kt.PID_FILES.LEAF),hdb_nats_path:t}),PS;Hn.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(fa,"getServerConfig");async function TL(e,t,r,n){try{await e.consumers.add(t,{ack_policy:HS.Explicit,durable_name:r,deliver_policy:xS.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(TL,"createConsumer");async function Mj(e,t,r){await e.consumers.delete(t,r)}a(Mj,"removeConsumer");function Pj(e){return e.split(".")[1]}a(Pj,"extractServerName");async function Uj(e,t,r=6e4,n=GS()){if(!vd.isObject(t))throw new Error("data param must be an object");let s=_L.encode(t),{connection:i}=await os(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return BS(c.data)}a(Uj,"request");function kS(e){return new Promise(async(t,r)=>{let n=oj(vS,["--signal",`reload=${e}`],{cwd:__dirname}),s,i;n.on("error",o=>{r(o)}),n.stdout.on("data",o=>{i+=o.toString()}),n.stderr.on("data",o=>{s+=o.toString()}),n.stderr.on("close",o=>{s&&r(s),t(i)})})}a(kS,"reloadNATS");async function vj(){let{pid_file_path:e}=fa(Ie.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await kS(e)}a(vj,"reloadNATSHub");async function Bj(){let{pid_file_path:e}=fa(Ie.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await kS(e)}a(Bj,"reloadNATSLeaf");function Hj(e,t,r){let n;switch(e.code){case aL.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case aL.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(Hj,"requestErrorHandler");async function xj(e,t){let r=t+Kt.SERVER_SUFFIX.LEAF,{connection:n}=await os(),{jsm:s}=await Kj(r),{schema:i,table:o}=e,c=Bd.createNatsTableStreamName(i,o),u=e.start_time?e.start_time:new Date(Date.now()).toISOString();await gL(async()=>{if(e.subscribe===!0)await TL(s,c,n.info.server_name,u);else try{await Mj(s,c,n.info.server_name)}catch(_){Hn.trace(_)}})}a(xj,"updateRemoteConsumer");async function Gj(e,t,r,n){let s=Bd.createNatsTableStreamName(e,t),i=r+Kt.SERVER_SUFFIX.LEAF,o={type:Ie.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!lL&&lj()<Ht.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=MS();await c(o)}await cj(o),n==="stop"&&await vd.async_set_timeout(1e3)}a(Gj,"updateConsumerIterator");function gL(e){return aj.writeTransaction(Ie.SYSTEM_SCHEMA_NAME,Ie.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(gL,"exclusiveLock");async function RL(e,t){let r=Bd.createNatsTableStreamName(e,t),n=await Hd(),s=Vj(e,t,n);await FS(r,[s])}a(RL,"createLocalTableStream");async function qj(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await RL(n,s)}}a(qj,"createTableStreams");async function AL(e,t,r=void 0){if(Ht.get(Ie.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=Bd.createNatsTableStreamName(e,t),{domain:s}=fa(Ie.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await Au()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")Hn.warn(n);else throw n}}a(AL,"purgeTableStream");async function Fj(e,t){if(Ht.get(Ie.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await AL(e,t[r])}a(Fj,"purgeSchemaTableStreams");async function kj(e){return(await Ou()).streams.info(e)}a(kj,"getStreamInfo");function Vj(e,t,r){return`${Kt.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(Vj,"createSubjectName");async function Hd(){if(gu)return gu;if(gu=(await Ou())?.nc?.info?.server_name,gu===void 0)throw new Error("Unable to get jetstream manager server name");return gu}a(Hd,"getJsmServerName");async function $j(){let e=await Ou(),t=await Hd(),r=await pL();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=Yj(n),c=i.split(".");if(c[c.length-1]===t&&!o||s.name==="__HARPERDB_WORK_QUEUE__")continue;let _=i.split(".");_[_.length-1]=t;let l=_.join(".");Hn.trace(`Updating stream subject name from: ${i} to: ${l}`),s.subjects[0]=l,await e.streams.update(s.name,s)}}a($j,"updateLocalStreams");function Yj(e){let{config:t}=e,r=!1,n=Ht.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Ht.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=Ht.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,n!==t.max_age&&(t.max_age=n,r=!0),s!==t.max_bytes&&(t.max_bytes=s,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(Yj,"updateStreamLimits");async function Kj(e){let t,r;try{t=await Tr.jetstream({domain:e}),r=await Tr.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw Hn.error("Unable to connect to:",e),n}return{js:t,jsm:r}}a(Kj,"connectToRemoteJS")});var bu=g((jfe,IL)=>{"use strict";var Ea=P_(),ha=DD(),Wj=$(),Qj=require("uuid").v4,Jfe=require("clone"),Gd=Ns(),ma=P(),zj=require("util"),Ei=Dn(),{handleHDBError:gr,hdb_errors:Jj}=se(),{HDB_ERROR_MSGS:xd,HTTP_STATUS_CODES:Rr}=Jj,{SchemaEventMsg:qd}=Pn(),bL=ut(),{getDatabases:jj}=(Ae(),ie(ke)),{transformReq:pa}=z();IL.exports={createSchema:Xj,createSchemaStructure:yL,createTable:Zj,createTableStructure:NL,createAttribute:sX,dropSchema:eX,dropTable:tX,dropAttribute:rX,getBackup:iX};async function Xj(e){let t=await yL(e);return Gd.signalSchemaChange(new qd(process.pid,e.operation,e.schema)),t}a(Xj,"createSchema");async function yL(e){let t=Ea.schema_object(e);if(t)throw gr(t,t.message,Rr.BAD_REQUEST,void 0,void 0,!0);if(pa(e),!await ha.checkSchemaExists(e.schema))throw gr(new Error,xd.SCHEMA_EXISTS_ERR(e.schema),Rr.BAD_REQUEST,ma.LOG_LEVELS.ERROR,xd.SCHEMA_EXISTS_ERR(e.schema),!0);return await Ei.createSchema(e),`database '${e.schema}' successfully created`}a(yL,"createSchemaStructure");async function Zj(e){return pa(e),e.hash_attribute=e.primary_key??e.hash_attribute,await NL(e)}a(Zj,"createTable");async function NL(e){let t=Ea.create_table_object(e);if(t)throw gr(t,t.message,Rr.BAD_REQUEST,void 0,void 0,!0);if(Ea.validateTableResidence(e.residence),!await ha.checkSchemaTableExists(e.schema,e.table))throw gr(new Error,xd.TABLE_EXISTS_ERR(e.schema,e.table),Rr.BAD_REQUEST,ma.LOG_LEVELS.ERROR,xd.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:Qj(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await Ei.createTable(n,e);else throw gr(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Rr.BAD_REQUEST);else await Ei.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(NL,"createTableStructure");async function eX(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=Ea.schema_object(e),n=t??r;if(n)throw gr(n,n.message,Rr.BAD_REQUEST,void 0,void 0,!0);pa(e);let s=await ha.checkSchemaExists(e.schema);if(s)throw gr(new Error,s,Rr.NOT_FOUND,ma.LOG_LEVELS.ERROR,s,!0);let i=await ha.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await Ei.dropSchema(e),Gd.signalSchemaChange(new qd(process.pid,e.operation,e.schema)),await bL.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(eX,"dropSchema");async function tX(e){let t=Ea.table_object(e);if(t)throw gr(t,t.message,Rr.BAD_REQUEST,void 0,void 0,!0);pa(e);let r=await ha.checkSchemaTableExists(e.schema,e.table);if(r)throw gr(new Error,r,Rr.NOT_FOUND,ma.LOG_LEVELS.ERROR,r,!0);return await Ei.dropTable(e),await bL.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(tX,"dropTable");async function rX(e){let t=Ea.attribute_object(e);if(t)throw gr(t,t.message,Rr.BAD_REQUEST,void 0,void 0,!0);pa(e);let r=await ha.checkSchemaTableExists(e.schema,e.table);if(r)throw gr(new Error,r,Rr.NOT_FOUND,ma.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw gr(new Error,"You cannot drop a hash attribute",Rr.BAD_REQUEST,void 0,void 0,!0);if(ma.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw gr(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Rr.BAD_REQUEST,void 0,void 0,!0);try{return await Ei.dropAttribute(e),nX(e),Gd.signalSchemaChange(new qd(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw Wj.error(`Got an error deleting attribute ${zj.inspect(e)}.`),n}}a(rX,"dropAttribute");function nX(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(nX,"dropAttributeFromGlobal");async function sX(e){pa(e);let t=jj()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw gr(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Rr.BAD_REQUEST,void 0,void 0,!0);return await Ei.createAttribute(e),Gd.signalSchemaChange(new qd(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(sX,"createAttribute");function iX(e){return Ei.getBackup(e)}a(iX,"getBackup")});var CL=g((Zfe,wL)=>{"use strict";var{OPERATIONS_ENUM:oX}=P(),VS=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=oX.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};wL.exports=VS});var $S=g((rEe,UL)=>{"use strict";var aX=Dn(),tEe=CL(),Fd=z(),kd=P(),cX=ee(),{handleHDBError:DL,hdb_errors:uX}=se(),{HDB_ERROR_MSGS:LL,HTTP_STATUS_CODES:ML}=uX,lX=Object.values(kd.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),PL="To use this operation audit log must be enabled in harperdb-config.yaml";UL.exports=_X;async function _X(e){if(Fd.isEmpty(e.schema))throw new Error(LL.SCHEMA_REQUIRED_ERR);if(Fd.isEmpty(e.table))throw new Error(LL.TABLE_REQUIRED_ERR);if(!cX.get(kd.CONFIG_PARAMS.LOGGING_AUDITLOG))throw DL(new Error,PL,ML.BAD_REQUEST,kd.LOG_LEVELS.ERROR,PL,!0);let t=Fd.checkSchemaTableExist(e.schema,e.table);if(t)throw DL(new Error,t,ML.NOT_FOUND,kd.LOG_LEVELS.ERROR,t,!0);if(!Fd.isEmpty(e.search_type)&&lX.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await aX.readAuditLog(e)}a(_X,"readAuditLog")});var BL=g((sEe,vL)=>{"use strict";var{OPERATIONS_ENUM:dX}=P(),YS=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=dX.GET_BACKUP,this.schema=t,this.table=r}};vL.exports=YS});var GL=g((cEe,xL)=>{"use strict";var fX=Dn(),oEe=BL(),KS=z(),EX=P(),aEe=ee(),{handleHDBError:hX,hdb_errors:mX}=se(),{HDB_ERROR_MSGS:HL,HTTP_STATUS_CODES:pX}=mX;xL.exports=SX;async function SX(e){if(KS.isEmpty(e.schema))throw new Error(HL.SCHEMA_REQUIRED_ERR);if(KS.isEmpty(e.table))throw new Error(HL.TABLE_REQUIRED_ERR);let t=KS.checkSchemaTableExist(e.schema,e.table);if(t)throw hX(new Error,t,pX.NOT_FOUND,EX.LOG_LEVELS.ERROR,t,!0);return await fX.getBackup(read_audit_log_object)}a(SX,"getBackup")});var YL=g((lEe,$L)=>{var hi=require("validate.js"),FL=Xe(),Sa=P(),{handleHDBError:TX,hdb_errors:gX}=se(),{HDB_ERROR_MSGS:mt,HTTP_STATUS_CODES:RX}=gX,WS=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),AX={STRUCTURE_USER:"structure_user"},qL=Object.values(Sa.ROLE_TYPES_ENUM),OX="attribute_permissions",bX="attribute_name",{PERMS_CRUD_ENUM:Ta}=Sa,yX=[OX,...Object.values(Ta)],kL=[Ta.READ,Ta.INSERT,Ta.UPDATE],NX=[bX,...kL];function IX(e){let t=WS();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,VL(e,t)}a(IX,"addRoleValidation");function wX(e){let t=WS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,VL(e,t)}a(wX,"alterRoleValidation");function CX(e){let t=WS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,FL.validateObject(e,t)}a(CX,"dropRoleValidation");var DX=["operation","role","id","permission","hdb_user","hdb_auth_header"];function VL(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)DX.includes(n[o])||s.push(n[o]);s.length>0&&At(mt.INVALID_ROLE_JSON_KEYS(s),r);let i=FL.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{At(o,r)}),e.permission){let o=LX(e);o&&At(o,r),qL.forEach(c=>{e.permission[c]&&!hi.isBoolean(e.permission[c])&&At(mt.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(qL.indexOf(o)<0){if(o===AX.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]||At(mt.SCHEMA_NOT_FOUND(d),r)}continue}At(mt.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){At(mt.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]){At(mt.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(_).forEach(l=>{yX.includes(l)||At(mt.INVALID_PERM_KEY(l),r,o,u)}),Object.values(Ta).forEach(l=>{hi.isDefined(_[l])?hi.isBoolean(_[l])||At(mt.TABLE_PERM_NOT_BOOLEAN(l),r,o,u):At(mt.TABLE_PERM_MISSING(l),r,o,u)}),hi.isDefined(_.attribute_permissions)){if(!hi.isArray(_.attribute_permissions)){At(mt.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{At(mt.ATTR_PERMS_ARRAY_MISSING,r,o,u);continue}if(_.attribute_permissions){let l=global.hdb_schema[o][u].attributes.map(({attribute:E})=>E),d={read:!1,insert:!1,update:!1};for(let E in _.attribute_permissions){let f=_.attribute_permissions[E];if(Object.keys(f).forEach(p=>{!NX.includes(p)&&p!==Ta.DELETE&&At(mt.INVALID_ATTR_PERM_KEY(p),r,o,u)}),!hi.isDefined(f.attribute_name)){At(mt.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=f.attribute_name;if(!l.includes(h)){At(mt.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}kL.forEach(p=>{hi.isDefined(f[p])?hi.isBoolean(f[p])||At(mt.ATTR_PERM_NOT_BOOLEAN(p,h),r,o,u):At(mt.ATTR_PERM_MISSING(p,h),r,o,u)}),!d.read&&f.read===!0&&(d.read=!0),!d.insert&&f.insert===!0&&(d.insert=!0),!d.update&&f.update===!0&&(d.update=!0)}if(_.read===!1&&d.read===!0||_.insert===!1&&d.insert===!0||_.update===!1&&d.update===!0){let E=`${o}.${u}`;At(mt.MISMATCHED_TABLE_ATTR_PERMS(E),r,o,u)}}}}return MX(r)}a(VL,"customValidate");$L.exports={addRoleValidation:IX,alterRoleValidation:wX,dropRoleValidation:CX};function LX(e){let{operation:t,permission:r}=e;if(t===Sa.OPERATIONS_ENUM.ADD_ROLE||t===Sa.OPERATIONS_ENUM.ALTER_ROLE){let n=r.super_user===!0,s=r.cluster_user===!0;if(Object.keys(r).length>1&&(n||s)){if(s&&n)return mt.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Sa.ROLE_TYPES_ENUM.SUPER_USER:Sa.ROLE_TYPES_ENUM.CLUSTER_USER;return mt.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(LX,"validateNoSUPerms");function MX(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:mt.ROLE_PERMS_ERROR,...e};return TX(new Error,n,RX.BAD_REQUEST)}else return null}a(MX,"generateRolePermResponse");function At(e,t,r,n){if(!r)t.main_permissions.push(e);else{let s=n?r+"_"+n:r;t.schema_permissions[s]?t.schema_permissions[s].push(e):t.schema_permissions[s]=[e]}}a(At,"addPermError")});var ZS=g((dEe,zL)=>{"use strict";var KL=qr(),WL=Gr(),PX=ci(),zS=YL(),JS=Ns(),UX=require("uuid").v4,vX=require("util"),Vd=P(),BX=z(),jS=WL.searchByValue,HX=WL.searchByHash,xX=vX.promisify(PX.delete),GX=rs(),qX=oa(),{hdb_errors:FX,handleHDBError:_o}=se(),{HDB_ERROR_MSGS:QL,HTTP_STATUS_CODES:yu}=FX,{UserEventMsg:XS}=Pn();zL.exports={addRole:kX,alterRole:VX,dropRole:$X,listRoles:YX};function QS(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(QS,"scrubRoleDetails");async function kX(e){let t=zS.addRoleValidation(e);if(t)throw t;e=QS(e);let r={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await jS(r)||[])}catch(i){throw _o(i)}if(n&&n.length>0)throw _o(new Error,QL.ROLE_ALREADY_EXISTS(e.role),yu.CONFLICT,void 0,void 0,!0);e.id||(e.id=UX());let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await KL.insert(s),JS.signalUserChange(new XS(process.pid)),e=QS(e),e}a(kX,"addRole");async function VX(e){let t=zS.alterRoleValidation(e);if(t)throw t;e=QS(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await KL.update(r)}catch(s){throw _o(s)}if(n&&n?.message==="updated 0 of 1 records")throw _o(new Error,"Invalid role id",yu.BAD_REQUEST,void 0,void 0,!0);return await JS.signalUserChange(new XS(process.pid)),e}a(VX,"alterRole");async function $X(e){let t=zS.dropRoleValidation(e);if(t)throw _o(new Error,t,yu.BAD_REQUEST,void 0,void 0,!0);let r=new qX(Vd.SYSTEM_SCHEMA_NAME,Vd.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await HX(r));if(n.length===0)throw _o(new Error,QL.ROLE_NOT_FOUND,yu.NOT_FOUND,void 0,void 0,!0);let s=new GX(Vd.SYSTEM_SCHEMA_NAME,Vd.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await jS(s)),o=!1;if(BX.isEmptyOrZeroLength(i)===!1){for(let u=0;u<i.length;u++)if(i[u].active===!0){o=!0;break}}if(o===!0)throw _o(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,yu.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await xX(c),JS.signalUserChange(new XS(process.pid)),`${n[0].role} successfully deleted`}a($X,"dropRole");async function YX(){return jS({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(YX,"listRoles")});var ZL=g((EEe,XL)=>{"use strict";var KX=ee(),mi=require("joi"),WX=Xe(),JL=require("moment"),QX=require("fs-extra"),eT=require("path"),zX=require("lodash"),Nu=P(),{LOG_LEVELS:fo}=P(),JX="YYYY-MM-DD hh:mm:ss",jX=eT.resolve(__dirname,"../logs");XL.exports=function(e){return WX.validateBySchema(e,XX)};var XX=mi.object({from:mi.custom(jL),until:mi.custom(jL),level:mi.valid(fo.NOTIFY,fo.FATAL,fo.ERROR,fo.WARN,fo.INFO,fo.DEBUG,fo.TRACE),order:mi.valid("asc","desc"),limit:mi.number().min(1),start:mi.number().min(0),log_name:mi.custom(ZX)});function jL(e,t){if(JL(e,JL.ISO_8601).format(JX)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(jL,"validateDatetime");function ZX(e,t){if(zX.invert(Nu.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=KX.get(Nu.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?Nu.LOG_NAMES.HDB:e,i=s===Nu.LOG_NAMES.INSTALL?eT.join(jX,Nu.LOG_NAMES.INSTALL):eT.join(n,s);return QX.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(ZX,"validateReadLogPath")});var rT=g((mEe,tM)=>{"use strict";var $d=P(),eZ=$(),tZ=ee(),rZ=ZL(),tT=require("path"),eM=require("fs-extra"),{once:nZ}=require("events"),{handleHDBError:sZ,hdb_errors:iZ}=se(),{PACKAGE_ROOT:oZ}=P(),aZ=tT.join(oZ,"logs"),cZ=1e3,uZ=200;tM.exports=lZ;async function lZ(e){let t=rZ(e);if(t)throw sZ(t,t.message,iZ.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=tZ.get($d.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e.log_name===void 0?$d.LOG_NAMES.HDB:e.log_name,s=n===$d.LOG_NAMES.INSTALL?tT.join(aZ,$d.LOG_NAMES.INSTALL):tT.join(r,n),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?cZ:e.limit,E=e.order===void 0?void 0:e.order,f=e.start===void 0?0:e.start,h=f+d,p=0;E==="desc"&&!u&&!l&&(p=Math.max(eM.statSync(s).size-(h+5)*uZ,0));let S=eM.createReadStream(s,{start:p});S.on("error",U=>{eZ.error(U)});let T=0,R=[],y="",I;S.on("data",U=>{let F=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;U=y+U;let M=0,Q;for(;(Q=F.exec(U))&&!S.destroyed;){I&&(I.message=U.slice(M,Q.index),B(I));let[J,j,ae]=Q,ce=ae.split("] ["),de=ce[0],Be=ce[1];ce.splice(0,2),I={timestamp:j,thread:de,level:Be,tags:ce,message:""},M=Q.index+J.length}y=U.slice(M)}),S.on("end",U=>{S.destroyed||I&&(I.message=y.trim(),B(I))}),S.resume();function B(U){let F,M,Q;switch(!0){case(i&&c&&_):F=new Date(U.timestamp),M=new Date(u),Q=new Date(l),U.level===o&&F>=M&&F<=Q&&T<f?T++:U.level===o&&F>=M&&F<=Q&&(pi(U,E,R),T++,T===h&&S.destroy());break;case(i&&c):F=new Date(U.timestamp),M=new Date(u),U.level===o&&F>=M&&T<f?T++:U.level===o&&F>=M&&(pi(U,E,R),T++,T===h&&S.destroy());break;case(i&&_):F=new Date(U.timestamp),Q=new Date(l),U.level===o&&F<=Q&&T<f?T++:U.level===o&&F<=Q&&(pi(U,E,R),T++,T===h&&S.destroy());break;case(c&&_):F=new Date(U.timestamp),M=new Date(u),Q=new Date(l),F>=M&&F<=Q&&T<f?T++:F>=M&&F<=Q&&(pi(U,E,R),T++,T===h&&S.destroy());break;case i:U.level===o&&T<f?T++:U.level===o&&(pi(U,E,R),T++,T===h&&S.destroy());break;case c:F=new Date(U.timestamp),M=new Date(u),F>=M&&T<f?T++:F>=M&&T>=f&&(pi(U,E,R),T++,T===h&&S.destroy());break;case _:F=new Date(U.timestamp),Q=new Date(l),F<=Q&&T<f?T++:F<=Q&&T>=f&&(pi(U,E,R),T++,T===h&&S.destroy());break;default:T<f?T++:(pi(U,E,R),T++,T===h&&S.destroy())}}return a(B,"onLogMessage"),await nZ(S,"close"),R}a(lZ,"readLog");function pi(e,t,r){t==="desc"?_Z(e,r):t==="asc"?dZ(e,r):r.push(e)}a(pi,"pushLineToResult");function _Z(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)>r?n=i+1:s=i}t.splice(n,0,e)}a(_Z,"insertDescending");function dZ(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)<r?n=i+1:s=i}t.splice(n,0,e)}a(dZ,"insertAscending")});var Yd=g((REe,iM)=>{"use strict";var nT=require("joi"),{string:Iu,boolean:rM,date:fZ}=nT.types(),EZ=Xe(),{validateSchemaExists:SEe,validateTableExists:TEe,validateSchemaName:gEe}=jn(),hZ=P(),mZ=Ve(),nM=ee();nM.initSync();var pZ=Iu.invalid(nM.get(hZ.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(mZ.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(),sM={operation:Iu.valid("add_node","update_node","set_node_replication"),node_name:pZ,subscriptions:nT.array().items({table:Iu.optional(),schema:Iu.optional(),database:Iu.optional(),subscribe:rM.required(),publish:rM.required().custom(TZ),start_time:fZ.iso()}).min(1).required()};function SZ(e){return EZ.validateBySchema(e,nT.object(sM))}a(SZ,"addUpdateNodeValidator");function TZ(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(TZ,"checkForFalsy");iM.exports={addUpdateNodeValidator:SZ,validation_schema:sM}});var aM=g((OEe,oM)=>{var gZ=Xe(),RZ={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};oM.exports=function(e){return gZ.validateObject(e,RZ)}});var Kd=g((bEe,cM)=>{"use strict";var AZ=P().OPERATIONS_ENUM,sT=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=AZ.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};cM.exports=sT});var lM=g((NEe,uM)=>{"use strict";var OZ={OPERATION:"operation",REFRESH:"refresh"},iT=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},oT=class{static{a(this,"JWTRSAKeys")}constructor(t,r,n){this.public_key=t,this.private_key=r,this.passphrase=n}};uM.exports={JWTTokens:iT,TOKEN_TYPE_ENUM:OZ,JWTRSAKeys:oT}});var Du=g((wEe,EM)=>{"use strict";var Cu=require("jsonwebtoken"),aT=require("fs-extra"),cT=z(),dn=P(),{handleHDBError:Ar,hdb_errors:bZ}=se(),{HTTP_STATUS_CODES:Or,AUTHENTICATION_ERROR_MSGS:br}=bZ,wu=$(),_M=Q_(),_T=_n(),yZ=qr().update,NZ=Kd(),IZ=Ns(),{UserEventMsg:wZ}=Pn(),Si=ee();Si.initSync();var uT=require("path"),{JWTTokens:CZ,JWTRSAKeys:DZ,TOKEN_TYPE_ENUM:Wd}=lM(),LZ=Si.get(dn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Si.get(dn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",MZ=Si.get(dn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Si.get(dn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",Qd="RS256",lT;EM.exports={createTokens:PZ,validateOperationToken:vZ,refreshOperationToken:UZ,validateRefreshToken:fM};async function PZ(e){if(cT.isEmpty(e)||typeof e!="object")throw Ar(new Error,br.INVALID_AUTH_OBJECT,Or.BAD_REQUEST,void 0,void 0,!0);if(cT.isEmpty(e.username))throw Ar(new Error,br.USERNAME_REQUIRED,Or.BAD_REQUEST,void 0,void 0,!0);if(cT.isEmpty(e.password))throw Ar(new Error,br.PASSWORD_REQUIRED,Or.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await _T.findAndValidateUser(e.username,e.password),!t)throw Ar(new Error,br.INVALID_CREDENTIALS,Or.UNAUTHORIZED,void 0,void 0,!0)}catch(E){throw wu.error(E),Ar(new Error,br.INVALID_CREDENTIALS,Or.UNAUTHORIZED,void 0,void 0,!0)}let r=await zd(),n=!1,s=!1;t.role&&t.role.permission&&(n=t.role.permission.super_user===!0,s=t.role.permission.cluster_user===!0);let i={username:e.username,super_user:n,cluster_user:s},o=await dM(i,r.private_key,r.passphrase),c=await Cu.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:MZ,algorithm:Qd,subject:Wd.REFRESH}),u=_M.hash(c),_=new NZ(dn.SYSTEM_SCHEMA_NAME,dn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),l,d;try{l=await yZ(_)}catch(E){wu.error(E),d=E}if(d!==void 0||l.skipped_hashes.length>0)throw Ar(new Error,br.REFRESH_TOKEN_SAVE_FAILED,Or.INTERNAL_SERVER_ERROR);return IZ.signalUserChange(new wZ(process.pid)),new CZ(o,c)}a(PZ,"createTokens");async function dM(e,t,r){return await Cu.sign(e,{key:t,passphrase:r},{expiresIn:LZ,algorithm:Qd,subject:Wd.OPERATION})}a(dM,"signOperationToken");async function zd(){if(lT===void 0)try{let e=uT.join(Si.getHdbBasePath(),dn.LICENSE_KEY_DIR_NAME,dn.JWT_ENUM.JWT_PASSPHRASE_NAME),t=uT.join(Si.getHdbBasePath(),dn.LICENSE_KEY_DIR_NAME,dn.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=uT.join(Si.getHdbBasePath(),dn.LICENSE_KEY_DIR_NAME,dn.JWT_ENUM.JWT_PUBLIC_KEY_NAME),n=(await aT.readFile(e)).toString(),s=(await aT.readFile(t)).toString(),i=(await aT.readFile(r)).toString();lT=new DZ(i,s,n)}catch(e){throw wu.error(e),Ar(new Error,br.NO_ENCRYPTION_KEYS,Or.INTERNAL_SERVER_ERROR)}return lT}a(zd,"getJWTRSAKeys");async function UZ(e){if(!e)throw Ar(new Error,br.INVALID_BODY,Or.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw Ar(new Error,br.REFRESH_TOKEN_REQUIRED,Or.BAD_REQUEST,void 0,void 0,!0);await fM(e.refresh_token);let t=await zd(),r=await Cu.decode(e.refresh_token);return{operation_token:await dM({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(UZ,"refreshOperationToken");async function vZ(e){try{let t=await zd(),r=await Cu.verify(e,t.public_key,{algorithms:Qd,subject:Wd.OPERATION});return await _T.findAndValidateUser(r.username,void 0,!1)}catch(t){throw wu.warn(t),t.name&&t.name==="TokenExpiredError"?Ar(new Error,br.TOKEN_EXPIRED,Or.FORBIDDEN):Ar(new Error,br.INVALID_TOKEN,Or.UNAUTHORIZED)}}a(vZ,"validateOperationToken");async function fM(e){let t;try{let r=await zd(),n=await Cu.verify(e,r.public_key,{algorithms:Qd,subject:Wd.REFRESH});t=await _T.findAndValidateUser(n.username,void 0,!1)}catch(r){throw wu.warn(r),r.name&&r.name==="TokenExpiredError"?Ar(new Error,br.TOKEN_EXPIRED,Or.FORBIDDEN):Ar(new Error,br.INVALID_TOKEN,Or.UNAUTHORIZED)}if(!_M.validate(t.refresh_token,e))throw Ar(new Error,br.INVALID_TOKEN,Or.UNAUTHORIZED);return t}a(fM,"validateRefreshToken")});var dT=g((LEe,pM)=>{"use strict";var BZ=aM(),ga=require("passport"),HZ=require("passport-local").Strategy,xZ=require("passport-http").BasicStrategy,GZ=require("util"),qZ=_n(),mM=GZ.callbackify(qZ.findAndValidateUser),DEe=Ur(),FZ=P(),hM=Du();ga.use(new HZ(function(e,t,r){mM(e,t,r)}));ga.use(new xZ(function(e,t,r){mM(e,t,r)}));ga.serializeUser(function(e,t){t(null,e)});ga.deserializeUser(function(e,t){t(null,e)});function kZ(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let n,s;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");n=o[0],s=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("Must login")}switch(a(i,"handleResponse"),n){case"Basic":ga.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===FZ.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?hM.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):hM.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:ga.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(kZ,"authorize");function VZ(e,t){let r=BZ(e);if(r){t(r);return}let n={authorized:!0,messages:[]},s=e.user.role;if(!s?.permission)return t("Invalid role");let i=JSON.parse(s.permission);if(i.super_user)return t(null,n);if(!i[e.schema])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.schema} schema`),t(null,n);if(!i[e.schema].tables[e.table])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.table} table`),t(null,n);if(!i[e.schema].tables[e.table][e.operation])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return n.authorized=!1,n.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let o=i[e.schema].tables[e.table].attribute_permissions;for(let c in o)e.attributes.indexOf(o[c].attribute_name)>-1&&!o[c][e.operation]&&(n.authorized=!1,n.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,n)}a(VZ,"checkPermissions");pM.exports={authorize:kZ,checkPermissions:VZ}});var Ti=g((PEe,SM)=>{"use strict";var fT=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},ET=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};SM.exports={Node:fT,NodeSubscription:ET}});var gM=g((vEe,TM)=>{"use strict";var $Z=P().OPERATIONS_ENUM,hT=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=$Z.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};TM.exports=hT});var Lu=g((HEe,RM)=>{"use strict";var mT=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},pT=class{static{a(this,"RemotePayloadSubscription")}constructor(t,r,n,s,i,o,c){this.schema=t,this.table=r,this.hash_attribute=n,this.publish=s,this.subscribe=i,this.start_time=o,c!==void 0&&(this.attributes=c)}};RM.exports={RemotePayloadObject:mT,RemotePayloadSubscription:pT}});var OM=g((GEe,AM)=>{"use strict";var ST=class{static{a(this,"TableSizeObject")}constructor(t,r,n=0,s=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=n,this.record_count=s,this.transaction_log_size=i,this.transaction_log_record_count=o}};AM.exports=ST});var NM=g(($Ee,yM)=>{"use strict";var YZ=OM(),FEe=ft(),bM=Qe(),KZ=$(),{getSchemaPath:kEe,getTransactionAuditStorePath:VEe}=je(),{getDatabases:WZ}=(Ae(),ie(ke));yM.exports=QZ;async function QZ(e){let t=new YZ;try{let r=WZ()[e.schema]?.[e.name],n=r.primaryStore.getStats(),s=r.auditStore?.getStats(),i=await bM.environmentDataSize(schema_path,e.name),o=await bM.environmentDataSize(txn_path,e.name);t.schema=e.schema,t.table=e.name,t.table_size=i,t.record_count=n.entryCount,t.transaction_log_size=o,t.transaction_log_record_count=s.entryCount}catch(r){KZ.warn(`unable to stat table dbi due to ${r}`)}return t}a(QZ,"lmdbGetTableSize")});var wM=g((KEe,IM)=>{"use strict";var TT=class{static{a(this,"SystemInformationObject")}constructor(t,r,n,s,i,o,c){this.system=t,this.time=r,this.cpu=n,this.memory=s,this.disk=i,this.network=o,this.harperdb_processes=c}};IM.exports=TT});var Ra=g((XEe,MM)=>{"use strict";var zZ=require("fs-extra"),JZ=require("path"),sr=require("systeminformation"),gi=$(),CM=ut(),QEe=Ve(),jd=P(),jZ=NM(),XZ=bs(),{getThreadInfo:DM}=We(),DT=ee();DT.initSync();var ZZ=wM(),{openEnvironment:zEe}=Qe(),{getSchemaPath:JEe}=je(),{database:jEe,databases:gT}=(Ae(),ie(ke)),Jd;MM.exports={getHDBProcessInfo:bT,getNetworkInfo:NT,getDiskInfo:yT,getMemoryInfo:OT,getCPUInfo:AT,getTimeInfo:RT,getSystemInformation:IT,systemInformation:e5,getTableSize:wT,getMetrics:CT};function RT(){return sr.time()}a(RT,"getTimeInfo");async function AT(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:u,cache:_,...l}=await sr.cpu();l.cpu_speed=await sr.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:E,raw_currentload_irq:f,raw_currentload_nice:h,raw_currentload_system:p,raw_currentload_user:S,cpus:T,...R}=await sr.currentLoad();return R.cpus=[],T.forEach(y=>{let{raw_load:I,raw_load_idle:B,raw_load_irq:U,raw_load_nice:F,raw_load_system:M,raw_load_user:Q,...J}=y;R.cpus.push(J)}),l.current_load=R,l}catch(e){return gi.error(`error in getCPUInfo: ${e}`),{}}}a(AT,"getCPUInfo");async function OT(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await sr.mem();return Object.assign(s,process.memoryUsage())}catch(e){return gi.error(`error in getMemoryInfo: ${e}`),{}}}a(OT,"getMemoryInfo");async function bT(){let e={core:[],clustering:[]};try{let t=await sr.processes(),r;try{r=Number.parseInt(await zZ.readFile(JZ.join(DT.get(jd.CONFIG_PARAMS.ROOTPATH),jd.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===jd.NODE_ERROR_CODES.ENOENT)gi.warn("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB. This could be because HarperDB is not running.");else throw n}t.list.forEach(n=>{n.pid===r?e.core.push(n):n.name==="nats-server"&&e.clustering.push(n)});for(let n of e.core)for(let s of t.list)s.pid===n.parentPid&&(s.name==="PM2"||s.command==="PM2")&&(n.parent="PM2");return e}catch(t){return gi.error(`error in getHDBProcessInfo: ${t}`),e}}a(bT,"getHDBProcessInfo");async function yT(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await sr.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:u,..._}=await sr.fsStats();return e.read_write=_,e.size=await sr.fsSize(),e}catch(t){return gi.error(`error in getDiskInfo: ${t}`),e}}a(yT,"getDiskInfo");async function NT(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await sr.networkInterfaceDefault(),e.latency=await sr.inetChecksite("google.com"),(await sr.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:o,dhcp:c,dnsSuffix:u,ieee8021xAuth:_,ieee8021xState:l,carrier_changes:d,...E}=n;e.interfaces.push(E)}),(await sr.networkStats()).forEach(n=>{let{rx_sec:s,tx_sec:i,ms:o,...c}=n;e.stats.push(c)}),e}catch(t){return gi.error(`error in getNetworkInfo: ${t}`),e}}a(NT,"getNetworkInfo");async function IT(){if(Jd!==void 0)return Jd;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await sr.osInfo();e=c;let u=await sr.versions("node, npm");return e.node_version=u.node,e.npm_version=u.npm,Jd=e,Jd}catch(t){return gi.error(`error in getSystemInformation: ${t}`),e}}a(IT,"getSystemInformation");async function wT(){let e=[],t=await XZ.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await jZ(n));return e}a(wT,"getTableSize");async function CT(){let e={};for(let t in gT){let r=e[t]={},n=r.tables={};for(let s in gT[t])try{let i=gT[t][s];r.readers||(Object.assign(r,i.primaryStore.rootStore.getStats()),delete r.root,r.readers=i.primaryStore.rootStore.readerList().split(/\n\s+/).slice(1).map(u=>{let[_,l,d]=u.trim().split(" ");return{pid:_,thread:l,txnid:d}}),i.primaryStore.auditStore&&(r.audit=i.auditStore.getStats()));let o=i.primaryStore.getStats(),c={};for(let u of["treeDepth","treeBranchPageCount","treeLeafPageCount","entryCount","overflowPages"])c[u]=o[u];n[s]=c}catch(i){gi.notify(`Error getting stats for table ${s}: ${i}`)}}return e}a(CT,"getMetrics");async function LM(){if(DT.get(jd.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await CM.getNATSReferences(),t=await CM.listStreams(),r=[];for(let n of t){let s=[],i=await e.consumers.list(n.config.name);for await(let c of i)s.push({name:c.name,created:c.created,num_ack_pending:c.num_ack_pending,num_redelivered:c.num_redelivered,num_waiting:c.num_waiting,num_pending:c.num_pending});let o={stream_name:n.config.name,database:n.config.subjects[0].split(".")[1],table:n.config.subjects[0].split(".")[2],state:n.state,consumers:s};r.push(o)}return r}}a(LM,"getNatsStreamInfo");async function e5(e){let t=new ZZ;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await IT(),t.time=RT(),t.cpu=await AT(),t.memory=await OT(),t.disk=await yT(),t.network=await NT(),t.harperdb_processes=await bT(),t.table_size=await wT(),t.metrics=await CT(),t.threads=await DM(),t.replication=await LM(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await IT();break;case"time":t.time=RT();break;case"cpu":t.cpu=await AT();break;case"memory":t.memory=await OT();break;case"disk":t.disk=await yT();break;case"network":t.network=await NT();break;case"harperdb_processes":t.harperdb_processes=await bT();break;case"table_size":t.table_size=await wT();break;case"database_metrics":case"metrics":t.metrics=await CT();break;case"threads":t.threads=await DM();break;case"replication":t.replication=await LM();break;default:break}return t}a(e5,"systemInformation")});var Zd=g((ehe,PM)=>{"use strict";PM.exports={version:t5,printVersion:r5};var Xd=du();function t5(){if(Xd)return Xd.version}a(t5,"version");function r5(){Xd&&console.log(`HarperDB Version ${Xd.version}`)}a(r5,"printVersion")});var fn=g((she,HM)=>{"use strict";var n5=qr(),LT=z(),s5=require("util"),Eo=P(),UM=ee();UM.initSync();var i5=dT(),vM=Gr(),{Node:rhe,NodeSubscription:nhe}=Ti(),o5=oa(),a5=gM(),{RemotePayloadObject:c5,RemotePayloadSubscription:u5}=Lu(),{handleHDBError:l5,hdb_errors:_5}=se(),{HTTP_STATUS_CODES:d5,HDB_ERROR_MSGS:f5}=_5,E5=rs(),h5=Ra(),m5=Zd(),{getDatabases:p5}=(Ae(),ie(ke)),S5=s5.promisify(i5.authorize),T5=vM.searchByHash,g5=vM.searchByValue;HM.exports={authHeaderToUser:R5,isEmpty:A5,getNodeRecord:O5,upsertNodeRecord:b5,buildNodePayloads:y5,checkClusteringEnabled:N5,getAllNodeRecords:I5,getSystemInfo:w5,reverseSubscription:BM};async function R5(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await S5(t,null),e}a(R5,"authHeaderToUser");function A5(e){return e==null}a(A5,"isEmpty");async function O5(e){let t=new o5(Eo.SYSTEM_SCHEMA_NAME,Eo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return T5(t)}a(O5,"getNodeRecord");async function b5(e){let t=new a5(Eo.SYSTEM_SCHEMA_NAME,Eo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return n5.upsert(t)}a(b5,"upsertNodeRecord");function BM(e){if(LT.isEmpty(e.subscribe)||LT.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:n}=e,s={schema:t,table:r,hash_attribute:n};return e.subscribe===!0&&e.publish===!1?(s.subscribe=!1,s.publish=!0):e.subscribe===!1&&e.publish===!0?(s.subscribe=!0,s.publish=!1):(s.subscribe=e.subscribe,s.publish=e.publish),s}a(BM,"reverseSubscription");function y5(e,t,r,n){let s=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:u,table:_}=c,l=LT.getTableHashAttribute(u,_),{subscribe:d,publish:E}=BM(c),f=p5()[u]?.[_],h=new u5(u,_,l,E,d,c.start_time,f.schemaDefined?f.attributes:void 0);s.push(h)}return new c5(r,t,s,n)}a(y5,"buildNodePayloads");function N5(){if(!UM.get(Eo.CONFIG_PARAMS.CLUSTERING_ENABLED))throw l5(new Error,f5.CLUSTERING_NOT_ENABLED,d5.BAD_REQUEST,void 0,void 0,!0)}a(N5,"checkClusteringEnabled");async function I5(){let e=new E5(Eo.SYSTEM_SCHEMA_NAME,Eo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await g5(e))}a(I5,"getAllNodeRecords");async function w5(){let e=await h5.getSystemInformation();return{hdb_version:m5.version(),node_version:e.node_version,platform:e.platform}}a(w5,"getSystemInfo")});var MT=g((ohe,YM)=>{"use strict";var ef=ut(),xM=z(),GM=Ve(),qM=P(),tf=$(),FM=bu(),C5=hd(),{RemotePayloadObject:D5}=Lu(),{handleHDBError:kM,hdb_errors:L5}=se(),{HTTP_STATUS_CODES:VM}=L5,{NodeSubscription:$M}=Ti();YM.exports=M5;async function M5(e,t){let r;try{r=await ef.request(`${t}.${GM.REQUEST_SUFFIX}`,new D5(qM.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),tf.trace("Response from remote describe all request:",r)}catch(o){tf.error(`addNode received error from describe all request to remote node: ${o}`);let c=ef.requestErrorHandler(o,"add_node",t);throw kM(new Error,c,VM.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===GM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw kM(new Error,o,VM.INTERNAL_SERVER_ERROR,"error",o)}let n=r.message,s=[],i=[];for(let o of e){let{table:c}=o,u=o.database??o.schema??"data";if(u===qM.SYSTEM_SCHEMA_NAME){await ef.createLocalTableStream(u,c);let h=new $M(u,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=xM.doesSchemaExist(u),l=n[u]!==void 0,d=c?xM.doesTableExist(u,c):!0,E=c?n?.[u]?.[c]!==void 0:!0;if(!_&&!l||!d&&!E){s.push(o);continue}if(!_&&l&&(tf.trace(`addNode creating schema: ${u}`),await FM.createSchema({operation:"create_schema",schema:u})),!d&&E){tf.trace(`addNode creating table: ${c} in schema: ${u} with attributes ${JSON.stringify(n[u][c].attributes)}`);let h=new C5(u,c,n[u][c].hash_attribute);n[u][c].attributes&&(h.attributes=n[u][c].attributes),await FM.createTable(h)}await ef.createLocalTableStream(u,c);let f=new $M(u,c,o.publish,o.subscribe);f.start_time=o.start_time,i.push(f)}return{added:i,skipped:s}}a(M5,"reviewSubscriptions")});var of=g((che,QM)=>{"use strict";var{handleHDBError:rf,hdb_errors:P5}=se(),{HTTP_STATUS_CODES:nf}=P5,{addUpdateNodeValidator:U5}=Yd(),sf=$(),WM=P(),KM=Ve(),v5=z(),Mu=ut(),Pu=fn(),B5=ee(),H5=MT(),{Node:x5,NodeSubscription:G5}=Ti(),{broadcast:q5}=We(),F5="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",k5="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",V5=B5.get(WM.CONFIG_PARAMS.CLUSTERING_NODENAME);QM.exports=$5;async function $5(e,t=!1){sf.trace("addNode called with:",e),Pu.checkClusteringEnabled();let r=U5(e);if(r)throw rf(r,r.message,nf.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let d=await Pu.getNodeRecord(n);if(!v5.isEmptyOrZeroLength(d))throw rf(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,nf.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await H5(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=F5,o;let c=Pu.buildNodePayloads(s,V5,WM.OPERATIONS_ENUM.ADD_NODE,await Pu.getSystemInfo()),u=[];for(let d=0,E=s.length;d<E;d++){let f=s[d];s[d].start_time===void 0&&delete s[d].start_time,u.push(new G5(f.schema,f.table,f.publish,f.subscribe))}sf.trace("addNode sending remote payload:",c);let _;try{_=await Mu.request(`${n}.${KM.REQUEST_SUFFIX}`,c)}catch(d){sf.error(`addNode received error from request: ${d}`);for(let f=0,h=s.length;f<h;f++){let p=s[f];p.publish=!1,p.subscribe=!1,await Mu.updateRemoteConsumer(p,n)}let E=Mu.requestErrorHandler(d,"add_node",n);throw rf(new Error,E,nf.INTERNAL_SERVER_ERROR,"error",E)}if(_.status===KM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${n}: ${_.message}`;throw rf(new Error,d,nf.INTERNAL_SERVER_ERROR,"error",d)}sf.trace(_);for(let d=0,E=s.length;d<E;d++){let f=s[d];await Mu.updateRemoteConsumer(f,n),f.subscribe===!0&&await Mu.updateConsumerIterator(f.schema,f.table,n,"start")}let l=new x5(n,u,_.system_info);return await Pu.upsertNodeRecord(l),q5({type:"nats_update"}),i.length>0?o.message=k5:o.message=`Successfully added '${n}' to manifest`,o}a($5,"addNode")});var vT=g((_he,jM)=>{"use strict";var{handleHDBError:PT,hdb_errors:Y5}=se(),{HTTP_STATUS_CODES:UT}=Y5,{addUpdateNodeValidator:K5}=Yd(),Uu=$(),JM=P(),zM=Ve(),lhe=z(),vu=ut(),Bu=fn(),W5=ee(),{cloneDeep:Q5}=require("lodash"),z5=MT(),{Node:J5,NodeSubscription:j5}=Ti(),{broadcast:X5}=We(),Z5="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",e8="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",t8=W5.get(JM.CONFIG_PARAMS.CLUSTERING_NODENAME);jM.exports=r8;async function r8(e){Uu.trace("updateNode called with:",e),Bu.checkClusteringEnabled();let t=K5(e);if(t)throw PT(t,t.message,UT.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await Bu.getNodeRecord(r);s.length>0&&(n=Q5(s));let{added:i,skipped:o}=await z5(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=Z5,c;let u=Bu.buildNodePayloads(i,t8,JM.OPERATIONS_ENUM.UPDATE_NODE,await Bu.getSystemInfo());for(let l=0,d=i.length;l<d;l++){let E=i[l];Uu.trace(`updateNode updating work stream for node: ${r} subscription:`,E),i[l].start_time===void 0&&delete i[l].start_time}Uu.trace("updateNode sending remote payload:",u);let _;try{_=await vu.request(`${r}.${zM.REQUEST_SUFFIX}`,u)}catch(l){Uu.error(`updateNode received error from request: ${l}`);let d=vu.requestErrorHandler(l,"update_node",r);throw PT(new Error,d,UT.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===zM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let l=`Error returned from remote node ${r}: ${_.message}`;throw PT(new Error,l,UT.INTERNAL_SERVER_ERROR,"error",l)}Uu.trace(_);for(let l=0,d=i.length;l<d;l++){let E=i[l];await vu.updateRemoteConsumer(E,r),E.subscribe===!0?await vu.updateConsumerIterator(E.schema,E.table,r,"start"):await vu.updateConsumerIterator(E.schema,E.table,r,"stop")}return n||(n=[new J5(r,[],_.system_info)]),await n8(n[0],i,_.system_info),o.length>0?c.message=e8:c.message=`Successfully updated '${r}'`,c}a(r8,"updateNode");async function n8(e,t,r){let n=e;for(let s=0,i=t.length;s<i;s++){let o=t[s],c=!1;for(let u=0,_=e.subscriptions.length;u<_;u++){let l=n.subscriptions[u];if(l.schema===o.schema&&l.table===o.table){l.publish=o.publish,l.subscribe=o.subscribe,c=!0;break}}c||n.subscriptions.push(new j5(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await Bu.upsertNodeRecord(n),X5({type:"nats_update"})}a(n8,"updateNodeTable")});var rP=g((fhe,tP)=>{"use strict";var eP=require("joi"),{string:XM}=eP.types(),s8=Xe(),ZM=P(),i8=ee(),o8=Ve();tP.exports=a8;function a8(e){let t=XM.invalid(i8.get(ZM.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(o8.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=eP.object({operation:XM.valid(ZM.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return s8.validateBySchema(e,r)}a(a8,"removeNodeValidator")});var cf=g((hhe,aP)=>{"use strict";var{handleHDBError:nP,hdb_errors:c8}=se(),{HTTP_STATUS_CODES:sP}=c8,u8=rP(),Hu=$(),iP=fn(),l8=z(),af=P(),oP=Ve(),BT=ut(),_8=ee(),{RemotePayloadObject:d8}=Lu(),{NodeSubscription:f8}=Ti(),E8=aa(),h8=ci(),{broadcast:m8}=We(),p8=_8.get(af.CONFIG_PARAMS.CLUSTERING_NODENAME);aP.exports=S8;async function S8(e){Hu.trace("removeNode called with:",e),iP.checkClusteringEnabled();let t=u8(e);if(t)throw nP(t,t.message,sP.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await iP.getNodeRecord(r);if(l8.isEmptyOrZeroLength(n))throw nP(new Error,`Node '${r}' was not found.`,sP.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new d8(af.OPERATIONS_ENUM.REMOVE_NODE,p8,[]),i,o=!1;for(let u=0,_=n.subscriptions.length;u<_;u++){let l=n.subscriptions[u];l.subscribe===!0&&await BT.updateConsumerIterator(l.schema,l.table,r,"stop");try{await BT.updateRemoteConsumer(new f8(l.schema,l.table,!1,!1),r)}catch(d){Hu.error(d)}}try{i=await BT.request(`${r}.${oP.REQUEST_SUFFIX}`,s),Hu.trace("Remove node reply from remote node:",r,i)}catch(u){Hu.error("removeNode received error from request:",u),o=!0}let c=new E8(af.SYSTEM_SCHEMA_NAME,af.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await h8.deleteRecord(c),m8({type:"nats_update"}),i?.status===oP.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(Hu.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(S8,"removeNode")});var lP=g((phe,uP)=>{"use strict";var cP=require("joi"),{string:T8,array:g8}=cP.types(),R8=Xe(),A8=Yd();uP.exports=O8;function O8(e){let t=cP.object({operation:T8.valid("configure_cluster").required(),connections:g8.items(A8.validation_schema).required()});return R8.validateBySchema(e,t)}a(O8,"configureClusterValidator")});var HT=g((The,hP)=>{"use strict";var b8=P(),uf=$(),y8=z(),N8=cf(),I8=of(),_P=fn(),w8=lP(),{handleHDBError:dP,hdb_errors:C8}=se(),{HTTP_STATUS_CODES:fP}=C8,D8="Configure cluster complete.",L8="Failed to configure the cluster. Check the logs for more details.",M8="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";hP.exports=P8;async function P8(e){uf.trace("configure cluster called with:",e),_P.checkClusteringEnabled();let t=w8(e);if(t)throw dP(t,t.message,fP.BAD_REQUEST,void 0,void 0,!0);let r=await _P.getAllNodeRecords(),n=[];for(let l=0,d=r.length;l<d;l++){let E=await EP(N8,{operation:b8.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[l].name},r[l].name);n.push(E)}uf.trace("All results from configure_cluster remove node:",n);let s=[],i=e.connections.length;for(let l=0;l<i;l++){let d=e.connections[l],E=await EP(I8,d,d.node_name);s.push(E)}uf.trace("All results from configure_cluster add node:",s);let o=[],c=[],u=!1,_=n.concat(s);for(let l=0,d=_.length;l<d;l++){let E=_[l];E.status==="rejected"&&(uf.error(E),o.includes(E.node_name)||o.push(E.node_name)),(E?.result?.message?.includes?.("Successfully")||E?.result?.includes?.("Successfully"))&&(u=!0),!(typeof E.result=="string"&&E.result.includes("Successfully removed")||E.status==="rejected")&&c.push({node_name:E?.node_name,subscriptions:E?.result})}if(y8.isEmptyOrZeroLength(o))return{message:D8,connections:c};if(u)return{message:M8,failed_nodes:o,connections:c};throw dP(new Error,L8,fP.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(P8,"configureCluster");async function EP(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}a(EP,"functionWrapper")});var TP=g((Rhe,SP)=>{"use strict";var xu=require("joi"),U8=Xe(),{validateSchemaExists:mP,validateTableExists:v8,validateSchemaName:pP}=jn(),B8=xu.object({operation:xu.string().valid("purge_stream"),schema:xu.string().custom(mP).custom(pP).optional(),database:xu.string().custom(mP).custom(pP).optional(),table:xu.string().custom(v8).required()});function H8(e){return U8.validateBySchema(e,B8)}a(H8,"purgeStreamValidator");SP.exports=H8});var xT=g((Ohe,gP)=>{"use strict";var{handleHDBError:x8,hdb_errors:G8}=se(),{HTTP_STATUS_CODES:q8}=G8,F8=TP(),k8=ut(),V8=fn();gP.exports=$8;async function $8(e){e.schema=e.schema??e.database;let t=F8(e);if(t)throw x8(t,t.message,q8.BAD_REQUEST,void 0,void 0,!0);V8.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await k8.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}a($8,"purgeStream")});var FT=g((yhe,NP)=>{"use strict";var qT=fn(),Y8=ut(),OP=ee(),lf=P(),ho=Ve(),K8=z(),GT=$(),{RemotePayloadObject:W8}=Lu(),{ErrorCode:RP}=require("nats"),AP=OP.get(lf.CONFIG_PARAMS.CLUSTERING_ENABLED),bP=OP.get(lf.CONFIG_PARAMS.CLUSTERING_NODENAME);NP.exports={clusterStatus:Q8,buildNodeStatus:yP};async function Q8(){let e={node_name:bP,is_enabled:AP,connections:[]};if(!AP)return e;let t=await qT.getAllNodeRecords();if(K8.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(yP(t[n],e.connections));return await Promise.allSettled(r),e}a(Q8,"clusterStatus");async function yP(e,t){let r=e.name,n=new W8(lf.OPERATIONS_ENUM.CLUSTER_STATUS,bP,void 0,await qT.getSystemInfo()),s,i,o=ho.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();s=await Y8.request(ho.REQUEST_SUBJECT(r),n),i=Date.now()-u,s.status===ho.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=ho.CLUSTER_STATUS_STATUSES.CLOSED,GT.error(`Error getting node status from ${r} `,s))}catch(u){GT.warn(`Error getting node status from ${r}`,u),u.code===RP.NoResponders?o=ho.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===RP.Timeout?o=ho.CLUSTER_STATUS_STATUSES.TIMEOUT:o=ho.CLUSTER_STATUS_STATUSES.CLOSED}let c=new z8(r,o,s?.message?.ports?.clustering,s?.message?.ports?.operations_api,i,s?.message?.uptime,e.subscriptions,s?.message?.system_info);try{let u={name:r,system_info:s?.message?.system_info};e.system_info?.hdb_version!==lf.PRE_4_0_0_VERSION&&await qT.upsertNodeRecord(u)}catch(u){GT.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(yP,"buildNodeStatus");function z8(e,t,r,n,s,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:n},this.latency_ms=s,this.uptime=i,this.subscriptions=o,this.system_info=c}a(z8,"NodeStatusObject")});var VT=g((Ihe,IP)=>{"use strict";var{handleHDBError:J8,hdb_errors:j8}=se(),{HTTP_STATUS_CODES:X8}=j8,Z8=ut(),e6=fn(),kT=z(),_f=require("joi"),t6=Xe(),r6=2e3,n6=_f.object({timeout:_f.number().min(1),connected_nodes:_f.boolean(),routes:_f.boolean()});IP.exports=s6;async function s6(e){e6.checkClusteringEnabled();let t=t6.validateBySchema(e,n6);if(t)throw J8(t,t.message,X8.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||kT.autoCastBoolean(n),o=s===void 0||kT.autoCastBoolean(s),c={nodes:[]},u=await Z8.getServerList(r??r6),_={};if(i)for(let l=0,d=u.length;l<d;l++){let E=u[l].statsz;E&&(_[u[l].server.name]=E.routes)}for(let l=0,d=u.length;l<d;l++){if(u[l].statsz)continue;let E=u[l].server,f=u[l].data;if(E.name.endsWith("-hub")){let h={name:E.name.slice(0,-4),response_time:u[l].response_time};i&&(h.connected_nodes=[],_[E.name]&&_[E.name].forEach(p=>{h.connected_nodes.includes(p.name.slice(0,-4))||h.connected_nodes.push(p.name.slice(0,-4))})),o&&(h.routes=f.cluster?.urls?f.cluster?.urls.map(p=>({host:p.split(":")[0],port:kT.autoCast(p.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(s6,"clusterNetwork")});var LP=g((Che,DP)=>{"use strict";var $T=require("joi"),wP=Xe(),{route_constraints:CP}=op();DP.exports={setRoutesValidator:i6,deleteRoutesValidator:o6};function i6(e){let t=$T.object({server:$T.valid("hub","leaf").required(),routes:CP.required()});return wP.validateBySchema(e,t)}a(i6,"setRoutesValidator");function o6(e){let t=$T.object({routes:CP.required()});return wP.validateBySchema(e,t)}a(o6,"deleteRoutesValidator")});var KT=g((Lhe,vP)=>{"use strict";var mo=Er(),YT=z(),df=P(),MP=LP(),{handleHDBError:PP,hdb_errors:a6}=se(),{HTTP_STATUS_CODES:UP}=a6,c6="cluster routes successfully set",u6="cluster routes successfully deleted";vP.exports={setRoutes:l6,getRoutes:_6,deleteRoutes:d6};function l6(e){let t=MP.setRoutesValidator(e);if(t)throw PP(t,t.message,UP.BAD_REQUEST,void 0,void 0,!0);let r=mo.getClusteringRoutes(),n=e.server==="hub"?r.hub_routes:r.leaf_routes,s=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],o=[];for(let c=0,u=e.routes.length;c<u;c++){let _=e.routes[c];_.port=YT.autoCast(_.port);let l=n.some(E=>E.host===_.host&&E.port===_.port),d=s.some(E=>E.host===_.host&&E.port===_.port);l||d?i.push(_):(n.push(_),o.push(_))}return e.server==="hub"?mo.updateConfigValue(df.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n):mo.updateConfigValue(df.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n),{message:c6,set:o,skipped:i}}a(l6,"setRoutes");function _6(){let e=mo.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(_6,"getRoutes");function d6(e){let t=MP.deleteRoutesValidator(e);if(t)throw PP(t,t.message,UP.BAD_REQUEST,void 0,void 0,!0);let r=mo.getClusteringRoutes(),n=r.hub_routes,s=r.leaf_routes,i=[],o=[],c=!1,u=!1;for(let _=0,l=e.routes.length;_<l;_++){let d=e.routes[_],E=!1;for(let f=0,h=n.length;f<h;f++){let p=n[f];if(d.host===p.host&&d.port===p.port){n.splice(f,1),E=!0,c=!0,i.push(d);break}}if(!E){let f=!0;for(let h=0,p=s.length;h<p;h++){let S=s[h];if(d.host===S.host&&d.port===S.port){s.splice(h,1),u=!0,f=!1,i.push(d);break}}f&&o.push(d)}}return c&&(n=YT.isEmptyOrZeroLength(n)?null:n,mo.updateConfigValue(df.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n)),u&&(s=YT.isEmptyOrZeroLength(s)?null:s,mo.updateConfigValue(df.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s)),{message:u6,deleted:i,skipped:o}}a(d6,"deleteRoutes")});var HP=g((Phe,BP)=>{"use strict";var Gu=require("alasql"),po=require("recursive-iterator"),xn=$(),f6=z(),qu=P(),WT=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,h6(this.ast,this.affected_attributes,this.table_lookup,this.schema_lookup,this.table_to_schema_lookup)}getAttributesBySchemaTableName(t,r){if(!t||!r||!this.affected_attributes)return[];if(this.affected_attributes.has(t))return!this.affected_attributes.get(t).has(r)&&(r=this.table_lookup.get(r),!r)?[]:this.affected_attributes.get(t).get(r)}getAllTables(){let t=[];if(!this.affected_attributes)return t;for(let r of this.affected_attributes.keys())t.push(Array.from(this.affected_attributes.get(r).keys()));return t}getTablesBySchemaName(t){return!t||!this.affected_attributes?[]:Array.from(this.affected_attributes.get(t).keys())}getSchemas(){return this.affected_attributes?Array.from(this.affected_attributes.keys()):[]}getAst(){return this.ast}updateAttributeWildcardsForRolePerms(t){let r=this.ast.columns.filter(s=>qu.SEARCH_WILDCARDS.includes(s.columnid));if(r.length===0)return this.ast;let n=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(s=>!qu.SEARCH_WILDCARDS.includes(s.columnid)),r.forEach(s=>{let i=this.table_to_schema_lookup.has(s.tableid)?this.table_to_schema_lookup.get(s.tableid):n,o=this.table_lookup.has(s.tableid)?this.table_lookup.get(s.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][qu.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=E6(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(_=>!qu.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let l=new Gu.yy.Column({columnid:_});s.tableid&&(l.tableid=s.tableid),this.ast.columns.push(l),u.includes(_)||u.push(_)}),this.affected_attributes.get(i).set(o,u)}}),this.ast}};function E6(e){return e.filter(t=>t[qu.PERMS_CRUD_ENUM.READ])}a(E6,"filterReadRestrictedAttrs");function h6(e,t,r,n,s){m6(e,t,r,n,s)}a(h6,"interpretAST");function Fu(e,t,r,n,s){if(!(!e||!e.databaseid)&&(t.has(e.databaseid)||t.set(e.databaseid,new Map),t.get(e.databaseid).has(e.tableid)||t.get(e.databaseid).set(e.tableid,[]),e.as&&(r.has(e.as)||r.set(e.as,e.tableid),n&&!n.has(e.as)&&n.set(e.as,e.databaseid)),s)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),s.set(o,i)}}a(Fu,"addSchemaTableToMap");function m6(e,t,r,n,s){if(!e){xn.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof Gu.yy.Insert?g6(e,t,r):e instanceof Gu.yy.Select?p6(e,t,r,n,s):e instanceof Gu.yy.Update?S6(e,t,r):e instanceof Gu.yy.Delete?T6(e,t,r):xn.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(m6,"getRecordAttributesAST");function p6(e,t,r,n,s){if(!e){xn.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(f6.isEmptyOrZeroLength(i)){xn.error("No schema specified");return}e.from.forEach(c=>{Fu(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),Fu(c.table,t,r,n,s)});let o=new po(e.columns);for(let{node:c}of o)if(c&&c.columnid){let u=c.tableid,_=n.has(u)?n.get(u):i;if(u||(u=e.from[0].tableid),!t.get(_).has(u))if(r.has(u))u=r.get(u);else{xn.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 po(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{xn.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 po(c.on);for(let{node:_}of u)if(_&&_.columnid){let l=_.tableid,d=s.get(l);if(!t.get(d).has(l))if(r.has(l))l=r.get(l);else{xn.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 po(e.order);for(let{node:u}of c)if(u&&u.columnid){let _=u.tableid,l=n.has(_)?n.get(_):i;if(_||(_=e.from[0].tableid),!t.get(l).has(_))if(r.has(_))_=r.get(_);else{xn.info(`table specified as ${_} not found.`);return}t.get(l).get(_).indexOf(u.columnid)<0&&t.get(l).get(_).push(u.columnid)}}}a(p6,"getSelectAttributes");function S6(e,t,r){if(!e){xn.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new po(e.columns),s=e.table.databaseid;Fu(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&QT(e.table.tableid,s,i.columnid,t,r)}a(S6,"getUpdateAttributes");function T6(e,t,r){if(!e){xn.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new po(e.where),s=e.table.databaseid;Fu(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&QT(e.table.tableid,s,i.columnid,t,r)}a(T6,"getDeleteAttributes");function g6(e,t,r){if(!e){xn.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new po(e.columns),s=e.into.databaseid;Fu(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&QT(e.into.tableid,s,i.columnid,t,r)}a(g6,"getInsertAttributes");function QT(e,t,r,n,s){if(!n.get(t))return;let i=e;n.get(t).has(i)||(i=s.get(i)),n.get(t).get(i).push(r)}a(QT,"pushAttribute");BP.exports=WT});var jT=g((vhe,FP)=>{var ff=Xi(),xP=require("chalk"),Qr=$(),GP=require("prompt"),{promisify:R6}=require("util"),zT=P(),A6=require("fs-extra"),O6=require("path"),b6=z(),y6=Zd(),qP=ee();qP.initSync();var N6=require("moment"),I6=R6(GP.get),w6=O6.join(qP.getHdbBasePath(),zT.LICENSE_KEY_DIR_NAME,zT.LICENSE_FILE_NAME,zT.LICENSE_FILE_NAME);FP.exports={getFingerprint:D6,setLicense:C6,parseLicense:JT,register:L6,getRegistrationInfo:P6};async function C6(e){if(e&&e.key&&e.company){try{Qr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await JT(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw Qr.error(r),Qr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(C6,"setLicense");async function D6(){let e={};try{e=await ff.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw Qr.error(r),Qr.error(t),new Error(r)}return e}a(D6,"getFingerprint");async function JT(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");Qr.info("Validating license input...");let r=ff.validateLicense(e,t);if(Qr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(Qr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(Qr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{Qr.info("writing license to disk"),await A6.writeFile(w6,JSON.stringify({license_key:e,company:t}))}catch(n){throw Qr.error("Failed to write License"),n}return"Registration successful."}a(JT,"parseLicense");async function L6(){let e=await M6();return JT(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(L6,"register");async function M6(){let e=await ff.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:xP.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:xP.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{GP.start()}catch(n){Qr.error(n)}let r;try{r=await I6(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(M6,"promptForRegistration");async function P6(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await ff.getLicense()}catch(r){throw Qr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(b6.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=y6.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=N6.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(P6,"getRegistrationInfo")});var VP=g((Hhe,kP)=>{"use strict";var U6=Ve(),XT=class{static{a(this,"HubConfigObject")}constructor(t,r,n,s,i,o,c,u,_,l,d,E,f,h){this.port=t,o===null&&(o=void 0),this.server_name=r+U6.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.reconnect_error_reports=100,this.jetstream={enabled:!1},this.tls={cert_file:s,key_file:i,ca_file:o,insecure:c,verify:u},this.leafnodes={port:_,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c}},this.cluster={name:l,port:d,routes:E,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c,verify:u}},this.accounts={SYS:{users:f},HDB:{users:h}},this.system_account="SYS"}};kP.exports=XT});var KP=g((Ghe,YP)=>{"use strict";var $P=Ve(),ZT=class{static{a(this,"LeafConfigObject")}constructor(t,r,n,s,i,o,c,u,_,l,d){this.port=t,d===null&&(d=void 0),this.server_name=r+$P.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+$P.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"}};YP.exports=ZT});var QP=g((Fhe,WP)=>{"use strict";var eg=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};WP.exports=eg});var JP=g((Vhe,zP)=>{"use strict";var v6=Ve(),tg=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+v6.SERVER_SUFFIX.ADMIN,this.password=r}};zP.exports=tg});var sg=g((Yhe,ZP)=>{"use strict";var Aa=require("path"),mf=require("fs-extra"),B6=VP(),H6=KP(),x6=QP(),G6=JP(),rg=_n(),ba=z(),yr=Er(),hf=P(),ku=Ve(),{CONFIG_PARAMS:pt}=hf,ya=$(),Vu=ee(),jP=Os(),ng=ut(),Oa="clustering",q6=1e4,XP=50;ZP.exports={generateNatsConfig:k6,removeNatsConfig:V6,getHubConfigPath:F6};function F6(){let e=Vu.get(pt.ROOTPATH);return Aa.join(e,Oa,ku.NATS_CONFIG_FILES.HUB_SERVER)}a(F6,"getHubConfigPath");async function k6(e=!1,t=void 0){Vu.initSync();let r=Vu.get(pt.ROOTPATH),n=Aa.join(r,Oa,ku.PID_FILES.HUB),s=Aa.join(r,Oa,ku.PID_FILES.LEAF),i=yr.getConfigFromFile(pt.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=Aa.join(r,Oa,ku.NATS_CONFIG_FILES.HUB_SERVER),c=Aa.join(r,Oa,ku.NATS_CONFIG_FILES.LEAF_SERVER),u=yr.getConfigFromFile(pt.CLUSTERING_TLS_CERTIFICATE),_=yr.getConfigFromFile(pt.CLUSTERING_TLS_PRIVATEKEY),l=yr.getConfigFromFile(pt.CLUSTERING_TLS_CERT_AUTH),d=yr.getConfigFromFile(pt.CLUSTERING_TLS_INSECURE),E=yr.getConfigFromFile(pt.CLUSTERING_TLS_VERIFY),f=yr.getConfigFromFile(pt.CLUSTERING_NODENAME),h=yr.getConfigFromFile(pt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await ng.checkNATSServerInstalled()||pf("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let p=await rg.listUsers(),S=yr.getConfigFromFile(pt.CLUSTERING_USER),T=await rg.getClusterUser();(ba.isEmpty(T)||T.active!==!0)&&pf(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await Ef(pt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await Ef(pt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await Ef(pt.CLUSTERING_HUBSERVER_NETWORK_PORT),await Ef(pt.CLUSTERING_LEAFSERVER_NETWORK_PORT));let R=[],y=[];for(let[J,j]of p.entries())j.role.role===hf.ROLE_TYPES_ENUM.CLUSTER_USER&&j.active&&(R.push(new G6(j.username,jP.decrypt(j.hash))),y.push(new x6(j.username,jP.decrypt(j.hash))));let I=[],{hub_routes:B}=yr.getClusteringRoutes();if(!ba.isEmptyOrZeroLength(B))for(let J of B)I.push(`tls://${T.sys_name_encoded}:${T.uri_encoded_d_hash}@${J.host}:${J.port}`);let U=new B6(yr.getConfigFromFile(pt.CLUSTERING_HUBSERVER_NETWORK_PORT),f,n,u,_,l,d,E,h,yr.getConfigFromFile(pt.CLUSTERING_HUBSERVER_CLUSTER_NAME),yr.getConfigFromFile(pt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),I,R,y);l==null&&(delete U.tls.ca_file,delete U.leafnodes.tls.ca_file),t=ba.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===hf.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await mf.writeJson(o,U),ya.trace(`Hub server config written to ${o}`));let F=`tls://${T.sys_name_encoded}:${T.uri_encoded_d_hash}@0.0.0.0:${h}`,M=`tls://${T.uri_encoded_name}:${T.uri_encoded_d_hash}@0.0.0.0:${h}`,Q=new H6(yr.getConfigFromFile(pt.CLUSTERING_LEAFSERVER_NETWORK_PORT),f,s,i,[F],[M],R,y,u,_,l,d);l==null&&delete Q.tls.ca_file,(t===void 0||t===hf.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await mf.writeJson(c,Q),ya.trace(`Leaf server config written to ${c}`))}a(k6,"generateNatsConfig");async function Ef(e){let t=Vu.get(e);return ba.isEmpty(t)&&pf(`port undefined for '${e}'`),await ba.isPortTaken(t)&&pf(`'${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(Ef,"isPortAvailable");function pf(e){let t=`Error generating clustering config: ${e}`;ya.error(t),console.error(t),process.exit(1)}a(pf,"generateNatsConfigError");async function V6(e){let{port:t,config_file:r}=ng.getServerConfig(e),{username:n,decrypt_hash:s}=await rg.getClusterUser(),i=0,o=2e3;for(;i<XP;){try{let l=await ng.createConnection(t,n,s,!1);if(l.protocol.connected===!0){l.close();break}}catch(l){ya.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${l}`)}if(i++,i>=XP)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.`);let _=o*(i*2);_>3e4&&ya.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await ba.async_set_timeout(_)}let c="0".repeat(q6),u=Aa.join(Vu.get(pt.ROOTPATH),Oa,r);await mf.writeFile(u,c),await mf.remove(u),ya.notify(e,"started.")}a(V6,"removeNatsConfig")});var iU=g((Whe,sU)=>{"use strict";var zr=ee(),$6=Xi(),pe=P(),$u=Ve(),Ls=require("path"),{PACKAGE_ROOT:Tf}=P(),eU=ee(),Sf=z(),Na="/dev/null",Y6=Ls.join(Tf,"launchServiceScripts"),tU=Ls.join(Tf,"utility/scripts"),K6=Ls.join(tU,pe.HDB_RESTART_SCRIPT),rU=Ls.resolve(Tf,"dependencies",`${process.platform}-${process.arch}`,$u.NATS_BINARY_NAME);function nU(){let t=$6.licenseSearch().ram_allocation||pe.RAM_ALLOCATION_ENUM.DEFAULT,r=pe.MEM_SETTING_KEY+t,n={[pe.PROCESS_NAME_ENV_PROP]:pe.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return Sf.noBootFile()&&(n[pe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Sf.getEnvCliRootPath()),{name:pe.PROCESS_DESCRIPTORS.HDB,script:pe.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:Tf}}a(nU,"generateMainServerConfig");var W6=9930;function Q6(){zr.initSync(!0);let e=zr.get(pe.CONFIG_PARAMS.ROOTPATH),t=Ls.join(e,"clustering",$u.NATS_CONFIG_FILES.HUB_SERVER),r=Ls.join(zr.get(pe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),pe.LOG_NAMES.HDB),n=eU.get(pe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=$u.LOG_LEVEL_FLAGS[zr.get(pe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:pe.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==W6?"-"+n:""),script:rU,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[pe.PROCESS_NAME_ENV_PROP]:pe.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return zr.get(pe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Na,i.error_file=Na),i}a(Q6,"generateNatsHubServerConfig");var z6=9940;function J6(){zr.initSync(!0);let e=zr.get(pe.CONFIG_PARAMS.ROOTPATH),t=Ls.join(e,"clustering",$u.NATS_CONFIG_FILES.LEAF_SERVER),r=Ls.join(zr.get(pe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),pe.LOG_NAMES.HDB),n=eU.get(pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=$u.LOG_LEVEL_FLAGS[zr.get(pe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:pe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==z6?"-"+n:""),script:rU,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[pe.PROCESS_NAME_ENV_PROP]:pe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return zr.get(pe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Na,i.error_file=Na),i}a(J6,"generateNatsLeafServerConfig");function j6(){zr.initSync();let e=Ls.join(zr.get(pe.CONFIG_PARAMS.LOGGING_ROOT),pe.LOG_NAMES.HDB),t={name:pe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:pe.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[pe.PROCESS_NAME_ENV_PROP]:pe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Y6,autorestart:!1};return zr.get(pe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Na,t.error_file=Na),t}a(j6,"generateClusteringUpgradeV4ServiceConfig");function X6(){let e={[pe.PROCESS_NAME_ENV_PROP]:pe.PROCESS_DESCRIPTORS.RESTART_HDB};return Sf.noBootFile()&&(e[pe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Sf.getEnvCliRootPath()),{...{name:pe.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:tU},script:K6}}a(X6,"generateRestart");function Z6(){return{apps:[nU()]}}a(Z6,"generateAllServiceConfigs");sU.exports={generateAllServiceConfigs:Z6,generateMainServerConfig:nU,generateRestart:X6,generateNatsHubServerConfig:Q6,generateNatsLeafServerConfig:J6,generateClusteringUpgradeV4ServiceConfig:j6}});var TU=g((Jhe,SU)=>{"use strict";var ve=P(),e9=z(),Ps=sg(),gf=ut(),Ms=Ve(),Ri=iU(),Rf=ee(),Ai=$(),t9=fn(),{startWorker:oU,onMessageFromWorkers:r9}=We(),n9=Ra(),zhe=require("util"),s9=require("child_process"),i9=require("fs"),{execFile:o9}=s9,we;SU.exports={enterPM2Mode:a9,start:Oi,stop:ig,reload:cU,restart:uU,list:og,describe:_U,connect:Us,kill:d9,startAllServices:f9,startService:ag,getUniqueServicesList:dU,restartAllServices:E9,isServiceRegistered:fU,reloadStopStart:EU,restartHdb:lU,deleteProcess:l9,startClusteringProcesses:mU,startClusteringThreads:pU,isHdbRestartRunning:_9,isClusteringRunning:m9,stopClustering:h9,reloadClustering:p9};var Yu=!1;r9(e=>{e.type==="restart"&&Rf.initSync(!0)});function a9(){Yu=!0}a(a9,"enterPM2Mode");function Us(){return we||(we=require("pm2")),new Promise((e,t)=>{we.connect((r,n)=>{Ai.setupConsoleLogging(),r&&t(r),e(n)})})}a(Us,"connect");var Nr,c9=10,aU;function Oi(e,t=!1){if(Yu)return u9(e);let r=o9(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=Nr.indexOf(r);o>-1&&Nr.splice(o,1),!aU&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<c9&&(i9.existsSync(Ps.getHubConfigPath())?Oi(e):(await Ps.generateNatsConfig(!0),Oi(e),await new Promise(c=>setTimeout(c,3e3)),await Ps.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Ps.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let o=Rf.get(ve.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,u,_=0,l;for(;u=c.exec(i);){if(u.index&&Ms.LOG_LEVEL_HIERARCHY[o]>=Ms.LOG_LEVEL_HIERARCHY[l||"info"]){let f=l===Ms.LOG_LEVELS.ERR||l===Ms.LOG_LEVELS.WRN?Ai.OUTPUTS.STDERR:Ai.OUTPUTS.STDOUT;Ai.logCustomLevel(l||"info",f,n,i.slice(_,u.index).trim())}let[d,E]=u;_=u.index+d.length,l=Ms.LOG_LEVELS[E]}if(Ms.LOG_LEVEL_HIERARCHY[o]>=Ms.LOG_LEVEL_HIERARCHY[l||"info"]){let d=l===Ms.LOG_LEVELS.ERR||l===Ms.LOG_LEVELS.WRN?Ai.OUTPUTS.STDERR:Ai.OUTPUTS.STDOUT;Ai.logCustomLevel(l||"info",d,n,i.slice(_).trim())}}if(a(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),Nr=[],!Nr&&!t){let i=a(()=>{aU=!0,Nr&&(Nr.map(o=>o.kill()),process.exit(0))},"kill_children");process.on("exit",i),process.on("SIGINT",i),process.on("SIGQUIT",i),process.on("SIGTERM",i)}Nr.push(r)}a(Oi,"start");function u9(e){return new Promise(async(t,r)=>{try{await Us()}catch(n){r(n)}we.start(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(u9,"startWithPM2");function ig(e){if(!Yu){for(let t of Nr||[])t.name===e&&(Nr.splice(Nr.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Us()}catch(n){r(n)}we.stop(e,async(n,s)=>{n&&(we.disconnect(),r(n)),we.delete(e,(i,o)=>{i&&(we.disconnect(),r(n)),we.disconnect(),t(o)})})})}a(ig,"stop");function cU(e){return new Promise(async(t,r)=>{try{await Us()}catch(n){r(n)}we.reload(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(cU,"reload");function uU(e){if(!Yu)for(let t of Nr||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await Us()}catch(n){r(n)}we.restart(e,(n,s)=>{we.disconnect(),t(s)})})}a(uU,"restart");function l9(e){return new Promise(async(t,r)=>{try{await Us()}catch(n){r(n)}we.delete(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(l9,"deleteProcess");async function lU(){await Oi(Ri.generateRestart())}a(lU,"restartHdb");async function _9(){let e=await og();for(let t in e)if(e[t].name===ve.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(_9,"isHdbRestartRunning");function og(){return new Promise(async(e,t)=>{try{await Us()}catch(r){t(r)}we.list((r,n)=>{r&&(we.disconnect(),t(r)),we.disconnect(),e(n)})})}a(og,"list");function _U(e){return new Promise(async(t,r)=>{try{await Us()}catch(n){r(n)}we.describe(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(_U,"describe");function d9(){if(!Yu){for(let e of Nr||[])e.kill();Nr=[];return}return new Promise(async(e,t)=>{try{await Us()}catch(r){t(r)}we.killDaemon((r,n)=>{r&&(we.disconnect(),t(r)),we.disconnect(),e(n)})})}a(d9,"kill");async function f9(){try{await mU(),await pU(),await Oi(Ri.generateAllServiceConfigs())}catch(e){throw we?.disconnect(),e}}a(f9,"startAllServices");async function ag(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case ve.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=Ri.generateMainServerConfig();break;case ve.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=Ri.generateNatsIngestServiceConfig();break;case ve.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=Ri.generateNatsReplyServiceConfig();break;case ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=Ri.generateNatsHubServerConfig(),await Oi(r,t),await Ps.removeNatsConfig(e);return;case ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=Ri.generateNatsLeafServerConfig(),await Oi(r,t),await Ps.removeNatsConfig(e);return;case ve.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=Ri.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Oi(r)}catch(r){throw we?.disconnect(),r}}a(ag,"startService");async function dU(){try{let e=await og(),t={};for(let r=0,n=e.length;r<n;r++){let s=e[r];t[s.name]===void 0&&(t[s.name]={name:s.name,exec_mode:s.pm2_env.exec_mode})}return t}catch(e){throw we?.disconnect(),e}}a(dU,"getUniqueServicesList");async function E9(e=[]){try{let t=!1,r=await dU();for(let n=0,s=Object.values(r).length;n<s;n++){let o=Object.values(r)[n].name;e.includes(o)||(o===ve.PROCESS_DESCRIPTORS.HDB?t=!0:await uU(o))}t&&await EU(ve.PROCESS_DESCRIPTORS.HDB)}catch(t){throw we?.disconnect(),t}}a(E9,"restartAllServices");async function fU(e){if(Nr?.find(r=>r.name===e))return!0;let t=await n9.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(fU,"isServiceRegistered");async function EU(e){let t=Rf.get(ve.CONFIG_PARAMS.THREADS_COUNT)??Rf.get(ve.CONFIG_PARAMS.THREADS),r=await _U(e),n=e9.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await ig(e),await ag(e)):e===ve.PROCESS_DESCRIPTORS.HDB?await lU():await cU(e)}a(EU,"reloadStopStart");var hU;async function mU(e=!1){for(let t in ve.CLUSTERING_PROCESSES){let r=ve.CLUSTERING_PROCESSES[t];await ag(r,e)}}a(mU,"startClusteringProcesses");async function pU(){hU=oU(ve.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:ve.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await gf.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await gf.updateLocalStreams();let e=await t9.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===ve.PRE_4_0_0_VERSION){Ai.info("Starting clustering upgrade 4.0.0 process"),oU(ve.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(pU,"startClusteringThreads");async function h9(){for(let e in ve.CLUSTERING_PROCESSES)if(e!==ve.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===ve.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await hU.terminate();else{let t=ve.CLUSTERING_PROCESSES[e];await ig(t)}}a(h9,"stopClustering");async function m9(){for(let e in ve.CLUSTERING_PROCESSES){let t=ve.CLUSTERING_PROCESSES[e];if(await fU(t)===!1)return!1}return!0}a(m9,"isClusteringRunning");async function p9(){await Ps.generateNatsConfig(!0),await gf.reloadNATSHub(),await gf.reloadNATSLeaf(),await Ps.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Ps.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(p9,"reloadClustering")});var NU={};Fe(NU,{compactOnStart:()=>S9,copyDb:()=>yU});async function S9(){Wu.notify("Running compact on start"),console.log("Running compact on start");let e=(0,cg.get)(bi.CONFIG_PARAMS.ROOTPATH),t=new Map,r=mr();try{for(let n in r){if(n==="system")continue;let s;for(let u in r[n]){s=r[n][u].primaryStore.path;break}if(!s){console.log("Couldn't find any tables in database",n);continue}let i=(0,Af.join)(e,"backup",n+".mdb"),o=(0,Af.join)(e,bi.DATABASES_DIR_NAME,n+"-copy.mdb"),c=await gU(n);console.log("Database",n,"before compact has a total record count of",c),t.set(n,{db_path:s,copy_dest:o,backup_dest:i,record_count:c}),await yU(n,o),console.log("Backing up",n,"to",i),await(0,So.move)(s,i,{overwrite:!0})}Ku();for(let[n,{db_path:s,copy_dest:i}]of t)console.log("Moving copy compacted",n,"to",s),await(0,So.move)(i,s,{overwrite:!0}),await(0,So.remove)((0,Af.join)(e,bi.DATABASES_DIR_NAME,`${n}-copy.mdb-lock`));Ku()}catch(n){Wu.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,ug.updateConfigValue)(bi.CONFIG_PARAMS.STORAGE_COMPACTONSTART,!1);for(let[s,{db_path:i,backup_dest:o}]of t){console.error("Moving backup database",o,"back to",i);try{await(0,So.move)(o,i,{overwrite:!0})}catch(c){console.error(c)}}throw Ku(),n}for(let[n,{backup_dest:s,record_count:i}]of t){let o=!0,c=await gU(n);if(console.log("Database",n,"after compact has a total record count of",c),i!==c){o=!1;let u=`There is a discrepancy between pre and post compact record count for database ${n}.
|
|
11
11
|
Total record count before compaction: ${i}, total after: ${c}.
|
|
12
|
-
Database backup has not been removed and can be found here: ${s}`;Wu.error(u),console.error(u)}(0,cg.get)(bi.CONFIG_PARAMS.STORAGE_COMPACTONSTARTKEEPBACKUP)===!0||o===!1||(console.log("Removing backup",s),await(0,So.remove)(s))}(0,ug.updateConfigValue)(bi.CONFIG_PARAMS.STORAGE_COMPACTONSTART,!1)}async function
|
|
13
|
-
${r.stack}`;throw hg.error(n),PU(new Error)}}}a(P9,"getRolePermissions");function U9(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[Ir.SYSTEM_SCHEMA_NAME]=n[Ir.SYSTEM_SCHEMA_NAME],r.structure_user=n.structure_user;let s=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(s===!0||s.indexOf(i)>-1){r[i]=v9(t[i]);return}r[i]=HU(),n[i]?(n[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(n[i].tables[o]){let c=n[i].tables[o],u=t[i][o],_=B9(c,u);r[i].describe||GU.forEach(l=>{_[l]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=mg()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=mg()})}),r}a(U9,"translateRolePermissions");function v9(e){let t=HU(!0);return Object.keys(e).forEach(r=>{t.tables[r]=mg(!0,!0,!0,!0,!0)}),t}a(v9,"createStructureUserPermissions");function B9(e,t){let{attribute_permissions:r}=e;if(r.length>0){let s=Object.assign({},e);s.attribute_permissions=[];let i=r.reduce((_,l)=>{let{attribute_name:d}=l,E=l;return Ir.TIME_STAMP_NAMES.includes(d)&&(E=vU(d,l[Xu])),_[d]=E,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=UU(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let l=i[_];l.describe=FU(l),s.attribute_permissions.push(l),c||H9(l,u)}else if(_!==o){let l;Ir.TIME_STAMP_NAMES.includes(_)?l=vU(_):l=UU(_),s.attribute_permissions.push(l)}}),c||s.attribute_permissions.push(u),s.describe=BU(s),s}else return e.describe=BU(e),e}a(B9,"getTableAttrPerms");function BU(e){return GU.filter(t=>e[t]).length>0}a(BU,"getSchemaTableDescribePerm");function FU(e){return qU.filter(t=>e[t]).length>0}a(FU,"getAttributeDescribePerm");function H9(e,t){qU.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(H9,"checkForHashPerms")});var $U={};Fe($U,{Resources:()=>Cf,keyArrayToString:()=>wa,resetResources:()=>x9,resources:()=>yi});function x9(){return yi=new Cf}function wa(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var Cf,yi,Zu=Re(()=>{so();Cf=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;set(t,r,n,s){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,type:n,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!s)throw new Error(`Conflicting paths for ${t}`);super.set(t,i);for(let[c,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 n=2,s;for(;(n=t.indexOf("/",n))>-1;){let c=t.slice(0,n),u=this.get(c);if(!u&&c.indexOf(".")>-1){let _=c.split(".");u=this.get(_[0])}if(u){if(u.relativeURL=t.slice(n),!u.hasSubPaths)return u;s=u}n+=2}if(s)return s;let i=t.indexOf("?"),o=i>-1?t.slice(0,i):t;return s=this.get(o),!s&&o.indexOf(".")>-1&&(s=this.get(o.split(".")[0])),s?s.relativeURL=i>-1?t.slice(i):"":s||(s=this.get(""),s&&(t[0]!=="/"&&(t="/"+t),s.relativeURL=t)),s}getResource(t,r){let n=this.getMatch(t);if(n)return t=n.relativeURL,n.Resource.getResource(this.pathToId(t,n.Resource),r)}call(t,r,n){return rt(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};a(x9,"resetResources");a(wa,"keyArrayToString")});var YU={};Fe(YU,{Headers:()=>Ni,appendHeader:()=>Tg});function Tg(e,t,r,n){if(e.append)e.append(t,r,n);else if(e.set){let s=e.get(t);if(s)if(n)r=(typeof s=="string"?s:s.join(", "))+", "+r;else if(typeof s=="string")r=[s,r];else{s.push(r);return}return e.set(t,r)}else e[t]=(e[t]?e[t]+", ":"")+r}var Ni,el=Re(()=>{Ni=class extends Map{static{a(this,"Headers")}set(t,r){return typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r),super.set(t.toLowerCase(),[t,r])}get(t){return typeof t!="string"&&(t=""+t),super.get(t.toLowerCase())?.[1]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase();if(!super.has(n))return super.set(n,[t,r])}append(t,r,n){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase(),i=super.get(s);if(i){let o=i[1];if(n)r=(typeof o=="string"?o:o.join(", "))+", "+r;else if(typeof o=="string")r=[o,r];else{o.push(r);return}}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}};a(Tg,"appendHeader")});var tl={};Fe(tl,{authentication:()=>ZU,bypassAuth:()=>Y9,login:()=>W9,logout:()=>Q9,start:()=>K9});function Y9(){XU=!0}async function ZU(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,o=[];try{if(i){let f=e.isOperationsServer?k9?F9:[]:q9?G9:[];if(f.includes(i)||f.includes("*")){if(e.method==="OPTIONS"){let h=new Ni([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return Df&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),Df&&o.push("Access-Control-Allow-Credentials","true")}}let u,_;if(Df){i||(i=r.host);let f=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=s?.split(/;\s+/)||[];for(let p of h)if(p.startsWith(f)){let S=p.indexOf(";");u=p.slice(f.length,S===-1?p.length:S),_=await WU.get(u);break}e.session=_||(_={})}let l=a((f,h,p)=>{let S=new Ca.AuthAuditLog(f,h,xt.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===xt.AUTH_AUDIT_STATUS.SUCCESS?KU.notify(S):KU.error(S)},"authAuditLog");if(e.mtlsConfig&&e.authorized){let f=e.mtlsConfig.user;f!==null?((f===void 0||f==="Common Name"||f==="CN")&&(f=e.peerCertificate.subject.CN),e.user=await at.getUser(f,null,null),l(f,xt.AUTH_AUDIT_STATUS.SUCCESS,"mTLS")):(0,Ca.debug)("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let d;if(!e.user)if(n){if(d=go.get(n),!d){let f=n.indexOf(" "),h=n.slice(0,f),p=n.slice(f+1),S,T;try{switch(h){case"Basic":let R=atob(p),N=R.indexOf(":");S=R.slice(0,N),T=R.slice(N+1),d=S||T?await at.getUser(S,T,e):null;break;case"Bearer":try{d=await(0,Lf.validateOperationToken)(p)}catch(b){if(b.message==="invalid token")try{return await(0,Lf.validateRefreshToken)(p),c({status:-1})}catch{throw b}}break}}catch(R){return $9&&(go.get(p)||(go.set(p,p),l(S,xt.AUTH_AUDIT_STATUS.FAILURE,h))),c({status:401,body:Ro({error:R.message},e)})}go.set(n,d),V9&&l(d.username,xt.AUTH_AUDIT_STATUS.SUCCESS,h)}e.user=d}else _?.user?e.user=await at.getUser(_.user,null,e):(XU&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,zU.getSuperUser)());Df&&(e.session.update=function(f){if(!u){u=(0,JU.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):E?.headers?.set&&E.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")):E?.headers?.set&&(i&&E.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),E.headers.set("X-Hdb-Session","Secure"))),f.id=u,WU.put(f)},e.login=async function(f,h){e.user=await at.getUser(f,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 E=await t(e);return E&&(E.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&yi.loginPath?(E.status=302,E.headers.set("Location",yi.loginPath(e))):E.headers.set("WWW-Authenticate","Basic")),c(E))}catch(u){throw c(u)}function c(u){let _=o.length;if(_>0){let l=u.headers;l||(u.headers=l=new Ni);for(let d=0;d<_;){let E=o[d++];l.set(E,o[d++])}}return o=null,u}a(c,"applyResponseHeaders")}function K9({server:e,port:t}){e.http(ZU,{port:t||"all"}),QU||(QU=!0,setInterval(()=>{go=new Map},hn.get(xt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),jU.user.addListener(()=>{go=new Map}))}async function W9(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 Q9(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var zU,Lf,JU,hn,xt,Ca,jU,KU,G9,q9,F9,k9,WU,Df,XU,V9,$9,go,QU,Mf=Re(()=>{zU=H(_n());lr();Zu();Lf=H(Du());Ae();JU=require("uuid"),hn=H(ee()),xt=H(P()),Ca=H($()),jU=H(Jc());el();Da();KU=(0,Ca.loggerWithTag)("auth-event");hn.initSync();G9=hn.get(xt.CONFIG_PARAMS.HTTP_CORSACCESSLIST),q9=hn.get(xt.CONFIG_PARAMS.HTTP_CORS),F9=hn.get(xt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),k9=hn.get(xt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),WU=Et({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),Df=hn.get(xt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,XU=hn.get(xt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,V9=hn.get(xt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,$9=hn.get(xt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,go=new Map;at.onInvalidatedUser(()=>{go=new Map});a(Y9,"bypassAuth");a(ZU,"authentication");a(K9,"start");a(W9,"login");a(Q9,"logout")});var ov=g((pme,iv)=>{"use strict";var Ce=require("joi"),ev=require("fs-extra"),tv=require("path"),Bs=Xe(),rv=ee(),nv=P(),sv=$(),{hdb_errors:z9}=se(),{HDB_ERROR_MSGS:ir}=z9,vs=/^[a-zA-Z0-9-_]+$/;iv.exports={getDropCustomFunctionValidator:j9,setCustomFunctionValidator:X9,addComponentValidator:r7,dropCustomFunctionProjectValidator:n7,packageComponentValidator:s7,deployComponentValidator:i7,setComponentFileValidator:Z9,getComponentFileValidator:t7,dropComponentFileValidator:e7};function Pf(e,t,r){try{let n=rv.get(nv.CONFIG_PARAMS.COMPONENTSROOT),s=tv.join(n,t);return ev.existsSync(s)?e?t:r.message(ir.PROJECT_EXISTS):e?r.message(ir.NO_PROJECT):t}catch(n){return sv.error(n),r.message(ir.VALIDATION_ERR)}}a(Pf,"checkProjectExists");function rl(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(rl,"checkFilePath");function J9(e,t,r,n){try{let s=rv.get(nv.CONFIG_PARAMS.COMPONENTSROOT),i=tv.join(s,e,t,r+".js");return ev.existsSync(i)?r:n.message(ir.NO_FILE)}catch(s){return sv.error(s),n.message(ir.VALIDATION_ERR)}}a(J9,"checkFileExists");function j9(e){let t=Ce.object({project:Ce.string().pattern(vs).custom(Pf.bind(null,!0)).required().messages({"string.pattern.base":ir.BAD_PROJECT_NAME}),type:Ce.string().valid("helpers","routes").required(),file:Ce.string().pattern(vs).custom(J9.bind(null,e.project,e.type)).custom(rl).required().messages({"string.pattern.base":ir.BAD_FILE_NAME})});return Bs.validateBySchema(e,t)}a(j9,"getDropCustomFunctionValidator");function X9(e){let t=Ce.object({project:Ce.string().pattern(vs).custom(Pf.bind(null,!0)).required().messages({"string.pattern.base":ir.BAD_PROJECT_NAME}),type:Ce.string().valid("helpers","routes").required(),file:Ce.string().custom(rl).required(),function_content:Ce.string().required()});return Bs.validateBySchema(e,t)}a(X9,"setCustomFunctionValidator");function Z9(e){let t=Ce.object({project:Ce.string().pattern(vs).required().messages({"string.pattern.base":ir.BAD_PROJECT_NAME}),file:Ce.string().custom(rl).required(),payload:Ce.string().allow("").optional(),encoding:Ce.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Bs.validateBySchema(e,t)}a(Z9,"setComponentFileValidator");function e7(e){let t=Ce.object({project:Ce.string().pattern(vs).required().messages({"string.pattern.base":ir.BAD_PROJECT_NAME}),file:Ce.string().custom(rl).optional()});return Bs.validateBySchema(e,t)}a(e7,"dropComponentFileValidator");function t7(e){let t=Ce.object({project:Ce.string().required(),file:Ce.string().custom(rl).required(),encoding:Ce.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Bs.validateBySchema(e,t)}a(t7,"getComponentFileValidator");function r7(e){let t=Ce.object({project:Ce.string().pattern(vs).custom(Pf.bind(null,!1)).required().messages({"string.pattern.base":ir.BAD_PROJECT_NAME})});return Bs.validateBySchema(e,t)}a(r7,"addComponentValidator");function n7(e){let t=Ce.object({project:Ce.string().pattern(vs).custom(Pf.bind(null,!0)).required().messages({"string.pattern.base":ir.BAD_PROJECT_NAME})});return Bs.validateBySchema(e,t)}a(n7,"dropCustomFunctionProjectValidator");function s7(e){let t=Ce.object({project:Ce.string().pattern(vs).required().messages({"string.pattern.base":ir.BAD_PROJECT_NAME}),skip_node_modules:Ce.boolean()});return Bs.validateBySchema(e,t)}a(s7,"packageComponentValidator");function i7(e){let t=Ce.object({project:Ce.string().pattern(vs).required().messages({"string.pattern.base":ir.BAD_PROJECT_NAME}),payload:Ce.string().optional().messages({"string.pattern.base":ir.BAD_PACKAGE}),package:Ce.string().optional()});return Bs.validateBySchema(e,t)}a(i7,"deployComponentValidator")});var Hf=g((Tme,fv)=>{"use strict";var Uf=require("joi"),vf=require("path"),av=require("fs-extra"),{exec:o7}=require("child_process"),a7=require("util"),cv=a7.promisify(o7),nl=P(),{handleHDBError:La,hdb_errors:c7}=se(),{HTTP_STATUS_CODES:Ma}=c7,sl=ee(),u7=Xe(),Pa=$();sl.initSync();var gg=sl.get(nl.CONFIG_PARAMS.COMPONENTSROOT),uv="npm install --omit=dev --json",l7=`${uv} --dry-run`;fv.exports={installModules:E7,auditModules:h7,installAllRootModules:_7,uninstallRootModule:d7,linkHarperdb:f7};async function _7(e=!1){await Bf(),await il(e?"npm install --ignore-scripts":"npm install",sl.get(nl.CONFIG_PARAMS.ROOTPATH))}a(_7,"installAllRootModules");async function d7(e){await il(`npm uninstall ${e}`,sl.get(nl.CONFIG_PARAMS.ROOTPATH))}a(d7,"uninstallRootModule");async function f7(){await Bf(),await il(`npm link ${nl.PACKAGE_ROOT}`,sl.get(nl.CONFIG_PARAMS.ROOTPATH))}a(f7,"linkHarperdb");async function il(e,t=void 0){let r,n;try{({stdout:r,stderr:n}=await cv(e,{cwd:t}))}catch(s){throw new Error(s.stderr.replace(`
|
|
12
|
+
Database backup has not been removed and can be found here: ${s}`;Wu.error(u),console.error(u)}(0,cg.get)(bi.CONFIG_PARAMS.STORAGE_COMPACTONSTARTKEEPBACKUP)===!0||o===!1||(console.log("Removing backup",s),await(0,So.remove)(s))}(0,ug.updateConfigValue)(bi.CONFIG_PARAMS.STORAGE_COMPACTONSTART,!1)}async function gU(e){let t=await(0,bU.describeSchema)({database:e}),r=0;for(let n in t)r+=t[n].record_count;return r}async function yU(e,t){console.log("copyDb start");let r=mr()[e],n;for(let d in r){n=r[d].primaryStore.rootStore;break}let s=n.dbisDb,i=n.auditStore,o=(0,RU.open)(new AU.default(t)),c=o.openDB(Of.INTERNAL_DBIS_NAME),u,_=0,l=s.useReadTransaction();try{for(let{key:f,value:h}of s.getRange({transaction:l})){let p=h.is_hash_attribute||h.isPrimaryKey,S,T;if(p&&(S=h.compression,T=yf(),T?h.compression=T:delete h.compression,S?.dictionary?.toString()===T?.dictionary?.toString()&&(S=null,T=null)),c.put(f,h),!(p||h.indexed))continue;let R=new OU.default(!p,p);R.encoding="binary",R.compression=S;let y=n.openDB(f,R);y.decoder=null,R.compression=T;let I=o.openDB(f,R);I.encoder=null,console.log("copying",f,"from",e,"to",t),await E(y,I,p,l)}let d=n.openDB(Of.AUDIT_STORE_NAME,bf);console.log("copying audit log"),E(i,d,!1,l);async function E(f,h,p,S){let T=0,R=0;for(let{key:y,value:I,version:B}of f.getRange({start:null,versions:p,transaction:S}))u=h.put(y,I,B),T++,S.openTimer&&(S.openTimer=0),R+=(y?.length||10)+I.length,_++>5e3&&(await u,console.log("copied",T,"entries",R,"bytes"),_=0);console.log("finish copying, copied",T,"entries",R,"bytes")}a(E,"copyDbi"),await u,console.log("copied database "+e+" to "+t)}finally{l.done(),o.close()}}var RU,Af,So,cg,AU,OU,Of,bi,bU,ug,Wu,IU=Re(()=>{Ae();RU=require("lmdb"),Af=require("path"),So=require("fs-extra"),cg=x(ee()),AU=x(Bc()),OU=x(vc()),Of=x(ft()),bi=x(P());ni();bU=x(bs()),ug=x(Er()),Wu=x($());a(S9,"compactOnStart");a(gU,"getTotalDBRecordCount");a(yU,"copyDb")});var ju=g((nme,PU)=>{"use strict";var T9=require("minimist"),{isMainThread:dg,parentPort:lg,threadId:tme}=require("worker_threads"),nt=P(),{PROCESS_DESCRIPTORS_VALIDATE:Qu}=nt,as=$(),fg=z(),If=sg(),Nf=ut(),rme=Ve(),DU=Er(),cs=TU(),wU=Ra(),{compactOnStart:g9}=(IU(),ie(NU)),R9=Gh(),{restartWorkers:wf,onMessageByType:A9}=We(),{handleHDBError:O9,hdb_errors:b9}=se(),{HTTP_STATUS_CODES:y9}=b9,Ju=ee();Ju.initSync();var zu=`Restarting HarperDB. This may take up to ${nt.RESTART_TIMEOUT_MS/1e3} seconds.`,N9="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",CU="Clustering is not enabled so cannot be restarted",I9="Invalid service",Ia,En;PU.exports={restart:LU,restartService:Eg};dg&&A9(nt.ITC_EVENT_TYPES.RESTART,async(e,t)=>{e.workerType?await Eg({service:e.workerType}):LU({operation:"restart"}),t.postMessage({type:"restart-complete"})});async function LU(e){En=Object.keys(e).length===0,Ia=await cs.isServiceRegistered(nt.HDB_PROC_DESCRIPTOR);let t=T9(process.argv);if(t.service){await Eg(t);return}if(En&&!Ia){console.error(N9);return}if(En&&console.log(zu),Ia){cs.enterPM2Mode(),as.notify(zu);let r=R9(Object.keys(nt.CONFIG_PARAM_MAP),!0);return fg.isEmptyOrZeroLength(Object.keys(r))||DU.updateConfigValue(void 0,void 0,r,!0,!0),w9(),zu}return dg?(as.notify(zu),Ju.get(nt.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await g9(),setTimeout(()=>{wf()},50)):lg.postMessage({type:nt.ITC_EVENT_TYPES.RESTART}),zu}a(LU,"restart");async function Eg(e){let{service:t}=e;if(nt.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw O9(new Error,I9,y9.BAD_REQUEST,void 0,void 0,!0);if(Ia=await cs.isServiceRegistered(nt.HDB_PROC_DESCRIPTOR),!dg)return lg.postMessage({type:nt.ITC_EVENT_TYPES.RESTART,workerType:t}),new Promise(n=>{lg.on("message",s=>{s.type==="restart-complete"&&n()})});let r;switch(t){case Qu.clustering:if(!Ju.get(nt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=CU;break}En&&console.log("Restarting clustering"),as.notify("Restarting clustering"),await MU();break;case Qu.clustering_config:case Qu["clustering config"]:if(!Ju.get(nt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=CU;break}En&&console.log("Restarting clustering_config"),as.notify("Restarting clustering_config"),await cs.reloadClustering();break;case"custom_functions":case"custom functions":case Qu.harperdb:case Qu.http_workers:if(En&&!Ia){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}En&&console.log("Restarting http_workers"),as.notify("Restarting http_workers"),En?await cs.restart(nt.HDB_PROC_DESCRIPTOR):await wf("http");break;default:r=`Unrecognized service: ${t}`;break}return r?(as.error(r),En&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(Eg,"restartService");async function w9(){await MU(),await cs.restart(nt.HDB_PROC_DESCRIPTOR),await fg.async_set_timeout(2e3),Ju.get(nt.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await _g(),En&&(await Nf.closeConnection(),process.exit(0))}a(w9,"restartPM2Mode");async function MU(){if(!DU.getConfigFromFile(nt.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await wU.getHDBProcessInfo()).clustering.length===0)as.trace("Clustering not running, restart will start clustering services"),await If.generateNatsConfig(!0),await cs.startClusteringProcesses(),await cs.startClusteringThreads(),await _g(),En&&await Nf.closeConnection();else{await If.generateNatsConfig(!0),Ia?(as.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await cs.restart(nt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await cs.restart(nt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await wU.getHDBProcessInfo()).clustering.forEach(s=>{as.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await fg.async_set_timeout(3e3),await _g(),await Nf.updateLocalStreams(),En&&await Nf.closeConnection(),as.trace("Restart clustering restarting ingest and reply service threads");let t=wf(nt.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=wf(nt.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(MU,"restartClustering");async function _g(){await If.removeNatsConfig(nt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await If.removeNatsConfig(nt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(_g,"removeNatsConfig")});var $U=g((ome,VU)=>{"use strict";var ime=require("lodash"),Ir=P(),{handleHDBError:UU,hdb_errors:C9}=se(),{HDB_ERROR_MSGS:D9,HTTP_STATUS_CODES:L9}=C9,hg=$();VU.exports={getRolePermissions:P9};var To=Object.create(null),M9=a(e=>({key:e,perms:{}}),"perms_template_obj"),xU=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),GU=a((e=!1,t=!1,r=!1,n=!1)=>({[Ir.PERMS_CRUD_ENUM.READ]:e,[Ir.PERMS_CRUD_ENUM.INSERT]:t,[Ir.PERMS_CRUD_ENUM.UPDATE]:r,[Ir.PERMS_CRUD_ENUM.DELETE]:n}),"permissions_template"),mg=a((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...GU(t,r,n,s)}),"table_perms_template"),vU=a((e,t=GU())=>({attribute_name:e,describe:kU(t),[Xu]:t[Xu],[pg]:t[pg],[Sg]:t[Sg]}),"attr_perms_template"),BU=a((e,t=!1)=>({attribute_name:e,describe:t,[Xu]:t}),"timestamp_attr_perms_template"),{READ:Xu,INSERT:pg,UPDATE:Sg}=Ir.PERMS_CRUD_ENUM,qU=Object.values(Ir.PERMS_CRUD_ENUM),FU=[Xu,pg,Sg];function P9(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r=Object.assign({},global.hdb_schema);delete r[Ir.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(To[t]&&To[t].key===n)return To[t].perms;let s=U9(e,r);return To[t]?To[t].key=n:To[t]=M9(n),To[t].perms=s,s}catch(r){if(!e[Ir.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Ir.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Ir.PERMS_UPDATE_RELEASE_TIMESTAMP){let n=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw hg.error(n),hg.debug(r),UU(new Error,D9.OUTDATED_PERMS_TRANSLATION_ERROR,L9.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
|
|
13
|
+
${r.stack}`;throw hg.error(n),UU(new Error)}}}a(P9,"getRolePermissions");function U9(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[Ir.SYSTEM_SCHEMA_NAME]=n[Ir.SYSTEM_SCHEMA_NAME],r.structure_user=n.structure_user;let s=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(s===!0||s.indexOf(i)>-1){r[i]=v9(t[i]);return}r[i]=xU(),n[i]?(n[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(n[i].tables[o]){let c=n[i].tables[o],u=t[i][o],_=B9(c,u);r[i].describe||qU.forEach(l=>{_[l]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=mg()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=mg()})}),r}a(U9,"translateRolePermissions");function v9(e){let t=xU(!0);return Object.keys(e).forEach(r=>{t.tables[r]=mg(!0,!0,!0,!0,!0)}),t}a(v9,"createStructureUserPermissions");function B9(e,t){let{attribute_permissions:r}=e;if(r.length>0){let s=Object.assign({},e);s.attribute_permissions=[];let i=r.reduce((_,l)=>{let{attribute_name:d}=l,E=l;return Ir.TIME_STAMP_NAMES.includes(d)&&(E=BU(d,l[Xu])),_[d]=E,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=vU(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let l=i[_];l.describe=kU(l),s.attribute_permissions.push(l),c||H9(l,u)}else if(_!==o){let l;Ir.TIME_STAMP_NAMES.includes(_)?l=BU(_):l=vU(_),s.attribute_permissions.push(l)}}),c||s.attribute_permissions.push(u),s.describe=HU(s),s}else return e.describe=HU(e),e}a(B9,"getTableAttrPerms");function HU(e){return qU.filter(t=>e[t]).length>0}a(HU,"getSchemaTableDescribePerm");function kU(e){return FU.filter(t=>e[t]).length>0}a(kU,"getAttributeDescribePerm");function H9(e,t){FU.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(H9,"checkForHashPerms")});var YU={};Fe(YU,{Resources:()=>Cf,keyArrayToString:()=>wa,resetResources:()=>x9,resources:()=>yi});function x9(){return yi=new Cf}function wa(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var Cf,yi,Zu=Re(()=>{so();Cf=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;set(t,r,n,s){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,type:n,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!s)throw new Error(`Conflicting paths for ${t}`);super.set(t,i);for(let[c,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 n=2,s;for(;(n=t.indexOf("/",n))>-1;){let c=t.slice(0,n),u=this.get(c);if(!u&&c.indexOf(".")>-1){let _=c.split(".");u=this.get(_[0])}if(u){if(u.relativeURL=t.slice(n),!u.hasSubPaths)return u;s=u}n+=2}if(s)return s;let i=t.indexOf("?"),o=i>-1?t.slice(0,i):t;return s=this.get(o),!s&&o.indexOf(".")>-1&&(s=this.get(o.split(".")[0])),s?s.relativeURL=i>-1?t.slice(i):"":s||(s=this.get(""),s&&(t[0]!=="/"&&(t="/"+t),s.relativeURL=t)),s}getResource(t,r){let n=this.getMatch(t);if(n)return t=n.relativeURL,n.Resource.getResource(this.pathToId(t,n.Resource),r)}call(t,r,n){return rt(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};a(x9,"resetResources");a(wa,"keyArrayToString")});var KU={};Fe(KU,{Headers:()=>Ni,appendHeader:()=>Tg});function Tg(e,t,r,n){if(e.append)e.append(t,r,n);else if(e.set){let s=e.get(t);if(s)if(n)r=(typeof s=="string"?s:s.join(", "))+", "+r;else if(typeof s=="string")r=[s,r];else{s.push(r);return}return e.set(t,r)}else e[t]=(e[t]?e[t]+", ":"")+r}var Ni,el=Re(()=>{Ni=class extends Map{static{a(this,"Headers")}set(t,r){return typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r),super.set(t.toLowerCase(),[t,r])}get(t){return typeof t!="string"&&(t=""+t),super.get(t.toLowerCase())?.[1]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase();if(!super.has(n))return super.set(n,[t,r])}append(t,r,n){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase(),i=super.get(s);if(i){let o=i[1];if(n)r=(typeof o=="string"?o:o.join(", "))+", "+r;else if(typeof o=="string")r=[o,r];else{o.push(r);return}}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}};a(Tg,"appendHeader")});var tl={};Fe(tl,{authentication:()=>ev,bypassAuth:()=>Y9,login:()=>W9,logout:()=>Q9,start:()=>K9});function Y9(){ZU=!0}async function ev(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,o=[];try{if(i){let f=e.isOperationsServer?k9?F9:[]:q9?G9:[];if(f.includes(i)||f.includes("*")){if(e.method==="OPTIONS"){let h=new Ni([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return Df&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),Df&&o.push("Access-Control-Allow-Credentials","true")}}let u,_;if(Df){i||(i=r.host);let f=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=s?.split(/;\s+/)||[];for(let p of h)if(p.startsWith(f)){let S=p.indexOf(";");u=p.slice(f.length,S===-1?p.length:S),_=await QU.get(u);break}e.session=_||(_={})}let l=a((f,h,p)=>{let S=new Ca.AuthAuditLog(f,h,xt.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===xt.AUTH_AUDIT_STATUS.SUCCESS?WU.notify(S):WU.error(S)},"authAuditLog");if(e.mtlsConfig&&e.authorized){let f=e.mtlsConfig.user;f!==null?((f===void 0||f==="Common Name"||f==="CN")&&(f=e.peerCertificate.subject.CN),e.user=await at.getUser(f,null,null),l(f,xt.AUTH_AUDIT_STATUS.SUCCESS,"mTLS")):(0,Ca.debug)("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let d;if(!e.user)if(n){if(d=go.get(n),!d){let f=n.indexOf(" "),h=n.slice(0,f),p=n.slice(f+1),S,T;try{switch(h){case"Basic":let R=atob(p),y=R.indexOf(":");S=R.slice(0,y),T=R.slice(y+1),d=S||T?await at.getUser(S,T,e):null;break;case"Bearer":try{d=await(0,Lf.validateOperationToken)(p)}catch(I){if(I.message==="invalid token")try{return await(0,Lf.validateRefreshToken)(p),c({status:-1})}catch{throw I}}break}}catch(R){return $9&&(go.get(p)||(go.set(p,p),l(S,xt.AUTH_AUDIT_STATUS.FAILURE,h))),c({status:401,body:Ro({error:R.message},e)})}go.set(n,d),V9&&l(d.username,xt.AUTH_AUDIT_STATUS.SUCCESS,h)}e.user=d}else _?.user?e.user=await at.getUser(_.user,null,e):(ZU&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,JU.getSuperUser)());Df&&(e.session.update=function(f){if(!u){u=(0,jU.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):E?.headers?.set&&E.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")):E?.headers?.set&&(i&&E.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),E.headers.set("X-Hdb-Session","Secure"))),f.id=u,QU.put(f)},e.login=async function(f,h){e.user=await at.getUser(f,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 E=await t(e);return E&&(E.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&yi.loginPath?(E.status=302,E.headers.set("Location",yi.loginPath(e))):E.headers.set("WWW-Authenticate","Basic")),c(E))}catch(u){throw c(u)}function c(u){let _=o.length;if(_>0){let l=u.headers;l||(u.headers=l=new Ni);for(let d=0;d<_;){let E=o[d++];l.set(E,o[d++])}}return o=null,u}a(c,"applyResponseHeaders")}function K9({server:e,port:t}){e.http(ev,{port:t||"all"}),zU||(zU=!0,setInterval(()=>{go=new Map},hn.get(xt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),XU.user.addListener(()=>{go=new Map}))}async function W9(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 Q9(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var JU,Lf,jU,hn,xt,Ca,XU,WU,G9,q9,F9,k9,QU,Df,ZU,V9,$9,go,zU,Mf=Re(()=>{JU=x(_n());lr();Zu();Lf=x(Du());Ae();jU=require("uuid"),hn=x(ee()),xt=x(P()),Ca=x($()),XU=x(Jc());el();Da();WU=(0,Ca.loggerWithTag)("auth-event");hn.initSync();G9=hn.get(xt.CONFIG_PARAMS.HTTP_CORSACCESSLIST),q9=hn.get(xt.CONFIG_PARAMS.HTTP_CORS),F9=hn.get(xt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),k9=hn.get(xt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),QU=Et({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),Df=hn.get(xt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,ZU=hn.get(xt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,V9=hn.get(xt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,$9=hn.get(xt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,go=new Map;at.onInvalidatedUser(()=>{go=new Map});a(Y9,"bypassAuth");a(ev,"authentication");a(K9,"start");a(W9,"login");a(Q9,"logout")});var av=g((pme,ov)=>{"use strict";var Ce=require("joi"),tv=require("fs-extra"),rv=require("path"),Bs=Xe(),nv=ee(),sv=P(),iv=$(),{hdb_errors:z9}=se(),{HDB_ERROR_MSGS:ir}=z9,vs=/^[a-zA-Z0-9-_]+$/;ov.exports={getDropCustomFunctionValidator:j9,setCustomFunctionValidator:X9,addComponentValidator:r7,dropCustomFunctionProjectValidator:n7,packageComponentValidator:s7,deployComponentValidator:i7,setComponentFileValidator:Z9,getComponentFileValidator:t7,dropComponentFileValidator:e7};function Pf(e,t,r){try{let n=nv.get(sv.CONFIG_PARAMS.COMPONENTSROOT),s=rv.join(n,t);return tv.existsSync(s)?e?t:r.message(ir.PROJECT_EXISTS):e?r.message(ir.NO_PROJECT):t}catch(n){return iv.error(n),r.message(ir.VALIDATION_ERR)}}a(Pf,"checkProjectExists");function rl(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(rl,"checkFilePath");function J9(e,t,r,n){try{let s=nv.get(sv.CONFIG_PARAMS.COMPONENTSROOT),i=rv.join(s,e,t,r+".js");return tv.existsSync(i)?r:n.message(ir.NO_FILE)}catch(s){return iv.error(s),n.message(ir.VALIDATION_ERR)}}a(J9,"checkFileExists");function j9(e){let t=Ce.object({project:Ce.string().pattern(vs).custom(Pf.bind(null,!0)).required().messages({"string.pattern.base":ir.BAD_PROJECT_NAME}),type:Ce.string().valid("helpers","routes").required(),file:Ce.string().pattern(vs).custom(J9.bind(null,e.project,e.type)).custom(rl).required().messages({"string.pattern.base":ir.BAD_FILE_NAME})});return Bs.validateBySchema(e,t)}a(j9,"getDropCustomFunctionValidator");function X9(e){let t=Ce.object({project:Ce.string().pattern(vs).custom(Pf.bind(null,!0)).required().messages({"string.pattern.base":ir.BAD_PROJECT_NAME}),type:Ce.string().valid("helpers","routes").required(),file:Ce.string().custom(rl).required(),function_content:Ce.string().required()});return Bs.validateBySchema(e,t)}a(X9,"setCustomFunctionValidator");function Z9(e){let t=Ce.object({project:Ce.string().pattern(vs).required().messages({"string.pattern.base":ir.BAD_PROJECT_NAME}),file:Ce.string().custom(rl).required(),payload:Ce.string().allow("").optional(),encoding:Ce.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Bs.validateBySchema(e,t)}a(Z9,"setComponentFileValidator");function e7(e){let t=Ce.object({project:Ce.string().pattern(vs).required().messages({"string.pattern.base":ir.BAD_PROJECT_NAME}),file:Ce.string().custom(rl).optional()});return Bs.validateBySchema(e,t)}a(e7,"dropComponentFileValidator");function t7(e){let t=Ce.object({project:Ce.string().required(),file:Ce.string().custom(rl).required(),encoding:Ce.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Bs.validateBySchema(e,t)}a(t7,"getComponentFileValidator");function r7(e){let t=Ce.object({project:Ce.string().pattern(vs).custom(Pf.bind(null,!1)).required().messages({"string.pattern.base":ir.BAD_PROJECT_NAME})});return Bs.validateBySchema(e,t)}a(r7,"addComponentValidator");function n7(e){let t=Ce.object({project:Ce.string().pattern(vs).custom(Pf.bind(null,!0)).required().messages({"string.pattern.base":ir.BAD_PROJECT_NAME})});return Bs.validateBySchema(e,t)}a(n7,"dropCustomFunctionProjectValidator");function s7(e){let t=Ce.object({project:Ce.string().pattern(vs).required().messages({"string.pattern.base":ir.BAD_PROJECT_NAME}),skip_node_modules:Ce.boolean()});return Bs.validateBySchema(e,t)}a(s7,"packageComponentValidator");function i7(e){let t=Ce.object({project:Ce.string().pattern(vs).required().messages({"string.pattern.base":ir.BAD_PROJECT_NAME}),payload:Ce.string().optional().messages({"string.pattern.base":ir.BAD_PACKAGE}),package:Ce.string().optional()});return Bs.validateBySchema(e,t)}a(i7,"deployComponentValidator")});var Hf=g((Tme,Ev)=>{"use strict";var Uf=require("joi"),vf=require("path"),cv=require("fs-extra"),{exec:o7}=require("child_process"),a7=require("util"),uv=a7.promisify(o7),nl=P(),{handleHDBError:La,hdb_errors:c7}=se(),{HTTP_STATUS_CODES:Ma}=c7,sl=ee(),u7=Xe(),Pa=$();sl.initSync();var gg=sl.get(nl.CONFIG_PARAMS.COMPONENTSROOT),lv="npm install --omit=dev --json",l7=`${lv} --dry-run`;Ev.exports={installModules:E7,auditModules:h7,installAllRootModules:_7,uninstallRootModule:d7,linkHarperdb:f7};async function _7(e=!1){await Bf(),await il(e?"npm install --ignore-scripts":"npm install",sl.get(nl.CONFIG_PARAMS.ROOTPATH))}a(_7,"installAllRootModules");async function d7(e){await il(`npm uninstall ${e}`,sl.get(nl.CONFIG_PARAMS.ROOTPATH))}a(d7,"uninstallRootModule");async function f7(){await Bf(),await il(`npm link ${nl.PACKAGE_ROOT}`,sl.get(nl.CONFIG_PARAMS.ROOTPATH))}a(f7,"linkHarperdb");async function il(e,t=void 0){let r,n;try{({stdout:r,stderr:n}=await uv(e,{cwd:t}))}catch(s){throw new Error(s.stderr.replace(`
|
|
14
14
|
`,""))}return n&&!n.includes("Debugger listening")&&Pa.error("Error running NPM command:",e,n),Pa.trace(r,n),r?.replace(`
|
|
15
|
-
`,"")}a(il,"runCommand");async function E7(e){Pa.info(`starting installModules for request: ${e}`);let t=
|
|
15
|
+
`,"")}a(il,"runCommand");async function E7(e){Pa.info(`starting installModules for request: ${e}`);let t=fv(e);if(t)throw La(t,t.message,Ma.BAD_REQUEST);let{projects:r,dry_run:n}=e,s=n===!0?l7:lv;await Bf(),await dv(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 _=vf.join(gg,u),l,d=null;try{let{stdout:E,stderr:f}=await uv(s,{cwd:_});l=E?E.replace(`
|
|
16
16
|
`,""):null,d=f?f.replace(`
|
|
17
|
-
`,""):null}catch(E){E.stderr?i[u].npm_error=
|
|
18
|
-
`);return r>-1&&n>-1?JSON.parse(e.substring(r+t.length-1,n+1)):e}a(lv,"parseNPMStdErr");async function h7(e){Pa.info(`starting auditModules for request: ${e}`);let t=dv(e);if(t)throw La(t,t.message,Ma.BAD_REQUEST);let{projects:r}=e;await Bf(),await _v(r);let n={};for(let s=0,i=r.length;s<i;s++){let o=r[s],c=vf.join(gg,o);n[o]={npm_output:null,npm_error:null};try{let u=await il("npm audit --json",c);n[o].npm_output=JSON.parse(u)}catch(u){n[o].npm_error=lv(u.stderr)}}return Pa.info(`finished auditModules with response ${n}`),n}a(h7,"auditModules");async function Bf(){try{return await il("npm -v"),!0}catch{throw La(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",Ma.BAD_REQUEST,void 0,void 0,!0)}}a(Bf,"checkNPMInstalled");async function _v(e){if(!Array.isArray(e)||e.length===0)throw La(new Error,"projects argument must be an array with at least 1 element",Ma.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n],o=vf.join(gg,i.toString());if(!await av.pathExists(o)){t.push(i);continue}let u=vf.join(o,"package.json");await av.pathExists(u)||r.push(i)}if(t.length>0)throw La(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Ma.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw La(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Ma.BAD_REQUEST,void 0,void 0,!0)}a(_v,"checkProjectPaths");function dv(e){let t=Uf.object({projects:Uf.array().min(1).items(Uf.string()).required(),dry_run:Uf.boolean().default(!1)});return u7.validateBySchema(e,t)}a(dv,"modulesValidator")});var Ag=g((Rme,Sv)=>{"use strict";var Ua=require("fs-extra"),Rg=require("path"),xf=$(),Ev=z(),Gf=P(),pv=ee(),m7=Er();Sv.exports=p7;async function p7(){let e=S7(),t=pv.get(Gf.CONFIG_PARAMS.ROOTPATH),r=Rg.join(t,"package.json"),n={dependencies:{harperdb:"file:"+Gf.PACKAGE_ROOT}},s=Rg.join(t,"node_modules");await Ua.ensureDir(s);let i,o=!0,c=!1;try{i=await Ua.readJson(r)}catch(u){if(Ev.isEmptyOrZeroLength(e))return;if(u.code!==Gf.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!Ev.isEmptyOrZeroLength(e)){for(let{name:u,package:_}of e){let l=await hv(_);n.dependencies[u]=l+_}if(!o){xf.notify("Installing components"),await mv(r,n,null);return}for(let{name:u,package:_}of e){let l=i.dependencies[u],d=await hv(_);if(l===void 0||l!==d+_){c=!0;break}}}for(let u in i.dependencies)n.dependencies[u]===void 0&&(xf.notify("Removing component",u),c=!0);c&&(xf.notify("Updating components."),await mv(r,n,i))}a(p7,"installComponents");function S7(){let e=m7.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(S7,"getComponentsConfig");async function hv(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":Rg.extname(e)||await Ua.pathExists(e)?"file:":"github:"}a(hv,"getPkgPrefix");async function mv(e,t,r){xf.trace("npm installing components package.json",t),await Ua.writeFile(e,JSON.stringify(t,null," "));try{await Hf().installAllRootModules(pv.get(Gf.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(n){throw r?await Ua.writeFile(e,JSON.stringify(r,null," ")):await Ua.unlink(e),n}}a(mv,"installPackages")});var yg=g((bme,Av)=>{"use strict";var $e=require("fs-extra"),Og=require("fast-glob"),ge=require("path"),gv=require("tar-fs"),Ome=require("uuid").v4,bg=require("normalize-path"),us=ov(),Ct=$(),ze=P(),Ot=ee(),ol=Er(),T7=z(),{PACKAGE_ROOT:g7}=P(),{handleHDBError:Gt,hdb_errors:R7}=se(),{basename:A7}=require("path"),O7=Ag(),Rv=ee(),b7=P(),{Readable:y7}=require("stream"),{isMainThread:N7}=require("worker_threads"),{HDB_ERROR_MSGS:Ao,HTTP_STATUS_CODES:qt}=R7,I7=ge.join(g7,"application-template"),Tv=ge.join(Ot.get(ze.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function w7(){Ct.trace("getting custom api status");let e={};try{e={port:Ot.get(ze.CONFIG_PARAMS.HTTP_PORT),directory:Ot.get(ze.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Gt(new Error,Ao.FUNCTION_STATUS,qt.INTERNAL_SERVER_ERROR,Ct.ERR,t)}return e}a(w7,"customFunctionsStatus");function C7(){Ct.trace("getting custom api endpoints");let e={},t=Ot.get(ze.CONFIG_PARAMS.COMPONENTSROOT);try{Og.sync(bg(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:Og.sync(bg(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:Og.sync(bg(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Gt(new Error,Ao.GET_FUNCTIONS,qt.INTERNAL_SERVER_ERROR,Ct.ERR,r)}return e}a(C7,"getCustomFunctions");function D7(e){e.project&&(e.project=ge.parse(e.project).name),e.file&&(e.file=ge.parse(e.file).name);let t=us.getDropCustomFunctionValidator(e);if(t)throw Gt(t,t.message,qt.BAD_REQUEST);Ct.trace("getting custom api endpoint file content");let r=Ot.get(ze.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,o=ge.join(r,n,s,i+".js");try{return $e.readFileSync(o,{encoding:"utf8"})}catch(c){throw Gt(new Error,Ao.GET_FUNCTION,qt.INTERNAL_SERVER_ERROR,Ct.ERR,c)}}a(D7,"getCustomFunction");function L7(e){e.project&&(e.project=ge.parse(e.project).name),e.file&&(e.file=ge.parse(e.file).name);let t=us.setCustomFunctionValidator(e);if(t)throw Gt(t,t.message,qt.BAD_REQUEST);Ct.trace("setting custom function file content");let r=Ot.get(ze.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:o}=e;try{return $e.outputFileSync(ge.join(r,n,s,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw Gt(new Error,Ao.SET_FUNCTION,qt.INTERNAL_SERVER_ERROR,Ct.ERR,c)}}a(L7,"setCustomFunction");function M7(e){e.project&&(e.project=ge.parse(e.project).name),e.file&&(e.file=ge.parse(e.file).name);let t=us.getDropCustomFunctionValidator(e);if(t)throw Gt(t,t.message,qt.BAD_REQUEST);Ct.trace("dropping custom function file");let r=Ot.get(ze.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{return $e.unlinkSync(ge.join(r,n,s,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw Gt(new Error,Ao.DROP_FUNCTION,qt.INTERNAL_SERVER_ERROR,Ct.ERR,o)}}a(M7,"dropCustomFunction");function P7(e){e.project&&(e.project=ge.parse(e.project).name);let t=us.addComponentValidator(e);if(t)throw Gt(t,t.message,qt.BAD_REQUEST);Ct.trace("adding component");let r=Ot.get(ze.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;try{let s=ge.join(r,n);return $e.mkdirSync(s,{recursive:!0}),$e.copySync(I7,s),`Successfully added project: ${n}`}catch(s){throw Gt(new Error,Ao.ADD_FUNCTION,qt.INTERNAL_SERVER_ERROR,Ct.ERR,s)}}a(P7,"addComponent");function U7(e){e.project&&(e.project=ge.parse(e.project).name);let t=us.dropCustomFunctionProjectValidator(e);if(t)throw Gt(t,t.message,qt.BAD_REQUEST);Ct.trace("dropping custom function project");let r=Ot.get(ze.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=Ot.get(ze.CONFIG_PARAMS.APPS);if(!T7.isEmptyOrZeroLength(s)){let i=!1;for(let[o,c]of s.entries())if(c.name===n){s.splice(o,1),i=!0;break}if(i)return ol.updateConfigValue(ze.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=ge.join(r,n);return $e.rmSync(i,{recursive:!0}),`Successfully deleted project: ${n}`}catch(i){throw Gt(new Error,Ao.DROP_FUNCTION_PROJECT,qt.INTERNAL_SERVER_ERROR,Ct.ERR,i)}}a(U7,"dropCustomFunctionProject");async function v7(e){e.project&&(e.project=ge.parse(e.project).name);let t=us.packageComponentValidator(e);if(t)throw Gt(t,t.message,qt.BAD_REQUEST);let r=Ot.get(ze.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;Ct.trace("packaging component",n);let s;try{s=await $e.realpath(ge.join(r,n))}catch(u){if(u.code!==ze.NODE_ERROR_CODES.ENOENT)throw u;try{s=await $e.realpath(ge.join(Ot.get(ze.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(_){if(_.code===ze.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}await $e.ensureDir(Tv);let i=ge.join(Tv,`${n}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(ge.join(s,"node_modules"))}),gv.pack(s,o).pipe($e.createWriteStream(i,{overwrite:!0})),await new Promise(u=>setTimeout(u,2e3));let c=$e.readFileSync(i,{encoding:"base64"});return await $e.remove(i),{project:n,payload:c}}a(v7,"packageComponent");async function B7(e){e.project&&(e.project=ge.parse(e.project).name);let t=us.deployComponentValidator(e);if(t)throw Gt(t,t.message,qt.BAD_REQUEST);let r=Ot.get(ze.CONFIG_PARAMS.COMPONENTSROOT),{project:n,payload:s,package:i}=e;if(Ct.trace("deploying component",n),!s&&!i)throw new Error("'payload' or 'package' must be provided");let o;if(s){o=ge.join(r,n),i="file:"+o,await $e.emptyDir(o);let E=y7.from(Buffer.from(s,"base64"));await new Promise((h,p)=>{E.pipe(gv.extract(o,{finish:h})).on("error",p)});let f=await $e.readdir(o);f.length===1&&f[0]==="package"&&(await $e.copy(ge.join(o,"package"),o),await $e.remove(ge.join(o,"package")))}if(await ol.addConfig(n,{package:i}),!s){await O7();let E=Rv.get(b7.CONFIG_PARAMS.ROOTPATH);o=ge.join(E,"node_modules",n)}if(N7)return;let c=new Map;c.isWorker=!0;let u=(Ff(),ie(qf)),_;u.setErrorReporter(E=>_=E);let l=A7(o),d=u.component_errors.get(l);try{await u.loadComponent(o,c)}finally{u.component_errors.set(l,d)}if(_)throw _;return Ct.info("Installed component"),`Successfully deployed: ${n}`}a(B7,"deployComponent");async function H7(){let e=ol.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 $e.readdir(o,{withFileTypes:!0});for(let _ of u){let l=_.name;if(l.startsWith(".")||l==="node_modules")continue;let d=ge.join(o,l);if(_.isDirectory()||_.isSymbolicLink()){let E={name:l,entries:[]};c.entries.push(E),await r(d,E)}else{let E=await $e.stat(d),f={name:ge.basename(l),mtime:E.mtime,size:E.size};c.entries.push(f)}}return c}catch(u){return Ct.warn("Error loading package",u),{error:u.toString(),entries:[]}}},"walk_dir"),n=await r(Ot.get(ze.CONFIG_PARAMS.COMPONENTSROOT),{name:Ot.get(ze.CONFIG_PARAMS.COMPONENTSROOT).split(ge.sep).slice(-1).pop(),entries:t});for(let o of n.entries)if(o.package){let c=await r(ge.join(Ot.get(ze.CONFIG_PARAMS.ROOTPATH),"node_modules",o.name),{name:o.name,entries:[]});Object.assign(o,c)}let i=(Ff(),ie(qf)).component_errors;for(let o of t){let c=i.get(o.name);c?o.error=i.get(o.name):c===void 0&&(o.error="The component has not been loaded yet (may need a restart)")}return n}a(H7,"getComponents");async function x7(e){let t=us.getComponentFileValidator(e);if(t)throw Gt(t,t.message,qt.BAD_REQUEST);let n=ol.getConfigObj()[e.project]||e.project==="harperdb"?ge.join(Rv.get(ze.CONFIG_PARAMS.ROOTPATH),"node_modules"):Ot.get(ze.CONFIG_PARAMS.COMPONENTSROOT),s=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await $e.stat(ge.join(n,e.project,e.file));return{message:await $e.readFile(ge.join(n,e.project,e.file),s),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===ze.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${ge.join(e.project,e.file)}'`):i}}a(x7,"getComponentFile");async function G7(e){let t=us.setComponentFileValidator(e);if(t)throw Gt(t,t.message,qt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=ge.join(Ot.get(ze.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);return e.payload!==void 0?(await $e.ensureFile(n),await $e.outputFile(n,e.payload,r)):await $e.ensureDir(n),"Successfully set component: "+e.file}a(G7,"setComponentFile");async function q7(e){let t=us.dropComponentFileValidator(e);if(t)throw Gt(t,t.message,qt.BAD_REQUEST);let r=e.file?ge.join(e.project,e.file):e.project,n=ge.join(Ot.get(ze.CONFIG_PARAMS.COMPONENTSROOT),r);return await $e.pathExists(n)&&await $e.remove(n),ol.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(q7,"dropComponent");Av.exports={customFunctionsStatus:w7,getCustomFunctions:C7,getCustomFunction:D7,setCustomFunction:L7,dropCustomFunction:M7,addComponent:P7,dropCustomFunctionProject:U7,packageComponent:v7,deployComponent:B7,getComponents:H7,getComponentFile:x7,setComponentFile:G7,dropComponent:q7}});var Ng=g((Nme,bv)=>{"use strict";var ls=require("joi"),Ov=Xe();bv.exports={readTransactionLogValidator:F7,deleteTransactionLogsBeforeValidator:k7};function F7(e){let t=ls.object({schema:ls.string().required(),table:ls.string().required(),from:ls.date().timestamp(),to:ls.date().timestamp(),limit:ls.number().min(1)});return Ov.validateBySchema(e,t)}a(F7,"readTransactionLogValidator");function k7(e){let t=ls.object({schema:ls.string().required(),table:ls.string().required(),timestamp:ls.date().timestamp().required()});return Ov.validateBySchema(e,t)}a(k7,"deleteTransactionLogsBeforeValidator")});var kf=g((wme,Cv)=>{"use strict";var Ig=P(),al=ut(),yv=z(),Nv=ee(),Iv=Os(),{handleHDBError:va,hdb_errors:V7}=se(),{HTTP_STATUS_CODES:Ba}=V7,{readTransactionLogValidator:$7,deleteTransactionLogsBeforeValidator:Y7}=Ng(),wv="This operation relies on clustering and cannot run with it disable.",K7="Logs successfully deleted from transaction log.",W7="All logs successfully deleted from transaction log.";Cv.exports={readTransactionLog:Q7,deleteTransactionLogsBefore:z7};async function*Q7(e){let t=$7(e);if(t)throw va(t,t.message,Ba.BAD_REQUEST,void 0,void 0,!0);if(!Nv.get(Ig.CONFIG_PARAMS.CLUSTERING_ENABLED))throw va(new Error,wv,Ba.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n}=e,s=yv.checkSchemaTableExist(r,n);if(s)throw va(new Error,s,Ba.NOT_FOUND,void 0,void 0,!0);let i=Iv.createNatsTableStreamName(r,n),o=await al.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===Ig.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(Q7,"readTransactionLog");async function z7(e){let t=Y7(e);if(t)throw va(t,t.message,Ba.BAD_REQUEST,void 0,void 0,!0);if(!Nv.get(Ig.CONFIG_PARAMS.CLUSTERING_ENABLED))throw va(new Error,wv,Ba.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n,timestamp:s}=e,i=yv.checkSchemaTableExist(r,n);if(i)throw va(new Error,i,Ba.NOT_FOUND,void 0,void 0,!0);let o=Iv.createNatsTableStreamName(r,n),{jsm:c}=await al.getNATSReferences(),u=await al.getStreamInfo(o),_=new Date(u.state.first_ts).getTime();if(s<=_)return`No transactions exist before: ${s}`;let l=K7,d,E=new Date(u.state.last_ts).getTime();return s>E?(d=u.state.last_seq+1,l=W7):d=(await al.viewStream(o,parseInt(s),1))[0].nats_sequence,await al.purgeTableStream(r,n,{seq:d}),l}a(z7,"deleteTransactionLogsBefore")});var Lv=g((Dme,Dv)=>{"use strict";var wg=class{static{a(this,"PermissionTableResponseObject")}constructor(t,r,n=[],s=[]){this.schema=t,this.table=r,this.required_table_permissions=n,this.required_attribute_permissions=s}};Dv.exports=wg});var Pv=g((Mme,Mv)=>{"use strict";var Cg=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};Mv.exports=Cg});var Lg=g((Ume,vv)=>{"use strict";var Uv=Lv(),J7=Pv(),{HDB_ERROR_MSGS:j7}=Ur(),Dg=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=j7.OP_AUTH_PERMS_ERROR,this.unauthorized_access={},this.invalid_schema_items=[]}handleUnauthorizedItem(t){return this.invalid_schema_items=[],this.unauthorized_access=[t],this}handleInvalidItem(t){return this.invalid_schema_items=[t],this.unauthorized_access=[],this}addInvalidItem(t,r,n){if(r&&n){let s=`${r}_${n}`;if(this.unauthorized_access[s])return}this.invalid_schema_items.push(t)}addUnauthorizedTable(t,r,n){let s=new Uv(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let u=new J7(c,s[c]);i.push(u)});let o=`${r}_${n}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new Uv(r,n,[],i);this.unauthorized_access[o]=c}}getPermsResponse(){let t=Object.values(this.unauthorized_access);return t.length>0||this.invalid_schema_items.length>0?(this.unauthorized_access=t,this):null}};vv.exports=Dg});var Kf=g((Bme,jv)=>{"use strict";var Mg=qr(),Vf=Gr(),pn=bu(),ll=bs(),Pg=ci(),X7=$S(),Z7=xL(),_l=_n(),$f=ZS(),Dt=$(),eee=rT(),tee=of(),ree=vT(),nee=cf(),see=HT(),iee=xT(),oee=FT(),aee=VT(),Ug=KT(),Hs=z(),cee=BP(),vg=jT(),xv=ju(),mn=P(),Gv=VU(),uee=Ra(),qv=Du(),Fv=(Mf(),ie(tl)),kv=Er(),Jr=yg(),lee=require("alasql"),Vv=kf(),$v=Hf(),Yv=Lg(),{handleHDBError:wr,hdb_errors:Kv}=se(),{HDB_ERROR_MSGS:Wt,HTTP_STATUS_CODES:cl}=Kv,V=new Map,Wv="delete",Ii="insert",xs="read",Oo="update",ul="describe",Bv=ll.describeSchema.name,Hv=ll.describeTable.name,Qv={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},_ee="catchup",dee="handleGetJob",fee="handleGetJobsByStartDate",Yf={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},Eee=[pn.createTable.name,pn.createAttribute.name,pn.dropTable.name,pn.dropAttribute.name],zv={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},W=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};V.set(Mg.insert.name,new W(!1,[Ii]));V.set(Mg.update.name,new W(!1,[Oo]));V.set(Mg.upsert.name,new W(!1,[Ii,Oo]));V.set(Vf.searchByConditions.name,new W(!1,[xs]));V.set(Vf.searchByHash.name,new W(!1,[xs]));V.set(Vf.searchByValue.name,new W(!1,[xs]));V.set(Vf.search.name,new W(!1,[xs]));V.set(pn.createSchema.name,new W(!0,[]));V.set(pn.createTable.name,new W(!0,[]));V.set(pn.createAttribute.name,new W(!1,[Ii]));V.set(pn.dropSchema.name,new W(!0,[]));V.set(pn.dropTable.name,new W(!0,[]));V.set(pn.dropAttribute.name,new W(!0,[]));V.set(ll.describeSchema.name,new W(!1,[xs]));V.set(ll.describeTable.name,new W(!1,[xs]));V.set(Pg.deleteRecord.name,new W(!1,[Wv]));V.set(_l.addUser.name,new W(!0,[]));V.set(_l.alterUser.name,new W(!0,[]));V.set(_l.dropUser.name,new W(!0,[]));V.set(_l.listUsersExternal.name,new W(!0,[]));V.set($f.listRoles.name,new W(!0,[]));V.set($f.addRole.name,new W(!0,[]));V.set($f.alterRole.name,new W(!0,[]));V.set($f.dropRole.name,new W(!0,[]));V.set(eee.name,new W(!0,[]));V.set(tee.name,new W(!0,[]));V.set(ree.name,new W(!0,[]));V.set(nee.name,new W(!0,[]));V.set(see.name,new W(!0,[]));V.set(iee.name,new W(!0,[]));V.set(Ug.setRoutes.name,new W(!0,[]));V.set(Ug.getRoutes.name,new W(!0,[]));V.set(Ug.deleteRoutes.name,new W(!0,[]));V.set(kv.setConfiguration.name,new W(!0,[]));V.set(oee.clusterStatus.name,new W(!0,[]));V.set(aee.name,new W(!0,[]));V.set(vg.getFingerprint.name,new W(!0,[]));V.set(vg.setLicense.name,new W(!0,[]));V.set(Pg.deleteFilesBefore.name,new W(!0,[]));V.set(Pg.deleteAuditLogsBefore.name,new W(!0,[]));V.set(xv.restart.name,new W(!0,[]));V.set(xv.restartService.name,new W(!0,[]));V.set(X7.name,new W(!0,[]));V.set(Z7.name,new W(!0,[xs]));V.set(uee.systemInformation.name,new W(!0,[]));V.set(kv.getConfiguration.name,new W(!0,[]));V.set(Vv.readTransactionLog.name,new W(!0,[]));V.set(Vv.deleteTransactionLogsBefore.name,new W(!0,[]));V.set($v.installModules.name,new W(!0,[]));V.set($v.auditModules.name,new W(!0,[]));V.set(qv.createTokens.name,new W(!1,[]));V.set(qv.refreshOperationToken.name,new W(!1,[]));V.set(Fv.login.name,new W(!1,[]));V.set(Fv.logout.name,new W(!1,[]));V.set(Jr.customFunctionsStatus.name,new W(!0,[]));V.set(Jr.getCustomFunctions.name,new W(!0,[]));V.set(Jr.getComponents.name,new W(!0,[]));V.set(Jr.getComponentFile.name,new W(!0,[]));V.set(Jr.setComponentFile.name,new W(!0,[]));V.set(Jr.dropComponent.name,new W(!0,[]));V.set(Jr.getCustomFunction.name,new W(!0,[]));V.set(Jr.setCustomFunction.name,new W(!0,[]));V.set(Jr.dropCustomFunction.name,new W(!0,[]));V.set(Jr.addComponent.name,new W(!0,[]));V.set(Jr.dropCustomFunctionProject.name,new W(!0,[]));V.set(Jr.packageComponent.name,new W(!0,[]));V.set(Jr.deployComponent.name,new W(!0,[]));V.set(vg.getRegistrationInfo.name,new W(!1,[]));V.set(_l.userInfo.name,new W(!1,[]));V.set(ll.describeAll.name,new W(!1,[]));V.set(dee,new W(!1,[]));V.set(fee,new W(!0,[]));V.set(_ee,new W(!0,[]));V.set(Yf.CSV_DATA_LOAD,new W(!1,[Ii,Oo]));V.set(Yf.CSV_URL_LOAD,new W(!1,[Ii,Oo]));V.set(Yf.CSV_FILE_LOAD,new W(!1,[Ii,Oo]));V.set(Yf.IMPORT_FROM_S3,new W(!1,[Ii,Oo]));V.set(zv.EXPORT_TO_S3,new W(!0,[]));V.set(zv.EXPORT_LOCAL,new W(!0,[]));V.set(mn.VALID_SQL_OPS_ENUM.DELETE,new W(!1,[Wv]));V.set(mn.VALID_SQL_OPS_ENUM.SELECT,new W(!1,[xs]));V.set(mn.VALID_SQL_OPS_ENUM.INSERT,new W(!1,[Ii]));V.set(mn.VALID_SQL_OPS_ENUM.UPDATE,new W(!1,[Oo]));jv.exports={verifyPerms:mee,verifyPermsAst:hee,verifyBulkLoadAttributePerms:See};function hee(e,t,r){if(Hs.isEmptyOrZeroLength(e))throw Dt.info("verify_perms_ast has an empty user parameter"),wr(new Error);if(Hs.isEmptyOrZeroLength(t))throw Dt.info("verify_perms_ast has an empty user parameter"),wr(new Error);if(Hs.isEmptyOrZeroLength(r))throw Dt.info("verify_perms_ast has a null operation parameter"),wr(new Error);try{let n=new Yv,s=new cee(e),i=s.getSchemas(),o=new Map;if((!i||i.length===0)&&s.affected_attributes&&s.affected_attributes.size>0)throw Dt.info("No schemas defined in verifyPermsAst(), will not continue."),wr(new Error);let c=!!t.role.permission.super_user,u=i.includes("system");if(u&&Qv[r])throw wr(new Error,Wt.DROP_SYSTEM,cl.FORBIDDEN);if(c&&!u)return null;let _=Gv.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof lee.yy.Select&&(e=s.updateAttributeWildcardsForRolePerms(_));for(let d=0;d<i.length;d++){let E=s.getTablesBySchemaName(i[d]);E&&o.set(i[d],E)}let l=Jv(t,r,o,n);return l||(o.forEach((d,E)=>{for(let f=0;f<d.length;f++){let h=s.getAttributesBySchemaTableName(E,d[f]),p=Hg(t.role.permission,E,d[f]);Bg(h,p,r,d[f],E,n)}}),n.getPermsResponse())}catch(n){throw wr(n)}}a(hee,"verifyPermsAst");function mee(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Dt.info("null required parameter in verifyPerms"),wr(new Error,Wt.DEFAULT_INVALID_REQUEST,cl.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let n=e.action,s=e.schema??e.database,i=e.table,o=new Map;s&&i&&o.set(s,[i]);let c=new Yv;if(Hs.isEmptyOrZeroLength(e.hdb_user.role)||Hs.isEmptyOrZeroLength(e.hdb_user.role.permission))return Dt.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(Wt.USER_HAS_NO_PERMS(e.hdb_user.username));let u=!!e.hdb_user.role.permission.super_user,_=e.hdb_user.role.permission.structure_user,l=o.has(mn.SYSTEM_SCHEMA_NAME)||s===mn.SYSTEM_SCHEMA_NAME;if(l&&Qv[r])throw wr(new Error,Wt.DROP_SYSTEM,cl.FORBIDDEN);if(u&&!l||_===!0&&(r===pn.createSchema.name||r===pn.dropSchema.name))return null;if(Eee.indexOf(r)>=0&&(_===!0||Array.isArray(_)))return _===!0||_.indexOf(s)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${s}'`);let d=Gv.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===Bv||r===Hv){if(s===mn.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Wt.SCHEMA_PERM_ERROR(s));if(!d.super_user){if(r===Bv&&(!d[s]||!d[s][ul]))return c.handleInvalidItem(Wt.SCHEMA_NOT_FOUND(s));if(r===Hv&&(!d[s]||!d[s].tables[i]||!d[s].tables[i][ul]))return c.handleInvalidItem(Wt.TABLE_NOT_FOUND(s,i))}}let E=Jv(e.hdb_user,r,o,c,n);if(E)return E;if(V.get(r)&&V.get(r).perms.length===0)return null;if(!u&&e.get_attributes&&mn.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let p=[],S=d[s].tables[i];S[mn.PERMS_CRUD_ENUM.READ]&&(S.attribute_permissions.length>0?S.attribute_permissions.filter(R=>R[mn.PERMS_CRUD_ENUM.READ]).forEach(R=>{p.push(R.attribute_name)}):p=global.hdb_schema[s][i].attributes.map(T=>T.attribute),e.get_attributes=p)}let f=pee(e),h=Hg(e.hdb_user.role.permission,s,i);return Bg(f,h,r,i,s,c,n),c.getPermsResponse()}a(mee,"verifyPerms");function Jv(e,t,r,n,s){if(Hs.arrayHasEmptyValues([e,t,r]))throw Dt.info("hasPermissions has an invalid parameter"),wr(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||V.get(t).requires_su))return null;if(!V.get(t))throw Dt.info(`operation ${t} not found.`),wr(new Error,Wt.OP_NOT_FOUND(t),cl.BAD_REQUEST);if(V.get(t)&&V.get(t).requires_su)return Dt.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(Wt.OP_IS_SU_ONLY(t));let c=r.keys();for(let u of c){try{if(u&&!o[u]||o[u][ul]===!1){n.addInvalidItem(Wt.SCHEMA_NOT_FOUND(u));continue}}catch{n.addInvalidItem(Wt.SCHEMA_NOT_FOUND(u));continue}let _=r.get(u);for(let l of _){let d=o[u].tables[l];if(!d||d[ul]===!1)n.addInvalidItem(Wt.TABLE_NOT_FOUND(u,l));else try{let E=[],f=V.get(t).perms;!Hs.isEmpty(s)&&f.includes(s)&&(f=[s]);for(let h=0;h<f.length;h++){let p=f[h],S=d[p];(S==null||S===!1)&&(Dt.info(`Required ${p} permission not found for ${t} ${s?`${s} `:""}operation in role ${e.role.id}`),E.push(p))}E.length>0&&n.addUnauthorizedTable(u,l,E)}catch(E){let f=Wt.UNKNOWN_OP_AUTH_ERROR(t,u,l);throw Dt.error(f),Dt.error(E),wr(Kv.CHECK_LOGS_WRAPPER(f))}}}return r.size<2?n.getPermsResponse():null}a(Jv,"hasPermissions");function Bg(e,t,r,n,s,i,o){if(!e||!t)throw Dt.info("no attributes specified in checkAttributePerms."),wr(new Error);let c=V.get(r).perms;if(!c||c==="")throw Dt.info(`no permissions found for ${r} in checkAttributePerms().`),wr(new Error);if(Hs.isEmptyOrZeroLength(t))return Dt.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let u={};for(let l of e){let d=t.get(l);if(d){if(d[ul]===!1){i.addInvalidItem(Wt.ATTR_NOT_FOUND(s,n,l),s,n);continue}if(c)for(let E of c){if(mn.TIME_STAMP_NAMES.includes(d.attribute_name)&&E!==xs)throw wr(new Error,Wt.SYSTEM_TIMESTAMP_PERMS_ERR,cl.FORBIDDEN);d[E]===!1&&(u[d.attribute_name]?u[d.attribute_name].push(E):u[d.attribute_name]=[E])}}else i.addInvalidItem(Wt.ATTR_NOT_FOUND(s,n,l),s,n)}let _=Object.keys(u);_.length>0&&i.addUnauthorizedAttributes(_,s,n,u)}a(Bg,"checkAttributePerms");function pee(e){let t=new Set;try{if(e.action)return t;if(e.operation===mn.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{t.add(r.search_attribute)}),e&&e.search_attribute&&t.add(e.search_attribute),!e.records||e.records.length===0){if(!e.get_attributes||!e.get_attributes.length===0)return t;for(let r=0;r<e.get_attributes.length;r++)t.add(e.get_attributes[r])}else for(let r=0;r<e.records.length;r++){let n=Object.keys(e.records[r]);for(let s=0;s<n.length;s++)t.add(n[s])}}catch(r){Dt.info(r)}return t}a(pee,"getRecordAttributes");function Hg(e,t,r){let n=new Map;if(Hs.isEmpty(e))return Dt.info("no hdb_user specified in getAttributePermissions"),n;if(e.super_user||!t||!r)return n;try{e[t].tables[r].attribute_permissions.forEach(s=>{n.has(s.attribute_name)||n.set(s.attribute_name,s)})}catch{Dt.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}a(Hg,"getAttributePermissions");function See(e,t,r,n,s,i,o){let c=new Set(i),u=Hg(e,n,s);Bg(c,u,t,s,n,o,r)}a(See,"verifyBulkLoadAttributePerms")});var Qf=g((xme,r0)=>{"use strict";r0.exports={evaluateSQL:Lee,processAST:t0,convertSQLToAST:e0,checkASTPermissions:Zv};var Tee=qr(),Xv=require("util"),gee=Xv.callbackify(Tee.insert),Ree=Gr().search,Aee=OD().update,Oee=Xv.callbackify(Aee),bee=yD().convertDelete,wi=require("alasql"),yee=Kf(),Wf=$(),Nee=Od(),Iee=z(),dl=P(),{hdb_errors:wee,handleHDBError:xg}=se(),{HTTP_STATUS_CODES:Gg}=wee;Nee(wi);var Cee=403,Dee="There was a problem performing this insert. Please check the logs and try again.",qg=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function Lee(e,t){let r=e.parsed_sql_object;if(!r){r=e0(e.sql);let n,s=r.ast.statements[0];if(s instanceof wi.yy.Insert?n=s.into.databaseid:s instanceof wi.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof wi.yy.Update||s instanceof wi.yy.Delete?n=s.table.databaseid:Wf.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof wi.yy.Select)&&Iee.isEmptyOrZeroLength(n))return t("No schema specified",null)}t0(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}a(Lee,"evaluateSQL");function Zv(e,t){let r;try{r=yee.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}a(Zv,"checkASTPermissions");function e0(e){let t=new qg;if(!e)throw xg(new Error,"The 'sql' parameter is missing from the request body",Gg.BAD_REQUEST);try{let r=e.trim(),n=wi.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
|
|
19
|
-
`);throw n[1]?xg(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,Gg.BAD_REQUEST):xg(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",Gg.BAD_REQUEST)}return t}a(e0,"convertSQLToAST");function t0(e,t,r){try{let n=Mee;if(!e.bypass_auth&&!t.permissions_checked){let i=Zv(e,t);if(i&&i.length>0)return r(Cee,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case dl.VALID_SQL_OPS_ENUM.SELECT:n=Ree,s=t.ast.statements[0];break;case dl.VALID_SQL_OPS_ENUM.INSERT:n=Pee;break;case dl.VALID_SQL_OPS_ENUM.UPDATE:n=Oee;break;case dl.VALID_SQL_OPS_ENUM.DELETE:n=bee;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}n(s,(i,o)=>{if(i){r(i);return}r(null,o)})}catch(n){return r(n)}}a(t0,"processAST");function Mee(e,t){Wf.info(e),t("unknown sql statement")}a(Mee,"nullFunction");function Pee({statement:e,hdb_user:t},r){let n=e.into,s={schema:n.databaseid,table:n.tableid,operation:"insert",hdb_user:t},i=e.columns.map(o=>o.columnid);try{s.records=Uee(i,e.values)}catch(o){return r(o)}gee(s,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){Wf.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a(Pee,"convertInsert");function Uee(e,t){try{return t.map(r=>{if(e.length!==r.length)throw"number of values do not match number of columns in insert";let n={};return r.forEach((s,i)=>{if(s.columnid)throw"cannot use a column in insert value";"value"in s?n[e[i]]=s.value:n[e[i]]=wi.compile(`SELECT ${s.toString()} AS [${dl.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw Wf.error(r),new Error(Dee)}}a(Uee,"createDataObjects")});var Fg=g((qme,s0)=>{"use strict";var{S3:vee,GetObjectCommand:Bee}=require("@aws-sdk/client-s3");s0.exports={getFileStreamFromS3:Hee,getS3AuthObj:n0};async function Hee(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await n0(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new Bee(r))).Body}a(Hee,"getFileStreamFromS3");function n0(e,t,r){return new vee({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(n0,"getS3AuthObj")});var zf=g((kme,f0)=>{"use strict";var Vg=Gr(),xee=Qf(),Gee=Fg(),{AsyncParser:qee,Transform:Fee}=require("json2csv"),El=require("stream"),jr=z(),kg=require("fs-extra"),kee=require("path"),Sn=$(),{promisify:a0}=require("util"),fl=z(),{handleHDBError:bt,hdb_errors:Vee}=se(),{HDB_ERROR_MSGS:Cr,HTTP_STATUS_CODES:yt}=Vee,{streamAsJSON:$ee}=(om(),ie(Ub)),{Upload:Yee}=require("@aws-sdk/lib-storage"),i0=["search_by_value","search_by_hash","sql","search_by_conditions"],o0=["json","csv"],c0="json",u0="csv",Kee="Successfully exported JSON locally.",Wee="Successfully exported CSV locally.",Qee=1e3,zee=Vg.searchByHash,Jee=Vg.searchByValue,jee=a0(xee.evaluateSQL),Xee=a0(El.finished);f0.exports={export_to_s3:rte,export_local:Zee,toCsvStream:l0};async function Zee(e){Sn.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=_0(e);if(!jr.isEmpty(t))throw Sn.error(t),bt(new Error,t,yt.BAD_REQUEST,void 0,void 0,!0);if(jr.isEmpty(e.path))throw Sn.error(Cr.MISSING_VALUE("path")),bt(new Error,Cr.MISSING_VALUE("path"),yt.BAD_REQUEST,void 0,void 0,!0);let r=(jr.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(kee.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=jr.buildFolderPath(e.path,r);await ete(e.path);let s=await d0(e);return await tte(n,e.format,s)}a(Zee,"export_local");async function ete(e){if(Sn.trace("in confirmPath"),jr.isEmptyOrZeroLength(e))throw bt(new Error,`Invalid path: ${e}`,yt.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await kg.stat(e)}catch(r){let n;throw r.code==="ENOENT"?n=`path '${e}' does not exist`:r.code==="EACCES"?n=`access to path '${e}' is denied`:n=r.message,Sn.error(n),bt(new Error,n,yt.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 Sn.error(r),bt(new Error,r,yt.BAD_REQUEST,void 0,void 0,!0)}return!0}a(ete,"confirmPath");async function tte(e,t,r){if(Sn.trace("in saveToLocal"),fl.isEmptyOrZeroLength(e))throw bt(new Error,Cr.INVALID_VALUE("file_path"),yt.BAD_REQUEST,void 0,void 0,!0);if(fl.isEmptyOrZeroLength(t))throw bt(new Error,Cr.INVALID_VALUE("Source format"),yt.BAD_REQUEST,void 0,void 0,!0);if(fl.isEmpty(r))throw bt(new Error,Cr.NOT_FOUND("Data"),yt.BAD_REQUEST,void 0,void 0,!0);if(t===c0){let n=kg.createWriteStream(e);return $ee(r).pipe(n),await Xee(n),{message:Kee,path:e}}else if(t===u0){let n=kg.createWriteStream(e),s=El.Readable.from(r),i={},o=r.getColumns?.();o&&(i.fields=o.map(l=>({label:l,value:l})));let c={objectMode:!0};return await new qee(i,c).fromInput(s).toOutput(n).promise(!1),{message:Wee,path:e}}throw bt(new Error,Cr.INVALID_VALUE("format"),yt.BAD_REQUEST)}a(tte,"saveToLocal");async function rte(e){if(!e.s3||Object.keys(e.s3).length===0)throw bt(new Error,Cr.MISSING_VALUE("S3 object"),yt.BAD_REQUEST);if(jr.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw bt(new Error,Cr.MISSING_VALUE("aws_access_key_id"),yt.BAD_REQUEST);if(jr.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw bt(new Error,Cr.MISSING_VALUE("aws_secret_access_key"),yt.BAD_REQUEST);if(jr.isEmptyOrZeroLength(e.s3.bucket))throw bt(new Error,Cr.MISSING_VALUE("bucket"),yt.BAD_REQUEST);if(jr.isEmptyOrZeroLength(e.s3.key))throw bt(new Error,Cr.MISSING_VALUE("key"),yt.BAD_REQUEST);if(jr.isEmptyOrZeroLength(e.s3.region))throw bt(new Error,Cr.MISSING_VALUE("region"),yt.BAD_REQUEST);let t=_0(e);if(!jr.isEmpty(t))throw bt(new Error,t,yt.BAD_REQUEST);Sn.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await d0(e)}catch(u){throw Sn.error(u),u}let n,s=await Gee.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new El.PassThrough;if(e.format===u0){i=e.s3.key+".csv";let u=l0(r,r.getColumns?.());u.on("error",_=>{throw _}),u.pipe(o)}else if(e.format===c0){i=e.s3.key+".json";let u=new El.Readable;u.pipe(o),u.on("error",d=>{throw d}),u.push("[");let _=r.length,l="";for(let[d,E]of r.entries()){let f=d===_-1?JSON.stringify(E):JSON.stringify(E)+",";l+=f,d!==0&&d%Qee===0&&(u.push(l),l="")}l.length!==0&&u.push(l),u.push("]"),u.push(null)}else throw bt(new Error,Cr.INVALID_VALUE("format"),yt.BAD_REQUEST);return new Yee({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(rte,"export_to_s3");function l0(e,t){let r=El.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),n={};t&&(n.fields=t.map(o=>({label:o,value:o})));let s={objectMode:!0},i=new Fee(n,s);return r.pipe(i)}a(l0,"toCsvStream");function _0(e){if(Sn.trace("in exportCoreValidation"),jr.isEmpty(e.format))return"format missing";if(o0.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${o0.join(", ")}`;let t=e.search_operation.operation;if(jr.isEmpty(t))return"search_operation.operation missing";if(i0.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${i0.join(", ")}`}a(_0,"exportCoreValidation");async function d0(e){Sn.trace("in getRecords");let t,r;if(fl.isEmpty(e.search_operation)||fl.isEmptyOrZeroLength(e.search_operation.operation))throw bt(new Error,Cr.INVALID_VALUE("Search operation"),yt.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=Jee;break;case"search_by_hash":t=zee;break;case"search_by_conditions":t=Vg.searchByConditions;break;case"sql":t=jee;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Sn.error(r),bt(new Error,r,yt.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(d0,"getRecords")});var A0={};Fe(A0,{contentTypes:()=>Wg,findBestSerializer:()=>Xf,getDeserializer:()=>yo,registerContentHandlers:()=>Qg,serialize:()=>Zf,serializeMessage:()=>Ro});function nte(e){try{return e?.[0]===123?Kg(e):e}catch{return e}}function Qg(e){e.register(ite,{serializers:[{regex:/^application\/json$/,serializer:Cc},{regex:/^application\/cbor$/,serializer:function(t){return new bo.EncoderStream(ml).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?jf.Readable.from((0,_s.encodeIter)(t,ml)):(0,_s.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,Jf.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,_s.unpack)(r))}catch(s){s.statusCode=400,n(s)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,bo.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function Xf(e){let t=e.headers.asObject||e.headers,r=e.requestedContentType??t.accept,n,s=0,i,o,c=r?r.toLowerCase().split(/\s*,\s*/):[];for(let u of c){let[_,...l]=u.split(/\s*;\s*/),d=1,E={q:1};for(let h of l){let p=h.indexOf("=");E[h.substring(0,p)]=h.substring(p+1)}d=+E.q;let f=Ft.get(_);if(f){let h=(f.q||1)*d;h>s&&(n=f,i=f.type||_,s=h,o=E)}}if(!n){if(r)throw new p0.ClientError("No supported content types found in Accept header, supported types include: "+Array.from(Ft.keys()).join(", "),406);n=Ft.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:o}}function Zf(e,t,r){let n=h0&&t.headers.asObject?.["accept-encoding"]?.includes("br"),s;if(e?.contentType!=null&&e.data!=null)r.headers.set("Content-Type",e.contentType),r.headers.set("Vary","Accept-Encoding"),s=e.data;else if(e instanceof Uint8Array)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),s=e;else{let i=Xf(t);if(i.serializer.compressible===!1&&(n=!1),r.headers.set("Vary","Accept, Accept-Encoding"),r.headers.set("Content-Type",i.type),typeof e=="object"&&(e[Symbol.iterator]||e[Symbol.asyncIterator])&&i.serializer.serializeStream){let o=i.serializer.serializeStream(e,r);return n&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,Gs.createBrotliCompress)({params:{[Gs.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?Gs.constants.BROTLI_MODE_TEXT:Gs.constants.BROTLI_MODE_GENERIC,[Gs.constants.BROTLI_PARAM_QUALITY]:2}}))),o}s=i.serializer.serialize(e,r)}return n&&s?.length>h0?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,Gs.brotliCompress)(s,(c,u)=>{c?o(c):i(u)}))):s}function Ro(e,t){if(e?.contentType!=null&&e.data!=null)return e.data;if(!t)return hl(e);let r=t.serialize;if(r)return r(e);let n=Xf(t);return r=t.serialize=n.serializer.serialize,r(e)}function ote(e){return new Promise((t,r)=>{let n=[];e.on("data",s=>n.push(s)),e.on("end",()=>t(Buffer.concat(n))),e.on("error",r)})}function yo(e,t){e||(e="");let r=e.indexOf(";"),n;r>-1&&(n=e.slice(r+1),e=e.slice(0,r));let s=Ft.get(e);if(t){if(s?.deserializeStream)return s.deserializeStream;let i=Ft.get(e)?.deserialize||m0(e,n);return o=>ote(o).then(i)}return e&&Ft.get(e)?.deserialize||m0(e,n)}function m0(e,t){if(e.startsWith("text/")){let r=t?.match(/charset=(.+)/)?.[1]||"utf-8";return n=>({contentType:e,data:n.toString(r)})}else return e==="application/octet-stream"?r=>r:r=>{if(!e)try{if(r?.[0]===123)return Kg(r)}catch{}return{contentType:e||"application/octet-stream",data:r}}}function ate(e,t){return{[Symbol.asyncIterator](){let r=e[Symbol.asyncIterator]?e[Symbol.asyncIterator]():e[Symbol.iterator]();return{next(){let n=r.next();return n.then?n.then(s=>({value:t(s.value),done:s.done})):{value:t(n.value),done:n.done}},return(n){return r.return(n)},throw(n){return r.throw(n)}}}}}var Jf,_s,bo,Gs,p0,jf,S0,$g,Yg,T0,g0,hl,Kg,ml,Ft,Wg,E0,R0,ste,ite,h0,Da=Re(()=>{om();Jf=H(zf()),_s=require("msgpackr"),bo=require("cbor-x"),Gs=require("zlib"),p0=H(se()),jf=require("stream");lr();S0=require("../index"),$g=H(ee()),Yg=H(P()),T0=H(require("yaml")),g0=$g.default.get(Yg.CONFIG_PARAMS.SERIALIZATION_BIGINT)!==!1,hl=g0?qi:JSON.stringify,Kg=g0?im:JSON.parse,ml={useRecords:!1,useToJSON:!0},Ft=new Map,Wg=Ft;at.contentTypes=Wg;(0,S0._assignPackageExport)("contentTypes",Wg);Ft.set("application/json",{serializeStream:Cc,serialize:hl,deserialize:Kg,q:.8});E0=new bo.Encoder(ml);Ft.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new bo.EncoderStream(ml).end(e)},serialize:E0.encode,deserialize:E0.decode,q:1});Ft.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?jf.Readable.from((0,_s.encodeIter)(e,ml)):(0,_s.pack)(e)},serialize:_s.pack,deserialize:_s.unpack,q:.9});Ft.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),(0,Jf.toCsvStream)(e,e?.getColumns?.())},serialize(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),e&&!e[Symbol.iterator]&&(e=[e.toJSON?e.toJSON():e]),(0,Jf.toCsvStream)(e,e?.getColumns?.())},q:.1});Ft.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.2});Ft.set("text/yaml",{serialize(e){return T0.stringify(e,{aliasDuplicateObjects:!1})},q:.7});Ft.set("text/event-stream",{serializeStream:function(e){return jf.Readable.from(ate(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+`
|
|
17
|
+
`,""):null}catch(E){E.stderr?i[u].npm_error=_v(E.stderr):i[u].npm_error=E.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 Pa.info(`finished installModules with response ${i}`),i}a(E7,"installModules");function _v(e){let t='"error": {',r=e.indexOf('"error": {'),n=e.indexOf(`}
|
|
18
|
+
`);return r>-1&&n>-1?JSON.parse(e.substring(r+t.length-1,n+1)):e}a(_v,"parseNPMStdErr");async function h7(e){Pa.info(`starting auditModules for request: ${e}`);let t=fv(e);if(t)throw La(t,t.message,Ma.BAD_REQUEST);let{projects:r}=e;await Bf(),await dv(r);let n={};for(let s=0,i=r.length;s<i;s++){let o=r[s],c=vf.join(gg,o);n[o]={npm_output:null,npm_error:null};try{let u=await il("npm audit --json",c);n[o].npm_output=JSON.parse(u)}catch(u){n[o].npm_error=_v(u.stderr)}}return Pa.info(`finished auditModules with response ${n}`),n}a(h7,"auditModules");async function Bf(){try{return await il("npm -v"),!0}catch{throw La(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",Ma.BAD_REQUEST,void 0,void 0,!0)}}a(Bf,"checkNPMInstalled");async function dv(e){if(!Array.isArray(e)||e.length===0)throw La(new Error,"projects argument must be an array with at least 1 element",Ma.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n],o=vf.join(gg,i.toString());if(!await cv.pathExists(o)){t.push(i);continue}let u=vf.join(o,"package.json");await cv.pathExists(u)||r.push(i)}if(t.length>0)throw La(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Ma.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw La(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Ma.BAD_REQUEST,void 0,void 0,!0)}a(dv,"checkProjectPaths");function fv(e){let t=Uf.object({projects:Uf.array().min(1).items(Uf.string()).required(),dry_run:Uf.boolean().default(!1)});return u7.validateBySchema(e,t)}a(fv,"modulesValidator")});var Ag=g((Rme,Tv)=>{"use strict";var Ua=require("fs-extra"),Rg=require("path"),xf=$(),hv=z(),Gf=P(),Sv=ee(),m7=Er();Tv.exports=p7;async function p7(){let e=S7(),t=Sv.get(Gf.CONFIG_PARAMS.ROOTPATH),r=Rg.join(t,"package.json"),n={dependencies:{harperdb:"file:"+Gf.PACKAGE_ROOT}},s=Rg.join(t,"node_modules");await Ua.ensureDir(s);let i,o=!0,c=!1;try{i=await Ua.readJson(r)}catch(u){if(hv.isEmptyOrZeroLength(e))return;if(u.code!==Gf.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!hv.isEmptyOrZeroLength(e)){for(let{name:u,package:_}of e){let l=await mv(_);n.dependencies[u]=l+_}if(!o){xf.notify("Installing components"),await pv(r,n,null);return}for(let{name:u,package:_}of e){let l=i.dependencies[u],d=await mv(_);if(l===void 0||l!==d+_){c=!0;break}}}for(let u in i.dependencies)n.dependencies[u]===void 0&&(xf.notify("Removing component",u),c=!0);c&&(xf.notify("Updating components."),await pv(r,n,i))}a(p7,"installComponents");function S7(){let e=m7.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(S7,"getComponentsConfig");async function mv(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":Rg.extname(e)||await Ua.pathExists(e)?"file:":"github:"}a(mv,"getPkgPrefix");async function pv(e,t,r){xf.trace("npm installing components package.json",t),await Ua.writeFile(e,JSON.stringify(t,null," "));try{await Hf().installAllRootModules(Sv.get(Gf.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(n){throw r?await Ua.writeFile(e,JSON.stringify(r,null," ")):await Ua.unlink(e),n}}a(pv,"installPackages")});var yg=g((bme,Ov)=>{"use strict";var $e=require("fs-extra"),Og=require("fast-glob"),ge=require("path"),Rv=require("tar-fs"),Ome=require("uuid").v4,bg=require("normalize-path"),us=av(),Ct=$(),ze=P(),Ot=ee(),ol=Er(),T7=z(),{PACKAGE_ROOT:g7}=P(),{handleHDBError:Gt,hdb_errors:R7}=se(),{basename:A7}=require("path"),O7=Ag(),Av=ee(),b7=P(),{Readable:y7}=require("stream"),{isMainThread:N7}=require("worker_threads"),{HDB_ERROR_MSGS:Ao,HTTP_STATUS_CODES:qt}=R7,I7=ge.join(g7,"application-template"),gv=ge.join(Ot.get(ze.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function w7(){Ct.trace("getting custom api status");let e={};try{e={port:Ot.get(ze.CONFIG_PARAMS.HTTP_PORT),directory:Ot.get(ze.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Gt(new Error,Ao.FUNCTION_STATUS,qt.INTERNAL_SERVER_ERROR,Ct.ERR,t)}return e}a(w7,"customFunctionsStatus");function C7(){Ct.trace("getting custom api endpoints");let e={},t=Ot.get(ze.CONFIG_PARAMS.COMPONENTSROOT);try{Og.sync(bg(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:Og.sync(bg(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:Og.sync(bg(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Gt(new Error,Ao.GET_FUNCTIONS,qt.INTERNAL_SERVER_ERROR,Ct.ERR,r)}return e}a(C7,"getCustomFunctions");function D7(e){e.project&&(e.project=ge.parse(e.project).name),e.file&&(e.file=ge.parse(e.file).name);let t=us.getDropCustomFunctionValidator(e);if(t)throw Gt(t,t.message,qt.BAD_REQUEST);Ct.trace("getting custom api endpoint file content");let r=Ot.get(ze.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,o=ge.join(r,n,s,i+".js");try{return $e.readFileSync(o,{encoding:"utf8"})}catch(c){throw Gt(new Error,Ao.GET_FUNCTION,qt.INTERNAL_SERVER_ERROR,Ct.ERR,c)}}a(D7,"getCustomFunction");function L7(e){e.project&&(e.project=ge.parse(e.project).name),e.file&&(e.file=ge.parse(e.file).name);let t=us.setCustomFunctionValidator(e);if(t)throw Gt(t,t.message,qt.BAD_REQUEST);Ct.trace("setting custom function file content");let r=Ot.get(ze.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:o}=e;try{return $e.outputFileSync(ge.join(r,n,s,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw Gt(new Error,Ao.SET_FUNCTION,qt.INTERNAL_SERVER_ERROR,Ct.ERR,c)}}a(L7,"setCustomFunction");function M7(e){e.project&&(e.project=ge.parse(e.project).name),e.file&&(e.file=ge.parse(e.file).name);let t=us.getDropCustomFunctionValidator(e);if(t)throw Gt(t,t.message,qt.BAD_REQUEST);Ct.trace("dropping custom function file");let r=Ot.get(ze.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{return $e.unlinkSync(ge.join(r,n,s,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw Gt(new Error,Ao.DROP_FUNCTION,qt.INTERNAL_SERVER_ERROR,Ct.ERR,o)}}a(M7,"dropCustomFunction");function P7(e){e.project&&(e.project=ge.parse(e.project).name);let t=us.addComponentValidator(e);if(t)throw Gt(t,t.message,qt.BAD_REQUEST);Ct.trace("adding component");let r=Ot.get(ze.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;try{let s=ge.join(r,n);return $e.mkdirSync(s,{recursive:!0}),$e.copySync(I7,s),`Successfully added project: ${n}`}catch(s){throw Gt(new Error,Ao.ADD_FUNCTION,qt.INTERNAL_SERVER_ERROR,Ct.ERR,s)}}a(P7,"addComponent");function U7(e){e.project&&(e.project=ge.parse(e.project).name);let t=us.dropCustomFunctionProjectValidator(e);if(t)throw Gt(t,t.message,qt.BAD_REQUEST);Ct.trace("dropping custom function project");let r=Ot.get(ze.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=Ot.get(ze.CONFIG_PARAMS.APPS);if(!T7.isEmptyOrZeroLength(s)){let i=!1;for(let[o,c]of s.entries())if(c.name===n){s.splice(o,1),i=!0;break}if(i)return ol.updateConfigValue(ze.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=ge.join(r,n);return $e.rmSync(i,{recursive:!0}),`Successfully deleted project: ${n}`}catch(i){throw Gt(new Error,Ao.DROP_FUNCTION_PROJECT,qt.INTERNAL_SERVER_ERROR,Ct.ERR,i)}}a(U7,"dropCustomFunctionProject");async function v7(e){e.project&&(e.project=ge.parse(e.project).name);let t=us.packageComponentValidator(e);if(t)throw Gt(t,t.message,qt.BAD_REQUEST);let r=Ot.get(ze.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;Ct.trace("packaging component",n);let s;try{s=await $e.realpath(ge.join(r,n))}catch(u){if(u.code!==ze.NODE_ERROR_CODES.ENOENT)throw u;try{s=await $e.realpath(ge.join(Ot.get(ze.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(_){if(_.code===ze.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}await $e.ensureDir(gv);let i=ge.join(gv,`${n}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(ge.join(s,"node_modules"))}),Rv.pack(s,o).pipe($e.createWriteStream(i,{overwrite:!0})),await new Promise(u=>setTimeout(u,2e3));let c=$e.readFileSync(i,{encoding:"base64"});return await $e.remove(i),{project:n,payload:c}}a(v7,"packageComponent");async function B7(e){e.project&&(e.project=ge.parse(e.project).name);let t=us.deployComponentValidator(e);if(t)throw Gt(t,t.message,qt.BAD_REQUEST);let r=Ot.get(ze.CONFIG_PARAMS.COMPONENTSROOT),{project:n,payload:s,package:i}=e;if(Ct.trace("deploying component",n),!s&&!i)throw new Error("'payload' or 'package' must be provided");let o;if(s){o=ge.join(r,n),i="file:"+o,await $e.emptyDir(o);let E=y7.from(Buffer.from(s,"base64"));await new Promise((h,p)=>{E.pipe(Rv.extract(o,{finish:h})).on("error",p)});let f=await $e.readdir(o);f.length===1&&f[0]==="package"&&(await $e.copy(ge.join(o,"package"),o),await $e.remove(ge.join(o,"package")))}if(await ol.addConfig(n,{package:i}),!s){await O7();let E=Av.get(b7.CONFIG_PARAMS.ROOTPATH);o=ge.join(E,"node_modules",n)}if(N7)return;let c=new Map;c.isWorker=!0;let u=(Ff(),ie(qf)),_;u.setErrorReporter(E=>_=E);let l=A7(o),d=u.component_errors.get(l);try{await u.loadComponent(o,c)}finally{u.component_errors.set(l,d)}if(_)throw _;return Ct.info("Installed component"),`Successfully deployed: ${n}`}a(B7,"deployComponent");async function H7(){let e=ol.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 $e.readdir(o,{withFileTypes:!0});for(let _ of u){let l=_.name;if(l.startsWith(".")||l==="node_modules")continue;let d=ge.join(o,l);if(_.isDirectory()||_.isSymbolicLink()){let E={name:l,entries:[]};c.entries.push(E),await r(d,E)}else{let E=await $e.stat(d),f={name:ge.basename(l),mtime:E.mtime,size:E.size};c.entries.push(f)}}return c}catch(u){return Ct.warn("Error loading package",u),{error:u.toString(),entries:[]}}},"walk_dir"),n=await r(Ot.get(ze.CONFIG_PARAMS.COMPONENTSROOT),{name:Ot.get(ze.CONFIG_PARAMS.COMPONENTSROOT).split(ge.sep).slice(-1).pop(),entries:t});for(let o of n.entries)if(o.package){let c=await r(ge.join(Ot.get(ze.CONFIG_PARAMS.ROOTPATH),"node_modules",o.name),{name:o.name,entries:[]});Object.assign(o,c)}let i=(Ff(),ie(qf)).component_errors;for(let o of t){let c=i.get(o.name);c?o.error=i.get(o.name):c===void 0&&(o.error="The component has not been loaded yet (may need a restart)")}return n}a(H7,"getComponents");async function x7(e){let t=us.getComponentFileValidator(e);if(t)throw Gt(t,t.message,qt.BAD_REQUEST);let n=ol.getConfigObj()[e.project]||e.project==="harperdb"?ge.join(Av.get(ze.CONFIG_PARAMS.ROOTPATH),"node_modules"):Ot.get(ze.CONFIG_PARAMS.COMPONENTSROOT),s=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await $e.stat(ge.join(n,e.project,e.file));return{message:await $e.readFile(ge.join(n,e.project,e.file),s),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===ze.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${ge.join(e.project,e.file)}'`):i}}a(x7,"getComponentFile");async function G7(e){let t=us.setComponentFileValidator(e);if(t)throw Gt(t,t.message,qt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=ge.join(Ot.get(ze.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);return e.payload!==void 0?(await $e.ensureFile(n),await $e.outputFile(n,e.payload,r)):await $e.ensureDir(n),"Successfully set component: "+e.file}a(G7,"setComponentFile");async function q7(e){let t=us.dropComponentFileValidator(e);if(t)throw Gt(t,t.message,qt.BAD_REQUEST);let r=e.file?ge.join(e.project,e.file):e.project,n=ge.join(Ot.get(ze.CONFIG_PARAMS.COMPONENTSROOT),r);return await $e.pathExists(n)&&await $e.remove(n),ol.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(q7,"dropComponent");Ov.exports={customFunctionsStatus:w7,getCustomFunctions:C7,getCustomFunction:D7,setCustomFunction:L7,dropCustomFunction:M7,addComponent:P7,dropCustomFunctionProject:U7,packageComponent:v7,deployComponent:B7,getComponents:H7,getComponentFile:x7,setComponentFile:G7,dropComponent:q7}});var Ng=g((Nme,yv)=>{"use strict";var ls=require("joi"),bv=Xe();yv.exports={readTransactionLogValidator:F7,deleteTransactionLogsBeforeValidator:k7};function F7(e){let t=ls.object({schema:ls.string().required(),table:ls.string().required(),from:ls.date().timestamp(),to:ls.date().timestamp(),limit:ls.number().min(1)});return bv.validateBySchema(e,t)}a(F7,"readTransactionLogValidator");function k7(e){let t=ls.object({schema:ls.string().required(),table:ls.string().required(),timestamp:ls.date().timestamp().required()});return bv.validateBySchema(e,t)}a(k7,"deleteTransactionLogsBeforeValidator")});var kf=g((wme,Dv)=>{"use strict";var Ig=P(),al=ut(),Nv=z(),Iv=ee(),wv=Os(),{handleHDBError:va,hdb_errors:V7}=se(),{HTTP_STATUS_CODES:Ba}=V7,{readTransactionLogValidator:$7,deleteTransactionLogsBeforeValidator:Y7}=Ng(),Cv="This operation relies on clustering and cannot run with it disable.",K7="Logs successfully deleted from transaction log.",W7="All logs successfully deleted from transaction log.";Dv.exports={readTransactionLog:Q7,deleteTransactionLogsBefore:z7};async function*Q7(e){let t=$7(e);if(t)throw va(t,t.message,Ba.BAD_REQUEST,void 0,void 0,!0);if(!Iv.get(Ig.CONFIG_PARAMS.CLUSTERING_ENABLED))throw va(new Error,Cv,Ba.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n}=e,s=Nv.checkSchemaTableExist(r,n);if(s)throw va(new Error,s,Ba.NOT_FOUND,void 0,void 0,!0);let i=wv.createNatsTableStreamName(r,n),o=await al.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===Ig.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(Q7,"readTransactionLog");async function z7(e){let t=Y7(e);if(t)throw va(t,t.message,Ba.BAD_REQUEST,void 0,void 0,!0);if(!Iv.get(Ig.CONFIG_PARAMS.CLUSTERING_ENABLED))throw va(new Error,Cv,Ba.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n,timestamp:s}=e,i=Nv.checkSchemaTableExist(r,n);if(i)throw va(new Error,i,Ba.NOT_FOUND,void 0,void 0,!0);let o=wv.createNatsTableStreamName(r,n),{jsm:c}=await al.getNATSReferences(),u=await al.getStreamInfo(o),_=new Date(u.state.first_ts).getTime();if(s<=_)return`No transactions exist before: ${s}`;let l=K7,d,E=new Date(u.state.last_ts).getTime();return s>E?(d=u.state.last_seq+1,l=W7):d=(await al.viewStream(o,parseInt(s),1))[0].nats_sequence,await al.purgeTableStream(r,n,{seq:d}),l}a(z7,"deleteTransactionLogsBefore")});var Mv=g((Dme,Lv)=>{"use strict";var wg=class{static{a(this,"PermissionTableResponseObject")}constructor(t,r,n=[],s=[]){this.schema=t,this.table=r,this.required_table_permissions=n,this.required_attribute_permissions=s}};Lv.exports=wg});var Uv=g((Mme,Pv)=>{"use strict";var Cg=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};Pv.exports=Cg});var Lg=g((Ume,Bv)=>{"use strict";var vv=Mv(),J7=Uv(),{HDB_ERROR_MSGS:j7}=Ur(),Dg=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=j7.OP_AUTH_PERMS_ERROR,this.unauthorized_access={},this.invalid_schema_items=[]}handleUnauthorizedItem(t){return this.invalid_schema_items=[],this.unauthorized_access=[t],this}handleInvalidItem(t){return this.invalid_schema_items=[t],this.unauthorized_access=[],this}addInvalidItem(t,r,n){if(r&&n){let s=`${r}_${n}`;if(this.unauthorized_access[s])return}this.invalid_schema_items.push(t)}addUnauthorizedTable(t,r,n){let s=new vv(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let u=new J7(c,s[c]);i.push(u)});let o=`${r}_${n}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new vv(r,n,[],i);this.unauthorized_access[o]=c}}getPermsResponse(){let t=Object.values(this.unauthorized_access);return t.length>0||this.invalid_schema_items.length>0?(this.unauthorized_access=t,this):null}};Bv.exports=Dg});var Kf=g((Bme,Xv)=>{"use strict";var Mg=qr(),Vf=Gr(),pn=bu(),ll=bs(),Pg=ci(),X7=$S(),Z7=GL(),_l=_n(),$f=ZS(),Dt=$(),eee=rT(),tee=of(),ree=vT(),nee=cf(),see=HT(),iee=xT(),oee=FT(),aee=VT(),Ug=KT(),Hs=z(),cee=HP(),vg=jT(),Gv=ju(),mn=P(),qv=$U(),uee=Ra(),Fv=Du(),kv=(Mf(),ie(tl)),Vv=Er(),Jr=yg(),lee=require("alasql"),$v=kf(),Yv=Hf(),Kv=Lg(),{handleHDBError:wr,hdb_errors:Wv}=se(),{HDB_ERROR_MSGS:Wt,HTTP_STATUS_CODES:cl}=Wv,V=new Map,Qv="delete",Ii="insert",xs="read",Oo="update",ul="describe",Hv=ll.describeSchema.name,xv=ll.describeTable.name,zv={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},_ee="catchup",dee="handleGetJob",fee="handleGetJobsByStartDate",Yf={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},Eee=[pn.createTable.name,pn.createAttribute.name,pn.dropTable.name,pn.dropAttribute.name],Jv={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},W=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};V.set(Mg.insert.name,new W(!1,[Ii]));V.set(Mg.update.name,new W(!1,[Oo]));V.set(Mg.upsert.name,new W(!1,[Ii,Oo]));V.set(Vf.searchByConditions.name,new W(!1,[xs]));V.set(Vf.searchByHash.name,new W(!1,[xs]));V.set(Vf.searchByValue.name,new W(!1,[xs]));V.set(Vf.search.name,new W(!1,[xs]));V.set(pn.createSchema.name,new W(!0,[]));V.set(pn.createTable.name,new W(!0,[]));V.set(pn.createAttribute.name,new W(!1,[Ii]));V.set(pn.dropSchema.name,new W(!0,[]));V.set(pn.dropTable.name,new W(!0,[]));V.set(pn.dropAttribute.name,new W(!0,[]));V.set(ll.describeSchema.name,new W(!1,[xs]));V.set(ll.describeTable.name,new W(!1,[xs]));V.set(Pg.deleteRecord.name,new W(!1,[Qv]));V.set(_l.addUser.name,new W(!0,[]));V.set(_l.alterUser.name,new W(!0,[]));V.set(_l.dropUser.name,new W(!0,[]));V.set(_l.listUsersExternal.name,new W(!0,[]));V.set($f.listRoles.name,new W(!0,[]));V.set($f.addRole.name,new W(!0,[]));V.set($f.alterRole.name,new W(!0,[]));V.set($f.dropRole.name,new W(!0,[]));V.set(eee.name,new W(!0,[]));V.set(tee.name,new W(!0,[]));V.set(ree.name,new W(!0,[]));V.set(nee.name,new W(!0,[]));V.set(see.name,new W(!0,[]));V.set(iee.name,new W(!0,[]));V.set(Ug.setRoutes.name,new W(!0,[]));V.set(Ug.getRoutes.name,new W(!0,[]));V.set(Ug.deleteRoutes.name,new W(!0,[]));V.set(Vv.setConfiguration.name,new W(!0,[]));V.set(oee.clusterStatus.name,new W(!0,[]));V.set(aee.name,new W(!0,[]));V.set(vg.getFingerprint.name,new W(!0,[]));V.set(vg.setLicense.name,new W(!0,[]));V.set(Pg.deleteFilesBefore.name,new W(!0,[]));V.set(Pg.deleteAuditLogsBefore.name,new W(!0,[]));V.set(Gv.restart.name,new W(!0,[]));V.set(Gv.restartService.name,new W(!0,[]));V.set(X7.name,new W(!0,[]));V.set(Z7.name,new W(!0,[xs]));V.set(uee.systemInformation.name,new W(!0,[]));V.set(Vv.getConfiguration.name,new W(!0,[]));V.set($v.readTransactionLog.name,new W(!0,[]));V.set($v.deleteTransactionLogsBefore.name,new W(!0,[]));V.set(Yv.installModules.name,new W(!0,[]));V.set(Yv.auditModules.name,new W(!0,[]));V.set(Fv.createTokens.name,new W(!1,[]));V.set(Fv.refreshOperationToken.name,new W(!1,[]));V.set(kv.login.name,new W(!1,[]));V.set(kv.logout.name,new W(!1,[]));V.set(Jr.customFunctionsStatus.name,new W(!0,[]));V.set(Jr.getCustomFunctions.name,new W(!0,[]));V.set(Jr.getComponents.name,new W(!0,[]));V.set(Jr.getComponentFile.name,new W(!0,[]));V.set(Jr.setComponentFile.name,new W(!0,[]));V.set(Jr.dropComponent.name,new W(!0,[]));V.set(Jr.getCustomFunction.name,new W(!0,[]));V.set(Jr.setCustomFunction.name,new W(!0,[]));V.set(Jr.dropCustomFunction.name,new W(!0,[]));V.set(Jr.addComponent.name,new W(!0,[]));V.set(Jr.dropCustomFunctionProject.name,new W(!0,[]));V.set(Jr.packageComponent.name,new W(!0,[]));V.set(Jr.deployComponent.name,new W(!0,[]));V.set(vg.getRegistrationInfo.name,new W(!1,[]));V.set(_l.userInfo.name,new W(!1,[]));V.set(ll.describeAll.name,new W(!1,[]));V.set(dee,new W(!1,[]));V.set(fee,new W(!0,[]));V.set(_ee,new W(!0,[]));V.set(Yf.CSV_DATA_LOAD,new W(!1,[Ii,Oo]));V.set(Yf.CSV_URL_LOAD,new W(!1,[Ii,Oo]));V.set(Yf.CSV_FILE_LOAD,new W(!1,[Ii,Oo]));V.set(Yf.IMPORT_FROM_S3,new W(!1,[Ii,Oo]));V.set(Jv.EXPORT_TO_S3,new W(!0,[]));V.set(Jv.EXPORT_LOCAL,new W(!0,[]));V.set(mn.VALID_SQL_OPS_ENUM.DELETE,new W(!1,[Qv]));V.set(mn.VALID_SQL_OPS_ENUM.SELECT,new W(!1,[xs]));V.set(mn.VALID_SQL_OPS_ENUM.INSERT,new W(!1,[Ii]));V.set(mn.VALID_SQL_OPS_ENUM.UPDATE,new W(!1,[Oo]));Xv.exports={verifyPerms:mee,verifyPermsAst:hee,verifyBulkLoadAttributePerms:See};function hee(e,t,r){if(Hs.isEmptyOrZeroLength(e))throw Dt.info("verify_perms_ast has an empty user parameter"),wr(new Error);if(Hs.isEmptyOrZeroLength(t))throw Dt.info("verify_perms_ast has an empty user parameter"),wr(new Error);if(Hs.isEmptyOrZeroLength(r))throw Dt.info("verify_perms_ast has a null operation parameter"),wr(new Error);try{let n=new Kv,s=new cee(e),i=s.getSchemas(),o=new Map;if((!i||i.length===0)&&s.affected_attributes&&s.affected_attributes.size>0)throw Dt.info("No schemas defined in verifyPermsAst(), will not continue."),wr(new Error);let c=!!t.role.permission.super_user,u=i.includes("system");if(u&&zv[r])throw wr(new Error,Wt.DROP_SYSTEM,cl.FORBIDDEN);if(c&&!u)return null;let _=qv.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof lee.yy.Select&&(e=s.updateAttributeWildcardsForRolePerms(_));for(let d=0;d<i.length;d++){let E=s.getTablesBySchemaName(i[d]);E&&o.set(i[d],E)}let l=jv(t,r,o,n);return l||(o.forEach((d,E)=>{for(let f=0;f<d.length;f++){let h=s.getAttributesBySchemaTableName(E,d[f]),p=Hg(t.role.permission,E,d[f]);Bg(h,p,r,d[f],E,n)}}),n.getPermsResponse())}catch(n){throw wr(n)}}a(hee,"verifyPermsAst");function mee(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Dt.info("null required parameter in verifyPerms"),wr(new Error,Wt.DEFAULT_INVALID_REQUEST,cl.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let n=e.action,s=e.schema??e.database,i=e.table,o=new Map;s&&i&&o.set(s,[i]);let c=new Kv;if(Hs.isEmptyOrZeroLength(e.hdb_user.role)||Hs.isEmptyOrZeroLength(e.hdb_user.role.permission))return Dt.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(Wt.USER_HAS_NO_PERMS(e.hdb_user.username));let u=!!e.hdb_user.role.permission.super_user,_=e.hdb_user.role.permission.structure_user,l=o.has(mn.SYSTEM_SCHEMA_NAME)||s===mn.SYSTEM_SCHEMA_NAME;if(l&&zv[r])throw wr(new Error,Wt.DROP_SYSTEM,cl.FORBIDDEN);if(u&&!l||_===!0&&(r===pn.createSchema.name||r===pn.dropSchema.name))return null;if(Eee.indexOf(r)>=0&&(_===!0||Array.isArray(_)))return _===!0||_.indexOf(s)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${s}'`);let d=qv.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===Hv||r===xv){if(s===mn.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Wt.SCHEMA_PERM_ERROR(s));if(!d.super_user){if(r===Hv&&(!d[s]||!d[s][ul]))return c.handleInvalidItem(Wt.SCHEMA_NOT_FOUND(s));if(r===xv&&(!d[s]||!d[s].tables[i]||!d[s].tables[i][ul]))return c.handleInvalidItem(Wt.TABLE_NOT_FOUND(s,i))}}let E=jv(e.hdb_user,r,o,c,n);if(E)return E;if(V.get(r)&&V.get(r).perms.length===0)return null;if(!u&&e.get_attributes&&mn.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let p=[],S=d[s].tables[i];S[mn.PERMS_CRUD_ENUM.READ]&&(S.attribute_permissions.length>0?S.attribute_permissions.filter(R=>R[mn.PERMS_CRUD_ENUM.READ]).forEach(R=>{p.push(R.attribute_name)}):p=global.hdb_schema[s][i].attributes.map(T=>T.attribute),e.get_attributes=p)}let f=pee(e),h=Hg(e.hdb_user.role.permission,s,i);return Bg(f,h,r,i,s,c,n),c.getPermsResponse()}a(mee,"verifyPerms");function jv(e,t,r,n,s){if(Hs.arrayHasEmptyValues([e,t,r]))throw Dt.info("hasPermissions has an invalid parameter"),wr(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||V.get(t).requires_su))return null;if(!V.get(t))throw Dt.info(`operation ${t} not found.`),wr(new Error,Wt.OP_NOT_FOUND(t),cl.BAD_REQUEST);if(V.get(t)&&V.get(t).requires_su)return Dt.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(Wt.OP_IS_SU_ONLY(t));let c=r.keys();for(let u of c){try{if(u&&!o[u]||o[u][ul]===!1){n.addInvalidItem(Wt.SCHEMA_NOT_FOUND(u));continue}}catch{n.addInvalidItem(Wt.SCHEMA_NOT_FOUND(u));continue}let _=r.get(u);for(let l of _){let d=o[u].tables[l];if(!d||d[ul]===!1)n.addInvalidItem(Wt.TABLE_NOT_FOUND(u,l));else try{let E=[],f=V.get(t).perms;!Hs.isEmpty(s)&&f.includes(s)&&(f=[s]);for(let h=0;h<f.length;h++){let p=f[h],S=d[p];(S==null||S===!1)&&(Dt.info(`Required ${p} permission not found for ${t} ${s?`${s} `:""}operation in role ${e.role.id}`),E.push(p))}E.length>0&&n.addUnauthorizedTable(u,l,E)}catch(E){let f=Wt.UNKNOWN_OP_AUTH_ERROR(t,u,l);throw Dt.error(f),Dt.error(E),wr(Wv.CHECK_LOGS_WRAPPER(f))}}}return r.size<2?n.getPermsResponse():null}a(jv,"hasPermissions");function Bg(e,t,r,n,s,i,o){if(!e||!t)throw Dt.info("no attributes specified in checkAttributePerms."),wr(new Error);let c=V.get(r).perms;if(!c||c==="")throw Dt.info(`no permissions found for ${r} in checkAttributePerms().`),wr(new Error);if(Hs.isEmptyOrZeroLength(t))return Dt.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let u={};for(let l of e){let d=t.get(l);if(d){if(d[ul]===!1){i.addInvalidItem(Wt.ATTR_NOT_FOUND(s,n,l),s,n);continue}if(c)for(let E of c){if(mn.TIME_STAMP_NAMES.includes(d.attribute_name)&&E!==xs)throw wr(new Error,Wt.SYSTEM_TIMESTAMP_PERMS_ERR,cl.FORBIDDEN);d[E]===!1&&(u[d.attribute_name]?u[d.attribute_name].push(E):u[d.attribute_name]=[E])}}else i.addInvalidItem(Wt.ATTR_NOT_FOUND(s,n,l),s,n)}let _=Object.keys(u);_.length>0&&i.addUnauthorizedAttributes(_,s,n,u)}a(Bg,"checkAttributePerms");function pee(e){let t=new Set;try{if(e.action)return t;if(e.operation===mn.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{t.add(r.search_attribute)}),e&&e.search_attribute&&t.add(e.search_attribute),!e.records||e.records.length===0){if(!e.get_attributes||!e.get_attributes.length===0)return t;for(let r=0;r<e.get_attributes.length;r++)t.add(e.get_attributes[r])}else for(let r=0;r<e.records.length;r++){let n=Object.keys(e.records[r]);for(let s=0;s<n.length;s++)t.add(n[s])}}catch(r){Dt.info(r)}return t}a(pee,"getRecordAttributes");function Hg(e,t,r){let n=new Map;if(Hs.isEmpty(e))return Dt.info("no hdb_user specified in getAttributePermissions"),n;if(e.super_user||!t||!r)return n;try{e[t].tables[r].attribute_permissions.forEach(s=>{n.has(s.attribute_name)||n.set(s.attribute_name,s)})}catch{Dt.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}a(Hg,"getAttributePermissions");function See(e,t,r,n,s,i,o){let c=new Set(i),u=Hg(e,n,s);Bg(c,u,t,s,n,o,r)}a(See,"verifyBulkLoadAttributePerms")});var Qf=g((xme,n0)=>{"use strict";n0.exports={evaluateSQL:Lee,processAST:r0,convertSQLToAST:t0,checkASTPermissions:e0};var Tee=qr(),Zv=require("util"),gee=Zv.callbackify(Tee.insert),Ree=Gr().search,Aee=OD().update,Oee=Zv.callbackify(Aee),bee=yD().convertDelete,wi=require("alasql"),yee=Kf(),Wf=$(),Nee=Od(),Iee=z(),dl=P(),{hdb_errors:wee,handleHDBError:xg}=se(),{HTTP_STATUS_CODES:Gg}=wee;Nee(wi);var Cee=403,Dee="There was a problem performing this insert. Please check the logs and try again.",qg=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function Lee(e,t){let r=e.parsed_sql_object;if(!r){r=t0(e.sql);let n,s=r.ast.statements[0];if(s instanceof wi.yy.Insert?n=s.into.databaseid:s instanceof wi.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof wi.yy.Update||s instanceof wi.yy.Delete?n=s.table.databaseid:Wf.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof wi.yy.Select)&&Iee.isEmptyOrZeroLength(n))return t("No schema specified",null)}r0(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}a(Lee,"evaluateSQL");function e0(e,t){let r;try{r=yee.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}a(e0,"checkASTPermissions");function t0(e){let t=new qg;if(!e)throw xg(new Error,"The 'sql' parameter is missing from the request body",Gg.BAD_REQUEST);try{let r=e.trim(),n=wi.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
|
|
19
|
+
`);throw n[1]?xg(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,Gg.BAD_REQUEST):xg(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",Gg.BAD_REQUEST)}return t}a(t0,"convertSQLToAST");function r0(e,t,r){try{let n=Mee;if(!e.bypass_auth&&!t.permissions_checked){let i=e0(e,t);if(i&&i.length>0)return r(Cee,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case dl.VALID_SQL_OPS_ENUM.SELECT:n=Ree,s=t.ast.statements[0];break;case dl.VALID_SQL_OPS_ENUM.INSERT:n=Pee;break;case dl.VALID_SQL_OPS_ENUM.UPDATE:n=Oee;break;case dl.VALID_SQL_OPS_ENUM.DELETE:n=bee;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}n(s,(i,o)=>{if(i){r(i);return}r(null,o)})}catch(n){return r(n)}}a(r0,"processAST");function Mee(e,t){Wf.info(e),t("unknown sql statement")}a(Mee,"nullFunction");function Pee({statement:e,hdb_user:t},r){let n=e.into,s={schema:n.databaseid,table:n.tableid,operation:"insert",hdb_user:t},i=e.columns.map(o=>o.columnid);try{s.records=Uee(i,e.values)}catch(o){return r(o)}gee(s,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){Wf.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a(Pee,"convertInsert");function Uee(e,t){try{return t.map(r=>{if(e.length!==r.length)throw"number of values do not match number of columns in insert";let n={};return r.forEach((s,i)=>{if(s.columnid)throw"cannot use a column in insert value";"value"in s?n[e[i]]=s.value:n[e[i]]=wi.compile(`SELECT ${s.toString()} AS [${dl.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw Wf.error(r),new Error(Dee)}}a(Uee,"createDataObjects")});var Fg=g((qme,i0)=>{"use strict";var{S3:vee,GetObjectCommand:Bee}=require("@aws-sdk/client-s3");i0.exports={getFileStreamFromS3:Hee,getS3AuthObj:s0};async function Hee(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await s0(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new Bee(r))).Body}a(Hee,"getFileStreamFromS3");function s0(e,t,r){return new vee({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(s0,"getS3AuthObj")});var zf=g((kme,E0)=>{"use strict";var Vg=Gr(),xee=Qf(),Gee=Fg(),{AsyncParser:qee,Transform:Fee}=require("json2csv"),El=require("stream"),jr=z(),kg=require("fs-extra"),kee=require("path"),Sn=$(),{promisify:c0}=require("util"),fl=z(),{handleHDBError:bt,hdb_errors:Vee}=se(),{HDB_ERROR_MSGS:Cr,HTTP_STATUS_CODES:yt}=Vee,{streamAsJSON:$ee}=(om(),ie(Ub)),{Upload:Yee}=require("@aws-sdk/lib-storage"),o0=["search_by_value","search_by_hash","sql","search_by_conditions"],a0=["json","csv"],u0="json",l0="csv",Kee="Successfully exported JSON locally.",Wee="Successfully exported CSV locally.",Qee=1e3,zee=Vg.searchByHash,Jee=Vg.searchByValue,jee=c0(xee.evaluateSQL),Xee=c0(El.finished);E0.exports={export_to_s3:rte,export_local:Zee,toCsvStream:_0};async function Zee(e){Sn.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=d0(e);if(!jr.isEmpty(t))throw Sn.error(t),bt(new Error,t,yt.BAD_REQUEST,void 0,void 0,!0);if(jr.isEmpty(e.path))throw Sn.error(Cr.MISSING_VALUE("path")),bt(new Error,Cr.MISSING_VALUE("path"),yt.BAD_REQUEST,void 0,void 0,!0);let r=(jr.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(kee.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=jr.buildFolderPath(e.path,r);await ete(e.path);let s=await f0(e);return await tte(n,e.format,s)}a(Zee,"export_local");async function ete(e){if(Sn.trace("in confirmPath"),jr.isEmptyOrZeroLength(e))throw bt(new Error,`Invalid path: ${e}`,yt.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await kg.stat(e)}catch(r){let n;throw r.code==="ENOENT"?n=`path '${e}' does not exist`:r.code==="EACCES"?n=`access to path '${e}' is denied`:n=r.message,Sn.error(n),bt(new Error,n,yt.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 Sn.error(r),bt(new Error,r,yt.BAD_REQUEST,void 0,void 0,!0)}return!0}a(ete,"confirmPath");async function tte(e,t,r){if(Sn.trace("in saveToLocal"),fl.isEmptyOrZeroLength(e))throw bt(new Error,Cr.INVALID_VALUE("file_path"),yt.BAD_REQUEST,void 0,void 0,!0);if(fl.isEmptyOrZeroLength(t))throw bt(new Error,Cr.INVALID_VALUE("Source format"),yt.BAD_REQUEST,void 0,void 0,!0);if(fl.isEmpty(r))throw bt(new Error,Cr.NOT_FOUND("Data"),yt.BAD_REQUEST,void 0,void 0,!0);if(t===u0){let n=kg.createWriteStream(e);return $ee(r).pipe(n),await Xee(n),{message:Kee,path:e}}else if(t===l0){let n=kg.createWriteStream(e),s=El.Readable.from(r),i={},o=r.getColumns?.();o&&(i.fields=o.map(l=>({label:l,value:l})));let c={objectMode:!0};return await new qee(i,c).fromInput(s).toOutput(n).promise(!1),{message:Wee,path:e}}throw bt(new Error,Cr.INVALID_VALUE("format"),yt.BAD_REQUEST)}a(tte,"saveToLocal");async function rte(e){if(!e.s3||Object.keys(e.s3).length===0)throw bt(new Error,Cr.MISSING_VALUE("S3 object"),yt.BAD_REQUEST);if(jr.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw bt(new Error,Cr.MISSING_VALUE("aws_access_key_id"),yt.BAD_REQUEST);if(jr.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw bt(new Error,Cr.MISSING_VALUE("aws_secret_access_key"),yt.BAD_REQUEST);if(jr.isEmptyOrZeroLength(e.s3.bucket))throw bt(new Error,Cr.MISSING_VALUE("bucket"),yt.BAD_REQUEST);if(jr.isEmptyOrZeroLength(e.s3.key))throw bt(new Error,Cr.MISSING_VALUE("key"),yt.BAD_REQUEST);if(jr.isEmptyOrZeroLength(e.s3.region))throw bt(new Error,Cr.MISSING_VALUE("region"),yt.BAD_REQUEST);let t=d0(e);if(!jr.isEmpty(t))throw bt(new Error,t,yt.BAD_REQUEST);Sn.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await f0(e)}catch(u){throw Sn.error(u),u}let n,s=await Gee.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new El.PassThrough;if(e.format===l0){i=e.s3.key+".csv";let u=_0(r,r.getColumns?.());u.on("error",_=>{throw _}),u.pipe(o)}else if(e.format===u0){i=e.s3.key+".json";let u=new El.Readable;u.pipe(o),u.on("error",d=>{throw d}),u.push("[");let _=r.length,l="";for(let[d,E]of r.entries()){let f=d===_-1?JSON.stringify(E):JSON.stringify(E)+",";l+=f,d!==0&&d%Qee===0&&(u.push(l),l="")}l.length!==0&&u.push(l),u.push("]"),u.push(null)}else throw bt(new Error,Cr.INVALID_VALUE("format"),yt.BAD_REQUEST);return new Yee({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(rte,"export_to_s3");function _0(e,t){let r=El.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),n={};t&&(n.fields=t.map(o=>({label:o,value:o})));let s={objectMode:!0},i=new Fee(n,s);return r.pipe(i)}a(_0,"toCsvStream");function d0(e){if(Sn.trace("in exportCoreValidation"),jr.isEmpty(e.format))return"format missing";if(a0.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${a0.join(", ")}`;let t=e.search_operation.operation;if(jr.isEmpty(t))return"search_operation.operation missing";if(o0.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${o0.join(", ")}`}a(d0,"exportCoreValidation");async function f0(e){Sn.trace("in getRecords");let t,r;if(fl.isEmpty(e.search_operation)||fl.isEmptyOrZeroLength(e.search_operation.operation))throw bt(new Error,Cr.INVALID_VALUE("Search operation"),yt.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=Jee;break;case"search_by_hash":t=zee;break;case"search_by_conditions":t=Vg.searchByConditions;break;case"sql":t=jee;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Sn.error(r),bt(new Error,r,yt.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(f0,"getRecords")});var O0={};Fe(O0,{contentTypes:()=>Wg,findBestSerializer:()=>Xf,getDeserializer:()=>yo,registerContentHandlers:()=>Qg,serialize:()=>Zf,serializeMessage:()=>Ro});function nte(e){try{return e?.[0]===123?Kg(e):e}catch{return e}}function Qg(e){e.register(ite,{serializers:[{regex:/^application\/json$/,serializer:Cc},{regex:/^application\/cbor$/,serializer:function(t){return new bo.EncoderStream(ml).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?jf.Readable.from((0,_s.encodeIter)(t,ml)):(0,_s.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,Jf.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,_s.unpack)(r))}catch(s){s.statusCode=400,n(s)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,bo.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function Xf(e){let t=e.headers.asObject||e.headers,r=e.requestedContentType??t.accept,n,s=0,i,o,c=r?r.toLowerCase().split(/\s*,\s*/):[];for(let u of c){let[_,...l]=u.split(/\s*;\s*/),d=1,E={q:1};for(let h of l){let p=h.indexOf("=");E[h.substring(0,p)]=h.substring(p+1)}d=+E.q;let f=Ft.get(_);if(f){let h=(f.q||1)*d;h>s&&(n=f,i=f.type||_,s=h,o=E)}}if(!n){if(r)throw new S0.ClientError("No supported content types found in Accept header, supported types include: "+Array.from(Ft.keys()).join(", "),406);n=Ft.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:o}}function Zf(e,t,r){let n=m0&&t.headers.asObject?.["accept-encoding"]?.includes("br"),s;if(e?.contentType!=null&&e.data!=null)r.headers.set("Content-Type",e.contentType),r.headers.set("Vary","Accept-Encoding"),s=e.data;else if(e instanceof Uint8Array)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),s=e;else{let i=Xf(t);if(i.serializer.compressible===!1&&(n=!1),r.headers.set("Vary","Accept, Accept-Encoding"),r.headers.set("Content-Type",i.type),typeof e=="object"&&(e[Symbol.iterator]||e[Symbol.asyncIterator])&&i.serializer.serializeStream){let o=i.serializer.serializeStream(e,r);return n&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,Gs.createBrotliCompress)({params:{[Gs.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?Gs.constants.BROTLI_MODE_TEXT:Gs.constants.BROTLI_MODE_GENERIC,[Gs.constants.BROTLI_PARAM_QUALITY]:2}}))),o}s=i.serializer.serialize(e,r)}return n&&s?.length>m0?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,Gs.brotliCompress)(s,(c,u)=>{c?o(c):i(u)}))):s}function Ro(e,t){if(e?.contentType!=null&&e.data!=null)return e.data;if(!t)return hl(e);let r=t.serialize;if(r)return r(e);let n=Xf(t);return r=t.serialize=n.serializer.serialize,r(e)}function ote(e){return new Promise((t,r)=>{let n=[];e.on("data",s=>n.push(s)),e.on("end",()=>t(Buffer.concat(n))),e.on("error",r)})}function yo(e,t){e||(e="");let r=e.indexOf(";"),n;r>-1&&(n=e.slice(r+1),e=e.slice(0,r));let s=Ft.get(e);if(t){if(s?.deserializeStream)return s.deserializeStream;let i=Ft.get(e)?.deserialize||p0(e,n);return o=>ote(o).then(i)}return e&&Ft.get(e)?.deserialize||p0(e,n)}function p0(e,t){if(e.startsWith("text/")){let r=t?.match(/charset=(.+)/)?.[1]||"utf-8";return n=>({contentType:e,data:n.toString(r)})}else return e==="application/octet-stream"?r=>r:r=>{if(!e)try{if(r?.[0]===123)return Kg(r)}catch{}return{contentType:e||"application/octet-stream",data:r}}}function ate(e,t){return{[Symbol.asyncIterator](){let r=e[Symbol.asyncIterator]?e[Symbol.asyncIterator]():e[Symbol.iterator]();return{next(){let n=r.next();return n.then?n.then(s=>({value:t(s.value),done:s.done})):{value:t(n.value),done:n.done}},return(n){return r.return(n)},throw(n){return r.throw(n)}}}}}var Jf,_s,bo,Gs,S0,jf,T0,$g,Yg,g0,R0,hl,Kg,ml,Ft,Wg,h0,A0,ste,ite,m0,Da=Re(()=>{om();Jf=x(zf()),_s=require("msgpackr"),bo=require("cbor-x"),Gs=require("zlib"),S0=x(se()),jf=require("stream");lr();T0=require("../index"),$g=x(ee()),Yg=x(P()),g0=x(require("yaml")),R0=$g.default.get(Yg.CONFIG_PARAMS.SERIALIZATION_BIGINT)!==!1,hl=R0?qi:JSON.stringify,Kg=R0?im:JSON.parse,ml={useRecords:!1,useToJSON:!0},Ft=new Map,Wg=Ft;at.contentTypes=Wg;(0,T0._assignPackageExport)("contentTypes",Wg);Ft.set("application/json",{serializeStream:Cc,serialize:hl,deserialize:Kg,q:.8});h0=new bo.Encoder(ml);Ft.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new bo.EncoderStream(ml).end(e)},serialize:h0.encode,deserialize:h0.decode,q:1});Ft.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?jf.Readable.from((0,_s.encodeIter)(e,ml)):(0,_s.pack)(e)},serialize:_s.pack,deserialize:_s.unpack,q:.9});Ft.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),(0,Jf.toCsvStream)(e,e?.getColumns?.())},serialize(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),e&&!e[Symbol.iterator]&&(e=[e.toJSON?e.toJSON():e]),(0,Jf.toCsvStream)(e,e?.getColumns?.())},q:.1});Ft.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.2});Ft.set("text/yaml",{serialize(e){return g0.stringify(e,{aliasDuplicateObjects:!1})},q:.7});Ft.set("text/event-stream",{serializeStream:function(e){return jf.Readable.from(ate(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+`
|
|
20
20
|
`),e.data){let r=e.data;typeof r=="object"&&(r=hl(r)),t+="data: "+r+`
|
|
21
21
|
`}return e.id&&(t+="id: "+e.id+`
|
|
22
22
|
`),e.retry&&(t+="retry: "+e.retry+`
|
|
@@ -25,8 +25,8 @@ Database backup has not been removed and can be found here: ${s}`;Wu.error(u),co
|
|
|
25
25
|
|
|
26
26
|
`:`data: ${e}
|
|
27
27
|
|
|
28
|
-
`},compressible:!1,q:.8});Ft.set("application/x-www-form-urlencoded",{deserialize(e){let t={};for(let[r,n]of new URLSearchParams(e))if(t.hasOwnProperty(r)){let s=t[r];Array.isArray(s)?s.push(n):t.key=[s,n]}else t[r]=n},serialize(e){let t=new URLSearchParams;for(let r in e)t.set(r,e);return t.toString()}});R0={type:"application/json",serializeStream:Cc,serialize:hl,deserialize:nte,q:.5};Ft.set("*/*",R0);Ft.set("",R0);a(nte,"tryJSONParse");a(Qg,"registerContentHandlers");ste=require("fastify-plugin"),ite=ste(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=Xf(n.raw);s.type(c),s.serializer(function(u){return(o.serializeStream||o.serialize)(u,{headers:{set:(_,l)=>{s.header(_,l)}}})})}),r()},{name:"content-type-negotiation"});a(Xf,"findBestSerializer");h0=$g.default.get(Yg.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(Zf,"serialize");a(Ro,"serializeMessage");a(ote,"streamToBuffer");a(yo,"getDeserializer");a(m0,"deserializerUnknownType");a(ate,"transformIterable")});function jg(e,t,r,n,s,i,o,c){let u=e[0];if(t==="or"){let d=_(u);for(let f=1;f<e.length;f++){let h=e[f],p=_(h);d=d.concat(p)}let E=new Set;return d.filter(f=>{let h=f.key??f;return E.has(h)?!1:(E.add(h),!0)})}else{let d=_(u),E=l(e.slice(1),!0,u.estimated_count);return E.length>0?o(d,E):d}function _(d){return d.conditions?jg(d.conditions,d.operator,r,n,s,i,o,c):Ga(d,n,d.descending||s.reverse===!0,r,s.allowFullScan,c)}a(_,"executeCondition");function l(d,E,f){return d.map((h,p)=>{if(h.conditions){let R=h.operator==="or",N=l(h.conditions,!R,f);return R?(b,x)=>N.some(U=>U(b,x)):(b,x)=>N.every(U=>U(b,x))}let S=(h.attribute||h[0])===r.primaryKey,T=Tl(h,r,i,c,S,f);return E&&p<d.length-1&&f&&(f=mte(r.primaryStore,h.estimated_count,f)),T}).filter(Boolean)}a(l,"mapConditionsToFilters")}function Ga(e,t,r,n,s,i){let o=e[0]??e.attribute,c=e[1]??e.value,u=e.comparator;if(Array.isArray(o)){let R=o[0],N=Fs(n.attributes,R);if(N.relationship){if(o.length<2)throw new Xr.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let b=N.definition?.tableClass||N.elements?.definition?.tableClass,x=new Map,U=Ga({attribute:o.length>2?o.slice(1):o[1],value:c,comparator:u},t,r,b,s,x);if(N.relationship.to){i[o[0]]=x;let F=!!Fs(b.attributes,N.relationship.to)?.elements;U=dte(U,N,b.primaryStore,F,x)}if(N.relationship.from){let F=a(M=>Ga({attribute:N.relationship.from,value:M},t,r,n,s,x),"searchEntry");N.elements?(i[o[0]]=x,U=fte(U,N,b.primaryStore,x,F)):U=U.flatMap(F)}return U}else if(o.length===1)o=o[0];else throw new Xr.ClientError("Unable to query by attribute "+JSON.stringify(o))}let _,l,d,E;c instanceof Date&&(c=c.getTime());let f;switch(Xg[u]||u){case"lt":_=!0,l=c;break;case"le":_=!0,l=c,d=!0;break;case"gt":_=c,E=!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]=ds.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"equals":case void 0:_=c,l=c,d=!0;break;case"ne":if(c===null){_=c,E=!0;break}case"sort":case"contains":case"ends_with":_=!0,f=!0;break;default:throw new Xr.ClientError(`Unknown query comparator "${u}"`)}let h,p=o===n.primaryKey||o==null;if(typeof _=="string"&&_.length>Tn.MAX_SEARCH_KEY_LENGTH&&(_=_.slice(0,Tn.MAX_SEARCH_KEY_LENGTH)+Tn.OVERFLOW_MARKER,E=!1,h=Tl(e,n,null,i,p)),typeof l=="string"&&l.length>Tn.MAX_SEARCH_KEY_LENGTH&&(l=l.slice(0,Tn.MAX_SEARCH_KEY_LENGTH)+Tn.OVERFLOW_MARKER,d=!0,h=h??Tl(e,n,null,i,p)),r){let R=_;_=l,l=R,R=!E,E=!d,d=R}let S=p?n.primaryStore:n.indices[o];if(!S||S.isIndexing||f||c===null&&!S.indexNulls){if(s===!1&&!S)throw new Xr.ClientError(`"${o}" is not indexed, can not search for this attribute`,404);if(s===!1&&f)throw new Xr.ClientError(`Can not use ${u||"equal"} operator without combining with a condition that uses an index, can not search for attribute ${o}`,403);if(S?.isIndexing)throw new Xr.ServerError(`"${o}" is not indexed yet, can not search for this attribute`,503);if(c===null&&!S.indexNulls)throw new Xr.ClientError(`"${o}" is not indexed for nulls, index needs to be rebuilt to search for nulls, can not search for this attribute`,400);if(h=h??Tl(e,n,null,i,p),!h)throw new Xr.ClientError(`Unknown search operator ${e.comparator}`)}let T={start:_,end:l,inclusiveEnd:d,exclusiveStart:E,values:!0,versions:p,transaction:t,reverse:r};if(p){let R=S.getRange(T).map(h?function({key:N,value:b}){return this.isSync?b&&h(b)?N:Ci.SKIP:new Promise((x,U)=>setImmediate(()=>{try{x(b&&h(b)?N:Ci.SKIP)}catch(F){U(F)}}))}:N=>N.value==null?Ci.SKIP:N);return R.hasEntries=!0,R}else return S?S.getRange(T).map(h?function({key:R,value:N}){let b;return typeof R=="string"&&R.length>Tn.MAX_SEARCH_KEY_LENGTH?b=n.primaryStore.get(N):b={[o]:R},this.isSync?h(b)?N:Ci.SKIP:new Promise((x,U)=>setImmediate(()=>{try{x(h(b)?N:Ci.SKIP)}catch(F){U(F)}}))}:({value:R})=>R):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:R,value:N}){return this.isSync?N&&h(N)?R:Ci.SKIP:new Promise((b,x)=>setImmediate(()=>{try{b(N&&h(N)?R:Ci.SKIP)}catch(U){x(U)}}))})}function Fs(e,t){if(Array.isArray(t))if(t.length>1){let r=Fs(e,t[0]),n=(r?.definition?.tableClass||r?.elements.definition?.tableClass)?.attributes;return n?Fs(n,t.slice(1)):void 0}else t=t.toString();else typeof t!="string"&&(t=t.toString());return e.find(r=>r.name===t)}function dte(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i;s.hasMappings=!0;let o;return{next(){if(!i){let u=t.relationship.to,_=a((l,d)=>{let E=l;Array.isArray(l)&&(E=Gn(l),o=!0);let f=s.get(E);f?f.push(d):s.set(E,f=[d]),l!==E&&(f.key=l)},"add_entry");for(let l of e){let d=l.value??r.get(l.key??l),E=d?.[u];if(E!=null&&!s.filters?.some(f=>!f(d)))if(n)for(let f=0;f<E.length;f++)_(E[f],l);else _(E,l)}return i=(o?s:s.keys())[Symbol.iterator](),this.next()}let c=i.next();return c.done?c:{value:o?c.value[1].key||c.value[0]:c.value}}}}})}function fte(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i,o,c=new Set;return{next(){let u;if(o)for(;u=o.next(),!u.done;){let _=Gn(u.value);if(!c.has(_))return c.add(_),u}if(!i){let _=new Map;n.fromRecord=l=>l[t.relationship.from]?.filter?.(d=>_.has(Gn(d)));for(let l of e){if(n.filters){let d=r.get(l);if(n.filters.some(E=>!E(d)))continue}_.set(Gn(l),l)}return i=_.values()[Symbol.iterator](),this.next()}do{let _=i.next();return _.done?_:(o=s(_.value)[Symbol.iterator](),this.next())}while(!0)},return(){return o?.return?.()},throw(){return o?.throw?.()}}}})}function Tl(e,t,r,n,s,i){let o=e.comparator,c=e[0]??e.attribute,u=e[1]??e.value;if(Array.isArray(c)){if(c.length===0)return()=>!0;if(c.length===1)c=c[0];else if(c.length>1){let l=c[0],d=Fs(t.attributes,l),E=d.definition?.tableClass||d.elements.definition?.tableClass,f=n?.[l],h=Tl({attribute:c.length>2?c.slice(1):c[1],value:u,comparator:o},E,r,f?.[l]?.joined,c[1]===E.primaryKey,i);if(!h)return;if(f){f.filters||(f.filters=[]),f.filters.push(h);return}let p=t.propertyResolvers?.[l],S,T=a((R,N)=>{let b,x;if(p){if(p.from&&h.idFilter){if(!S)if(h.idFilter.idSet?.size===1){for(let F of h.idFilter.idSet)e={attribute:p.from,value:F};S=_(p.from,h.idFilter,!0,!0)}else S=_(p.from,h.idFilter,!1,!0);let U=S(R);return S.idFilter&&(T.idFilter=S.idFilter),U}x=p(R,r,N),b=x?.value}else b=R[l];return b?Array.isArray(b)?b.some(h):h(b,x):!1},"recordFilter");return T}}switch(u instanceof Date&&(u=u.getTime()),Xg[o]||o){case Tn.SEARCH_TYPES.EQUALS:case void 0:return _(c,l=>l===u,!0);case"contains":return _(c,l=>l?.toString().includes(u));case"ends_with":return _(c,l=>l?.toString().endsWith(u));case"starts_with":return _(c,l=>typeof l=="string"&&l.startsWith(u),!0);case"prefix":return Array.isArray(u)?u[u.length-1]==null&&(u=u.slice(0,-1)):u=[u],_(c,l=>{if(!Array.isArray(l))return!1;for(let d=0,E=u.length;d<E;d++)if(l[d]!==u[d])return!1;return!0},!0);case"between":return u[0]instanceof Date&&(u[0]=u[0].getTime()),u[1]instanceof Date&&(u[1]=u[1].getTime()),_(c,l=>(0,ds.compareKeys)(l,u[0])>=0&&(0,ds.compareKeys)(l,u[1])<=0,!0);case"gt":return _(c,l=>(0,ds.compareKeys)(l,u)>0);case"ge":return _(c,l=>(0,ds.compareKeys)(l,u)>=0);case"lt":return _(c,l=>(0,ds.compareKeys)(l,u)<0);case"le":return _(c,l=>(0,ds.compareKeys)(l,u)<=0);case"ne":return _(c,l=>(0,ds.compareKeys)(l,u)!==0);case"sort":return()=>!0;default:throw new Xr.ClientError(`Unknown query comparator "${o}"`)}function _(l,d,E,f){let h;E=E&&!s&&t?.indices[l]&&i>3,E&&(e.estimated_count==null&&tE(t)(e),h=e.estimated_count>>4,(isNaN(h)||h>=i)&&(E=!1));let p=0,S=3;function T(R){let N=R[l],b;if(typeof N!="object"||!N||f?b=d(N):Array.isArray(N)?b=N.some(d):N instanceof Date&&(b=d(N.getTime())),E&&(S++,!b&&!T.idFilter&&++p/S*(i-S)>h)){let x=Ga(e,r.transaction.getReadTxn(),!1,t).map(Gn),U=new Set(x);T.idFilter=F=>U.has(Gn(F)),T.idFilter.idSet=U}return b}return a(T,"recordFilter"),s&&(T.idFilter=d),T}a(_,"attributeComparator")}function tE(e){function t(r){if(r.estimated_count===void 0){if(r.conditions){let s;if(r.operator==="or"){s=0;for(let i of r.conditions)t(i),s+=i.estimated_count}else{s=1/0;for(let i of r.conditions)t(i),s=isFinite(s)?s*i.estimated_count/qs(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=Xg[n]||n,n===Tn.SEARCH_TYPES.EQUALS||!n){let s=r[0]??r.attribute;if(s==null||s===e.primaryKey)r.estimated_count=1;else if(Array.isArray(s)&&s.length>1){let i=Fs(e.attributes,s[0]),o=i.definition?.tableClass||i.elements.definition?.tableClass,c=tE(o)({value:r.value,attribute:s.length>2?s.slice(1):s[1],comparator:"equals"}),u=e.indices[i.relationship.from];r.estimated_count=c+(u?c*qs(e.indices[i.relationship.from])/(qs(o.primaryStore)||1):c)}else{let i=e.indices[s];r.estimated_count=i?i.getValuesCount(r[1]??r.value):1/0}}else if(n==="contains"||n==="ends_with"||n==="ne"){let s=r[0]??r.attribute,i=e.indices[s];r.value===null&&n==="ne"?r.estimated_count=qs(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else n==="starts_with"||n==="prefix"?r.estimated_count=lte*qs(e.primaryStore)+1:n==="between"?r.estimated_count=ute*qs(e.primaryStore)+1:n==="sort"?r.estimated_count=qs(e.primaryStore)+1:r.estimated_count=cte*qs(e.primaryStore)+1;typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return a(t,"estimateConditionForTable"),t}function rE(e){if(e)if(Di=e,Ha.lastIndex=0,Ete.test(e))try{let t=pl(new xa,"");if(Dr!==Di.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 ${Dr} in '${Di}'`,t}else{let t=new URLSearchParams(e);return t.conditions=t,t}}function pl(e,t){let r=Ha,n,s,i,o,c,u=decodeURIComponent,_;for(;n=r.exec(Di);){Dr=r.lastIndex;let[,l,d]=n;if(o){if(l)throw new SyntaxError(`expected operator, but encountered '${l}'`);o=!1,c=!1}else c=!0;let E;switch(d){case"=":if(s){if(l.length<=2)i=l;else throw new SyntaxError(`invalid FIQL operator ${l}`);u=zg}else{if(u=decodeURIComponent,i="equals",!l)throw new SyntaxError("attribute must be specified before equality comparator");s=Sl(l)}break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":if(i=_te[d],u=Jg[i]?zg:decodeURIComponent,!l)throw new SyntaxError(`attribute must be specified before comparator ${d}`);s=Sl(l);break;case"|":case"&":case"":case void 0:if(s==null){if(s===void 0)throw t?new SyntaxError(`expected '${t}', but encountered ${d[0]?"'"+d[0]+"'":"end of string"}}`):new SyntaxError(`no comparison specified before ${d?"'"+d+"'":"end of string"}`)}else{if(!e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");let h={comparator:i,attribute:s,value:u(l)};i==="eq"&&O0(h,l),eE(e,_),e.conditions.push(h)}d==="&"&&(_="and"),d==="|"&&(_="or"),s=void 0;break;case",":if(e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");e.push(Sl(l)),s=void 0;break;case"(":Ha.lastIndex=Dr;let f=pl(l?[]:new xa,")");switch(l){case"":eE(e,_),e.conditions.push(f);break;case"limit":switch(f.length){case 1:e.limit=+f[0];break;case 2:e.offset=+f[0],e.limit=f[1]-e.offset;break;default:throw new SyntaxError("limit must have 1 or 2 arguments")}break;case"select":Array.isArray(f[0])&&f.length===1&&!f[0].name?(e.select=f[0],e.select.asArray=!0):f.length===1?e.select=f[0]:f.length===2&&f[1]===""?e.select=f.slice(0,1):e.select=f;break;case"group-by":throw new SyntaxError("group by is not implemented yet");case"sort":e.sort=b0(f);break;default:throw new SyntaxError(`unknown query function call ${l}`)}Di[Dr]===","?r.lastIndex=++Dr:o=!0,s=null;break;case"{":if(e.conditions)throw new SyntaxError("property sets are not allowed in a queries");if(!l)throw new SyntaxError("property sets must have a defined parent property name");Ha.lastIndex=Dr,E=pl([],"}"),E.name=l,e.push(E),Di[Dr]===","?r.lastIndex=++Dr:o=!0;break;case"[":Ha.lastIndex=Dr,l?(E=pl(new xa,"]"),E.name=l):E=pl(e.conditions?new xa:[],"]"),e.conditions?(eE(e,_),e.conditions.push(E),s=null):e.push(E),Di[Dr]===","?r.lastIndex=++Dr:o=!0;break;case")":case"]":case"}":if(t===d[0]){if(e.conditions){if(s){let h={comparator:i||"equals",attribute:s,value:u(l)};i==="eq"&&O0(h,l),eE(e,_),e.conditions.push(h)}else if(l)throw new SyntaxError("no attribute or comparison specified")}else(l||e.length>0&&c)&&e.push(Sl(l));return e}else throw t?new SyntaxError(`expected '${t}', but encountered '${d[0]}'`):new SyntaxError(`unexpected token '${d[0]}'`);default:throw new SyntaxError(`unexpected operator '${d}'`)}if(t!==")"&&(r=s?hte:Ha,r.lastIndex=Dr),Dr===Di.length)return e}if(t)throw new SyntaxError(`expected '${t}', but encountered end of string`)}function eE(e,t){if(e.conditions.length>0)if(e.operator){if(e.operator!==t)throw new SyntaxError("Can not mix operators within a condition grouping")}else e.operator=t}function Sl(e){return e.indexOf(".")>-1?e.split(".").map(Sl):decodeURIComponent(e)}function zg(e){if(e==="null")return null;if(e.indexOf("/")>-1){let t=e.split("/"),r=new qa(t.length);for(let n=0,s=t.length;n<s;n++)r[n]=zg(t[n]);return r}if(e.indexOf(":")>-1){let[t,r]=e.split(":");if(t==="number")return+r;if(t==="boolean")return r==="true";if(t==="date")return new Date(isNaN(r)?decodeURIComponent(r):+r);if(t==="string")return decodeURIComponent(r);throw new Xr.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function O0(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new Xr.ClientError("wildcard can only be used at the end of a string")}function b0(e){let t=y0(e[0]);return e.length>1&&(t.next=b0(e.slice(1))),t}function y0(e){if(Array.isArray(e)){let t=y0(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 Gn(e){return Array.isArray(e)?e.join("\0"):e}function qs(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function mte(e,t,r){return t*r/qs(e)}var Xr,Tn,ds,Ci,cte,ute,lte,_te,Jg,Xg,Ete,Ha,hte,Dr,Di,xa,nE=Re(()=>{Xr=H(se()),Tn=H(ft()),ds=require("ordered-binary"),Ci=require("lmdb");cn();cte=.3,ute=.1,lte=.05,_te={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},Jg={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};a(jg,"executeConditions");a(Ga,"searchByIndex");a(Fs,"findAttribute");a(dte,"joinTo");a(fte,"joinFrom");Xg={eq:"equals",greater_than:"gt",greaterThan:"gt",greater_than_equal:"ge",greaterThanEqual:"ge",less_than:"lt",lessThan:"lt",less_than_equal:"le",lessThanEqual:"le",not_equal:"ne",notEqual:"ne",equal:"equals",sw:"starts_with",startsWith:"starts_with",ew:"ends_with",endsWith:"ends_with",ct:"contains",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(Tl,"filterByType");a(tE,"estimateCondition");Ete=/[()[\]|!<>.]|(=\w*=)/,Ha=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,hte=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;a(rE,"parseQuery");a(pl,"parseBlock");a(eE,"assignOperator");a(Sl,"decodeProperty");a(zg,"typedDecoding");a(O0,"wildcardDecoding");a(b0,"toSortObject");a(y0,"toSortEntry");xa=class{static{a(this,"Query")}constructor(){this.conditions=[]}[Symbol.iterator](){return this.conditions[Symbol.iterator]()}get(t){for(let r=0;r<this.conditions.length;r++){let n=this.conditions[r];if(n.attribute===t)return n.value}}};a(Gn,"flattenKey");a(qs,"estimatedEntryCount");a(mte,"intersectionEstimate")});function D0(e){let t={openapi:pte,info:{title:"HarperDB HTTP REST interface",version:(0,C0.version)()},paths:{},components:{schemas:{},securitySchemes:{basicAuth:{type:"http",scheme:"basic"},bearerAuth:{type:"http",scheme:"bearer",bearerFormat:"JWT"}}}},r=[{basicAuth:[],bearerAuth:[]}];for(let[,n]of e){if(!n.path)continue;let{path:s}=n,i=s.split("/").slice(-1),{attributes:o,primaryKey:c,prototype:u}=n.Resource;if(c=c??"id",!c)continue;let _={},l=[];if(o)for(let{type:N,name:b,elements:x,relationship:U,definition:F}of o){if(U)N==="array"?_[b]={type:"array",items:{$ref:Li+x.type}}:_[b]={$ref:Li+N};else{let M=F??x?.definition;if(M){if(!t.components.schemas[M.type]){let Q={};M.properties.forEach(J=>{Q[J.name]=new rR(Zg[J.type],J.type)}),t.components.schemas[M.type]=new w0(Q)}N==="array"?_[b]={type:"array",items:{$ref:Li+M.type}}:_[b]={$ref:Li+M.type}}else N==="array"?x.type==="Any"||x.type=="ID"?_[b]={type:"array",items:{format:x.type}}:_[b]={type:"array",items:new rR(Zg[x.type],x.type)}:N==="Any"||N=="ID"?_[b]={format:N}:_[b]=new rR(Zg[N],N)}l.push(new nR(b,"query",_[b]))}let d=Object.keys(_),E=new nR(c,"path",{format:"ID"});E.required=!0,E.description="primary key of record";let f=new nR("property","path",{enum:d});f.required=!0,t.components.schemas[i]=new w0(_);let h=u.post!==Resource.prototype.post||u.update,p=typeof u.put=="function",S=typeof u.get=="function",T=typeof u.delete=="function",R="/"+s+"/";h&&(t.paths[R]={},t.paths[R].post=new Ste(i,r,"create a new record auto-assigning a primary key")),S&&(t.paths[R]||(t.paths[R]={}),t.paths[R].get=new eR(l,r,{200:new tR({$ref:Li+i})},"search for records by the specified property name and value pairs")),T&&(t.paths[R]||(t.paths[R]={}),t.paths[R].delete=new I0(l,r,"delete all the records that match the provided query",{204:new N0})),R="/"+s+"/{"+c+"}",S&&(t.paths[R]={},t.paths[R].get=new eR([E],r,{200:new tR({$ref:Li+i})},"retrieve a record by its primary key")),p&&(t.paths[R]||(t.paths[R]={}),t.paths[R].put=new Tte([E],r,i,"create or update the record with the URL path that maps to the record's primary key")),T&&(t.paths[R]||(t.paths[R]={}),t.paths[R].delete=new I0([E],r,"delete a record with the given primary key",{204:new N0})),S&&f.schema.enum.length>0&&(R="/"+s+"/{"+c+"}.{property}",t.paths[R]={},t.paths[R].get=new eR([E,f],r,{200:new tR({enum:d})},"used to retrieve the specified property of the specified record"))}return t}function Ste(e,t,r){this.description=r,this.requestBody={content:{"application/json":{schema:{$ref:Li+e}}}},this.security=t,this.responses={200:{description:sR,headers:{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}},content:{"application/json":{schema:{type:"string",format:"ID"}}}}}}function eR(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function tR(e){this.description=sR,this.content={"application/json":{schema:e}}}function N0(){this.description="successfully processed request, no content returned to client"}function Tte(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Li+r}}}},this.responses={200:{description:sR}}}function I0(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function w0(e){this.type="object",this.properties=e}function rR(e,t){this.type=e,this.format=t}function nR(e,t,r){this.name=e,this.in=t,this.schema=r}var C0,pte,Zg,Li,sR,L0=Re(()=>{C0=H(Zd()),pte="3.0.3",Zg={Int:"integer",Float:"number",Long:"integer",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer",array:"array"},Li="#/components/schemas/",sR="successful operation";a(D0,"generateJsonApi");a(Ste,"Post");a(eR,"Get");a(tR,"Response200");a(N0,"Response204");a(Tte,"Put");a(I0,"Delete");a(w0,"ResourceSchema");a(rR,"Type");a(nR,"Parameter")});var iE={};Fe(iE,{start:()=>Ate});async function Rte(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&rE(e);let s=new Ni;try{e.responseHeaders=s;let i=e.url.slice(1),o,c;if(i!==M0){let h=sE.getMatch(i);if(!h)return t(e);e.handlerPath=h.path,o={url:h.relativeURL,async:!0},c=h.Resource}let u=r["cache-control"];if(u){u=u.toLowerCase();let h=u.match(/max-age=(\d+)/)?.[1];h&&(e.expiresAt=h*1e3+Date.now()),u.includes("only-if-cached")&&(e.onlyIfCached=!0),u.includes("no-cache")&&(e.noCache=!0),u.includes("no-store")&&(e.noCacheStore=!0),u.includes("stale-if-error")&&(e.staleIfError=!0),u.includes("must-revalidate")&&(e.mustRevalidate=!0)}let _=await rt(e,()=>{if(r["content-length"]||r["transfer-encoding"])try{e.data=yo(r["content-type"],!0)(e.body,e.headers)}catch(h){throw new Fa.ClientError(h,400)}if(e.authorize=!0,i===M0&&n==="GET"){if(e?.user?.role?.permission?.super_user)return D0(sE);throw new Fa.ServerError("Forbidden",403)}switch(n){case"GET":case"HEAD":return c.get(o,e);case"POST":return c.post(o,e.data,e);case"PUT":return c.put(o,e.data,e);case"DELETE":return c.delete(o,e);case"PATCH":return c.patch(o,e.data,e);case"OPTIONS":s.setIfNone("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return c.connect(o,null,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return c.query(o,e.data,e);case"COPY":return c.copy(o,r.destination,e);case"MOVE":return c.move(o,r.destination,e);case"BREW":throw new Fa.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new Fa.ServerError(`Method ${n} is not recognized`,501)}}),l=200,d;if(_==null)l=n==="GET"||n==="HEAD"?404:204,iR.lastModified&&e.lastModified&&s.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(d=e.lastModified){gte[0]=d;let h=String.fromCharCode(34,(Qt[0]&63)+62,(Qt[0]>>6)+(Qt[1]<<2&63)+62,(Qt[1]>>4)+(Qt[2]<<4&63)+62,(Qt[2]>>2)+62,(Qt[3]&63)+62,(Qt[3]>>6)+(Qt[4]<<2&63)+62,(Qt[4]>>4)+(Qt[5]<<4&63)+62,(Qt[5]>>2)+62,(Qt[6]&63)+62,(Qt[6]>>6)+(Qt[7]<<2&63)+62,34),p=r["if-none-match"];p&&h==p?(_?.onDone&&_.onDone(),l=304,_=void 0):s.setIfNone("ETag",h),iR.lastModified&&s.setIfNone("Last-Modified",new Date(d).toUTCString())}e.createdResource&&(l=201),e.newLocation&&s.setIfNone("Location",e.newLocation);let E={status:l,headers:s,body:void 0},f=_?.wasLoadedFromSource?.();return f!==void 0&&(E.wasCacheMiss=f,!f&&d&&s.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||d))/1e3))),_!==void 0&&(E.body=Zf(_,e,E),n==="HEAD"&&(E.body=void 0)),E}catch(i){i.statusCode?i.statusCode===500?No.warn(i):No.info(i):No.error(i),i.statusCode===405&&(i.method&&(i.message+=` to handle HTTP method ${i.method.toUpperCase()||""}`),i.allow&&(i.allow.push("trace","head","options"),s.setIfNone("Allow",i.allow.map(c=>c.toUpperCase()).join(", "))));let o={status:i.statusCode||500,headers:s,body:void 0};return o.body=Zf(i.contentType?i:i.toString(),e,o),o}}function Ate(e){iR=e,!P0&&(P0=!0,sE=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return Rte(t,r)},e),e.server.ws(async(t,r,n)=>{gl++;let s=new In;U0||(U0=!0,mu(u=>{gl>0&&u.push({metric:"ws-connections",connections:gl,byThread:!0})}));let i;t.on("error",u=>{i=!0,No.warn(u)});let o;t.on("message",a(function(_){o||(o=yo(r.requestedContentType??r.headers.asObject["content-type"],!1));let l=o(_);s.push(l)},"message"));let c;t.on("close",()=>{gl--,Wr(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()});try{await n;let u=r.url.slice(1),_=sE.getMatch(u);if(Wr(!!_,"connection","ws","connect"),_){r.handlerPath=_.path,Sr(h=>({count:h.count,total:gl}),"connections",r.handlerPath,"connect","ws"),r.authorize=!0;let l={url:_.relativeURL,async:!0},d=_.Resource;c=(await rt(r,()=>d.connect(l,s,r)))[Symbol.asyncIterator]();let f;for(;!(f=await c.next()).done;){let h=Ro(f.value,r);t.send(h),Sr(h.length,"bytes-sent",r.handlerPath,"message","ws")}}else return t.close(1011,`No resource was found to handle ${r.pathname}`)}catch(u){t.close(Ote[u.statusCode]||1011,u.toString()),t.close("login failed")}t.close()},e))}var No,Fa,Qt,gte,iR,M0,P0,sE,U0,gl,Ote,v0=Re(()=>{Da();Ds();No=H($()),Fa=H(se());nE();Ic();so();el();L0();Qt=new Uint8Array(8),gte=new Float64Array(Qt.buffer,0,1),iR={},M0="openapi";a(Rte,"http");gl=0;a(Ate,"start");Ote={401:3e3,403:3003}});var oR=g((ape,B0)=>{var{recordAction:oE,recordActionBinary:bte}=(Ds(),ie(pu)),yte=require("fastify-plugin"),Nte=200;B0.exports=yte(function(e,t,r){e.addHook("onResponse",async(n,s)=>{let i=s.elapsedTime}),e.addHook("onSend",async(n,s,i)=>{let o=s.elapsedTime,c=performance.now(),u=s.request.routeOptions,_,l,d;u.config?.isOperation?(_=n.body?.operation,l="operation"):(_=u.url,l="fastify-route",d=u.method),oE(o,"duration",_,d,l),bte(s.raw.statusCode<400,"success",_,d,l);let E=Nte;i?.pipe?(i.on("data",S=>{E+=S.length}),i.on("end",()=>{oE(performance.now()-c,"transfer",_,d,l),oE(E,"bytes-sent",_,d,l)})):(E+=i?.length||0,oE(E,"bytes-sent",_,d,l));let f=o.toFixed(3),h=s.getHeader("Server-Timing"),p=`db;dur=${f}`;s.header("Server-Timing",h?`${h}, ${p}`:p)}),r()},{name:"hdb-request-time"})});var dR=g((lpe,q0)=>{var lE=require("clone"),_E=Xe(),Ite=z(),cE=P(),cpe=$(),aR=require("fs"),uR=require("joi"),{string:uE}=uR.types(),{hdb_errors:wte,handleHDBError:aE}=se(),{HDB_ERROR_MSGS:upe,HTTP_STATUS_CODES:cR}=wte,{common_validators:ka}=jn(),H0=" is required",Cte=["insert","update","upsert"],lR={database:{presence:!1,format:ka.schema_format,length:ka.schema_length},schema:{presence:!1,format:ka.schema_format,length:ka.schema_length},table:{presence:!0,format:ka.schema_format,length:ka.schema_length},action:{inclusion:{within:Cte,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},Dte={schema:uE.required(),table:uE.required(),action:uE.valid("insert","update","upsert")},{AWS_ACCESS_KEY:Lte,AWS_SECRET:Mte,AWS_BUCKET:Pte,AWS_FILE_KEY:Ute,REGION:vte}=cE.S3_BUCKET_AUTH_KEYS,Bte={s3:{presence:!0},[`s3.${Lte}`]:{presence:!0,type:"String"},[`s3.${Mte}`]:{presence:!0,type:"String"},[`s3.${Pte}`]:{presence:!0,type:"String"},[`s3.${Ute}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${vte}`]:{presence:!0,type:"String"}},x0=lE(lR);x0.data.presence={message:H0};var G0=lE(lR);G0.file_path.presence={message:H0};var Hte=Object.assign(lE(lR),Bte),_R=lE(Dte);_R.csv_url=uE.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();_R.passthrough_headers=uR.object();function xte(e){let t=_E.validateObject(e,x0);return dE(e,t)}a(xte,"dataObject");function Gte(e){let t=_E.validateBySchema(e,uR.object(_R));return dE(e,t)}a(Gte,"urlObject");function qte(e){let t=_E.validateObject(e,G0);return dE(e,t)}a(qte,"fileObject");function Fte(e){let t=_E.validateObject(e,Hte);return dE(e,t)}a(Fte,"s3FileObject");function dE(e,t){if(!t){let r=Ite.checkGlobalSchemaTable(e.schema,e.table);if(r)return aE(new Error,r,cR.BAD_REQUEST);if(e.operation===cE.OPERATIONS_ENUM.CSV_FILE_LOAD)try{aR.accessSync(e.file_path,aR.constants.R_OK|aR.constants.F_OK)}catch(n){return n.code===cE.NODE_ERROR_CODES.ENOENT?aE(n,`No such file or directory ${n.path}`,cR.BAD_REQUEST):n.code===cE.NODE_ERROR_CODES.EACCES?aE(n,`Permission denied ${n.path}`,cR.BAD_REQUEST):aE(n)}}return t}a(dE,"postValidateChecks");q0.exports={dataObject:xte,urlObject:Gte,fileObject:qte,s3FileObject:Fte}});var fR=g((dpe,F0)=>{"use strict";var Rl=$(),fE=P();async function kte(e,t,r,n=void 0){if(!e||typeof e!="function")throw new Error("Invalid function parameter");let s;try{return s=await e(t),r&&await r(t,s,n),t.operation===fE.OPERATIONS_ENUM.INSERT||t.operation===fE.OPERATIONS_ENUM.UPDATE||t.operation===fE.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===fE.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(Rl.info(i.message),i):i.http_resp_msg?(Rl.error(`Error calling operation: ${e.name}`),Rl.error(i.http_resp_msg),i):(Rl.error(`Error calling operation: ${e.name}`),Rl.error(i),i)}}a(kte,"callOperationFunctionAsAwait");F0.exports={callOperationFunctionAsAwait:kte}});var V0=g((Epe,k0)=>{"use strict";var ER=class{static{a(this,"BulkLoadFileObject")}constructor(t,r,n,s,i,o,c=null){this.op=t,this.action=r,this.schema=n,this.table=s,this.file_path=i,this.file_type=o,this.role_perms=c}},hR=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};k0.exports={BulkLoadFileObject:ER,BulkLoadDataObject:hR}});var Y0=g((mpe,$0)=>{"use strict";var mR=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};$0.exports=mR});var AR=g((Ape,cB)=>{"use strict";var EE=qr(),mE=dR(),Vte=require("needle"),qn=P(),Spe=Ve(),Va=z(),{handleHDBError:lt,hdb_errors:eB}=se(),{HTTP_STATUS_CODES:zt,HDB_ERROR_MSGS:Lt,CHECK_LOGS_WRAPPER:wo}=eB,$a=$(),pR=require("papaparse");Va.promisifyPapaParse();var Fn=require("fs-extra"),$te=require("path"),{chain:K0}=require("stream-chain"),W0=require("stream-json/streamers/StreamArray"),Q0=require("stream-json/utils/Batch"),z0=require("stream-chain/utils/comp"),{finished:J0}=require("stream"),Yte=ee(),tB=fR(),Kte=Fg(),{BulkLoadFileObject:TR,BulkLoadDataObject:Wte}=V0(),gR=Lg(),{verifyBulkLoadAttributePerms:rB}=Kf(),Tpe=Y0(),gpe=ut(),Rpe=Os(),{databases:Qte}=(Ae(),ie(ke)),{coerceType:zte}=(pE(),ie(OR)),j0="No records parsed from csv file.",Io=`${Yte.get("HDB_ROOT")}/tmp`,{schema_regex:Jte}=jn(),X0=1024*1024*2,Z0=5e3,jte={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};cB.exports={csvDataLoad:Xte,csvURLLoad:Zte,csvFileLoad:ere,importFromS3:tre};async function Xte(e,t){let r=mE.dataObject(e);if(r)throw lt(r,r.message,zt.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=iB(e.schema,e.table),i=pR.parse(e.data,{header:!0,skipEmptyLines:!0,transform:SR.bind(null,s),dynamicTyping:!1}),o=new gR;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&rB(e.hdb_user.role.permission,this.job_operation_function.name,e.action,e.schema,e.table,i.meta.fields,o);let c=o.getPermsResponse();if(c)throw lt(new Error,c,zt.BAD_REQUEST,void 0,void 0,!0);let u=new Wte(e.action,e.schema,e.table,i.data);return n=await tB.callOperationFunctionAsAwait(oB,u,null),n.message===j0?j0:aB(n.records,n.number_written)}catch(s){throw Co(s)}}a(Xte,"csvDataLoad");async function Zte(e){let t=mE.urlObject(e);if(t)throw lt(t,t.message,zt.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${Io}/${r}`;try{await rre(e,r)}catch(s){throw $a.error(Lt.DOWNLOAD_FILE_ERR(r)+" - "+s),lt(s,wo(Lt.DOWNLOAD_FILE_ERR(r)))}try{let s=new TR(this.job_operation_function.name,e.action,e.schema,e.table,n,qn.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await RR(s);return await hE(n),i}catch(s){throw await hE(n),Co(s)}}a(Zte,"csvURLLoad");async function ere(e){let t=mE.fileObject(e);if(t)throw lt(t,t.message,zt.BAD_REQUEST,void 0,void 0,!0);let r=new TR(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,qn.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await RR(r)}catch(n){throw Co(n)}}a(ere,"csvFileLoad");async function tre(e){let t=mE.s3FileObject(e);if(t)throw lt(t,t.message,zt.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=$te.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${Io}/${s}`;let i=new TR(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user.role.permission);await nre(s,e);let o=await RR(i);return await hE(r),o}catch(n){throw await hE(r),Co(n)}}a(tre,"importFromS3");async function rre(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await Vte("get",e.csv_url,n)}catch(n){let s=`Error downloading CSV file from ${e.csv_url}, status code: ${n.statusCode}. Check the log for more information.`;throw lt(n,s,n.statusCode,qn.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}ire(r,e.csv_url),await sre(t,r.raw)}a(rre,"downloadCSVFile");async function nre(e,t){try{let r=`${Io}/${e}`;await Fn.mkdirp(Io),await Fn.writeFile(`${Io}/${e}`,"",{flag:"a+"});let n=await Fn.createWriteStream(r),s=await Kte.getFileStreamFromS3(t);await new Promise((i,o)=>{s.on("error",function(c){o(c)}),s.pipe(n).on("error",function(c){o(c)}).on("close",function(){$a.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw $a.error(Lt.S3_DOWNLOAD_ERR+" - "+r),lt(r,wo(Lt.S3_DOWNLOAD_ERR))}}a(nre,"downloadFileFromS3");async function sre(e,t){try{await Fn.mkdirp(Io),await Fn.writeFile(`${Io}/${e}`,t)}catch(r){throw $a.error(Lt.WRITE_TEMP_FILE_ERR),lt(r,wo(Lt.DEFAULT_BULK_LOAD_ERR))}}a(sre,"writeFileToTempFolder");async function hE(e){if(e)try{await Fn.access(e),await Fn.unlink(e)}catch{$a.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(hE,"deleteTempFile");function ire(e,t){if(e.statusCode!==eB.HTTP_STATUS_CODES.OK)throw lt(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,zt.BAD_REQUEST);if(!jte[e.headers["content-type"]])throw lt(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,zt.BAD_REQUEST);if(!e.raw)throw lt(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,zt.BAD_REQUEST)}a(ire,"validateURLResponse");async function RR(e){try{let t;switch(e.file_type){case qn.VALID_S3_FILE_TYPES.CSV:t=await ore(e);break;case qn.VALID_S3_FILE_TYPES.JSON:t=await are(e);break;default:throw lt(new Error,Lt.DEFAULT_BULK_LOAD_ERR,zt.BAD_REQUEST,qn.LOG_LEVELS.ERROR,Lt.INVALID_FILE_EXT_ERR(e))}return aB(t.records,t.number_written)}catch(t){throw Co(t)}}a(RR,"fileLoad");async function nB(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;s&&s.pause();let o={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await EE.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&rB(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let u=lt(c);r(u)}}a(nB,"validateChunk");async function sB(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;Va.autoCastJSONDeep(i),s&&s.pause();let o=n.meta?n.meta.fields:null;if(o)i.forEach(c=>{!Va.isEmpty(c)&&!Va.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 tB.callOperationFunctionAsAwait(oB,c,null);t.records+=u.records,t.number_written+=u.number_written,s&&s.resume()}catch(c){let u=lt(c,wo(Lt.INSERT_CSV_ERR),zt.INTERNAL_SERVER_ERROR,qn.LOG_LEVELS.ERROR,Lt.INSERT_CSV_ERR+" - "+c);r(u)}}a(sB,"insertChunk");async function ore(e){let t={records:0,number_written:0},r=iB(e.schema,e.table);try{let n=new gR,s=Fn.createReadStream(e.file_path,{highWaterMark:X0});s.setEncoding("utf8"),await pR.parsePromise(s,nB.bind(null,e,n),SR.bind(null,r));let i=n.getPermsResponse();if(i)throw lt(new Error,i,zt.BAD_REQUEST);return s=Fn.createReadStream(e.file_path,{highWaterMark:X0}),s.setEncoding("utf8"),await pR.parsePromise(s,sB.bind(null,e,t),SR.bind(null,r)),s.destroy(),t}catch(n){throw lt(n,wo(Lt.PAPA_PARSE_ERR),zt.INTERNAL_SERVER_ERROR,qn.LOG_LEVELS.ERROR,Lt.PAPA_PARSE_ERR+n)}}a(ore,"callPapaParse");function iB(e,t){let r=Qte[e][t].attributes,n=new Map;for(let s of r)s.type&&n.set(s.name,i=>zte(i,s));return n}a(iB,"createTransformMap");function SR(e,t,r){let n=e.get(r);return n?n(t):Va.autoCast(t)}a(SR,"typeFunction");async function are(e){let t={records:0,number_written:0},r=a(n=>{throw n},"throwErr");try{let n=new gR,s=K0([Fn.createReadStream(e.file_path,{encoding:"utf-8"}),W0.withParser(),c=>c.value,new Q0({batchSize:Z0}),z0(async c=>{await nB(e,n,r,c)})]);await new Promise((c,u)=>{J0(s,_=>{_?u(_):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw lt(new Error,i,zt.BAD_REQUEST);let o=K0([Fn.createReadStream(e.file_path,{encoding:"utf-8"}),W0.withParser(),c=>c.value,new Q0({batchSize:Z0}),z0(async c=>{await sB(e,t,r,c)})]);return await new Promise((c,u)=>{J0(o,_=>{_?u(_):c()}),o.resume()}),t}catch(n){throw lt(n,wo(Lt.INSERT_JSON_ERR),zt.INTERNAL_SERVER_ERROR,qn.LOG_LEVELS.ERROR,Lt.INSERT_JSON_ERR+n)}}a(are,"insertJson");async function oB(e){let t={};try{e.data&&e.data.length>0&&cre(e.data[0])?t=await ure(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",$a.info(t.message))}catch(r){throw Co(r)}return t}a(oB,"callBulkFileLoad");function cre(e){let t=Object.keys(e);for(let r of t)if(!Jte.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(cre,"validateColumnNames");async function ure(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=EE.insert;break;case"update":i=EE.update;break;case"upsert":i=EE.upsert;break;default:throw lt(new Error,Lt.INVALID_ACTION_PARAM_ERR(n),zt.BAD_REQUEST,qn.LOG_LEVELS.ERROR,Lt.INVALID_ACTION_PARAM_ERR(n))}try{let o=await i(s),c;switch(n){case"insert":c=o.inserted_hashes;break;case"update":c=o.update_hashes;break;case"upsert":c=o.upserted_hashes;break;default:break}if(Array.isArray(o.skipped_hashes)&&o.skipped_hashes.length>0){let 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=Va.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw Co(o)}}a(ure,"bulkFileLoad");function aB(e,t){return`successfully loaded ${t} of ${e} records`}a(aB,"buildResponseMsg");function Co(e){return lt(e,wo(Lt.DEFAULT_BULK_LOAD_ERR),zt.INTERNAL_SERVER_ERROR,qn.LOG_LEVELS.ERROR,Lt.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(Co,"buildTopLevelErrMsg")});var lB=g((bpe,uB)=>{"use strict";var bR=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};uB.exports=bR});var fB=g((Npe,dB)=>{"use strict";var lre=P(),_B=require("moment"),_re=require("uuid").v4,yR=class{static{a(this,"JobObject")}constructor(){this.id=_re(),this.type=void 0,this.start_datetime=_B().valueOf(),this.created_datetime=_B().valueOf(),this.end_datetime=void 0,this.status=lre.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};dB.exports=yR});var NR=g((wpe,RB)=>{"use strict";var dre=require("uuid").v4,SB=qr(),TB=Gr(),fre=rs(),Ere=oa(),hre=lB(),Ze=P(),mre=fB(),pre=Kd(),gn=$(),Sre=Vc(),Ya=z(),{promisify:Tre}=require("util"),Do=require("moment"),gre=Qf(),SE=dR(),EB=jm(),{deleteTransactionLogsBeforeValidator:Rre}=Ng(),{handleHDBError:hB,hdb_errors:Are}=se(),{HTTP_STATUS_CODES:mB}=Are,pB=TB.searchByValue,Ore=TB.searchByHash,bre=SB.insert,yre=Tre(gre.evaluateSQL),Nre=SB.update;RB.exports={addJob:Cre,updateJob:Lre,handleGetJob:Ire,handleGetJobsByStartDate:wre,getJobById:gB};async function Ire(e){try{let t=await gB(e.id);return Ya.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 gn.error("There was an error getting job",t),new Error(r)}}a(Ire,"handleGetJob");async function wre(e){try{let t=await Dre(e);if(gn.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=Do(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=Do(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 gn.error(r),new Error(r)}}a(wre,"handleGetJobsByStartDate");async function Cre(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||Ya.isEmptyOrZeroLength(e.operation)){let l="job parameter is invalid";return gn.info(l),t.error=l,t}if(!Ze.JOB_TYPE_ENUM[e.operation])return gn.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case Ze.OPERATIONS_ENUM.CSV_FILE_LOAD:n=SE.fileObject(e);break;case Ze.OPERATIONS_ENUM.CSV_URL_LOAD:n=SE.urlObject(e);break;case Ze.OPERATIONS_ENUM.CSV_DATA_LOAD:n=SE.dataObject(e);break;case Ze.OPERATIONS_ENUM.IMPORT_FROM_S3:n=SE.s3FileObject(e);break;case Ze.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Ze.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=EB(e,"date");break;case Ze.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=EB(e,"timestamp");break;case Ze.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=Rre(e);break;case Ze.OPERATIONS_ENUM.RESTART_SERVICE:if(Ze.PROCESS_DESCRIPTORS_VALIDATE[e.service]===void 0)throw hB(new Error,"Invalid service",mB.BAD_REQUEST,void 0,void 0,!0);break;default:break}if(n)throw hB(n,n.message,mB.BAD_REQUEST,void 0,void 0,!0);let s=new mre;s.type=e.operation===Ze.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Ze.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user.username;let i=new fre(Ze.SYSTEM_SCHEMA_NAME,Ze.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),o;try{o=Array.from(await pB(i))}catch(l){let d=`There was an error inserting a new job: ${l}`;return gn.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){s.id=dre();try{o=await pB(i)}catch(l){let d=`There was an error inserting a new job: ${l}`;return gn.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return gn.error("Error creating a job, could not find a unique job id."),t}s.request=e;let u=new Sre(Ze.SYSTEM_SCHEMA_NAME,Ze.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),_;try{_=await bre(u)}catch(l){return gn.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 ${s.operation} and id ${s.id}`;else{let l=`Created a job with type ${s.type} and id ${s.id}`;t.message=l,t.createdJob=s,t.success=!0,gn.trace(l)}return t}a(Cre,"addJob");async function Dre(e){let t=Do(e.from_date,Do.ISO_8601),r=Do(e.to_date,Do.ISO_8601);if(!t.isValid())throw new Error("Invalid 'from' date, must be in ISO-8601 format (YYYY-MM-DD).");if(!r.isValid())throw new Error("Invalid 'to' date, must be in ISO-8601 format (YYYY-MM-DD)");let n=`select * from system.hdb_job where start_datetime > '${t.valueOf()}' and start_datetime < '${r.valueOf()}'`,s=new hre(n,e.hdb_user);try{return await yre(s)}catch(i){throw gn.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(Dre,"getJobsInDateRange");async function gB(e){if(Ya.isEmptyOrZeroLength(e))return Ya.errorizeMessage("Invalid job ID specified.");let t=new Ere(Ze.SYSTEM_SCHEMA_NAME,Ze.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await Ore(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return gn.error(n),Ya.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(gB,"getJobById");async function Lre(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(Ya.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===Ze.JOB_STATUS_ENUM.COMPLETE||e.status===Ze.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=Do().valueOf());let t=new pre(Ze.SYSTEM_SCHEMA_NAME,Ze.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await Nre(t),r}a(Lre,"updateJob")});var CB=g((Dpe,wB)=>{"use strict";var AB=z(),Mt=P(),Mre=require("moment"),TE=AR(),Al=$(),OB=NR(),bB=zf(),yB=ci(),NB=We(),Pre=kf(),Ure=ju(),{parentPort:vre,isMainThread:IB}=require("worker_threads"),{onMessageByType:Bre}=We(),IR=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function Hre(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(AB.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(AB.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Mt.JOB_TYPE_ENUM.csv_file_load:await Es(e,TE.csvFileLoad);break;case Mt.JOB_TYPE_ENUM.csv_url_load:await Es(e,TE.csvURLLoad);break;case Mt.JOB_TYPE_ENUM.csv_data_load:await Es(e,TE.csvDataLoad);break;case Mt.JOB_TYPE_ENUM.import_from_s3:await Es(e,TE.importFromS3);break;case Mt.JOB_TYPE_ENUM.empty_trash:break;case Mt.JOB_TYPE_ENUM.export_local:await Es(e,bB.export_local);break;case Mt.JOB_TYPE_ENUM.export_to_s3:await Es(e,bB.export_to_s3);break;case Mt.JOB_TYPE_ENUM.delete_files_before:case Mt.JOB_TYPE_ENUM.delete_records_before:await Es(e,yB.deleteFilesBefore);break;case Mt.JOB_TYPE_ENUM.delete_audit_logs_before:await Es(e,yB.deleteAuditLogsBefore);break;case Mt.JOB_TYPE_ENUM.delete_transaction_logs_before:await Es(e,Pre.deleteTransactionLogsBefore);break;case Mt.JOB_TYPE_ENUM.restart_service:return await Es(e,Ure.restartService),`Restarting ${e.json.service}`;break;default:return`Invalid operation ${e.json.operation} specified`}}a(Hre,"parseMessage");async function Es(e,t){try{e.job.status=Mt.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=Mre().valueOf(),await OB.updateJob(e.job),await xre(e.job.id)}catch(r){let n=r.message!==void 0?r.message:r;typeof n=="string"?(n=`There was an error running ${t.name} job with id ${e.job.id} - ${n}`,r.message=n):Al.error(`There was an error running ${t.name} job with id ${e.job.id}`),Al.error(n),e.job.message=n,e.job.status=Mt.JOB_STATUS_ENUM.ERROR;try{await OB.updateJob(e.job)}catch(s){throw Al.error(`Unable to update job with id ${e.job.id}`),s}throw r}}a(Es,"runJob");async function xre(e){Al.trace("launching job thread:",e),IB?NB.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[Mt.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})}):vre.postMessage({type:Mt.ITC_EVENT_TYPES.START_JOB,jobId:e})}a(xre,"launchJobThread");IB&&Bre(Mt.ITC_EVENT_TYPES.START_JOB,async(e,t)=>{try{NB.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[Mt.PROCESS_NAME_ENV_PROP]:`JOB-${e.jobId}`})})}catch(r){Al.error(r)}});wB.exports={parseMessage:Hre,RunnerMessage:IR}});var LB=g((Mpe,DB)=>{"use strict";var wR=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};DB.exports=wR});var QB=g((Upe,UR)=>{"use strict";var bE=Gr(),LR=Qf(),gE=AR(),ks=bu(),RE=bs(),bl=ci(),Gre=$S(),Ol=_n(),AE=ZS(),Jt=yg(),OE=$(),qre=rT(),Fre=of(),MB=vT(),kre=cf(),Vre=HT(),$re=xT(),Yre=FT(),Kre=VT(),CR=KT(),PB=zf(),Wre=Kf(),MR=NR(),k=P(),{hdb_errors:Nl,handleHDBError:yl}=se(),{HTTP_STATUS_CODES:UB}=Nl,DR=jT(),vB=ju(),$B=require("util"),Ka=qr(),Qre=ys(),zre=Ra(),BB=CB(),HB=Du(),xB=(Mf(),ie(tl)),GB=Er(),qB=kf(),FB=Hf(),{setServerUtilities:Jre}=(pE(),ie(OR)),{CONTEXT:jre}=(cn(),ie($p)),{_assignPackageExport:Xre}=require("../index"),{transformReq:Zre}=z(),{server:ene}=(lr(),ie(Gi)),or=OE.loggerWithTag("operation"),tne=fR(),kB=bE.searchByHash,rne=bE.searchByValue,nne=$B.promisify(bE.search),sne=$B.promisify(LR.evaluateSQL),ine={[k.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[k.OPERATIONS_ENUM.CREATE_TABLE]:!0,[k.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[k.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[k.OPERATIONS_ENUM.DROP_TABLE]:!0,[k.OPERATIONS_ENUM.DROP_SCHEMA]:!0},Y=LB();async function YB(e,t){try{if(e.body.operation!=="read_log"&&(OE.log_level===k.LOG_LEVELS.INFO||OE.log_level===k.LOG_LEVELS.DEBUG||OE.log_level===k.LOG_LEVELS.TRACE)){let{hdb_user:n,hdb_auth_header:s,password:i,...o}=e.body;or.info(o)}}catch(n){or.error(n)}let r=await tne.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return ine[e.body.operation]&&Qre.setSchemaDataToGlobal(n=>{n&&or.error(n)}),r}a(YB,"processLocalTransaction");var VB=ane();UR.exports={chooseOperation:KB,getOperationFunction:WB,operation:PR,processLocalTransaction:YB};Jre(UR.exports);ene.operation=PR;function KB(e){let t;try{t=WB(e)}catch(s){throw or.error(`Error when selecting operation function - ${s}`),s}let{operation_function:r,job_operation_function:n}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let s=e.operation==="sql"?e.sql:e.search_operation.sql,i=LR.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let o=LR.checkASTPermissions(e,i);if(o)throw or.error(`${UB.FORBIDDEN} from operation ${e.operation}`),or.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),yl(new Error,o,Nl.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==k.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==k.OPERATIONS_ENUM.LOGIN&&e.operation!==k.OPERATIONS_ENUM.LOGOUT){let s=n===void 0?r:n,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=Wre.verifyPerms(i,s);if(o)throw or.error(`${UB.FORBIDDEN} from operation ${e.operation}`),or.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),yl(new Error,o,Nl.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw yl(s,"There was an error when trying to choose an operation path")}return r}a(KB,"chooseOperation");function WB(e){if(or.trace(`getOperationFunction with operation: ${e.operation}`),VB.has(e.operation))return VB.get(e.operation);throw yl(new Error,Nl.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),Nl.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(WB,"getOperationFunction");Xre("operation",PR);function PR(e,t){e.hdb_user=this[jre]?.user,e.bypass_auth=!t;let r=KB(e);return YB({body:e},r)}a(PR,"operation");async function one(e){or.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),n=r[0],s=r[1];for(let i of t.transactions)try{i.schema=n,i.table=s,i[k.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case k.OPERATIONS_ENUM.INSERT:o=await Ka.insert(i);break;case k.OPERATIONS_ENUM.UPDATE:o=await Ka.update(i);break;case k.OPERATIONS_ENUM.UPSERT:o=await Ka.upsert(i);break;case k.OPERATIONS_ENUM.DELETE:o=await bl.deleteRecord(i);break;default:or.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){or.info("Invalid operation in transaction"),or.error(o)}}a(one,"catchup");async function kn(e){Zre(e);let t,r;try{r=await MR.addJob(e),t=r.createdJob,or.info("addJob result",r);let n=new BB.RunnerMessage(t,e);return{message:await BB.parseMessage(n)??`Starting job with id ${t.id}`,job_id:t.id}}catch(n){let s=`There was an error executing job: ${n.http_resp_msg?n.http_resp_msg:n}`;throw or.error(s),yl(n,s)}}a(kn,"executeJob");function ane(){let e=new Map;return e.set(k.OPERATIONS_ENUM.INSERT,new Y(Ka.insert)),e.set(k.OPERATIONS_ENUM.UPDATE,new Y(Ka.update)),e.set(k.OPERATIONS_ENUM.UPSERT,new Y(Ka.upsert)),e.set(k.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new Y(bE.searchByConditions)),e.set(k.OPERATIONS_ENUM.SEARCH_BY_HASH,new Y(kB)),e.set(k.OPERATIONS_ENUM.SEARCH_BY_ID,new Y(kB)),e.set(k.OPERATIONS_ENUM.SEARCH_BY_VALUE,new Y(rne)),e.set(k.OPERATIONS_ENUM.SEARCH,new Y(nne)),e.set(k.OPERATIONS_ENUM.SQL,new Y(sne)),e.set(k.OPERATIONS_ENUM.CSV_DATA_LOAD,new Y(kn,gE.csvDataLoad)),e.set(k.OPERATIONS_ENUM.CSV_FILE_LOAD,new Y(kn,gE.csvFileLoad)),e.set(k.OPERATIONS_ENUM.CSV_URL_LOAD,new Y(kn,gE.csvURLLoad)),e.set(k.OPERATIONS_ENUM.IMPORT_FROM_S3,new Y(kn,gE.importFromS3)),e.set(k.OPERATIONS_ENUM.CREATE_SCHEMA,new Y(ks.createSchema)),e.set(k.OPERATIONS_ENUM.CREATE_DATABASE,new Y(ks.createSchema)),e.set(k.OPERATIONS_ENUM.CREATE_TABLE,new Y(ks.createTable)),e.set(k.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new Y(ks.createAttribute)),e.set(k.OPERATIONS_ENUM.DROP_SCHEMA,new Y(ks.dropSchema)),e.set(k.OPERATIONS_ENUM.DROP_DATABASE,new Y(ks.dropSchema)),e.set(k.OPERATIONS_ENUM.DROP_TABLE,new Y(ks.dropTable)),e.set(k.OPERATIONS_ENUM.DROP_ATTRIBUTE,new Y(ks.dropAttribute)),e.set(k.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new Y(RE.describeSchema)),e.set(k.OPERATIONS_ENUM.DESCRIBE_DATABASE,new Y(RE.describeSchema)),e.set(k.OPERATIONS_ENUM.DESCRIBE_TABLE,new Y(RE.describeTable)),e.set(k.OPERATIONS_ENUM.DESCRIBE_ALL,new Y(RE.describeAll)),e.set(k.OPERATIONS_ENUM.DELETE,new Y(bl.deleteRecord)),e.set(k.OPERATIONS_ENUM.ADD_USER,new Y(Ol.addUser)),e.set(k.OPERATIONS_ENUM.ALTER_USER,new Y(Ol.alterUser)),e.set(k.OPERATIONS_ENUM.DROP_USER,new Y(Ol.dropUser)),e.set(k.OPERATIONS_ENUM.LIST_USERS,new Y(Ol.listUsersExternal)),e.set(k.OPERATIONS_ENUM.LIST_ROLES,new Y(AE.listRoles)),e.set(k.OPERATIONS_ENUM.ADD_ROLE,new Y(AE.addRole)),e.set(k.OPERATIONS_ENUM.ALTER_ROLE,new Y(AE.alterRole)),e.set(k.OPERATIONS_ENUM.DROP_ROLE,new Y(AE.dropRole)),e.set(k.OPERATIONS_ENUM.USER_INFO,new Y(Ol.userInfo)),e.set(k.OPERATIONS_ENUM.READ_LOG,new Y(qre)),e.set(k.OPERATIONS_ENUM.ADD_NODE,new Y(Fre)),e.set(k.OPERATIONS_ENUM.UPDATE_NODE,new Y(MB)),e.set(k.OPERATIONS_ENUM.SET_NODE_REPLICATION,new Y(MB)),e.set(k.OPERATIONS_ENUM.REMOVE_NODE,new Y(kre)),e.set(k.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new Y(Vre)),e.set(k.OPERATIONS_ENUM.PURGE_STREAM,new Y($re)),e.set(k.OPERATIONS_ENUM.SET_CONFIGURATION,new Y(GB.setConfiguration)),e.set(k.OPERATIONS_ENUM.CLUSTER_STATUS,new Y(Yre.clusterStatus)),e.set(k.OPERATIONS_ENUM.CLUSTER_NETWORK,new Y(Kre)),e.set(k.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new Y(CR.setRoutes)),e.set(k.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new Y(CR.getRoutes)),e.set(k.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new Y(CR.deleteRoutes)),e.set(k.OPERATIONS_ENUM.EXPORT_TO_S3,new Y(kn,PB.export_to_s3)),e.set(k.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new Y(kn,bl.deleteFilesBefore)),e.set(k.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new Y(kn,bl.deleteFilesBefore)),e.set(k.OPERATIONS_ENUM.EXPORT_LOCAL,new Y(kn,PB.export_local)),e.set(k.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new Y(MR.handleGetJobsByStartDate)),e.set(k.OPERATIONS_ENUM.GET_JOB,new Y(MR.handleGetJob)),e.set(k.OPERATIONS_ENUM.GET_FINGERPRINT,new Y(DR.getFingerprint)),e.set(k.OPERATIONS_ENUM.SET_LICENSE,new Y(DR.setLicense)),e.set(k.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new Y(DR.getRegistrationInfo)),e.set(k.OPERATIONS_ENUM.RESTART,new Y(vB.restart)),e.set(k.OPERATIONS_ENUM.RESTART_SERVICE,new Y(kn,vB.restartService)),e.set(k.OPERATIONS_ENUM.CATCHUP,new Y(one)),e.set(k.OPERATIONS_ENUM.SYSTEM_INFORMATION,new Y(zre.systemInformation)),e.set(k.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new Y(kn,bl.deleteAuditLogsBefore)),e.set(k.OPERATIONS_ENUM.READ_AUDIT_LOG,new Y(Gre)),e.set(k.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new Y(HB.createTokens)),e.set(k.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new Y(HB.refreshOperationToken)),e.set(k.OPERATIONS_ENUM.LOGIN,new Y(xB.login)),e.set(k.OPERATIONS_ENUM.LOGOUT,new Y(xB.logout)),e.set(k.OPERATIONS_ENUM.GET_CONFIGURATION,new Y(GB.getConfiguration)),e.set(k.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new Y(Jt.customFunctionsStatus)),e.set(k.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new Y(Jt.getCustomFunctions)),e.set(k.OPERATIONS_ENUM.GET_COMPONENT_FILE,new Y(Jt.getComponentFile)),e.set(k.OPERATIONS_ENUM.GET_COMPONENTS,new Y(Jt.getComponents)),e.set(k.OPERATIONS_ENUM.SET_COMPONENT_FILE,new Y(Jt.setComponentFile)),e.set(k.OPERATIONS_ENUM.DROP_COMPONENT,new Y(Jt.dropComponent)),e.set(k.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new Y(Jt.getCustomFunction)),e.set(k.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new Y(Jt.setCustomFunction)),e.set(k.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new Y(Jt.dropCustomFunction)),e.set(k.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new Y(Jt.addComponent)),e.set(k.OPERATIONS_ENUM.ADD_COMPONENT,new Y(Jt.addComponent)),e.set(k.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new Y(Jt.dropCustomFunctionProject)),e.set(k.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new Y(Jt.packageComponent)),e.set(k.OPERATIONS_ENUM.PACKAGE_COMPONENT,new Y(Jt.packageComponent)),e.set(k.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new Y(Jt.deployComponent)),e.set(k.OPERATIONS_ENUM.DEPLOY_COMPONENT,new Y(Jt.deployComponent)),e.set(k.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new Y(qB.readTransactionLog)),e.set(k.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new Y(kn,qB.deleteTransactionLogsBefore)),e.set(k.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new Y(FB.installModules)),e.set(k.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new Y(FB.auditModules)),e.set(k.OPERATIONS_ENUM.GET_BACKUP,new Y(ks.getBackup)),e}a(ane,"initializeOperationFunctionMap")});var NE=g((Bpe,jB)=>{"use strict";var vR=P(),cne=z(),Il=$(),{handleHDBError:BR,hdb_errors:yE}=se(),{isMainThread:une}=require("worker_threads"),{Readable:lne}=require("stream"),zB=require("os"),_ne=require("util"),dne=dT(),fne=_ne.promisify(dne.authorize),JB=QB(),{createGzip:Ene,constants:hne}=require("zlib");function mne(e){let t=`Found an uncaught exception with message: ${e.message}. ${zB.EOL}Stack: ${e.stack} ${zB.EOL}Terminating ${une?"HDB":"thread"}.`;console.error(t),Il.fatal(t),process.exit(1)}a(mne,"handleServerUncaughtException");function pne(e,t,r){if(Il[e.logLevel||"error"](e),e.statusCode)return typeof e.http_resp_msg!="object"?r.code(e.statusCode).send({error:e.http_resp_msg||e.message}):r.code(e.statusCode).send(e.http_resp_msg);let n=e.statusCode?e.statusCode:yE.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(n).send({error:e}):r.code(n).send(e.message?{error:e.message}:e)}a(pne,"serverErrorHandler");function Sne(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=BR(new Error,"Invalid JSON.",yE.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(cne.isEmpty(e.body.operation)){let n=BR(new Error,"Request body must include an 'operation' property.",yE.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}a(Sne,"reqBodyValidationHandler");function Tne(e,t,r){let n;e.body.operation!==vR.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==vR.OPERATIONS_ENUM.LOGIN&&e.body.operation!==vR.OPERATIONS_ENUM.LOGOUT?fne(e,t).then(s=>{n=s,e.body.hdb_user=n,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(s=>{Il.warn(s),Il.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${s.stack}"`);let i=typeof s=="string"?{error:s}:{error:s.message};r(BR(s,i,yE.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(Tne,"authHandler");async function gne(e,t,r=!1){let n;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),n=JB.chooseOperation(e.body);let s=await JB.processLocalTransaction(e,n);if(s instanceof lne&&s.headers){for(let[i,o]of s.headers)t.header(i,o);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),s=s.pipe(Ene({level:hne.Z_BEST_SPEED})))}return s}catch(s){throw Il.error(s),s}}a(gne,"handlePostRequest");jB.exports={authHandler:Tne,handlePostRequest:gne,handleServerUncaughtException:mne,serverErrorHandler:pne,reqBodyValidationHandler:Sne}});var tH=g((xpe,eH)=>{"use strict";var Rne=require("fastify-plugin"),{handlePostRequest:XB,authHandler:Ane,reqBodyValidationHandler:One}=NE();async function bne(e){e.decorate("hdbCore",{preValidation:[One,Ane],request:t=>ZB(XB(t,response)),requestWithoutAuthentication:(t,r)=>ZB(XB(t,r,!0))})}a(bne,"hdbCore");async function ZB(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(ZB,"convertAsyncIterators");eH.exports=Rne(bne)});var sH=g((Fpe,nH)=>{"use strict";var qpe=require("fs"),HR=ee();HR.initSync();var{CONFIG_PARAMS:rH}=P(),yne=1024*1024*1024;function Nne(e){let t=HR.get(rH.HTTP_TIMEOUT),r=HR.get(rH.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:yne,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,https:e}}a(Nne,"getServerOptions");nH.exports=Nne});var aH=g((Vpe,oH)=>{"use strict";var xR=ee();xR.initSync();var{CONFIG_PARAMS:iH}=P();function Ine(){let e=xR.get(iH.HTTP_CORSACCESSLIST),t=xR.get(iH.HTTP_CORS),r;return t&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},e&&e.length>0&&e[0]!==null&&e[0]!=="*"&&(r.origin=(n,s)=>s(null,e.indexOf(n)!==-1))),r}a(Ine,"getCORSOptions");oH.exports=Ine});var lH=g((Ype,uH)=>{"use strict";var cH=ee();cH.initSync();var wne=P();function Cne(){return cH.get(wne.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(Cne,"getHeaderTimeoutConfig");uH.exports=Cne});var qR={};Fe(qR,{customFunctionsServer:()=>Mne,ready:()=>yH,start:()=>Lne});function Lne(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){Vs||(Vs=bH(t),at.http((await Vs).server));let o=await Vs,c=(0,GR.dirname)(s),u=(0,GR.dirname)(n);if(u.startsWith("/")&&(u=u.slice(1)),!_H.has(c)){_H.add(c);try{o.register(Une(c,u))}catch(_){if(_.message==="Root plugin has already booted")Ye.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw _}}},ready:yH}}async function Mne(){try{Ye.info("In Custom Functions Fastify server"+process.cwd()),Ye.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Ye.debug(`Custom Functions server process ${process.pid} starting up.`),await Pne();let e=pH.get(SH.CONFIG_PARAMS.HTTP_SECUREPORT)>0,t;try{t=Vs=await bH(e)}catch(r){throw Ye.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw Ye.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){Ye.error(`Custom Functions ${process.pid} Error: ${e}`),Ye.error(e),process.exit(1)}}async function Pne(){try{Ye.info("Custom Functions starting configuration."),await TH.setUsersToGlobal(),Ye.info("Custom Functions completed configuration.")}catch(e){Ye.error(e)}}function Une(e,t){return async function(r){try{Ye.info("Custom Functions starting buildRoutes"),Ye.trace("Loading fastify routes folder "+e),(0,dH.existsSync)(e)&&r.register(mH.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:Ye.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,o)=>{s?.message?Ye.error(s.message):s&&Ye.error(s),o()})}catch(n){Ye.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function bH(e){Ye.info("Custom Functions starting buildServer.");let t=(0,gH.default)(e),r=(0,fH.default)(t);r.server.headersTimeout=(0,AH.default)(),r.setErrorHandler(OH.serverErrorHandler);let n=(0,RH.default)();return n&&r.register(EH.default,n),r.register(function(s,i,o){s.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(hH.default),await r.register(Dne),await r.after(),Qg(r),Ye.info("Custom Functions completed buildServer."),r}function yH(){if(Vs)return Vs.then?Vs.then(e=>e.ready()):Vs.ready()}var GR,dH,fH,EH,hH,mH,pH,SH,Ye,Dne,TH,gH,RH,AH,OH,Vs,_H,NH=Re(()=>{GR=require("path"),dH=require("fs"),fH=H(require("fastify")),EH=H(require("@fastify/cors")),hH=H(oR()),mH=H(require("@fastify/autoload")),pH=H(ee()),SH=H(P()),Ye=H($()),Dne=H(tH()),TH=H(_n()),gH=H(sH()),RH=H(aH()),AH=H(lH()),OH=H(NE());Da();lr();_H=new Set;a(Lne,"start");a(Mne,"customFunctionsServer");a(Pne,"setUp");a(Une,"buildRouteFolder");a(bH,"buildServer");a(yH,"ready")});var FR={};Fe(FR,{start:()=>vne});function vne(e){return{handleDirectory(t,r){if(t==="/"){let n=(0,LH.default)(r,e);return e.server.http(async(s,i)=>{if(!s.isWebSocket)return new Promise(o=>n(s._nodeRequest,s._nodeResponse,()=>{o(i(s))}))}),!0}},handleFile(t,r,n){wH||(wH=!0,e.server.http(async(s,i)=>{if(!s.isWebSocket){let o=IH.get(s.pathname);if(o)return{handlesHeaders:!0,body:(0,CH.default)(s,(0,DH.realpathSync)(o))}}return i(s)},{runFirst:!0})),IH.set(r,n)}}}var CH,DH,LH,IH,wH,MH=Re(()=>{CH=H(require("send")),DH=require("fs"),LH=H(require("serve-static")),IH=new Map;a(vne,"start")});function xne(){let e=(0,BH.checkMemoryLimit)();e&&!process.env.DEV_MODE&&(console.error(e),VR=setInterval(()=>{CE.notify(e)},Hne).unref())}function Gne(e,t=1,r){if(kR++,(0,$s.startWorker)("server/threads/threadServer.js",{name:ja.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((o,c)=>{function u(_){_.type===ja.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(n.removeListener("message",u),o(n))}a(u,"onMessage"),n.on("message",u),n.on("error",c)});Bne.push(s),await s,Wa.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",o=>{if(o.requestId){let c=wE.get(o.requestId);c&&c(o)}}),n.on("exit",i),n.on("shutdown",i);function i(){let o=Wa.indexOf(n);o>-1&&Wa.splice(o,1)}if(a(i,"removeWorker"),Qa){let o=Qa;Qa=[];for(let c of o)HH[c.localPort](null,c)}}}),r){let n=setInterval(()=>{$R?$R=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,$s.shutdownWorkers)(),kR=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function xH(e=0,t){if(typeof e=="string")try{(0,DE.existsSync)(e)&&(0,DE.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=qne:r=Fne(t):r=YR;let n=(0,za.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(n._handle){n._handle.onconnection=HH[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),$R=!0,r(o,(c,u)=>{if(!c){if(PH){let l=o._socket||new za.Socket({handle:o,writable:!0,readable:!0});PH.deliverSocket(l,e,u),l.resume()}else kR>0?(Qa.length===0&&setTimeout(()=>{Qa.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,Qa.push(o)):(console.log("start up a dynamic thread to handle request"),Gne(0));Sr(!1,"socket-routed");return}c.requests++;let _=o.fd;if(_>=0)c.postMessage({port:e,fd:_,data:u});else{let l=o._socket||new za.Socket({handle:o,writable:!0,readable:!0});Yne(l,c,e)}Sr(!0,"socket-routed")})};let s=du();CE.info(`HarperDB ${s.version} Server running on port ${e}`)}return n.on("error",s=>{console.error("Error in socket server",s)}),process.env._UNREF_SERVER&&n.unref(),n}function YR(e,t){let r,n=0;for(let s of Wa){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=IE)return IE=i,t(r);n=i}IE=0,t(r)}function qne(e,t){let r={};e.getpeername(r);let n=r.address,s=Ja.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);YR(e,o=>{Ja.set(n,{worker:o,lastUsed:i}),t(o)})}function Fne(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new za.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",o=>{n.readStop();let u=o.toString("latin1").match(t)?.[1],_=Ja.get(u),l=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=l,s(_.worker);YR(n,d=>{Ja.set(u,{worker:d,lastUsed:l}),s(d,o)})})}a(r,"findByHeaderAffinity")}function Vne(){IE=0;for(let e of Wa)e.expectedIdle=e.recentELU.idle+kne,e.requests=1;Wa.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function Yne(e,t,r){let n=$ne++;t.postMessage({port:r,requestId:n,event:"connection"}),e.on("data",s=>{let i=s.toString("latin1");t.postMessage({port:r,requestId:n,data:i,event:"data"})}).on("close",s=>{t.postMessage({port:r,requestId:n,event:"close",hadError:s})}).on("error",s=>{t.postMessage({port:r,requestId:n,event:"error",error:s})}).on("drain",s=>{t.postMessage({port:r,requestId:n,event:"drain",error:s})}).on("end",()=>{t.postMessage({port:r,requestId:n,event:"end"})}).resume(),wE.set(n,s=>{s.event=="data"&&e.write(Buffer.from(s.data,"latin1")),s.event=="end"&&(e.end(s.data&&Buffer.from(s.data,"latin1")),wE.delete(n)),s.event=="destroy"&&(e.destroy(),wE.delete(n))})}var $s,za,ja,CE,DE,vH,BH,Wa,Qa,HH,PH,kR,Bne,VR,Hne,$R,IE,UH,Ja,kne,wE,$ne,GH=Re(()=>{$s=H(We()),za=require("net"),ja=H(P()),CE=H($()),DE=require("fs");Ds();vH=require("worker_threads"),BH=H(Xi()),Wa=[],Qa=[],HH=[],kR=0,Bne=[];vH.isMainThread&&(process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)}),(0,$s.onMessageFromWorkers)(e=>{e.type===ja.ITC_EVENT_TYPES.RESTART&&VR&&(clearInterval(VR),xne())}));Hne=6e5;a(xne,"licenseWarning");a(Gne,"startHTTPWorker");a(xH,"startSocketServer");IE=0;a(YR,"findMostIdleWorker");UH=36e5,Ja=new Map;a(qne,"findByRemoteAddressAffinity");a(Fne,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Ja)r.lastUsed+UH<e&&Ja.delete(t)},UH).unref();kne=1e3;a(Vne,"updateWorkerIdleness");(0,$s.setMonitorListener)(Vne);wE=new Map,$ne=1;a(Yne,"proxySocket")});var zR={};Fe(zR,{Request:()=>KR,createReuseportFd:()=>LE});var qH,KR,WR,QR,LE,ME=Re(()=>{qH=require("os"),KR=class{static{a(this,"Request")}#e;constructor(t,r){this.method=t.method;let n=t.url;this._nodeRequest=t,this._nodeResponse=r,this.url=n,this.headers=new QR(t.headers)}get absoluteURL(){return this.protocol+"://"+this.host+this.url}get pathname(){let t=this.url.indexOf("?");return t>-1?this.url.slice(0,t):this.url}set pathname(t){let r=this.url.indexOf("?");r>-1?this.url=t+this.url.slice(r):this.url=t}get protocol(){return this._nodeRequest.socket.encrypted?"https":"http"}get ip(){return this._nodeRequest.socket.remoteAddress}get authorized(){return this._nodeRequest.socket.authorized}get peerCertificate(){return this._nodeRequest.socket.getPeerCertificate()}get mtlsConfig(){return this._nodeRequest.socket.server.mtlsConfig}get body(){return this.#e||(this.#e=new WR(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}},WR=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}pipe(t,r){return this.#e.pipe(t,r)}},QR=class{constructor(t){this.asObject=t}static{a(this,"Headers")}set(t,r){this.asObject[t.toLowerCase()]=r}get(t){return this.asObject[t.toLowerCase()]}has(t){return this.asObject.hasOwnProperty(t.toLowerCase())}[Symbol.iterator](){return Object.entries(this.asObject)[Symbol.iterator]()}keys(){return Object.keys(this.asObject)}values(){return Object.values(this.asObject)}forEach(t){for(let[r,n]of this)t(n,r,this)}};(0,qH.platform)()!="win32"&&(LE=require("node-unix-socket").createReuseportFd)});var $H=g((oSe,VH)=>{"use strict";var Kne=require("cluster"),Lo=ee();Lo.initSync();var kH=P(),tSe=require("util"),Ys=$(),rSe=require("fs"),Wne=require("fastify"),nSe=du(),Qne=require("@fastify/cors"),zne=require("@fastify/compress"),Jne=require("@fastify/static"),jne=oR(),Xne=require("path"),{PACKAGE_ROOT:Zne}=P(),ese=ys(),tse=z(),rse=_n(),nse=Xi(),{server:sse}=(lr(),ie(Gi)),{node_request_key:sSe}=(ME(),ie(zR)),{authHandler:ise,handlePostRequest:ose,serverErrorHandler:ase,reqBodyValidationHandler:cse}=NE(),iSe=require("net"),{registerContentHandlers:use}=(Da(),ie(A0)),lse=6e4,_se=1024*1024*1024,dse="TRUE",{CONFIG_PARAMS:wl}=kH,Xa;VH.exports={hdbServer:FH,start:FH};async function FH(e){try{Ys.info("In Fastify server"+process.cwd()),Ys.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Ys.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=Kne.isMaster,await fse();let t=e.securePort>0;Xa=Ese(t),await Xa.ready(),e||(e={}),e.isOperationsServer=!0;try{sse.http(Xa.server,e),Xa.server.closeIdleConnections||await Xa.listen({port:0,host:"::"})}catch(r){throw Xa.close(),Ys.error(r),Ys.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),Ys.fatal(t),process.exit(1)}}a(FH,"operationsServer");async function fse(){Ys.trace("Configuring HarperDB process."),ese.setSchemaDataToGlobal(),await rse.setUsersToGlobal(),await nse.getLicense()}a(fse,"setUp");function Ese(e){Ys.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=hse(e),r=Wne(t);r.server.headersTimeout=pse(),r.setErrorHandler(ase);let n=mse();n&&r.register(Qne,n),r.register(function(i,o,c){i.setNotFoundHandler(function(u,_){r.server.emit("unhandled",u.raw,_.raw)}),c()}),r.register(jne),r.register(zne),r.register(Jne,{root:Xne.join(Zne,"studio/build-local")}),use(r);let s=Lo.get(kH.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!tse.isEmpty(s)&&s.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[cse,ise],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),ose(i,o)}),r.get("/health",()=>"HarperDB is running."),Ys.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(Ese,"buildServer");function hse(e){let t=Lo.get(wl.OPERATIONSAPI_NETWORK_TIMEOUT),r=Lo.get(wl.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:_se,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}a(hse,"getServerOptions");function mse(){let e=Lo.get(wl.OPERATIONSAPI_NETWORK_CORS),t=Lo.get(wl.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===dse)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(n,s)=>s(null,t.indexOf(n)!==-1))),r}a(mse,"getCORSOpts");function pse(){return Lo.get(wl.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??lse}a(pse,"getHeaderTimeoutConfig")});var tA={};Fe(tA,{disableNATS:()=>Tse,publishToStream:()=>vE,setNATSReplicator:()=>JR,setPublishToStream:()=>gse,setSubscription:()=>eA,start:()=>Sse});function Sse(){Cl.default.get(Dl.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Ase()}function Tse(e=!0){zH=e}function gse(e,t){vE=e,eA=t}function Ase(){if(zH||process.env._DISABLE_NATS)return;let e=mr(),t=Object.keys(e);t.push("system");for(let r of t){let n=e[r];for(let s in n){let i=n[s];JR(s,r,i)}}rA((r,n)=>{JR(r.tableName,r.databaseName,r),n&&jH(r)}),!YH&&(YH=!0)}function JR(e,t,r){if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.sources.some(s=>s?.isNATSReplicator))return;r.sourcedFrom(class extends $t{static{a(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[Me],record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[Me]})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[Me],record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this[Me],record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[Me]})}static defineSchema(i){jH(i)}static subscribe(){let i=new In;return eA(t,e,i),i}static subscribeOnThisThread(i){return i<(Cl.default.get(Dl.default.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??Rse)}static isEqual(i){return i.isNATSReplicator}static isNATSReplicator=!0;static shouldReceiveInvalidations=!0},{intermediateSource:!0});function n(s){let i=s?.transaction?.nats;if(!i)if(s?.transaction){s.transaction.nats=i=new PE(s.transaction,s);let o=s.transaction;for(;o.next;)o=o.next;o.next=s.transaction.nats,i.user=s.user,i.context=s}else i=JH;return i}a(n,"getNATSTransaction")}function jH(e){let t=Cl.default.get(Dl.default.CONFIG_PARAMS.CLUSTERING_NODENAME);vE(`${XR.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,ZR.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 KH,XR,ZR,WH,QH,Cl,Dl,UE,zH,vE,eA,Rse,JH,YH,PE,jR,XH=Re(()=>{Ae();cn();KH=H(ut()),XR=H(Ve()),ZR=H(Os());Ic();WH=H(MS()),QH=H(vr()),Cl=H(ee()),Dl=H(P()),UE=H($());a(Sse,"start");a(Tse,"disableNATS");vE=KH.publishToStream,eA=WH.setSubscription;a(gse,"setPublishToStream");Rse=2;a(Ase,"assignReplicationSource");a(JR,"setNATSReplicator");a(jH,"publishSchema");PE=class{constructor(t,r){this.transaction=t;this.options=r}static{a(this,"NATSTransaction")}user;writes_by_db=new Map;addWrite(t,r){r.expiresAt=this.context?.expiresAt;let n=this.writes_by_db.get(t);n||this.writes_by_db.set(t,n=[]),n.push(r)}commit({timestamp:t}){let r=Cl.default.get(Dl.default.CONFIG_PARAMS.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writes_by_db){let o=[],c=[],u,_;for(let l of i){let d=l.table,E=l.operation=="put"?"upsert":l.operation;u||(UE.trace(`Sending transaction event ${E}`),_=u={operation:E,schema:s,table:d,__origin:{user:this.user?.username,timestamp:t,node_name:r}},u.hash_values=c,E!=="delete"&&E!=="invalidate"&&(u.records=o)),u.table===d&&u.operation===E?(o.push(l.record),c.push(l.id)):_=_.next={operation:E,table:d,id:l.id,record:l.record},l.expiresAt&&(_.expiresAt=l.expiresAt)}u&&n.push(vE(`${XR.SUBJECT_PREFIXES.TXN}.${s}.${u.table}`,(0,ZR.createNatsTableStreamName)(s,u.table),void 0,u)?.catch(l=>{throw UE.error("An error has occurred trying to replicate transaction",u,l),l.statusCode=504,l}))}return Promise.all(n)}},jR=class extends PE{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,QH.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};JH=new jR});var dx=g(Mi=>{"use strict";var{isMainThread:iA,parentPort:Ml,threadId:BE}=require("worker_threads"),{Socket:Ose,createServer:bse}=require("net"),{createServer:yse,IncomingMessage:Nse}=require("http"),{createServer:Ise}=require("https"),{readFileSync:wse,unlinkSync:ZH,existsSync:Cse}=require("fs"),Pt=$(),qe=ee(),_t=P(),{server:GE}=(lr(),ie(Gi)),{WebSocketServer:Dse}=require("ws"),{createSecureContext:Lse,createServer:Mse}=require("node:tls"),{getTicketKeys:nx,restartNumber:Pse,getWorkerIndex:Pl}=We(),{Headers:sx,appendHeader:Use}=(el(),ie(YU)),{recordAction:Ll,recordActionBinary:vse}=(Ds(),ie(pu)),{Request:ix,createReuseportFd:ex}=(ME(),ie(zR)),{checkMemoryLimit:Bse}=Xi(),{X509Certificate:Hse}=require("crypto"),ox=require("tls"),xse=ox.createSecureContext,Za;ox.createSecureContext=function(e){return Za||xse(e)};var ax=qe.get(_t.CONFIG_PARAMS.THREADS_DEBUG);if(ax){let e;if(iA)e=qe.get(_t.CONFIG_PARAMS.THREADS_DEBUG_PORT)??9229,process.on(["SIGINT","SIGTERM","SIGQUIT","exit"],()=>{try{require("inspector").close()}catch(t){Pt.info("Could not close debugger",t)}});else{let t=qe.get(_t.CONFIG_PARAMS.THREADS_DEBUG_STARTINGPORT);t&&Pl()>=0&&(e=t+Pl())}if(e){let t=qe.get(_t.CONFIG_PARAMS.THREADS_DEBUG_HOST),r=qe.get(_t.CONFIG_PARAMS.THREADS_DEBUG_WAITFORDEBUGGER);try{require("inspector").open(e,t,r)}catch(n){Pt.trace(`Could not start debugging on port ${e}, you may already be debugging:`,n.message)}}}else if(process.env.DEV_MODE&&iA)try{require("inspector").open(9229)}catch(e){Pse<=1&&Pt.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:fSe,CONFIG_PARAMS:Gse}=_t;qe.initSync();var qse=qe.get(Gse.HTTP_SESSIONAFFINITY),hs={};Mi.registerServer=uA;Mi.httpServer=lA;Mi.deliverSocket=cA;Mi.startServers=cx;Mi.when_components_loaded=null;Mi.createSNICallback=_A;GE.http=lA;GE.request=$se;GE.socket=Yse;GE.ws=Kse;var nA={},HE={},Fse,Ks={},xE={},kse=[],oA=[];function cx(){return Mi.when_components_loaded=dA().loadRootComponents(!0).then(()=>{Ml?.on("message",t=>{let{port:r,fd:n,data:s}=t;if(n)cA(n,r,s);else if(t.requestId)Vse(t);else if(t.type===_t.ITC_EVENT_TYPES.SHUTDOWN){Pt.trace("received shutdown request",BE);for(let i in hs){let o=hs[i],c;if(o.closeIdleConnections){let _=Object.getOwnPropertySymbols(o).find(E=>E.description.includes("connections")),l=0,d=setInterval(()=>{l++;let E=l>=100,f=o[_][E?"all":"idle"]();if(f.length===0){E&&clearInterval(d);return}l===1?Pt.info(`Closing ${f.length} idle connections`):E&&Pt.warn(`Forcefully closing ${f.length} active connections`);for(let h=0,p=f.length;h<p;h++){let S=f[h].socket;S._httpMessage&&!S._httpMessage.finished&&!E||(E?S.destroySoon():S.end(`HTTP/1.1 408 Request Timeout\r
|
|
28
|
+
`},compressible:!1,q:.8});Ft.set("application/x-www-form-urlencoded",{deserialize(e){let t={};for(let[r,n]of new URLSearchParams(e))if(t.hasOwnProperty(r)){let s=t[r];Array.isArray(s)?s.push(n):t.key=[s,n]}else t[r]=n},serialize(e){let t=new URLSearchParams;for(let r in e)t.set(r,e);return t.toString()}});A0={type:"application/json",serializeStream:Cc,serialize:hl,deserialize:nte,q:.5};Ft.set("*/*",A0);Ft.set("",A0);a(nte,"tryJSONParse");a(Qg,"registerContentHandlers");ste=require("fastify-plugin"),ite=ste(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=Xf(n.raw);s.type(c),s.serializer(function(u){return(o.serializeStream||o.serialize)(u,{headers:{set:(_,l)=>{s.header(_,l)}}})})}),r()},{name:"content-type-negotiation"});a(Xf,"findBestSerializer");m0=$g.default.get(Yg.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(Zf,"serialize");a(Ro,"serializeMessage");a(ote,"streamToBuffer");a(yo,"getDeserializer");a(p0,"deserializerUnknownType");a(ate,"transformIterable")});function jg(e,t,r,n,s,i,o,c){let u=e[0];if(t==="or"){let d=_(u);for(let f=1;f<e.length;f++){let h=e[f],p=_(h);d=d.concat(p)}let E=new Set;return d.filter(f=>{let h=f.key??f;return E.has(h)?!1:(E.add(h),!0)})}else{let d=_(u),E=l(e.slice(1),!0,u.estimated_count);return E.length>0?o(d,E):d}function _(d){return d.conditions?jg(d.conditions,d.operator,r,n,s,i,o,c):Ga(d,n,d.descending||s.reverse===!0,r,s.allowFullScan,c)}a(_,"executeCondition");function l(d,E,f){return d.map((h,p)=>{if(h.conditions){let R=h.operator==="or",y=l(h.conditions,!R,f);return R?(I,B)=>y.some(U=>U(I,B)):(I,B)=>y.every(U=>U(I,B))}let S=(h.attribute||h[0])===r.primaryKey,T=Tl(h,r,i,c,S,f);return E&&p<d.length-1&&f&&(f=mte(r.primaryStore,h.estimated_count,f)),T}).filter(Boolean)}a(l,"mapConditionsToFilters")}function Ga(e,t,r,n,s,i){let o=e[0]??e.attribute,c=e[1]??e.value,u=e.comparator;if(Array.isArray(o)){let R=o[0],y=Fs(n.attributes,R);if(y.relationship){if(o.length<2)throw new Xr.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let I=y.definition?.tableClass||y.elements?.definition?.tableClass,B=new Map,U=Ga({attribute:o.length>2?o.slice(1):o[1],value:c,comparator:u},t,r,I,s,B);if(y.relationship.to){i[o[0]]=B;let F=!!Fs(I.attributes,y.relationship.to)?.elements;U=dte(U,y,I.primaryStore,F,B)}if(y.relationship.from){let F=a(M=>Ga({attribute:y.relationship.from,value:M},t,r,n,s,B),"searchEntry");y.elements?(i[o[0]]=B,U=fte(U,y,I.primaryStore,B,F)):U=U.flatMap(F)}return U}else if(o.length===1)o=o[0];else throw new Xr.ClientError("Unable to query by attribute "+JSON.stringify(o))}let _,l,d,E;c instanceof Date&&(c=c.getTime());let f;switch(Xg[u]||u){case"lt":_=!0,l=c;break;case"le":_=!0,l=c,d=!0;break;case"gt":_=c,E=!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]=ds.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"equals":case void 0:_=c,l=c,d=!0;break;case"ne":if(c===null){_=c,E=!0;break}case"sort":case"contains":case"ends_with":_=!0,f=!0;break;default:throw new Xr.ClientError(`Unknown query comparator "${u}"`)}let h,p=o===n.primaryKey||o==null;if(typeof _=="string"&&_.length>Tn.MAX_SEARCH_KEY_LENGTH&&(_=_.slice(0,Tn.MAX_SEARCH_KEY_LENGTH)+Tn.OVERFLOW_MARKER,E=!1,h=Tl(e,n,null,i,p)),typeof l=="string"&&l.length>Tn.MAX_SEARCH_KEY_LENGTH&&(l=l.slice(0,Tn.MAX_SEARCH_KEY_LENGTH)+Tn.OVERFLOW_MARKER,d=!0,h=h??Tl(e,n,null,i,p)),r){let R=_;_=l,l=R,R=!E,E=!d,d=R}let S=p?n.primaryStore:n.indices[o];if(!S||S.isIndexing||f||c===null&&!S.indexNulls){if(s===!1&&!S)throw new Xr.ClientError(`"${o}" is not indexed, can not search for this attribute`,404);if(s===!1&&f)throw new Xr.ClientError(`Can not use ${u||"equal"} operator without combining with a condition that uses an index, can not search for attribute ${o}`,403);if(S?.isIndexing)throw new Xr.ServerError(`"${o}" is not indexed yet, can not search for this attribute`,503);if(c===null&&!S.indexNulls)throw new Xr.ClientError(`"${o}" is not indexed for nulls, index needs to be rebuilt to search for nulls, can not search for this attribute`,400);if(h=h??Tl(e,n,null,i,p),!h)throw new Xr.ClientError(`Unknown search operator ${e.comparator}`)}let T={start:_,end:l,inclusiveEnd:d,exclusiveStart:E,values:!0,versions:p,transaction:t,reverse:r};if(p){let R=S.getRange(T).map(h?function({key:y,value:I}){return this.isSync?I&&h(I)?y:Ci.SKIP:new Promise((B,U)=>setImmediate(()=>{try{B(I&&h(I)?y:Ci.SKIP)}catch(F){U(F)}}))}:y=>y.value==null?Ci.SKIP:y);return R.hasEntries=!0,R}else return S?S.getRange(T).map(h?function({key:R,value:y}){let I;return typeof R=="string"&&R.length>Tn.MAX_SEARCH_KEY_LENGTH?I=n.primaryStore.get(y):I={[o]:R},this.isSync?h(I)?y:Ci.SKIP:new Promise((B,U)=>setImmediate(()=>{try{B(h(I)?y:Ci.SKIP)}catch(F){U(F)}}))}:({value:R})=>R):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:R,value:y}){return this.isSync?y&&h(y)?R:Ci.SKIP:new Promise((I,B)=>setImmediate(()=>{try{I(y&&h(y)?R:Ci.SKIP)}catch(U){B(U)}}))})}function Fs(e,t){if(Array.isArray(t))if(t.length>1){let r=Fs(e,t[0]),n=(r?.definition?.tableClass||r?.elements.definition?.tableClass)?.attributes;return n?Fs(n,t.slice(1)):void 0}else t=t.toString();else typeof t!="string"&&(t=t.toString());return e.find(r=>r.name===t)}function dte(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i;s.hasMappings=!0;let o;return{next(){if(!i){let u=t.relationship.to,_=a((l,d)=>{let E=l;Array.isArray(l)&&(E=Gn(l),o=!0);let f=s.get(E);f?f.push(d):s.set(E,f=[d]),l!==E&&(f.key=l)},"add_entry");for(let l of e){let d=l.value??r.get(l.key??l),E=d?.[u];if(E!=null&&!s.filters?.some(f=>!f(d)))if(n)for(let f=0;f<E.length;f++)_(E[f],l);else _(E,l)}return i=(o?s:s.keys())[Symbol.iterator](),this.next()}let c=i.next();return c.done?c:{value:o?c.value[1].key||c.value[0]:c.value}}}}})}function fte(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i,o,c=new Set;return{next(){let u;if(o)for(;u=o.next(),!u.done;){let _=Gn(u.value);if(!c.has(_))return c.add(_),u}if(!i){let _=new Map;n.fromRecord=l=>l[t.relationship.from]?.filter?.(d=>_.has(Gn(d)));for(let l of e){if(n.filters){let d=r.get(l);if(n.filters.some(E=>!E(d)))continue}_.set(Gn(l),l)}return i=_.values()[Symbol.iterator](),this.next()}do{let _=i.next();return _.done?_:(o=s(_.value)[Symbol.iterator](),this.next())}while(!0)},return(){return o?.return?.()},throw(){return o?.throw?.()}}}})}function Tl(e,t,r,n,s,i){let o=e.comparator,c=e[0]??e.attribute,u=e[1]??e.value;if(Array.isArray(c)){if(c.length===0)return()=>!0;if(c.length===1)c=c[0];else if(c.length>1){let l=c[0],d=Fs(t.attributes,l),E=d.definition?.tableClass||d.elements.definition?.tableClass,f=n?.[l],h=Tl({attribute:c.length>2?c.slice(1):c[1],value:u,comparator:o},E,r,f?.[l]?.joined,c[1]===E.primaryKey,i);if(!h)return;if(f){f.filters||(f.filters=[]),f.filters.push(h);return}let p=t.propertyResolvers?.[l],S,T=a((R,y)=>{let I,B;if(p){if(p.from&&h.idFilter){if(!S)if(h.idFilter.idSet?.size===1){for(let F of h.idFilter.idSet)e={attribute:p.from,value:F};S=_(p.from,h.idFilter,!0,!0)}else S=_(p.from,h.idFilter,!1,!0);let U=S(R);return S.idFilter&&(T.idFilter=S.idFilter),U}B=p(R,r,y),I=B?.value}else I=R[l];return I?Array.isArray(I)?I.some(h):h(I,B):!1},"recordFilter");return T}}switch(u instanceof Date&&(u=u.getTime()),Xg[o]||o){case Tn.SEARCH_TYPES.EQUALS:case void 0:return _(c,l=>l===u,!0);case"contains":return _(c,l=>l?.toString().includes(u));case"ends_with":return _(c,l=>l?.toString().endsWith(u));case"starts_with":return _(c,l=>typeof l=="string"&&l.startsWith(u),!0);case"prefix":return Array.isArray(u)?u[u.length-1]==null&&(u=u.slice(0,-1)):u=[u],_(c,l=>{if(!Array.isArray(l))return!1;for(let d=0,E=u.length;d<E;d++)if(l[d]!==u[d])return!1;return!0},!0);case"between":return u[0]instanceof Date&&(u[0]=u[0].getTime()),u[1]instanceof Date&&(u[1]=u[1].getTime()),_(c,l=>(0,ds.compareKeys)(l,u[0])>=0&&(0,ds.compareKeys)(l,u[1])<=0,!0);case"gt":return _(c,l=>(0,ds.compareKeys)(l,u)>0);case"ge":return _(c,l=>(0,ds.compareKeys)(l,u)>=0);case"lt":return _(c,l=>(0,ds.compareKeys)(l,u)<0);case"le":return _(c,l=>(0,ds.compareKeys)(l,u)<=0);case"ne":return _(c,l=>(0,ds.compareKeys)(l,u)!==0);case"sort":return()=>!0;default:throw new Xr.ClientError(`Unknown query comparator "${o}"`)}function _(l,d,E,f){let h;E=E&&!s&&t?.indices[l]&&i>3,E&&(e.estimated_count==null&&tE(t)(e),h=e.estimated_count>>4,(isNaN(h)||h>=i)&&(E=!1));let p=0,S=3;function T(R){let y=R[l],I;if(typeof y!="object"||!y||f?I=d(y):Array.isArray(y)?I=y.some(d):y instanceof Date&&(I=d(y.getTime())),E&&(S++,!I&&!T.idFilter&&++p/S*(i-S)>h)){let B=Ga(e,r.transaction.getReadTxn(),!1,t).map(Gn),U=new Set(B);T.idFilter=F=>U.has(Gn(F)),T.idFilter.idSet=U}return I}return a(T,"recordFilter"),s&&(T.idFilter=d),T}a(_,"attributeComparator")}function tE(e){function t(r){if(r.estimated_count===void 0){if(r.conditions){let s;if(r.operator==="or"){s=0;for(let i of r.conditions)t(i),s+=i.estimated_count}else{s=1/0;for(let i of r.conditions)t(i),s=isFinite(s)?s*i.estimated_count/qs(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=Xg[n]||n,n===Tn.SEARCH_TYPES.EQUALS||!n){let s=r[0]??r.attribute;if(s==null||s===e.primaryKey)r.estimated_count=1;else if(Array.isArray(s)&&s.length>1){let i=Fs(e.attributes,s[0]),o=i.definition?.tableClass||i.elements.definition?.tableClass,c=tE(o)({value:r.value,attribute:s.length>2?s.slice(1):s[1],comparator:"equals"}),u=e.indices[i.relationship.from];r.estimated_count=c+(u?c*qs(e.indices[i.relationship.from])/(qs(o.primaryStore)||1):c)}else{let i=e.indices[s];r.estimated_count=i?i.getValuesCount(r[1]??r.value):1/0}}else if(n==="contains"||n==="ends_with"||n==="ne"){let s=r[0]??r.attribute,i=e.indices[s];r.value===null&&n==="ne"?r.estimated_count=qs(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else n==="starts_with"||n==="prefix"?r.estimated_count=lte*qs(e.primaryStore)+1:n==="between"?r.estimated_count=ute*qs(e.primaryStore)+1:n==="sort"?r.estimated_count=qs(e.primaryStore)+1:r.estimated_count=cte*qs(e.primaryStore)+1;typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return a(t,"estimateConditionForTable"),t}function rE(e){if(e)if(Di=e,Ha.lastIndex=0,Ete.test(e))try{let t=pl(new xa,"");if(Dr!==Di.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 ${Dr} in '${Di}'`,t}else{let t=new URLSearchParams(e);return t.conditions=t,t}}function pl(e,t){let r=Ha,n,s,i,o,c,u=decodeURIComponent,_;for(;n=r.exec(Di);){Dr=r.lastIndex;let[,l,d]=n;if(o){if(l)throw new SyntaxError(`expected operator, but encountered '${l}'`);o=!1,c=!1}else c=!0;let E;switch(d){case"=":if(s){if(l.length<=2)i=l;else throw new SyntaxError(`invalid FIQL operator ${l}`);u=zg}else{if(u=decodeURIComponent,i="equals",!l)throw new SyntaxError("attribute must be specified before equality comparator");s=Sl(l)}break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":if(i=_te[d],u=Jg[i]?zg:decodeURIComponent,!l)throw new SyntaxError(`attribute must be specified before comparator ${d}`);s=Sl(l);break;case"|":case"&":case"":case void 0:if(s==null){if(s===void 0)throw t?new SyntaxError(`expected '${t}', but encountered ${d[0]?"'"+d[0]+"'":"end of string"}}`):new SyntaxError(`no comparison specified before ${d?"'"+d+"'":"end of string"}`)}else{if(!e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");let h={comparator:i,attribute:s,value:u(l)};i==="eq"&&b0(h,l),eE(e,_),e.conditions.push(h)}d==="&"&&(_="and"),d==="|"&&(_="or"),s=void 0;break;case",":if(e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");e.push(Sl(l)),s=void 0;break;case"(":Ha.lastIndex=Dr;let f=pl(l?[]:new xa,")");switch(l){case"":eE(e,_),e.conditions.push(f);break;case"limit":switch(f.length){case 1:e.limit=+f[0];break;case 2:e.offset=+f[0],e.limit=f[1]-e.offset;break;default:throw new SyntaxError("limit must have 1 or 2 arguments")}break;case"select":Array.isArray(f[0])&&f.length===1&&!f[0].name?(e.select=f[0],e.select.asArray=!0):f.length===1?e.select=f[0]:f.length===2&&f[1]===""?e.select=f.slice(0,1):e.select=f;break;case"group-by":throw new SyntaxError("group by is not implemented yet");case"sort":e.sort=y0(f);break;default:throw new SyntaxError(`unknown query function call ${l}`)}Di[Dr]===","?r.lastIndex=++Dr:o=!0,s=null;break;case"{":if(e.conditions)throw new SyntaxError("property sets are not allowed in a queries");if(!l)throw new SyntaxError("property sets must have a defined parent property name");Ha.lastIndex=Dr,E=pl([],"}"),E.name=l,e.push(E),Di[Dr]===","?r.lastIndex=++Dr:o=!0;break;case"[":Ha.lastIndex=Dr,l?(E=pl(new xa,"]"),E.name=l):E=pl(e.conditions?new xa:[],"]"),e.conditions?(eE(e,_),e.conditions.push(E),s=null):e.push(E),Di[Dr]===","?r.lastIndex=++Dr:o=!0;break;case")":case"]":case"}":if(t===d[0]){if(e.conditions){if(s){let h={comparator:i||"equals",attribute:s,value:u(l)};i==="eq"&&b0(h,l),eE(e,_),e.conditions.push(h)}else if(l)throw new SyntaxError("no attribute or comparison specified")}else(l||e.length>0&&c)&&e.push(Sl(l));return e}else throw t?new SyntaxError(`expected '${t}', but encountered '${d[0]}'`):new SyntaxError(`unexpected token '${d[0]}'`);default:throw new SyntaxError(`unexpected operator '${d}'`)}if(t!==")"&&(r=s?hte:Ha,r.lastIndex=Dr),Dr===Di.length)return e}if(t)throw new SyntaxError(`expected '${t}', but encountered end of string`)}function eE(e,t){if(e.conditions.length>0)if(e.operator){if(e.operator!==t)throw new SyntaxError("Can not mix operators within a condition grouping")}else e.operator=t}function Sl(e){return e.indexOf(".")>-1?e.split(".").map(Sl):decodeURIComponent(e)}function zg(e){if(e==="null")return null;if(e.indexOf("/")>-1){let t=e.split("/"),r=new qa(t.length);for(let n=0,s=t.length;n<s;n++)r[n]=zg(t[n]);return r}if(e.indexOf(":")>-1){let[t,r]=e.split(":");if(t==="number")return+r;if(t==="boolean")return r==="true";if(t==="date")return new Date(isNaN(r)?decodeURIComponent(r):+r);if(t==="string")return decodeURIComponent(r);throw new Xr.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function b0(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new Xr.ClientError("wildcard can only be used at the end of a string")}function y0(e){let t=N0(e[0]);return e.length>1&&(t.next=y0(e.slice(1))),t}function N0(e){if(Array.isArray(e)){let t=N0(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 Gn(e){return Array.isArray(e)?e.join("\0"):e}function qs(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function mte(e,t,r){return t*r/qs(e)}var Xr,Tn,ds,Ci,cte,ute,lte,_te,Jg,Xg,Ete,Ha,hte,Dr,Di,xa,nE=Re(()=>{Xr=x(se()),Tn=x(ft()),ds=require("ordered-binary"),Ci=require("lmdb");cn();cte=.3,ute=.1,lte=.05,_te={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},Jg={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};a(jg,"executeConditions");a(Ga,"searchByIndex");a(Fs,"findAttribute");a(dte,"joinTo");a(fte,"joinFrom");Xg={eq:"equals",greater_than:"gt",greaterThan:"gt",greater_than_equal:"ge",greaterThanEqual:"ge",less_than:"lt",lessThan:"lt",less_than_equal:"le",lessThanEqual:"le",not_equal:"ne",notEqual:"ne",equal:"equals",sw:"starts_with",startsWith:"starts_with",ew:"ends_with",endsWith:"ends_with",ct:"contains",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(Tl,"filterByType");a(tE,"estimateCondition");Ete=/[()[\]|!<>.]|(=\w*=)/,Ha=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,hte=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;a(rE,"parseQuery");a(pl,"parseBlock");a(eE,"assignOperator");a(Sl,"decodeProperty");a(zg,"typedDecoding");a(b0,"wildcardDecoding");a(y0,"toSortObject");a(N0,"toSortEntry");xa=class{static{a(this,"Query")}constructor(){this.conditions=[]}[Symbol.iterator](){return this.conditions[Symbol.iterator]()}get(t){for(let r=0;r<this.conditions.length;r++){let n=this.conditions[r];if(n.attribute===t)return n.value}}};a(Gn,"flattenKey");a(qs,"estimatedEntryCount");a(mte,"intersectionEstimate")});function L0(e){let t={openapi:pte,info:{title:"HarperDB HTTP REST interface",version:(0,D0.version)()},paths:{},components:{schemas:{},securitySchemes:{basicAuth:{type:"http",scheme:"basic"},bearerAuth:{type:"http",scheme:"bearer",bearerFormat:"JWT"}}}},r=[{basicAuth:[],bearerAuth:[]}];for(let[,n]of e){if(!n.path)continue;let{path:s}=n,i=s.split("/").slice(-1),{attributes:o,primaryKey:c,prototype:u}=n.Resource;if(c=c??"id",!c)continue;let _={},l=[];if(o)for(let{type:y,name:I,elements:B,relationship:U,definition:F}of o){if(U)y==="array"?_[I]={type:"array",items:{$ref:Li+B.type}}:_[I]={$ref:Li+y};else{let M=F??B?.definition;if(M){if(!t.components.schemas[M.type]){let Q={};M.properties.forEach(J=>{Q[J.name]=new rR(Zg[J.type],J.type)}),t.components.schemas[M.type]=new C0(Q)}y==="array"?_[I]={type:"array",items:{$ref:Li+M.type}}:_[I]={$ref:Li+M.type}}else y==="array"?B.type==="Any"||B.type=="ID"?_[I]={type:"array",items:{format:B.type}}:_[I]={type:"array",items:new rR(Zg[B.type],B.type)}:y==="Any"||y=="ID"?_[I]={format:y}:_[I]=new rR(Zg[y],y)}l.push(new nR(I,"query",_[I]))}let d=Object.keys(_),E=new nR(c,"path",{format:"ID"});E.required=!0,E.description="primary key of record";let f=new nR("property","path",{enum:d});f.required=!0,t.components.schemas[i]=new C0(_);let h=u.post!==Resource.prototype.post||u.update,p=typeof u.put=="function",S=typeof u.get=="function",T=typeof u.delete=="function",R="/"+s+"/";h&&(t.paths[R]={},t.paths[R].post=new Ste(i,r,"create a new record auto-assigning a primary key")),S&&(t.paths[R]||(t.paths[R]={}),t.paths[R].get=new eR(l,r,{200:new tR({$ref:Li+i})},"search for records by the specified property name and value pairs")),T&&(t.paths[R]||(t.paths[R]={}),t.paths[R].delete=new w0(l,r,"delete all the records that match the provided query",{204:new I0})),R="/"+s+"/{"+c+"}",S&&(t.paths[R]={},t.paths[R].get=new eR([E],r,{200:new tR({$ref:Li+i})},"retrieve a record by its primary key")),p&&(t.paths[R]||(t.paths[R]={}),t.paths[R].put=new Tte([E],r,i,"create or update the record with the URL path that maps to the record's primary key")),T&&(t.paths[R]||(t.paths[R]={}),t.paths[R].delete=new w0([E],r,"delete a record with the given primary key",{204:new I0})),S&&f.schema.enum.length>0&&(R="/"+s+"/{"+c+"}.{property}",t.paths[R]={},t.paths[R].get=new eR([E,f],r,{200:new tR({enum:d})},"used to retrieve the specified property of the specified record"))}return t}function Ste(e,t,r){this.description=r,this.requestBody={content:{"application/json":{schema:{$ref:Li+e}}}},this.security=t,this.responses={200:{description:sR,headers:{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}},content:{"application/json":{schema:{type:"string",format:"ID"}}}}}}function eR(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function tR(e){this.description=sR,this.content={"application/json":{schema:e}}}function I0(){this.description="successfully processed request, no content returned to client"}function Tte(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Li+r}}}},this.responses={200:{description:sR}}}function w0(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function C0(e){this.type="object",this.properties=e}function rR(e,t){this.type=e,this.format=t}function nR(e,t,r){this.name=e,this.in=t,this.schema=r}var D0,pte,Zg,Li,sR,M0=Re(()=>{D0=x(Zd()),pte="3.0.3",Zg={Int:"integer",Float:"number",Long:"integer",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer",array:"array"},Li="#/components/schemas/",sR="successful operation";a(L0,"generateJsonApi");a(Ste,"Post");a(eR,"Get");a(tR,"Response200");a(I0,"Response204");a(Tte,"Put");a(w0,"Delete");a(C0,"ResourceSchema");a(rR,"Type");a(nR,"Parameter")});var iE={};Fe(iE,{start:()=>Ate});async function Rte(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&rE(e);let s=new Ni;try{e.responseHeaders=s;let i=e.url.slice(1),o,c;if(i!==P0){let h=sE.getMatch(i);if(!h)return t(e);e.handlerPath=h.path,o={url:h.relativeURL,async:!0},c=h.Resource}let u=r["cache-control"];if(u){u=u.toLowerCase();let h=u.match(/max-age=(\d+)/)?.[1];h&&(e.expiresAt=h*1e3+Date.now()),u.includes("only-if-cached")&&(e.onlyIfCached=!0),u.includes("no-cache")&&(e.noCache=!0),u.includes("no-store")&&(e.noCacheStore=!0),u.includes("stale-if-error")&&(e.staleIfError=!0),u.includes("must-revalidate")&&(e.mustRevalidate=!0)}let _=await rt(e,()=>{if(r["content-length"]||r["transfer-encoding"])try{e.data=yo(r["content-type"],!0)(e.body,e.headers)}catch(h){throw new Fa.ClientError(h,400)}if(e.authorize=!0,i===P0&&n==="GET"){if(e?.user?.role?.permission?.super_user)return L0(sE);throw new Fa.ServerError("Forbidden",403)}switch(n){case"GET":case"HEAD":return c.get(o,e);case"POST":return c.post(o,e.data,e);case"PUT":return c.put(o,e.data,e);case"DELETE":return c.delete(o,e);case"PATCH":return c.patch(o,e.data,e);case"OPTIONS":s.setIfNone("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return c.connect(o,null,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return c.query(o,e.data,e);case"COPY":return c.copy(o,r.destination,e);case"MOVE":return c.move(o,r.destination,e);case"BREW":throw new Fa.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new Fa.ServerError(`Method ${n} is not recognized`,501)}}),l=200,d;if(_==null)l=n==="GET"||n==="HEAD"?404:204,iR.lastModified&&e.lastModified&&s.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(d=e.lastModified){gte[0]=d;let h=String.fromCharCode(34,(Qt[0]&63)+62,(Qt[0]>>6)+(Qt[1]<<2&63)+62,(Qt[1]>>4)+(Qt[2]<<4&63)+62,(Qt[2]>>2)+62,(Qt[3]&63)+62,(Qt[3]>>6)+(Qt[4]<<2&63)+62,(Qt[4]>>4)+(Qt[5]<<4&63)+62,(Qt[5]>>2)+62,(Qt[6]&63)+62,(Qt[6]>>6)+(Qt[7]<<2&63)+62,34),p=r["if-none-match"];p&&h==p?(_?.onDone&&_.onDone(),l=304,_=void 0):s.setIfNone("ETag",h),iR.lastModified&&s.setIfNone("Last-Modified",new Date(d).toUTCString())}e.createdResource&&(l=201),e.newLocation&&s.setIfNone("Location",e.newLocation);let E={status:l,headers:s,body:void 0},f=_?.wasLoadedFromSource?.();return f!==void 0&&(E.wasCacheMiss=f,!f&&d&&s.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||d))/1e3))),_!==void 0&&(E.body=Zf(_,e,E),n==="HEAD"&&(E.body=void 0)),E}catch(i){i.statusCode?i.statusCode===500?No.warn(i):No.info(i):No.error(i),i.statusCode===405&&(i.method&&(i.message+=` to handle HTTP method ${i.method.toUpperCase()||""}`),i.allow&&(i.allow.push("trace","head","options"),s.setIfNone("Allow",i.allow.map(c=>c.toUpperCase()).join(", "))));let o={status:i.statusCode||500,headers:s,body:void 0};return o.body=Zf(i.contentType?i:i.toString(),e,o),o}}function Ate(e){iR=e,!U0&&(U0=!0,sE=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return Rte(t,r)},e),e.server.ws(async(t,r,n)=>{gl++;let s=new In;v0||(v0=!0,mu(u=>{gl>0&&u.push({metric:"ws-connections",connections:gl,byThread:!0})}));let i;t.on("error",u=>{i=!0,No.warn(u)});let o;t.on("message",a(function(_){o||(o=yo(r.requestedContentType??r.headers.asObject["content-type"],!1));let l=o(_);s.push(l)},"message"));let c;t.on("close",()=>{gl--,Wr(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()});try{await n;let u=r.url.slice(1),_=sE.getMatch(u);if(Wr(!!_,"connection","ws","connect"),_){r.handlerPath=_.path,Sr(h=>({count:h.count,total:gl}),"connections",r.handlerPath,"connect","ws"),r.authorize=!0;let l={url:_.relativeURL,async:!0},d=_.Resource;c=(await rt(r,()=>d.connect(l,s,r)))[Symbol.asyncIterator]();let f;for(;!(f=await c.next()).done;){let h=Ro(f.value,r);t.send(h),Sr(h.length,"bytes-sent",r.handlerPath,"message","ws")}}else return t.close(1011,`No resource was found to handle ${r.pathname}`)}catch(u){t.close(Ote[u.statusCode]||1011,u.toString()),t.close("login failed")}t.close()},e))}var No,Fa,Qt,gte,iR,P0,U0,sE,v0,gl,Ote,B0=Re(()=>{Da();Ds();No=x($()),Fa=x(se());nE();Ic();so();el();M0();Qt=new Uint8Array(8),gte=new Float64Array(Qt.buffer,0,1),iR={},P0="openapi";a(Rte,"http");gl=0;a(Ate,"start");Ote={401:3e3,403:3003}});var oR=g((ape,H0)=>{var{recordAction:oE,recordActionBinary:bte}=(Ds(),ie(pu)),yte=require("fastify-plugin"),Nte=200;H0.exports=yte(function(e,t,r){e.addHook("onResponse",async(n,s)=>{let i=s.elapsedTime}),e.addHook("onSend",async(n,s,i)=>{let o=s.elapsedTime,c=performance.now(),u=s.request.routeOptions,_,l,d;u.config?.isOperation?(_=n.body?.operation,l="operation"):(_=u.url,l="fastify-route",d=u.method),oE(o,"duration",_,d,l),bte(s.raw.statusCode<400,"success",_,d,l);let E=Nte;i?.pipe?(i.on("data",S=>{E+=S.length}),i.on("end",()=>{oE(performance.now()-c,"transfer",_,d,l),oE(E,"bytes-sent",_,d,l)})):(E+=i?.length||0,oE(E,"bytes-sent",_,d,l));let f=o.toFixed(3),h=s.getHeader("Server-Timing"),p=`db;dur=${f}`;s.header("Server-Timing",h?`${h}, ${p}`:p)}),r()},{name:"hdb-request-time"})});var dR=g((lpe,F0)=>{var lE=require("clone"),_E=Xe(),Ite=z(),cE=P(),cpe=$(),aR=require("fs"),uR=require("joi"),{string:uE}=uR.types(),{hdb_errors:wte,handleHDBError:aE}=se(),{HDB_ERROR_MSGS:upe,HTTP_STATUS_CODES:cR}=wte,{common_validators:ka}=jn(),x0=" is required",Cte=["insert","update","upsert"],lR={database:{presence:!1,format:ka.schema_format,length:ka.schema_length},schema:{presence:!1,format:ka.schema_format,length:ka.schema_length},table:{presence:!0,format:ka.schema_format,length:ka.schema_length},action:{inclusion:{within:Cte,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},Dte={schema:uE.required(),table:uE.required(),action:uE.valid("insert","update","upsert")},{AWS_ACCESS_KEY:Lte,AWS_SECRET:Mte,AWS_BUCKET:Pte,AWS_FILE_KEY:Ute,REGION:vte}=cE.S3_BUCKET_AUTH_KEYS,Bte={s3:{presence:!0},[`s3.${Lte}`]:{presence:!0,type:"String"},[`s3.${Mte}`]:{presence:!0,type:"String"},[`s3.${Pte}`]:{presence:!0,type:"String"},[`s3.${Ute}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${vte}`]:{presence:!0,type:"String"}},G0=lE(lR);G0.data.presence={message:x0};var q0=lE(lR);q0.file_path.presence={message:x0};var Hte=Object.assign(lE(lR),Bte),_R=lE(Dte);_R.csv_url=uE.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();_R.passthrough_headers=uR.object();function xte(e){let t=_E.validateObject(e,G0);return dE(e,t)}a(xte,"dataObject");function Gte(e){let t=_E.validateBySchema(e,uR.object(_R));return dE(e,t)}a(Gte,"urlObject");function qte(e){let t=_E.validateObject(e,q0);return dE(e,t)}a(qte,"fileObject");function Fte(e){let t=_E.validateObject(e,Hte);return dE(e,t)}a(Fte,"s3FileObject");function dE(e,t){if(!t){let r=Ite.checkGlobalSchemaTable(e.schema,e.table);if(r)return aE(new Error,r,cR.BAD_REQUEST);if(e.operation===cE.OPERATIONS_ENUM.CSV_FILE_LOAD)try{aR.accessSync(e.file_path,aR.constants.R_OK|aR.constants.F_OK)}catch(n){return n.code===cE.NODE_ERROR_CODES.ENOENT?aE(n,`No such file or directory ${n.path}`,cR.BAD_REQUEST):n.code===cE.NODE_ERROR_CODES.EACCES?aE(n,`Permission denied ${n.path}`,cR.BAD_REQUEST):aE(n)}}return t}a(dE,"postValidateChecks");F0.exports={dataObject:xte,urlObject:Gte,fileObject:qte,s3FileObject:Fte}});var fR=g((dpe,k0)=>{"use strict";var Rl=$(),fE=P();async function kte(e,t,r,n=void 0){if(!e||typeof e!="function")throw new Error("Invalid function parameter");let s;try{return s=await e(t),r&&await r(t,s,n),t.operation===fE.OPERATIONS_ENUM.INSERT||t.operation===fE.OPERATIONS_ENUM.UPDATE||t.operation===fE.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===fE.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(Rl.info(i.message),i):i.http_resp_msg?(Rl.error(`Error calling operation: ${e.name}`),Rl.error(i.http_resp_msg),i):(Rl.error(`Error calling operation: ${e.name}`),Rl.error(i),i)}}a(kte,"callOperationFunctionAsAwait");k0.exports={callOperationFunctionAsAwait:kte}});var $0=g((Epe,V0)=>{"use strict";var ER=class{static{a(this,"BulkLoadFileObject")}constructor(t,r,n,s,i,o,c=null){this.op=t,this.action=r,this.schema=n,this.table=s,this.file_path=i,this.file_type=o,this.role_perms=c}},hR=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};V0.exports={BulkLoadFileObject:ER,BulkLoadDataObject:hR}});var K0=g((mpe,Y0)=>{"use strict";var mR=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};Y0.exports=mR});var AR=g((Ape,uB)=>{"use strict";var EE=qr(),mE=dR(),Vte=require("needle"),qn=P(),Spe=Ve(),Va=z(),{handleHDBError:lt,hdb_errors:tB}=se(),{HTTP_STATUS_CODES:zt,HDB_ERROR_MSGS:Lt,CHECK_LOGS_WRAPPER:wo}=tB,$a=$(),pR=require("papaparse");Va.promisifyPapaParse();var Fn=require("fs-extra"),$te=require("path"),{chain:W0}=require("stream-chain"),Q0=require("stream-json/streamers/StreamArray"),z0=require("stream-json/utils/Batch"),J0=require("stream-chain/utils/comp"),{finished:j0}=require("stream"),Yte=ee(),rB=fR(),Kte=Fg(),{BulkLoadFileObject:TR,BulkLoadDataObject:Wte}=$0(),gR=Lg(),{verifyBulkLoadAttributePerms:nB}=Kf(),Tpe=K0(),gpe=ut(),Rpe=Os(),{databases:Qte}=(Ae(),ie(ke)),{coerceType:zte}=(pE(),ie(OR)),X0="No records parsed from csv file.",Io=`${Yte.get("HDB_ROOT")}/tmp`,{schema_regex:Jte}=jn(),Z0=1024*1024*2,eB=5e3,jte={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};uB.exports={csvDataLoad:Xte,csvURLLoad:Zte,csvFileLoad:ere,importFromS3:tre};async function Xte(e,t){let r=mE.dataObject(e);if(r)throw lt(r,r.message,zt.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=oB(e.schema,e.table),i=pR.parse(e.data,{header:!0,skipEmptyLines:!0,transform:SR.bind(null,s),dynamicTyping:!1}),o=new gR;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&nB(e.hdb_user.role.permission,this.job_operation_function.name,e.action,e.schema,e.table,i.meta.fields,o);let c=o.getPermsResponse();if(c)throw lt(new Error,c,zt.BAD_REQUEST,void 0,void 0,!0);let u=new Wte(e.action,e.schema,e.table,i.data);return n=await rB.callOperationFunctionAsAwait(aB,u,null),n.message===X0?X0:cB(n.records,n.number_written)}catch(s){throw Co(s)}}a(Xte,"csvDataLoad");async function Zte(e){let t=mE.urlObject(e);if(t)throw lt(t,t.message,zt.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${Io}/${r}`;try{await rre(e,r)}catch(s){throw $a.error(Lt.DOWNLOAD_FILE_ERR(r)+" - "+s),lt(s,wo(Lt.DOWNLOAD_FILE_ERR(r)))}try{let s=new TR(this.job_operation_function.name,e.action,e.schema,e.table,n,qn.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await RR(s);return await hE(n),i}catch(s){throw await hE(n),Co(s)}}a(Zte,"csvURLLoad");async function ere(e){let t=mE.fileObject(e);if(t)throw lt(t,t.message,zt.BAD_REQUEST,void 0,void 0,!0);let r=new TR(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,qn.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await RR(r)}catch(n){throw Co(n)}}a(ere,"csvFileLoad");async function tre(e){let t=mE.s3FileObject(e);if(t)throw lt(t,t.message,zt.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=$te.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${Io}/${s}`;let i=new TR(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user.role.permission);await nre(s,e);let o=await RR(i);return await hE(r),o}catch(n){throw await hE(r),Co(n)}}a(tre,"importFromS3");async function rre(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await Vte("get",e.csv_url,n)}catch(n){let s=`Error downloading CSV file from ${e.csv_url}, status code: ${n.statusCode}. Check the log for more information.`;throw lt(n,s,n.statusCode,qn.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}ire(r,e.csv_url),await sre(t,r.raw)}a(rre,"downloadCSVFile");async function nre(e,t){try{let r=`${Io}/${e}`;await Fn.mkdirp(Io),await Fn.writeFile(`${Io}/${e}`,"",{flag:"a+"});let n=await Fn.createWriteStream(r),s=await Kte.getFileStreamFromS3(t);await new Promise((i,o)=>{s.on("error",function(c){o(c)}),s.pipe(n).on("error",function(c){o(c)}).on("close",function(){$a.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw $a.error(Lt.S3_DOWNLOAD_ERR+" - "+r),lt(r,wo(Lt.S3_DOWNLOAD_ERR))}}a(nre,"downloadFileFromS3");async function sre(e,t){try{await Fn.mkdirp(Io),await Fn.writeFile(`${Io}/${e}`,t)}catch(r){throw $a.error(Lt.WRITE_TEMP_FILE_ERR),lt(r,wo(Lt.DEFAULT_BULK_LOAD_ERR))}}a(sre,"writeFileToTempFolder");async function hE(e){if(e)try{await Fn.access(e),await Fn.unlink(e)}catch{$a.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(hE,"deleteTempFile");function ire(e,t){if(e.statusCode!==tB.HTTP_STATUS_CODES.OK)throw lt(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,zt.BAD_REQUEST);if(!jte[e.headers["content-type"]])throw lt(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,zt.BAD_REQUEST);if(!e.raw)throw lt(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,zt.BAD_REQUEST)}a(ire,"validateURLResponse");async function RR(e){try{let t;switch(e.file_type){case qn.VALID_S3_FILE_TYPES.CSV:t=await ore(e);break;case qn.VALID_S3_FILE_TYPES.JSON:t=await are(e);break;default:throw lt(new Error,Lt.DEFAULT_BULK_LOAD_ERR,zt.BAD_REQUEST,qn.LOG_LEVELS.ERROR,Lt.INVALID_FILE_EXT_ERR(e))}return cB(t.records,t.number_written)}catch(t){throw Co(t)}}a(RR,"fileLoad");async function sB(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;s&&s.pause();let o={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await EE.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&nB(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let u=lt(c);r(u)}}a(sB,"validateChunk");async function iB(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;Va.autoCastJSONDeep(i),s&&s.pause();let o=n.meta?n.meta.fields:null;if(o)i.forEach(c=>{!Va.isEmpty(c)&&!Va.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 rB.callOperationFunctionAsAwait(aB,c,null);t.records+=u.records,t.number_written+=u.number_written,s&&s.resume()}catch(c){let u=lt(c,wo(Lt.INSERT_CSV_ERR),zt.INTERNAL_SERVER_ERROR,qn.LOG_LEVELS.ERROR,Lt.INSERT_CSV_ERR+" - "+c);r(u)}}a(iB,"insertChunk");async function ore(e){let t={records:0,number_written:0},r=oB(e.schema,e.table);try{let n=new gR,s=Fn.createReadStream(e.file_path,{highWaterMark:Z0});s.setEncoding("utf8"),await pR.parsePromise(s,sB.bind(null,e,n),SR.bind(null,r));let i=n.getPermsResponse();if(i)throw lt(new Error,i,zt.BAD_REQUEST);return s=Fn.createReadStream(e.file_path,{highWaterMark:Z0}),s.setEncoding("utf8"),await pR.parsePromise(s,iB.bind(null,e,t),SR.bind(null,r)),s.destroy(),t}catch(n){throw lt(n,wo(Lt.PAPA_PARSE_ERR),zt.INTERNAL_SERVER_ERROR,qn.LOG_LEVELS.ERROR,Lt.PAPA_PARSE_ERR+n)}}a(ore,"callPapaParse");function oB(e,t){let r=Qte[e][t].attributes,n=new Map;for(let s of r)s.type&&n.set(s.name,i=>zte(i,s));return n}a(oB,"createTransformMap");function SR(e,t,r){let n=e.get(r);return n?n(t):Va.autoCast(t)}a(SR,"typeFunction");async function are(e){let t={records:0,number_written:0},r=a(n=>{throw n},"throwErr");try{let n=new gR,s=W0([Fn.createReadStream(e.file_path,{encoding:"utf-8"}),Q0.withParser(),c=>c.value,new z0({batchSize:eB}),J0(async c=>{await sB(e,n,r,c)})]);await new Promise((c,u)=>{j0(s,_=>{_?u(_):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw lt(new Error,i,zt.BAD_REQUEST);let o=W0([Fn.createReadStream(e.file_path,{encoding:"utf-8"}),Q0.withParser(),c=>c.value,new z0({batchSize:eB}),J0(async c=>{await iB(e,t,r,c)})]);return await new Promise((c,u)=>{j0(o,_=>{_?u(_):c()}),o.resume()}),t}catch(n){throw lt(n,wo(Lt.INSERT_JSON_ERR),zt.INTERNAL_SERVER_ERROR,qn.LOG_LEVELS.ERROR,Lt.INSERT_JSON_ERR+n)}}a(are,"insertJson");async function aB(e){let t={};try{e.data&&e.data.length>0&&cre(e.data[0])?t=await ure(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",$a.info(t.message))}catch(r){throw Co(r)}return t}a(aB,"callBulkFileLoad");function cre(e){let t=Object.keys(e);for(let r of t)if(!Jte.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(cre,"validateColumnNames");async function ure(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=EE.insert;break;case"update":i=EE.update;break;case"upsert":i=EE.upsert;break;default:throw lt(new Error,Lt.INVALID_ACTION_PARAM_ERR(n),zt.BAD_REQUEST,qn.LOG_LEVELS.ERROR,Lt.INVALID_ACTION_PARAM_ERR(n))}try{let o=await i(s),c;switch(n){case"insert":c=o.inserted_hashes;break;case"update":c=o.update_hashes;break;case"upsert":c=o.upserted_hashes;break;default:break}if(Array.isArray(o.skipped_hashes)&&o.skipped_hashes.length>0){let 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=Va.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw Co(o)}}a(ure,"bulkFileLoad");function cB(e,t){return`successfully loaded ${t} of ${e} records`}a(cB,"buildResponseMsg");function Co(e){return lt(e,wo(Lt.DEFAULT_BULK_LOAD_ERR),zt.INTERNAL_SERVER_ERROR,qn.LOG_LEVELS.ERROR,Lt.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(Co,"buildTopLevelErrMsg")});var _B=g((bpe,lB)=>{"use strict";var bR=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};lB.exports=bR});var EB=g((Npe,fB)=>{"use strict";var lre=P(),dB=require("moment"),_re=require("uuid").v4,yR=class{static{a(this,"JobObject")}constructor(){this.id=_re(),this.type=void 0,this.start_datetime=dB().valueOf(),this.created_datetime=dB().valueOf(),this.end_datetime=void 0,this.status=lre.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};fB.exports=yR});var NR=g((wpe,AB)=>{"use strict";var dre=require("uuid").v4,TB=qr(),gB=Gr(),fre=rs(),Ere=oa(),hre=_B(),Ze=P(),mre=EB(),pre=Kd(),gn=$(),Sre=Vc(),Ya=z(),{promisify:Tre}=require("util"),Do=require("moment"),gre=Qf(),SE=dR(),hB=jm(),{deleteTransactionLogsBeforeValidator:Rre}=Ng(),{handleHDBError:mB,hdb_errors:Are}=se(),{HTTP_STATUS_CODES:pB}=Are,SB=gB.searchByValue,Ore=gB.searchByHash,bre=TB.insert,yre=Tre(gre.evaluateSQL),Nre=TB.update;AB.exports={addJob:Cre,updateJob:Lre,handleGetJob:Ire,handleGetJobsByStartDate:wre,getJobById:RB};async function Ire(e){try{let t=await RB(e.id);return Ya.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 gn.error("There was an error getting job",t),new Error(r)}}a(Ire,"handleGetJob");async function wre(e){try{let t=await Dre(e);if(gn.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=Do(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=Do(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 gn.error(r),new Error(r)}}a(wre,"handleGetJobsByStartDate");async function Cre(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||Ya.isEmptyOrZeroLength(e.operation)){let l="job parameter is invalid";return gn.info(l),t.error=l,t}if(!Ze.JOB_TYPE_ENUM[e.operation])return gn.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case Ze.OPERATIONS_ENUM.CSV_FILE_LOAD:n=SE.fileObject(e);break;case Ze.OPERATIONS_ENUM.CSV_URL_LOAD:n=SE.urlObject(e);break;case Ze.OPERATIONS_ENUM.CSV_DATA_LOAD:n=SE.dataObject(e);break;case Ze.OPERATIONS_ENUM.IMPORT_FROM_S3:n=SE.s3FileObject(e);break;case Ze.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Ze.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=hB(e,"date");break;case Ze.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=hB(e,"timestamp");break;case Ze.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=Rre(e);break;case Ze.OPERATIONS_ENUM.RESTART_SERVICE:if(Ze.PROCESS_DESCRIPTORS_VALIDATE[e.service]===void 0)throw mB(new Error,"Invalid service",pB.BAD_REQUEST,void 0,void 0,!0);break;default:break}if(n)throw mB(n,n.message,pB.BAD_REQUEST,void 0,void 0,!0);let s=new mre;s.type=e.operation===Ze.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Ze.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user.username;let i=new fre(Ze.SYSTEM_SCHEMA_NAME,Ze.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),o;try{o=Array.from(await SB(i))}catch(l){let d=`There was an error inserting a new job: ${l}`;return gn.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){s.id=dre();try{o=await SB(i)}catch(l){let d=`There was an error inserting a new job: ${l}`;return gn.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return gn.error("Error creating a job, could not find a unique job id."),t}s.request=e;let u=new Sre(Ze.SYSTEM_SCHEMA_NAME,Ze.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),_;try{_=await bre(u)}catch(l){return gn.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 ${s.operation} and id ${s.id}`;else{let l=`Created a job with type ${s.type} and id ${s.id}`;t.message=l,t.createdJob=s,t.success=!0,gn.trace(l)}return t}a(Cre,"addJob");async function Dre(e){let t=Do(e.from_date,Do.ISO_8601),r=Do(e.to_date,Do.ISO_8601);if(!t.isValid())throw new Error("Invalid 'from' date, must be in ISO-8601 format (YYYY-MM-DD).");if(!r.isValid())throw new Error("Invalid 'to' date, must be in ISO-8601 format (YYYY-MM-DD)");let n=`select * from system.hdb_job where start_datetime > '${t.valueOf()}' and start_datetime < '${r.valueOf()}'`,s=new hre(n,e.hdb_user);try{return await yre(s)}catch(i){throw gn.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(Dre,"getJobsInDateRange");async function RB(e){if(Ya.isEmptyOrZeroLength(e))return Ya.errorizeMessage("Invalid job ID specified.");let t=new Ere(Ze.SYSTEM_SCHEMA_NAME,Ze.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await Ore(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return gn.error(n),Ya.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(RB,"getJobById");async function Lre(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(Ya.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===Ze.JOB_STATUS_ENUM.COMPLETE||e.status===Ze.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=Do().valueOf());let t=new pre(Ze.SYSTEM_SCHEMA_NAME,Ze.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await Nre(t),r}a(Lre,"updateJob")});var DB=g((Dpe,CB)=>{"use strict";var OB=z(),Mt=P(),Mre=require("moment"),TE=AR(),Al=$(),bB=NR(),yB=zf(),NB=ci(),IB=We(),Pre=kf(),Ure=ju(),{parentPort:vre,isMainThread:wB}=require("worker_threads"),{onMessageByType:Bre}=We(),IR=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function Hre(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(OB.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(OB.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Mt.JOB_TYPE_ENUM.csv_file_load:await Es(e,TE.csvFileLoad);break;case Mt.JOB_TYPE_ENUM.csv_url_load:await Es(e,TE.csvURLLoad);break;case Mt.JOB_TYPE_ENUM.csv_data_load:await Es(e,TE.csvDataLoad);break;case Mt.JOB_TYPE_ENUM.import_from_s3:await Es(e,TE.importFromS3);break;case Mt.JOB_TYPE_ENUM.empty_trash:break;case Mt.JOB_TYPE_ENUM.export_local:await Es(e,yB.export_local);break;case Mt.JOB_TYPE_ENUM.export_to_s3:await Es(e,yB.export_to_s3);break;case Mt.JOB_TYPE_ENUM.delete_files_before:case Mt.JOB_TYPE_ENUM.delete_records_before:await Es(e,NB.deleteFilesBefore);break;case Mt.JOB_TYPE_ENUM.delete_audit_logs_before:await Es(e,NB.deleteAuditLogsBefore);break;case Mt.JOB_TYPE_ENUM.delete_transaction_logs_before:await Es(e,Pre.deleteTransactionLogsBefore);break;case Mt.JOB_TYPE_ENUM.restart_service:return await Es(e,Ure.restartService),`Restarting ${e.json.service}`;break;default:return`Invalid operation ${e.json.operation} specified`}}a(Hre,"parseMessage");async function Es(e,t){try{e.job.status=Mt.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=Mre().valueOf(),await bB.updateJob(e.job),await xre(e.job.id)}catch(r){let n=r.message!==void 0?r.message:r;typeof n=="string"?(n=`There was an error running ${t.name} job with id ${e.job.id} - ${n}`,r.message=n):Al.error(`There was an error running ${t.name} job with id ${e.job.id}`),Al.error(n),e.job.message=n,e.job.status=Mt.JOB_STATUS_ENUM.ERROR;try{await bB.updateJob(e.job)}catch(s){throw Al.error(`Unable to update job with id ${e.job.id}`),s}throw r}}a(Es,"runJob");async function xre(e){Al.trace("launching job thread:",e),wB?IB.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[Mt.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})}):vre.postMessage({type:Mt.ITC_EVENT_TYPES.START_JOB,jobId:e})}a(xre,"launchJobThread");wB&&Bre(Mt.ITC_EVENT_TYPES.START_JOB,async(e,t)=>{try{IB.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[Mt.PROCESS_NAME_ENV_PROP]:`JOB-${e.jobId}`})})}catch(r){Al.error(r)}});CB.exports={parseMessage:Hre,RunnerMessage:IR}});var MB=g((Mpe,LB)=>{"use strict";var wR=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};LB.exports=wR});var zB=g((Upe,UR)=>{"use strict";var bE=Gr(),LR=Qf(),gE=AR(),ks=bu(),RE=bs(),bl=ci(),Gre=$S(),Ol=_n(),AE=ZS(),Jt=yg(),OE=$(),qre=rT(),Fre=of(),PB=vT(),kre=cf(),Vre=HT(),$re=xT(),Yre=FT(),Kre=VT(),CR=KT(),UB=zf(),Wre=Kf(),MR=NR(),k=P(),{hdb_errors:Nl,handleHDBError:yl}=se(),{HTTP_STATUS_CODES:vB}=Nl,DR=jT(),BB=ju(),YB=require("util"),Ka=qr(),Qre=ys(),zre=Ra(),HB=DB(),xB=Du(),GB=(Mf(),ie(tl)),qB=Er(),FB=kf(),kB=Hf(),{setServerUtilities:Jre}=(pE(),ie(OR)),{CONTEXT:jre}=(cn(),ie($p)),{_assignPackageExport:Xre}=require("../index"),{transformReq:Zre}=z(),{server:ene}=(lr(),ie(Gi)),or=OE.loggerWithTag("operation"),tne=fR(),VB=bE.searchByHash,rne=bE.searchByValue,nne=YB.promisify(bE.search),sne=YB.promisify(LR.evaluateSQL),ine={[k.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[k.OPERATIONS_ENUM.CREATE_TABLE]:!0,[k.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[k.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[k.OPERATIONS_ENUM.DROP_TABLE]:!0,[k.OPERATIONS_ENUM.DROP_SCHEMA]:!0},Y=MB();async function KB(e,t){try{if(e.body.operation!=="read_log"&&(OE.log_level===k.LOG_LEVELS.INFO||OE.log_level===k.LOG_LEVELS.DEBUG||OE.log_level===k.LOG_LEVELS.TRACE)){let{hdb_user:n,hdb_auth_header:s,password:i,...o}=e.body;or.info(o)}}catch(n){or.error(n)}let r=await tne.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return ine[e.body.operation]&&Qre.setSchemaDataToGlobal(n=>{n&&or.error(n)}),r}a(KB,"processLocalTransaction");var $B=ane();UR.exports={chooseOperation:WB,getOperationFunction:QB,operation:PR,processLocalTransaction:KB};Jre(UR.exports);ene.operation=PR;function WB(e){let t;try{t=QB(e)}catch(s){throw or.error(`Error when selecting operation function - ${s}`),s}let{operation_function:r,job_operation_function:n}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let s=e.operation==="sql"?e.sql:e.search_operation.sql,i=LR.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let o=LR.checkASTPermissions(e,i);if(o)throw or.error(`${vB.FORBIDDEN} from operation ${e.operation}`),or.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),yl(new Error,o,Nl.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==k.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==k.OPERATIONS_ENUM.LOGIN&&e.operation!==k.OPERATIONS_ENUM.LOGOUT){let s=n===void 0?r:n,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=Wre.verifyPerms(i,s);if(o)throw or.error(`${vB.FORBIDDEN} from operation ${e.operation}`),or.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),yl(new Error,o,Nl.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw yl(s,"There was an error when trying to choose an operation path")}return r}a(WB,"chooseOperation");function QB(e){if(or.trace(`getOperationFunction with operation: ${e.operation}`),$B.has(e.operation))return $B.get(e.operation);throw yl(new Error,Nl.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),Nl.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(QB,"getOperationFunction");Xre("operation",PR);function PR(e,t){e.hdb_user=this[jre]?.user,e.bypass_auth=!t;let r=WB(e);return KB({body:e},r)}a(PR,"operation");async function one(e){or.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),n=r[0],s=r[1];for(let i of t.transactions)try{i.schema=n,i.table=s,i[k.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case k.OPERATIONS_ENUM.INSERT:o=await Ka.insert(i);break;case k.OPERATIONS_ENUM.UPDATE:o=await Ka.update(i);break;case k.OPERATIONS_ENUM.UPSERT:o=await Ka.upsert(i);break;case k.OPERATIONS_ENUM.DELETE:o=await bl.deleteRecord(i);break;default:or.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){or.info("Invalid operation in transaction"),or.error(o)}}a(one,"catchup");async function kn(e){Zre(e);let t,r;try{r=await MR.addJob(e),t=r.createdJob,or.info("addJob result",r);let n=new HB.RunnerMessage(t,e);return{message:await HB.parseMessage(n)??`Starting job with id ${t.id}`,job_id:t.id}}catch(n){let s=`There was an error executing job: ${n.http_resp_msg?n.http_resp_msg:n}`;throw or.error(s),yl(n,s)}}a(kn,"executeJob");function ane(){let e=new Map;return e.set(k.OPERATIONS_ENUM.INSERT,new Y(Ka.insert)),e.set(k.OPERATIONS_ENUM.UPDATE,new Y(Ka.update)),e.set(k.OPERATIONS_ENUM.UPSERT,new Y(Ka.upsert)),e.set(k.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new Y(bE.searchByConditions)),e.set(k.OPERATIONS_ENUM.SEARCH_BY_HASH,new Y(VB)),e.set(k.OPERATIONS_ENUM.SEARCH_BY_ID,new Y(VB)),e.set(k.OPERATIONS_ENUM.SEARCH_BY_VALUE,new Y(rne)),e.set(k.OPERATIONS_ENUM.SEARCH,new Y(nne)),e.set(k.OPERATIONS_ENUM.SQL,new Y(sne)),e.set(k.OPERATIONS_ENUM.CSV_DATA_LOAD,new Y(kn,gE.csvDataLoad)),e.set(k.OPERATIONS_ENUM.CSV_FILE_LOAD,new Y(kn,gE.csvFileLoad)),e.set(k.OPERATIONS_ENUM.CSV_URL_LOAD,new Y(kn,gE.csvURLLoad)),e.set(k.OPERATIONS_ENUM.IMPORT_FROM_S3,new Y(kn,gE.importFromS3)),e.set(k.OPERATIONS_ENUM.CREATE_SCHEMA,new Y(ks.createSchema)),e.set(k.OPERATIONS_ENUM.CREATE_DATABASE,new Y(ks.createSchema)),e.set(k.OPERATIONS_ENUM.CREATE_TABLE,new Y(ks.createTable)),e.set(k.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new Y(ks.createAttribute)),e.set(k.OPERATIONS_ENUM.DROP_SCHEMA,new Y(ks.dropSchema)),e.set(k.OPERATIONS_ENUM.DROP_DATABASE,new Y(ks.dropSchema)),e.set(k.OPERATIONS_ENUM.DROP_TABLE,new Y(ks.dropTable)),e.set(k.OPERATIONS_ENUM.DROP_ATTRIBUTE,new Y(ks.dropAttribute)),e.set(k.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new Y(RE.describeSchema)),e.set(k.OPERATIONS_ENUM.DESCRIBE_DATABASE,new Y(RE.describeSchema)),e.set(k.OPERATIONS_ENUM.DESCRIBE_TABLE,new Y(RE.describeTable)),e.set(k.OPERATIONS_ENUM.DESCRIBE_ALL,new Y(RE.describeAll)),e.set(k.OPERATIONS_ENUM.DELETE,new Y(bl.deleteRecord)),e.set(k.OPERATIONS_ENUM.ADD_USER,new Y(Ol.addUser)),e.set(k.OPERATIONS_ENUM.ALTER_USER,new Y(Ol.alterUser)),e.set(k.OPERATIONS_ENUM.DROP_USER,new Y(Ol.dropUser)),e.set(k.OPERATIONS_ENUM.LIST_USERS,new Y(Ol.listUsersExternal)),e.set(k.OPERATIONS_ENUM.LIST_ROLES,new Y(AE.listRoles)),e.set(k.OPERATIONS_ENUM.ADD_ROLE,new Y(AE.addRole)),e.set(k.OPERATIONS_ENUM.ALTER_ROLE,new Y(AE.alterRole)),e.set(k.OPERATIONS_ENUM.DROP_ROLE,new Y(AE.dropRole)),e.set(k.OPERATIONS_ENUM.USER_INFO,new Y(Ol.userInfo)),e.set(k.OPERATIONS_ENUM.READ_LOG,new Y(qre)),e.set(k.OPERATIONS_ENUM.ADD_NODE,new Y(Fre)),e.set(k.OPERATIONS_ENUM.UPDATE_NODE,new Y(PB)),e.set(k.OPERATIONS_ENUM.SET_NODE_REPLICATION,new Y(PB)),e.set(k.OPERATIONS_ENUM.REMOVE_NODE,new Y(kre)),e.set(k.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new Y(Vre)),e.set(k.OPERATIONS_ENUM.PURGE_STREAM,new Y($re)),e.set(k.OPERATIONS_ENUM.SET_CONFIGURATION,new Y(qB.setConfiguration)),e.set(k.OPERATIONS_ENUM.CLUSTER_STATUS,new Y(Yre.clusterStatus)),e.set(k.OPERATIONS_ENUM.CLUSTER_NETWORK,new Y(Kre)),e.set(k.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new Y(CR.setRoutes)),e.set(k.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new Y(CR.getRoutes)),e.set(k.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new Y(CR.deleteRoutes)),e.set(k.OPERATIONS_ENUM.EXPORT_TO_S3,new Y(kn,UB.export_to_s3)),e.set(k.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new Y(kn,bl.deleteFilesBefore)),e.set(k.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new Y(kn,bl.deleteFilesBefore)),e.set(k.OPERATIONS_ENUM.EXPORT_LOCAL,new Y(kn,UB.export_local)),e.set(k.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new Y(MR.handleGetJobsByStartDate)),e.set(k.OPERATIONS_ENUM.GET_JOB,new Y(MR.handleGetJob)),e.set(k.OPERATIONS_ENUM.GET_FINGERPRINT,new Y(DR.getFingerprint)),e.set(k.OPERATIONS_ENUM.SET_LICENSE,new Y(DR.setLicense)),e.set(k.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new Y(DR.getRegistrationInfo)),e.set(k.OPERATIONS_ENUM.RESTART,new Y(BB.restart)),e.set(k.OPERATIONS_ENUM.RESTART_SERVICE,new Y(kn,BB.restartService)),e.set(k.OPERATIONS_ENUM.CATCHUP,new Y(one)),e.set(k.OPERATIONS_ENUM.SYSTEM_INFORMATION,new Y(zre.systemInformation)),e.set(k.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new Y(kn,bl.deleteAuditLogsBefore)),e.set(k.OPERATIONS_ENUM.READ_AUDIT_LOG,new Y(Gre)),e.set(k.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new Y(xB.createTokens)),e.set(k.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new Y(xB.refreshOperationToken)),e.set(k.OPERATIONS_ENUM.LOGIN,new Y(GB.login)),e.set(k.OPERATIONS_ENUM.LOGOUT,new Y(GB.logout)),e.set(k.OPERATIONS_ENUM.GET_CONFIGURATION,new Y(qB.getConfiguration)),e.set(k.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new Y(Jt.customFunctionsStatus)),e.set(k.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new Y(Jt.getCustomFunctions)),e.set(k.OPERATIONS_ENUM.GET_COMPONENT_FILE,new Y(Jt.getComponentFile)),e.set(k.OPERATIONS_ENUM.GET_COMPONENTS,new Y(Jt.getComponents)),e.set(k.OPERATIONS_ENUM.SET_COMPONENT_FILE,new Y(Jt.setComponentFile)),e.set(k.OPERATIONS_ENUM.DROP_COMPONENT,new Y(Jt.dropComponent)),e.set(k.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new Y(Jt.getCustomFunction)),e.set(k.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new Y(Jt.setCustomFunction)),e.set(k.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new Y(Jt.dropCustomFunction)),e.set(k.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new Y(Jt.addComponent)),e.set(k.OPERATIONS_ENUM.ADD_COMPONENT,new Y(Jt.addComponent)),e.set(k.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new Y(Jt.dropCustomFunctionProject)),e.set(k.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new Y(Jt.packageComponent)),e.set(k.OPERATIONS_ENUM.PACKAGE_COMPONENT,new Y(Jt.packageComponent)),e.set(k.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new Y(Jt.deployComponent)),e.set(k.OPERATIONS_ENUM.DEPLOY_COMPONENT,new Y(Jt.deployComponent)),e.set(k.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new Y(FB.readTransactionLog)),e.set(k.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new Y(kn,FB.deleteTransactionLogsBefore)),e.set(k.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new Y(kB.installModules)),e.set(k.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new Y(kB.auditModules)),e.set(k.OPERATIONS_ENUM.GET_BACKUP,new Y(ks.getBackup)),e}a(ane,"initializeOperationFunctionMap")});var NE=g((Bpe,XB)=>{"use strict";var vR=P(),cne=z(),Il=$(),{handleHDBError:BR,hdb_errors:yE}=se(),{isMainThread:une}=require("worker_threads"),{Readable:lne}=require("stream"),JB=require("os"),_ne=require("util"),dne=dT(),fne=_ne.promisify(dne.authorize),jB=zB(),{createGzip:Ene,constants:hne}=require("zlib");function mne(e){let t=`Found an uncaught exception with message: ${e.message}. ${JB.EOL}Stack: ${e.stack} ${JB.EOL}Terminating ${une?"HDB":"thread"}.`;console.error(t),Il.fatal(t),process.exit(1)}a(mne,"handleServerUncaughtException");function pne(e,t,r){if(Il[e.logLevel||"error"](e),e.statusCode)return typeof e.http_resp_msg!="object"?r.code(e.statusCode).send({error:e.http_resp_msg||e.message}):r.code(e.statusCode).send(e.http_resp_msg);let n=e.statusCode?e.statusCode:yE.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(n).send({error:e}):r.code(n).send(e.message?{error:e.message}:e)}a(pne,"serverErrorHandler");function Sne(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=BR(new Error,"Invalid JSON.",yE.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(cne.isEmpty(e.body.operation)){let n=BR(new Error,"Request body must include an 'operation' property.",yE.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}a(Sne,"reqBodyValidationHandler");function Tne(e,t,r){let n;e.body.operation!==vR.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==vR.OPERATIONS_ENUM.LOGIN&&e.body.operation!==vR.OPERATIONS_ENUM.LOGOUT?fne(e,t).then(s=>{n=s,e.body.hdb_user=n,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(s=>{Il.warn(s),Il.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${s.stack}"`);let i=typeof s=="string"?{error:s}:{error:s.message};r(BR(s,i,yE.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(Tne,"authHandler");async function gne(e,t,r=!1){let n;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),n=jB.chooseOperation(e.body);let s=await jB.processLocalTransaction(e,n);if(s instanceof lne&&s.headers){for(let[i,o]of s.headers)t.header(i,o);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),s=s.pipe(Ene({level:hne.Z_BEST_SPEED})))}return s}catch(s){throw Il.error(s),s}}a(gne,"handlePostRequest");XB.exports={authHandler:Tne,handlePostRequest:gne,handleServerUncaughtException:mne,serverErrorHandler:pne,reqBodyValidationHandler:Sne}});var rH=g((xpe,tH)=>{"use strict";var Rne=require("fastify-plugin"),{handlePostRequest:ZB,authHandler:Ane,reqBodyValidationHandler:One}=NE();async function bne(e){e.decorate("hdbCore",{preValidation:[One,Ane],request:t=>eH(ZB(t,response)),requestWithoutAuthentication:(t,r)=>eH(ZB(t,r,!0))})}a(bne,"hdbCore");async function eH(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(eH,"convertAsyncIterators");tH.exports=Rne(bne)});var iH=g((Fpe,sH)=>{"use strict";var qpe=require("fs"),HR=ee();HR.initSync();var{CONFIG_PARAMS:nH}=P(),yne=1024*1024*1024;function Nne(e){let t=HR.get(nH.HTTP_TIMEOUT),r=HR.get(nH.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:yne,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,https:e}}a(Nne,"getServerOptions");sH.exports=Nne});var cH=g((Vpe,aH)=>{"use strict";var xR=ee();xR.initSync();var{CONFIG_PARAMS:oH}=P();function Ine(){let e=xR.get(oH.HTTP_CORSACCESSLIST),t=xR.get(oH.HTTP_CORS),r;return t&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},e&&e.length>0&&e[0]!==null&&e[0]!=="*"&&(r.origin=(n,s)=>s(null,e.indexOf(n)!==-1))),r}a(Ine,"getCORSOptions");aH.exports=Ine});var _H=g((Ype,lH)=>{"use strict";var uH=ee();uH.initSync();var wne=P();function Cne(){return uH.get(wne.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(Cne,"getHeaderTimeoutConfig");lH.exports=Cne});var qR={};Fe(qR,{customFunctionsServer:()=>Mne,ready:()=>NH,start:()=>Lne});function Lne(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){Vs||(Vs=yH(t),at.http((await Vs).server));let o=await Vs,c=(0,GR.dirname)(s),u=(0,GR.dirname)(n);if(u.startsWith("/")&&(u=u.slice(1)),!dH.has(c)){dH.add(c);try{o.register(Une(c,u))}catch(_){if(_.message==="Root plugin has already booted")Ye.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw _}}},ready:NH}}async function Mne(){try{Ye.info("In Custom Functions Fastify server"+process.cwd()),Ye.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Ye.debug(`Custom Functions server process ${process.pid} starting up.`),await Pne();let e=SH.get(TH.CONFIG_PARAMS.HTTP_SECUREPORT)>0,t;try{t=Vs=await yH(e)}catch(r){throw Ye.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw Ye.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){Ye.error(`Custom Functions ${process.pid} Error: ${e}`),Ye.error(e),process.exit(1)}}async function Pne(){try{Ye.info("Custom Functions starting configuration."),await gH.setUsersToGlobal(),Ye.info("Custom Functions completed configuration.")}catch(e){Ye.error(e)}}function Une(e,t){return async function(r){try{Ye.info("Custom Functions starting buildRoutes"),Ye.trace("Loading fastify routes folder "+e),(0,fH.existsSync)(e)&&r.register(pH.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:Ye.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,o)=>{s?.message?Ye.error(s.message):s&&Ye.error(s),o()})}catch(n){Ye.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function yH(e){Ye.info("Custom Functions starting buildServer.");let t=(0,RH.default)(e),r=(0,EH.default)(t);r.server.headersTimeout=(0,OH.default)(),r.setErrorHandler(bH.serverErrorHandler);let n=(0,AH.default)();return n&&r.register(hH.default,n),r.register(function(s,i,o){s.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(mH.default),await r.register(Dne),await r.after(),Qg(r),Ye.info("Custom Functions completed buildServer."),r}function NH(){if(Vs)return Vs.then?Vs.then(e=>e.ready()):Vs.ready()}var GR,fH,EH,hH,mH,pH,SH,TH,Ye,Dne,gH,RH,AH,OH,bH,Vs,dH,IH=Re(()=>{GR=require("path"),fH=require("fs"),EH=x(require("fastify")),hH=x(require("@fastify/cors")),mH=x(oR()),pH=x(require("@fastify/autoload")),SH=x(ee()),TH=x(P()),Ye=x($()),Dne=x(rH()),gH=x(_n()),RH=x(iH()),AH=x(cH()),OH=x(_H()),bH=x(NE());Da();lr();dH=new Set;a(Lne,"start");a(Mne,"customFunctionsServer");a(Pne,"setUp");a(Une,"buildRouteFolder");a(yH,"buildServer");a(NH,"ready")});var FR={};Fe(FR,{start:()=>vne});function vne(e){return{handleDirectory(t,r){if(t==="/"){let n=(0,MH.default)(r,e);return e.server.http(async(s,i)=>{if(!s.isWebSocket)return new Promise(o=>n(s._nodeRequest,s._nodeResponse,()=>{o(i(s))}))}),!0}},handleFile(t,r,n){CH||(CH=!0,e.server.http(async(s,i)=>{if(!s.isWebSocket){let o=wH.get(s.pathname);if(o)return{handlesHeaders:!0,body:(0,DH.default)(s,(0,LH.realpathSync)(o))}}return i(s)},{runFirst:!0})),wH.set(r,n)}}}var DH,LH,MH,wH,CH,PH=Re(()=>{DH=x(require("send")),LH=require("fs"),MH=x(require("serve-static")),wH=new Map;a(vne,"start")});function xne(){let e=(0,HH.checkMemoryLimit)();e&&!process.env.DEV_MODE&&(console.error(e),VR=setInterval(()=>{CE.notify(e)},Hne).unref())}function Gne(e,t=1,r){if(kR++,(0,$s.startWorker)("server/threads/threadServer.js",{name:ja.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((o,c)=>{function u(_){_.type===ja.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(n.removeListener("message",u),o(n))}a(u,"onMessage"),n.on("message",u),n.on("error",c)});Bne.push(s),await s,Wa.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",o=>{if(o.requestId){let c=wE.get(o.requestId);c&&c(o)}}),n.on("exit",i),n.on("shutdown",i);function i(){let o=Wa.indexOf(n);o>-1&&Wa.splice(o,1)}if(a(i,"removeWorker"),Qa){let o=Qa;Qa=[];for(let c of o)xH[c.localPort](null,c)}}}),r){let n=setInterval(()=>{$R?$R=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,$s.shutdownWorkers)(),kR=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function GH(e=0,t){if(typeof e=="string")try{(0,DE.existsSync)(e)&&(0,DE.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=qne:r=Fne(t):r=YR;let n=(0,za.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(n._handle){n._handle.onconnection=xH[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),$R=!0,r(o,(c,u)=>{if(!c){if(UH){let l=o._socket||new za.Socket({handle:o,writable:!0,readable:!0});UH.deliverSocket(l,e,u),l.resume()}else kR>0?(Qa.length===0&&setTimeout(()=>{Qa.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,Qa.push(o)):(console.log("start up a dynamic thread to handle request"),Gne(0));Sr(!1,"socket-routed");return}c.requests++;let _=o.fd;if(_>=0)c.postMessage({port:e,fd:_,data:u});else{let l=o._socket||new za.Socket({handle:o,writable:!0,readable:!0});Yne(l,c,e)}Sr(!0,"socket-routed")})};let s=du();CE.info(`HarperDB ${s.version} Server running on port ${e}`)}return n.on("error",s=>{console.error("Error in socket server",s)}),process.env._UNREF_SERVER&&n.unref(),n}function YR(e,t){let r,n=0;for(let s of Wa){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=IE)return IE=i,t(r);n=i}IE=0,t(r)}function qne(e,t){let r={};e.getpeername(r);let n=r.address,s=Ja.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);YR(e,o=>{Ja.set(n,{worker:o,lastUsed:i}),t(o)})}function Fne(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new za.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",o=>{n.readStop();let u=o.toString("latin1").match(t)?.[1],_=Ja.get(u),l=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=l,s(_.worker);YR(n,d=>{Ja.set(u,{worker:d,lastUsed:l}),s(d,o)})})}a(r,"findByHeaderAffinity")}function Vne(){IE=0;for(let e of Wa)e.expectedIdle=e.recentELU.idle+kne,e.requests=1;Wa.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function Yne(e,t,r){let n=$ne++;t.postMessage({port:r,requestId:n,event:"connection"}),e.on("data",s=>{let i=s.toString("latin1");t.postMessage({port:r,requestId:n,data:i,event:"data"})}).on("close",s=>{t.postMessage({port:r,requestId:n,event:"close",hadError:s})}).on("error",s=>{t.postMessage({port:r,requestId:n,event:"error",error:s})}).on("drain",s=>{t.postMessage({port:r,requestId:n,event:"drain",error:s})}).on("end",()=>{t.postMessage({port:r,requestId:n,event:"end"})}).resume(),wE.set(n,s=>{s.event=="data"&&e.write(Buffer.from(s.data,"latin1")),s.event=="end"&&(e.end(s.data&&Buffer.from(s.data,"latin1")),wE.delete(n)),s.event=="destroy"&&(e.destroy(),wE.delete(n))})}var $s,za,ja,CE,DE,BH,HH,Wa,Qa,xH,UH,kR,Bne,VR,Hne,$R,IE,vH,Ja,kne,wE,$ne,qH=Re(()=>{$s=x(We()),za=require("net"),ja=x(P()),CE=x($()),DE=require("fs");Ds();BH=require("worker_threads"),HH=x(Xi()),Wa=[],Qa=[],xH=[],kR=0,Bne=[];BH.isMainThread&&(process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)}),(0,$s.onMessageFromWorkers)(e=>{e.type===ja.ITC_EVENT_TYPES.RESTART&&VR&&(clearInterval(VR),xne())}));Hne=6e5;a(xne,"licenseWarning");a(Gne,"startHTTPWorker");a(GH,"startSocketServer");IE=0;a(YR,"findMostIdleWorker");vH=36e5,Ja=new Map;a(qne,"findByRemoteAddressAffinity");a(Fne,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Ja)r.lastUsed+vH<e&&Ja.delete(t)},vH).unref();kne=1e3;a(Vne,"updateWorkerIdleness");(0,$s.setMonitorListener)(Vne);wE=new Map,$ne=1;a(Yne,"proxySocket")});var zR={};Fe(zR,{Request:()=>KR,createReuseportFd:()=>LE});var FH,KR,WR,QR,LE,ME=Re(()=>{FH=require("os"),KR=class{static{a(this,"Request")}#e;constructor(t,r){this.method=t.method;let n=t.url;this._nodeRequest=t,this._nodeResponse=r,this.url=n,this.headers=new QR(t.headers)}get absoluteURL(){return this.protocol+"://"+this.host+this.url}get pathname(){let t=this.url.indexOf("?");return t>-1?this.url.slice(0,t):this.url}set pathname(t){let r=this.url.indexOf("?");r>-1?this.url=t+this.url.slice(r):this.url=t}get protocol(){return this._nodeRequest.socket.encrypted?"https":"http"}get ip(){return this._nodeRequest.socket.remoteAddress}get authorized(){return this._nodeRequest.socket.authorized}get peerCertificate(){return this._nodeRequest.socket.getPeerCertificate()}get mtlsConfig(){return this._nodeRequest.socket.server.mtlsConfig}get body(){return this.#e||(this.#e=new WR(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}},WR=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}pipe(t,r){return this.#e.pipe(t,r)}},QR=class{constructor(t){this.asObject=t}static{a(this,"Headers")}set(t,r){this.asObject[t.toLowerCase()]=r}get(t){return this.asObject[t.toLowerCase()]}has(t){return this.asObject.hasOwnProperty(t.toLowerCase())}[Symbol.iterator](){return Object.entries(this.asObject)[Symbol.iterator]()}keys(){return Object.keys(this.asObject)}values(){return Object.values(this.asObject)}forEach(t){for(let[r,n]of this)t(n,r,this)}};(0,FH.platform)()!="win32"&&(LE=require("node-unix-socket").createReuseportFd)});var YH=g((oSe,$H)=>{"use strict";var Kne=require("cluster"),Lo=ee();Lo.initSync();var VH=P(),tSe=require("util"),Ys=$(),rSe=require("fs"),Wne=require("fastify"),nSe=du(),Qne=require("@fastify/cors"),zne=require("@fastify/compress"),Jne=require("@fastify/static"),jne=oR(),Xne=require("path"),{PACKAGE_ROOT:Zne}=P(),ese=ys(),tse=z(),rse=_n(),nse=Xi(),{server:sse}=(lr(),ie(Gi)),{node_request_key:sSe}=(ME(),ie(zR)),{authHandler:ise,handlePostRequest:ose,serverErrorHandler:ase,reqBodyValidationHandler:cse}=NE(),iSe=require("net"),{registerContentHandlers:use}=(Da(),ie(O0)),lse=6e4,_se=1024*1024*1024,dse="TRUE",{CONFIG_PARAMS:wl}=VH,Xa;$H.exports={hdbServer:kH,start:kH};async function kH(e){try{Ys.info("In Fastify server"+process.cwd()),Ys.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Ys.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=Kne.isMaster,await fse();let t=e.securePort>0;Xa=Ese(t),await Xa.ready(),e||(e={}),e.isOperationsServer=!0;try{sse.http(Xa.server,e),Xa.server.closeIdleConnections||await Xa.listen({port:0,host:"::"})}catch(r){throw Xa.close(),Ys.error(r),Ys.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),Ys.fatal(t),process.exit(1)}}a(kH,"operationsServer");async function fse(){Ys.trace("Configuring HarperDB process."),ese.setSchemaDataToGlobal(),await rse.setUsersToGlobal(),await nse.getLicense()}a(fse,"setUp");function Ese(e){Ys.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=hse(e),r=Wne(t);r.server.headersTimeout=pse(),r.setErrorHandler(ase);let n=mse();n&&r.register(Qne,n),r.register(function(i,o,c){i.setNotFoundHandler(function(u,_){r.server.emit("unhandled",u.raw,_.raw)}),c()}),r.register(jne),r.register(zne),r.register(Jne,{root:Xne.join(Zne,"studio/build-local")}),use(r);let s=Lo.get(VH.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!tse.isEmpty(s)&&s.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[cse,ise],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),ose(i,o)}),r.get("/health",()=>"HarperDB is running."),Ys.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(Ese,"buildServer");function hse(e){let t=Lo.get(wl.OPERATIONSAPI_NETWORK_TIMEOUT),r=Lo.get(wl.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:_se,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}a(hse,"getServerOptions");function mse(){let e=Lo.get(wl.OPERATIONSAPI_NETWORK_CORS),t=Lo.get(wl.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===dse)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(n,s)=>s(null,t.indexOf(n)!==-1))),r}a(mse,"getCORSOpts");function pse(){return Lo.get(wl.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??lse}a(pse,"getHeaderTimeoutConfig")});var tA={};Fe(tA,{disableNATS:()=>Tse,publishToStream:()=>vE,setNATSReplicator:()=>JR,setPublishToStream:()=>gse,setSubscription:()=>eA,start:()=>Sse});function Sse(){Cl.default.get(Dl.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Ase()}function Tse(e=!0){JH=e}function gse(e,t){vE=e,eA=t}function Ase(){if(JH||process.env._DISABLE_NATS)return;let e=mr(),t=Object.keys(e);t.push("system");for(let r of t){let n=e[r];for(let s in n){let i=n[s];JR(s,r,i)}}rA((r,n)=>{JR(r.tableName,r.databaseName,r),n&&XH(r)}),!KH&&(KH=!0)}function JR(e,t,r){if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.sources.some(s=>s?.isNATSReplicator))return;r.sourcedFrom(class extends $t{static{a(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[Me],record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[Me]})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[Me],record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this[Me],record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[Me]})}static defineSchema(i){XH(i)}static subscribe(){let i=new In;return eA(t,e,i),i}static subscribeOnThisThread(i){return i<(Cl.default.get(Dl.default.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??Rse)}static isEqual(i){return i.isNATSReplicator}static isNATSReplicator=!0;static shouldReceiveInvalidations=!0},{intermediateSource:!0});function n(s){let i=s?.transaction?.nats;if(!i)if(s?.transaction){s.transaction.nats=i=new PE(s.transaction,s);let o=s.transaction;for(;o.next;)o=o.next;o.next=s.transaction.nats,i.user=s.user,i.context=s}else i=jH;return i}a(n,"getNATSTransaction")}function XH(e){let t=Cl.default.get(Dl.default.CONFIG_PARAMS.CLUSTERING_NODENAME);vE(`${XR.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,ZR.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 WH,XR,ZR,QH,zH,Cl,Dl,UE,JH,vE,eA,Rse,jH,KH,PE,jR,ZH=Re(()=>{Ae();cn();WH=x(ut()),XR=x(Ve()),ZR=x(Os());Ic();QH=x(MS()),zH=x(vr()),Cl=x(ee()),Dl=x(P()),UE=x($());a(Sse,"start");a(Tse,"disableNATS");vE=WH.publishToStream,eA=QH.setSubscription;a(gse,"setPublishToStream");Rse=2;a(Ase,"assignReplicationSource");a(JR,"setNATSReplicator");a(XH,"publishSchema");PE=class{constructor(t,r){this.transaction=t;this.options=r}static{a(this,"NATSTransaction")}user;writes_by_db=new Map;addWrite(t,r){r.expiresAt=this.context?.expiresAt;let n=this.writes_by_db.get(t);n||this.writes_by_db.set(t,n=[]),n.push(r)}commit({timestamp:t}){let r=Cl.default.get(Dl.default.CONFIG_PARAMS.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writes_by_db){let o=[],c=[],u,_;for(let l of i){let d=l.table,E=l.operation=="put"?"upsert":l.operation;u||(UE.trace(`Sending transaction event ${E}`),_=u={operation:E,schema:s,table:d,__origin:{user:this.user?.username,timestamp:t,node_name:r}},u.hash_values=c,E!=="delete"&&E!=="invalidate"&&(u.records=o)),u.table===d&&u.operation===E?(o.push(l.record),c.push(l.id)):_=_.next={operation:E,table:d,id:l.id,record:l.record},l.expiresAt&&(_.expiresAt=l.expiresAt)}u&&n.push(vE(`${XR.SUBJECT_PREFIXES.TXN}.${s}.${u.table}`,(0,ZR.createNatsTableStreamName)(s,u.table),void 0,u)?.catch(l=>{throw UE.error("An error has occurred trying to replicate transaction",u,l),l.statusCode=504,l}))}return Promise.all(n)}},jR=class extends PE{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,zH.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};jH=new jR});var fx=g(Mi=>{"use strict";var{isMainThread:iA,parentPort:Ml,threadId:BE}=require("worker_threads"),{Socket:Ose,createServer:bse}=require("net"),{createServer:yse,IncomingMessage:Nse}=require("http"),{createServer:Ise}=require("https"),{readFileSync:wse,unlinkSync:ex,existsSync:Cse}=require("fs"),Pt=$(),qe=ee(),_t=P(),{server:GE}=(lr(),ie(Gi)),{WebSocketServer:Dse}=require("ws"),{createSecureContext:Lse,createServer:Mse}=require("node:tls"),{getTicketKeys:sx,restartNumber:Pse,getWorkerIndex:Pl}=We(),{Headers:ix,appendHeader:Use}=(el(),ie(KU)),{recordAction:Ll,recordActionBinary:vse}=(Ds(),ie(pu)),{Request:ox,createReuseportFd:tx}=(ME(),ie(zR)),{checkMemoryLimit:Bse}=Xi(),{X509Certificate:Hse}=require("crypto"),ax=require("tls"),xse=ax.createSecureContext,Za;ax.createSecureContext=function(e){return Za||xse(e)};var cx=qe.get(_t.CONFIG_PARAMS.THREADS_DEBUG);if(cx){let e;if(iA)e=qe.get(_t.CONFIG_PARAMS.THREADS_DEBUG_PORT)??9229,process.on(["SIGINT","SIGTERM","SIGQUIT","exit"],()=>{try{require("inspector").close()}catch(t){Pt.info("Could not close debugger",t)}});else{let t=qe.get(_t.CONFIG_PARAMS.THREADS_DEBUG_STARTINGPORT);t&&Pl()>=0&&(e=t+Pl())}if(e){let t=qe.get(_t.CONFIG_PARAMS.THREADS_DEBUG_HOST),r=qe.get(_t.CONFIG_PARAMS.THREADS_DEBUG_WAITFORDEBUGGER);try{require("inspector").open(e,t,r)}catch(n){Pt.trace(`Could not start debugging on port ${e}, you may already be debugging:`,n.message)}}}else if(process.env.DEV_MODE&&iA)try{require("inspector").open(9229)}catch(e){Pse<=1&&Pt.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:fSe,CONFIG_PARAMS:Gse}=_t;qe.initSync();var qse=qe.get(Gse.HTTP_SESSIONAFFINITY),hs={};Mi.registerServer=uA;Mi.httpServer=lA;Mi.deliverSocket=cA;Mi.startServers=ux;Mi.when_components_loaded=null;Mi.createSNICallback=_A;GE.http=lA;GE.request=$se;GE.socket=Yse;GE.ws=Kse;var nA={},HE={},Fse,Ks={},xE={},kse=[],oA=[];function ux(){return Mi.when_components_loaded=dA().loadRootComponents(!0).then(()=>{Ml?.on("message",t=>{let{port:r,fd:n,data:s}=t;if(n)cA(n,r,s);else if(t.requestId)Vse(t);else if(t.type===_t.ITC_EVENT_TYPES.SHUTDOWN){Pt.trace("received shutdown request",BE);for(let i in hs){let o=hs[i],c;if(o.closeIdleConnections){let _=Object.getOwnPropertySymbols(o).find(E=>E.description.includes("connections")),l=0,d=setInterval(()=>{l++;let E=l>=100,f=o[_][E?"all":"idle"]();if(f.length===0){E&&clearInterval(d);return}l===1?Pt.info(`Closing ${f.length} idle connections`):E&&Pt.warn(`Forcefully closing ${f.length} active connections`);for(let h=0,p=f.length;h<p;h++){let S=f[h].socket;S._httpMessage&&!S._httpMessage.finished&&!E||(E?S.destroySoon():S.end(`HTTP/1.1 408 Request Timeout\r
|
|
29
29
|
Connection: close\r
|
|
30
30
|
\r
|
|
31
|
-
`))}},25).unref()}o.close?.(()=>{if(qe.get(_t.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&Pl()==0)try{
|
|
32
|
-
`)}a(rx,"defaultNotFound");function sA(e){return e.startsWith("-----BEGIN")?e:wse(e)}a(sA,"readPEM");function _A(e){let t=[];for(let i=0;e[i];i++)t.push(e[i]);t.length||t.push(e);let r=new Map,n,s=!1;for(let i of t){let o=sA(i.privateKey),c=sA(i.certificate),u=i.certificateAuthority&&sA(i.certificateAuthority);if(!o||!c)throw new Error("Missing private key or certificate for secure server");let _={ciphers:i.ciphers,ca:u,ticketKeys:nx()},l=Lse(_);l.options=_,_.instantiatedContext=l,l.context.setCert(c),l.context.setKey(o,void 0),_.cert=c,_.key=o,l.certStart=c.slice(0,100).toString(),n||(n=l);let d=new Hse(c),E=i.hostname??i.host??i.hostnames??i.hosts??(d.subjectAltName?d.subjectAltName.split(",").map(f=>{let h=f.indexOf(":");return f.slice(h+1)}):[d.subject.match(/CN=(.*)/)?.[1]]);Array.isArray(E)||(E=[E]);for(let f of E)f?(f[0]==="*"&&(s=!0,f=f.slice(1)),r.has(f)||r.set(f,l)):Pt.error("No hostname found for certificate at",i.certificate)}return(i,o)=>{let c=i;for(;;){let u=r.get(c);if(u)return Pt.debug("Found certificate for",i,u.certStart),o(null,u);if(s&&c){let _=c.indexOf(".",1);_<0?c="":c=c.slice(_)}else break}Pt.debug("No certificate found to match",i,"using the first certificate"),o(null,n)}}a(_A,"createSNICallback")});async function px({clientId:e,user:t,clean:r,will:n,keepalive:s}){let i;if(e&&!r){let o=await fA.get(e,{returnNonexistent:!0});i=new mA(e,t,o),o&&(i.sessionWasPresent=!0)}else{if(e){let o=await fA.get(e);o&&o.delete()}i=new FE(e,t)}return n&&(n.id=e,n.user={username:t?.username},Ul.put(n)),s&&(i.keepalive=s,i.receivedPacket()),i}function EA(){return qE++,qE>65500&&(qE=1),qE}function hA(e,t,r){let{topic:n,retain:s}=e;e.data=t,e.async=!0,r.authorize=!0;let i=yi.getMatch(n);if(!i)throw new Error(`Can not publish to topic ${n} as it does not exist, no resource has been defined to handle this topic`);e.url=i.relativeURL;let o=i.Resource;return rt(r,()=>s?t===void 0?o.delete(e,r):o.put(e,e.data,r):o.publish(e,e.data,r))}var Ex,Pi,hx,mx,fx,fA,Ul,qE,FE,mA,Sx=Re(()=>{Ae();Zu();Ex=H(vr()),Pi=H($());so();hx=H(We()),mx=H(dx());lr();fx=100,fA=Et({database:"system",table:"hdb_durable_session",attributes:[{name:"id",isPrimaryKey:!0},{name:"subscriptions",type:"array",elements:{attributes:[{name:"topic"},{name:"qos"},{name:"startTime"},{name:"acks"}]}}]}),Ul=Et({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,hx.getWorkerIndex)()===0&&(async()=>{await mx.when_components_loaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of Ul.search({})){let t=e.data,r=Object.assign({},e);r.user?.username&&(r.user=await at.getUser(r.user.username));try{await hA(r,t,r)}catch{(0,Pi.warn)("Failed to publish will",t)}Ul.delete(e.id)}})();a(px,"getSession");qE=1;a(EA,"getNextMessageId");FE=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;request;socket;subscriptions=[];awaitingAcks;sessionWasPresent;keepalive;keepaliveTimer;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,n){let{topic:s,rh:i,startTime:o}=t,c=s.indexOf("?"),u,_;if(c>-1?(u=s.slice(c),_=s.slice(0,c)):_=s,!_)throw new Error("No topic provided");if(_.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");let l=this.subscriptions.find(T=>T.topic===s),d;l?(d=i>0,l.end(),this.subscriptions.splice(this.subscriptions.indexOf(l),1)):d=i===2;let E={search:u,async:!0,user:this.user,startTime:o,omitCurrent:d,url:""};o&&(0,Pi.trace)("Resuming subscription from",s,"from",o);let f=yi.getMatch(_);if(!f){let T=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw T.statusCode=404,T}if(E.url=f.relativeURL,E.url.indexOf("+")>-1||E.url.indexOf("#")>-1){let T=E.url.slice(1);if(T.indexOf("#")>-1&&T.indexOf("#")!==T.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(E.isCollection=!0,T.indexOf("+")===T.length-1)E.onlyChildren=!0,E.url="/"+T.slice(0,T.length-1);else{let R=T.split("/"),N;for(let U=0;U<R.length;U++)if(R[U].indexOf("+")>-1)if(R[U]==="+")N=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&N)throw new Error("Filters can not be combined");let b=!0;R[R.length-1]==="#"&&(R.length--,b=!1),N&&(n=a(U=>{let F=U.id;if(!Array.isArray(F)||b&&F.length!==R.length)return!1;for(let M=0;M<R.length;M++)if(R[M]!=="+"&&R[M]!==F[M])return!1;return!0},"filter"));let x=R.indexOf("+");E.url="/"+(x>-1?R.slice(0,x):R).concat("").join("/")}}let h=f.path,p=f.Resource,S=await rt(E,async()=>{let T=this.createContext();T.topic=s,T.retainHandling=i;let R=await p.subscribe(E,T);if(!R)throw new Error(`No subscription was returned from subscribe for topic ${s}`);if(!R[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);let N=(async()=>{for await(let b of R)try{let x;if(b.type&&b.type!=="put"&&b.type!=="delete"&&b.type!=="message"&&b.type!=="patch"||n&&!n(b))continue;r?(b.topic=s,x=this.needsAcknowledge(b)):(b.acknowledge?.(),x=EA());let U=b.id;if(Array.isArray(U)&&(U=wa(U)),U==null&&(U=""),await this.listener(h+"/"+U,b.value,x,t)===!1)break;this.awaitingAcks?.size>fx?await new Promise(M=>setTimeout(M,this.awaitingAcks.size-fx)):await new Promise(setImmediate)}catch(x){(0,Pi.warn)(x)}})();return R});return S.topic=s,S.qos=t.qos,this.subscriptions.push(S),S}resume(){}needsAcknowledge(t){let r=EA();return t.acknowledge&&(this.awaitingAcks||(this.awaitingAcks=new Map),this.awaitingAcks.set(r,t.acknowledge)),r}acknowledge(t){let r=this.awaitingAcks?.get(t);r&&(this.awaitingAcks.delete(t),r())}async removeSubscription(t){let r=this.subscriptions.find(n=>n.topic===t);if(r)return r.end(),this.subscriptions.splice(this.subscriptions.indexOf(r),1),!0}async publish(t,r){return hA(t,r,this.createContext())}createContext(){let t={session:this,socket:this.socket,user:this.user,authorize:!0};return this.request&&(t.request=this.request,t.url=this.request.url,t.headers=this.request.headers),t}setListener(t){this.listener=t}disconnect(t){this.keepaliveTimer&&clearTimeout(this.keepaliveTimer);let r=this.createContext();rt(r,async()=>{try{if(!t){let n=await Ul.get(this.sessionId);n?.doesExist()&&await hA(n,n.data,r)}}finally{await Ul.delete(this.sessionId)}}).catch(n=>{(0,Pi.warn)(`Error publishing MQTT will for ${this.sessionId}`,n)});for(let n of this.subscriptions)n.end();this.subscriptions=[]}receivedPacket(){this.keepalive&&(clearTimeout(this.keepaliveTimer),this.keepaliveTimer=setTimeout(()=>{this.socket?.destroy?this.socket.destroy(new Error("Keepalive timeout")):this.socket?.terminate()},this.keepalive*1500))}};a(hA,"publish");mA=class extends FE{static{a(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,n){super(t,r),this.sessionRecord=n||{id:t,subscriptions:[]}}async resume(){for(let t of this.sessionRecord.subscriptions||[])await this.resumeSubscription({omitCurrent:!0,topic:t.topic,qos:t.qos,startTime:t.startTime},!0,t.acks?r=>!t.acks.includes(r.timestamp):null)}resumeSubscription(t,r,n){return super.addSubscription(t,r,n)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=EA(),n={topic:t.topic,timestamp:t.timestamp};return t.acknowledge&&(n.acknowledge=t.acknowledge),this.awaitingAcks.set(r,n),r}acknowledge(t){let r=this.awaitingAcks?.get(t);if(!r)return;this.awaitingAcks?.delete(t),r.acknowledge?.();let n=r.topic;for(let[,s]of this.awaitingAcks)if(s.topic===n&&s.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===n){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,Pi.trace)("Received ack",n,r.timestamp),this.sessionRecord.update();return}}for(let s of this.sessionRecord.subscriptions)s.topic===n&&(s.startTime=r.timestamp);this.sessionRecord.update()}async addSubscription(t,r){await this.resumeSubscription(t,r);let{qos:n,startTime:s}=t;return n>0&&!s&&this.saveSubscriptions(),t.qos}removeSubscription(t){let r=this.subscriptions.find(s=>s.topic===t),n=super.removeSubscription(t);return r.qos>0&&this.saveSubscriptions(),n}saveSubscriptions(){this.sessionRecord.subscriptions=this.subscriptions.map(t=>{let r=t.startTime;return r||(r=t.startTime=(0,Ex.getNextMonotonicTime)()),(0,Pi.trace)("Added durable subscription",t.topic,r),{qos:t.qos,topic:t.topic,startTime:r}}),fA.put(this.sessionRecord)}}});var SA={};Fe(SA,{bypassAuth:()=>Wse,start:()=>Qse});function Wse(){Ox=!0}function Qse({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){e.mqtt||(e.mqtt={requireAuthentication:i,sessions:new Set,events:new Ax.EventEmitter},e.mqtt.events.on("error",()=>{}));let o=e.mqtt,c,u=r?.mtls;return n&&(c=e.ws((_,l,d)=>{if(_.protocol==="mqtt"){o.events.emit("connection",_),jt.debug("Received WebSocket connection for MQTT from",_._socket.remoteAddress);let{onMessage:E,onClose:f}=gx(_,h=>{_.send(h)},l,Promise.resolve(d).then(()=>l?.user),o);_.on("message",E),_.on("close",f),_.on("error",h=>{jt.info("WebSocket error",h)})}},Object.assign({subProtocol:"mqtt"},n))),(t||s)&&(c=e.socket(async _=>{let l;if(o.events.emit("connection",_),jt.debug(`Received ${_.getCertificate?"SSL":"TCP"} connection for MQTT from ${_.remoteAddress}`),u){if(_.authorized)try{let f=u.user;if(f!==null){(f===void 0||f==="Common Name"||f==="CN")&&(f=_.getPeerCertificate().subject.CN);try{l=await e.getUser(f,null,null),(0,ec.get)(Xt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&VE.notify({username:l?.username,status:Xt.AUTH_AUDIT_STATUS.SUCCESS,type:Xt.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT mTLS",remote_address:_.remoteAddress})}catch(h){throw(0,ec.get)(Xt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&VE.error({username:f,status:Xt.AUTH_AUDIT_STATUS.FAILURE,type:Xt.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:_.remoteAddress}),h}}else jt.debug("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",_.remoteAddress)}catch(f){o.events.emit("error",f,_),jt.error(f)}else if(u.required)return jt.info(`Unauthorized connection attempt, no authorized client certificate provided, error: ${_.authorizationError}`),_.end()}!l&&Ox&&_.remoteAddress.includes("127.0.0.1")&&(l=await(0,Rx.getSuperUser)(),jt.debug("Auto-authorizing local connection",l?.username));let{onMessage:d,onClose:E}=gx(_,f=>_.write(f),null,l,o);_.on("data",d),_.on("close",E),_.on("error",f=>{jt.info("Socket error",f)})},{port:t,securePort:s,mtls:u})),c}function gx(e,t,r,n,s){Tx||(Tx=!0,mu(d=>{kE>0&&d.push({metric:"mqtt-connections",connections:kE,byThread:!0})}));let i;kE++;let o,c={protocolVersion:4},u=(0,$E.parser)({protocolVersion:5});function _(d){u.parse(d)}a(_,"onMessage");function l(){kE--,i||(i=!0,o?.disconnect?.(),s.events.emit("disconnected",o,e),s.sessions.delete(o),Wr(!1,"connection","mqtt","disconnect"),jt.debug("MQTT connection was closed",e.remoteAddress))}return a(l,"onClose"),u.on("packet",async d=>{n?.then&&(n=await n),o?.then&&await o;let E=d.topic,f=E?.indexOf("/",1),h=f>0?E.slice(0,f):E;Sr(d.length,"bytes-received",h,S(d),"mqtt");try{switch(o?.receivedPacket?.(),d.cmd){case"connect":if(c.protocolVersion=d.protocolVersion,d.username)try{n=await at.getUser(d.username,d.password.toString(),r),(0,ec.get)(Xt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&VE.notify({username:n?.username,status:Xt.AUTH_AUDIT_STATUS.SUCCESS,type:Xt.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch(M){return(0,ec.get)(Xt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&VE.error({username:d.username,status:Xt.AUTH_AUDIT_STATUS.FAILURE,type:Xt.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),s.events.emit("auth-failed",d,e,M),Wr(!1,"connection","mqtt","connect"),p({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return s.events.emit("auth-failed",d,e),Wr(!1,"connection","mqtt","connect"),p({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(d,n),d.will){let M=e.deserialize||(e.deserialize=yo(r?.headers.get?.("content-type")));d.will.data=d.will.payload?.length>0?M(d.will.payload):void 0,delete d.will.payload}o=px({user:n,...d}),o=await o,o.socket=e,r&&(o.request=r),s.sessions.add(o)}catch(M){return jt.error(M),s.events.emit("auth-failed",d,e,M),Wr(!1,"connection","mqtt","connect"),p({cmd:"connack",reasonCode:M.code||5,returnCode:M.code||128})}s.events.emit("connected",o,e),Wr(!0,"connection","mqtt","connect"),p({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((M,Q,J,j)=>{try{if(i)throw new Error("Session disconnected while trying to send message to",M);let ae=M.indexOf("/",1),ce=ae>0?M.slice(0,ae):M;p({cmd:"publish",topic:M,payload:T(Q),messageId:J||Math.floor(Math.random()*1e8),qos:j.qos},ce);let de=e._socket??e;return de.writableNeedDrain?new Promise(Be=>de.once("drain",Be)):!de.closed}catch(ae){return jt.error(ae),o?.disconnect(),s.sessions.delete(o),!1}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let R=[];for(let M of d.subscriptions){let Q;try{Q=(await o.addSubscription(M,M.qos>=1)).qos||0}catch(J){s.events.emit("error",J,e,M,o),jt.error(J),Q=c.protocolVersion<5?128:J.statusCode===403?135:J.statusCode===404?143:128}R.push(Q)}await o.committed,p({cmd:"suback",granted:R,messageId:d.messageId});break;case"unsubscribe":{let M=[];for(let Q of d.unsubscriptions)M.push(o.removeSubscription(Q)?0:17);p({cmd:"unsuback",granted:M,messageId:d.messageId});break}case"pubrel":p({cmd:"pubcomp",messageId:d.messageId,reasonCode:0});return;case"publish":let N=d.qos===2?"pubrec":"puback",b=e.deserialize||(e.deserialize=yo(r?.headers.get?.("content-type"))),U=(d.payload?.length||0)>0?b(d.payload):void 0,F;try{F=await o.publish(d,U)}catch(M){s.events.emit("error",M,e,d,o),jt.warn(M),d.qos>0&&p({cmd:N,messageId:d.messageId,reasonCode:128},d.topic);break}d.qos>0&&p({cmd:N,messageId:d.messageId,reasonCode:F===!1?144:0},d.topic);break;case"pubrec":p({cmd:"pubrel",messageId:d.messageId,reasonCode:0});break;case"pubcomp":case"puback":o.acknowledge(d.messageId);break;case"pingreq":p({cmd:"pingresp"});break;case"disconnect":i=!0,o?.disconnect(!0),s.events.emit("disconnected",o,e),s.sessions.delete(o),Wr(!0,"connection","mqtt","disconnect"),jt.debug("Received disconnect command, closing MQTT session",e.remoteAddress),e.close?e.close():e.end();break}}catch(R){s.events.emit("error",R,e,d,o),jt.error(R),p({cmd:"disconnect"})}function p(R,N){let b=(0,$E.generate)(R,c);t(b),Sr(b.length,"bytes-sent",N,S(R),"mqtt")}a(p,"sendPacket");function S(R){return R.qos>0?R.cmd+",qos="+R.qos:R.cmd}a(S,"packetMethodName");function T(R){return Ro(R,r)}a(T,"serialize")}),u.on("error",d=>{jt.warn("MQTT parsing error, closing connection:",d.message),e?.destroy?e.destroy():e?.terminate()}),{onMessage:_,onClose:l}}var $E,Rx,ec,Xt,pA,Ax,VE,jt,Ox,Tx,kE,bx=Re(()=>{$E=require("mqtt-packet");Sx();Rx=H(_n());Da();Ds();lr();ec=H(ee()),Xt=H(P()),pA=H($()),Ax=require("events"),VE=(0,pA.loggerWithTag)("auth-event"),jt=(0,pA.loggerWithTag)("mqtt"),Ox=(0,ec.get)(Xt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(Wse,"bypassAuth");a(Qse,"start");kE=0;a(gx,"onSocket")});var qf={};Fe(qf,{component_errors:()=>rc,loadComponent:()=>YE,loadComponentDirectories:()=>Px,setErrorReporter:()=>Xse});function Px(e,t){t&&(gA=t),e&&(RA=e);let r=[];if((0,et.existsSync)(TA)){let s=(0,et.readdirSync)(TA,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,st.join)(TA,o);r.push(YE(c,gA,"hdb",!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(YE(n,gA,n,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{Mx=!0})}function Xse(e){vl=e}async function YE(e,t,r,n,s,i){let o=(0,et.realpathSync)(e);if(!Nx.has(o)){Nx.set(o,!0),s&&(RA=s);try{let c;n&&(rc=new Map);let u=(0,st.join)(e,n?"harperdb-config.yaml":"config.yaml");(0,et.existsSync)(u)?c=n?(0,Lx.getConfigObj)():(0,Ix.parseDocument)((0,et.readFileSync)(u,"utf8"),{simpleKeys:!0}).toJSON():c=AA;let _=(0,st.join)(e,"node_modules","harperdb");try{Mo.isMainThread&&(n||(0,et.existsSync)(_)&&(0,et.realpathSync)(sc.PACKAGE_ROOT)!==(0,et.realpathSync)(_))&&((0,et.rmSync)(_,{recursive:!0,force:!0}),(0,et.existsSync)((0,st.join)(e,"node_modules"))||(0,et.mkdirSync)((0,st.join)(e,"node_modules")),(0,et.symlinkSync)(sc.PACKAGE_ROOT,_,"dir"))}catch(E){tc.default.error("Error symlinking harperdb module",E)}let l=[],d=n;for(let E in c){let f=c[E];if(rc.set(n?E:(0,st.basename)(e),!1),!f)continue;let h,p=f.package;try{if(p){let b=e,x;for(;!(0,et.existsSync)(x=(0,st.join)(b,"node_modules",E));)if(b=(0,st.dirname)(b),b.length<(0,Dx.getHdbBasePath)().length){x=null;break}if(x)h=await YE(x,t,r,!1),d=!0;else throw new Error(`Unable to find package ${E}:${p}`)}else h=jse[E];if(!h)continue;l.push(h);let S=a(b=>(b.origin=r,Et(b)),"ensureTable"),T=f.network||(f.port||f.securePort)&&f,R=T?.securePort||T?.https&&T.port,N=!T?.https&&T?.port;if(Mo.isMainThread&&(h=await h.startOnMainThread?.({server:at,ensureTable:S,port:N,securePort:R,resources:t,...f})||h,n&&T))for(let b of[N,R])try{if(+b&&!yx.includes(b)){let x=OA.get(sc.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);x&&tc.default.warn("Session affinity is not recommended and may cause memory leaks"),(x||!LE)&&(yx.push(b),xH(b,x))}}catch(x){console.error("Error listening on socket",b,x,E)}if(t.isWorker&&(h=await h.start?.({server:at,ensureTable:S,port:N,securePort:R,resources:t,...f})||h),RA.set(h,!0),(h.handleFile||h.handleDirectory)&&f.files){if(f.files.includes(".."))throw(0,Cx.handleHDBError)("Can not reference parent directories");let b=(0,st.join)(e,f.files).replace(/\\/g,"/"),x=b.indexOf("/*");if(x>-1&&f.files!==AA[E]?.files&&!(0,et.existsSync)(b.slice(0,x)))throw new Error(`The path '${b.slice(0,x)}' does not exist and cannot be used as the base of the resolved 'files' path value '${f.files}'`);let U=(0,st.basename)(e),F=f.path||"/";F=F.startsWith("/")?F:F.startsWith("./")?"/"+U+F.slice(2):F==="."?"/"+U:"/"+U+"/"+F;let M,Q,J;if(f.root){let ae=f.root;ae.startsWith("/")&&(ae=ae.slice(1)),ae.endsWith("/")&&(ae=ae.slice(0,-1)),ae+="/",Q=(0,st.join)(e,ae)}else(J=b.indexOf("/*"))>-1&&(Q=b.slice(0,J+1),M=(0,st.relative)(e,Q));let j=!1;if(Mo.isMainThread&&h.setupDirectory&&(j=await h.setupDirectory?.(F,Q,t)),t.isWorker&&h.handleDirectory&&(j=await h.handleDirectory?.(F,Q,t)),j)continue;for(let ae of await(0,wx.default)(b,{onlyFiles:!1,objectMode:!0})){let{path:ce,dirent:de}=ae;d=!0;let Be=(0,st.relative)(e,ce).replace(/\\/g,"/");if(M)if(Be.startsWith(M))Be=Be.slice(M.length+1);else throw new Error(`The root path '${f.root}' does not reference a valid part of the file path '${Be}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`);let Ne=F+(F.endsWith("/")?"":"/")+Be;try{if(de.isFile()){let He=await Jse(ce);Mo.isMainThread&&await h.setupFile?.(He,Ne,ce,t),t.isWorker&&await h.handleFile?.(He,Ne,ce,t)}else Mo.isMainThread&&await h.setupDirectory?.(Ne,ce,t),t.isWorker&&await h.handleDirectory?.(Ne,ce,t)}catch(He){He.message=`Could not load ${de.isFile()?"file":"directory"} '${ce}'${f.module?" using '"+f.module+"'":""} for application '${e}' due to: ${He.message}`,vl?.(He),((0,nc.getWorkerIndex)()===0?console:tc.default).error(He),t.set(f.path||"/",new Bl(He)),rc.set(n?E:(0,st.basename)(e),He.message)}}}}catch(S){S.message=`Could not load component '${E}' for application '${(0,st.basename)(e)}' due to: ${S.message}`,vl?.(S),((0,nc.getWorkerIndex)()===0?console:tc.default).error(S),t.set(f.path||"/",new Bl(S),null,!0),rc.set(n?E:(0,st.basename)(e),S.message)}}if(Mo.isMainThread&&!Mx&&i&&(0,nc.watchDir)(e,async()=>Px()),c.extensionModule)return await T_((0,st.join)(e,c.extensionModule));if(!d&&t.isWorker){let E=`${e} did not load any modules, resources, or files, is this a valid component?`;vl?.(new Error(E)),((0,nc.getWorkerIndex)()===0?console:tc.default).error(E),rc.set((0,st.basename)(e),E)}}catch(c){console.error(`Could not load application directory ${e}`,c),c.message=`Could not load application due to ${c.message}`,vl?.(c),t.set("",new Bl(c))}}}var et,st,Mo,Ix,OA,sc,wx,nc,tc,Cx,Dx,zse,Lx,Jse,TA,RA,Mx,gA,rc,jse,AA,yx,Nx,vl,Bl,Ff=Re(()=>{et=require("fs"),st=require("path"),Mo=require("worker_threads"),Ix=require("yaml"),OA=H(ee()),sc=H(P());Ab();Nb();Ib();v0();NH();MH();wx=H(require("fast-glob")),nc=H(We()),tc=H($());Zh();lr();Cx=H(se());cn();Ae();GH();Dx=H(ee()),zse=H($H());Mf();XH();bx();Lx=H(Er());ME();({readFile:Jse}=et.promises),TA=OA.get(sc.CONFIG_PARAMS.COMPONENTSROOT),RA=new Map,rc=new Map;a(Px,"loadComponentDirectories");jse={REST:iE,rest:iE,graphqlSchema:Xh,jsResource:tm,fastifyRoutes:qR,login:nm,static:FR,operationsApi:zse,customFunctions:{},http:{},clustering:tA,authentication:tl,mqtt:SA},AA={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(AA,"static",{value:{files:"web/**"}});yx=[],Nx=new Map;a(Xse,"setErrorReporter");a(YE,"loadComponent");Bl=class extends $t{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 dA=g((BSe,vx)=>{var{isMainThread:Ux}=require("worker_threads"),{getTables:Zse}=(Ae(),ie(ke)),{loadComponentDirectories:eie,loadComponent:tie}=(Ff(),ie(qf)),{resetResources:rie}=(Zu(),ie($U)),nie=Ag(),sie=Er(),{dirname:iie}=require("path"),{getConnection:oie}=ut(),aie=ee(),cie=P(),bA=new Map;async function uie(e=!1){!Ux&&aie.get(cie.CONFIG_PARAMS.CLUSTERING_ENABLED)&&oie();try{Ux&&await nie()}catch(n){console.error(n)}let t=rie();Zse(),t.isWorker=e,await tie(iie(sie.getConfigFilePath()),t,"hdb",!0,bA),await eie(bA,t);let r=[];for(let[n]of bA)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}a(uie,"loadRootComponents");vx.exports.loadRootComponents=uie});var We=g((xSe,vi)=>{"use strict";var{Worker:lie,MessageChannel:_ie,parentPort:ms,isMainThread:CA,threadId:die,workerData:Ws}=require("worker_threads"),{PACKAGE_ROOT:fie}=P(),{join:Gx,isAbsolute:Eie,extname:hie}=require("path"),{server:qx}=(lr(),ie(Gi)),{watch:mie,readdir:pie}=require("fs/promises"),{totalmem:Bx}=require("os"),Hl=P(),Fx=ee(),Qs=$(),{randomBytes:Sie}=require("crypto"),{_assignPackageExport:Tie}=require("../index"),gie=P(),Hx=1024*1024,Ui=[],Rn=[],Rie=50,DA=1e4,Aie="restart",kx="request_thread_info",Vx="resource_report",$x="thread_info",Yx="added-port",Oie="ack",yA;Tie("threads",Rn);vi.exports={startWorker:NA,restartWorkers:MA,shutdownWorkers:wie,workers:Ui,setMonitorListener:Bie,onMessageFromWorkers:Cie,onMessageByType:Xx,broadcast:Lie,broadcastWithAcknowledgement:Pie,setChildListenerByType:Iie,getWorkerIndex:Kx,getWorkerCount:Wx,getTicketKeys:zx,setMainIsWorker:yie,setTerminateTimeout:bie,restartNumber:Ws?.restartNumber||1};Rn.onMessageByType=Xx;Rn.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=Rn.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};var LA;function bie(e){DA=e}a(bie,"setTerminateTimeout");function Kx(){return Ws?Ws.workerIndex:LA?0:void 0}a(Kx,"getWorkerIndex");function Wx(){return Ws?Ws.workerCount:LA?1:void 0}a(Wx,"getWorkerCount");function yie(e){LA=e}a(yie,"setMainIsWorker");var Qx=1,KE;function zx(){return KE||(KE=CA?Sie(48):Ws.ticketKeys,KE)}a(zx,"getTicketKeys");Object.defineProperty(qx,"workerIndex",{get(){return Kx()}});Object.defineProperty(qx,"workerCount",{get(){return Wx()}});var Jx={[kx](e,t){Uie(t)},[Vx](e,t){vie(t,e)}};function NA(e,t={}){let r=process.constrainedMemory?.()||Bx();r=Math.min(r,Bx(),2e4*Hx);let n=Fx.get(Hl.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/Hx/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],o=[];for(let u of Rn){let _=new _ie;_.existingPort=u,i.push(_),o.push(_.port2)}hie(e)||(e+=".js");let c=new lie(Eie(e)?e:Gx(fie,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:["--enable-source-maps"],argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(u=>u.existingPort.threadId),workerIndex:t.workerIndex,workerCount:Qx=t.threadCount,name:t.name,restartNumber:vi.exports.restartNumber,ticketKeys:zx()},transferList:o},t));for(let{port1:u,existingPort:_}of i)_.postMessage({type:Yx,port:u,threadId:c.threadId},[u]);return QE(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>NA(e,t),c.on("error",u=>{Qs.error(`Worker index ${t.workerIndex} error:`,u)}),c.on("exit",u=>{Ui.splice(Ui.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<Rie?(t.unexpectedRestarts=c.unexpectedRestarts+1,NA(e,t)):Qs.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",u=>{Jx[u.type]?.(u,c)}),Ui.push(c),xie(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(NA,"startWorker");var Nie=[Hl.THREAD_TYPES.HTTP];async function MA(e=null,t=Math.max(Qx>3,1),r=!0){if(CA){if(r){let{loadRootComponents:o}=dA();await o()}vi.exports.restartNumber++,t<1&&(t=t*Ui.length);let n=[],s=[];for(let o of Ui.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;Qs.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:vi.exports.restartNumber,type:Hl.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=Nie.indexOf(o.name)>-1,u=new Promise(_=>{let l=setTimeout(()=>o.terminate(),DA*2).unref();o.on("exit",()=>{clearTimeout(l),n.splice(n.indexOf(u)),!c&&r&&o.startCopy(),_()})});if(n.push(u),c&&r){let _=o.startCopy(),l=new Promise(d=>{let E=a(f=>{f.type===gie.ITC_EVENT_TYPES.CHILD_STARTED&&(Qs.trace("Worker has started",_.threadId),d(),s.splice(s.indexOf(l)),_.off("message",E))},"startListener");Qs.trace("Waiting for worker to start",_.threadId),_.on("message",E)});s.push(l),n.length>=t&&await Promise.race(n),s.length>=t&&await Promise.race(s)}}await Promise.all(n),await Promise.all(s);let{restartService:i}=ju();r&&(e==="http"||!e)&&Fx.get(Hl.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else ms.postMessage({type:Aie,workerType:e})}a(MA,"restartWorkers");function Iie(e,t){Jx[e]=t}a(Iie,"setChildListenerByType");function wie(e){return MA(e,1/0,!1)}a(wie,"shutdownWorkers");var jx=[];function Cie(e){jx.push(e)}a(Cie,"onMessageFromWorkers");var IA=new Map;function Xx(e,t){let r=IA.get(e);r||IA.set(e,r=[]),r.push(t)}a(Xx,"onMessageByType");var Die=10;async function Lie(e){let t=0;for(let r of Rn)try{r.postMessage(e),t++>Die&&(t=0,await new Promise(setImmediate))}catch(n){Qs.error("Unable to send message to worker",n)}}a(Lie,"broadcast");var WE=new Map,Mie=1;function Pie(e){return new Promise(t=>{let r=0;for(let n of Rn)try{let s=Mie++,i=a(()=>{WE.delete(s),--r===0&&t(),n!==ms&&--n.refCount===0&&n.unref()},"ack_handler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,WE.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,o]of WE)o.port===n&&o()})),n.postMessage(e),r++}catch(s){Qs.error("Unable to send message to worker",s)}r===0&&t()})}a(Pie,"broadcastWithAcknowledgement");function Uie(e){e.postMessage({type:$x,workers:Zx()})}a(Uie,"sendThreadInfo");function Zx(){let e=Date.now();return Ui.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(Zx,"getChildWorkerInfo");function vie(e,t){e.resources=t,e.resources.updated=Date.now()}a(vie,"recordResourceReport");var wA;function Bie(e){wA=e}a(Bie,"setMonitorListener");var Hie=1e3,xx=!1;function xie(){xx||(xx=!0,setInterval(()=>{for(let e of Ui){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}wA&&wA()},Hie).unref())}a(xie,"startMonitoring");var Gie=1e3;if(ms){QE(ms);for(let e=0,t=Ws.addPorts.length;e<t;e++){let r=Ws.addPorts[e];r.threadId=Ws.addThreadIds[e],QE(r)}setInterval(()=>{let e=process.memoryUsage();ms.postMessage({type:Vx,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Gie).unref(),yA=a(()=>new Promise((e,t)=>{ms.on("message",r),ms.postMessage({type:kx});function r(n){n.type===$x&&(ms.off("message",r),e(n.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else yA=Zx;vi.exports.getThreadInfo=yA;function QE(e,t){Rn.push(e),e.on("message",r=>{if(r.type===Yx)r.port.threadId=r.threadId,QE(r.port);else if(r.type===Oie){let n=WE.get(r.id);n&&n()}else{for(let s of jx)s(r,e);let n=IA.get(r.type);if(n)for(let s of n)try{s(r,e)}catch(i){Qs.error(i)}}}).on("close",()=>{Rn.splice(Rn.indexOf(e),1)}).on("exit",()=>{Rn.splice(Rn.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(QE,"addPort");if(CA){let e,t,r=new Set,n=a(async(s,i)=>{i&&(e=i);for(let o of await pie(s,{withFileTypes:!0}))o.isDirectory()&&o.name!=="node_modules"&&n(Gx(s,o.name));try{for await(let{filename:o}of mie(s,{persistent:!1}))r.add(o),t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await MA(),console.log("Reloaded HarperDB components, changed files:",Array.from(r)),r.clear()},100)}catch(o){console.warn("Error trying to watch component directory",s,o)}},"watch_dir");vi.exports.watchDir=n,process.env.WATCH_DIR&&n(process.env.WATCH_DIR)}else ms.on("message",async e=>{let{type:t}=e;t===Hl.ITC_EVENT_TYPES.SHUTDOWN&&(vi.exports.restartNumber=e.restartNumber,ms.unref(),setTimeout(()=>{Qs.warn("Thread did not voluntarily terminate",die),process.exit(0)},DA).unref())})});var UC={};Fe(UC,{AUDIT_STORE_OPTIONS:()=>bf,createAuditEntry:()=>b_,openAuditStore:()=>XE,readAuditEntry:()=>vt,setAuditRetention:()=>Fie,transactionKeyEncoder:()=>cG});function XE(e){let t=e.auditStore=e.openDB(iG.AUDIT_STORE_NAME,bf);t.rootStore=e;let r=[];t.addDeleteRemovalCallback=function(i,o){return r[i]=o,{remove(){delete r[i]}}};let n=null;function s(i=zE){clearTimeout(n),n=setTimeout(async()=>{if(t.rootStore.status==="closed"||t.rootStore.status==="closing")return;let o=0,c;try{for(let{key:u,value:_}of t.getRange({start:0,snapshot:!1,end:Date.now()-PA})){if((_[0]&15)===BA){let l=vt(_),d=l.tableId;r[d]?.(l.recordId)}if(c=t.remove(u),await new Promise(setImmediate),++o>=qie){i=10;break}}await c}finally{o===0&&(i=Math.min(i<<1,PA/10)),s(i)}},i).unref()}return a(s,"scheduleAuditCleanup"),t.scheduleAuditCleanup=s,(0,jE.getWorkerIndex)()===(0,jE.getWorkerCount)()-1&&s(zE),t}function Fie(e,t=zE){PA=e,zE=t}function b_(e,t,r,n,s,i,o){let c=uG[i];if(!c)throw new Error(`Invalid audit entry type ${i}`);let u=1;n&&(n>1?ic.setFloat64(0,n):An.set(Tm),u=9),E(0),E(t),d(r),ic.setFloat64(u,e),u+=8,s?d(s):An[u++]=0,An[n?8:0]=c;let l=An.subarray(0,u);if(o)return Buffer.concat([l,o]);return l;function d(f){let h=u;u+=1,u=(0,oc.writeKey)(f,An,u);let p=u-h-1;p>127?p>16383?(xA.error("Key or username was too large for audit entry",f),u=h+1,An[h]=0):(An.copyWithin(h+2,h+1,u),ic.setUint16(h,p|32768),u++):An[h]=p}function E(f){f<128?An[u++]=f:f<16384?(ic.setUint16(u,f|32768),u+=2):f<1056964608?(ic.setUint32(u,f|3221225472),u+=4):(An[u]=255,ic.setUint32(u+1,f),u+=5)}}function vt(e){try{let t=e.dataView||(e.dataView=new HA(e.buffer,e.byteOffset,e.byteLength)),r;e[0]==66&&(r=t.readFloat64());let n=t.readInt(),s=t.readInt(),i=t.readInt(),o=t.readInt(),c=t.position,u=t.position+=o,_=t.readFloat64();o=t.readInt();let l=t.position,d=t.position+=o;return{type:uG[n&7],tableId:i,get recordId(){return sG(e,c,u)},version:_,previousLocalTime:r,get user(){return d>l?sG(e,l,d):void 0},getValue(E,f,h){if(n&UA||n&vA&&!f)return E.decoder.decode(e.subarray(t.position));if(n&vA&&h)return GA(E.getEntry(this.recordId),h,E)}}}catch(t){return xA.error("Reading audit entry error",t,e),{}}}function sG(e,t,r){let n=e.subarray(t,r);return(0,oc.readKey)(n,0,r-t)}var oc,JE,iG,oG,jE,aG,xA,An,ic,cG,bf,PA,qie,zE,UA,vA,eG,BA,tG,rG,nG,uG,HA,ni=Re(()=>{oc=require("ordered-binary"),JE=H(ee()),iG=H(ft()),oG=H(P()),jE=H(We()),aG=H(z());Uc();xA=H($());ZE();(0,JE.initSync)();An=Buffer.alloc(1024),ic=new DataView(An.buffer,An.byteOffset,1024),cG={writeKey(e,t,r){return e===Pc?(t.set(Pc,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,oc.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,oc.readKey)(e,t,r)}},bf={encoding:"binary",keyEncoder:cG},PA=(0,aG.convertToMS)((0,JE.get)(oG.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,qie=1e3,zE=1e4;a(XE,"openAuditStore");a(Fie,"setAuditRetention");UA=16,vA=32,eG=1,BA=2,tG=3,rG=4,nG=5,uG={put:eG|UA,[eG]:"put",delete:BA,[BA]:"delete",message:tG|UA,[tG]:"message",invalidate:rG,[rG]:"invalidate",patch:nG|vA,[nG]:"patch"};a(b_,"createAuditEntry");a(vt,"readAuditEntry");HA=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(sG,"readKeySafely")});var qA={};Fe(qA,{add:()=>eh,applyReverse:()=>lG,getRecordAtTime:()=>GA,rebuildUpdateBefore:()=>th});function eh(e,t,r){let n=e[t];typeof n=="bigint"?e[t]=n+BigInt(r.value):isNaN(e[t])?e[t]=r.value:e[t]=n+r.value}function th(e,t){let r=null;for(let n in e)if(n in t){let s=t[n];if(s?.__op__){let i=e[n];if(i?.__op__)if(i.__op__===s.__op__)r||(r={}),r[n]=i;else throw new Error("Can not merge updates with different operations");else r||(r={}),r[n]=i,eh(r,n,s)}}else r||(r={}),r[n]=e[n];return r}function lG(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=kie[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=_G}}function GA(e,t,r){let n=r.rootStore.auditStore,s=Object.assign({},e.value),i=e.localTime;for(;i>t;){let u=n.get(i),_=vt(u);switch(_.type){case"put":s=_.getValue(r);break;case"patch":lG(s,_.getValue(r));break;case"delete":s=null}i=_.previousLocalTime}let o={},c=0;for(let u in s)s[u]===_G&&(o[u]=!0,c++);for(;c>0&&i>0;){let u=n.get(i),_=vt(u),l;switch(_.type){case"put":l=_.getValue(r);break;case"patch":l=_.getValue(r);break}for(let d in l)o[d]&&(s[d]=l[d],o[d]=!1,c--);i=_.previousLocalTime}if(c>0)for(let u in o)s[u]=null;return s}var kie,_G,ZE=Re(()=>{ni();a(eh,"add");eh.reverse=function(e,t,r){let n=e[t];typeof n=="bigint"?e[t]=n-BigInt(r.value):isNaN(e[t])||(e[t]=n-r.value)};kie={add:eh};a(th,"rebuildUpdateBefore");a(lG,"applyReverse");_G={};a(GA,"getRecordAtTime")});function Zr(e){return e[Nt]||(e[Nt]=Object.create(null))}function oh(e,t){let r=e.prototype,n={},s=t.attributes||t.properties||[];for(let o of s){let c=o.name,u,_;if(o.resolve)_={get(){return o.resolve(this,this[ye])},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 On.ClientError(`${c} must be a string, attempt to assign ${l}`);Zr(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 On.ClientError(`${c} must be a string, attempt to assign ${l}`);Zr(this)[c]=l},"set");break;case"Float":case"Number":u=a(function(l){let d=l?.__op__?l.value:l;if(!(typeof d=="number"||l==null&&o.nullable!==!1))throw new On.ClientError(`${c} must be a number, attempt to assign ${d}`);Zr(this)[c]=l},"set");break;case"Int":u=a(function(l){let d=l?.__op__?l.value:l;if(!(d>>0===d||l==null&&o.nullable!==!1))if(typeof d=="number"&&Math.abs((d>>0)-d)<=1)d=Math.round(d),l?.__op__?l.value=d:l=d;else throw new On.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${l}`);Zr(this)[c]=l},"set");break;case"Long":u=a(function(l){let d=l?.__op__?l.value:l;if(!(Math.round(d)===l&&Math.abs(d)<=9007199254740992||l==null&&o.nullable!==!1))if(typeof d=="number"&&Math.abs(d)<=9007199254740992)d=Math.round(d),l?.__op__?l.value=d:l=d;else throw new On.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${l}`);Zr(this)[c]=l},"set");break;case"BigInt":u=a(function(l){let d=l?.__op__?l.value:l;if(!(typeof d=="bigint"||l==null&&o.nullable!==!1))if(typeof d=="string"||typeof d=="number")d=BigInt(d),l?.__op__?l.value=d:l=d;else throw new On.ClientError(`${c} must be a number, attempt to assign ${l}`);Zr(this)[c]=l},"set");break;case"Boolean":u=a(function(l){if(!(typeof l=="boolean"||l==null&&o.nullable!==!1))throw new On.ClientError(`${c} must be a boolean, attempt to assign ${l}`);Zr(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 On.ClientError(`${c} must be a Date, attempt to assign ${l}`);Zr(this)[c]=l},"set");break;case"Bytes":u=a(function(l){if(!(l instanceof Uint8Array||l==null&&o.nullable!==!1))throw new On.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${l}`);Zr(this)[c]=l},"set");break;case"Any":case void 0:u=a(function(l){Zr(this)[c]=l},"set");break;default:u=a(function(l){if(!(typeof l=="object"||l==null&&o.nullable!==!1))throw new On.ClientError(`${c} must be an object, attempt to assign ${l}`);Zr(this)[c]=l},"set")}_={get(){let l=this[Nt];if(l&&c in l){let E=l[c];if(E?.__op__){let f=this[Ee]?.[c];return E.update(f)}return E}let d=this[Ee]?.[c];if(d&&typeof d=="object"){let E=fG(d,o);if(E)return l||(l=this[Nt]=Object.create(null)),l[c]=E}return d},set:u,enumerable:!0,configurable:!0}}_.get.isAttribute=!0,n[c]=_,(!(c in r)||Object.getOwnPropertyDescriptor(r,c)?.get?.isAttribute)&&Object.defineProperty(r,c,_)}i("getProperty",function(o){let c=n[o];if(c)return c.get.call(this);let u=this[Nt];return u?.[o]!==void 0?u[o]:this[Ee]?.[o]}),i("set",function(o,c){let u=n[o];if(u)return u.set.call(this,c);if(t.sealed)throw new On.ClientError("Can not add a property to a sealed table schema");Zr(this)[o]=c}),i("deleteProperty",function(o){Zr(this)[o]=void 0}),i("toJSON",function(){let o=this[Nt],c;for(let _ in o){c||(c=Object.assign({},this[Ee]));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[Ee])),Object.assign(c,this)),c||this[Ee]}),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 fG(e,t){let r;switch(e.constructor){case Object:return t?((r=t.TrackedObject)||(t.TrackedObject=r=class{static{a(this,"TrackedObject")}constructor(s){if(s?.[Ee])throw new Error("Can not track an already tracked object, check for circular references");this[Ee]=s}},oh(r,t)),new r(e)):new rh(e);case Array:let n=new sh(e.length);n[Ee]=e;for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=fG(o,t?.elements)),n[s]=o}return n;default:return e}}function gd(e){let t=e[Nt],r;for(let s in t){r||(r=Object.assign({},e[Ee]));let i=t[s];if(i&&typeof i=="object")if(i.__op__){let o=r[s];i=i.update(o)}else i=gd(i);r[s]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[Ee])),Object.assign(r,e)),r||e[Ee]}function Uo(e,t=e[Nt]){let r;if(dG.call(e,Ee)&&e.constructor===Array&&!Object.isFrozen(e)){r=e;for(let n=0,s=e.length;n<s;n++){let i=e[n];if(i&&typeof i=="object"){let o=Uo(i);o!==i&&r===e&&(r=e.slice(0)),i=o}r[n]=i}return Object.freeze(r)}for(let n in t){r||(r=Object.assign({},e[Ee]));let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=qA[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=Uo(s);r[n]=s}return r?Object.freeze(r):dG.call(e,Ee)?e[Ee]:e}function nh(e){let t=e[Ee];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[Po]||e.length!==t.length)return!0;for(let r=0,n=e.length;r<n;r++){let s=t[r],i=e[r];if(s&&i?.[Ee]===s){if(nh(i))return!0}else return!0}}else{let r=e[Nt];if(r&&!t)return!0;for(let n in r){let s=r[n];if(s&&typeof s=="object"){let i=t[n];if(i&&s[Ee]===i){if(nh(s))return!0}else return!0}else return!0}}return!1}var On,Nt,rh,dG,Po,sh,ih,Rd=Re(()=>{cn();On=H(se());ZE();Nt=Symbol("own-data");a(Zr,"getChanges");a(oh,"assignTrackedAccessors");a(fG,"trackObject");rh=class{static{a(this,"GenericTrackedObject")}constructor(t){if(t?.[Ee])throw new Error("Can not track an already tracked object, check for circular references");this[Ee]=t}};oh(rh,{});a(gd,"collapseData");dG=Object.prototype.hasOwnProperty;a(Uo,"deepFreeze");a(nh,"hasChanges");Po=Symbol.for("has-array-changes"),sh=class extends Array{static{a(this,"TrackedArray")}[Po];constructor(t){super(t)}splice(...t){return this[Po]=!0,super.splice(...t)}push(...t){return this[Po]=!0,super.push(...t)}pop(){return this[Po]=!0,super.pop()}unshift(...t){return this[Po]=!0,super.unshift(...t)}shift(){return this[Po]=!0,super.shift()}};sh.prototype.constructor=Array;ih=class{constructor(t){this.value=t}static{a(this,"Addition")}__op__="add";update(t){return(+t||0)+this.value}}});var $p={};Fe($p,{CONTEXT:()=>ye,ID_PROPERTY:()=>Me,IS_COLLECTION:()=>Vn,MultiPartId:()=>qa,RECORD_PROPERTY:()=>Ee,Resource:()=>$t,snake_case:()=>$ie,transformForSelect:()=>ch});function $ie(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function EG(e,t){if(xl=!1,e==="")return null;if(e=e.slice(1),e.indexOf("/")===-1)return e===""?(xl=!0,null):(e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e)));let r=e.split("/"),n=new qa;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){xl=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}function en(e,t){n.reliesOnPrototype=!0;let r=t.hasContent;return n;function n(s,i,o){let c,u,_,l;if(r?(o?(l=i,o=o[ye]||o):i?typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(l=s,c=l[this.primaryKey]??null,o=i[ye]||i):l=i:(l=s,c=l[Me]??l[this.primaryKey]??null),c==null&&(_=!0)):i?o=i[ye]||i:s&&typeof s=="object"&&!Array.isArray(s)&&(o=s),c===void 0)if(typeof s=="string")c=s;else if(typeof s=="object"&&s)if(u=s,s[Symbol.iterator]){c=[],_=!0;for(let f of s){if(typeof f=="object"&&f)break;c.push(f)}c.length===0?c=null:(c.length===1&&(c=c[0]),u.slice&&(u=u.slice(c.length,u.length),u.length===0&&(u=null,_=!1)))}else{if(typeof(c=s.url)=="string"){let f=c.indexOf("?");if(f>-1){let p=this.parseQuery(c.slice(f+1));u?u=Object.assign(p,u):u=p,c=c.slice(0,f)}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=s.id??null,c==null&&(_=!0))}else c=s??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 f=this.getResource(c,o,d);return f.then?f.then(E):E(f)}else return rt(o,()=>{let f=this.getResource(c,o,d);return f.then?f.then(E):E(f)},d);function E(f){if(o.authorize){o.authorize=!1;let h=t.type==="read"?f.allowRead(o.user,u,o):t.type==="update"?f.doesExist?.()===!1?f.allowCreate(o.user,l,o):f.allowUpdate(o.user,l,o):t.type==="create"?f.allowCreate(o.user,l,o):f.allowDelete(o.user,u,o);if(h?.then)return h.then(p=>{if(!p)throw new ah(o.user);return typeof l?.then=="function"?l.then(S=>e(f,u,o,S)):e(f,u,o,l)});if(!h)throw new ah(o.user)}return typeof l?.then=="function"?l.then(h=>e(f,u,o,h)):e(f,u,o,l)}a(E,"authorizeActionOnResource")}}function tn(e,t){let r=new pG.ClientError(`The ${e.constructor.name} does not have a ${t} method implemented`,405);r.allow=[],r.method=t;for(let n of["get","put","post","delete","query","move","copy"])typeof e[n]=="function"&&r.allow.push(n);throw r}function FA(e,t,r){let n=e[Ee];if(n){let s=e[Nt];return i=>{let o,c;return e.hasOwnProperty(i)&&typeof(o=e[i])!="function"?o:s&&i in s?s[i]:(c=t?.[i])?c(e,r):n[i]}}else return t?s=>{let i=t[s];return i?i(e,r):e[s]}:s=>e[s]}function ch(e,t){let r=t?.propertyResolvers,n=t[ye],s;if(typeof e=="string")return a(function o(c){return c.then?c.then(o):Array.isArray(c)?c.map(o):FA(c,r,n)(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(FA(u,r,n));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(E=>E&&typeof E=="object"?c(E):E);let _={},l=i(FA(u,r,n)),d;for(let E of e){let f=l(E);f===void 0&&o&&(f=null),f?.then?(d||(d=[]),d.push(f.then(h=>_[E.name||E]=h))):_[E.name||E]=f}return d?Promise.all(d).then(()=>_):_},"transform")}else throw new Error("Invalid select argument type "+typeof e);function i(o){return c=>{if(typeof c=="string")return o(c);if(typeof c=="object")if(c.name){s||(s={});let u=s[c.name];if(!u){let l=r[c.name]?.definition?.tableClass;u=s[c.name]=ch(c.select||c,l)}let _=o(c.name);return u(_)}else return o(c);else return c}}a(i,"handleProperty")}var hG,mG,pG,ye,Me,Vn,Ee,Vie,$t,ah,xl,qa,cn=Re(()=>{hG=require("crypto");Ic();mG=require("../index"),pG=H(se());Rd();so();nE();ye=Symbol.for("context"),Me=Symbol.for("primary-key"),Vn=Symbol("is-collection"),Ee=Symbol("stored-record"),Vie={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},$t=class{static{a(this,"Resource")}static transactions;constructor(t,r){this[Me]=t;let n=r?.[ye];this[ye]=n!==void 0?n:r||null}static get=en(function(t,r,n,s){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 _=ch(u,t.constructor);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",letItLinger:!0,ensureLoaded:!0,async:!0});static put=en(function(t,r,n,s){if(Array.isArray(s)&&t[Vn]){let i=[],o=n.authorize;for(let c of s){let u=t.constructor,_=u.getResource(c[u.primaryKey],n,{async:!0});_.then?i.push(_.then(l=>l.put(c,n))):i.push(_.put(c,n))}return Promise.all(i)}return t.put?t.put(s,r):tn(t,"put")},{hasContent:!0,type:"update"});static patch=en(function(t,r,n,s){return t.patch?t.patch(s,r):tn(t,"patch")},{hasContent:!0,type:"update"});static delete=en(function(t,r,n,s){return t.delete?t.delete(r):tn(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,hG.randomUUID)()}static create(t,r,n){let s;return t==null?s=this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?s=[...t,this.getNewId()]:typeof t!="object"?s=[t,this.getNewId()]:(s=this.getNewId(),n=r,r=t),n||(n={}),rt(n,()=>{let i=new this(s,n),o=i.update?i.update(r,!0):tn(i,"update");return n.newLocation=s,n.createdResource=!0,o?.then?o.then(()=>s):s})}static invalidate=en(function(t,r,n,s){return t.invalidate?t.invalidate(r):tn(t,"delete")},{hasContent:!1,type:"update"});static post=en(function(t,r,n,s){return t[Me]!=null&&t.update?.(),t.post(s,r)},{hasContent:!0,type:"create"});static connect=en(function(t,r,n,s){return t.connect?t.connect(s,r):tn(t,"connect")},{hasContent:!0,type:"read"});static subscribe=en(function(t,r,n,s){return t.subscribe?t.subscribe(r):tn(t,"subscribe")},{type:"read"});static publish=en(function(t,r,n,s){return t[Me]!=null&&t.update?.(),t.publish?t.publish(s,r):tn(t,"publish")},{hasContent:!0,type:"create"});static search=en(function(t,r,n,s){let i=t.search?t.search(r):tn(t,"search"),o=n.select;if(o&&n.hasOwnProperty("select")&&i!=null&&!i.selectApplied){let c=ch(o,t.constructor);return i.map(c)}return i},{type:"read"});static query=en(function(t,r,n,s){return t.search?t.search(s,r):tn(t,"search")},{hasContent:!0,type:"read"});static copy=en(function(t,r,n,s){return t.copy?t.copy(s,r):tn(t,"copy")},{type:"create"});static move=en(function(t,r,n,s){return t.move?t.move(s,r):tn(t,"move")},{type:"delete"});post(t){if(this[Vn])return this.constructor.create(this[Me],t,this[ye]);tn(this,"post")}static isCollection(t){return t?.[Vn]}static coerceId(t){return t}static parseQuery(t){return rE(t)}static parsePath(t,r,n){let s=t.indexOf(".");if(s>-1){let o=t.slice(s+1);t=t.slice(0,s);let c=r?.headers&&Vie[o];if(c)r.requestedContentType=c;else if(n)n.property=o;else return{query:{property:o},id:EG(t,this),isCollection:xl}}let i=EG(t,this);return xl?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r[ye],o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=n?.isCollection;let c=o&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let u;if(i.resourceCache?u=i.resourceCache:u=i.resourceCache=[],u.asMap){let _=u.asMap.get(t);if(s=_?.find(l=>l.constructor===c),s)return s;_||u.asMap.set(t,_=[]),_.push(s=new c(t,i))}else{if(s=u.find(_=>_[Me]===t&&_.constructor===c),s)return s;if(u.push(s=new c(t,i)),u.length>10){let _=new Map;for(let l of u){let d=l[Me],E=_.get(d);E?E.push(l):_.set(d,[l])}i.resourceCache.length=0,i.resourceCache.asMap=_}}}else s=new c(t,i);return o&&(s[Vn]=!0),s}subscribe(t){return new In}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new In}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[Me]}getContext(){return this[ye]}};$t.prototype[ye]=null;(0,mG._assignPackageExport)("Resource",$t);a($ie,"snake_case");ah=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(EG,"pathToId");qa=class extends Array{static{a(this,"MultiPartId")}toString(){return this.join("/")}};a(en,"transactional");a(tn,"missingMethod");a(FA,"selectFromObject");a(ch,"transformForSelect")});function gG(e,t,r,n,s){let i=e.primaryStore.env.path,o=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=TG,Yie(e.primaryStore,e.auditStore)):(c=SG,e.primaryStore.env.hasSubscriptionCommitListener||(e.primaryStore.env.hasSubscriptionCommitListener=!0,e.primaryStore.on("committed",()=>{RG(SG[i])})));let u=c[i]||(c[i]=[]);u.auditStore=e.auditStore,u.lastTxnTime==null&&(u.lastTxnTime=Date.now());let _=u[o];_||(_=u[o]=new Map,_.envs=u,_.tableId=o,_.store=e.primaryStore),t=wa(t);let l=new VA(r);l.startTime=n;let d=_.get(t);return d?d.push(l):(_.set(t,d=[l]),d.tables=_,d.key=t),l.subscriptions=d,l}function RG(e){if(!e)return;let t=e.auditStore;try{t.resetReadTxn()}catch(n){throw n.message+=" in "+path,n}let r;for(let{key:n,value:s}of t.getRange({start:e.lastTxnTime,exclusiveStart:!0})){e.lastTxnTime=n;let i=vt(s),o=e[i.tableId];if(!o)continue;let c=i.recordId,u,_=wa(i.recordId),l=0;do{let d=o.get(_);if(d){for(let f of d)if(!(l>0&&!(f.includeDescendants&&!(f.onlyChildren&&l>1)))){if(f.startTime>=n){(0,kA.info)("omitting",c,f.startTime,n);continue}try{let h;f.supportsTransactions&&f.txnInProgress!==i.version&&(h=!0,f.txnInProgress||(r?r.push(f):r=[f]),f.txnInProgress=i.version),f.listener(c,i,n,h)}catch(h){console.error(h),(0,kA.info)(h)}}}if(_==null)break;let E=_.lastIndexOf?.("/",_.length-2);E>-1?_=_.slice(0,E):_=null,l++}while(!0)}if(r)for(let n of r)n.txnInProgress=null,n.listener(null,{type:"end_txn"},e.lastTxnTime,!0)}function Yie(e,t){let r=t||e,n=r.env;if(!n.hasAfterCommitListener){n.hasAfterCommitListener=!0;let s=n.path;r.on("aftercommit",({next:i,last:o,txnId:c})=>{let u=TG[s];if(!u)return;let _=a(()=>{r.threadLocalWrites||(r.threadLocalWrites=new Float64Array(r.getUserSharedBuffer("last-thread-local-write",new ArrayBuffer(8)))),u.txnTime=r.threadLocalWrites[0]||Date.now(),RG(u),r.threadLocalWrites[0]=u.lastTxnTime,r.unlock("thread-local-writes")},"acquiredLock");r.attemptLock("thread-local-writes",_)&&_()})}}var kA,SG,TG,VA,AG=Re(()=>{kA=H($());Ic();Zu();ni();SG=Object.create(null),TG=Object.create(null);a(gG,"addSubscription");VA=class extends In{static{a(this,"Subscription")}listener;subscriptions;startTime;constructor(t){super(),this.listener=t,this.on("close",()=>this.end())}end(){if(this.subscriptions){if(this.subscriptions.splice(this.subscriptions.indexOf(this),1),this.subscriptions.length===0){let t=this.subscriptions.tables,r=this.subscriptions.key;if(t.delete(r),t.size===0){let n=t.envs,s=t.dbi;delete n[s]}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}};a(RG,"notifyFromTransactionData");a(Yie,"listenToCommits")});var OR={};Fe(OR,{coerceType:()=>uh,makeTable:()=>dh,setServerUtilities:()=>eoe,updateResource:()=>lh});function dh(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:o,databaseName:c,auditStore:u,schemaDefined:_,dbisDB:l,sealed:d}=e,{expirationMS:E,evictionMS:f,audit:h,trackDeletes:p}=e,{attributes:S}=e;S||(S=[]);let T=Am(i,n,u),R=0,N,b,x={},U=Promise.resolve(),F,M,Q;for(let K of S)(K.assignCreatedTime||K.name==="__createdtime__")&&(F=K),(K.assignUpdatedTime||K.name==="__updatedtime__")&&(M=K),K.expiresAt&&(Q=K),K.isPrimaryKey&&(x=K);let J,j=[],ae=[],ce=1,de=2,Be={},Ne={},He=864e5,n_,s_,js,lO=!1,wh,Ch,Iq=i.getRange({start:!1,end:!1}).constructor,wq=10,Cq=6;h&&fO();class Je extends $t{static name=s;static primaryStore=i;static auditStore=u;static primaryKey=t;static tableName=s;static indices=r;static audit=h;static databasePath=o;static databaseName=c;static attributes=S;static expirationTimer;static createdTimeProperty=F;static updatedTimeProperty=M;static propertyResolvers;static sources=[];static get expirationMS(){return E}static dbisDB=l;static schemaDefined=_;static sourcedFrom(m,A){A&&(this.sourceOptions=A,(A.expiration||A.eviction||A.scanInterval)&&this.setTTLExpiration(A)),A?.intermediateSource?(m.intermediateSource=!0,this.sources.unshift(m)):this.sources.push(m),b=m.get&&(!m.get.reliesOnPrototype||m.prototype.get);let D=a(L=>{let y=this.sources.slice(0,-1);if(y=y.filter(v=>v[L]&&(!v[L].reliesOnPrototype||v.prototype[L])),y.length>0)if(y.length===1){let v=y[0];return(q,C,G)=>{if(q?.source!==v)return v[L](C,G,q)}}else return(v,q,C)=>{let G=[];for(let B of y){if(v?.source===B)break;G.push(B[L](q,C,v))}return Promise.all(G)}},"getApplyToIntermediateSource"),O=this.sources[this.sources.length-1],I=a(L=>{if(O[L]&&(!O[L].reliesOnPrototype||O.prototype[L]))return(y,v,q)=>{if(!y?.source)return O[L](v,q,y)}},"getApplyToCanonicalSource");return Be={put:I("put"),patch:I("patch"),delete:I("delete"),publish:I("publish")},Ne={put:D("put"),patch:D("patch"),delete:D("delete"),publish:D("publish"),invalidate:D("invalidate")},(async()=>{let L=!1,y=a(async(v,q)=>{let C=v.value,G=v.table?ct[c][v.table]:Je;if(c===Yn.SYSTEM_SCHEMA_NAME&&(v.table===Yn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||v.table===Yn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(L=!0),v.id===void 0&&(v.id=C[G.primaryKey],v.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(v));v.source=m;let B=await G.getResource(v.id,q,ac);switch(v.type){case"put":return B._writeUpdate(C,!0,ac);case"patch":return B._writeUpdate(C,!1,ac);case"delete":return B._writeDelete(ac);case"publish":return B._writePublish(C,ac);case"invalidate":return B.invalidate(ac);default:it.error("Unknown operation",v.type,v.id)}},"writeUpdate");try{let v=m.subscribe;v&&p==null&&(p=!0);let q=m.subscribeOnThisThread?m.subscribeOnThisThread((0,Bo.getWorkerIndex)()):(0,Bo.getWorkerIndex)()===0,C=v&&q&&await m.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(C){let G;for await(let B of C)try{if(!(B.type==="transaction"?B.writes[0]:B)){it.error("Bad subscription event",B);continue}if(B.source=m,G)if(B.beginTxn)G.resolve();else{y(B,G);continue}if(B.type==="end_txn")continue;let le=rt(B,()=>{if(B.type==="transaction"){let ne=[];for(let Ue of B.writes)try{ne.push(y(Ue,B))}catch(ue){throw ue.message+=" writing "+JSON.stringify(Ue)+" of event "+JSON.stringify(B),ue}return Promise.all(ne)}else if(B.type==="define_schema"){let ne=this.attributes.slice(0),Ue;for(let ue of B.attributes)ne.find(De=>De.name===ue.name)||(ne.push(ue),Ue=!0);Ue&&(Et({table:s,database:c,attributes:ne,origin:"cluster"}),Yl.signalSchemaChange(new Kl.SchemaEventMsg(process.pid,Yn.OPERATIONS_ENUM.CREATE_TABLE,c,s)))}else return B.beginTxn?(G=B,y(B,B),new Promise(ne=>{G.resolve=ne})):y(B,B)});L&&(await le,Yl.signalUserChange(new Kl.UserEventMsg(process.pid))),B.onCommit&&(le?.then?le.then(B.onCommit):B.onCommit())}catch(Z){it.error("error in subscription handler",Z)}}}catch(v){it.error(v)}})(),this}static getResource(m,A,D){let O=super.getResource(m,A,D);if(m!=null){dc(m);try{if(O.hasOwnProperty(Ee))return O;if(typeof m=="object"&&m&&!Array.isArray(m))throw new Error(`Invalid id ${JSON.stringify(m)}`);let I=!D?.async||i.cache?.get(m),L=yn(A),y=L.getReadTxn();if(y?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return Dh(m,A,{transaction:y},I,v=>{if(v?lh(O,v):O[Ee]=null,A.onlyIfCached&&A.noCacheStore){if(!O.doesExist())throw new rn.ServerError("Entry is not cached",504)}else if(D?.ensureLoaded){let q=Lh(m,v,A,O);if(q)return L?.disregardReadTxn(),O[$A]=!0,KA(q,C=>(lh(O,C),O))}return O})}catch(I){throw I.message.includes("Unable to serialize object")&&(I.message+=": "+JSON.stringify(m)),I}}return O}ensureLoaded(){let m=Lh(this[Me],this[Lr],this[ye]);if(m)return this[$A]=!0,KA(m,A=>{this[Lr]=A,this[Ee]=A.value,this[Vl]=A.version})}static setTTLExpiration(m){if(typeof m=="number")E=m*1e3,f||(f=0);else if(m&&typeof m=="object")E=m.expiration*1e3,f=(m.eviction||0)*1e3,He=m.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(E<0)throw new Error("Expiration can not be negative");He=He||(E+f)/4,Ph()}static enableAuditing(m=!0){h=m,m&&fO(),Je.audit=m}static coerceId(m){return m===""?null:uh(m,x)}static async dropTable(){if(delete ct[c][s],c===o){for(let m of S)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));Yl.signalSchemaChange(new Kl.SchemaEventMsg(process.pid,Yn.OPERATIONS_ENUM.DROP_TABLE,c,s))}get(m){if(typeof m=="string")return this.getProperty(m);if(this[Vn])return this.search(m);if(this[Me]===null){if(m?.conditions)return this.search(m);let A=Je.getRecordCount();return{recordCount:A.recordCount,estimatedRecordRange:A.estimatedRange,records:"./",name:s,database:c,attributes:S}}if(m?.property)return this.getProperty(m.property);if(this.doesExist()||m?.ensureLoaded===!1||this[ye]?.returnNonexistent)return this}allowRead(m,A){let D=o_(m);if(D?.read){if(D.isSuperUser)return!0;let O=D.attribute_permissions,I=A?.select;if(O?.length>0||lO&&I){if(A||(A={}),I){let L=O?.length>0&&YA(O,"read");A.select=I.map(y=>{let v=y.name||y;if(!L||L[v]){let q=js[v]?.definition?.tableClass;if(q){if(y.name||(y={name:y}),!q.prototype.allowRead.call(null,m,y))return!1;if(!y.select)return y.name}return y}}).filter(Boolean)}else A.select=O.filter(L=>L.read&&!js[L.attribute_name]).map(L=>L.attribute_name);return A}else return!0}}allowUpdate(m,A){let D=o_(m);if(D?.update){let O=D.attribute_permissions;if(O?.length>0){let I=YA(O,"update");for(let L in A)if(!I[L])return!1;for(let L of O){let y=L.attribute_name;!L.update&&!(y in A)&&(A[y]=this.getProperty(y))}}return!0}}allowCreate(m,A){if(this[Vn]){let D=o_(m);if(D?.insert){let O=D.attribute_permissions;if(O?.length>0){let I=YA(O,"insert");for(let L in A)if(!I[L])return!1}else return!0}}else return this.allowUpdate(m,{})}allowDelete(m){return o_(m)?.delete}update(m,A){if(!yn(this[ye]))throw new Error("Can not update a table resource outside of a transaction");if(m===!1)return this;let O;return typeof m=="object"&&m&&(A?(Object.isFrozen(m)&&(m=Object.assign({},m)),this[Ee]={},this[Nt]=m):(O=this[Nt],O&&(m=Object.assign(O,m)),this[Nt]=O=m)),this._writeUpdate(this[Nt],A),this}addTo(m,A){if(typeof A=="number"||typeof A=="bigint")this[Gl]===bG?this.set(m,(+this.getProperty(m)||0)+A):(this[Gl]||this.update(),this.set(m,new ih(A)));else throw new Error("Can not add a non-numeric value")}subtractFrom(m,A){if(typeof A=="number")return this.addTo(m,-A);throw new Error("Can not subtract a non-numeric value")}getMetadata(){return this[Lr]}invalidate(m){let A=this[ye],D=this[Me];dc(D),yn(this[ye]).addWrite({key:D,store:i,invalidated:!0,entry:this[Lr],nodeName:this[ye]?.nodeName,before:Be.invalidate?.bind(this,A,D),beforeIntermediate:Ne.invalidate?.bind(this,A,D),commit:(I,L)=>{if(L?.version>I)return;let y=null;for(let v in r)y||(y={}),y[v]=this.getProperty(v);T(D,y,this[Lr],I,ql,h,this[ye],0,"invalidate")}})}static evict(m,A,D){let O=this.Source,I;if(!((b||h)&&(!A||(I=i.getEntry(m),!I||!A)||I.version!==D))){if(b){if(i.hasLock(m,I.version))return;let L;for(let y in r)L||(L={}),L[y]=A[y];if(L)return T(m,L,I,D,Fl,null,null,0,null,!0)}return i.ifVersion(m,D,()=>{i_(m,A,null)}),h?T(m,null,I,D,Fl,null,null,0,null,!0):i.remove(m,D)}}lock(){throw new Error("Not yet implemented")}static operation(m,A){return m.table||=s,m.schema||=c,LG.operation(m,A)}put(m){this.update(m,!0)}patch(m){this.update(m,!1)}_writeUpdate(m,A,D){let O=this[ye],I=yn(O),L=this[Me];dc(L);let y=this[Lr];this[Gl]=A?bG:jie;let v={key:L,store:i,entry:y,nodeName:O?.nodeName,validate:q=>{m||(m=this[Nt]),A||m&&nh(this[Nt]===m?this:m)?O?.source||(I.checkOverloaded(),this.validate(m,!A),M&&(m[M.name]=M.type==="Date"?new Date(q):M.type==="String"?new Date(q).toISOString():q),A&&(t&&m[t]!==L&&(m[t]=L),F&&(y?.value?m[F.name]=y?.value[F.name]:m[F.name]=F.type==="Date"?new Date(q):F.type==="String"?new Date(q).toISOString():q),m=Uo(m))):I.removeWrite(v)},before:A?Be.put?()=>Be.put(O,L,m):null:Be.patch?()=>Be.patch(O,L,m):Be.put?()=>Be.put(O,L,Uo(this)):null,beforeIntermediate:A?Ne.put?()=>Ne.put(O,L,m):null:Ne.patch?()=>Ne.patch(O,L,m):Ne.put?()=>Ne.put(O,L,Uo(this)):null,commit:(q,C,G)=>{if(G){if(O&&C?.version>(O.lastModified||0)&&(O.lastModified=C.version),this[Lr]=C,C?.value?.[Ee])throw new Error("Can not assign a record to a record, check for circular references");A||(this[Ee]=C?.value??null)}this[Nt]=void 0,this[Vl]=q;let B=C?.value,Z=m;if(this[Gl]=0,C?.version>=q)if(h){let ue=C.localTime,De=C.version;for(;Z&&(ue>q||De>=q&&ue>0);){let re=u.get(ue);if(!re)break;let X=vt(re);if(De=X.version,De>q){if(X.type==="patch"){let Se=X.getValue(i);Z=th(Z,Se)}else if(X.type==="put"||X.type==="delete")return}else if(De===q)return;ue=X.previousLocalTime}}else{if(A)return;Z=th(Z,B)}let le;if(A?le=Z:(this[Ee]=B,le=A?Z:Uo(this,Z)),this[Ee]=le,le?.[Ee])throw new Error("Can not assign a record to a record, check for circular references");let ne;A||(ne=m),i_(L,B,le);let Ue=A?"put":"patch";T(L,le,C,q,0,h,O,O.expiresAt||(E?E+Date.now():0),Ue,!1,ne)}};I.addWrite(v)}async delete(m){if(typeof m=="string")return this.deleteProperty(m);if(this[Vn]){for await(let A of this.search(m))(await Je.getResource(A[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(m);return}return this[Ee]?this._writeDelete(m):!1}_writeDelete(m){let A=yn(this[ye]),D=this[Me];dc(D);let O=this[ye];return A.addWrite({key:D,store:i,resource:this,nodeName:O?.nodeName,before:Be.delete?.bind(this,O,D),beforeIntermediate:Ne.delete?.bind(this,O,D),commit:(I,L,y)=>{let v=L?.value;y&&(O&&L?.version>(O.lastModified||0)&&(O.lastModified=L.version),lh(this,L)),!(L?.version>I)&&(i_(this[Me],v),it.trace("Write delete entry",D,I),h||p?(T(D,null,this[Lr],I,0,h,this[ye],0,"delete"),h||Ph()):i.remove(this[Me]))}}),!0}search(m){let A=this[ye],D=yn(A);if(!m)throw new Error("No query provided");let O=m.conditions;O?O.length===void 0&&(O=O[Symbol.iterator]?Array.from(O):[O]):O=Array.isArray(m)?m:m[Symbol.iterator]?Array.from(m):[],this[Me]&&(O=[{attribute:null,comparator:"prefix",value:this[Me]}].concat(O));let I,L={};function y(X,Se){let xe;switch(Se){case"and":case void 0:if(X.length<1)throw new Error('An "and" operator requires at least one condition');xe=!0;break;case"or":if(X.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+Se)}let Kn=xe&&{},Xs;for(let Ke of X){if(Ke.conditions){Ke.conditions=y(Ke.conditions,Ke.operator);continue}let kt=Ke[0]??Ke.attribute,on=kt==null?x:Fs(S,kt);if(on){if(xe){let Wn=Gn(kt),Vt=Kn[Wn];Vt?(Vt.push(Ke),Xs=!0):Kn[Wn]=[Ke]}(on.type||Jg[Ke.comparator])&&(Ke[1]===void 0?Ke.value=q(Ke.value,on):Ke[1]=q(Ke[1],on))}else if(kt!=null)throw(0,rn.handleHDBError)(new Error,`${kt} is not a defined attribute`,404)}if(m.enforceExecutionOrder)return X;if(Xs)for(let Ke in Kn){let kt=Kn[Ke],on=kt.length;if(on>1)for(let Wn=0;Wn<on;Wn++){let Vt=kt[Wn];if(Vt.comparator==="ge"||Vt.comparator==="greater_than_equal")for(let Zs=0;Zs<on;Zs++){let Fo=kt[Zs];(Fo.comparator==="le"||Fo.comparator==="less_than_equal")&&(Vt.comparator="between",Vt.value=[Vt.value,Fo.value],X.splice(X.indexOf(Fo),1))}if(Vt.comparator==="equals"||!Vt.comparator){for(let Zs=0;Zs<on;Zs++)if(Zs!==Wn){let Fo=kt[Zs];X.splice(X.indexOf(Fo),1)}break}}}return X}a(y,"prepareConditions");function v(X,Se){if(m.enforceExecutionOrder)return X;for(let xe of X)xe.conditions&&(xe.conditions=v(xe.conditions,xe.operator));return X.length>1&&Se!=="or"?(0,DG.sortBy)(X,tE(Je)):X}a(v,"orderConditions");function q(X,Se){return Array.isArray(X)?X.map(xe=>uh(xe,Se)):uh(X,Se)}a(q,"coerceTypedValues");let C=m.operator;(O.length>0||C)&&(O=y(O,C));let G=typeof m.sort=="object"&&m.sort,B;if(G&&C!=="or"){let X=G.attribute;if(I=O.find(Se=>Gn(Se.attribute)===Gn(X)),!I){let Se=Fs(S,X);if(!Se)throw(0,rn.handleHDBError)(new Error,`${Array.isArray(X)?X.join("."):X} is not a defined attribute`,404);if(Se.indexed)I={attribute:X,comparator:"sort"},O.push(I);else if(O.length===0&&!m.allowFullScan)throw(0,rn.handleHDBError)(new Error,`${Array.isArray(X)?X.join("."):X} is not indexed and not combined with any other conditions`,404)}I&&(I.descending=!!G.descending)}O=v(O,C),G&&(I&&O[0]===I?G.next&&(B={dbOrderedAttribute:G.attribute,attribute:G.next.attribute,descending:G.next.descending,next:G.next.next}):(I&&O.splice(O.indexOf(I),1),B=G));let Z=m.select;if(O.length===0&&(O=[{attribute:t,comparator:"greater_than",value:!0}]),m.explain)return{conditions:O,operator:C,postOrdering:B,selectApplied:!!Z};let le=D.useReadTxn(),ne=jg(O,C,Je,le,m,A,(X,Se)=>_O(X,Z,A,le,Se),L),Ue=m.ensureLoaded!==!1;B||(ne=re(ne));let ue=Je.transformEntryForSelect(Z,A,le,L,Ue,!0),De=Je.transformToOrderedSelect(ne,Z,B,le,A,ue);function re(X){return m.offset||m.limit!==void 0?X.slice(m.offset,m.limit!==void 0?(m.offset||0)+m.limit:void 0):X}return a(re,"applyOffset"),B&&(De=re(De)),De.onDone=()=>{De.onDone=null,D.doneReadTxn()},De.selectApplied=!0,De.getColumns=()=>{if(Z){let X=[];for(let Se of Z)Se==="*"?X.push(...S.map(xe=>xe.name)):X.push(Se.name||Se);return X}return S.map(X=>X.name)},De}static transformToOrderedSelect(m,A,D,O,I,L){let y=new Iq;if(D){m=_O(m,A,O,I,null);let v;y.iterate=function(){let C,G=m[Symbol.asyncIterator]?m[Symbol.asyncIterator]():m[Symbol.iterator](),B,Z=D.dbOrderedAttribute,le,ne,Ue=!0;function ue(re){let X=re.next&&ue(re.next),Se=re.descending;return(xe,Kn)=>{let Xs=Mh(xe,re.attribute,O),Ke=Mh(Kn,re.attribute,O),kt=Se?(0,Ho.compareKeys)(Ke,Xs):(0,Ho.compareKeys)(Xs,Ke);return kt===0?X?.(xe,Kn)||0:kt}}a(ue,"createComparator");let De=ue(D);return{async next(){let re;if(C)if(re=C.next(),re.done){if(B)return y.onDone&&y.onDone(),re}else return{value:await L.call(this,re.value)};v=[],le&&v.push(le);do if(re=await G.next(),re.done){if(B=!0,v.length)break;return y.onDone&&y.onDone(),re}else{let X=re.value;if(X?.then&&(X=await X),Z){let Se=Mh(X,Z,O);if(Ue)Ue=!1,ne=Se;else if(Se!==ne){ne=Se,le=X;break}}v.push(X)}while(!0);return D.isGrouped,v.sort(De),C=v[Symbol.iterator](),re=C.next(),re.done?(y.onDone&&y.onDone(),re):{value:await L.call(this,re.value)}},return(){y.onDone&&y.onDone(),G.return()},throw(){y.onDone&&y.onDone(),G.throw()}}};let q=a(C=>{if(typeof A=="object"&&Array.isArray(C.attribute))for(let G=0;G<A.length;G++){let B=A[G],Z;if(B.name===C.attribute[0]){for(Z=B.sort||(B.sort={});Z.next;)Z=Z.next;Z.attribute=C.attribute.slice(1),Z.descending=C.descending}else B===C.attribute[0]&&(A[G]=Z={name:B,sort:{attribute:C.attribute.slice(1),descending:C.descending}})}C.next&&q(C.next)},"applySortingOnSelect");q(D)}else y.iterate=(m[Symbol.asyncIterator]||m[Symbol.iterator]).bind(m),y=y.map(L);return y}static transformEntryForSelect(m,A,D,O,I,L){if(m&&(m===t||m?.length===1&&m[0]===t)){let C=a(G=>(A?.transaction?.stale&&(A.transaction.stale=!1),G?.key??G),"transform");return m===t?C:m.asArray?G=>[C(G)]:G=>({[t]:C(G)})}let y;I&&b&&!m?.every(C=>{let G;return typeof C=="object"?G=C.name:G=C,r[G]||G===t})&&(y=!0);let v,q=a(function(C){let G;if(A?.transaction?.stale&&(A.transaction.stale=!1),C!=null){if(wh=C,G=C.value||C.deref?.(),!G&&(C.key===void 0||C.deref)){if(C=Dh(C.key??C,A,{transaction:D,lazy:m?.length<4},this.isSync,B=>B),C?.then)return C.then(q.bind(this));G=C?.value}if(y&&(C.metadataFlags&(ql|Fl)||C.expiresAt&&C.expiresAt<Date.now())){let B=Lh(C.key??C,C,A);if(B?.then)return B.then(q)}}if(G==null)return L?vo.SKIP:G;if(m&&!(m[0]==="*"&&m.length===1)){let B,Z=a((ne,Ue)=>{let ue;typeof ne=="object"?ue=ne.name:ue=ne;let De=js?.[ue],re;if(De){let X=O?.[ue];if(X)if(X.hasMappings){let xe=De.from?G[De.from]:Gn(C.key);re=X.get(xe),re||(re=[])}else re=X.fromRecord?.(G);else re=De(G,A,C);let Se=a(xe=>{if(xe&&typeof xe=="object"){let Kn=De.definition?.tableClass||Je;v||(v={});let Xs=v[ue]||(v[ue]=Kn.transformEntryForSelect(ue===ne?null:ne.select||(Array.isArray(ne)?ne:null),A,D,X,I));if(Array.isArray(xe)){let Ke=[],kt=Kn.transformToOrderedSelect(xe,ne.select,typeof ne.sort=="object"&&ne.sort,A,D,Xs)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),on=a(Vt=>{for(;!Vt.done;){if(Vt?.then)return Vt.then(on);Ke.push(Vt.value),Vt=kt.next()}Ue(Ke,ue)},"nextValue"),Wn=on(kt.next());Wn&&(B||(B=[]),B.push(Wn));return}else if(xe=Xs.call(this,xe),xe?.then){B||(B=[]),B.push(xe.then(Ke=>Ue(Ke,ue)));return}}Ue(xe,ue)},"handleResolvedValue");re?.then?(B||(B=[]),B.push(re.then(Se))):Se(re);return}else re=G[ue],re&&typeof re=="object"&&ue!==ne&&(re=Je.transformEntryForSelect(ne.select||ne,A,D,null)({value:re}));Ue(re,ue)},"selectAttribute"),le;if(typeof m=="string")Z(m,ne=>{le=ne});else if(Array.isArray(m))if(m.asArray)le=[],m.forEach((ne,Ue)=>{ne==="*"?m[Ue]=G:Z(ne,ue=>le[Ue]=ue)});else{le={};let ne=m.forceNulls;for(let Ue of m)if(Ue==="*")for(let ue in G)le[ue]=G[ue];else Z(Ue,(ue,De)=>{ue===void 0&&ne&&(ue=null),le[De]=ue})}else throw new rn.ClientError("Invalid select"+m);return B?Promise.all(B).then(()=>le):le}return G},"transform");return q}async subscribe(m){if(!u)throw new Error("Can not subscribe to a table without an audit log");h||Et({table:s,database:c,schemaDefined:_,attributes:S,audit:!0}),m||(m={});let A=!m.rawEvents,D=[],O=gG(Je,this[Me]??null,function(L,y,v,q){try{let C=y.getValue?.(i,A);if(!C&&y.type==="patch"&&A){let B=i.getEntry(L);B?.version===y.version?C=B.value:C=y.getValue?.(i,!0,v),y.type="put"}let G={id:L,timestamp:v,value:C,version:y.version,type:y.type,beginTxn:q};D?D.push(G):this.send(G)}catch(C){it.error(C)}},m.startTime||0,m),I=(async()=>{this[Vn]&&(O.includeDescendants=!0,m.onlyChildren&&(O.onlyChildren=!0)),m.supportsTransactions&&(O.supportsTransactions=!0);let L=this[Me],y=m.previousCount;y>1e3&&(y=1e3);let v=m.startTime;if(this[Vn]){if(v){if(y)throw new rn.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:q,value:C}of u.getRange({start:v,exclusiveStart:!0,snapshot:!1})){let G=vt(C);if(G.tableId!==n)continue;let B=G.recordId;if(L==null||wG(L,B)){let Z=G.getValue(i,A,q);if(O.send({id:B,timestamp:q,value:Z,version:G.version,type:G.type}),O.queue?.length>NG&&await O.waitForDrain()===!1)return}O.startTime=q}}else if(y){let q=[];for(let{key:C,value:G}of u.getRange({start:"z",end:!1,reverse:!0}))try{let B=vt(G);if(B.tableId!==n)continue;let Z=B.recordId;if(L==null||wG(L,Z)){let le=B.getValue(i,A,C);if(q.push({id:Z,timestamp:C,value:le,version:B.version,type:B.type}),--y<=0)break}}catch(B){it.error("Error getting history entry",C,B)}for(let C=q.length;C>0;)O.send(q[--C]);q[0]&&(O.startTime=q[0].timestamp)}else if(!m.omitCurrent){for(let{key:q,value:C,version:G,localTime:B}of i.getRange({start:L??!1,end:L==null?void 0:[L,Ho.MAXIMUM_KEY],versions:!0,snapshot:!1}))if(C&&(O.send({id:q,timestamp:B,value:C,version:G,type:"put"}),O.queue?.length>NG&&await O.waitForDrain()===!1))return}}else{y&&!v&&(v=0);let q=this[Lr]?.localTime;if(q===Rm&&(i.cache?.delete(L),this[Lr]=i.getEntry(L),it.trace("re-retrieved record",q,this[Lr]?.localTime),q=this[Lr]?.localTime),it.trace("Subscription from",v,"from",L,q),v<q){let C=[],G=q;do{let B=u.get(G);if(B){m.omitCurrent=!0;let Z=vt(B),le=Z.getValue(i,A,G);A&&(Z.type="put"),C.push({id:L,value:le,timestamp:G,...Z}),G=Z.previousLocalTime}else break;y&&y--}while(G>v&&y!==0);for(let B=C.length;B>0;)O.send(C[--B]);O.startTime=q}!m.omitCurrent&&this.doesExist()&&O.send({id:L,timestamp:q,value:this[Ee],version:this[Vl],type:"put"})}for(let q of D)O.send(q);D=null})();return m.listener&&O.on("data",m.listener),O}doesExist(){return!!(this[Ee]||this[Gl])}publish(m,A){this._writePublish(m,A)}_writePublish(m,A){let D=yn(this[ye]),O=this[Me]||null;dc(O);let I=this[ye];D.addWrite({key:O,store:i,entry:this[Lr],nodeName:I?.nodeName,validate:()=>{I?.source||(D.checkOverloaded(),this.validate(m))},before:Be.publish?.bind(this,I,O,m),beforeIntermediate:Ne.publish?.bind(this,I,O,m),commit:(L,y,v)=>{y===void 0&&p&&!h&&Ph(),T(O,y?.value??null,y,y?.version||L,0,!0,I,y?.expiresAt,"message",!1,m)}})}validate(m,A){let D,O=a((I,L,y)=>{if(L.type&&I!=null)if(A&&I.__op__&&(I=I.value),L.properties){typeof I!="object"&&(D||(D=[])).push(`Value ${$n(I)} in property ${y} must be an object${L.type?" ("+L.type+")":""}`);let v=L.properties;for(let q=0,C=v.length;q<C;q++){let G=v[q],B=O(I[G.name],G,y+"."+G.name);B&&(I[G.name]=B)}if(L.sealed&&I!=null&&typeof I=="object")for(let q in I)v.find(C=>C.name===q)||(D||(D=[])).push(`Property ${q} is not allowed within object in property ${y}`)}else switch(L.type){case"Int":(typeof I!="number"||I>>0!==I)&&(D||(D=[])).push(`Value ${$n(I)} in property ${y} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof I!="number"||!(Math.floor(I)===I&&Math.abs(I)<=9007199254740992))&&(D||(D=[])).push(`Value ${$n(I)} in property ${y} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof I!="number"&&(D||(D=[])).push(`Value ${$n(I)} in property ${y} must be a number`);break;case"ID":typeof I=="string"||I?.length>0&&I.every?.(v=>typeof v=="string")||(D||(D=[])).push(`Value ${$n(I)} in property ${y} must be a string, or an array of strings`);break;case"String":typeof I!="string"&&(D||(D=[])).push(`Value ${$n(I)} in property ${y} must be a string`);break;case"Boolean":typeof I!="boolean"&&(D||(D=[])).push(`Value ${$n(I)} in property ${y} must be a boolean`);break;case"Date":if(!(I instanceof Date)){if(typeof I=="string"||typeof I=="number")return new Date(I);(D||(D=[])).push(`Value ${$n(I)} in property ${y} must be a Date`)}break;case"BigInt":if(typeof I!="bigint"){if(typeof I=="string"||typeof I=="number")return BigInt(I);(D||(D=[])).push(`Value ${$n(I)} in property ${y} must be a bigint`)}break;case"Bytes":I instanceof Uint8Array||(D||(D=[])).push(`Value ${$n(I)} in property ${y} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(I)){if(L.elements)for(let v=0,q=I.length;v<q;v++){let C=I[v],G=O(C,L.elements,y+"[*]");G&&(I[v]=G)}}else(D||(D=[])).push(`Value ${$n(I)} in property ${y} must be a Buffer or Uint8Array`);break}L.nullable===!1&&I==null&&(D||(D=[])).push(`Property ${y} is required (and not does not allow null values)`)},"validateValue");for(let I=0,L=S.length;I<L;I++){let y=S[I];if(!y.relationship&&(!A||y.name in m)){let v=O(m[y.name],y,y.name);v&&(m[y.name]=v)}}if(d)for(let I in m)S.find(L=>L.name===I)||(D||(D=[])).push(`Property ${I} is not allowed`);if(D)throw new rn.ClientError(D.join(". "))}getUpdatedTime(){return this[Vl]}wasLoadedFromSource(){return b?!!this[$A]:void 0}static async addAttributes(m){let A=S.slice(0);for(let D of m){if(!D.name)throw new rn.ClientError("Attribute name is required");if(D.name.match(/[`/]/))throw new rn.ClientError("Attribute names cannot include backticks or forward slashes");A.push(D)}return Et({table:s,database:c,schemaDefined:_,attributes:A}),Je.indexingOperation}static async removeAttributes(m){let A=S.filter(D=>!m.includes(D.name));return Et({table:s,database:c,schemaDefined:_,attributes:A}),Je.indexingOperation}static getRecordCount(m){let A=i.getStats().entryCount,D=1e3/2,O=performance.now(),I=Math.floor(A/2),L=m?.exactCount,y=0,v=0,q;for(let{value:C}of i.getRange({start:!0,lazy:!0}))if(C!=null&&y++,v++,!L&&v<I&&performance.now()-O>D){q=v;break}if(q){let C=y;y=0;for(let{value:re}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:q}))re!=null&&y++;let G=q*2,B=(y+C)/G,Z=Math.pow((y-C+1)/q/2,2)+B*(1-B)/G,le=Math.max(Math.sqrt(Z)*A,1),ne=Math.round(B*A),Ue=Math.max(ne-1.96*le,y+C),ue=Math.min(ne+1.96*le,A),De=Math.pow(10,Math.round(Math.log10(le)));return De>ne&&(De=De/10),y=Math.round(ne/De)*De,{recordCount:y,estimatedRange:[Math.round(Ue),Math.round(ue)]}}return{recordCount:y}}static updatedAttributes(){js=this.propertyResolvers={$id:(m,A,D)=>({value:D.key}),$updatedtime:(m,A,D)=>D.version,$record:(m,A,D)=>D?{value:m}:m};for(let m of this.attributes){m.resolve=null;let A=m.relationship;if(A)if(m.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),lO=!0,A.to)m.elements?.definition?(js[m.name]=m.resolve=(D,O,I)=>{let L=D[A.from?A.from:t],y=m.elements.definition.tableClass;return I?Ga({attribute:A.to,value:L},yn(O).getReadTxn(),!1,y,!1).asArray:y.search([{attribute:A.to,value:L}],O).asArray},m.set=()=>{throw new Error("Setting a one-to-many relationship property is not supported")},m.resolve.definition=m.elements.definition,A.from&&(m.resolve.from=A.from)):console.error(`The one-to-many/many-to-many relationship property "${m.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(A.from){let D=m.definition||m.elements?.definition;D?(js[m.name]=m.resolve=(O,I,L)=>{let y=O[A.from];if(y!==void 0){if(m.elements){let v,q=y.map(C=>{let G=L?D.tableClass.primaryStore.getEntry(C,{transaction:yn(I).getReadTxn()}):D.tableClass.get(C,I);return G?.then&&(v=!0),G});return A.filterMissing?v?Promise.all(q).then(C=>C.filter(CG)):q.filter(CG):v?Promise.all(q):q}return L?D.tableClass.primaryStore.getEntry(y,{transaction:yn(I).getReadTxn()}):D.tableClass.get(y,I)}},m.set=(O,I)=>{if(Array.isArray(I)){let L=I.map(y=>y[Me]||y[D.tableClass.primaryKey]);O[A.from]=L}else{let L=I[Me]||I[D.tableClass.primaryKey];O[A.from]=L}},m.resolve.definition=m.definition||m.elements?.definition,m.resolve.from=A.from):console.error(`The relationship property "${m.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${m.name}" in table "${s}" must use either "from" or "to" arguments`)}oh(this,this)}static async deleteHistory(m=0){let A;for(let{key:D,value:O}of u.getRange({start:0,end:m}))await kl(),vt(O).tableId===n&&(A=u.remove(D));await A}static async*getHistory(m=0,A=1/0){for(let{key:D,value:O}of u.getRange({start:m,end:A})){await kl();let I=vt(O);I.tableId===n&&(yield{id:I.recordId,localTime:D,version:I.version,type:I.type,value:I.getValue(i,!0,D),user:I.user})}}static async getHistoryOfRecord(m){let A=[];if(m==null)throw new Error("An id is required");let D=i.getEntry(m);if(!D)return A;let O=D.localTime;if(!O)throw new Error("The entry does not have a local audit time");let I=0;do{await kl();let L=u.get(O);if(L){let y=vt(L);A.push({id:y.recordId,localTime:O,version:y.version,type:y.type,value:y.getValue(i,!0,O),user:y.user}),O=y.previousLocalTime}else break}while(I<1e3&&O);return A.reverse()}static cleanup(){J?.remove()}}Je.updatedAttributes();let Dq=Je.prototype;return Dq[Jie]=!0,E&&Je.setTTLExpiration(E/1e3),Q&&Lq(),Je;function i_(K,m,A){let D;for(let O in r){let I=r[O],L=I.isIndexing,y=A?.[O],v=m?.[O];if(y===v&&!L)continue;D=!0;let q=I.indexNulls,C=(0,$l.getIndexedValues)(y,q),G=(0,$l.getIndexedValues)(v,q);if(G?.length>0){let B=new Set(G);if(C=C?C.filter(Z=>{if(B.has(Z))B.delete(Z);else return!0}):[],G=Array.from(B),(G.length>0||C.length>0)&&OG){let Z=G.concat(C).map(le=>({key:le,value:K}));I.prefetch(Z,IG)}for(let Z=0,le=G.length;Z<le;Z++)I.remove(G[Z],K)}else C?.length>0&&OG&&I.prefetch(C.map(B=>({key:B,value:K})),IG);if(C)for(let B=0,Z=C.length;B<Z;B++)I.put(C[B],K)}return D}a(i_,"updateIndices");function dc(K){switch(typeof K){case"number":return!0;case"string":if(K.length<659)return!0;if(K.length>yG)throw new Error("Primary key size is too large: "+K.length);break;case"object":if(K===null)return!0;break;case"bigint":if(K<2n**64n&&K>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof K)}if((0,Ho.writeKey)(K,Xie,0)>yG)throw new Error("Primary key size is too large: "+K.length);return!0}a(dc,"checkValidId");function Dh(K,m,A,D,O){let I=a(()=>{if(m?.transaction?.stale&&(m.transaction.stale=!1),A.transaction?.isDone)return O(null,K);let L=i.getEntry(K,A);return L&&m&&(L?.version>(m.lastModified||0)&&(m.lastModified=L.version),L?.localTime&&!m.lastRefreshed&&(m.lastRefreshed=L.localTime)),O(L,K)},"whenPrefetched");return D?I():ce>0?(ce--,I()):new Promise((L,y)=>{ce===0?(ce--,i.prefetch([K],()=>{v(),q()})):(j.push(K),ae.push(q),j.length>Cq&&(ce--,v()));function v(){if(j.length>0){let C=ae;i.prefetch(j,()=>{ce===-1?v():ce++;for(let G of C)G()}),j=[],ae=[],de>2&&de--}else ce=de,de<wq&&de++}a(v,"prefetch");function q(){try{L(I())}catch(C){y(C)}}a(q,"load")})}a(Dh,"loadLocalRecord");function o_(K){if(!K?.role)return;let m=K.role.permission;if(m.super_user)return Zie;let A=m[c],D,O=A?.tables;if(O)return O[s];if(c==="data"&&(D=m[s])&&!D.tables)return D}a(o_,"getTablePermissions");function Lh(K,m,A,D){if(b){let O;if(A.noCache?O=!0:(m?(!m.value||m.metadataFlags&(ql|Fl)||m.expiresAt&&m.expiresAt<Date.now())&&(O=!0):O=!0,Wr(!O,"cache-hit",s)),O){let I=dO(K,m,A).then(L=>(L?.value?.[Ee]&&it.error("Can not assign a record with a record property"),A&&(L?.version>(A.lastModified||0)&&(A.lastModified=L.version),A.lastRefreshed=Date.now()),L));if(A?.onlyIfCached||m?.value&&D?.allowStaleWhileRevalidate?.(m,K)){if(I.catch(L=>it.warn(L)),A?.onlyIfCached&&!D.doesExist())throw new rn.ServerError("Entry is not cached",504);return}else return I}}}a(Lh,"ensureLoadedFromSource");function yn(K){let m=K?.transaction;if(m){if(!m.lmdbDb)return m.lmdbDb=i,m;do{if(m.lmdbDb?.path===i.path)return m;let A=m.next;if(!A)return m=m.next=new no,m.lmdbDb=i,m;m=A}while(!0)}else return new Sd}a(yn,"txnForContext");function Mh(K,m,A){if(!K)return;wh=K;let D=K.value||K.deref?.()||(wh=i.getEntry(K.key))?.value;if(typeof m=="object"){let I=js,L=D;for(let y=0,v=m.length;y<v;y++){let q=m[y],C=I?.[q];L=C&&L?C(L,A,!0)?.value:L?.[q],I=C?.definition?.tableClass?.propertyResolvers}return L}let O=js[m];return O?O(D,A):D[m]}a(Mh,"getAttributeValue");function _O(K,m,A,D,O){let I=O?.length,L={transaction:D,lazy:I>0||typeof m=="string"||m?.length<4,alwaysPrefetch:!0},y;function v(q,C){let G=q?.value;if(!G)return vo.SKIP;for(let B=0;B<I;B++)if(!y?.includes(B)&&!O[B](G,q))return vo.SKIP;return C!==void 0&&(q.key=C),q}if(a(v,"processEntry"),I>0||!K.hasEntries){let q=K.map(C=>{if(y=null,typeof C=="object"&&C?.key!==void 0)return I>0?v(C):C;if(C==null)return vo.SKIP;for(let G=0;G<I;G++){let Z=O[G].idFilter;if(Z){if(!Z(C))return vo.SKIP;y||(y=[]),y.push(G)}}return Dh(C,A,L,!1,v)});return Array.isArray(K)&&(q=q.filter(C=>C!==vo.SKIP)),q.hasEntries=!0,q}return K}a(_O,"transformToEntries");async function dO(K,m,A){let D=m?.metadataFlags,O=m?.version,I,L;if(!i.attemptLock(K,O,()=>{clearTimeout(L);let C=i.getEntry(K);!C||!C.value||C.metadataFlags&(ql|Fl)?I(dO(K,i.getEntry(K),A)):I(C)}))return new Promise(C=>{I=C,L=setTimeout(()=>{i.unlock(K,O)},zie)});let y=m?.value,v={requestContext:A,replacingRecord:y,replacingVersion:O,noCacheStore:!1,source:null,resourceCache:A?.resourceCache},q=A?.responseHeaders;return new Promise((C,G)=>{let B;KA(rt(v,async Z=>{let le=performance.now(),ne,Ue,ue;try{for(let Se of Je.sources)if(Se.get&&(!Se.get.reliesOnPrototype||Se.prototype.get)&&(v.source=Se,ne=await Se.get(K,v),ne))break;ue=D&ql;let re=v.lastModified||ue&&O;Ue=ue||re>O||!y,re||(re=(0,$l.getNextMonotonicTime)());let X=performance.now()-le;if(Sr(X,"cache-resolution",s),q&&Tg(q,"Server-Timing",`cache-resolve;dur=${X.toFixed(2)}`,!0),Z.timestamp=re,E&&!v.expiresAt&&(v.expiresAt=Date.now()+E),ne){if(typeof ne!="object")throw new Error("Only objects can be cached and stored in tables");typeof ne.toJSON=="function"&&(ne=ne.toJSON()),t&&ne[t]!==K&&(ne[t]=K)}B=!0,C({version:re,value:ne})}catch(re){re.message+=` while resolving record ${K} for ${s}`,y&&((re.code==="ECONNRESET"||re.code==="ECONNREFUSED"||re.code==="EAI_AGAIN")&&!A?.mustRevalidate||A?.staleIfError&&(re.statusCode===500||re.statusCode===502||re.statusCode===503||re.statusCode===504))?(C({version:O,value:y}),it.trace(re.message,"(returned stale record)")):G(re),v.transaction.abort();return}if(A?.noCacheStore||v.noCacheStore){v.transaction.abort();return}yn(v).addWrite({key:K,store:i,entry:m,nodeName:"source",commit:(re,X)=>{if(X?.version!==O)return;let Se=i_(K,y,ne);ne?(Ne.put?.(v,K,ne),T(K,ne,X,re,0,h&&Ue||null,v,v.expiresAt,"put",!!ue)):(Ne.delete?.(v,K),h||p?T(K,null,X,re,0,h&&Ue||null,v,0,"delete",!!ue):i.remove(K,O))}})}),()=>{i.unlock(K,O)},Z=>{i.unlock(K,O),B&&it.error("Error committing cache update",Z)})})}a(dO,"getFromSource");function Ph(){if(He!==n_&&(n_=He,(0,Bo.getWorkerIndex)()===(0,Bo.getWorkerCount)()-1)){if(s_&&clearTimeout(s_),!He)return;let K=new Date;K.setMonth(0),K.setDate(1),K.setHours(0),K.setMinutes(0),K.setSeconds(0);let m=Math.ceil((Date.now()-K.getTime())/He)*He+K.getTime(),A=a(D=>{it.trace(`Scheduled next cleanup scan at ${new Date(D)}ms`),s_=setTimeout(()=>U=U.then(async()=>{if(A(Math.max(D+He,Date.now())),i.rootStore.status!=="open"){clearTimeout(s_);return}let O=50,I=new Array(O),L=0;it.trace(`Starting cleanup scan for ${s}`);try{let y=0;for(let{key:v,value:q,version:C,expiresAt:G}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let B;q===null&&!h&&C+Qie<Date.now()?B=i.remove(v,C):G&&G+f<Date.now()&&(B=Je.evict(v,q,C),y++),B&&(await I[L],I[L]=B.catch(Z=>{it.error("Cleanup error",Z)}),++L>=O&&(L=0)),await kl()}it.trace(`Finished cleanup scan for ${s}, evicted ${y} entries`)}catch(y){it.trace(`Error in cleanup scan for ${s}:`,y)}}),Math.min(D-Date.now(),2147483647)).unref()},"startNextTimer");A(m)}}a(Ph,"scheduleCleanup");function fO(){J=u?.addDeleteRemovalCallback(n,K=>{let m=i.getEntry(K);m?.value===null&&i.remove(K,m.version)})}a(fO,"addDeleteRemoval");function Lq(){(0,Bo.getWorkerIndex)()===0&&setInterval(async()=>{if(!Ch){Ch=!0;try{let K=Q.name,m=r[K];if(!m)throw new Error(`expiresAt attribute ${Q} must be indexed`);for(let A of m.getRange({start:!0,values:!1,end:Date.now(),snapshot:!1})){for(let D of m.getValues(A)){let O=i.getEntry(D);O?.value?O.value[K]<Date.now()&&Je.evict(D,O.value,O.version):i.ifVersion(D,O?.version,()=>m.remove(A,D))}await kl()}}catch(K){it.error("Error in evicting old records",K)}finally{Ch=!1}}},Wie).unref()}a(Lq,"runRecordExpirationEviction")}function YA(e,t){let r=e.attr_object||(e.attr_object={}),n=r[t];if(n)return n;n=r[t]=Object.create(null);for(let s of e)n[s.attribute_name]=s[t];return n}function IG(){}function eoe(e){LG=e}function uh(e,t){let r=t?.type;if(e===null)return e;if(e===""&&r&&r!=="String"&&r!=="Any")return null;switch(r){case"Int":case"Long":return e==="null"?null:parseInt(e);case"Float":return e==="null"?null:parseFloat(e);case"BigInt":return e==="null"?null:BigInt(e);case"Boolean":return e==="true"?!0:e==="false"?!1:e;case"Date":return isNaN(e)?e==="null"?null:(toe.test(e)||(e+="Z"),new Date(e)):new Date(+e);case void 0:case"Any":return(0,_h.autoCast)(e);default:return e}}function wG(e,t){if(e==null)return!0;if(!Array.isArray(t))return e===t;if(Array.isArray(e)){let r=e.length;if(e[r-1]===null&&r--,t.length>=r){for(let n=0;n<r;n++)if(t[n]!==e[n])return!1;return!0}return!1}else if(t[0]===e)return!0}function KA(e,t,r){return e?.then?e.then(t,r):t(e)}function lh(e,t){e[Lr]=t,e[Ee]=t?.value??null,e[Vl]=t?.version}function CG(e){return e!=null}function $n(e){try{return JSON.stringify(e)}catch{return e}}var Yn,vo,$l,DG,Wl,rn,Yl,Kl,it,Ho,Bo,_h,Kie,LG,Wie,Qie,OG,zie,Vl,Jie,Lr,Gl,bG,jie,$A,ac,ql,Fl,Xie,yG,NG,Zie,ATe,toe,kl,pE=Re(()=>{Yn=H(P()),vo=require("lmdb"),$l=H(vr()),DG=require("lodash");cn();_S();Wl=H(ee());AG();rn=H(se()),Yl=H(Ns()),Kl=H(Pn());Ae();nE();it=H($());Rd();so();Ho=require("ordered-binary"),Bo=H(We());ni();_h=H(z());Uc();Ds();ZE();el();Kie=new Uint8Array(9);Kie[8]=192;Wie=6e4,Qie=864e5;Wl.initSync();OG=Wl.get(Yn.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),zie=1e4,Vl=Symbol.for("version"),Jie=Symbol.for("incremental-update"),Lr=Symbol("entry"),Gl=Symbol("is-saving"),bG=1,jie=2,$A=Symbol("loaded-from-source"),ac={isNotification:!0,ensureLoaded:!1},ql=1,Fl=8,Xie=Buffer.allocUnsafeSlow(8192),yG=1978,NG=100,Zie={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},ATe=(0,_h.convertToMS)(Wl.get(Yn.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(dh,"makeTable");a(YA,"attributesAsObject");a(IG,"noop");a(eoe,"setServerUtilities");toe=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(uh,"coerceType");a(wG,"isDescendantId");kl=a(()=>new Promise(setImmediate),"rest");a(KA,"when");a(lh,"updateResource");a(CG,"exists");a($n,"stringify")});var ke={};Fe(ke,{database:()=>ua,databases:()=>ct,dropDatabase:()=>mS,dropTableMeta:()=>ooe,getDatabases:()=>mr,getDefaultCompression:()=>yf,getTables:()=>roe,onUpdatedTable:()=>rA,readMetaDb:()=>Ql,resetDatabases:()=>Ku,table:()=>Et,tables:()=>Br});function roe(){return ph||mr(),Br||{}}function mr(){if(ph)return ct;ph=!0,lc=new Map;let e=(0,St.getHdbBasePath)()&&(0,ot.join)((0,St.getHdbBasePath)(),Ut.DATABASES_DIR_NAME),t=(0,St.get)(Ut.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,St.get)(Ut.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,nn.existsSync)(e)?e:(0,ot.join)((0,St.getHdbBasePath)(),Ut.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,nn.existsSync)(e))for(let r of(0,nn.readdirSync)(e,{withFileTypes:!0})){let n=(0,ot.basename)(r.name,".mdb");r.isFile()&&(0,ot.extname)(r.name).toLowerCase()===".mdb"&&!t[n]?.path&&Ql((0,ot.join)(e,r.name),null,n)}if((0,nn.existsSync)((0,uc.getBaseSchemaPath)())){for(let r of(0,nn.readdirSync)((0,uc.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,ot.join)((0,uc.getBaseSchemaPath)(),r.name),s=(0,ot.join)((0,uc.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,nn.readdirSync)(n,{withFileTypes:!0}))if(i.isFile()&&(0,ot.extname)(i.name).toLowerCase()===".mdb"){let o=(0,ot.join)(s,i.name);Ql((0,ot.join)(n,i.name),(0,ot.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let n=t[r],s=n.path;if((0,nn.existsSync)(s))for(let o of(0,nn.readdirSync)(s,{withFileTypes:!0}))o.isFile()&&(0,ot.extname)(o.name).toLowerCase()===".mdb"&&Ql((0,ot.join)(s,o.name),(0,ot.basename)(o.name,".mdb"),r);let i=n.tables;if(i)for(let o in i){let c=i[o],u=(0,ot.join)(c.path,(0,ot.basename)(o+".mdb"));(0,nn.existsSync)(u)&&Ql(u,o,r,null,!0)}}for(let r in ct){let n=lc.get(r);if(n){let s=ct[r];r.includes("delete")&&bn.trace(`defined tables ${Array.from(n.keys())}`);for(let i in s)n.has(i)||(bn.trace(`delete table class ${i}`),delete s[i])}else if(delete ct[r],r==="data"){for(let s in Br)delete Br[s];delete Br[Sh]}}return lc=null,ct}}function Ku(){ph=!1;for(let[,e]of Bi)e.needsDeletion=!0;mr();for(let[e,t]of Bi)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),Bi.delete(e));return ct}function Ql(e,t,r=zA,n,s){let i=new WA.default(e,!1);try{let o=Bi.get(e);o?o.needsDeletion=!1:(o=(0,Eh.open)(i),Bi.set(e,o));let c=new xo.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(fh.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(n?(0,nn.existsSync)(n)&&(i.path=n,_=(0,Eh.open)(i),_.isLegacy=!0):_=XE(o));let l=vG(r),d=l[Sh],E=new Map;for(let{key:f,value:h}of u.getRange({start:!1})){let[p,S]=f.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 T=E.get(p);T||E.set(p,T={attributes:[]}),(S==null||h.is_hash_attribute)&&(T.primary=h),S!=null&&T.attributes.push(h),Object.defineProperty(h,"key",{value:f,configurable:!0})}for(let[f,h]of E){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){bn.fatal(`Unable to find a primary key attribute on table ${f}, with attributes: ${JSON.stringify(p)}`);continue}}let T=l[f],R={},N=[],b,x,U=typeof S.audit=="boolean"?S.audit:(0,St.get)(Ut.CONFIG_PARAMS.LOGGING_AUDITLOG),F=S.trackDeletes,M=S.expiration,Q=S.eviction,J=S.sealed;if(T)R=T.indices,N=T.attributes,T.schemaVersion++;else{b=S.tableId,b?b>=(u.get(cc)||0)&&u.putSync(cc,b+1):(S.tableId=b=u.get(cc),b||(b=1),u.putSync(cc,b+1),u.putSync(S.key,S));let j=new xo.default(!S.is_hash_attribute,S.is_hash_attribute);if(j.compression=S.compression,j.compression){let ae=(0,St.get)(Ut.CONFIG_PARAMS.STORAGE_COMPRESSION_THRESHOLD)||UG;j.compression.threshold=ae}x=y_(o.openDB(S.key,j)),x.rootStore=o,x.tableId=b}for(let j of p){j.attribute=j.name;try{if(!j.is_hash_attribute&&(j.indexed||j.attribute&&!j.name)){if(!R[j.name]){let ce=new xo.default(!j.is_hash_attribute,j.is_hash_attribute);R[j.name]=o.openDB(j.key,ce),R[j.name].indexNulls=j.indexNulls}let ae=N.find(ce=>ce.name===j.name);ae?N.splice(N.indexOf(ae),1,j):N.push(j)}}catch(ae){bn.error("Error trying to update attribute",j,N,R,ae)}}if(!T){T=BG(l,f,dh({primaryStore:x,auditStore:_,audit:U,sealed:J,expirationMS:M&&M*1e3,evictionMS:Q&&Q*1e3,trackDeletes:F,tableName:f,tableId:b,primaryKey:S.name,databasePath:s?r+"/"+f:r,databaseName:r,indices:R,attributes:p,schemaDefined:S.schemaDefined,dbisDB:u})),T.schemaVersion=1;for(let j of JA)j(T)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function vG(e){let t=ct[e];if(t||(e==="data"?t=ct[e]=Br:e==="system"?Object.defineProperty(ct,"system",{value:t=Object.create(null),configurable:!0}):t=ct[e]=Object.create(null)),lc&&!lc.has(e)){let r=new Set;t[Sh]=r,lc.set(e,r)}return t}function BG(e,t,r){return e[t]=r,r}function ua({database:e,table:t}){e||(e=zA),mr();let r=vG(e),n=(0,ot.join)((0,St.getHdbBasePath)(),Ut.DATABASES_DIR_NAME),s=(0,St.get)(Ut.CONFIG_PARAMS.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(s.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&s[e]?.tables?.[t]?.path;n=i||s[e]?.path||process.env.STORAGE_PATH||(0,St.get)(Ut.CONFIG_PARAMS.STORAGE_PATH)||((0,nn.existsSync)(n)?n:(0,ot.join)((0,St.getHdbBasePath)(),Ut.LEGACY_DATABASES_DIR_NAME));let o=(0,ot.join)(n,(i?t:e)+".mdb"),c=Bi.get(o);if(!c){let u=new WA.default(o,!1);c=(0,Eh.open)(u),Bi.set(o,c)}return c}async function mS(e){if(!ct[e])throw new Error("Schema does not exist");let t=ct[e],r;for(let n in t)r=t[n].primaryStore.rootStore,Bi.delete(r.path),r.status==="open"&&(await r.close(),await zl.remove(r.path));if(r||(r=ua({database:e,table:null}),r.status==="open"&&(await r.close(),await zl.remove(r.path))),e==="data"){for(let n in Br)delete Br[n];delete Br[Sh]}delete ct[e]}function Et({table:e,database:t,expiration:r,eviction:n,scanInterval:s,attributes:i,audit:o,sealed:c,trackDeletes:u,schemaDefined:_,origin:l}){t||(t=zA);let d=ua({database:t,table:e}),E=ct[t],f=E?.[e];if(d.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let h,p,S,T;_==null&&(_=!0);let R=new xo.default(!1);for(let M of i)M.attribute&&!M.name?(M.name=M.attribute,M.indexed=!0):M.attribute=M.name,M.expiresAt&&(M.indexed=!0);let N,b;if(f){if(h=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 M=d.auditStore;M||(M=XE(d)),p=i.find(ae=>ae.isPrimaryKey)||{},h=p.name,p.is_hash_attribute=!0,p.schemaDefined=_,p.compression=yf(),u&&(p.trackDeletes=!0),o=p.audit=typeof o=="boolean"?o:(0,St.get)(Ut.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(p.expiration=r),n&&(p.eviction=n),typeof c=="boolean"&&(p.sealed=c),l&&(p.origins?p.origins.includes(l)||p.origins.push(l):p.origins=[l]),bn.trace(`${e} table loading, opening primary store`);let Q=new xo.default(!1,!0);Q.compression=p.compression;let J=e+"/",j=y_(d.openDB(J,Q));j.rootStore=d,T=d.dbisDb=d.openDB(fh.INTERNAL_DBIS_NAME,R),j.tableId=T.get(cc),j.tableId||(j.tableId=1),T.putSync(cc,j.tableId+1),p.tableId=j.tableId,f=BG(E,e,dh({primaryStore:j,auditStore:M,audit:o,sealed:c,trackDeletes:u,expirationMS:r&&r*1e3,evictionMS:n&&n*1e3,primaryKey:h,tableName:e,tableId:j.tableId,databasePath:t,databaseName:t,indices:{},attributes:i,schemaDefined:_,dbisDB:T})),f.schemaVersion=1,N=!0,F(),T.put(J,p)}S=f.indices,T=T||(d.dbisDb=d.openDB(fh.INTERNAL_DBIS_NAME,R)),f.dbisDB=T;let x=[];for(let{key:M,value:Q}of T.getRange({start:!0})){let[J,j]=M.toString().split("/");if(j===""&&(j=Q.name),j){if(J!==e)continue}else j=J;if(!i.find(ce=>ce.name===j)?.indexed&&Q.indexed&&!Q.isPrimaryKey){F(),N=!0,T.remove(M);let ce=f.indices[J];ce&&x.push(ce)}}let U=[];try{for(let M of i||[]){if(M.relationship)continue;let Q=e+"/"+(M.name||"");Object.defineProperty(M,"key",{value:Q,configurable:!0});let J=T.get(Q);if(M.isPrimaryKey){if(J=J||T.get(Q=e+"/")||{},o!==f.audit||c!==c||(+r||void 0)!==(+J.expiration||void 0)||(+n||void 0)!==(+J.eviction||void 0)){let ae=Object.assign({},J);typeof o=="boolean"&&(o&&f.enableAuditing(o),ae.audit=o),r&&(ae.expiration=+r),n&&(ae.eviction=+n),c!==void 0&&(ae.sealed=c),N=!0,F(),T.put(Q,ae)}continue}J?.attribute&&!J.name&&(J.indexed=!0);let j=!J||J.type!==M.type||J.indexed!==M.indexed||J.nullable!==M.nullable||JSON.stringify(J.attributes)!==JSON.stringify(M.attributes)||JSON.stringify(J.elements)!==JSON.stringify(M.elements);if(M.indexed){let ae=new xo.default(!0,!1),ce=d.openDB(Q,ae);(j||J.indexingPID&&J.indexingPID!==process.pid||J.restartNumber<Jl.workerData?.restartNumber)&&(N=!0,F(),J=T.get(Q),(j||J.indexingPID&&J.indexingPID!==process.pid||J.restartNumber<Jl.workerData?.restartNumber)&&(N=!0,M.indexNulls===void 0&&(M.indexNulls=!0),f.primaryStore.getStats().entryCount>0&&(M.lastIndexedKey=J?.lastIndexedKey||!1,M.indexingPID=process.pid,ce.isIndexing=!0,Object.defineProperty(M,"dbi",{value:ce}),U.push(M))),T.put(Q,M)),J?.indexNulls&&M.indexNulls===void 0&&(M.indexNulls=!0),ce.indexNulls=M.indexNulls,S[M.name]=ce}else j&&(N=!0,F(),T.put(Q,M))}}finally{b&&b()}if(N&&(f.schemaVersion++,f.updatedAttributes()),bn.trace(`${e} table loading, running index`),U.length>0||x.length>0?f.indexingOperation=ioe(f,U,x):N&&hh.signalSchemaChange(new mh.SchemaEventMsg(process.pid,"schema-change",f.databaseName,f.tableName)),f.origin=l,N)for(let M of JA)M(f,l!=="cluster");return(r||n||s)&&f.setTTLExpiration({expiration:r,eviction:n,scanInterval:s}),bn.trace(`${e} table loaded`),f;function F(){b||d.transactionSync(()=>({then(M){b=M}}))}a(F,"startTxn")}async function ioe(e,t,r){try{let n=e.schemaVersion;await hh.signalSchemaChange(new mh.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let u of r)s=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++,s=e.primaryStore.ifVersion(_,d,()=>{for(let E=0;E<c;E++){let f=t[E],h=f.name,p=(0,MG.getIndexedValues)(l[h]);if(p)for(let S=0,T=p.length;S<T;S++)f.dbi.put(p[S],_)}}),s.then(()=>u--,E=>{u--,bn.error(E)}),Jl.workerData&&Jl.workerData.restartNumber!==PG.restartNumber&&(i=!0),++o%100===0||i){for(let E of t)E.lastIndexedKey=_,e.dbisDB.put(E.key,E);if(i)return}u>noe?await s:u>soe&&await new Promise(E=>setImmediate(E))}for(let _ of t)delete _.lastIndexedKey,delete _.indexingPID,_.dbi.isIndexing=!1,s=e.dbisDB.put(_.key,_)}await s,await hh.signalSchemaChange(new mh.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(n){bn.error("Error in indexing",n)}}function ooe({table:e,database:t}){let r=ua({database:t,table:e}),n=[],s=r.dbisDb;for(let i of s.getKeys({start:e+"/",end:e+"0"}))n.push(s.remove(i));return Promise.all(n)}function rA(e){JA.push(e)}function yf(){let e=(0,St.get)(Ut.CONFIG_PARAMS.STORAGE_COMPRESSION),t=(0,St.get)(Ut.CONFIG_PARAMS.STORAGE_COMPRESSION_DICTIONARY),r=(0,St.get)(Ut.CONFIG_PARAMS.STORAGE_COMPRESSION_THRESHOLD)||UG,n={startingOffset:32};return t&&(n.dictionary=zl.readFileSync(t)),r&&(n.threshold=r),e&&n}var St,fh,Eh,ot,nn,uc,xo,WA,Ut,zl,QA,MG,hh,mh,Jl,bn,PG,zA,Sh,UG,Br,ct,cc,JA,ph,Bi,lc,noe,soe,Ae=Re(()=>{St=H(ee()),fh=H(ft()),Eh=require("lmdb"),ot=require("path"),nn=require("fs"),uc=H(je());pE();xo=H(vc()),WA=H(Bc()),Ut=H(P()),zl=H(require("fs-extra")),QA=require("../index"),MG=H(vr()),hh=H(Ns()),mh=H(Pn()),Jl=require("worker_threads"),bn=H($()),PG=H(We());ni();Uc();zA="data",Sh=Symbol("defined-tables"),UG=((0,St.get)(Ut.CONFIG_PARAMS.STORAGE_PAGESIZE)||4096)-60;(0,St.initSync)();Br=Object.create(null),ct=Object.create(null);(0,QA._assignPackageExport)("databases",ct);(0,QA._assignPackageExport)("tables",Br);cc=Symbol.for("next-table-id"),JA=[],Bi=new Map;a(roe,"getTables");a(mr,"getDatabases");a(Ku,"resetDatabases");a(Ql,"readMetaDb");a(vG,"ensureDB");a(BG,"setTable");a(ua,"database");a(mS,"dropDatabase");a(Et,"table");noe=1e3,soe=10;a(ioe,"runIndexing");a(ooe,"dropTableMeta");a(rA,"onUpdatedTable");a(yf,"getDefaultCompression")});var z=g((LTe,JG)=>{"use strict";var Hi=require("path"),FG=require("fs-extra"),Mr=$(),HG=require("fs-extra"),Th=require("os"),aoe=require("net"),coe=require("recursive-iterator"),dt=P(),uoe=KO(),xG=require("papaparse"),gh=require("moment"),{inspect:loe}=require("util"),GG=require("is-number"),DTe=require("lodash"),_oe=require("minimist"),doe=require("https"),foe=require("http"),{hdb_errors:Rh}=se(),Eoe=/^((\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)))$/,kG=require("util").promisify(setTimeout),hoe=100,moe=5,poe="",Soe=4,qG={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};JG.exports={isEmpty:sn,isEmptyOrZeroLength:ps,arrayHasEmptyValues:Roe,arrayHasEmptyOrZeroLengthValues:Aoe,buildFolderPath:Ooe,isBoolean:VG,errorizeMessage:Toe,stripFileExtension:yoe,autoCast:Noe,autoCastJSON:$G,autoCastJSONDeep:XA,removeDir:Ioe,compareVersions:woe,isCompatibleDataVersion:Coe,escapeRawValue:Doe,unescapeValue:Loe,stringifyProps:Moe,timeoutPromise:Uoe,isClusterOperation:Boe,getClusterUser:xoe,checkGlobalSchemaTable:Hoe,getHomeDir:KG,getPropsFilePath:Poe,promisifyPapaParse:Goe,removeBOM:WG,createEventPromise:qoe,checkProcessRunning:Foe,checkSchemaTableExist:koe,checkSchemaExists:QG,checkTableExists:zG,getStartOfTomorrowInSeconds:Voe,getLimitKey:$oe,isObject:boe,isNotEmptyAndHasValue:goe,autoCasterIsNumberCheck:YG,backtickASTSchemaItems:Yoe,isPortTaken:voe,createForkArgs:Koe,autoCastBoolean:Woe,async_set_timeout:kG,getTableHashAttribute:Qoe,doesSchemaExist:zoe,doesTableExist:Joe,stringifyObj:joe,ms_to_time:Xoe,changeExtension:Zoe,getEnvCliRootPath:ZA,noBootFile:eae,httpRequest:tae,transformReq:rae,convertToMS:nae,PACKAGE_ROOT:dt.PACKAGE_ROOT};function Toe(e){return e instanceof Error?e:new Error(e)}a(Toe,"errorizeMessage");function sn(e){return e==null}a(sn,"isEmpty");function goe(e){return!sn(e)&&(e||e===0||e===""||VG(e))}a(goe,"isNotEmptyAndHasValue");function ps(e){return sn(e)||e.length===0||e.size===0}a(ps,"isEmptyOrZeroLength");function Roe(e){if(sn(e))return!0;for(let t=0;t<e.length;t++)if(sn(e[t]))return!0;return!1}a(Roe,"arrayHasEmptyValues");function Aoe(e){if(ps(e))return!0;for(let t=0;t<e.length;t++)if(ps(e[t]))return!0;return!1}a(Aoe,"arrayHasEmptyOrZeroLengthValues");function Ooe(...e){try{return e.join(Hi.sep)}catch{console.error(e)}}a(Ooe,"buildFolderPath");function VG(e){return sn(e)?!1:e===!0||e===!1}a(VG,"isBoolean");function boe(e){return sn(e)?!1:typeof e=="object"}a(boe,"isObject");function yoe(e){return ps(e)?poe:e.slice(0,-Soe)}a(yoe,"stripFileExtension");function Noe(e){return sn(e)||e===""||typeof e!="string"?e:qG[e]!==void 0?qG[e]:YG(e)===!0?Number(e):Eoe.test(e)?new Date(e):e}a(Noe,"autoCast");function $G(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a($G,"autoCastJSON");function XA(e){if(e&&typeof e=="object"){if(Array.isArray(e))for(let t=0,r=e.length;t<r;t++){let n=e[t],s=XA(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=XA(r);n!==r&&(e[t]=n)}return e}else return $G(e)}a(XA,"autoCastJSONDeep");function YG(e){if(e.startsWith("0.")&&GG(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&GG(e))}a(YG,"autoCasterIsNumberCheck");async function Ioe(e){if(ps(e))throw new Error(`Directory path: ${e} does not exist`);try{await HG.emptyDir(e),await HG.remove(e)}catch(t){throw Mr.error(`Error removing files in ${e} -- ${t}`),t}}a(Ioe,"removeDir");function woe(e,t){if(ps(e)){Mr.info("Invalid current version sent as parameter.");return}if(ps(t)){Mr.info("Invalid upgrade version sent as parameter.");return}let r,n=/(\.0+)+$/,s=e.version?e.version:e,i=t.version?t.version:t,o=s.replace(n,"").split("."),c=i.replace(n,"").split("."),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(woe,"compareVersions");function Coe(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(Coe,"isCompatibleDataVersion");function Doe(e){if(sn(e))return e;let t=String(e);return t==="."?dt.UNICODE_PERIOD:t===".."?dt.UNICODE_PERIOD+dt.UNICODE_PERIOD:t.replace(dt.FORWARD_SLASH_REGEX,dt.UNICODE_FORWARD_SLASH)}a(Doe,"escapeRawValue");function Loe(e){if(sn(e))return e;let t=String(e);return t===dt.UNICODE_PERIOD?".":t===dt.UNICODE_PERIOD+dt.UNICODE_PERIOD?"..":String(e).replace(dt.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(Loe,"unescapeValue");function Moe(e,t){if(sn(e))return Mr.info("Properties object is null"),"";let r="";return e.each(function(n,s){try{if(t&&t[n]){let i=t[n];for(let o of i)r+=";"+o+Th.EOL}!ps(n)&&n[0]===";"?r+=" "+n+s+Th.EOL:ps(n)||(r+=n+"="+s+Th.EOL)}catch{Mr.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(Moe,"stringifyProps");function KG(){let e;try{e=Th.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(KG,"getHomeDir");function Poe(){let e=Hi.join(KG(),dt.HDB_HOME_DIR_NAME,dt.BOOT_PROPS_FILE_NAME);return FG.existsSync(e)||(e=Hi.join(__dirname,"../","hdb_boot_properties.file")),e}a(Poe,"getPropsFilePath");function Uoe(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:function(){clearTimeout(r)}}}a(Uoe,"timeoutPromise");async function voe(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=aoe.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a(voe,"isPortTaken");function Boe(e){try{return dt.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){Mr.error(`Error checking operation against cluster ops ${t}`)}return!1}a(Boe,"isClusterOperation");function Hoe(e,t){let r=(Ae(),ie(ke)).getDatabases();if(!r[e])return Rh.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return Rh.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Hoe,"checkGlobalSchemaTable");function xoe(e,t){if(sn(t)){Mr.warn("No CLUSTERING_USER defined, clustering disabled");return}if(sn(e)||ps(e)){Mr.warn("No users to search.");return}let r;try{let n=e.get(t);n&&n.role.permission.cluster_user===!0&&n.active===!0&&(r=n)}catch(n){Mr.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){Mr.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(xoe,"getClusterUser");function Goe(){xG.parsePromise=function(e,t,r){return new Promise(function(n,s){xG.parse(e,{header:!0,transformHeader:WG,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(Goe,"promisifyPapaParse");function WG(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(WG,"removeBOM");function qoe(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;Mr.info(`Got cluster status event response: ${loe(s)}`);try{i.cancel()}catch{Mr.error("Error trying to cancel timeout.")}n(s)})})}a(qoe,"createEventPromise");async function Foe(e){let t=!0,r=0;do await kG(hoe*r++),(await uoe.findPs(e)).length>0&&(t=!1);while(t&&r<moe);if(t)throw new Error(`process ${e} was not started`)}a(Foe,"checkProcessRunning");function koe(e,t){let r=QG(e);if(r)return r;let n=zG(e,t);if(n)return n}a(koe,"checkSchemaTableExist");function QG(e){let{getDatabases:t}=(Ae(),ie(ke));if(!t()[e])return Rh.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(QG,"checkSchemaExists");function zG(e,t){let{getDatabases:r}=(Ae(),ie(ke));if(!r()[e][t])return Rh.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(zG,"checkTableExists");function Voe(){let e=gh().utc().add(1,dt.MOMENT_DAYS_TAG).startOf(dt.MOMENT_DAYS_TAG).unix(),t=gh().utc().unix();return e-t}a(Voe,"getStartOfTomorrowInSeconds");function $oe(){return gh().utc().format("DD-MM-YYYY")}a($oe,"getLimitKey");function Yoe(e){try{let t=new coe(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){Mr.error("Got an error back ticking items."),Mr.error(t)}}a(Yoe,"backtickASTSchemaItems");function Koe(e){return[e]}a(Koe,"createForkArgs");function Woe(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(Woe,"autoCastBoolean");function Qoe(e,t){let{getDatabases:r}=(Ae(),ie(ke)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(Qoe,"getTableHashAttribute");function zoe(e){let{getDatabases:t}=(Ae(),ie(ke));return t()[e]!==void 0}a(zoe,"doesSchemaExist");function Joe(e,t){let{getDatabases:r}=(Ae(),ie(ke));return r()[e]?.[t]!==void 0}a(Joe,"doesTableExist");function joe(e){try{return JSON.stringify(e)}catch{return e}}a(joe,"stringifyObj");function Xoe(e){let t=gh.duration(e),r=t.seconds()>0?t.seconds()+"s":"",n=t.minutes()>0?t.minutes()+"m ":"",s=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+s+n+r}a(Xoe,"ms_to_time");function Zoe(e,t){let r=Hi.basename(e,Hi.extname(e));return Hi.join(Hi.dirname(e),r+t)}a(Zoe,"changeExtension");function ZA(){if(process.env[dt.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[dt.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=_oe(process.argv);if(e[dt.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[dt.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(ZA,"getEnvCliRootPath");var jA;function eae(){if(jA)return jA;let e=ZA();if(ZA()&&FG.pathExistsSync(Hi.join(e,dt.HDB_CONFIG_FILE)))return jA=!0,!0}a(eae,"noBootFile");function tae(e,t){let r;return e.protocol==="http:"?r=foe:r=doe,new Promise((n,s)=>{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",()=>{n(c)})});i.on("error",o=>{s(o)}),i.write(JSON.stringify(t)),i.end()})}a(tae,"httpRequest");function rae(e){if(!e.schema&&!e.database){e.schema=dt.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(rae,"transformReq");function nae(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(nae,"convertToMS")});var ee=g((PTe,tq)=>{"use strict";var eO=require("fs-extra"),Go=require("path"),jG=require("os"),sae=require("properties-reader"),Xl=$(),jl=z(),_e=P(),Ah=Er(),iae="Error initializing environment manager",Oh="BOOT_PROPS_FILE_PATH",XG=!1,oae={[_e.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},zs={};tq.exports={BOOT_PROPS_FILE_PATH:Oh,getHdbBasePath:aae,setHdbBasePath:cae,get:ZG,initSync:lae,setProperty:Pe,initTestEnvironment:dae,setCloneVar:_ae};function aae(){return zs[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(aae,"getHdbBasePath");function cae(e){zs[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(cae,"setHdbBasePath");function ZG(e){let t=Ah.getConfigValue(e);return t===void 0?zs[e]:t}a(ZG,"get");function Pe(e,t){oae[e]&&(zs[e]=t),Ah.updateConfigObject(e,t)}a(Pe,"setProperty");function uae(){let e;try{e=jl.getPropsFilePath(),eO.accessSync(e,eO.constants.F_OK|eO.constants.R_OK),XG=!0;let t=sae(e);return zs[_e.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(_e.HDB_SETTINGS_NAMES.INSTALL_USER),zs[_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),zs[Oh]=e,!0}catch{return Xl.trace(`Environment manager found no properties file at ${e}`),!1}}a(uae,"doesPropFileExist");function lae(e=!1){try{(XG||uae()||jl.noBootFile())&&!eq&&(Ah.initConfig(e),zs[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Ah.getConfigValue(_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Xl.error(iae),Xl.error(t),console.error(t),process.exit(1)}}a(lae,"initSync");var eq=!1;function _ae(e){eq=e}a(_ae,"setCloneVar");function dae(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:n,https_enabled:s,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,u=Go.join(__dirname,"../../","unitTests");zs[Oh]=Go.join(u,"hdb_boot_properties.file"),Pe(_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Go.join(u,"settings.test")),Pe(_e.HDB_SETTINGS_NAMES.INSTALL_USER,jG.userInfo()?jG.userInfo().username:void 0),Pe(_e.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Pe(_e.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Go.join(u,"envDir","log")),Pe(_e.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Pe(_e.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Pe(_e.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Pe(_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Go.join(u,"envDir")),Pe(_e.CONFIG_PARAMS.STORAGE_PATH,Go.join(u,"envDir")),s&&(Pe(_e.CONFIG_PARAMS.HTTP_SECUREPORT,ZG(_e.CONFIG_PARAMS.HTTP_PORT)),Pe(_e.CONFIG_PARAMS.HTTP_PORT,null)),Pe(_e.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),Pe(_e.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Pe(_e.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,jl.isEmpty(i)?!1:i),Pe(_e.CONFIG_PARAMS.HTTP_CORS,jl.isEmpty(i)?!1:i),Pe(_e.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Pe(_e.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Pe(_e.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Pe(_e.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Pe(_e.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Go.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Pe(_e.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,jl.isEmpty(c)?!1:c),o&&(Pe("CORS_ACCESSLIST",o),Pe(_e.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(Pe(_e.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),Pe(_e.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(Pe(_e.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Pe(_e.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(Pe(_e.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Pe(_e.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Oh}. Please check your boot props and settings files`;Xl.fatal(r),Xl.error(t)}}a(dae,"initTestEnvironment")});var oq=g((vTe,iq)=>{"use strict";var sq=require("joi"),{string:Zl,boolean:rq,array:fae}=sq.types(),nq=P(),Eae=Xe();iq.exports=hae;function hae(e){let t=sq.object({operation:Zl.valid(nq.OPERATIONS_ENUM.ADD_NODE,nq.OPERATIONS_ENUM.UPDATE_NODE).required(),node_name:Zl.required(),subscriptions:fae.items({schema:Zl.required(),table:Zl.optional(),hash_attribute:Zl.optional(),subscribe:rq.required(),publish:rq.required()}).min(1).required()});return Eae.validateBySchema(e,t)}a(hae,"updateRemoteSourceValidator")});var e_=g((HTe,aq)=>{"use strict";var tO=class{static{a(this,"UpdateRemoteResponseObject")}constructor(t,r,n=void 0){this.status=t,this.message=r,this.system_info=n}};aq.exports=tO});var _q=g((GTe,lq)=>{"use strict";var mae=oq(),Js=$(),rO=Ve(),pae=P(),nO=fn(),qo=ut(),cq=bu(),Sae=hd(),{Node:Tae,NodeSubscription:uq}=Ti(),sO=e_(),iO=z(),gae=ee(),{cloneDeep:Rae}=require("lodash"),{broadcast:Aae}=We();lq.exports=Oae;async function Oae(e){try{let t=mae(e);if(t)return Js.error(`Validation error in updateRemoteSource: ${t.message}`),new sO(rO.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,t.message);let{subscriptions:r,node_name:n,system_info:s}=e,i=[],o=Rae(await nO.getNodeRecord(n)),c=!iO.isEmptyOrZeroLength(o);o=c?o[0]:o,c&&Js.trace(`Existing record found for ${n}, updating records subscriptions`);for(let _=0,l=r.length;_<l;_++){let d=r[_],E=d.schema,f=d.table;if(!iO.doesSchemaExist(E)){Js.trace(`updateRemoteSource creating schema: ${E}`);try{await cq.createSchema({operation:"create_schema",schema:E})}catch(h){Js.error(h)}}if(f&&!iO.doesTableExist(E,f)){let h=new Sae(E,f,d.hash_attribute);d.attributes&&(h.attributes=d.attributes),Js.trace(`updateRemoteSource creating table: ${f} in schema: ${E} with attributes: ${JSON.stringify(d.attributes)}`);try{await cq.createTable(h)}catch(p){Js.error(p)}}if(Js.trace(`Creating local stream for ${E}.${f}`),await qo.createLocalTableStream(E,f),c?(await qo.updateConsumerIterator(E,f,n,"stop"),await qo.updateRemoteConsumer(d,n),d.subscribe===!0&&await qo.updateConsumerIterator(E,f,n,"start")):(await qo.updateRemoteConsumer(d,n),d.subscribe===!0?await qo.updateConsumerIterator(E,f,n,"start"):await qo.updateConsumerIterator(E,f,n,"stop")),c){let h=!1;for(let p=0,S=o.subscriptions.length;p<S;p++){let T=o.subscriptions[p];if(T.schema===E&&T.table===f){T.publish=d.publish,T.subscribe=d.subscribe,h=!0;break}}h||o.subscriptions.push(new uq(E,f,d.publish,d.subscribe))}else i.push(new uq(E,f,d.publish,d.subscribe))}c||(o=new Tae(n,i,void 0),Js.trace(`No record found for ${n}, creating a new one`));let u=Object.create({});return Object.assign(u,o),u.system_info=s,await nO.upsertNodeRecord(u),Aae({type:"nats_update"}),new sO(rO.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,`Node ${gae.get(pae.CONFIG_PARAMS.CLUSTERING_NODENAME)} successfully updated remote source`,await nO.getSystemInfo())}catch(t){Js.error(t);let r=t.message?t.message:t;return new sO(rO.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(Oae,"updateRemoteSource")});var hq=g((FTe,Eq)=>{"use strict";var fq=require("joi"),{string:dq}=fq.types(),bae=P(),yae=Xe();Eq.exports=Nae;function Nae(e){let t=fq.object({operation:dq.valid(bae.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:dq.required()});return yae.validateBySchema(e,t)}a(Nae,"removeRemoteSourceValidator")});var Sq=g((VTe,pq)=>{"use strict";var Iae=hq(),bh=$(),yh=Ve(),oO=P(),wae=fn(),Cae=z(),mq=ut(),Dae=ee(),Nh=e_(),{NodeSubscription:Lae}=Ti(),Mae=aa(),Pae=ci(),{broadcast:Uae}=We(),vae=Dae.get(oO.CONFIG_PARAMS.CLUSTERING_NODENAME);pq.exports=Bae;async function Bae(e){try{let t=Iae(e);if(t)return bh.error(`Validation error in removeRemoteSource: ${t.message}`),new Nh(yh.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,t.message);let r=e.node_name,n=await wae.getNodeRecord(r);if(Cae.isEmptyOrZeroLength(n)){let i=`No record found for node '${r}'`;return bh.error(i),new Nh(yh.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,i)}n=n[0];for(let i=0,o=n.subscriptions.length;i<o;i++){let c=n.subscriptions[i];bh.trace(`remove remote source removing subscription: ${c.schema}.${c.table} for node: ${r}`);let u=new Lae(c.schema,c.table,!1,!1);await mq.updateConsumerIterator(c.schema,c.table,r,"stop"),await mq.updateRemoteConsumer(u,r)}let s=new Mae(oO.SYSTEM_SCHEMA_NAME,oO.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await Pae.deleteRecord(s),Uae({type:"nats_update"}),new Nh(yh.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,`Node ${vae} successfully removed node '${r}'.`)}catch(t){bh.error(t);let r=t.message?t.message:t;return new Nh(yh.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(Bae,"removeRemoteSource")});var Aq=g((YTe,Rq)=>{"use strict";var Ih=$(),t_=P(),Tq=Ve(),aO=ee(),Hae=z(),gq=e_(),xae=fn(),Gae=Kd(),qae=qr();Rq.exports=Fae;async function Fae(e){try{Ih.trace("getRemoteSourceConfig called");let t=process.uptime()*1e3,r=Hae.ms_to_time(t),n=new kae(aO.get(t_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),aO.get(t_.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT)??aO.get(t_.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_SECUREPORT),r,await xae.getSystemInfo());try{let s={name:e.node_name,system_info:e.system_info},i=new Gae(t_.SYSTEM_SCHEMA_NAME,t_.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[s]);await qae.update(i)}catch(s){Ih.error("Get remote config encountered an error updating system info for node:",e.node_name,s)}return Ih.trace("getRemoteSourceConfig response:",n),new gq(Tq.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,n)}catch(t){Ih.error(t);let r=t.message?t.message:t;return new gq(Tq.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(Fae,"getRemoteSourceConfig");function kae(e,t,r,n){this.uptime=r,this.ports={clustering:e,operations_api:t},this.system_info=n}a(kae,"ConfigResponseObject")});var Nq=g((WTe,yq)=>{"use strict";var Oq=ee();Oq.initSync();var bq=ut(),r_=$(),_c=P(),cO=Ve(),Vae=_q(),$ae=Sq(),Yae=Aq(),Kae=e_(),{encode:Wae,decode:Qae}=require("msgpackr"),zae=ys(),Jae=bs(),jae=require("util"),Xae=P(),{isMainThread:Zae,parentPort:ece}=require("worker_threads");We();var tce=jae.promisify(zae.setSchemaDataToGlobal),uO=Oq.get(_c.CONFIG_PARAMS.CLUSTERING_NODENAME);yq.exports=rce;async function rce(){try{r_.notify("Starting reply service."),await tce();let e=await bq.getConnection(),t=`${uO}.__request__`,r=e.subscribe(t,{queue:uO});await nce(r)}catch(e){r_.error(e)}}a(rce,"initialize");async function nce(e){for await(let t of e){let r=Qae(t.data),n;switch(r.operation){case _c.OPERATIONS_ENUM.ADD_NODE:case _c.OPERATIONS_ENUM.UPDATE_NODE:n=await Vae(r);break;case _c.OPERATIONS_ENUM.REMOVE_NODE:n=await $ae(r);break;case _c.OPERATIONS_ENUM.CLUSTER_STATUS:n=await Yae(r);break;case _c.OPERATIONS_ENUM.DESCRIBE_ALL:n=await sce();break;default:let s=`node '${uO}' reply service received unrecognized request operation`;r_.error(s),n=new Kae(cO.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,s)}r_.trace(n),t.respond(Wae(n))}}a(nce,"handleRequest");async function sce(){try{return{status:cO.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,message:await Jae.describeAll()}}catch(e){return r_.error(e),{status:cO.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,message:e.message}}}a(sce,"getRemoteDescribeAll");Zae||ece.on("message",async e=>{let{type:t}=e;t===Xae.ITC_EVENT_TYPES.SHUTDOWN&&bq.closeConnection()})});var ice=Nq();(async()=>{try{await ice()}catch(e){console.error("Error launching Nats reply service."),console.error(e)}})();
|
|
31
|
+
`))}},25).unref()}o.close?.(()=>{if(qe.get(_t.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&Pl()==0)try{ex(qe.get(_t.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET))}catch{}clearInterval(c),setTimeout(()=>{console.log("forced close server",i,BE),o.cantCleanupProperly||Pt.warn("Had to forcefully exit the thread",BE),process.exit(0)},5e3).unref()})}if(cx||process.env.DEV_MODE)try{require("inspector").close()}catch(i){Pt.info("Could not close debugger",i)}}}).ref();let e=[];if(tx&&!qse)for(let t in hs){let r=hs[t];if(isNaN(t)&&Pl()==0){Cse(t)&&ex(t),e.push(new Promise((i,o)=>{r.listen({path:t},()=>{i(),Pt.info("Domain socket listening on "+t)}).on("error",o)}));continue}let n=qe.get(_t.CONFIG_PARAMS.HTTP_THREADRANGE);if(n){let i=typeof n=="string"?n.split("-"):n,o=Pl();if(o<i[0]||o>i[1])continue}let s;try{s=tx(+t,"::")}catch(i){console.error(`Unable to bind to port ${t}`,i);continue}e.push(new Promise((i,o)=>{r.listen({fd:s},()=>{i(),Pt.trace("Listening on port "+t,BE)}).on("error",o)}))}Promise.all(e).then(()=>{Ml?.postMessage({type:_t.ITC_EVENT_TYPES.CHILD_STARTED})})})}a(ux,"startServers");iA||ux();function cA(e,t,r){let n=e?.read?e:new Ose({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=hs[t];if(s.isSecure&&(n.startTime=performance.now()),s)typeof s=="function"?s(n):s.emit("connection",n),r&&n.emit("data",r);else{let i=a(o=>{setTimeout(()=>{let c=hs[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):o<5?i(o+1):(Pt.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}a(cA,"deliverSocket");var rx=new Map;function Vse(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=rx.get(s),r){case"connection":i=cA(void 0,t),rx.set(s,i),i.write=(c,u,_)=>(Ml.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),_&&_(),!0),i.end=(c,u,_)=>(Ml.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),_&&_(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),Ml.postMessage({requestId:s,event:"destroy"})};break;case"data":i._readableState.destroyed||i.emit("data",Buffer.from(n,"latin1"));break;case"drain":i._readableState.destroyed||i.emit("drain",{});break;case"end":i._readableState.destroyed||i.emit("end",{});break;case"error":i._readableState.destroyed||i.emit("error",{});break}}a(Vse,"proxyRequest");function uA(e,t,r=!0){!+t&&t!==qe.get(_t.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&(t=parseInt(qe.get(_t.CONFIG_PARAMS.HTTP_PORT),10));let n=hs[t];if(n){let s=n.lastServer||n;if(s===e)throw new Error(`Can not register the same server twice for the same port ${t}`);if(r&&!!s.sessionIdContext!=!!e.sessionIdContext&&+t)throw new Error(`Can not mix secure HTTPS and insecure HTTP on the same port ${t}`);s.off("unhandled",nx),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else hs[t]=e;e.on("unhandled",nx)}a(uA,"registerServer");function lx(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=[],qe.get(_t.CONFIG_PARAMS.HTTP_PORT)!=null&&t.push({port:qe.get(_t.CONFIG_PARAMS.HTTP_PORT),secure:qe.get(_t.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),qe.get(_t.CONFIG_PARAMS.HTTP_SECUREPORT)!=null&&t.push({port:qe.get(_t.CONFIG_PARAMS.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&qe.get(_t.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:qe.get(_t.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET),secure:!1}),t}a(lx,"getPorts");function lA(e,t){for(let{port:r,secure:n}of lx(t))_x(r,n,t?.isOperationsServer),typeof e=="function"?oA[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||r}):(e.isSecure=n,uA(e,r,!1)),xE[r]=aA(oA,r),Fse=aA(kse,r)}a(lA,"httpServer");function _x(e,t,r){if(!Ks[e]){let n=r?"operationsApi_network":"http",s={noDelay:!0,keepAliveTimeout:qe.get(n+"_keepAliveTimeout"),headersTimeout:qe.get(n+"_headersTimeout"),requestTimeout:qe.get(n+"_timeout")},i=qe.get(n+"_mtls"),o=qe.get(n+"_mtls_required");if(t){n=r?"operationsApi_":"";let u=qe.get(n+"tls");Object.assign(s,{allowHTTP1:!0,rejectUnauthorized:!!o,requestCert:!!i,ticketKeys:sx(),maxHeaderSize:qe.get(_t.CONFIG_PARAMS.HTTP_MAXHEADERSIZE),SNICallback:_A(u)})}let c=Bse();Ks[e]=(t?Ise:yse)(s,async(u,_)=>{try{let d=performance.now(),E=new ox(u,_);r&&(E.isOperationsServer=!0);let f=await xE[e](E);if(!f){if(E._nodeResponse.statusCode)return;f=dx(E)}if(c?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||[])_.setHeader(B[0],B[1]);return u.baseRequest=E,_.baseResponse=f,Ks[e].emit("unhandled",u,_)}let h=f.status||200,p=performance.now(),S=p-d,T=f.body,R;if(!f.handlesHeaders){let B=f.headers||new ix;T?T.length>=0&&(typeof T=="string"?B.set("Content-Length",Buffer.byteLength(T)):B.set("Content-Length",T.length),R=!0):(B.set("Content-Length","0"),R=!0);let U=`hdb;dur=${S.toFixed(2)}`;f.wasCacheMiss&&(U+=", miss"),Use(B,"Server-Timing",U,!0),_.writeHead(h,B&&(B[Symbol.iterator]?Array.from(B):B)),R&&_.end(T)}let y=E.handlerPath,I=E.method;if(Ll(S,"duration",y,I,f.wasCacheMiss==null?void 0:f.wasCacheMiss?"cache-miss":"cache-hit"),vse(h<400,"success",y,I),!R)if(T?.pipe){T.pipe(_),T.destroy&&_.on("close",()=>{T.destroy()});let B=0;T.on("data",U=>{B+=U.length}),T.on("end",()=>{Ll(performance.now()-p,"transfer",y,I),Ll(B,"bytes-sent",y,I)})}else T?.then?T.then(B=>{_.end(B)},l):_.end(T)}catch(d){l(d)}function l(d){let E=d.headers;_.writeHead(d.statusCode||500,E&&(E[Symbol.iterator]?Array.from(E):E)),_.end(d.toString()),d.statusCode?d.statusCode===500?Pt.warn(d):Pt.info(d):Pt.error(d)}a(l,"onError")}),i&&(Ks[e].mtlsConfig=i),t&&(Ks[e].on("secureConnection",u=>{u._parent.startTime&&Ll(performance.now()-u._parent.startTime,"tls-handshake",e),Ll(u.isSessionReused(),"tls-reused",e)}),Ks[e].isSecure=!0,s.SNICallback(null,(u,_)=>{try{Za=_,_&&Ks[e].setSecureContext(_.options)}finally{Za=null}})),uA(Ks[e],e)}return Ks[e]}a(_x,"getHTTPServer");function aA(e,t){let r=dx;for(let n=e.length;n>0;){let{listener:s,port:i}=e[--n];if(i===t||i==="all"){let o=r;r=a(c=>s(c,o),"next_callback")}}return r}a(aA,"makeCallbackChain");function dx(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new ix}}a(dx,"unhandled");function $se(e,t){lA(e,{requestOnly:!0,...t})}a($se,"onRequest");function Yse(e,t){let r;if(t.securePort){let n=Object.assign({},qe.get("tls"));t.mtls?.certificateAuthority&&(n.certificateAuthority=t.mtls.certificateAuthority);let s={noDelay:!0,rejectUnauthorized:!!t.mtls?.required,requestCert:!!t.mtls,SNICallback:_A(n)};r=Mse(s,e),s.SNICallback(null,(i,o)=>{try{Za=o,o&&r.setSecureContext(o.options)}finally{Za=null}}),hs[t.securePort]=r}return t.port&&(r=bse({noDelay:!0},e),hs[t.port]=r),r}a(Yse,"onSocket");Object.defineProperty(Nse.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 Kse(e,t){let r;for(let{port:n,secure:s}of lx(t)){HE[n]||(HE[n]=new Dse({server:r=_x(n,s)}),HE[n].on("connection",async(c,u)=>{try{let _=new ox(u);_.isWebSocket=!0;let l=xE[n](_),d=u.headers["sec-websocket-protocol"]||"",E=nA[n];if(d){let f;for(let h=0;h<E.length;h++){let p=E[h];p.protocol===d&&(f=!0,p.listener(c,_,l))}if(f)return}for(let f=0;f<E.length;f++){let h=E[f];h.protocol||h.listener(c,_,l)}}catch(_){Pt.warn("Error handling WebSocket connection",_)}}),HE[n].on("error",c=>{console.log("Error in setting up WebSocket server",c)}));let i=t?.subProtocol||"",o=nA[n];o||(o=nA[n]=[]),o.push({listener:e,protocol:i}),xE[n]=aA(oA,n)}return r}a(Kse,"onWebSocket");function nx(e,t){t.writeHead(404),t.end(`Not found
|
|
32
|
+
`)}a(nx,"defaultNotFound");function sA(e){return e.startsWith("-----BEGIN")?e:wse(e)}a(sA,"readPEM");function _A(e){let t=[];for(let i=0;e[i];i++)t.push(e[i]);t.length||t.push(e);let r=new Map,n,s=!1;for(let i of t){let o=sA(i.privateKey),c=sA(i.certificate),u=i.certificateAuthority&&sA(i.certificateAuthority);if(!o||!c)throw new Error("Missing private key or certificate for secure server");let _={ciphers:i.ciphers,ca:u,ticketKeys:sx()},l=Lse(_);l.options=_,_.instantiatedContext=l,l.context.setCert(c),l.context.setKey(o,void 0),_.cert=c,_.key=o,l.certStart=c.slice(0,100).toString(),n||(n=l);let d=new Hse(c),E=i.hostname??i.host??i.hostnames??i.hosts??(d.subjectAltName?d.subjectAltName.split(",").map(f=>{let h=f.indexOf(":");return f.slice(h+1)}):[d.subject.match(/CN=(.*)/)?.[1]]);Array.isArray(E)||(E=[E]);for(let f of E)f?(f[0]==="*"&&(s=!0,f=f.slice(1)),r.has(f)||r.set(f,l)):Pt.error("No hostname found for certificate at",i.certificate)}return(i,o)=>{let c=i;for(;;){let u=r.get(c);if(u)return Pt.debug("Found certificate for",i,u.certStart),o(null,u);if(s&&c){let _=c.indexOf(".",1);_<0?c="":c=c.slice(_)}else break}Pt.debug("No certificate found to match",i,"using the first certificate"),o(null,n)}}a(_A,"createSNICallback")});async function Sx({clientId:e,user:t,clean:r,will:n,keepalive:s}){let i;if(e&&!r){let o=await fA.get(e,{returnNonexistent:!0});i=new mA(e,t,o),o&&(i.sessionWasPresent=!0)}else{if(e){let o=await fA.get(e);o&&o.delete()}i=new FE(e,t)}return n&&(n.id=e,n.user={username:t?.username},Ul.put(n)),s&&(i.keepalive=s,i.receivedPacket()),i}function EA(){return qE++,qE>65500&&(qE=1),qE}function hA(e,t,r){let{topic:n,retain:s}=e;e.data=t,e.async=!0,r.authorize=!0;let i=yi.getMatch(n);if(!i)throw new Error(`Can not publish to topic ${n} as it does not exist, no resource has been defined to handle this topic`);e.url=i.relativeURL;let o=i.Resource;return rt(r,()=>s?t===void 0?o.delete(e,r):o.put(e,e.data,r):o.publish(e,e.data,r))}var hx,Pi,mx,px,Ex,fA,Ul,qE,FE,mA,Tx=Re(()=>{Ae();Zu();hx=x(vr()),Pi=x($());so();mx=x(We()),px=x(fx());lr();Ex=100,fA=Et({database:"system",table:"hdb_durable_session",attributes:[{name:"id",isPrimaryKey:!0},{name:"subscriptions",type:"array",elements:{attributes:[{name:"topic"},{name:"qos"},{name:"startTime"},{name:"acks"}]}}]}),Ul=Et({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,mx.getWorkerIndex)()===0&&(async()=>{await px.when_components_loaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of Ul.search({})){let t=e.data,r=Object.assign({},e);r.user?.username&&(r.user=await at.getUser(r.user.username));try{await hA(r,t,r)}catch{(0,Pi.warn)("Failed to publish will",t)}Ul.delete(e.id)}})();a(Sx,"getSession");qE=1;a(EA,"getNextMessageId");FE=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;request;socket;subscriptions=[];awaitingAcks;sessionWasPresent;keepalive;keepaliveTimer;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,n){let{topic:s,rh:i,startTime:o}=t,c=s.indexOf("?"),u,_;if(c>-1?(u=s.slice(c),_=s.slice(0,c)):_=s,!_)throw new Error("No topic provided");if(_.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");let l=this.subscriptions.find(T=>T.topic===s),d;l?(d=i>0,l.end(),this.subscriptions.splice(this.subscriptions.indexOf(l),1)):d=i===2;let E={search:u,async:!0,user:this.user,startTime:o,omitCurrent:d,url:""};o&&(0,Pi.trace)("Resuming subscription from",s,"from",o);let f=yi.getMatch(_);if(!f){let T=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw T.statusCode=404,T}if(E.url=f.relativeURL,E.url.indexOf("+")>-1||E.url.indexOf("#")>-1){let T=E.url.slice(1);if(T.indexOf("#")>-1&&T.indexOf("#")!==T.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(E.isCollection=!0,T.indexOf("+")===T.length-1)E.onlyChildren=!0,E.url="/"+T.slice(0,T.length-1);else{let R=T.split("/"),y;for(let U=0;U<R.length;U++)if(R[U].indexOf("+")>-1)if(R[U]==="+")y=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&y)throw new Error("Filters can not be combined");let I=!0;R[R.length-1]==="#"&&(R.length--,I=!1),y&&(n=a(U=>{let F=U.id;if(!Array.isArray(F)||I&&F.length!==R.length)return!1;for(let M=0;M<R.length;M++)if(R[M]!=="+"&&R[M]!==F[M])return!1;return!0},"filter"));let B=R.indexOf("+");E.url="/"+(B>-1?R.slice(0,B):R).concat("").join("/")}}let h=f.path,p=f.Resource,S=await rt(E,async()=>{let T=this.createContext();T.topic=s,T.retainHandling=i;let R=await p.subscribe(E,T);if(!R)throw new Error(`No subscription was returned from subscribe for topic ${s}`);if(!R[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);let y=(async()=>{for await(let I of R)try{let B;if(I.type&&I.type!=="put"&&I.type!=="delete"&&I.type!=="message"&&I.type!=="patch"||n&&!n(I))continue;r?(I.topic=s,B=this.needsAcknowledge(I)):(I.acknowledge?.(),B=EA());let U=I.id;if(Array.isArray(U)&&(U=wa(U)),U==null&&(U=""),await this.listener(h+"/"+U,I.value,B,t)===!1)break;this.awaitingAcks?.size>Ex?await new Promise(M=>setTimeout(M,this.awaitingAcks.size-Ex)):await new Promise(setImmediate)}catch(B){(0,Pi.warn)(B)}})();return R});return S.topic=s,S.qos=t.qos,this.subscriptions.push(S),S}resume(){}needsAcknowledge(t){let r=EA();return t.acknowledge&&(this.awaitingAcks||(this.awaitingAcks=new Map),this.awaitingAcks.set(r,t.acknowledge)),r}acknowledge(t){let r=this.awaitingAcks?.get(t);r&&(this.awaitingAcks.delete(t),r())}async removeSubscription(t){let r=this.subscriptions.find(n=>n.topic===t);if(r)return r.end(),this.subscriptions.splice(this.subscriptions.indexOf(r),1),!0}async publish(t,r){return hA(t,r,this.createContext())}createContext(){let t={session:this,socket:this.socket,user:this.user,authorize:!0};return this.request&&(t.request=this.request,t.url=this.request.url,t.headers=this.request.headers),t}setListener(t){this.listener=t}disconnect(t){this.keepaliveTimer&&clearTimeout(this.keepaliveTimer);let r=this.createContext();rt(r,async()=>{try{if(!t){let n=await Ul.get(this.sessionId);n?.doesExist()&&await hA(n,n.data,r)}}finally{await Ul.delete(this.sessionId)}}).catch(n=>{(0,Pi.warn)(`Error publishing MQTT will for ${this.sessionId}`,n)});for(let n of this.subscriptions)n.end();this.subscriptions=[]}receivedPacket(){this.keepalive&&(clearTimeout(this.keepaliveTimer),this.keepaliveTimer=setTimeout(()=>{this.socket?.destroy?this.socket.destroy(new Error("Keepalive timeout")):this.socket?.terminate()},this.keepalive*1500))}};a(hA,"publish");mA=class extends FE{static{a(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,n){super(t,r),this.sessionRecord=n||{id:t,subscriptions:[]}}async resume(){for(let t of this.sessionRecord.subscriptions||[])await this.resumeSubscription({omitCurrent:!0,topic:t.topic,qos:t.qos,startTime:t.startTime},!0,t.acks?r=>!t.acks.includes(r.timestamp):null)}resumeSubscription(t,r,n){return super.addSubscription(t,r,n)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=EA(),n={topic:t.topic,timestamp:t.timestamp};return t.acknowledge&&(n.acknowledge=t.acknowledge),this.awaitingAcks.set(r,n),r}acknowledge(t){let r=this.awaitingAcks?.get(t);if(!r)return;this.awaitingAcks?.delete(t),r.acknowledge?.();let n=r.topic;for(let[,s]of this.awaitingAcks)if(s.topic===n&&s.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===n){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,Pi.trace)("Received ack",n,r.timestamp),this.sessionRecord.update();return}}for(let s of this.sessionRecord.subscriptions)s.topic===n&&(s.startTime=r.timestamp);this.sessionRecord.update()}async addSubscription(t,r){await this.resumeSubscription(t,r);let{qos:n,startTime:s}=t;return n>0&&!s&&this.saveSubscriptions(),t.qos}removeSubscription(t){let r=this.subscriptions.find(s=>s.topic===t),n=super.removeSubscription(t);return r.qos>0&&this.saveSubscriptions(),n}saveSubscriptions(){this.sessionRecord.subscriptions=this.subscriptions.map(t=>{let r=t.startTime;return r||(r=t.startTime=(0,hx.getNextMonotonicTime)()),(0,Pi.trace)("Added durable subscription",t.topic,r),{qos:t.qos,topic:t.topic,startTime:r}}),fA.put(this.sessionRecord)}}});var SA={};Fe(SA,{bypassAuth:()=>Wse,start:()=>Qse});function Wse(){bx=!0}function Qse({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){e.mqtt||(e.mqtt={requireAuthentication:i,sessions:new Set,events:new Ox.EventEmitter},e.mqtt.events.on("error",()=>{}));let o=e.mqtt,c,u=r?.mtls;return n&&(c=e.ws((_,l,d)=>{if(_.protocol==="mqtt"){o.events.emit("connection",_),jt.debug("Received WebSocket connection for MQTT from",_._socket.remoteAddress);let{onMessage:E,onClose:f}=Rx(_,h=>{_.send(h)},l,Promise.resolve(d).then(()=>l?.user),o);_.on("message",E),_.on("close",f),_.on("error",h=>{jt.info("WebSocket error",h)})}},Object.assign({subProtocol:"mqtt"},n))),(t||s)&&(c=e.socket(async _=>{let l;if(o.events.emit("connection",_),jt.debug(`Received ${_.getCertificate?"SSL":"TCP"} connection for MQTT from ${_.remoteAddress}`),u){if(_.authorized)try{let f=u.user;if(f!==null){(f===void 0||f==="Common Name"||f==="CN")&&(f=_.getPeerCertificate().subject.CN);try{l=await e.getUser(f,null,null),(0,ec.get)(Xt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&VE.notify({username:l?.username,status:Xt.AUTH_AUDIT_STATUS.SUCCESS,type:Xt.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT mTLS",remote_address:_.remoteAddress})}catch(h){throw(0,ec.get)(Xt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&VE.error({username:f,status:Xt.AUTH_AUDIT_STATUS.FAILURE,type:Xt.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:_.remoteAddress}),h}}else jt.debug("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",_.remoteAddress)}catch(f){o.events.emit("error",f,_),jt.error(f)}else if(u.required)return jt.info(`Unauthorized connection attempt, no authorized client certificate provided, error: ${_.authorizationError}`),_.end()}!l&&bx&&_.remoteAddress.includes("127.0.0.1")&&(l=await(0,Ax.getSuperUser)(),jt.debug("Auto-authorizing local connection",l?.username));let{onMessage:d,onClose:E}=Rx(_,f=>_.write(f),null,l,o);_.on("data",d),_.on("close",E),_.on("error",f=>{jt.info("Socket error",f)})},{port:t,securePort:s,mtls:u})),c}function Rx(e,t,r,n,s){gx||(gx=!0,mu(d=>{kE>0&&d.push({metric:"mqtt-connections",connections:kE,byThread:!0})}));let i;kE++;let o,c={protocolVersion:4},u=(0,$E.parser)({protocolVersion:5});function _(d){u.parse(d)}a(_,"onMessage");function l(){kE--,i||(i=!0,o?.disconnect?.(),s.events.emit("disconnected",o,e),s.sessions.delete(o),Wr(!1,"connection","mqtt","disconnect"),jt.debug("MQTT connection was closed",e.remoteAddress))}return a(l,"onClose"),u.on("packet",async d=>{n?.then&&(n=await n),o?.then&&await o;let E=d.topic,f=E?.indexOf("/",1),h=f>0?E.slice(0,f):E;Sr(d.length,"bytes-received",h,S(d),"mqtt");try{switch(o?.receivedPacket?.(),d.cmd){case"connect":if(c.protocolVersion=d.protocolVersion,d.username)try{n=await at.getUser(d.username,d.password.toString(),r),(0,ec.get)(Xt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&VE.notify({username:n?.username,status:Xt.AUTH_AUDIT_STATUS.SUCCESS,type:Xt.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch(M){return(0,ec.get)(Xt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&VE.error({username:d.username,status:Xt.AUTH_AUDIT_STATUS.FAILURE,type:Xt.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),s.events.emit("auth-failed",d,e,M),Wr(!1,"connection","mqtt","connect"),p({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return s.events.emit("auth-failed",d,e),Wr(!1,"connection","mqtt","connect"),p({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(d,n),d.will){let M=e.deserialize||(e.deserialize=yo(r?.headers.get?.("content-type")));d.will.data=d.will.payload?.length>0?M(d.will.payload):void 0,delete d.will.payload}o=Sx({user:n,...d}),o=await o,o.socket=e,r&&(o.request=r),s.sessions.add(o)}catch(M){return jt.error(M),s.events.emit("auth-failed",d,e,M),Wr(!1,"connection","mqtt","connect"),p({cmd:"connack",reasonCode:M.code||5,returnCode:M.code||128})}s.events.emit("connected",o,e),Wr(!0,"connection","mqtt","connect"),p({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((M,Q,J,j)=>{try{if(i)throw new Error("Session disconnected while trying to send message to",M);let ae=M.indexOf("/",1),ce=ae>0?M.slice(0,ae):M;p({cmd:"publish",topic:M,payload:T(Q),messageId:J||Math.floor(Math.random()*1e8),qos:j.qos},ce);let de=e._socket??e;return de.writableNeedDrain?new Promise(Be=>de.once("drain",Be)):!de.closed}catch(ae){return jt.error(ae),o?.disconnect(),s.sessions.delete(o),!1}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let R=[];for(let M of d.subscriptions){let Q;try{Q=(await o.addSubscription(M,M.qos>=1)).qos||0}catch(J){s.events.emit("error",J,e,M,o),jt.error(J),Q=c.protocolVersion<5?128:J.statusCode===403?135:J.statusCode===404?143:128}R.push(Q)}await o.committed,p({cmd:"suback",granted:R,messageId:d.messageId});break;case"unsubscribe":{let M=[];for(let Q of d.unsubscriptions)M.push(o.removeSubscription(Q)?0:17);p({cmd:"unsuback",granted:M,messageId:d.messageId});break}case"pubrel":p({cmd:"pubcomp",messageId:d.messageId,reasonCode:0});return;case"publish":let y=d.qos===2?"pubrec":"puback",I=e.deserialize||(e.deserialize=yo(r?.headers.get?.("content-type"))),U=(d.payload?.length||0)>0?I(d.payload):void 0,F;try{F=await o.publish(d,U)}catch(M){s.events.emit("error",M,e,d,o),jt.warn(M),d.qos>0&&p({cmd:y,messageId:d.messageId,reasonCode:128},d.topic);break}d.qos>0&&p({cmd:y,messageId:d.messageId,reasonCode:F===!1?144:0},d.topic);break;case"pubrec":p({cmd:"pubrel",messageId:d.messageId,reasonCode:0});break;case"pubcomp":case"puback":o.acknowledge(d.messageId);break;case"pingreq":p({cmd:"pingresp"});break;case"disconnect":i=!0,o?.disconnect(!0),s.events.emit("disconnected",o,e),s.sessions.delete(o),Wr(!0,"connection","mqtt","disconnect"),jt.debug("Received disconnect command, closing MQTT session",e.remoteAddress),e.close?e.close():e.end();break}}catch(R){s.events.emit("error",R,e,d,o),jt.error(R),p({cmd:"disconnect"})}function p(R,y){let I=(0,$E.generate)(R,c);t(I),Sr(I.length,"bytes-sent",y,S(R),"mqtt")}a(p,"sendPacket");function S(R){return R.qos>0?R.cmd+",qos="+R.qos:R.cmd}a(S,"packetMethodName");function T(R){return Ro(R,r)}a(T,"serialize")}),u.on("error",d=>{jt.warn("MQTT parsing error, closing connection:",d.message),e?.destroy?e.destroy():e?.terminate()}),{onMessage:_,onClose:l}}var $E,Ax,ec,Xt,pA,Ox,VE,jt,bx,gx,kE,yx=Re(()=>{$E=require("mqtt-packet");Tx();Ax=x(_n());Da();Ds();lr();ec=x(ee()),Xt=x(P()),pA=x($()),Ox=require("events"),VE=(0,pA.loggerWithTag)("auth-event"),jt=(0,pA.loggerWithTag)("mqtt"),bx=(0,ec.get)(Xt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(Wse,"bypassAuth");a(Qse,"start");kE=0;a(Rx,"onSocket")});var qf={};Fe(qf,{component_errors:()=>rc,loadComponent:()=>YE,loadComponentDirectories:()=>Ux,setErrorReporter:()=>Xse});function Ux(e,t){t&&(gA=t),e&&(RA=e);let r=[];if((0,et.existsSync)(TA)){let s=(0,et.readdirSync)(TA,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,st.join)(TA,o);r.push(YE(c,gA,"hdb",!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(YE(n,gA,n,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{Px=!0})}function Xse(e){vl=e}async function YE(e,t,r,n,s,i){let o=(0,et.realpathSync)(e);if(!Ix.has(o)){Ix.set(o,!0),s&&(RA=s);try{let c;n&&(rc=new Map);let u=(0,st.join)(e,n?"harperdb-config.yaml":"config.yaml");(0,et.existsSync)(u)?c=n?(0,Mx.getConfigObj)():(0,wx.parseDocument)((0,et.readFileSync)(u,"utf8"),{simpleKeys:!0}).toJSON():c=AA;let _=(0,st.join)(e,"node_modules","harperdb");try{Mo.isMainThread&&(n||(0,et.existsSync)(_)&&(0,et.realpathSync)(sc.PACKAGE_ROOT)!==(0,et.realpathSync)(_))&&((0,et.rmSync)(_,{recursive:!0,force:!0}),(0,et.existsSync)((0,st.join)(e,"node_modules"))||(0,et.mkdirSync)((0,st.join)(e,"node_modules")),(0,et.symlinkSync)(sc.PACKAGE_ROOT,_,"dir"))}catch(E){tc.default.error("Error symlinking harperdb module",E)}let l=[],d=n;for(let E in c){let f=c[E];if(rc.set(n?E:(0,st.basename)(e),!1),!f)continue;let h,p=f.package;try{if(p){let I=e,B;for(;!(0,et.existsSync)(B=(0,st.join)(I,"node_modules",E));)if(I=(0,st.dirname)(I),I.length<(0,Lx.getHdbBasePath)().length){B=null;break}if(B)h=await YE(B,t,r,!1),d=!0;else throw new Error(`Unable to find package ${E}:${p}`)}else h=jse[E];if(!h)continue;l.push(h);let S=a(I=>(I.origin=r,Et(I)),"ensureTable"),T=f.network||(f.port||f.securePort)&&f,R=T?.securePort||T?.https&&T.port,y=!T?.https&&T?.port;if(Mo.isMainThread&&(h=await h.startOnMainThread?.({server:at,ensureTable:S,port:y,securePort:R,resources:t,...f})||h,n&&T))for(let I of[y,R])try{if(+I&&!Nx.includes(I)){let B=OA.get(sc.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);B&&tc.default.warn("Session affinity is not recommended and may cause memory leaks"),(B||!LE)&&(Nx.push(I),GH(I,B))}}catch(B){console.error("Error listening on socket",I,B,E)}if(t.isWorker&&(h=await h.start?.({server:at,ensureTable:S,port:y,securePort:R,resources:t,...f})||h),RA.set(h,!0),(h.handleFile||h.handleDirectory)&&f.files){if(f.files.includes(".."))throw(0,Dx.handleHDBError)("Can not reference parent directories");let I=(0,st.join)(e,f.files).replace(/\\/g,"/"),B=I.indexOf("/*");if(B>-1&&f.files!==AA[E]?.files&&!(0,et.existsSync)(I.slice(0,B)))throw new Error(`The path '${I.slice(0,B)}' does not exist and cannot be used as the base of the resolved 'files' path value '${f.files}'`);let U=(0,st.basename)(e),F=f.path||"/";F=F.startsWith("/")?F:F.startsWith("./")?"/"+U+F.slice(2):F==="."?"/"+U:"/"+U+"/"+F;let M,Q,J;if(f.root){let ae=f.root;ae.startsWith("/")&&(ae=ae.slice(1)),ae.endsWith("/")&&(ae=ae.slice(0,-1)),ae+="/",Q=(0,st.join)(e,ae)}else(J=I.indexOf("/*"))>-1&&(Q=I.slice(0,J+1),M=(0,st.relative)(e,Q));let j=!1;if(Mo.isMainThread&&h.setupDirectory&&(j=await h.setupDirectory?.(F,Q,t)),t.isWorker&&h.handleDirectory&&(j=await h.handleDirectory?.(F,Q,t)),j)continue;for(let ae of await(0,Cx.default)(I,{onlyFiles:!1,objectMode:!0})){let{path:ce,dirent:de}=ae;d=!0;let Be=(0,st.relative)(e,ce).replace(/\\/g,"/");if(M)if(Be.startsWith(M))Be=Be.slice(M.length+1);else throw new Error(`The root path '${f.root}' does not reference a valid part of the file path '${Be}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`);let Ne=F+(F.endsWith("/")?"":"/")+Be;try{if(de.isFile()){let He=await Jse(ce);Mo.isMainThread&&await h.setupFile?.(He,Ne,ce,t),t.isWorker&&await h.handleFile?.(He,Ne,ce,t)}else Mo.isMainThread&&await h.setupDirectory?.(Ne,ce,t),t.isWorker&&await h.handleDirectory?.(Ne,ce,t)}catch(He){He.message=`Could not load ${de.isFile()?"file":"directory"} '${ce}'${f.module?" using '"+f.module+"'":""} for application '${e}' due to: ${He.message}`,vl?.(He),((0,nc.getWorkerIndex)()===0?console:tc.default).error(He),t.set(f.path||"/",new Bl(He)),rc.set(n?E:(0,st.basename)(e),He.message)}}}}catch(S){S.message=`Could not load component '${E}' for application '${(0,st.basename)(e)}' due to: ${S.message}`,vl?.(S),((0,nc.getWorkerIndex)()===0?console:tc.default).error(S),t.set(f.path||"/",new Bl(S),null,!0),rc.set(n?E:(0,st.basename)(e),S.message)}}if(Mo.isMainThread&&!Px&&i&&(0,nc.watchDir)(e,async()=>Ux()),c.extensionModule)return await T_((0,st.join)(e,c.extensionModule));if(!d&&t.isWorker){let E=`${e} did not load any modules, resources, or files, is this a valid component?`;vl?.(new Error(E)),((0,nc.getWorkerIndex)()===0?console:tc.default).error(E),rc.set((0,st.basename)(e),E)}}catch(c){console.error(`Could not load application directory ${e}`,c),c.message=`Could not load application due to ${c.message}`,vl?.(c),t.set("",new Bl(c))}}}var et,st,Mo,wx,OA,sc,Cx,nc,tc,Dx,Lx,zse,Mx,Jse,TA,RA,Px,gA,rc,jse,AA,Nx,Ix,vl,Bl,Ff=Re(()=>{et=require("fs"),st=require("path"),Mo=require("worker_threads"),wx=require("yaml"),OA=x(ee()),sc=x(P());Ab();Nb();Ib();B0();IH();PH();Cx=x(require("fast-glob")),nc=x(We()),tc=x($());Zh();lr();Dx=x(se());cn();Ae();qH();Lx=x(ee()),zse=x(YH());Mf();ZH();yx();Mx=x(Er());ME();({readFile:Jse}=et.promises),TA=OA.get(sc.CONFIG_PARAMS.COMPONENTSROOT),RA=new Map,rc=new Map;a(Ux,"loadComponentDirectories");jse={REST:iE,rest:iE,graphqlSchema:Xh,jsResource:tm,fastifyRoutes:qR,login:nm,static:FR,operationsApi:zse,customFunctions:{},http:{},clustering:tA,authentication:tl,mqtt:SA},AA={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(AA,"static",{value:{files:"web/**"}});Nx=[],Ix=new Map;a(Xse,"setErrorReporter");a(YE,"loadComponent");Bl=class extends $t{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 dA=g((BSe,Bx)=>{var{isMainThread:vx}=require("worker_threads"),{getTables:Zse}=(Ae(),ie(ke)),{loadComponentDirectories:eie,loadComponent:tie}=(Ff(),ie(qf)),{resetResources:rie}=(Zu(),ie(YU)),nie=Ag(),sie=Er(),{dirname:iie}=require("path"),{getConnection:oie}=ut(),aie=ee(),cie=P(),bA=new Map;async function uie(e=!1){!vx&&aie.get(cie.CONFIG_PARAMS.CLUSTERING_ENABLED)&&oie();try{vx&&await nie()}catch(n){console.error(n)}let t=rie();Zse(),t.isWorker=e,await tie(iie(sie.getConfigFilePath()),t,"hdb",!0,bA),await eie(bA,t);let r=[];for(let[n]of bA)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}a(uie,"loadRootComponents");Bx.exports.loadRootComponents=uie});var We=g((xSe,vi)=>{"use strict";var{Worker:lie,MessageChannel:_ie,parentPort:ms,isMainThread:CA,threadId:die,workerData:Ws}=require("worker_threads"),{PACKAGE_ROOT:fie}=P(),{join:qx,isAbsolute:Eie,extname:hie}=require("path"),{server:Fx}=(lr(),ie(Gi)),{watch:mie,readdir:pie}=require("fs/promises"),{totalmem:Hx}=require("os"),Hl=P(),kx=ee(),Qs=$(),{randomBytes:Sie}=require("crypto"),{_assignPackageExport:Tie}=require("../index"),gie=P(),xx=1024*1024,Ui=[],Rn=[],Rie=50,DA=1e4,Aie="restart",Vx="request_thread_info",$x="resource_report",Yx="thread_info",Kx="added-port",Oie="ack",yA;Tie("threads",Rn);vi.exports={startWorker:NA,restartWorkers:MA,shutdownWorkers:wie,workers:Ui,setMonitorListener:Bie,onMessageFromWorkers:Cie,onMessageByType:Zx,broadcast:Lie,broadcastWithAcknowledgement:Pie,setChildListenerByType:Iie,getWorkerIndex:Wx,getWorkerCount:Qx,getTicketKeys:Jx,setMainIsWorker:yie,setTerminateTimeout:bie,restartNumber:Ws?.restartNumber||1};Rn.onMessageByType=Zx;Rn.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=Rn.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};var LA;function bie(e){DA=e}a(bie,"setTerminateTimeout");function Wx(){return Ws?Ws.workerIndex:LA?0:void 0}a(Wx,"getWorkerIndex");function Qx(){return Ws?Ws.workerCount:LA?1:void 0}a(Qx,"getWorkerCount");function yie(e){LA=e}a(yie,"setMainIsWorker");var zx=1,KE;function Jx(){return KE||(KE=CA?Sie(48):Ws.ticketKeys,KE)}a(Jx,"getTicketKeys");Object.defineProperty(Fx,"workerIndex",{get(){return Wx()}});Object.defineProperty(Fx,"workerCount",{get(){return Qx()}});var jx={[Vx](e,t){Uie(t)},[$x](e,t){vie(t,e)}};function NA(e,t={}){let r=process.constrainedMemory?.()||Hx();r=Math.min(r,Hx(),2e4*xx);let n=kx.get(Hl.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/xx/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],o=[];for(let u of Rn){let _=new _ie;_.existingPort=u,i.push(_),o.push(_.port2)}hie(e)||(e+=".js");let c=new lie(Eie(e)?e:qx(fie,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:["--enable-source-maps"],argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(u=>u.existingPort.threadId),workerIndex:t.workerIndex,workerCount:zx=t.threadCount,name:t.name,restartNumber:vi.exports.restartNumber,ticketKeys:Jx()},transferList:o},t));for(let{port1:u,existingPort:_}of i)_.postMessage({type:Kx,port:u,threadId:c.threadId},[u]);return QE(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>NA(e,t),c.on("error",u=>{Qs.error(`Worker index ${t.workerIndex} error:`,u)}),c.on("exit",u=>{Ui.splice(Ui.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<Rie?(t.unexpectedRestarts=c.unexpectedRestarts+1,NA(e,t)):Qs.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",u=>{jx[u.type]?.(u,c)}),Ui.push(c),xie(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(NA,"startWorker");var Nie=[Hl.THREAD_TYPES.HTTP];async function MA(e=null,t=Math.max(zx>3,1),r=!0){if(CA){if(r){let{loadRootComponents:o}=dA();await o()}vi.exports.restartNumber++,t<1&&(t=t*Ui.length);let n=[],s=[];for(let o of Ui.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;Qs.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:vi.exports.restartNumber,type:Hl.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=Nie.indexOf(o.name)>-1,u=new Promise(_=>{let l=setTimeout(()=>o.terminate(),DA*2).unref();o.on("exit",()=>{clearTimeout(l),n.splice(n.indexOf(u)),!c&&r&&o.startCopy(),_()})});if(n.push(u),c&&r){let _=o.startCopy(),l=new Promise(d=>{let E=a(f=>{f.type===gie.ITC_EVENT_TYPES.CHILD_STARTED&&(Qs.trace("Worker has started",_.threadId),d(),s.splice(s.indexOf(l)),_.off("message",E))},"startListener");Qs.trace("Waiting for worker to start",_.threadId),_.on("message",E)});s.push(l),n.length>=t&&await Promise.race(n),s.length>=t&&await Promise.race(s)}}await Promise.all(n),await Promise.all(s);let{restartService:i}=ju();r&&(e==="http"||!e)&&kx.get(Hl.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else ms.postMessage({type:Aie,workerType:e})}a(MA,"restartWorkers");function Iie(e,t){jx[e]=t}a(Iie,"setChildListenerByType");function wie(e){return MA(e,1/0,!1)}a(wie,"shutdownWorkers");var Xx=[];function Cie(e){Xx.push(e)}a(Cie,"onMessageFromWorkers");var IA=new Map;function Zx(e,t){let r=IA.get(e);r||IA.set(e,r=[]),r.push(t)}a(Zx,"onMessageByType");var Die=10;async function Lie(e){let t=0;for(let r of Rn)try{r.postMessage(e),t++>Die&&(t=0,await new Promise(setImmediate))}catch(n){Qs.error("Unable to send message to worker",n)}}a(Lie,"broadcast");var WE=new Map,Mie=1;function Pie(e){return new Promise(t=>{let r=0;for(let n of Rn)try{let s=Mie++,i=a(()=>{WE.delete(s),--r===0&&t(),n!==ms&&--n.refCount===0&&n.unref()},"ack_handler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,WE.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,o]of WE)o.port===n&&o()})),n.postMessage(e),r++}catch(s){Qs.error("Unable to send message to worker",s)}r===0&&t()})}a(Pie,"broadcastWithAcknowledgement");function Uie(e){e.postMessage({type:Yx,workers:eG()})}a(Uie,"sendThreadInfo");function eG(){let e=Date.now();return Ui.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(eG,"getChildWorkerInfo");function vie(e,t){e.resources=t,e.resources.updated=Date.now()}a(vie,"recordResourceReport");var wA;function Bie(e){wA=e}a(Bie,"setMonitorListener");var Hie=1e3,Gx=!1;function xie(){Gx||(Gx=!0,setInterval(()=>{for(let e of Ui){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}wA&&wA()},Hie).unref())}a(xie,"startMonitoring");var Gie=1e3;if(ms){QE(ms);for(let e=0,t=Ws.addPorts.length;e<t;e++){let r=Ws.addPorts[e];r.threadId=Ws.addThreadIds[e],QE(r)}setInterval(()=>{let e=process.memoryUsage();ms.postMessage({type:$x,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Gie).unref(),yA=a(()=>new Promise((e,t)=>{ms.on("message",r),ms.postMessage({type:Vx});function r(n){n.type===Yx&&(ms.off("message",r),e(n.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else yA=eG;vi.exports.getThreadInfo=yA;function QE(e,t){Rn.push(e),e.on("message",r=>{if(r.type===Kx)r.port.threadId=r.threadId,QE(r.port);else if(r.type===Oie){let n=WE.get(r.id);n&&n()}else{for(let s of Xx)s(r,e);let n=IA.get(r.type);if(n)for(let s of n)try{s(r,e)}catch(i){Qs.error(i)}}}).on("close",()=>{Rn.splice(Rn.indexOf(e),1)}).on("exit",()=>{Rn.splice(Rn.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(QE,"addPort");if(CA){let e,t,r=new Set,n=a(async(s,i)=>{i&&(e=i);for(let o of await pie(s,{withFileTypes:!0}))o.isDirectory()&&o.name!=="node_modules"&&n(qx(s,o.name));try{for await(let{filename:o}of mie(s,{persistent:!1}))r.add(o),t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await MA(),console.log("Reloaded HarperDB components, changed files:",Array.from(r)),r.clear()},100)}catch(o){console.warn("Error trying to watch component directory",s,o)}},"watch_dir");vi.exports.watchDir=n,process.env.WATCH_DIR&&n(process.env.WATCH_DIR)}else ms.on("message",async e=>{let{type:t}=e;t===Hl.ITC_EVENT_TYPES.SHUTDOWN&&(vi.exports.restartNumber=e.restartNumber,ms.unref(),setTimeout(()=>{Qs.warn("Thread did not voluntarily terminate",die),process.exit(0)},DA).unref())})});var UC={};Fe(UC,{AUDIT_STORE_OPTIONS:()=>bf,createAuditEntry:()=>b_,openAuditStore:()=>XE,readAuditEntry:()=>vt,setAuditRetention:()=>Fie,transactionKeyEncoder:()=>uG});function XE(e){let t=e.auditStore=e.openDB(oG.AUDIT_STORE_NAME,bf);t.rootStore=e;let r=[];t.addDeleteRemovalCallback=function(i,o){return r[i]=o,{remove(){delete r[i]}}};let n=null;function s(i=zE){clearTimeout(n),n=setTimeout(async()=>{if(t.rootStore.status==="closed"||t.rootStore.status==="closing")return;let o=0,c;try{for(let{key:u,value:_}of t.getRange({start:0,snapshot:!1,end:Date.now()-PA})){if((_[0]&15)===BA){let l=vt(_),d=l.tableId;r[d]?.(l.recordId)}if(c=t.remove(u),await new Promise(setImmediate),++o>=qie){i=10;break}}await c}finally{o===0&&(i=Math.min(i<<1,PA/10)),s(i)}},i).unref()}return a(s,"scheduleAuditCleanup"),t.scheduleAuditCleanup=s,(0,jE.getWorkerIndex)()===(0,jE.getWorkerCount)()-1&&s(zE),t}function Fie(e,t=zE){PA=e,zE=t}function b_(e,t,r,n,s,i,o){let c=lG[i];if(!c)throw new Error(`Invalid audit entry type ${i}`);let u=1;n&&(n>1?ic.setFloat64(0,n):An.set(Tm),u=9),E(0),E(t),d(r),ic.setFloat64(u,e),u+=8,s?d(s):An[u++]=0,An[n?8:0]=c;let l=An.subarray(0,u);if(o)return Buffer.concat([l,o]);return l;function d(f){let h=u;u+=1,u=(0,oc.writeKey)(f,An,u);let p=u-h-1;p>127?p>16383?(xA.error("Key or username was too large for audit entry",f),u=h+1,An[h]=0):(An.copyWithin(h+2,h+1,u),ic.setUint16(h,p|32768),u++):An[h]=p}function E(f){f<128?An[u++]=f:f<16384?(ic.setUint16(u,f|32768),u+=2):f<1056964608?(ic.setUint32(u,f|3221225472),u+=4):(An[u]=255,ic.setUint32(u+1,f),u+=5)}}function vt(e){try{let t=e.dataView||(e.dataView=new HA(e.buffer,e.byteOffset,e.byteLength)),r;e[0]==66&&(r=t.readFloat64());let n=t.readInt(),s=t.readInt(),i=t.readInt(),o=t.readInt(),c=t.position,u=t.position+=o,_=t.readFloat64();o=t.readInt();let l=t.position,d=t.position+=o;return{type:lG[n&7],tableId:i,get recordId(){return iG(e,c,u)},version:_,previousLocalTime:r,get user(){return d>l?iG(e,l,d):void 0},getValue(E,f,h){if(n&UA||n&vA&&!f)return E.decoder.decode(e.subarray(t.position));if(n&vA&&h)return GA(E.getEntry(this.recordId),h,E)}}}catch(t){return xA.error("Reading audit entry error",t,e),{}}}function iG(e,t,r){let n=e.subarray(t,r);return(0,oc.readKey)(n,0,r-t)}var oc,JE,oG,aG,jE,cG,xA,An,ic,uG,bf,PA,qie,zE,UA,vA,tG,BA,rG,nG,sG,lG,HA,ni=Re(()=>{oc=require("ordered-binary"),JE=x(ee()),oG=x(ft()),aG=x(P()),jE=x(We()),cG=x(z());Uc();xA=x($());ZE();(0,JE.initSync)();An=Buffer.alloc(1024),ic=new DataView(An.buffer,An.byteOffset,1024),uG={writeKey(e,t,r){return e===Pc?(t.set(Pc,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,oc.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,oc.readKey)(e,t,r)}},bf={encoding:"binary",keyEncoder:uG},PA=(0,cG.convertToMS)((0,JE.get)(aG.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,qie=1e3,zE=1e4;a(XE,"openAuditStore");a(Fie,"setAuditRetention");UA=16,vA=32,tG=1,BA=2,rG=3,nG=4,sG=5,lG={put:tG|UA,[tG]:"put",delete:BA,[BA]:"delete",message:rG|UA,[rG]:"message",invalidate:nG,[nG]:"invalidate",patch:sG|vA,[sG]:"patch"};a(b_,"createAuditEntry");a(vt,"readAuditEntry");HA=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(iG,"readKeySafely")});var qA={};Fe(qA,{add:()=>eh,applyReverse:()=>_G,getRecordAtTime:()=>GA,rebuildUpdateBefore:()=>th});function eh(e,t,r){let n=e[t];typeof n=="bigint"?e[t]=n+BigInt(r.value):isNaN(e[t])?e[t]=r.value:e[t]=n+r.value}function th(e,t){let r=null;for(let n in e)if(n in t){let s=t[n];if(s?.__op__){let i=e[n];if(i?.__op__)if(i.__op__===s.__op__)r||(r={}),r[n]=i;else throw new Error("Can not merge updates with different operations");else r||(r={}),r[n]=i,eh(r,n,s)}}else r||(r={}),r[n]=e[n];return r}function _G(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=kie[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=dG}}function GA(e,t,r){let n=r.rootStore.auditStore,s=Object.assign({},e.value),i=e.localTime;for(;i>t;){let u=n.get(i),_=vt(u);switch(_.type){case"put":s=_.getValue(r);break;case"patch":_G(s,_.getValue(r));break;case"delete":s=null}i=_.previousLocalTime}let o={},c=0;for(let u in s)s[u]===dG&&(o[u]=!0,c++);for(;c>0&&i>0;){let u=n.get(i),_=vt(u),l;switch(_.type){case"put":l=_.getValue(r);break;case"patch":l=_.getValue(r);break}for(let d in l)o[d]&&(s[d]=l[d],o[d]=!1,c--);i=_.previousLocalTime}if(c>0)for(let u in o)s[u]=null;return s}var kie,dG,ZE=Re(()=>{ni();a(eh,"add");eh.reverse=function(e,t,r){let n=e[t];typeof n=="bigint"?e[t]=n-BigInt(r.value):isNaN(e[t])||(e[t]=n-r.value)};kie={add:eh};a(th,"rebuildUpdateBefore");a(_G,"applyReverse");dG={};a(GA,"getRecordAtTime")});function Zr(e){return e[Nt]||(e[Nt]=Object.create(null))}function oh(e,t){let r=e.prototype,n={},s=t.attributes||t.properties||[];for(let o of s){let c=o.name,u,_;if(o.resolve)_={get(){return o.resolve(this,this[ye])},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 On.ClientError(`${c} must be a string, attempt to assign ${l}`);Zr(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 On.ClientError(`${c} must be a string, attempt to assign ${l}`);Zr(this)[c]=l},"set");break;case"Float":case"Number":u=a(function(l){let d=l?.__op__?l.value:l;if(!(typeof d=="number"||l==null&&o.nullable!==!1))throw new On.ClientError(`${c} must be a number, attempt to assign ${d}`);Zr(this)[c]=l},"set");break;case"Int":u=a(function(l){let d=l?.__op__?l.value:l;if(!(d>>0===d||l==null&&o.nullable!==!1))if(typeof d=="number"&&Math.abs((d>>0)-d)<=1)d=Math.round(d),l?.__op__?l.value=d:l=d;else throw new On.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${l}`);Zr(this)[c]=l},"set");break;case"Long":u=a(function(l){let d=l?.__op__?l.value:l;if(!(Math.round(d)===l&&Math.abs(d)<=9007199254740992||l==null&&o.nullable!==!1))if(typeof d=="number"&&Math.abs(d)<=9007199254740992)d=Math.round(d),l?.__op__?l.value=d:l=d;else throw new On.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${l}`);Zr(this)[c]=l},"set");break;case"BigInt":u=a(function(l){let d=l?.__op__?l.value:l;if(!(typeof d=="bigint"||l==null&&o.nullable!==!1))if(typeof d=="string"||typeof d=="number")d=BigInt(d),l?.__op__?l.value=d:l=d;else throw new On.ClientError(`${c} must be a number, attempt to assign ${l}`);Zr(this)[c]=l},"set");break;case"Boolean":u=a(function(l){if(!(typeof l=="boolean"||l==null&&o.nullable!==!1))throw new On.ClientError(`${c} must be a boolean, attempt to assign ${l}`);Zr(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 On.ClientError(`${c} must be a Date, attempt to assign ${l}`);Zr(this)[c]=l},"set");break;case"Bytes":u=a(function(l){if(!(l instanceof Uint8Array||l==null&&o.nullable!==!1))throw new On.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${l}`);Zr(this)[c]=l},"set");break;case"Any":case void 0:u=a(function(l){Zr(this)[c]=l},"set");break;default:u=a(function(l){if(!(typeof l=="object"||l==null&&o.nullable!==!1))throw new On.ClientError(`${c} must be an object, attempt to assign ${l}`);Zr(this)[c]=l},"set")}_={get(){let l=this[Nt];if(l&&c in l){let E=l[c];if(E?.__op__){let f=this[Ee]?.[c];return E.update(f)}return E}let d=this[Ee]?.[c];if(d&&typeof d=="object"){let E=EG(d,o);if(E)return l||(l=this[Nt]=Object.create(null)),l[c]=E}return d},set:u,enumerable:!0,configurable:!0}}_.get.isAttribute=!0,n[c]=_,(!(c in r)||Object.getOwnPropertyDescriptor(r,c)?.get?.isAttribute)&&Object.defineProperty(r,c,_)}i("getProperty",function(o){let c=n[o];if(c)return c.get.call(this);let u=this[Nt];return u?.[o]!==void 0?u[o]:this[Ee]?.[o]}),i("set",function(o,c){let u=n[o];if(u)return u.set.call(this,c);if(t.sealed)throw new On.ClientError("Can not add a property to a sealed table schema");Zr(this)[o]=c}),i("deleteProperty",function(o){Zr(this)[o]=void 0}),i("toJSON",function(){let o=this[Nt],c;for(let _ in o){c||(c=Object.assign({},this[Ee]));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[Ee])),Object.assign(c,this)),c||this[Ee]}),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 EG(e,t){let r;switch(e.constructor){case Object:return t?((r=t.TrackedObject)||(t.TrackedObject=r=class{static{a(this,"TrackedObject")}constructor(s){if(s?.[Ee])throw new Error("Can not track an already tracked object, check for circular references");this[Ee]=s}},oh(r,t)),new r(e)):new rh(e);case Array:let n=new sh(e.length);n[Ee]=e;for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=EG(o,t?.elements)),n[s]=o}return n;default:return e}}function gd(e){let t=e[Nt],r;for(let s in t){r||(r=Object.assign({},e[Ee]));let i=t[s];if(i&&typeof i=="object")if(i.__op__){let o=r[s];i=i.update(o)}else i=gd(i);r[s]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[Ee])),Object.assign(r,e)),r||e[Ee]}function Uo(e,t=e[Nt]){let r;if(fG.call(e,Ee)&&e.constructor===Array&&!Object.isFrozen(e)){r=e;for(let n=0,s=e.length;n<s;n++){let i=e[n];if(i&&typeof i=="object"){let o=Uo(i);o!==i&&r===e&&(r=e.slice(0)),i=o}r[n]=i}return Object.freeze(r)}for(let n in t){r||(r=Object.assign({},e[Ee]));let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=qA[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=Uo(s);r[n]=s}return r?Object.freeze(r):fG.call(e,Ee)?e[Ee]:e}function nh(e){let t=e[Ee];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[Po]||e.length!==t.length)return!0;for(let r=0,n=e.length;r<n;r++){let s=t[r],i=e[r];if(s&&i?.[Ee]===s){if(nh(i))return!0}else return!0}}else{let r=e[Nt];if(r&&!t)return!0;for(let n in r){let s=r[n];if(s&&typeof s=="object"){let i=t[n];if(i&&s[Ee]===i){if(nh(s))return!0}else return!0}else return!0}}return!1}var On,Nt,rh,fG,Po,sh,ih,Rd=Re(()=>{cn();On=x(se());ZE();Nt=Symbol("own-data");a(Zr,"getChanges");a(oh,"assignTrackedAccessors");a(EG,"trackObject");rh=class{static{a(this,"GenericTrackedObject")}constructor(t){if(t?.[Ee])throw new Error("Can not track an already tracked object, check for circular references");this[Ee]=t}};oh(rh,{});a(gd,"collapseData");fG=Object.prototype.hasOwnProperty;a(Uo,"deepFreeze");a(nh,"hasChanges");Po=Symbol.for("has-array-changes"),sh=class extends Array{static{a(this,"TrackedArray")}[Po];constructor(t){super(t)}splice(...t){return this[Po]=!0,super.splice(...t)}push(...t){return this[Po]=!0,super.push(...t)}pop(){return this[Po]=!0,super.pop()}unshift(...t){return this[Po]=!0,super.unshift(...t)}shift(){return this[Po]=!0,super.shift()}};sh.prototype.constructor=Array;ih=class{constructor(t){this.value=t}static{a(this,"Addition")}__op__="add";update(t){return(+t||0)+this.value}}});var $p={};Fe($p,{CONTEXT:()=>ye,ID_PROPERTY:()=>Me,IS_COLLECTION:()=>Vn,MultiPartId:()=>qa,RECORD_PROPERTY:()=>Ee,Resource:()=>$t,snake_case:()=>$ie,transformForSelect:()=>ch});function $ie(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function hG(e,t){if(xl=!1,e==="")return null;if(e=e.slice(1),e.indexOf("/")===-1)return e===""?(xl=!0,null):(e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e)));let r=e.split("/"),n=new qa;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){xl=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}function en(e,t){n.reliesOnPrototype=!0;let r=t.hasContent;return n;function n(s,i,o){let c,u,_,l;if(r?(o?(l=i,o=o[ye]||o):i?typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(l=s,c=l[this.primaryKey]??null,o=i[ye]||i):l=i:(l=s,c=l[Me]??l[this.primaryKey]??null),c==null&&(_=!0)):i?o=i[ye]||i:s&&typeof s=="object"&&!Array.isArray(s)&&(o=s),c===void 0)if(typeof s=="string")c=s;else if(typeof s=="object"&&s)if(u=s,s[Symbol.iterator]){c=[],_=!0;for(let f of s){if(typeof f=="object"&&f)break;c.push(f)}c.length===0?c=null:(c.length===1&&(c=c[0]),u.slice&&(u=u.slice(c.length,u.length),u.length===0&&(u=null,_=!1)))}else{if(typeof(c=s.url)=="string"){let f=c.indexOf("?");if(f>-1){let p=this.parseQuery(c.slice(f+1));u?u=Object.assign(p,u):u=p,c=c.slice(0,f)}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=s.id??null,c==null&&(_=!0))}else c=s??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 f=this.getResource(c,o,d);return f.then?f.then(E):E(f)}else return rt(o,()=>{let f=this.getResource(c,o,d);return f.then?f.then(E):E(f)},d);function E(f){if(o.authorize){o.authorize=!1;let h=t.type==="read"?f.allowRead(o.user,u,o):t.type==="update"?f.doesExist?.()===!1?f.allowCreate(o.user,l,o):f.allowUpdate(o.user,l,o):t.type==="create"?f.allowCreate(o.user,l,o):f.allowDelete(o.user,u,o);if(h?.then)return h.then(p=>{if(!p)throw new ah(o.user);return typeof l?.then=="function"?l.then(S=>e(f,u,o,S)):e(f,u,o,l)});if(!h)throw new ah(o.user)}return typeof l?.then=="function"?l.then(h=>e(f,u,o,h)):e(f,u,o,l)}a(E,"authorizeActionOnResource")}}function tn(e,t){let r=new SG.ClientError(`The ${e.constructor.name} does not have a ${t} method implemented`,405);r.allow=[],r.method=t;for(let n of["get","put","post","delete","query","move","copy"])typeof e[n]=="function"&&r.allow.push(n);throw r}function FA(e,t,r){let n=e[Ee];if(n){let s=e[Nt];return i=>{let o,c;return e.hasOwnProperty(i)&&typeof(o=e[i])!="function"?o:s&&i in s?s[i]:(c=t?.[i])?c(e,r):n[i]}}else return t?s=>{let i=t[s];return i?i(e,r):e[s]}:s=>e[s]}function ch(e,t){let r=t?.propertyResolvers,n=t[ye],s;if(typeof e=="string")return a(function o(c){return c.then?c.then(o):Array.isArray(c)?c.map(o):FA(c,r,n)(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(FA(u,r,n));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(E=>E&&typeof E=="object"?c(E):E);let _={},l=i(FA(u,r,n)),d;for(let E of e){let f=l(E);f===void 0&&o&&(f=null),f?.then?(d||(d=[]),d.push(f.then(h=>_[E.name||E]=h))):_[E.name||E]=f}return d?Promise.all(d).then(()=>_):_},"transform")}else throw new Error("Invalid select argument type "+typeof e);function i(o){return c=>{if(typeof c=="string")return o(c);if(typeof c=="object")if(c.name){s||(s={});let u=s[c.name];if(!u){let l=r[c.name]?.definition?.tableClass;u=s[c.name]=ch(c.select||c,l)}let _=o(c.name);return u(_)}else return o(c);else return c}}a(i,"handleProperty")}var mG,pG,SG,ye,Me,Vn,Ee,Vie,$t,ah,xl,qa,cn=Re(()=>{mG=require("crypto");Ic();pG=require("../index"),SG=x(se());Rd();so();nE();ye=Symbol.for("context"),Me=Symbol.for("primary-key"),Vn=Symbol("is-collection"),Ee=Symbol("stored-record"),Vie={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},$t=class{static{a(this,"Resource")}static transactions;constructor(t,r){this[Me]=t;let n=r?.[ye];this[ye]=n!==void 0?n:r||null}static get=en(function(t,r,n,s){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 _=ch(u,t.constructor);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",letItLinger:!0,ensureLoaded:!0,async:!0});static put=en(function(t,r,n,s){if(Array.isArray(s)&&t[Vn]){let i=[],o=n.authorize;for(let c of s){let u=t.constructor,_=u.getResource(c[u.primaryKey],n,{async:!0});_.then?i.push(_.then(l=>l.put(c,n))):i.push(_.put(c,n))}return Promise.all(i)}return t.put?t.put(s,r):tn(t,"put")},{hasContent:!0,type:"update"});static patch=en(function(t,r,n,s){return t.patch?t.patch(s,r):tn(t,"patch")},{hasContent:!0,type:"update"});static delete=en(function(t,r,n,s){return t.delete?t.delete(r):tn(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,mG.randomUUID)()}static create(t,r,n){let s;return t==null?s=this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?s=[...t,this.getNewId()]:typeof t!="object"?s=[t,this.getNewId()]:(s=this.getNewId(),n=r,r=t),n||(n={}),rt(n,()=>{let i=new this(s,n),o=i.update?i.update(r,!0):tn(i,"update");return n.newLocation=s,n.createdResource=!0,o?.then?o.then(()=>s):s})}static invalidate=en(function(t,r,n,s){return t.invalidate?t.invalidate(r):tn(t,"delete")},{hasContent:!1,type:"update"});static post=en(function(t,r,n,s){return t[Me]!=null&&t.update?.(),t.post(s,r)},{hasContent:!0,type:"create"});static connect=en(function(t,r,n,s){return t.connect?t.connect(s,r):tn(t,"connect")},{hasContent:!0,type:"read"});static subscribe=en(function(t,r,n,s){return t.subscribe?t.subscribe(r):tn(t,"subscribe")},{type:"read"});static publish=en(function(t,r,n,s){return t[Me]!=null&&t.update?.(),t.publish?t.publish(s,r):tn(t,"publish")},{hasContent:!0,type:"create"});static search=en(function(t,r,n,s){let i=t.search?t.search(r):tn(t,"search"),o=n.select;if(o&&n.hasOwnProperty("select")&&i!=null&&!i.selectApplied){let c=ch(o,t.constructor);return i.map(c)}return i},{type:"read"});static query=en(function(t,r,n,s){return t.search?t.search(s,r):tn(t,"search")},{hasContent:!0,type:"read"});static copy=en(function(t,r,n,s){return t.copy?t.copy(s,r):tn(t,"copy")},{type:"create"});static move=en(function(t,r,n,s){return t.move?t.move(s,r):tn(t,"move")},{type:"delete"});post(t){if(this[Vn])return this.constructor.create(this[Me],t,this[ye]);tn(this,"post")}static isCollection(t){return t?.[Vn]}static coerceId(t){return t}static parseQuery(t){return rE(t)}static parsePath(t,r,n){let s=t.indexOf(".");if(s>-1){let o=t.slice(s+1);t=t.slice(0,s);let c=r?.headers&&Vie[o];if(c)r.requestedContentType=c;else if(n)n.property=o;else return{query:{property:o},id:hG(t,this),isCollection:xl}}let i=hG(t,this);return xl?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r[ye],o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=n?.isCollection;let c=o&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let u;if(i.resourceCache?u=i.resourceCache:u=i.resourceCache=[],u.asMap){let _=u.asMap.get(t);if(s=_?.find(l=>l.constructor===c),s)return s;_||u.asMap.set(t,_=[]),_.push(s=new c(t,i))}else{if(s=u.find(_=>_[Me]===t&&_.constructor===c),s)return s;if(u.push(s=new c(t,i)),u.length>10){let _=new Map;for(let l of u){let d=l[Me],E=_.get(d);E?E.push(l):_.set(d,[l])}i.resourceCache.length=0,i.resourceCache.asMap=_}}}else s=new c(t,i);return o&&(s[Vn]=!0),s}subscribe(t){return new In}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new In}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[Me]}getContext(){return this[ye]}};$t.prototype[ye]=null;(0,pG._assignPackageExport)("Resource",$t);a($ie,"snake_case");ah=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(hG,"pathToId");qa=class extends Array{static{a(this,"MultiPartId")}toString(){return this.join("/")}};a(en,"transactional");a(tn,"missingMethod");a(FA,"selectFromObject");a(ch,"transformForSelect")});function RG(e,t,r,n,s){let i=e.primaryStore.env.path,o=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=gG,Yie(e.primaryStore,e.auditStore)):(c=TG,e.primaryStore.env.hasSubscriptionCommitListener||(e.primaryStore.env.hasSubscriptionCommitListener=!0,e.primaryStore.on("committed",()=>{AG(TG[i])})));let u=c[i]||(c[i]=[]);u.auditStore=e.auditStore,u.lastTxnTime==null&&(u.lastTxnTime=Date.now());let _=u[o];_||(_=u[o]=new Map,_.envs=u,_.tableId=o,_.store=e.primaryStore),t=wa(t);let l=new VA(r);l.startTime=n;let d=_.get(t);return d?d.push(l):(_.set(t,d=[l]),d.tables=_,d.key=t),l.subscriptions=d,l}function AG(e){if(!e)return;let t=e.auditStore;try{t.resetReadTxn()}catch(n){throw n.message+=" in "+path,n}let r;for(let{key:n,value:s}of t.getRange({start:e.lastTxnTime,exclusiveStart:!0})){e.lastTxnTime=n;let i=vt(s),o=e[i.tableId];if(!o)continue;let c=i.recordId,u,_=wa(i.recordId),l=0;do{let d=o.get(_);if(d){for(let f of d)if(!(l>0&&!(f.includeDescendants&&!(f.onlyChildren&&l>1)))){if(f.startTime>=n){(0,kA.info)("omitting",c,f.startTime,n);continue}try{let h;f.supportsTransactions&&f.txnInProgress!==i.version&&(h=!0,f.txnInProgress||(r?r.push(f):r=[f]),f.txnInProgress=i.version),f.listener(c,i,n,h)}catch(h){console.error(h),(0,kA.info)(h)}}}if(_==null)break;let E=_.lastIndexOf?.("/",_.length-2);E>-1?_=_.slice(0,E):_=null,l++}while(!0)}if(r)for(let n of r)n.txnInProgress=null,n.listener(null,{type:"end_txn"},e.lastTxnTime,!0)}function Yie(e,t){let r=t||e,n=r.env;if(!n.hasAfterCommitListener){n.hasAfterCommitListener=!0;let s=n.path;r.on("aftercommit",({next:i,last:o,txnId:c})=>{let u=gG[s];if(!u)return;let _=a(()=>{r.threadLocalWrites||(r.threadLocalWrites=new Float64Array(r.getUserSharedBuffer("last-thread-local-write",new ArrayBuffer(8)))),u.txnTime=r.threadLocalWrites[0]||Date.now(),AG(u),r.threadLocalWrites[0]=u.lastTxnTime,r.unlock("thread-local-writes")},"acquiredLock");r.attemptLock("thread-local-writes",_)&&_()})}}var kA,TG,gG,VA,OG=Re(()=>{kA=x($());Ic();Zu();ni();TG=Object.create(null),gG=Object.create(null);a(RG,"addSubscription");VA=class extends In{static{a(this,"Subscription")}listener;subscriptions;startTime;constructor(t){super(),this.listener=t,this.on("close",()=>this.end())}end(){if(this.subscriptions){if(this.subscriptions.splice(this.subscriptions.indexOf(this),1),this.subscriptions.length===0){let t=this.subscriptions.tables,r=this.subscriptions.key;if(t.delete(r),t.size===0){let n=t.envs,s=t.dbi;delete n[s]}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}};a(AG,"notifyFromTransactionData");a(Yie,"listenToCommits")});var OR={};Fe(OR,{coerceType:()=>uh,makeTable:()=>dh,setServerUtilities:()=>eoe,updateResource:()=>lh});function dh(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:o,databaseName:c,auditStore:u,schemaDefined:_,dbisDB:l,sealed:d}=e,{expirationMS:E,evictionMS:f,audit:h,trackDeletes:p}=e,{attributes:S}=e;S||(S=[]);let T=Am(i,n,u),R=0,y,I,B={},U=Promise.resolve(),F,M,Q;for(let K of S)(K.assignCreatedTime||K.name==="__createdtime__")&&(F=K),(K.assignUpdatedTime||K.name==="__updatedtime__")&&(M=K),K.expiresAt&&(Q=K),K.isPrimaryKey&&(B=K);let J,j=[],ae=[],ce=1,de=2,Be={},Ne={},He=864e5,n_,s_,js,lO=!1,wh,Ch,wq=i.getRange({start:!1,end:!1}).constructor,Cq=10,Dq=6;h&&fO();class Je extends $t{static name=s;static primaryStore=i;static auditStore=u;static primaryKey=t;static tableName=s;static indices=r;static audit=h;static databasePath=o;static databaseName=c;static attributes=S;static expirationTimer;static createdTimeProperty=F;static updatedTimeProperty=M;static propertyResolvers;static sources=[];static get expirationMS(){return E}static dbisDB=l;static schemaDefined=_;static sourcedFrom(m,A){A&&(this.sourceOptions=A,(A.expiration||A.eviction||A.scanInterval)&&this.setTTLExpiration(A)),A?.intermediateSource?(m.intermediateSource=!0,this.sources.unshift(m)):this.sources.push(m),I=m.get&&(!m.get.reliesOnPrototype||m.prototype.get);let D=a(L=>{let b=this.sources.slice(0,-1);if(b=b.filter(v=>v[L]&&(!v[L].reliesOnPrototype||v.prototype[L])),b.length>0)if(b.length===1){let v=b[0];return(q,C,G)=>{if(q?.source!==v)return v[L](C,G,q)}}else return(v,q,C)=>{let G=[];for(let H of b){if(v?.source===H)break;G.push(H[L](q,C,v))}return Promise.all(G)}},"getApplyToIntermediateSource"),O=this.sources[this.sources.length-1],N=a(L=>{if(O[L]&&(!O[L].reliesOnPrototype||O.prototype[L]))return(b,v,q)=>{if(!b?.source)return O[L](v,q,b)}},"getApplyToCanonicalSource");return Be={put:N("put"),patch:N("patch"),delete:N("delete"),publish:N("publish")},Ne={put:D("put"),patch:D("patch"),delete:D("delete"),publish:D("publish"),invalidate:D("invalidate")},(async()=>{let L=!1,b=a(async(v,q)=>{let C=v.value,G=v.table?ct[c][v.table]:Je;if(c===Yn.SYSTEM_SCHEMA_NAME&&(v.table===Yn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||v.table===Yn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(L=!0),v.id===void 0&&(v.id=C[G.primaryKey],v.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(v));v.source=m;let H=await G.getResource(v.id,q,ac);switch(v.type){case"put":return H._writeUpdate(C,!0,ac);case"patch":return H._writeUpdate(C,!1,ac);case"delete":return H._writeDelete(ac);case"publish":return H._writePublish(C,ac);case"invalidate":return H.invalidate(ac);default:it.error("Unknown operation",v.type,v.id)}},"writeUpdate");try{let v=m.subscribe;v&&p==null&&(p=!0);let q=m.subscribeOnThisThread?m.subscribeOnThisThread((0,Bo.getWorkerIndex)()):(0,Bo.getWorkerIndex)()===0,C=v&&q&&await m.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(C){let G;for await(let H of C)try{if(!(H.type==="transaction"?H.writes[0]:H)){it.error("Bad subscription event",H);continue}if(H.source=m,G)if(H.beginTxn)G.resolve();else{b(H,G);continue}if(H.type==="end_txn")continue;let le=rt(H,()=>{if(H.type==="transaction"){let ne=[];for(let Ue of H.writes)try{ne.push(b(Ue,H))}catch(ue){throw ue.message+=" writing "+JSON.stringify(Ue)+" of event "+JSON.stringify(H),ue}return Promise.all(ne)}else if(H.type==="define_schema"){let ne=this.attributes.slice(0),Ue;for(let ue of H.attributes)ne.find(De=>De.name===ue.name)||(ne.push(ue),Ue=!0);Ue&&(Et({table:s,database:c,attributes:ne,origin:"cluster"}),Yl.signalSchemaChange(new Kl.SchemaEventMsg(process.pid,Yn.OPERATIONS_ENUM.CREATE_TABLE,c,s)))}else return H.beginTxn?(G=H,b(H,H),new Promise(ne=>{G.resolve=ne})):b(H,H)});L&&(await le,Yl.signalUserChange(new Kl.UserEventMsg(process.pid))),H.onCommit&&(le?.then?le.then(H.onCommit):H.onCommit())}catch(Z){it.error("error in subscription handler",Z)}}}catch(v){it.error(v)}})(),this}static getResource(m,A,D){let O=super.getResource(m,A,D);if(m!=null){dc(m);try{if(O.hasOwnProperty(Ee))return O;if(typeof m=="object"&&m&&!Array.isArray(m))throw new Error(`Invalid id ${JSON.stringify(m)}`);let N=!D?.async||i.cache?.get(m),L=yn(A),b=L.getReadTxn();if(b?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return Dh(m,A,{transaction:b},N,v=>{if(v?lh(O,v):O[Ee]=null,A.onlyIfCached&&A.noCacheStore){if(!O.doesExist())throw new rn.ServerError("Entry is not cached",504)}else if(D?.ensureLoaded){let q=Lh(m,v,A,O);if(q)return L?.disregardReadTxn(),O[$A]=!0,KA(q,C=>(lh(O,C),O))}return O})}catch(N){throw N.message.includes("Unable to serialize object")&&(N.message+=": "+JSON.stringify(m)),N}}return O}ensureLoaded(){let m=Lh(this[Me],this[Lr],this[ye]);if(m)return this[$A]=!0,KA(m,A=>{this[Lr]=A,this[Ee]=A.value,this[Vl]=A.version})}static setTTLExpiration(m){if(typeof m=="number")E=m*1e3,f||(f=0);else if(m&&typeof m=="object")E=m.expiration*1e3,f=(m.eviction||0)*1e3,He=m.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(E<0)throw new Error("Expiration can not be negative");He=He||(E+f)/4,Ph()}static enableAuditing(m=!0){h=m,m&&fO(),Je.audit=m}static coerceId(m){return m===""?null:uh(m,B)}static async dropTable(){if(delete ct[c][s],c===o){for(let m of S)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));Yl.signalSchemaChange(new Kl.SchemaEventMsg(process.pid,Yn.OPERATIONS_ENUM.DROP_TABLE,c,s))}get(m){if(typeof m=="string")return this.getProperty(m);if(this[Vn])return this.search(m);if(this[Me]===null){if(m?.conditions)return this.search(m);let A=Je.getRecordCount();return{recordCount:A.recordCount,estimatedRecordRange:A.estimatedRange,records:"./",name:s,database:c,attributes:S}}if(m?.property)return this.getProperty(m.property);if(this.doesExist()||m?.ensureLoaded===!1||this[ye]?.returnNonexistent)return this}allowRead(m,A){let D=o_(m);if(D?.read){if(D.isSuperUser)return!0;let O=D.attribute_permissions,N=A?.select;if(O?.length>0||lO&&N){if(A||(A={}),N){let L=O?.length>0&&YA(O,"read");A.select=N.map(b=>{let v=b.name||b;if(!L||L[v]){let q=js[v]?.definition?.tableClass;if(q){if(b.name||(b={name:b}),!q.prototype.allowRead.call(null,m,b))return!1;if(!b.select)return b.name}return b}}).filter(Boolean)}else A.select=O.filter(L=>L.read&&!js[L.attribute_name]).map(L=>L.attribute_name);return A}else return!0}}allowUpdate(m,A){let D=o_(m);if(D?.update){let O=D.attribute_permissions;if(O?.length>0){let N=YA(O,"update");for(let L in A)if(!N[L])return!1;for(let L of O){let b=L.attribute_name;!L.update&&!(b in A)&&(A[b]=this.getProperty(b))}}return!0}}allowCreate(m,A){if(this[Vn]){let D=o_(m);if(D?.insert){let O=D.attribute_permissions;if(O?.length>0){let N=YA(O,"insert");for(let L in A)if(!N[L])return!1}else return!0}}else return this.allowUpdate(m,{})}allowDelete(m){return o_(m)?.delete}update(m,A){if(!yn(this[ye]))throw new Error("Can not update a table resource outside of a transaction");if(m===!1)return this;let O;return typeof m=="object"&&m&&(A?(Object.isFrozen(m)&&(m=Object.assign({},m)),this[Ee]={},this[Nt]=m):(O=this[Nt],O&&(m=Object.assign(O,m)),this[Nt]=O=m)),this._writeUpdate(this[Nt],A),this}addTo(m,A){if(typeof A=="number"||typeof A=="bigint")this[Gl]===yG?this.set(m,(+this.getProperty(m)||0)+A):(this[Gl]||this.update(),this.set(m,new ih(A)));else throw new Error("Can not add a non-numeric value")}subtractFrom(m,A){if(typeof A=="number")return this.addTo(m,-A);throw new Error("Can not subtract a non-numeric value")}getMetadata(){return this[Lr]}invalidate(m){let A=this[ye],D=this[Me];dc(D),yn(this[ye]).addWrite({key:D,store:i,invalidated:!0,entry:this[Lr],nodeName:this[ye]?.nodeName,before:Be.invalidate?.bind(this,A,D),beforeIntermediate:Ne.invalidate?.bind(this,A,D),commit:(N,L)=>{if(L?.version>N)return;let b=null;for(let v in r)b||(b={}),b[v]=this.getProperty(v);T(D,b,this[Lr],N,ql,h,this[ye],0,"invalidate")}})}static evict(m,A,D){let O=this.Source,N;if(!((I||h)&&(!A||(N=i.getEntry(m),!N||!A)||N.version!==D))){if(I){if(i.hasLock(m,N.version))return;let L;for(let b in r)L||(L={}),L[b]=A[b];if(L)return T(m,L,N,D,Fl,null,null,0,null,!0)}return i.ifVersion(m,D,()=>{i_(m,A,null)}),h?T(m,null,N,D,Fl,null,null,0,null,!0):i.remove(m,D)}}lock(){throw new Error("Not yet implemented")}static operation(m,A){return m.table||=s,m.schema||=c,MG.operation(m,A)}put(m){this.update(m,!0)}patch(m){this.update(m,!1)}_writeUpdate(m,A,D){let O=this[ye],N=yn(O),L=this[Me];dc(L);let b=this[Lr];this[Gl]=A?yG:jie;let v={key:L,store:i,entry:b,nodeName:O?.nodeName,validate:q=>{m||(m=this[Nt]),A||m&&nh(this[Nt]===m?this:m)?O?.source||(N.checkOverloaded(),this.validate(m,!A),M&&(m[M.name]=M.type==="Date"?new Date(q):M.type==="String"?new Date(q).toISOString():q),A&&(t&&m[t]!==L&&(m[t]=L),F&&(b?.value?m[F.name]=b?.value[F.name]:m[F.name]=F.type==="Date"?new Date(q):F.type==="String"?new Date(q).toISOString():q),m=Uo(m))):N.removeWrite(v)},before:A?Be.put?()=>Be.put(O,L,m):null:Be.patch?()=>Be.patch(O,L,m):Be.put?()=>Be.put(O,L,Uo(this)):null,beforeIntermediate:A?Ne.put?()=>Ne.put(O,L,m):null:Ne.patch?()=>Ne.patch(O,L,m):Ne.put?()=>Ne.put(O,L,Uo(this)):null,commit:(q,C,G)=>{if(G){if(O&&C?.version>(O.lastModified||0)&&(O.lastModified=C.version),this[Lr]=C,C?.value?.[Ee])throw new Error("Can not assign a record to a record, check for circular references");A||(this[Ee]=C?.value??null)}this[Nt]=void 0,this[Vl]=q;let H=C?.value,Z=m;if(this[Gl]=0,C?.version>=q)if(h){let ue=C.localTime,De=C.version;for(;Z&&(ue>q||De>=q&&ue>0);){let re=u.get(ue);if(!re)break;let X=vt(re);if(De=X.version,De>q){if(X.type==="patch"){let Se=X.getValue(i);Z=th(Z,Se)}else if(X.type==="put"||X.type==="delete")return}else if(De===q)return;ue=X.previousLocalTime}}else{if(A)return;Z=th(Z,H)}let le;if(A?le=Z:(this[Ee]=H,le=A?Z:Uo(this,Z)),this[Ee]=le,le?.[Ee])throw new Error("Can not assign a record to a record, check for circular references");let ne;A||(ne=m),i_(L,H,le);let Ue=A?"put":"patch";T(L,le,C,q,0,h,O,O.expiresAt||(E?E+Date.now():0),Ue,!1,ne)}};N.addWrite(v)}async delete(m){if(typeof m=="string")return this.deleteProperty(m);if(this[Vn]){for await(let A of this.search(m))(await Je.getResource(A[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(m);return}return this[Ee]?this._writeDelete(m):!1}_writeDelete(m){let A=yn(this[ye]),D=this[Me];dc(D);let O=this[ye];return A.addWrite({key:D,store:i,resource:this,nodeName:O?.nodeName,before:Be.delete?.bind(this,O,D),beforeIntermediate:Ne.delete?.bind(this,O,D),commit:(N,L,b)=>{let v=L?.value;b&&(O&&L?.version>(O.lastModified||0)&&(O.lastModified=L.version),lh(this,L)),!(L?.version>N)&&(i_(this[Me],v),it.trace("Write delete entry",D,N),h||p?(T(D,null,this[Lr],N,0,h,this[ye],0,"delete"),h||Ph()):i.remove(this[Me]))}}),!0}search(m){let A=this[ye],D=yn(A);if(!m)throw new Error("No query provided");let O=m.conditions;O?O.length===void 0&&(O=O[Symbol.iterator]?Array.from(O):[O]):O=Array.isArray(m)?m:m[Symbol.iterator]?Array.from(m):[],this[Me]&&(O=[{attribute:null,comparator:"prefix",value:this[Me]}].concat(O));let N,L={};function b(X,Se){let xe;switch(Se){case"and":case void 0:if(X.length<1)throw new Error('An "and" operator requires at least one condition');xe=!0;break;case"or":if(X.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+Se)}let Kn=xe&&{},Xs;for(let Ke of X){if(Ke.conditions){Ke.conditions=b(Ke.conditions,Ke.operator);continue}let kt=Ke[0]??Ke.attribute,on=kt==null?B:Fs(S,kt);if(on){if(xe){let Wn=Gn(kt),Vt=Kn[Wn];Vt?(Vt.push(Ke),Xs=!0):Kn[Wn]=[Ke]}(on.type||Jg[Ke.comparator])&&(Ke[1]===void 0?Ke.value=q(Ke.value,on):Ke[1]=q(Ke[1],on))}else if(kt!=null)throw(0,rn.handleHDBError)(new Error,`${kt} is not a defined attribute`,404)}if(m.enforceExecutionOrder)return X;if(Xs)for(let Ke in Kn){let kt=Kn[Ke],on=kt.length;if(on>1)for(let Wn=0;Wn<on;Wn++){let Vt=kt[Wn];if(Vt.comparator==="ge"||Vt.comparator==="greater_than_equal")for(let Zs=0;Zs<on;Zs++){let Fo=kt[Zs];(Fo.comparator==="le"||Fo.comparator==="less_than_equal")&&(Vt.comparator="between",Vt.value=[Vt.value,Fo.value],X.splice(X.indexOf(Fo),1))}if(Vt.comparator==="equals"||!Vt.comparator){for(let Zs=0;Zs<on;Zs++)if(Zs!==Wn){let Fo=kt[Zs];X.splice(X.indexOf(Fo),1)}break}}}return X}a(b,"prepareConditions");function v(X,Se){if(m.enforceExecutionOrder)return X;for(let xe of X)xe.conditions&&(xe.conditions=v(xe.conditions,xe.operator));return X.length>1&&Se!=="or"?(0,LG.sortBy)(X,tE(Je)):X}a(v,"orderConditions");function q(X,Se){return Array.isArray(X)?X.map(xe=>uh(xe,Se)):uh(X,Se)}a(q,"coerceTypedValues");let C=m.operator;(O.length>0||C)&&(O=b(O,C));let G=typeof m.sort=="object"&&m.sort,H;if(G&&C!=="or"){let X=G.attribute;if(N=O.find(Se=>Gn(Se.attribute)===Gn(X)),!N){let Se=Fs(S,X);if(!Se)throw(0,rn.handleHDBError)(new Error,`${Array.isArray(X)?X.join("."):X} is not a defined attribute`,404);if(Se.indexed)N={attribute:X,comparator:"sort"},O.push(N);else if(O.length===0&&!m.allowFullScan)throw(0,rn.handleHDBError)(new Error,`${Array.isArray(X)?X.join("."):X} is not indexed and not combined with any other conditions`,404)}N&&(N.descending=!!G.descending)}O=v(O,C),G&&(N&&O[0]===N?G.next&&(H={dbOrderedAttribute:G.attribute,attribute:G.next.attribute,descending:G.next.descending,next:G.next.next}):(N&&O.splice(O.indexOf(N),1),H=G));let Z=m.select;if(O.length===0&&(O=[{attribute:t,comparator:"greater_than",value:!0}]),m.explain)return{conditions:O,operator:C,postOrdering:H,selectApplied:!!Z};let le=D.useReadTxn(),ne=jg(O,C,Je,le,m,A,(X,Se)=>_O(X,Z,A,le,Se),L),Ue=m.ensureLoaded!==!1;H||(ne=re(ne));let ue=Je.transformEntryForSelect(Z,A,le,L,Ue,!0),De=Je.transformToOrderedSelect(ne,Z,H,le,A,ue);function re(X){return m.offset||m.limit!==void 0?X.slice(m.offset,m.limit!==void 0?(m.offset||0)+m.limit:void 0):X}return a(re,"applyOffset"),H&&(De=re(De)),De.onDone=()=>{De.onDone=null,D.doneReadTxn()},De.selectApplied=!0,De.getColumns=()=>{if(Z){let X=[];for(let Se of Z)Se==="*"?X.push(...S.map(xe=>xe.name)):X.push(Se.name||Se);return X}return S.map(X=>X.name)},De}static transformToOrderedSelect(m,A,D,O,N,L){let b=new wq;if(D){m=_O(m,A,O,N,null);let v;b.iterate=function(){let C,G=m[Symbol.asyncIterator]?m[Symbol.asyncIterator]():m[Symbol.iterator](),H,Z=D.dbOrderedAttribute,le,ne,Ue=!0;function ue(re){let X=re.next&&ue(re.next),Se=re.descending;return(xe,Kn)=>{let Xs=Mh(xe,re.attribute,O),Ke=Mh(Kn,re.attribute,O),kt=Se?(0,Ho.compareKeys)(Ke,Xs):(0,Ho.compareKeys)(Xs,Ke);return kt===0?X?.(xe,Kn)||0:kt}}a(ue,"createComparator");let De=ue(D);return{async next(){let re;if(C)if(re=C.next(),re.done){if(H)return b.onDone&&b.onDone(),re}else return{value:await L.call(this,re.value)};v=[],le&&v.push(le);do if(re=await G.next(),re.done){if(H=!0,v.length)break;return b.onDone&&b.onDone(),re}else{let X=re.value;if(X?.then&&(X=await X),Z){let Se=Mh(X,Z,O);if(Ue)Ue=!1,ne=Se;else if(Se!==ne){ne=Se,le=X;break}}v.push(X)}while(!0);return D.isGrouped,v.sort(De),C=v[Symbol.iterator](),re=C.next(),re.done?(b.onDone&&b.onDone(),re):{value:await L.call(this,re.value)}},return(){b.onDone&&b.onDone(),G.return()},throw(){b.onDone&&b.onDone(),G.throw()}}};let q=a(C=>{if(typeof A=="object"&&Array.isArray(C.attribute))for(let G=0;G<A.length;G++){let H=A[G],Z;if(H.name===C.attribute[0]){for(Z=H.sort||(H.sort={});Z.next;)Z=Z.next;Z.attribute=C.attribute.slice(1),Z.descending=C.descending}else H===C.attribute[0]&&(A[G]=Z={name:H,sort:{attribute:C.attribute.slice(1),descending:C.descending}})}C.next&&q(C.next)},"applySortingOnSelect");q(D)}else b.iterate=(m[Symbol.asyncIterator]||m[Symbol.iterator]).bind(m),b=b.map(L);return b}static transformEntryForSelect(m,A,D,O,N,L){if(m&&(m===t||m?.length===1&&m[0]===t)){let C=a(G=>(A?.transaction?.stale&&(A.transaction.stale=!1),G?.key??G),"transform");return m===t?C:m.asArray?G=>[C(G)]:G=>({[t]:C(G)})}let b;N&&I&&!m?.every(C=>{let G;return typeof C=="object"?G=C.name:G=C,r[G]||G===t})&&(b=!0);let v,q=a(function(C){let G;if(A?.transaction?.stale&&(A.transaction.stale=!1),C!=null){if(wh=C,G=C.value||C.deref?.(),!G&&(C.key===void 0||C.deref)){if(C=Dh(C.key??C,A,{transaction:D,lazy:m?.length<4},this.isSync,H=>H),C?.then)return C.then(q.bind(this));G=C?.value}if(b&&(C.metadataFlags&(ql|Fl)||C.expiresAt&&C.expiresAt<Date.now())){let H=Lh(C.key??C,C,A);if(H?.then)return H.then(q)}}if(G==null)return L?vo.SKIP:G;if(m&&!(m[0]==="*"&&m.length===1)){let H,Z=a((ne,Ue)=>{let ue;typeof ne=="object"?ue=ne.name:ue=ne;let De=js?.[ue],re;if(De){let X=O?.[ue];if(X)if(X.hasMappings){let xe=De.from?G[De.from]:Gn(C.key);re=X.get(xe),re||(re=[])}else re=X.fromRecord?.(G);else re=De(G,A,C);let Se=a(xe=>{if(xe&&typeof xe=="object"){let Kn=De.definition?.tableClass||Je;v||(v={});let Xs=v[ue]||(v[ue]=Kn.transformEntryForSelect(ue===ne?null:ne.select||(Array.isArray(ne)?ne:null),A,D,X,N));if(Array.isArray(xe)){let Ke=[],kt=Kn.transformToOrderedSelect(xe,ne.select,typeof ne.sort=="object"&&ne.sort,A,D,Xs)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),on=a(Vt=>{for(;!Vt.done;){if(Vt?.then)return Vt.then(on);Ke.push(Vt.value),Vt=kt.next()}Ue(Ke,ue)},"nextValue"),Wn=on(kt.next());Wn&&(H||(H=[]),H.push(Wn));return}else if(xe=Xs.call(this,xe),xe?.then){H||(H=[]),H.push(xe.then(Ke=>Ue(Ke,ue)));return}}Ue(xe,ue)},"handleResolvedValue");re?.then?(H||(H=[]),H.push(re.then(Se))):Se(re);return}else re=G[ue],re&&typeof re=="object"&&ue!==ne&&(re=Je.transformEntryForSelect(ne.select||ne,A,D,null)({value:re}));Ue(re,ue)},"selectAttribute"),le;if(typeof m=="string")Z(m,ne=>{le=ne});else if(Array.isArray(m))if(m.asArray)le=[],m.forEach((ne,Ue)=>{ne==="*"?m[Ue]=G:Z(ne,ue=>le[Ue]=ue)});else{le={};let ne=m.forceNulls;for(let Ue of m)if(Ue==="*")for(let ue in G)le[ue]=G[ue];else Z(Ue,(ue,De)=>{ue===void 0&&ne&&(ue=null),le[De]=ue})}else throw new rn.ClientError("Invalid select"+m);return H?Promise.all(H).then(()=>le):le}return G},"transform");return q}async subscribe(m){if(!u)throw new Error("Can not subscribe to a table without an audit log");h||Et({table:s,database:c,schemaDefined:_,attributes:S,audit:!0}),m||(m={});let A=!m.rawEvents,D=[],O=RG(Je,this[Me]??null,function(L,b,v,q){try{let C=b.getValue?.(i,A);if(!C&&b.type==="patch"&&A){let H=i.getEntry(L);H?.version===b.version?C=H.value:C=b.getValue?.(i,!0,v),b.type="put"}let G={id:L,timestamp:v,value:C,version:b.version,type:b.type,beginTxn:q};D?D.push(G):this.send(G)}catch(C){it.error(C)}},m.startTime||0,m),N=(async()=>{this[Vn]&&(O.includeDescendants=!0,m.onlyChildren&&(O.onlyChildren=!0)),m.supportsTransactions&&(O.supportsTransactions=!0);let L=this[Me],b=m.previousCount;b>1e3&&(b=1e3);let v=m.startTime;if(this[Vn]){if(v){if(b)throw new rn.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:q,value:C}of u.getRange({start:v,exclusiveStart:!0,snapshot:!1})){let G=vt(C);if(G.tableId!==n)continue;let H=G.recordId;if(L==null||CG(L,H)){let Z=G.getValue(i,A,q);if(O.send({id:H,timestamp:q,value:Z,version:G.version,type:G.type}),O.queue?.length>IG&&await O.waitForDrain()===!1)return}O.startTime=q}}else if(b){let q=[];for(let{key:C,value:G}of u.getRange({start:"z",end:!1,reverse:!0}))try{let H=vt(G);if(H.tableId!==n)continue;let Z=H.recordId;if(L==null||CG(L,Z)){let le=H.getValue(i,A,C);if(q.push({id:Z,timestamp:C,value:le,version:H.version,type:H.type}),--b<=0)break}}catch(H){it.error("Error getting history entry",C,H)}for(let C=q.length;C>0;)O.send(q[--C]);q[0]&&(O.startTime=q[0].timestamp)}else if(!m.omitCurrent){for(let{key:q,value:C,version:G,localTime:H}of i.getRange({start:L??!1,end:L==null?void 0:[L,Ho.MAXIMUM_KEY],versions:!0,snapshot:!1}))if(C&&(O.send({id:q,timestamp:H,value:C,version:G,type:"put"}),O.queue?.length>IG&&await O.waitForDrain()===!1))return}}else{b&&!v&&(v=0);let q=this[Lr]?.localTime;if(q===Rm&&(i.cache?.delete(L),this[Lr]=i.getEntry(L),it.trace("re-retrieved record",q,this[Lr]?.localTime),q=this[Lr]?.localTime),it.trace("Subscription from",v,"from",L,q),v<q){let C=[],G=q;do{let H=u.get(G);if(H){m.omitCurrent=!0;let Z=vt(H),le=Z.getValue(i,A,G);A&&(Z.type="put"),C.push({id:L,value:le,timestamp:G,...Z}),G=Z.previousLocalTime}else break;b&&b--}while(G>v&&b!==0);for(let H=C.length;H>0;)O.send(C[--H]);O.startTime=q}!m.omitCurrent&&this.doesExist()&&O.send({id:L,timestamp:q,value:this[Ee],version:this[Vl],type:"put"})}for(let q of D)O.send(q);D=null})();return m.listener&&O.on("data",m.listener),O}doesExist(){return!!(this[Ee]||this[Gl])}publish(m,A){this._writePublish(m,A)}_writePublish(m,A){let D=yn(this[ye]),O=this[Me]||null;dc(O);let N=this[ye];D.addWrite({key:O,store:i,entry:this[Lr],nodeName:N?.nodeName,validate:()=>{N?.source||(D.checkOverloaded(),this.validate(m))},before:Be.publish?.bind(this,N,O,m),beforeIntermediate:Ne.publish?.bind(this,N,O,m),commit:(L,b,v)=>{b===void 0&&p&&!h&&Ph(),T(O,b?.value??null,b,b?.version||L,0,!0,N,b?.expiresAt,"message",!1,m)}})}validate(m,A){let D,O=a((N,L,b)=>{if(L.type&&N!=null)if(A&&N.__op__&&(N=N.value),L.properties){typeof N!="object"&&(D||(D=[])).push(`Value ${$n(N)} in property ${b} must be an object${L.type?" ("+L.type+")":""}`);let v=L.properties;for(let q=0,C=v.length;q<C;q++){let G=v[q],H=O(N[G.name],G,b+"."+G.name);H&&(N[G.name]=H)}if(L.sealed&&N!=null&&typeof N=="object")for(let q in N)v.find(C=>C.name===q)||(D||(D=[])).push(`Property ${q} is not allowed within object in property ${b}`)}else switch(L.type){case"Int":(typeof N!="number"||N>>0!==N)&&(D||(D=[])).push(`Value ${$n(N)} in property ${b} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof N!="number"||!(Math.floor(N)===N&&Math.abs(N)<=9007199254740992))&&(D||(D=[])).push(`Value ${$n(N)} in property ${b} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof N!="number"&&(D||(D=[])).push(`Value ${$n(N)} in property ${b} must be a number`);break;case"ID":typeof N=="string"||N?.length>0&&N.every?.(v=>typeof v=="string")||(D||(D=[])).push(`Value ${$n(N)} in property ${b} must be a string, or an array of strings`);break;case"String":typeof N!="string"&&(D||(D=[])).push(`Value ${$n(N)} in property ${b} must be a string`);break;case"Boolean":typeof N!="boolean"&&(D||(D=[])).push(`Value ${$n(N)} in property ${b} must be a boolean`);break;case"Date":if(!(N instanceof Date)){if(typeof N=="string"||typeof N=="number")return new Date(N);(D||(D=[])).push(`Value ${$n(N)} in property ${b} must be a Date`)}break;case"BigInt":if(typeof N!="bigint"){if(typeof N=="string"||typeof N=="number")return BigInt(N);(D||(D=[])).push(`Value ${$n(N)} in property ${b} must be a bigint`)}break;case"Bytes":N instanceof Uint8Array||(D||(D=[])).push(`Value ${$n(N)} in property ${b} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(N)){if(L.elements)for(let v=0,q=N.length;v<q;v++){let C=N[v],G=O(C,L.elements,b+"[*]");G&&(N[v]=G)}}else(D||(D=[])).push(`Value ${$n(N)} in property ${b} must be a Buffer or Uint8Array`);break}L.nullable===!1&&N==null&&(D||(D=[])).push(`Property ${b} is required (and not does not allow null values)`)},"validateValue");for(let N=0,L=S.length;N<L;N++){let b=S[N];if(!b.relationship&&(!A||b.name in m)){let v=O(m[b.name],b,b.name);v&&(m[b.name]=v)}}if(d)for(let N in m)S.find(L=>L.name===N)||(D||(D=[])).push(`Property ${N} is not allowed`);if(D)throw new rn.ClientError(D.join(". "))}getUpdatedTime(){return this[Vl]}wasLoadedFromSource(){return I?!!this[$A]:void 0}static async addAttributes(m){let A=S.slice(0);for(let D of m){if(!D.name)throw new rn.ClientError("Attribute name is required");if(D.name.match(/[`/]/))throw new rn.ClientError("Attribute names cannot include backticks or forward slashes");A.push(D)}return Et({table:s,database:c,schemaDefined:_,attributes:A}),Je.indexingOperation}static async removeAttributes(m){let A=S.filter(D=>!m.includes(D.name));return Et({table:s,database:c,schemaDefined:_,attributes:A}),Je.indexingOperation}static getRecordCount(m){let A=i.getStats().entryCount,D=1e3/2,O=performance.now(),N=Math.floor(A/2),L=m?.exactCount,b=0,v=0,q;for(let{value:C}of i.getRange({start:!0,lazy:!0}))if(C!=null&&b++,v++,!L&&v<N&&performance.now()-O>D){q=v;break}if(q){let C=b;b=0;for(let{value:re}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:q}))re!=null&&b++;let G=q*2,H=(b+C)/G,Z=Math.pow((b-C+1)/q/2,2)+H*(1-H)/G,le=Math.max(Math.sqrt(Z)*A,1),ne=Math.round(H*A),Ue=Math.max(ne-1.96*le,b+C),ue=Math.min(ne+1.96*le,A),De=Math.pow(10,Math.round(Math.log10(le)));return De>ne&&(De=De/10),b=Math.round(ne/De)*De,{recordCount:b,estimatedRange:[Math.round(Ue),Math.round(ue)]}}return{recordCount:b}}static updatedAttributes(){js=this.propertyResolvers={$id:(m,A,D)=>({value:D.key}),$updatedtime:(m,A,D)=>D.version,$record:(m,A,D)=>D?{value:m}:m};for(let m of this.attributes){m.resolve=null;let A=m.relationship;if(A)if(m.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),lO=!0,A.to)m.elements?.definition?(js[m.name]=m.resolve=(D,O,N)=>{let L=D[A.from?A.from:t],b=m.elements.definition.tableClass;return N?Ga({attribute:A.to,value:L},yn(O).getReadTxn(),!1,b,!1).asArray:b.search([{attribute:A.to,value:L}],O).asArray},m.set=()=>{throw new Error("Setting a one-to-many relationship property is not supported")},m.resolve.definition=m.elements.definition,A.from&&(m.resolve.from=A.from)):console.error(`The one-to-many/many-to-many relationship property "${m.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(A.from){let D=m.definition||m.elements?.definition;D?(js[m.name]=m.resolve=(O,N,L)=>{let b=O[A.from];if(b!==void 0){if(m.elements){let v,q=b.map(C=>{let G=L?D.tableClass.primaryStore.getEntry(C,{transaction:yn(N).getReadTxn()}):D.tableClass.get(C,N);return G?.then&&(v=!0),G});return A.filterMissing?v?Promise.all(q).then(C=>C.filter(DG)):q.filter(DG):v?Promise.all(q):q}return L?D.tableClass.primaryStore.getEntry(b,{transaction:yn(N).getReadTxn()}):D.tableClass.get(b,N)}},m.set=(O,N)=>{if(Array.isArray(N)){let L=N.map(b=>b[Me]||b[D.tableClass.primaryKey]);O[A.from]=L}else{let L=N[Me]||N[D.tableClass.primaryKey];O[A.from]=L}},m.resolve.definition=m.definition||m.elements?.definition,m.resolve.from=A.from):console.error(`The relationship property "${m.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${m.name}" in table "${s}" must use either "from" or "to" arguments`)}oh(this,this)}static async deleteHistory(m=0){let A;for(let{key:D,value:O}of u.getRange({start:0,end:m}))await kl(),vt(O).tableId===n&&(A=u.remove(D));await A}static async*getHistory(m=0,A=1/0){for(let{key:D,value:O}of u.getRange({start:m,end:A})){await kl();let N=vt(O);N.tableId===n&&(yield{id:N.recordId,localTime:D,version:N.version,type:N.type,value:N.getValue(i,!0,D),user:N.user})}}static async getHistoryOfRecord(m){let A=[];if(m==null)throw new Error("An id is required");let D=i.getEntry(m);if(!D)return A;let O=D.localTime;if(!O)throw new Error("The entry does not have a local audit time");let N=0;do{await kl();let L=u.get(O);if(L){let b=vt(L);A.push({id:b.recordId,localTime:O,version:b.version,type:b.type,value:b.getValue(i,!0,O),user:b.user}),O=b.previousLocalTime}else break}while(N<1e3&&O);return A.reverse()}static cleanup(){J?.remove()}}Je.updatedAttributes();let Lq=Je.prototype;return Lq[Jie]=!0,E&&Je.setTTLExpiration(E/1e3),Q&&Mq(),Je;function i_(K,m,A){let D;for(let O in r){let N=r[O],L=N.isIndexing,b=A?.[O],v=m?.[O];if(b===v&&!L)continue;D=!0;let q=N.indexNulls,C=(0,$l.getIndexedValues)(b,q),G=(0,$l.getIndexedValues)(v,q);if(G?.length>0){let H=new Set(G);if(C=C?C.filter(Z=>{if(H.has(Z))H.delete(Z);else return!0}):[],G=Array.from(H),(G.length>0||C.length>0)&&bG){let Z=G.concat(C).map(le=>({key:le,value:K}));N.prefetch(Z,wG)}for(let Z=0,le=G.length;Z<le;Z++)N.remove(G[Z],K)}else C?.length>0&&bG&&N.prefetch(C.map(H=>({key:H,value:K})),wG);if(C)for(let H=0,Z=C.length;H<Z;H++)N.put(C[H],K)}return D}a(i_,"updateIndices");function dc(K){switch(typeof K){case"number":return!0;case"string":if(K.length<659)return!0;if(K.length>NG)throw new Error("Primary key size is too large: "+K.length);break;case"object":if(K===null)return!0;break;case"bigint":if(K<2n**64n&&K>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof K)}if((0,Ho.writeKey)(K,Xie,0)>NG)throw new Error("Primary key size is too large: "+K.length);return!0}a(dc,"checkValidId");function Dh(K,m,A,D,O){let N=a(()=>{if(m?.transaction?.stale&&(m.transaction.stale=!1),A.transaction?.isDone)return O(null,K);let L=i.getEntry(K,A);return L&&m&&(L?.version>(m.lastModified||0)&&(m.lastModified=L.version),L?.localTime&&!m.lastRefreshed&&(m.lastRefreshed=L.localTime)),O(L,K)},"whenPrefetched");return D?N():ce>0?(ce--,N()):new Promise((L,b)=>{ce===0?(ce--,i.prefetch([K],()=>{v(),q()})):(j.push(K),ae.push(q),j.length>Dq&&(ce--,v()));function v(){if(j.length>0){let C=ae;i.prefetch(j,()=>{ce===-1?v():ce++;for(let G of C)G()}),j=[],ae=[],de>2&&de--}else ce=de,de<Cq&&de++}a(v,"prefetch");function q(){try{L(N())}catch(C){b(C)}}a(q,"load")})}a(Dh,"loadLocalRecord");function o_(K){if(!K?.role)return;let m=K.role.permission;if(m.super_user)return Zie;let A=m[c],D,O=A?.tables;if(O)return O[s];if(c==="data"&&(D=m[s])&&!D.tables)return D}a(o_,"getTablePermissions");function Lh(K,m,A,D){if(I){let O;if(A.noCache?O=!0:(m?(!m.value||m.metadataFlags&(ql|Fl)||m.expiresAt&&m.expiresAt<Date.now())&&(O=!0):O=!0,Wr(!O,"cache-hit",s)),O){let N=dO(K,m,A).then(L=>(L?.value?.[Ee]&&it.error("Can not assign a record with a record property"),A&&(L?.version>(A.lastModified||0)&&(A.lastModified=L.version),A.lastRefreshed=Date.now()),L));if(A?.onlyIfCached||m?.value&&D?.allowStaleWhileRevalidate?.(m,K)){if(N.catch(L=>it.warn(L)),A?.onlyIfCached&&!D.doesExist())throw new rn.ServerError("Entry is not cached",504);return}else return N}}}a(Lh,"ensureLoadedFromSource");function yn(K){let m=K?.transaction;if(m){if(!m.lmdbDb)return m.lmdbDb=i,m;do{if(m.lmdbDb?.path===i.path)return m;let A=m.next;if(!A)return m=m.next=new no,m.lmdbDb=i,m;m=A}while(!0)}else return new Sd}a(yn,"txnForContext");function Mh(K,m,A){if(!K)return;wh=K;let D=K.value||K.deref?.()||(wh=i.getEntry(K.key))?.value;if(typeof m=="object"){let N=js,L=D;for(let b=0,v=m.length;b<v;b++){let q=m[b],C=N?.[q];L=C&&L?C(L,A,!0)?.value:L?.[q],N=C?.definition?.tableClass?.propertyResolvers}return L}let O=js[m];return O?O(D,A):D[m]}a(Mh,"getAttributeValue");function _O(K,m,A,D,O){let N=O?.length,L={transaction:D,lazy:N>0||typeof m=="string"||m?.length<4,alwaysPrefetch:!0},b;function v(q,C){let G=q?.value;if(!G)return vo.SKIP;for(let H=0;H<N;H++)if(!b?.includes(H)&&!O[H](G,q))return vo.SKIP;return C!==void 0&&(q.key=C),q}if(a(v,"processEntry"),N>0||!K.hasEntries){let q=K.map(C=>{if(b=null,typeof C=="object"&&C?.key!==void 0)return N>0?v(C):C;if(C==null)return vo.SKIP;for(let G=0;G<N;G++){let Z=O[G].idFilter;if(Z){if(!Z(C))return vo.SKIP;b||(b=[]),b.push(G)}}return Dh(C,A,L,!1,v)});return Array.isArray(K)&&(q=q.filter(C=>C!==vo.SKIP)),q.hasEntries=!0,q}return K}a(_O,"transformToEntries");async function dO(K,m,A){let D=m?.metadataFlags,O=m?.version,N,L;if(!i.attemptLock(K,O,()=>{clearTimeout(L);let C=i.getEntry(K);!C||!C.value||C.metadataFlags&(ql|Fl)?N(dO(K,i.getEntry(K),A)):N(C)}))return new Promise(C=>{N=C,L=setTimeout(()=>{i.unlock(K,O)},zie)});let b=m?.value,v={requestContext:A,replacingRecord:b,replacingVersion:O,noCacheStore:!1,source:null,resourceCache:A?.resourceCache},q=A?.responseHeaders;return new Promise((C,G)=>{let H;KA(rt(v,async Z=>{let le=performance.now(),ne,Ue,ue;try{for(let Se of Je.sources)if(Se.get&&(!Se.get.reliesOnPrototype||Se.prototype.get)&&(v.source=Se,ne=await Se.get(K,v),ne))break;ue=D&ql;let re=v.lastModified||ue&&O;Ue=ue||re>O||!b,re||(re=(0,$l.getNextMonotonicTime)());let X=performance.now()-le;if(Sr(X,"cache-resolution",s),q&&Tg(q,"Server-Timing",`cache-resolve;dur=${X.toFixed(2)}`,!0),Z.timestamp=re,E&&!v.expiresAt&&(v.expiresAt=Date.now()+E),ne){if(typeof ne!="object")throw new Error("Only objects can be cached and stored in tables");typeof ne.toJSON=="function"&&(ne=ne.toJSON()),t&&ne[t]!==K&&(ne[t]=K)}H=!0,C({version:re,value:ne})}catch(re){re.message+=` while resolving record ${K} for ${s}`,b&&((re.code==="ECONNRESET"||re.code==="ECONNREFUSED"||re.code==="EAI_AGAIN")&&!A?.mustRevalidate||A?.staleIfError&&(re.statusCode===500||re.statusCode===502||re.statusCode===503||re.statusCode===504))?(C({version:O,value:b}),it.trace(re.message,"(returned stale record)")):G(re),v.transaction.abort();return}if(A?.noCacheStore||v.noCacheStore){v.transaction.abort();return}yn(v).addWrite({key:K,store:i,entry:m,nodeName:"source",commit:(re,X)=>{if(X?.version!==O)return;let Se=i_(K,b,ne);ne?(Ne.put?.(v,K,ne),T(K,ne,X,re,0,h&&Ue||null,v,v.expiresAt,"put",!!ue)):(Ne.delete?.(v,K),h||p?T(K,null,X,re,0,h&&Ue||null,v,0,"delete",!!ue):i.remove(K,O))}})}),()=>{i.unlock(K,O)},Z=>{i.unlock(K,O),H&&it.error("Error committing cache update",Z)})})}a(dO,"getFromSource");function Ph(){if(He!==n_&&(n_=He,(0,Bo.getWorkerIndex)()===(0,Bo.getWorkerCount)()-1)){if(s_&&clearTimeout(s_),!He)return;let K=new Date;K.setMonth(0),K.setDate(1),K.setHours(0),K.setMinutes(0),K.setSeconds(0);let m=Math.ceil((Date.now()-K.getTime())/He)*He+K.getTime(),A=a(D=>{it.trace(`Scheduled next cleanup scan at ${new Date(D)}ms`),s_=setTimeout(()=>U=U.then(async()=>{if(A(Math.max(D+He,Date.now())),i.rootStore.status!=="open"){clearTimeout(s_);return}let O=50,N=new Array(O),L=0;it.trace(`Starting cleanup scan for ${s}`);try{let b=0;for(let{key:v,value:q,version:C,expiresAt:G}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let H;q===null&&!h&&C+Qie<Date.now()?H=i.remove(v,C):G&&G+f<Date.now()&&(H=Je.evict(v,q,C),b++),H&&(await N[L],N[L]=H.catch(Z=>{it.error("Cleanup error",Z)}),++L>=O&&(L=0)),await kl()}it.trace(`Finished cleanup scan for ${s}, evicted ${b} entries`)}catch(b){it.trace(`Error in cleanup scan for ${s}:`,b)}}),Math.min(D-Date.now(),2147483647)).unref()},"startNextTimer");A(m)}}a(Ph,"scheduleCleanup");function fO(){J=u?.addDeleteRemovalCallback(n,K=>{let m=i.getEntry(K);m?.value===null&&i.remove(K,m.version)})}a(fO,"addDeleteRemoval");function Mq(){(0,Bo.getWorkerIndex)()===0&&setInterval(async()=>{if(!Ch){Ch=!0;try{let K=Q.name,m=r[K];if(!m)throw new Error(`expiresAt attribute ${Q} must be indexed`);for(let A of m.getRange({start:!0,values:!1,end:Date.now(),snapshot:!1})){for(let D of m.getValues(A)){let O=i.getEntry(D);O?.value?O.value[K]<Date.now()&&Je.evict(D,O.value,O.version):i.ifVersion(D,O?.version,()=>m.remove(A,D))}await kl()}}catch(K){it.error("Error in evicting old records",K)}finally{Ch=!1}}},Wie).unref()}a(Mq,"runRecordExpirationEviction")}function YA(e,t){let r=e.attr_object||(e.attr_object={}),n=r[t];if(n)return n;n=r[t]=Object.create(null);for(let s of e)n[s.attribute_name]=s[t];return n}function wG(){}function eoe(e){MG=e}function uh(e,t){let r=t?.type;if(e===null)return e;if(e===""&&r&&r!=="String"&&r!=="Any")return null;switch(r){case"Int":case"Long":return e==="null"?null:parseInt(e);case"Float":return e==="null"?null:parseFloat(e);case"BigInt":return e==="null"?null:BigInt(e);case"Boolean":return e==="true"?!0:e==="false"?!1:e;case"Date":return isNaN(e)?e==="null"?null:(toe.test(e)||(e+="Z"),new Date(e)):new Date(+e);case void 0:case"Any":return(0,_h.autoCast)(e);default:return e}}function CG(e,t){if(e==null)return!0;if(!Array.isArray(t))return e===t;if(Array.isArray(e)){let r=e.length;if(e[r-1]===null&&r--,t.length>=r){for(let n=0;n<r;n++)if(t[n]!==e[n])return!1;return!0}return!1}else if(t[0]===e)return!0}function KA(e,t,r){return e?.then?e.then(t,r):t(e)}function lh(e,t){e[Lr]=t,e[Ee]=t?.value??null,e[Vl]=t?.version}function DG(e){return e!=null}function $n(e){try{return JSON.stringify(e)}catch{return e}}var Yn,vo,$l,LG,Wl,rn,Yl,Kl,it,Ho,Bo,_h,Kie,MG,Wie,Qie,bG,zie,Vl,Jie,Lr,Gl,yG,jie,$A,ac,ql,Fl,Xie,NG,IG,Zie,ATe,toe,kl,pE=Re(()=>{Yn=x(P()),vo=require("lmdb"),$l=x(vr()),LG=require("lodash");cn();_S();Wl=x(ee());OG();rn=x(se()),Yl=x(Ns()),Kl=x(Pn());Ae();nE();it=x($());Rd();so();Ho=require("ordered-binary"),Bo=x(We());ni();_h=x(z());Uc();Ds();ZE();el();Kie=new Uint8Array(9);Kie[8]=192;Wie=6e4,Qie=864e5;Wl.initSync();bG=Wl.get(Yn.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),zie=1e4,Vl=Symbol.for("version"),Jie=Symbol.for("incremental-update"),Lr=Symbol("entry"),Gl=Symbol("is-saving"),yG=1,jie=2,$A=Symbol("loaded-from-source"),ac={isNotification:!0,ensureLoaded:!1},ql=1,Fl=8,Xie=Buffer.allocUnsafeSlow(8192),NG=1978,IG=100,Zie={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},ATe=(0,_h.convertToMS)(Wl.get(Yn.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(dh,"makeTable");a(YA,"attributesAsObject");a(wG,"noop");a(eoe,"setServerUtilities");toe=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(uh,"coerceType");a(CG,"isDescendantId");kl=a(()=>new Promise(setImmediate),"rest");a(KA,"when");a(lh,"updateResource");a(DG,"exists");a($n,"stringify")});var ke={};Fe(ke,{database:()=>ua,databases:()=>ct,dropDatabase:()=>mS,dropTableMeta:()=>ooe,getDatabases:()=>mr,getDefaultCompression:()=>yf,getTables:()=>roe,onUpdatedTable:()=>rA,readMetaDb:()=>Ql,resetDatabases:()=>Ku,table:()=>Et,tables:()=>Br});function roe(){return ph||mr(),Br||{}}function mr(){if(ph)return ct;ph=!0,lc=new Map;let e=(0,St.getHdbBasePath)()&&(0,ot.join)((0,St.getHdbBasePath)(),Ut.DATABASES_DIR_NAME),t=(0,St.get)(Ut.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,St.get)(Ut.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,nn.existsSync)(e)?e:(0,ot.join)((0,St.getHdbBasePath)(),Ut.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,nn.existsSync)(e))for(let r of(0,nn.readdirSync)(e,{withFileTypes:!0})){let n=(0,ot.basename)(r.name,".mdb");r.isFile()&&(0,ot.extname)(r.name).toLowerCase()===".mdb"&&!t[n]?.path&&Ql((0,ot.join)(e,r.name),null,n)}if((0,nn.existsSync)((0,uc.getBaseSchemaPath)())){for(let r of(0,nn.readdirSync)((0,uc.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,ot.join)((0,uc.getBaseSchemaPath)(),r.name),s=(0,ot.join)((0,uc.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,nn.readdirSync)(n,{withFileTypes:!0}))if(i.isFile()&&(0,ot.extname)(i.name).toLowerCase()===".mdb"){let o=(0,ot.join)(s,i.name);Ql((0,ot.join)(n,i.name),(0,ot.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let n=t[r],s=n.path;if((0,nn.existsSync)(s))for(let o of(0,nn.readdirSync)(s,{withFileTypes:!0}))o.isFile()&&(0,ot.extname)(o.name).toLowerCase()===".mdb"&&Ql((0,ot.join)(s,o.name),(0,ot.basename)(o.name,".mdb"),r);let i=n.tables;if(i)for(let o in i){let c=i[o],u=(0,ot.join)(c.path,(0,ot.basename)(o+".mdb"));(0,nn.existsSync)(u)&&Ql(u,o,r,null,!0)}}for(let r in ct){let n=lc.get(r);if(n){let s=ct[r];r.includes("delete")&&bn.trace(`defined tables ${Array.from(n.keys())}`);for(let i in s)n.has(i)||(bn.trace(`delete table class ${i}`),delete s[i])}else if(delete ct[r],r==="data"){for(let s in Br)delete Br[s];delete Br[Sh]}}return lc=null,ct}}function Ku(){ph=!1;for(let[,e]of Bi)e.needsDeletion=!0;mr();for(let[e,t]of Bi)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),Bi.delete(e));return ct}function Ql(e,t,r=zA,n,s){let i=new WA.default(e,!1);try{let o=Bi.get(e);o?o.needsDeletion=!1:(o=(0,Eh.open)(i),Bi.set(e,o));let c=new xo.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(fh.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(n?(0,nn.existsSync)(n)&&(i.path=n,_=(0,Eh.open)(i),_.isLegacy=!0):_=XE(o));let l=BG(r),d=l[Sh],E=new Map;for(let{key:f,value:h}of u.getRange({start:!1})){let[p,S]=f.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 T=E.get(p);T||E.set(p,T={attributes:[]}),(S==null||h.is_hash_attribute)&&(T.primary=h),S!=null&&T.attributes.push(h),Object.defineProperty(h,"key",{value:f,configurable:!0})}for(let[f,h]of E){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){bn.fatal(`Unable to find a primary key attribute on table ${f}, with attributes: ${JSON.stringify(p)}`);continue}}let T=l[f],R={},y=[],I,B,U=typeof S.audit=="boolean"?S.audit:(0,St.get)(Ut.CONFIG_PARAMS.LOGGING_AUDITLOG),F=S.trackDeletes,M=S.expiration,Q=S.eviction,J=S.sealed;if(T)R=T.indices,y=T.attributes,T.schemaVersion++;else{I=S.tableId,I?I>=(u.get(cc)||0)&&u.putSync(cc,I+1):(S.tableId=I=u.get(cc),I||(I=1),u.putSync(cc,I+1),u.putSync(S.key,S));let j=new xo.default(!S.is_hash_attribute,S.is_hash_attribute);if(j.compression=S.compression,j.compression){let ae=(0,St.get)(Ut.CONFIG_PARAMS.STORAGE_COMPRESSION_THRESHOLD)||vG;j.compression.threshold=ae}B=y_(o.openDB(S.key,j)),B.rootStore=o,B.tableId=I}for(let j of p){j.attribute=j.name;try{if(!j.is_hash_attribute&&(j.indexed||j.attribute&&!j.name)){if(!R[j.name]){let ce=new xo.default(!j.is_hash_attribute,j.is_hash_attribute);R[j.name]=o.openDB(j.key,ce),R[j.name].indexNulls=j.indexNulls}let ae=y.find(ce=>ce.name===j.name);ae?y.splice(y.indexOf(ae),1,j):y.push(j)}}catch(ae){bn.error("Error trying to update attribute",j,y,R,ae)}}if(!T){T=HG(l,f,dh({primaryStore:B,auditStore:_,audit:U,sealed:J,expirationMS:M&&M*1e3,evictionMS:Q&&Q*1e3,trackDeletes:F,tableName:f,tableId:I,primaryKey:S.name,databasePath:s?r+"/"+f:r,databaseName:r,indices:R,attributes:p,schemaDefined:S.schemaDefined,dbisDB:u})),T.schemaVersion=1;for(let j of JA)j(T)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function BG(e){let t=ct[e];if(t||(e==="data"?t=ct[e]=Br:e==="system"?Object.defineProperty(ct,"system",{value:t=Object.create(null),configurable:!0}):t=ct[e]=Object.create(null)),lc&&!lc.has(e)){let r=new Set;t[Sh]=r,lc.set(e,r)}return t}function HG(e,t,r){return e[t]=r,r}function ua({database:e,table:t}){e||(e=zA),mr();let r=BG(e),n=(0,ot.join)((0,St.getHdbBasePath)(),Ut.DATABASES_DIR_NAME),s=(0,St.get)(Ut.CONFIG_PARAMS.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(s.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&s[e]?.tables?.[t]?.path;n=i||s[e]?.path||process.env.STORAGE_PATH||(0,St.get)(Ut.CONFIG_PARAMS.STORAGE_PATH)||((0,nn.existsSync)(n)?n:(0,ot.join)((0,St.getHdbBasePath)(),Ut.LEGACY_DATABASES_DIR_NAME));let o=(0,ot.join)(n,(i?t:e)+".mdb"),c=Bi.get(o);if(!c){let u=new WA.default(o,!1);c=(0,Eh.open)(u),Bi.set(o,c)}return c}async function mS(e){if(!ct[e])throw new Error("Schema does not exist");let t=ct[e],r;for(let n in t)r=t[n].primaryStore.rootStore,Bi.delete(r.path),r.status==="open"&&(await r.close(),await zl.remove(r.path));if(r||(r=ua({database:e,table:null}),r.status==="open"&&(await r.close(),await zl.remove(r.path))),e==="data"){for(let n in Br)delete Br[n];delete Br[Sh]}delete ct[e]}function Et({table:e,database:t,expiration:r,eviction:n,scanInterval:s,attributes:i,audit:o,sealed:c,trackDeletes:u,schemaDefined:_,origin:l}){t||(t=zA);let d=ua({database:t,table:e}),E=ct[t],f=E?.[e];if(d.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let h,p,S,T;_==null&&(_=!0);let R=new xo.default(!1);for(let M of i)M.attribute&&!M.name?(M.name=M.attribute,M.indexed=!0):M.attribute=M.name,M.expiresAt&&(M.indexed=!0);let y,I;if(f){if(h=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 M=d.auditStore;M||(M=XE(d)),p=i.find(ae=>ae.isPrimaryKey)||{},h=p.name,p.is_hash_attribute=!0,p.schemaDefined=_,p.compression=yf(),u&&(p.trackDeletes=!0),o=p.audit=typeof o=="boolean"?o:(0,St.get)(Ut.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(p.expiration=r),n&&(p.eviction=n),typeof c=="boolean"&&(p.sealed=c),l&&(p.origins?p.origins.includes(l)||p.origins.push(l):p.origins=[l]),bn.trace(`${e} table loading, opening primary store`);let Q=new xo.default(!1,!0);Q.compression=p.compression;let J=e+"/",j=y_(d.openDB(J,Q));j.rootStore=d,T=d.dbisDb=d.openDB(fh.INTERNAL_DBIS_NAME,R),j.tableId=T.get(cc),j.tableId||(j.tableId=1),T.putSync(cc,j.tableId+1),p.tableId=j.tableId,f=HG(E,e,dh({primaryStore:j,auditStore:M,audit:o,sealed:c,trackDeletes:u,expirationMS:r&&r*1e3,evictionMS:n&&n*1e3,primaryKey:h,tableName:e,tableId:j.tableId,databasePath:t,databaseName:t,indices:{},attributes:i,schemaDefined:_,dbisDB:T})),f.schemaVersion=1,y=!0,F(),T.put(J,p)}S=f.indices,T=T||(d.dbisDb=d.openDB(fh.INTERNAL_DBIS_NAME,R)),f.dbisDB=T;let B=[];for(let{key:M,value:Q}of T.getRange({start:!0})){let[J,j]=M.toString().split("/");if(j===""&&(j=Q.name),j){if(J!==e)continue}else j=J;if(!i.find(ce=>ce.name===j)?.indexed&&Q.indexed&&!Q.isPrimaryKey){F(),y=!0,T.remove(M);let ce=f.indices[J];ce&&B.push(ce)}}let U=[];try{for(let M of i||[]){if(M.relationship)continue;let Q=e+"/"+(M.name||"");Object.defineProperty(M,"key",{value:Q,configurable:!0});let J=T.get(Q);if(M.isPrimaryKey){if(J=J||T.get(Q=e+"/")||{},o!==f.audit||c!==c||(+r||void 0)!==(+J.expiration||void 0)||(+n||void 0)!==(+J.eviction||void 0)){let ae=Object.assign({},J);typeof o=="boolean"&&(o&&f.enableAuditing(o),ae.audit=o),r&&(ae.expiration=+r),n&&(ae.eviction=+n),c!==void 0&&(ae.sealed=c),y=!0,F(),T.put(Q,ae)}continue}J?.attribute&&!J.name&&(J.indexed=!0);let j=!J||J.type!==M.type||J.indexed!==M.indexed||J.nullable!==M.nullable||JSON.stringify(J.attributes)!==JSON.stringify(M.attributes)||JSON.stringify(J.elements)!==JSON.stringify(M.elements);if(M.indexed){let ae=new xo.default(!0,!1),ce=d.openDB(Q,ae);(j||J.indexingPID&&J.indexingPID!==process.pid||J.restartNumber<Jl.workerData?.restartNumber)&&(y=!0,F(),J=T.get(Q),(j||J.indexingPID&&J.indexingPID!==process.pid||J.restartNumber<Jl.workerData?.restartNumber)&&(y=!0,M.indexNulls===void 0&&(M.indexNulls=!0),f.primaryStore.getStats().entryCount>0&&(M.lastIndexedKey=J?.lastIndexedKey||!1,M.indexingPID=process.pid,ce.isIndexing=!0,Object.defineProperty(M,"dbi",{value:ce}),U.push(M))),T.put(Q,M)),J?.indexNulls&&M.indexNulls===void 0&&(M.indexNulls=!0),ce.indexNulls=M.indexNulls,S[M.name]=ce}else j&&(y=!0,F(),T.put(Q,M))}}finally{I&&I()}if(y&&(f.schemaVersion++,f.updatedAttributes()),bn.trace(`${e} table loading, running index`),U.length>0||B.length>0?f.indexingOperation=ioe(f,U,B):y&&hh.signalSchemaChange(new mh.SchemaEventMsg(process.pid,"schema-change",f.databaseName,f.tableName)),f.origin=l,y)for(let M of JA)M(f,l!=="cluster");return(r||n||s)&&f.setTTLExpiration({expiration:r,eviction:n,scanInterval:s}),bn.trace(`${e} table loaded`),f;function F(){I||d.transactionSync(()=>({then(M){I=M}}))}a(F,"startTxn")}async function ioe(e,t,r){try{let n=e.schemaVersion;await hh.signalSchemaChange(new mh.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let u of r)s=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++,s=e.primaryStore.ifVersion(_,d,()=>{for(let E=0;E<c;E++){let f=t[E],h=f.name,p=(0,PG.getIndexedValues)(l[h]);if(p)for(let S=0,T=p.length;S<T;S++)f.dbi.put(p[S],_)}}),s.then(()=>u--,E=>{u--,bn.error(E)}),Jl.workerData&&Jl.workerData.restartNumber!==UG.restartNumber&&(i=!0),++o%100===0||i){for(let E of t)E.lastIndexedKey=_,e.dbisDB.put(E.key,E);if(i)return}u>noe?await s:u>soe&&await new Promise(E=>setImmediate(E))}for(let _ of t)delete _.lastIndexedKey,delete _.indexingPID,_.dbi.isIndexing=!1,s=e.dbisDB.put(_.key,_)}await s,await hh.signalSchemaChange(new mh.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(n){bn.error("Error in indexing",n)}}function ooe({table:e,database:t}){let r=ua({database:t,table:e}),n=[],s=r.dbisDb;for(let i of s.getKeys({start:e+"/",end:e+"0"}))n.push(s.remove(i));return Promise.all(n)}function rA(e){JA.push(e)}function yf(){let e=(0,St.get)(Ut.CONFIG_PARAMS.STORAGE_COMPRESSION),t=(0,St.get)(Ut.CONFIG_PARAMS.STORAGE_COMPRESSION_DICTIONARY),r=(0,St.get)(Ut.CONFIG_PARAMS.STORAGE_COMPRESSION_THRESHOLD)||vG,n={startingOffset:32};return t&&(n.dictionary=zl.readFileSync(t)),r&&(n.threshold=r),e&&n}var St,fh,Eh,ot,nn,uc,xo,WA,Ut,zl,QA,PG,hh,mh,Jl,bn,UG,zA,Sh,vG,Br,ct,cc,JA,ph,Bi,lc,noe,soe,Ae=Re(()=>{St=x(ee()),fh=x(ft()),Eh=require("lmdb"),ot=require("path"),nn=require("fs"),uc=x(je());pE();xo=x(vc()),WA=x(Bc()),Ut=x(P()),zl=x(require("fs-extra")),QA=require("../index"),PG=x(vr()),hh=x(Ns()),mh=x(Pn()),Jl=require("worker_threads"),bn=x($()),UG=x(We());ni();Uc();zA="data",Sh=Symbol("defined-tables"),vG=((0,St.get)(Ut.CONFIG_PARAMS.STORAGE_PAGESIZE)||4096)-60;(0,St.initSync)();Br=Object.create(null),ct=Object.create(null);(0,QA._assignPackageExport)("databases",ct);(0,QA._assignPackageExport)("tables",Br);cc=Symbol.for("next-table-id"),JA=[],Bi=new Map;a(roe,"getTables");a(mr,"getDatabases");a(Ku,"resetDatabases");a(Ql,"readMetaDb");a(BG,"ensureDB");a(HG,"setTable");a(ua,"database");a(mS,"dropDatabase");a(Et,"table");noe=1e3,soe=10;a(ioe,"runIndexing");a(ooe,"dropTableMeta");a(rA,"onUpdatedTable");a(yf,"getDefaultCompression")});var z=g((LTe,jG)=>{"use strict";var Hi=require("path"),kG=require("fs-extra"),Mr=$(),xG=require("fs-extra"),Th=require("os"),aoe=require("net"),coe=require("recursive-iterator"),dt=P(),uoe=KO(),GG=require("papaparse"),gh=require("moment"),{inspect:loe}=require("util"),qG=require("is-number"),DTe=require("lodash"),_oe=require("minimist"),doe=require("https"),foe=require("http"),{hdb_errors:Rh}=se(),Eoe=/^((\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)))$/,VG=require("util").promisify(setTimeout),hoe=100,moe=5,poe="",Soe=4,FG={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};jG.exports={isEmpty:sn,isEmptyOrZeroLength:ps,arrayHasEmptyValues:Roe,arrayHasEmptyOrZeroLengthValues:Aoe,buildFolderPath:Ooe,isBoolean:$G,errorizeMessage:Toe,stripFileExtension:yoe,autoCast:Noe,autoCastJSON:YG,autoCastJSONDeep:XA,removeDir:Ioe,compareVersions:woe,isCompatibleDataVersion:Coe,escapeRawValue:Doe,unescapeValue:Loe,stringifyProps:Moe,timeoutPromise:Uoe,isClusterOperation:Boe,getClusterUser:xoe,checkGlobalSchemaTable:Hoe,getHomeDir:WG,getPropsFilePath:Poe,promisifyPapaParse:Goe,removeBOM:QG,createEventPromise:qoe,checkProcessRunning:Foe,checkSchemaTableExist:koe,checkSchemaExists:zG,checkTableExists:JG,getStartOfTomorrowInSeconds:Voe,getLimitKey:$oe,isObject:boe,isNotEmptyAndHasValue:goe,autoCasterIsNumberCheck:KG,backtickASTSchemaItems:Yoe,isPortTaken:voe,createForkArgs:Koe,autoCastBoolean:Woe,async_set_timeout:VG,getTableHashAttribute:Qoe,doesSchemaExist:zoe,doesTableExist:Joe,stringifyObj:joe,ms_to_time:Xoe,changeExtension:Zoe,getEnvCliRootPath:ZA,noBootFile:eae,httpRequest:tae,transformReq:rae,convertToMS:nae,PACKAGE_ROOT:dt.PACKAGE_ROOT};function Toe(e){return e instanceof Error?e:new Error(e)}a(Toe,"errorizeMessage");function sn(e){return e==null}a(sn,"isEmpty");function goe(e){return!sn(e)&&(e||e===0||e===""||$G(e))}a(goe,"isNotEmptyAndHasValue");function ps(e){return sn(e)||e.length===0||e.size===0}a(ps,"isEmptyOrZeroLength");function Roe(e){if(sn(e))return!0;for(let t=0;t<e.length;t++)if(sn(e[t]))return!0;return!1}a(Roe,"arrayHasEmptyValues");function Aoe(e){if(ps(e))return!0;for(let t=0;t<e.length;t++)if(ps(e[t]))return!0;return!1}a(Aoe,"arrayHasEmptyOrZeroLengthValues");function Ooe(...e){try{return e.join(Hi.sep)}catch{console.error(e)}}a(Ooe,"buildFolderPath");function $G(e){return sn(e)?!1:e===!0||e===!1}a($G,"isBoolean");function boe(e){return sn(e)?!1:typeof e=="object"}a(boe,"isObject");function yoe(e){return ps(e)?poe:e.slice(0,-Soe)}a(yoe,"stripFileExtension");function Noe(e){return sn(e)||e===""||typeof e!="string"?e:FG[e]!==void 0?FG[e]:KG(e)===!0?Number(e):Eoe.test(e)?new Date(e):e}a(Noe,"autoCast");function YG(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(YG,"autoCastJSON");function XA(e){if(e&&typeof e=="object"){if(Array.isArray(e))for(let t=0,r=e.length;t<r;t++){let n=e[t],s=XA(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=XA(r);n!==r&&(e[t]=n)}return e}else return YG(e)}a(XA,"autoCastJSONDeep");function KG(e){if(e.startsWith("0.")&&qG(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&qG(e))}a(KG,"autoCasterIsNumberCheck");async function Ioe(e){if(ps(e))throw new Error(`Directory path: ${e} does not exist`);try{await xG.emptyDir(e),await xG.remove(e)}catch(t){throw Mr.error(`Error removing files in ${e} -- ${t}`),t}}a(Ioe,"removeDir");function woe(e,t){if(ps(e)){Mr.info("Invalid current version sent as parameter.");return}if(ps(t)){Mr.info("Invalid upgrade version sent as parameter.");return}let r,n=/(\.0+)+$/,s=e.version?e.version:e,i=t.version?t.version:t,o=s.replace(n,"").split("."),c=i.replace(n,"").split("."),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(woe,"compareVersions");function Coe(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(Coe,"isCompatibleDataVersion");function Doe(e){if(sn(e))return e;let t=String(e);return t==="."?dt.UNICODE_PERIOD:t===".."?dt.UNICODE_PERIOD+dt.UNICODE_PERIOD:t.replace(dt.FORWARD_SLASH_REGEX,dt.UNICODE_FORWARD_SLASH)}a(Doe,"escapeRawValue");function Loe(e){if(sn(e))return e;let t=String(e);return t===dt.UNICODE_PERIOD?".":t===dt.UNICODE_PERIOD+dt.UNICODE_PERIOD?"..":String(e).replace(dt.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(Loe,"unescapeValue");function Moe(e,t){if(sn(e))return Mr.info("Properties object is null"),"";let r="";return e.each(function(n,s){try{if(t&&t[n]){let i=t[n];for(let o of i)r+=";"+o+Th.EOL}!ps(n)&&n[0]===";"?r+=" "+n+s+Th.EOL:ps(n)||(r+=n+"="+s+Th.EOL)}catch{Mr.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(Moe,"stringifyProps");function WG(){let e;try{e=Th.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(WG,"getHomeDir");function Poe(){let e=Hi.join(WG(),dt.HDB_HOME_DIR_NAME,dt.BOOT_PROPS_FILE_NAME);return kG.existsSync(e)||(e=Hi.join(__dirname,"../","hdb_boot_properties.file")),e}a(Poe,"getPropsFilePath");function Uoe(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:function(){clearTimeout(r)}}}a(Uoe,"timeoutPromise");async function voe(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=aoe.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a(voe,"isPortTaken");function Boe(e){try{return dt.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){Mr.error(`Error checking operation against cluster ops ${t}`)}return!1}a(Boe,"isClusterOperation");function Hoe(e,t){let r=(Ae(),ie(ke)).getDatabases();if(!r[e])return Rh.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return Rh.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Hoe,"checkGlobalSchemaTable");function xoe(e,t){if(sn(t)){Mr.warn("No CLUSTERING_USER defined, clustering disabled");return}if(sn(e)||ps(e)){Mr.warn("No users to search.");return}let r;try{let n=e.get(t);n&&n.role.permission.cluster_user===!0&&n.active===!0&&(r=n)}catch(n){Mr.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){Mr.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(xoe,"getClusterUser");function Goe(){GG.parsePromise=function(e,t,r){return new Promise(function(n,s){GG.parse(e,{header:!0,transformHeader:QG,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(Goe,"promisifyPapaParse");function QG(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(QG,"removeBOM");function qoe(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;Mr.info(`Got cluster status event response: ${loe(s)}`);try{i.cancel()}catch{Mr.error("Error trying to cancel timeout.")}n(s)})})}a(qoe,"createEventPromise");async function Foe(e){let t=!0,r=0;do await VG(hoe*r++),(await uoe.findPs(e)).length>0&&(t=!1);while(t&&r<moe);if(t)throw new Error(`process ${e} was not started`)}a(Foe,"checkProcessRunning");function koe(e,t){let r=zG(e);if(r)return r;let n=JG(e,t);if(n)return n}a(koe,"checkSchemaTableExist");function zG(e){let{getDatabases:t}=(Ae(),ie(ke));if(!t()[e])return Rh.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(zG,"checkSchemaExists");function JG(e,t){let{getDatabases:r}=(Ae(),ie(ke));if(!r()[e][t])return Rh.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(JG,"checkTableExists");function Voe(){let e=gh().utc().add(1,dt.MOMENT_DAYS_TAG).startOf(dt.MOMENT_DAYS_TAG).unix(),t=gh().utc().unix();return e-t}a(Voe,"getStartOfTomorrowInSeconds");function $oe(){return gh().utc().format("DD-MM-YYYY")}a($oe,"getLimitKey");function Yoe(e){try{let t=new coe(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){Mr.error("Got an error back ticking items."),Mr.error(t)}}a(Yoe,"backtickASTSchemaItems");function Koe(e){return[e]}a(Koe,"createForkArgs");function Woe(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(Woe,"autoCastBoolean");function Qoe(e,t){let{getDatabases:r}=(Ae(),ie(ke)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(Qoe,"getTableHashAttribute");function zoe(e){let{getDatabases:t}=(Ae(),ie(ke));return t()[e]!==void 0}a(zoe,"doesSchemaExist");function Joe(e,t){let{getDatabases:r}=(Ae(),ie(ke));return r()[e]?.[t]!==void 0}a(Joe,"doesTableExist");function joe(e){try{return JSON.stringify(e)}catch{return e}}a(joe,"stringifyObj");function Xoe(e){let t=gh.duration(e),r=t.seconds()>0?t.seconds()+"s":"",n=t.minutes()>0?t.minutes()+"m ":"",s=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+s+n+r}a(Xoe,"ms_to_time");function Zoe(e,t){let r=Hi.basename(e,Hi.extname(e));return Hi.join(Hi.dirname(e),r+t)}a(Zoe,"changeExtension");function ZA(){if(process.env[dt.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[dt.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=_oe(process.argv);if(e[dt.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[dt.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(ZA,"getEnvCliRootPath");var jA;function eae(){if(jA)return jA;let e=ZA();if(ZA()&&kG.pathExistsSync(Hi.join(e,dt.HDB_CONFIG_FILE)))return jA=!0,!0}a(eae,"noBootFile");function tae(e,t){let r;return e.protocol==="http:"?r=foe:r=doe,new Promise((n,s)=>{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",()=>{n(c)})});i.on("error",o=>{s(o)}),i.write(JSON.stringify(t)),i.end()})}a(tae,"httpRequest");function rae(e){if(!e.schema&&!e.database){e.schema=dt.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(rae,"transformReq");function nae(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(nae,"convertToMS")});var ee=g((PTe,rq)=>{"use strict";var eO=require("fs-extra"),Go=require("path"),XG=require("os"),sae=require("properties-reader"),Xl=$(),jl=z(),_e=P(),Ah=Er(),iae="Error initializing environment manager",Oh="BOOT_PROPS_FILE_PATH",ZG=!1,oae={[_e.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},zs={};rq.exports={BOOT_PROPS_FILE_PATH:Oh,getHdbBasePath:aae,setHdbBasePath:cae,get:eq,initSync:lae,setProperty:Pe,initTestEnvironment:dae,setCloneVar:_ae};function aae(){return zs[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(aae,"getHdbBasePath");function cae(e){zs[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(cae,"setHdbBasePath");function eq(e){let t=Ah.getConfigValue(e);return t===void 0?zs[e]:t}a(eq,"get");function Pe(e,t){oae[e]&&(zs[e]=t),Ah.updateConfigObject(e,t)}a(Pe,"setProperty");function uae(){let e;try{e=jl.getPropsFilePath(),eO.accessSync(e,eO.constants.F_OK|eO.constants.R_OK),ZG=!0;let t=sae(e);return zs[_e.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(_e.HDB_SETTINGS_NAMES.INSTALL_USER),zs[_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),zs[Oh]=e,!0}catch{return Xl.trace(`Environment manager found no properties file at ${e}`),!1}}a(uae,"doesPropFileExist");function lae(e=!1){try{(ZG||uae()||jl.noBootFile())&&!tq&&(Ah.initConfig(e),zs[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Ah.getConfigValue(_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Xl.error(iae),Xl.error(t),console.error(t),process.exit(1)}}a(lae,"initSync");var tq=!1;function _ae(e){tq=e}a(_ae,"setCloneVar");function dae(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:n,https_enabled:s,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,u=Go.join(__dirname,"../../","unitTests");zs[Oh]=Go.join(u,"hdb_boot_properties.file"),Pe(_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Go.join(u,"settings.test")),Pe(_e.HDB_SETTINGS_NAMES.INSTALL_USER,XG.userInfo()?XG.userInfo().username:void 0),Pe(_e.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Pe(_e.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Go.join(u,"envDir","log")),Pe(_e.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Pe(_e.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Pe(_e.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Pe(_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Go.join(u,"envDir")),Pe(_e.CONFIG_PARAMS.STORAGE_PATH,Go.join(u,"envDir")),s&&(Pe(_e.CONFIG_PARAMS.HTTP_SECUREPORT,eq(_e.CONFIG_PARAMS.HTTP_PORT)),Pe(_e.CONFIG_PARAMS.HTTP_PORT,null)),Pe(_e.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),Pe(_e.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Pe(_e.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,jl.isEmpty(i)?!1:i),Pe(_e.CONFIG_PARAMS.HTTP_CORS,jl.isEmpty(i)?!1:i),Pe(_e.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Pe(_e.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Pe(_e.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Pe(_e.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Pe(_e.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Go.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Pe(_e.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,jl.isEmpty(c)?!1:c),o&&(Pe("CORS_ACCESSLIST",o),Pe(_e.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(Pe(_e.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),Pe(_e.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(Pe(_e.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Pe(_e.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(Pe(_e.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Pe(_e.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Oh}. Please check your boot props and settings files`;Xl.fatal(r),Xl.error(t)}}a(dae,"initTestEnvironment")});var aq=g((vTe,oq)=>{"use strict";var iq=require("joi"),{string:Zl,boolean:nq,array:fae}=iq.types(),sq=P(),Eae=Xe();oq.exports=hae;function hae(e){let t=iq.object({operation:Zl.valid(sq.OPERATIONS_ENUM.ADD_NODE,sq.OPERATIONS_ENUM.UPDATE_NODE).required(),node_name:Zl.required(),subscriptions:fae.items({schema:Zl.required(),table:Zl.optional(),hash_attribute:Zl.optional(),subscribe:nq.required(),publish:nq.required()}).min(1).required()});return Eae.validateBySchema(e,t)}a(hae,"updateRemoteSourceValidator")});var e_=g((HTe,cq)=>{"use strict";var tO=class{static{a(this,"UpdateRemoteResponseObject")}constructor(t,r,n=void 0){this.status=t,this.message=r,this.system_info=n}};cq.exports=tO});var dq=g((GTe,_q)=>{"use strict";var mae=aq(),Js=$(),rO=Ve(),pae=P(),nO=fn(),qo=ut(),uq=bu(),Sae=hd(),{Node:Tae,NodeSubscription:lq}=Ti(),sO=e_(),iO=z(),gae=ee(),{cloneDeep:Rae}=require("lodash"),{broadcast:Aae}=We();_q.exports=Oae;async function Oae(e){try{let t=mae(e);if(t)return Js.error(`Validation error in updateRemoteSource: ${t.message}`),new sO(rO.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,t.message);let{subscriptions:r,node_name:n,system_info:s}=e,i=[],o=Rae(await nO.getNodeRecord(n)),c=!iO.isEmptyOrZeroLength(o);o=c?o[0]:o,c&&Js.trace(`Existing record found for ${n}, updating records subscriptions`);for(let _=0,l=r.length;_<l;_++){let d=r[_],E=d.schema,f=d.table;if(!iO.doesSchemaExist(E)){Js.trace(`updateRemoteSource creating schema: ${E}`);try{await uq.createSchema({operation:"create_schema",schema:E})}catch(h){Js.error(h)}}if(f&&!iO.doesTableExist(E,f)){let h=new Sae(E,f,d.hash_attribute);d.attributes&&(h.attributes=d.attributes),Js.trace(`updateRemoteSource creating table: ${f} in schema: ${E} with attributes: ${JSON.stringify(d.attributes)}`);try{await uq.createTable(h)}catch(p){Js.error(p)}}if(Js.trace(`Creating local stream for ${E}.${f}`),await qo.createLocalTableStream(E,f),c?(await qo.updateConsumerIterator(E,f,n,"stop"),await qo.updateRemoteConsumer(d,n),d.subscribe===!0&&await qo.updateConsumerIterator(E,f,n,"start")):(await qo.updateRemoteConsumer(d,n),d.subscribe===!0?await qo.updateConsumerIterator(E,f,n,"start"):await qo.updateConsumerIterator(E,f,n,"stop")),c){let h=!1;for(let p=0,S=o.subscriptions.length;p<S;p++){let T=o.subscriptions[p];if(T.schema===E&&T.table===f){T.publish=d.publish,T.subscribe=d.subscribe,h=!0;break}}h||o.subscriptions.push(new lq(E,f,d.publish,d.subscribe))}else i.push(new lq(E,f,d.publish,d.subscribe))}c||(o=new Tae(n,i,void 0),Js.trace(`No record found for ${n}, creating a new one`));let u=Object.create({});return Object.assign(u,o),u.system_info=s,await nO.upsertNodeRecord(u),Aae({type:"nats_update"}),new sO(rO.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,`Node ${gae.get(pae.CONFIG_PARAMS.CLUSTERING_NODENAME)} successfully updated remote source`,await nO.getSystemInfo())}catch(t){Js.error(t);let r=t.message?t.message:t;return new sO(rO.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(Oae,"updateRemoteSource")});var mq=g((FTe,hq)=>{"use strict";var Eq=require("joi"),{string:fq}=Eq.types(),bae=P(),yae=Xe();hq.exports=Nae;function Nae(e){let t=Eq.object({operation:fq.valid(bae.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:fq.required()});return yae.validateBySchema(e,t)}a(Nae,"removeRemoteSourceValidator")});var Tq=g((VTe,Sq)=>{"use strict";var Iae=mq(),bh=$(),yh=Ve(),oO=P(),wae=fn(),Cae=z(),pq=ut(),Dae=ee(),Nh=e_(),{NodeSubscription:Lae}=Ti(),Mae=aa(),Pae=ci(),{broadcast:Uae}=We(),vae=Dae.get(oO.CONFIG_PARAMS.CLUSTERING_NODENAME);Sq.exports=Bae;async function Bae(e){try{let t=Iae(e);if(t)return bh.error(`Validation error in removeRemoteSource: ${t.message}`),new Nh(yh.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,t.message);let r=e.node_name,n=await wae.getNodeRecord(r);if(Cae.isEmptyOrZeroLength(n)){let i=`No record found for node '${r}'`;return bh.error(i),new Nh(yh.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,i)}n=n[0];for(let i=0,o=n.subscriptions.length;i<o;i++){let c=n.subscriptions[i];bh.trace(`remove remote source removing subscription: ${c.schema}.${c.table} for node: ${r}`);let u=new Lae(c.schema,c.table,!1,!1);await pq.updateConsumerIterator(c.schema,c.table,r,"stop"),await pq.updateRemoteConsumer(u,r)}let s=new Mae(oO.SYSTEM_SCHEMA_NAME,oO.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await Pae.deleteRecord(s),Uae({type:"nats_update"}),new Nh(yh.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,`Node ${vae} successfully removed node '${r}'.`)}catch(t){bh.error(t);let r=t.message?t.message:t;return new Nh(yh.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(Bae,"removeRemoteSource")});var Oq=g((YTe,Aq)=>{"use strict";var Ih=$(),t_=P(),gq=Ve(),aO=ee(),Hae=z(),Rq=e_(),xae=fn(),Gae=Kd(),qae=qr();Aq.exports=Fae;async function Fae(e){try{Ih.trace("getRemoteSourceConfig called");let t=process.uptime()*1e3,r=Hae.ms_to_time(t),n=new kae(aO.get(t_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),aO.get(t_.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT)??aO.get(t_.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_SECUREPORT),r,await xae.getSystemInfo());try{let s={name:e.node_name,system_info:e.system_info},i=new Gae(t_.SYSTEM_SCHEMA_NAME,t_.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[s]);await qae.update(i)}catch(s){Ih.error("Get remote config encountered an error updating system info for node:",e.node_name,s)}return Ih.trace("getRemoteSourceConfig response:",n),new Rq(gq.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,n)}catch(t){Ih.error(t);let r=t.message?t.message:t;return new Rq(gq.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(Fae,"getRemoteSourceConfig");function kae(e,t,r,n){this.uptime=r,this.ports={clustering:e,operations_api:t},this.system_info=n}a(kae,"ConfigResponseObject")});var Iq=g((WTe,Nq)=>{"use strict";var bq=ee();bq.initSync();var yq=ut(),r_=$(),_c=P(),cO=Ve(),Vae=dq(),$ae=Tq(),Yae=Oq(),Kae=e_(),{encode:Wae,decode:Qae}=require("msgpackr"),zae=ys(),Jae=bs(),jae=require("util"),Xae=P(),{isMainThread:Zae,parentPort:ece}=require("worker_threads");We();var tce=jae.promisify(zae.setSchemaDataToGlobal),uO=bq.get(_c.CONFIG_PARAMS.CLUSTERING_NODENAME);Nq.exports=rce;async function rce(){try{r_.notify("Starting reply service."),await tce();let e=await yq.getConnection(),t=`${uO}.__request__`,r=e.subscribe(t,{queue:uO});await nce(r)}catch(e){r_.error(e)}}a(rce,"initialize");async function nce(e){for await(let t of e){let r=Qae(t.data),n;switch(r.operation){case _c.OPERATIONS_ENUM.ADD_NODE:case _c.OPERATIONS_ENUM.UPDATE_NODE:n=await Vae(r);break;case _c.OPERATIONS_ENUM.REMOVE_NODE:n=await $ae(r);break;case _c.OPERATIONS_ENUM.CLUSTER_STATUS:n=await Yae(r);break;case _c.OPERATIONS_ENUM.DESCRIBE_ALL:n=await sce();break;default:let s=`node '${uO}' reply service received unrecognized request operation`;r_.error(s),n=new Kae(cO.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,s)}r_.trace(n),t.respond(Wae(n))}}a(nce,"handleRequest");async function sce(){try{return{status:cO.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,message:await Jae.describeAll()}}catch(e){return r_.error(e),{status:cO.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,message:e.message}}}a(sce,"getRemoteDescribeAll");Zae||ece.on("message",async e=>{let{type:t}=e;t===Xae.ITC_EVENT_TYPES.SHUTDOWN&&yq.closeConnection()})});var ice=Iq();(async()=>{try{await ice()}catch(e){console.error("Error launching Nats reply service."),console.error(e)}})();
|