harperdb 4.2.8 → 4.3.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/bin/harperdb.js +57 -63
- package/bin/lite.js +18 -26
- package/config/yaml/defaultConfig.yaml +2 -0
- package/launchServiceScripts/launchInstallNATSServer.js +3 -3
- package/launchServiceScripts/launchNatsIngestService.js +18 -21
- package/launchServiceScripts/launchNatsReplyService.js +18 -21
- package/launchServiceScripts/launchUpdateNodes4-0-0.js +18 -21
- package/npm-shrinkwrap.json +844 -1216
- package/package.json +19 -17
- package/resources/DatabaseTransaction.d.ts +3 -1
- package/resources/RecordEncoder.d.ts +1 -0
- package/resources/Resource.d.ts +6 -17
- package/resources/Table.d.ts +50 -36
- package/resources/auditStore.d.ts +2 -2
- package/resources/crdt.d.ts +19 -0
- package/resources/databases.d.ts +32 -36
- package/resources/search.d.ts +6 -21
- package/resources/tracked.d.ts +7 -1
- package/resources/transactionBroadcast.d.ts +1 -1
- package/server/Server.d.ts +1 -1
- package/server/jobs/jobProcess.js +18 -21
- package/server/threads/threadServer.js +18 -26
- package/studio/build-local/asset-manifest.json +53 -0
- package/studio/build-local/fontawesome/fa-brands-400.eot +0 -0
- package/studio/build-local/fontawesome/fa-brands-400.svg +3717 -0
- package/studio/build-local/fontawesome/fa-brands-400.ttf +0 -0
- package/studio/build-local/fontawesome/fa-brands-400.woff +0 -0
- package/studio/build-local/fontawesome/fa-brands-400.woff2 +0 -0
- package/studio/build-local/fontawesome/fa-regular-400.eot +0 -0
- package/studio/build-local/fontawesome/fa-regular-400.svg +801 -0
- package/studio/build-local/fontawesome/fa-regular-400.ttf +0 -0
- package/studio/build-local/fontawesome/fa-regular-400.woff +0 -0
- package/studio/build-local/fontawesome/fa-regular-400.woff2 +0 -0
- package/studio/build-local/fontawesome/fa-solid-900.eot +0 -0
- package/studio/build-local/fontawesome/fa-solid-900.svg +5034 -0
- package/studio/build-local/fontawesome/fa-solid-900.ttf +0 -0
- package/studio/build-local/fontawesome/fa-solid-900.woff +0 -0
- package/studio/build-local/fontawesome/fa-solid-900.woff2 +0 -0
- package/studio/build-local/fontawesome/fontawesome.css +5 -0
- package/studio/build-local/fontawesome/fontawesome.js +5 -0
- package/studio/build-local/images/favicon_akamai.png +0 -0
- package/studio/build-local/images/favicon_dark.png +0 -0
- package/studio/build-local/images/favicon_light.png +0 -0
- package/studio/build-local/images/favicon_lumen.png +0 -0
- package/studio/build-local/images/favicon_purple.png +0 -0
- package/studio/build-local/images/favicon_verizon.png +0 -0
- package/studio/build-local/images/logo_circle.png +0 -0
- package/studio/build-local/images/logo_manifest.png +0 -0
- package/studio/build-local/index.html +1 -0
- package/studio/build-local/js/kissmetrics.js +24 -0
- package/studio/build-local/js/linkedin.js +33 -0
- package/studio/build-local/manifest.json +20 -0
- package/studio/build-local/robots.txt +3 -0
- package/studio/{running.html → build-local/running.html} +2 -2
- package/studio/build-local/static/css/main.038ec116.css +13 -0
- package/studio/build-local/static/js/110.ca4244a6.chunk.js +2 -0
- package/studio/build-local/static/js/110.ca4244a6.chunk.js.LICENSE.txt +1 -0
- package/studio/build-local/static/js/228.302d7db9.chunk.js +1 -0
- package/studio/build-local/static/js/287.21477cf9.chunk.js +1 -0
- package/studio/build-local/static/js/409.17daa4fe.chunk.js +2 -0
- package/studio/build-local/static/js/409.17daa4fe.chunk.js.LICENSE.txt +8 -0
- package/studio/build-local/static/js/424.7d57284b.chunk.js +1 -0
- package/studio/build-local/static/js/446.5237e847.chunk.js +2 -0
- package/studio/build-local/static/js/446.5237e847.chunk.js.LICENSE.txt +13 -0
- package/studio/build-local/static/js/662.02ce7b65.chunk.js +1 -0
- package/studio/build-local/static/js/718.74e9355d.chunk.js +1 -0
- package/studio/build-local/static/js/723.36068040.chunk.js +2 -0
- package/studio/build-local/static/js/723.36068040.chunk.js.LICENSE.txt +5 -0
- package/studio/build-local/static/js/731.8a941eb3.chunk.js +1 -0
- package/studio/build-local/static/js/807.3473ab0a.chunk.js +2 -0
- package/studio/build-local/static/js/807.3473ab0a.chunk.js.LICENSE.txt +5 -0
- package/studio/build-local/static/js/926.88d6f9ce.chunk.js +1 -0
- package/studio/build-local/static/js/browse-csvupload.5e77eb8a.chunk.js +1 -0
- package/studio/build-local/static/js/browse-datatable.cd71d518.chunk.js +1 -0
- package/studio/build-local/static/js/browse-entitymanager.09237801.chunk.js +1 -0
- package/studio/build-local/static/js/browse-jsonviewer.fcccabdc.chunk.js +1 -0
- package/studio/build-local/static/js/custom-functions.98af4a5e.chunk.js +1 -0
- package/studio/build-local/static/js/instance-charts.f1a1969d.chunk.js +1 -0
- package/studio/build-local/static/js/instance-cluster.0dc3ac1b.chunk.js +1 -0
- package/studio/build-local/static/js/instance-config.19223fab.chunk.js +1 -0
- package/studio/build-local/static/js/instance-query.ed7e59f5.chunk.js +1 -0
- package/studio/build-local/static/js/instance-roles.9c3f140d.chunk.js +1 -0
- package/studio/build-local/static/js/instance-status.1687cd77.chunk.js +1 -0
- package/studio/build-local/static/js/instance-users-datatable.ced7813f.chunk.js +1 -0
- package/studio/build-local/static/js/instance-users-edit.436e0908.chunk.js +1 -0
- package/studio/build-local/static/js/instance-users.12c0c117.chunk.js +1 -0
- package/studio/build-local/static/js/instance.b8863754.chunk.js +1 -0
- package/studio/build-local/static/js/instances.5bd051eb.chunk.js +1 -0
- package/studio/build-local/static/js/main.824bbe07.js +2 -0
- package/studio/{hdb.js.LICENSE.txt → build-local/static/js/main.824bbe07.js.LICENSE.txt} +41 -35
- package/studio/build-local/static/js/offline-app.b3ad12ac.chunk.js +1 -0
- package/studio/build-local/static/js/online-app.2ac03c15.chunk.js +1 -0
- package/studio/build-local/static/js/organization-billing.a8014c6f.chunk.js +1 -0
- package/studio/build-local/static/js/organization-users.523136d9.chunk.js +1 -0
- package/studio/build-local/static/js/organization.0abc89ca.chunk.js +1 -0
- package/studio/build-local/static/js/organizations.e536b86f.chunk.js +1 -0
- package/studio/build-local/static/js/profile.92f9be59.chunk.js +1 -0
- package/studio/build-local/static/js/resetPassword.8fdfba77.chunk.js +1 -0
- package/studio/build-local/static/js/roles-jsonviewer.5fe72bc9.chunk.js +1 -0
- package/studio/build-local/static/js/signIn.97bded2f.chunk.js +1 -0
- package/studio/build-local/static/js/signUp.482f9fe4.chunk.js +1 -0
- package/studio/build-local/static/js/structure-reloader.9322abd3.chunk.js +1 -0
- package/studio/build-local/static/js/topnav.5e7913a5.chunk.js +1 -0
- package/studio/build-local/static/js/updatePassword.e23019c7.chunk.js +1 -0
- package/utility/scripts/restartHdb.js +18 -21
- package/dependencies/nats-server.zip +0 -0
- package/studio/fonts/FontAwesome.otf +0 -0
- package/studio/fonts/fontawesome-webfont.eot +0 -0
- package/studio/fonts/fontawesome-webfont.svg +0 -2671
- package/studio/fonts/fontawesome-webfont.ttf +0 -0
- package/studio/fonts/fontawesome-webfont.woff +0 -0
- package/studio/fonts/fontawesome-webfont.woff2 +0 -0
- package/studio/hdb.css +0 -4
- package/studio/hdb.js +0 -2
- package/studio/images/logo.png +0 -0
- package/studio/index.html +0 -1
- package/studio/processCSV.worker.js +0 -1
|
@@ -1,30 +1,27 @@
|
|
|
1
|
-
"use strict";var WB=Object.create;var Ra=Object.defineProperty;var QB=Object.getOwnPropertyDescriptor;var zB=Object.getOwnPropertyNames;var JB=Object.getPrototypeOf,XB=Object.prototype.hasOwnProperty;var a=(e,t)=>Ra(e,"name",{value:t,configurable:!0});var Te=(e,t)=>()=>(e&&(t=e(e=0)),t);var T=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Qe=(e,t)=>{for(var r in t)Ra(e,r,{get:t[r],enumerable:!0})},ZR=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of zB(t))!XB.call(e,n)&&n!==r&&Ra(e,n,{get:()=>t[n],enumerable:!(s=QB(t,n))||s.enumerable});return e};var D=(e,t,r)=>(r=e!=null?WB(JB(e)):{},ZR(t||!e||!e.__esModule?Ra(r,"default",{value:e,enumerable:!0}):r,e)),Z=e=>ZR(Ra({},"__esModule",{value:!0}),e);var rg=T((Zre,tg)=>{var jB=require("fast-glob"),{statSync:Zf,existsSync:eE,readFileSync:ZB,writeFileSync:eH}=require("fs"),{spawnSync:tH,spawn:rH,execFileSync:jre}=require("child_process"),{isMainThread:sH}=require("worker_threads"),{join:Cn,relative:eg}=require("path"),{PACKAGE_ROOT:rs}=b(),{tmpdir:nH,platform:iH}=require("os");require("source-map-support").install();var oH=["resources","server","dataLayer","components"],ga="ts-build",tE,aH=__filename.endsWith("tsBuild.js");if(aH){if(sH){let r;try{Zf(Cn(rs,ga)),r=!0}catch{}if(r)for(let s of jB.sync(oH.map(n=>n+"/**/*.ts"),{cwd:rs})){let n=0,i=0;try{n=Zf(Cn(rs,s)).mtimeMs-5e3,i=Zf(Cn(rs,ga,s.replace(/.ts$/,".js"))).mtimeMs}catch{}if(n>i){console.warn(`TypeScript ${s} is not compiled`+(i?` (TS source file was modified at ${new Date(n)} and compiled file at ${new Date(i)})`:"")+", consider enabling auto-compilation of TypeScript in your IDE), compiling now."),tE=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),tE=!0;if(tE){let s=Cn(rs,"node_modules/.bin/tsc");iH()==="win32"&&(s+=".cmd");let n=tH(s,{cwd:rs});if(n.stdout.length&&console.log(n.stdout.toString()),n.stderr.length&&console.log(n.stderr.toString()),r){let i=Cn(nH(),"harperdb-tsc.pid"),o;if(eE(i))try{process.kill(+ZB(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=rH(s,["--watch"],{cwd:rs,detached:!0,stdio:"ignore"});eH(i,c.pid.toString()),c.unref()}}}}let e=tg.constructor,t=e._findPath;e._findPath=function(r,s,n){if(r.startsWith(".")&&!n&&s.length===1&&s[0].startsWith(rs)&&!s[0].includes("node_modules")){let i=eg(rs,s[0]),o;i.startsWith(ga)?o=Cn(rs,eg(ga,i)):o=Cn(rs,ga,i);let c=Cn(o,r),u=c+".js";if(eE(u))return u;if(c.includes(".")&&eE(c))return c}return t(r,s,n)}}});var b=T((rse,mg)=>{"use strict";var Mr=require("path"),cH=require("fs"),{relative:ese,join:tse}=Mr,{existsSync:uH}=cH;function lH(){let e=__dirname;for(;!uH(Mr.join(e,"package.json"));){let t=Mr.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(lH,"getHDBPackageRoot");var Ln=lH(),sg="js",$u=sg,_H="harperdb-config.yaml",dH="defaultConfig.yaml",fH="hdb",ng=`harperdb.${$u}`,ig=`customFunctionsServer.${$u}`,EH=`restartHdb.${$u}`,sE="HarperDB",Vu="Custom Functions",Yu="Clustering Hub",Ku="Clustering Leaf",hH="Clustering Ingest Service",mH="Clustering Reply Service",pH="foreground.pid",SH="hdb.pid",TH="data",RH={HDB:sE,CLUSTERING_HUB:Yu,CLUSTERING_LEAF:Ku,CLUSTERING_INGEST_SERVICE:hH,CLUSTERING_REPLY_SERVICE:mH,CUSTOM_FUNCTIONS:Vu,RESTART_HDB:"Restart HDB",INSTALL:"Install",RUN:"Run",STOP:"Stop",UPGRADE:"Upgrade",REGISTER:"Register",JOB:"Job",CLUSTERING_UPGRADE_4_0_0:"Upgrade-4-0-0"},gH={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},AH={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},OH={harperdb:sE,"clustering hub":Yu,"clustering leaf":Ku,"custom functions":Vu,custom_functions:Vu,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},NH={CLUSTERING_HUB_PROC_DESCRIPTOR:Yu,CLUSTERING_LEAF_PROC_DESCRIPTOR:Ku},rE={HDB:Mr.join(Ln,"server/harperdb"),CUSTOM_FUNCTIONS:Mr.join(Ln,"server/customFunctions"),CLUSTERING_HUB:Mr.join(Ln,"server/nats"),CLUSTERING_LEAF:Mr.join(Ln,"server/nats")},bH={HDB:Mr.join(rE.HDB,ng),CUSTOM_FUNCTIONS:Mr.join(rE.CUSTOM_FUNCTIONS,ig)},yH={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:Mr.join(Ln,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:Mr.join(Ln,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:Mr.join(Ln,"launchServiceScripts/launchUpdateNodes4-0-0.js")},IH={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},og="support@harperdb.io",wH="customer-success@harperdb.io",ag=1,CH=4141,cg="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",LH="https://www.harperdb.io/product",DH=`For support, please submit a request at ${cg} or contact ${og}`,ug=`For license support, please contact ${wH}`,UH="None of the specified records were found.",MH="hash attribute not found",PH=`Your current license only supports ${ag} role. ${ug}`,vH="Your current license only supports 3 connections to a node.",BH="127.0.0.1",HH=1,FH=/^\.$/,GH=/^\.\.$/,qH="U+002E",xH=/\//g,kH="U+002F",VH=/U\+002F/g,$H=/^U\+002E$/,YH=/^U\+002EU\+002E$/,KH="d",WH=999999,QH="*",zH="--max-old-space-size=",JH="system",XH="__hdb_hash",jH=".harperdb",ZH=".hdb",eF="keys",tF="hdb_boot_properties.file",rF=".updateConfig.json",sF="SIGTSTP",nF=24,iF=6e4,oF=448,aF="blob",cF="trash",uF="database",lF="schema",_F="transactions",dF=".count",fF="id",EF="PROCESS_NAME",lg={SETTINGS_PATH_KEY:"settings_path"},_g=require("lodash"),hF={TC_AGREEMENT:"TC_AGREEMENT",CLUSTERING_USER:"CLUSTERING_USER",CLUSTERING_PASSWORD:"CLUSTERING_PASSWORD",HDB_ADMIN_USERNAME:"HDB_ADMIN_USERNAME",HDB_ADMIN_PASSWORD:"HDB_ADMIN_PASSWORD",OPERATIONSAPI_ROOT:"OPERATIONSAPI_ROOT",ROOTPATH:"ROOTPATH",OPERATIONSAPI_NETWORK_PORT:"OPERATIONSAPI_NETWORK_PORT",CLUSTERING_NODENAME:"CLUSTERING_NODENAME",CLUSTERING_ENABLED:"CLUSTERING_ENABLED",HDB_CONFIG:"HDB_CONFIG",CLUSTERING_PORT:"CLUSTERING_PORT",HDB_ROOT:"HDB_ROOT",SERVER_PORT:"SERVER_PORT",NODE_NAME:"NODE_NAME",CLUSTERING:"CLUSTERING"},mF={HDB_PATH_KEY:"HDB_INTERNAL_PATH",HDB_AUTH_HEADER:"hdb_auth_header",HDB_USER_DATA_KEY:"hdb_user",CHUNK_SIZE:1e3,MAX_CHARACTER_SIZE:250},pF={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},SF={JOB_TABLE_NAME:"hdb_job",NODE_TABLE_NAME:"hdb_nodes",ATTRIBUTE_TABLE_NAME:"hdb_attribute",LICENSE_TABLE_NAME:"hdb_license",ROLE_TABLE_NAME:"hdb_role",SCHEMA_TABLE_NAME:"hdb_schema",TABLE_TABLE_NAME:"hdb_table",USER_TABLE_NAME:"hdb_user",INFO_TABLE_NAME:"hdb_info"},TF={JOB_TABLE_HASH_ATTRIBUTE:"id",NODE_TABLE_HASH_ATTRIBUTE:"name",ATTRIBUTE_TABLE_HASH_ATTRIBUTE:"id",LICENSE_TABLE_HASH_ATTRIBUTE:"license_key",ROLE_TABLE_HASH_ATTRIBUTE:"id",SCHEMA_TABLE_HASH_ATTRIBUTE:"name",TABLE_TABLE_HASH_ATTRIBUTE:"id",USER_TABLE_HASH_ATTRIBUTE:"username",INFO_TABLE_ATTRIBUTE:"info_id"},_r="hdb_internal:",RF={CREATE_SCHEMA:_r+"create_schema",CREATE_TABLE:_r+"create_table",CREATE_ATTRIBUTE:_r+"create_attribute",ADD_USER:_r+"add_user",ALTER_USER:_r+"alter_user",DROP_USER:_r+"drop_user",HDB_NODES:_r+"hdb_nodes",HDB_USERS:_r+"hdb_users",HDB_WORKERS:_r+"hdb_workers",CATCHUP:_r+"catchup",SCHEMA_CATCHUP:_r+"schema_catchup",WORKER_ROOM:_r+"cluster_workers"},gF={ATTR_ATTRIBUTE_KEY:"attribute",ATTR_CREATEDDATE_KEY:"createddate",ATTR_HASH_ATTRIBUTE_KEY:"hash_attribute",ATTR_ID_KEY:"id",ATTR_NAME_KEY:"name",ATTR_PASSWORD_KEY:"password",ATTR_RESIDENCE_KEY:"residence",ATTR_ROLE_KEY:"role",ATTR_SCHEMA_KEY:"schema",ATTR_SCHEMA_TABLE_KEY:"schema_table",ATTR_TABLE_KEY:"table",ATTR_USERNAME_KEY:"username"},AF="060493.ks",OF=".license",NF={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},J={INSERT:"insert",UPDATE:"update",UPSERT:"upsert",SEARCH_BY_CONDITIONS:"search_by_conditions",SEARCH_BY_HASH:"search_by_hash",SEARCH_BY_ID:"search_by_id",SEARCH_BY_VALUE:"search_by_value",SEARCH:"search",SQL:"sql",CSV_DATA_LOAD:"csv_data_load",CSV_FILE_LOAD:"csv_file_load",CSV_URL_LOAD:"csv_url_load",CREATE_SCHEMA:"create_schema",CREATE_DATABASE:"create_database",CREATE_TABLE:"create_table",CREATE_ATTRIBUTE:"create_attribute",DROP_SCHEMA:"drop_schema",DROP_DATABASE:"drop_database",DROP_TABLE:"drop_table",DESCRIBE_SCHEMA:"describe_schema",DESCRIBE_DATABASE:"describe_database",DESCRIBE_TABLE:"describe_table",DESCRIBE_ALL:"describe_all",DELETE:"delete",ADD_USER:"add_user",ALTER_USER:"alter_user",DROP_USER:"drop_user",LIST_USERS:"list_users",LIST_ROLES:"list_roles",ADD_ROLE:"add_role",ALTER_ROLE:"alter_role",DROP_ROLE:"drop_role",USER_INFO:"user_info",READ_LOG:"read_log",ADD_NODE:"add_node",UPDATE_NODE:"update_node",EXPORT_TO_S3:"export_to_s3",IMPORT_FROM_S3:"import_from_s3",DELETE_FILES_BEFORE:"delete_files_before",DELETE_RECORDS_BEFORE:"delete_records_before",EXPORT_LOCAL:"export_local",SEARCH_JOBS_BY_START_DATE:"search_jobs_by_start_date",GET_JOB:"get_job",DELETE_JOB:"delete_job",UPDATE_JOB:"update_job",GET_FINGERPRINT:"get_fingerprint",SET_LICENSE:"set_license",GET_REGISTRATION_INFO:"registration_info",CONFIGURE_CLUSTER:"configure_cluster",SET_CONFIGURATION:"set_configuration",CLUSTER_STATUS:"cluster_status",CLUSTER_NETWORK:"cluster_network",DROP_ATTRIBUTE:"drop_attribute",REMOVE_NODE:"remove_node",RESTART:"restart",RESTART_SERVICE:"restart_service",CATCHUP:"catchup",SYSTEM_INFORMATION:"system_information",DELETE_AUDIT_LOGS_BEFORE:"delete_audit_logs_before",READ_AUDIT_LOG:"read_audit_log",CREATE_AUTHENTICATION_TOKENS:"create_authentication_tokens",LOGIN:"login",LOGOUT:"logout",REFRESH_OPERATION_TOKEN:"refresh_operation_token",GET_CONFIGURATION:"get_configuration",CUSTOM_FUNCTIONS_STATUS:"custom_functions_status",GET_CUSTOM_FUNCTIONS:"get_custom_functions",GET_CUSTOM_FUNCTION:"get_custom_function",SET_CUSTOM_FUNCTION:"set_custom_function",GET_COMPONENTS:"get_components",GET_COMPONENT_FILE:"get_component_file",SET_COMPONENT_FILE:"set_component_file",DROP_COMPONENT:"drop_component",DROP_CUSTOM_FUNCTION:"drop_custom_function",ADD_CUSTOM_FUNCTION_PROJECT:"add_custom_function_project",ADD_COMPONENT:"add_component",DROP_CUSTOM_FUNCTION_PROJECT:"drop_custom_function_project",PACKAGE_CUSTOM_FUNCTION_PROJECT:"package_custom_function_project",DEPLOY_CUSTOM_FUNCTION_PROJECT:"deploy_custom_function_project",PACKAGE_COMPONENT:"package_component",DEPLOY_COMPONENT:"deploy_component",CLUSTER_SET_ROUTES:"cluster_set_routes",CLUSTER_DELETE_ROUTES:"cluster_delete_routes",CLUSTER_GET_ROUTES:"cluster_get_routes",READ_TRANSACTION_LOG:"read_transaction_log",DELETE_TRANSACTION_LOGS_BEFORE:"delete_transaction_logs_before",INSTALL_NODE_MODULES:"install_node_modules",AUDIT_NODE_MODULES:"audit_node_modules",PURGE_STREAM:"purge_stream",GET_BACKUP:"get_backup"},bF={CSV:".csv",JSON:".json"},yF={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},IF={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Aa={};Aa[J.INSERT]=J.INSERT;Aa[J.UPDATE]=J.UPDATE;Aa[J.UPSERT]=J.UPSERT;Aa[J.DELETE]=J.DELETE;var ye=Object.create(null);ye[J.DESCRIBE_ALL]=J.DESCRIBE_ALL;ye[J.DESCRIBE_TABLE]=J.DESCRIBE_TABLE;ye[J.DESCRIBE_SCHEMA]=J.DESCRIBE_SCHEMA;ye[J.READ_LOG]=J.READ_LOG;ye[J.ADD_NODE]=J.ADD_NODE;ye[J.LIST_USERS]=J.LIST_USERS;ye[J.LIST_ROLES]=J.LIST_ROLES;ye[J.USER_INFO]=J.USER_INFO;ye[J.SQL]=J.SQL;ye[J.GET_JOB]=J.GET_JOB;ye[J.SEARCH_JOBS_BY_START_DATE]=J.SEARCH_JOBS_BY_START_DATE;ye[J.DELETE_FILES_BEFORE]=J.DELETE_FILES_BEFORE;ye[J.EXPORT_LOCAL]=J.EXPORT_LOCAL;ye[J.EXPORT_TO_S3]=J.EXPORT_TO_S3;ye[J.CLUSTER_STATUS]=J.CLUSTER_STATUS;ye[J.REMOVE_NODE]=J.REMOVE_NODE;ye[J.RESTART]=J.RESTART;ye[J.CUSTOM_FUNCTIONS_STATUS]=J.CUSTOM_FUNCTIONS_STATUS;ye[J.GET_CUSTOM_FUNCTIONS]=J.GET_CUSTOM_FUNCTIONS;ye[J.GET_CUSTOM_FUNCTION]=J.GET_CUSTOM_FUNCTION;ye[J.SET_CUSTOM_FUNCTION]=J.SET_CUSTOM_FUNCTION;ye[J.DROP_CUSTOM_FUNCTION]=J.DROP_CUSTOM_FUNCTION;ye[J.ADD_CUSTOM_FUNCTION_PROJECT]=J.ADD_CUSTOM_FUNCTION_PROJECT;ye[J.DROP_CUSTOM_FUNCTION_PROJECT]=J.DROP_CUSTOM_FUNCTION_PROJECT;ye[J.PACKAGE_CUSTOM_FUNCTION_PROJECT]=J.PACKAGE_CUSTOM_FUNCTION_PROJECT;ye[J.DEPLOY_CUSTOM_FUNCTION_PROJECT]=J.DEPLOY_CUSTOM_FUNCTION_PROJECT;var wF={DEV:"dev",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status"},CF={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},dg={HDB_ROOT_KEY:"HDB_ROOT",SERVER_PORT_KEY:"SERVER_PORT",CERT_KEY:"CERTIFICATE",PRIVATE_KEY_KEY:"PRIVATE_KEY",HTTP_SECURE_ENABLED_KEY:"HTTPS_ON",CORS_ENABLED_KEY:"CORS_ON",CORS_WHITELIST_KEY:"CORS_WHITELIST",LOG_LEVEL_KEY:"LOG_LEVEL",LOGGER_KEY:"LOGGER",LOG_PATH_KEY:"LOG_PATH",LOG_ROTATE:"LOG_ROTATE",LOG_ROTATE_MAX_SIZE:"LOG_ROTATE_MAX_SIZE",LOG_ROTATE_RETAIN:"LOG_ROTATE_RETAIN",LOG_ROTATE_COMPRESS:"LOG_ROTATE_COMPRESS",LOG_ROTATE_DATE_FORMAT:"LOG_ROTATE_DATE_FORMAT",LOG_ROTATE_ROTATE_MODULE:"LOG_ROTATE_ROTATE_MODULE",LOG_ROTATE_WORKER_INTERVAL:"LOG_ROTATE_WORKER_INTERVAL",LOG_ROTATE_ROTATE_INTERVAL:"LOG_ROTATE_ROTATE_INTERVAL",LOG_ROTATE_TIMEZONE:"LOG_ROTATE_TIMEZONE",LOG_DAILY_ROTATE_KEY:"LOG_DAILY_ROTATE",LOG_MAX_DAILY_FILES_KEY:"LOG_MAX_DAILY_FILES",PROPS_ENV_KEY:"NODE_ENV",SETTINGS_PATH_KEY:"settings_path",CLUSTERING_PORT_KEY:"CLUSTERING_PORT",CLUSTERING_NODE_NAME_KEY:"NODE_NAME",CLUSTERING_ENABLED_KEY:"CLUSTERING",ALLOW_SELF_SIGNED_SSL_CERTS:"ALLOW_SELF_SIGNED_SSL_CERTS",MAX_HDB_PROCESSES:"MAX_HDB_PROCESSES",INSTALL_USER:"install_user",CLUSTERING_USER_KEY:"CLUSTERING_USER",MAX_CLUSTERING_PROCESSES:"MAX_CLUSTERING_PROCESSES",SERVER_TIMEOUT_KEY:"SERVER_TIMEOUT_MS",SERVER_KEEP_ALIVE_TIMEOUT_KEY:"SERVER_KEEP_ALIVE_TIMEOUT",SERVER_HEADERS_TIMEOUT_KEY:"SERVER_HEADERS_TIMEOUT",DISABLE_TRANSACTION_LOG_KEY:"DISABLE_TRANSACTION_LOG",OPERATION_TOKEN_TIMEOUT_KEY:"OPERATION_TOKEN_TIMEOUT",REFRESH_TOKEN_TIMEOUT_KEY:"REFRESH_TOKEN_TIMEOUT",CUSTOM_FUNCTIONS_ENABLED_KEY:"CUSTOM_FUNCTIONS",CUSTOM_FUNCTIONS_PORT_KEY:"CUSTOM_FUNCTIONS_PORT",CUSTOM_FUNCTIONS_DIRECTORY_KEY:"CUSTOM_FUNCTIONS_DIRECTORY",MAX_CUSTOM_FUNCTION_PROCESSES:"MAX_CUSTOM_FUNCTION_PROCESSES",LOG_TO_FILE:"LOG_TO_FILE",LOG_TO_STDSTREAMS:"LOG_TO_STDSTREAMS",RUN_IN_FOREGROUND:"RUN_IN_FOREGROUND",LOCAL_STUDIO_ON:"LOCAL_STUDIO_ON",STORAGE_WRITE_ASYNC:"STORAGE_WRITE_ASYNC"},LF=_g.invert(dg),DF={CUSTOMFUNCTIONS_ENABLED:"customFunctions_enabled",CUSTOMFUNCTIONS_NETWORK_PORT:"customFunctions_network_port",CUSTOMFUNCTIONS_TLS_CERTIFICATE:"customFunctions_tls_certificate",CUSTOMFUNCTIONS_NETWORK_CORS:"customFunctions_network_cors",CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST:"customFunctions_network_corsAccessList",CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT:"customFunctions_network_headersTimeout",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT:"customFunctions_network_keepAliveTimeout",CUSTOMFUNCTIONS_TLS_PRIVATEKEY:"customFunctions_tls_privateKey",CUSTOMFUNCTIONS_TLS_CERT_AUTH:"customFunctions_tls_certificateAuthority",CUSTOMFUNCTIONS_NETWORK_TIMEOUT:"customFunctions_network_timeout",CUSTOMFUNCTIONS_NODEENV:"customFunctions_nodeEnv",CUSTOMFUNCTIONS_ROOT:"customFunctions_root"},O={ANALYTICS_AGGREGATEPERIOD:"analytics_aggregatePeriod",AUTHENTICATION_AUTHORIZELOCAL:"authentication_authorizeLocal",AUTHENTICATION_CACHETTL:"authentication_cacheTTL",AUTHENTICATION_ENABLESESSIONS:"authentication_enableSessions",AUTHENTICATION_OPERATIONTOKENTIMEOUT:"authentication_operationTokenTimeout",AUTHENTICATION_REFRESHTOKENTIMEOUT:"authentication_refreshTokenTimeout",CLUSTERING_USER:"clustering_user",CLUSTERING_ENABLED:"clustering_enabled",CLUSTERING_HUBSERVER_CLUSTER_NAME:"clustering_hubServer_cluster_name",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT:"clustering_hubServer_cluster_network_port",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES:"clustering_hubServer_cluster_network_routes",CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT:"clustering_hubServer_leafNodes_network_port",CLUSTERING_HUBSERVER_NETWORK_PORT:"clustering_hubServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_PORT:"clustering_leafServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_ROUTES:"clustering_leafServer_network_routes",CLUSTERING_LEAFSERVER_STREAMS_MAXAGE:"clustering_leafServer_streams_maxAge",CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES:"clustering_leafServer_streams_maxBytes",CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS:"clustering_leafServer_streams_maxMsgs",CLUSTERING_LEAFSERVER_STREAMS_PATH:"clustering_leafServer_streams_path",CLUSTERING_NODENAME:"clustering_nodeName",CLUSTERING_TLS_CERTIFICATE:"clustering_tls_certificate",CLUSTERING_TLS_PRIVATEKEY:"clustering_tls_privateKey",CLUSTERING_TLS_CERT_AUTH:"clustering_tls_certificateAuthority",CLUSTERING_TLS_INSECURE:"clustering_tls_insecure",CLUSTERING_TLS_VERIFY:"clustering_tls_verify",CLUSTERING_LOGLEVEL:"clustering_logLevel",CLUSTERING_REPUBLISHMESSAGES:"clustering_republishMessages",CLUSTERING_DATABASELEVEL:"clustering_databaseLevel",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",THREADS:"threads",HTTP_SESSIONAFFINITY:"http_sessionAffinity",HTTP_COMPRESSIONTHRESHOLD:"http_compressionThreshold",HTTP_CORS:"http_cors",HTTP_CORSACCESSLIST:"http_corsAccessList",HTTP_HEADERSTIMEOUT:"http_headersTimeout",HTTP_KEEPALIVETIMEOUT:"http_keepAliveTimeout",HTTP_TIMEOUT:"http_timeout",HTTP_PORT:"http_port",HTTP_SECUREPORT:"http_securePort",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_ROTATION_ENABLED:"logging_rotation_enabled",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_INTERVAL:"logging_rotation_interval",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",LOGGING_ROTATION_PATH:"logging_rotation_path",LOGGING_STDSTREAMS:"logging_stdStreams",LOGGING_AUDITLOG:"logging_auditLog",LOGGING_AUDITRETENTION:"logging_auditRetention",LOGGING_AUDITAUTHEVENTS_LOGFAILED:"logging_auditAuthEvents_logFailed",LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL:"logging_auditAuthEvents_logSuccessful",OPERATIONSAPI_NETWORK_CORS:"operationsApi_network_cors",OPERATIONSAPI_NETWORK_CORSACCESSLIST:"operationsApi_network_corsAccessList",OPERATIONSAPI_NETWORK_HEADERSTIMEOUT:"operationsApi_network_headersTimeout",OPERATIONSAPI_NETWORK_HTTPS:"operationsApi_network_https",OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT:"operationsApi_network_keepAliveTimeout",OPERATIONSAPI_NETWORK_PORT:"operationsApi_network_port",OPERATIONSAPI_NETWORK_SECUREPORT:"operationsApi_network_securePort",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",OPERATIONSAPI_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",ROOTPATH:"rootPath",STORAGE_WRITEASYNC:"storage_writeAsync",STORAGE_OVERLAPPINGSYNC:"storage_overlappingSync",STORAGE_CACHING:"storage_caching",STORAGE_COMPRESSION:"storage_compression",STORAGE_NOREADAHEAD:"storage_noReadAhead",STORAGE_PREFETCHWRITES:"storage_prefetchWrites",STORAGE_ENCRYPTION:"storage_encryption",STORAGE_PATH:"storage_path",STORAGE_AUDIT_PATH:"storage_audit_path",DATABASES:"databases",IGNORE_SCRIPTS:"ignoreScripts",MQTT_NETWORK_PORT:"mqtt_network_port",MQTT_WEBSOCKET:"mqtt_webSocket",MQTT_NETWORK_SECUREPORT:"mqtt_network_securePort",MQTT_REQUIREAUTHENTICATION:"mqtt_requireAuthentication",COMPONENTSROOT:"componentsRoot",TLS_CERTIFICATE:"tls_certificate",TLS_PRIVATEKEY:"tls_privateKey",TLS_CERTIFICATEAUTHORITY:"tls_certificateAuthority"},fg={settings_path:lg.SETTINGS_PATH_KEY,hdb_root_key:O.ROOTPATH,hdb_root:O.ROOTPATH,rootpath:O.ROOTPATH,server_port_key:O.OPERATIONSAPI_NETWORK_PORT,server_port:O.OPERATIONSAPI_NETWORK_PORT,cert_key:O.TLS_CERTIFICATE,certificate:O.TLS_CERTIFICATE,private_key_key:O.TLS_PRIVATEKEY,private_key:O.TLS_PRIVATEKEY,http_secure_enabled_key:O.OPERATIONSAPI_NETWORK_HTTPS,https_on:O.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:O.OPERATIONSAPI_NETWORK_CORS,cors_on:O.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:O.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:O.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:O.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:O.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:O.LOGGING_LEVEL,log_level:O.LOGGING_LEVEL,log_path_key:O.LOGGING_ROOT,log_path:O.LOGGING_ROOT,clustering_node_name_key:O.CLUSTERING_NODENAME,node_name:O.CLUSTERING_NODENAME,clustering_enabled_key:O.CLUSTERING_ENABLED,clustering:O.CLUSTERING_ENABLED,max_http_threads:O.THREADS,max_hdb_processes:O.THREADS,server_timeout_key:O.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:O.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:O.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:O.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:O.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:O.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:O.LOGGING_AUDITLOG,disable_transaction_log:O.LOGGING_AUDITLOG,operation_token_timeout_key:O.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:O.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:O.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:O.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:O.HTTP_PORT,custom_functions_port:O.HTTP_PORT,custom_functions_directory_key:O.COMPONENTSROOT,custom_functions_directory:O.COMPONENTSROOT,max_custom_function_processes:O.THREADS,log_to_file:O.LOGGING_FILE,log_to_stdstreams:O.LOGGING_STDSTREAMS,local_studio_on:O.LOCALSTUDIO_ENABLED,clustering_port:O.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:O.CLUSTERING_USER,clustering_enabled:O.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:O.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:O.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:O.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:O.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:O.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:O.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:O.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:O.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:O.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxmsgs:O.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:O.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:O.CLUSTERING_NODENAME,clustering_tls_certificate:O.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:O.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:O.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:O.CLUSTERING_TLS_INSECURE,clustering_tls_verify:O.CLUSTERING_TLS_VERIFY,clustering_loglevel:O.CLUSTERING_LOGLEVEL,clustering_republishmessages:O.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:O.CLUSTERING_DATABASELEVEL,customfunctions_network_port:O.HTTP_PORT,customfunctions_tls_certificate:O.TLS_CERTIFICATE,customfunctions_network_cors:O.HTTP_CORS,customfunctions_network_corsaccesslist:O.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:O.HTTP_HEADERSTIMEOUT,customfunctions_network_https:O.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:O.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:O.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:O.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:O.HTTP_TIMEOUT,http_threads:O.THREADS,threads:O.THREADS,http_session_affinity:O.HTTP_SESSIONAFFINITY,http_compressionthreshold:O.HTTP_COMPRESSIONTHRESHOLD,http_cors:O.HTTP_CORS,http_corsaccesslist:O.HTTP_CORSACCESSLIST,http_headerstimeout:O.HTTP_HEADERSTIMEOUT,http_keepalivetimeout:O.HTTP_KEEPALIVETIMEOUT,http_timeout:O.HTTP_TIMEOUT,http_port:O.HTTP_PORT,http_secureport:O.HTTP_SECUREPORT,customfunctions_processes:O.THREADS,customfunctions_root:O.COMPONENTSROOT,localstudio_enabled:O.LOCALSTUDIO_ENABLED,logging_file:O.LOGGING_FILE,logging_level:O.LOGGING_LEVEL,logging_root:O.LOGGING_ROOT,logging_rotation_enabled:O.LOGGING_ROTATION_ENABLED,logging_rotation_compress:O.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:O.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:O.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:O.LOGGING_ROTATION_PATH,logging_stdstreams:O.LOGGING_STDSTREAMS,logging_auditlog:O.LOGGING_AUDITLOG,logging_auditretention:O.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:O.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:O.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:O.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:O.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_network_cors:O.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:O.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:O.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:O.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:O.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:O.OPERATIONSAPI_NETWORK_PORT,operationsapi_network_secureport:O.OPERATIONSAPI_NETWORK_SECUREPORT,operationsapi_tls_certificate:O.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_tls_privatekey:O.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:O.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY,operationsapi_network_timeout:O.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_root:O.ROOTPATH,databases:O.DATABASES,storage_path:O.STORAGE_PATH,ignorescripts:O.IGNORE_SCRIPTS,mqtt_network_port:O.MQTT_NETWORK_PORT,mqtt_websocket:O.MQTT_WEBSOCKET,mqtt_network_secureport:O.MQTT_NETWORK_SECUREPORT,mqtt_requireauthentication:O.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:O.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:O.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:O.AUTHENTICATION_CACHETTL,authentication_enablesessions:O.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:O.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:O.AUTHENTICATION_REFRESHTOKENTIMEOUT,componentsroot:O.COMPONENTSROOT,tls_certificate:O.TLS_CERTIFICATE,tls_privatekey:O.TLS_PRIVATEKEY,tls_certificateauthority:O.TLS_CERTIFICATEAUTHORITY};for(let e in O){let t=O[e];fg[t.toLowerCase()]=t}var UF={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},MF={csv_file_load:"csv_file_load",csv_data_load:J.CSV_DATA_LOAD,csv_url_load:J.CSV_URL_LOAD,delete_files_before:"delete_files_before",delete_records_before:"delete_records_before",delete_audit_logs_before:"delete_audit_logs_before",delete_transaction_logs_before:"delete_transaction_logs_before",empty_trash:"empty_trash",export_local:"export_local",export_to_s3:"export_to_s3",import_from_s3:"import_from_s3"},PF={CLUSTERING_PAYLOAD:"clustering_payload",DELEGATE_THREAD_RESPONSE:"delegate_thread_response",CLUSTERING:"clustering",SCHEMA:"schema",CLUSTER_STATUS:"cluster_status",JOB:"job",CHILD_STARTED:"child_started",CHILD_STOPPED:"child_stopped",USER:"user",RESTART:"restart"},vF={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},BF={VERSION_DEFAULT:"2.2.0"},HF={DEVELOPMENT:8192,DEFAULT:512},FF={IDENTIFY:"identify",AUTHENTICATE:"authenticate",AUTHENTICATE_OK:"authenticated",AUTHENTICATE_FAIL:"authenticate_fail",CONNECTION:"connection",CONNECT:"connect",CATCHUP_REQUEST:"catchup_request",CATCHUP_RESPONSE:"catchup",CONFIRM_MSG:"confirm_msg",ERROR:"error",DISCONNECT:"disconnect",SCHEMA_UPDATE_REQ:"schema_update_request",SCHEMA_UPDATE_RES:"schema_update_response",RECONNECT_ATTEMPT:"reconnect_attempt",CONNECT_ERROR:"connect_error",MESSAGE:"msg",VERSION_MISMATCH:"version_mismatch",DIRECTION_CHANGE:"direction_change"},GF={1e3:"SUCCESSFUL_SHUTDOWN",1001:"CLOSE_GOING_AWAY",1002:"CLOSE_PROTOCOL_ERROR",1003:"CLOSE_UNSUPPORTED",1005:"CLOSE_NO_STATUS",1006:"CLOSE_ABNORMAL",1007:"UNSUPPORTED_PAYLOAD",1008:"POLICY_VIOLATION",1009:"CLOSE_TOO_LARGE",1010:"MANDATORY_EXTENSION",1011:"SERVER_ERROR",1012:"SERVICE_RESTART",1013:"SERVER_BUSY",1014:"BAD_GATEWAY",1015:"HANDSHAKE_FAIL",4141:"LICENSE_LIMIT_REACHED"},qF={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},Eg={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},xF=Symbol("metadata"),kF="__clustering__",VF=Object.values(Eg),$F=15984864e5,hg={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},YF=_g.invert(hg),KF={GET_CLUSTER_STATUS:"GET_CLUSTER_STATUS",CLUSTER_STATUS_RESPONSE:"CLUSTER_STATUS_RESPONSE",ERROR_RESPONSE:"ERROR",ADD_USER:"ADD_USER",ALTER_USER:"ALTER_USER",DROP_USER:"DROP_USER",HDB_OPERATION:"HDB_OPERATION",ADD_NODE:"ADD_NODE",UPDATE_NODE:"UPDATE_NODE",REMOVE_NODE:"REMOVE_NODE",HDB_USERS_MSG:"HDB_USERS_MSG",HDB_WORKERS:"HDB_WORKERS",HDB_TRANSACTION:"HDB_TRANSACTION"},WF=111,QF=`\r
|
|
2
|
-
`,
|
|
3
|
-
`}a(
|
|
4
|
-
`).slice(1)){n=n.trim();let[i]=n.split(" ",1),o=n.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=o}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,s])=>({pid:Number.parseInt(r,10),name:IG.basename(s.comm),cmd:s.args,ppid:Number.parseInt(s.ppid,10),uid:Number.parseInt(s.uid,10),cpu:Number.parseFloat(s["%cpu"]),memory:Number.parseFloat(s["%mem"])}))}a(DG,"findPs")});var ze=T((lse,Mg)=>{"use strict";var UG="__dbis__",MG="__txns__",PG="__environment_name__",vG="__dbi_defintion__",BG={EQUALS:"equals",STARTS_WITH:"startsWith",_STARTS_WITH:"starts_with",ENDS_WITH:"endsWith",_ENDS_WITH:"ends_with",CONTAINS:"contains",SEARCH_ALL:"searchAll",SEARCH_ALL_TO_MAP:"searchAllToMap",BATCH_SEARCH_BY_HASH:"batchSearchByHash",BATCH_SEARCH_BY_HASH_TO_MAP:"batchSearchByHashToMap",GREATER_THAN:"greaterThan",_GREATER_THAN:"greater_than",GREATER_THAN_EQUAL:"greaterThanEqual",_GREATER_THAN_EQUAL:"greater_than_equal",LESS_THAN:"lessThan",_LESS_THAN:"less_than",LESS_THAN_EQUAL:"lessThanEqual",_LESS_THAN_EQUAL:"less_than_equal",BETWEEN:"between"},HG=["__createdtime__","__updatedtime__"],FG="\uFFFF",Ug={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},GG=Object.values(Ug);Mg.exports={AUDIT_STORE_NAME:MG,INTERNAL_DBIS_NAME:UG,DBI_DEFINITION_NAME:vG,SEARCH_TYPES:BG,TIMESTAMP_NAMES:HG,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:PG,TRANSACTIONS_DBI_NAMES_ENUM:Ug,TRANSACTIONS_DBIS:GG,OVERFLOW_MARKER:FG}});var dr=T((_se,kg)=>{"use strict";var Pg=b(),vg=ze(),Bg={CONTINUE:100,OK:200,CREATED:201,BAD_REQUEST:400,UNAUTHORIZED:401,FORBIDDEN:403,NOT_FOUND:404,METHOD_NOT_ALLOWED:405,REQUEST_TIMEOUT:408,CONFLICT:409,TOO_MANY_REQUESTS:429,INTERNAL_SERVER_ERROR:500,NOT_IMPLEMENTED:501,BAD_GATEWAY:502,SERVICE_UNAVAILABLE:503,GATEWAY_TIMEOUT:504,HTTP_VERSION_NOT_SUPPORTED:505,INSUFFICIENT_STORAGE:507,NETWORK_AUTHENTICATION_REQUIRED:511},Hg=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),Fg={500:Hg("There was an error processing your request."),400:"Invalid request"},qG=Fg[Bg.INTERNAL_SERVER_ERROR],xG={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.`},kG={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},VG={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"},$G={BASE_PATH_REQUIRED:"base_path is required",DESTINATION_PATH_REQUIRED:"destination_path is required",ENV_NAME_REQUIRED:"env_name is required",INVALID_BASE_PATH:"invalid base_path",INVALID_DESTINATION_PATH:"invalid destination_path",INVALID_ENVIRONMENT:"invalid environment",ENV_REQUIRED:"env is required",DBI_NAME_REQUIRED:"dbi_name is required",DBI_DOES_NOT_EXIST:"dbi does not exist",HASH_ATTRIBUTE_REQUIRED:"hash_attribute is required",ID_REQUIRED:"id is required",IDS_REQUIRED:"ids is required",IDS_MUST_BE_ITERABLE:"ids must be iterable",FETCH_ATTRIBUTES_REQUIRED:"fetch_attributes is required",FETCH_ATTRIBUTES_MUST_BE_ARRAY:"fetch_attributes must be an array",ATTRIBUTE_REQUIRED:"attribute is required",SEARCH_VALUE_REQUIRED:"search_value is required",SEARCH_VALUE_TOO_LARGE:"search_value is too long",WRITE_ATTRIBUTES_REQUIRED:"write_attributes is required",WRITE_ATTRIBUTES_MUST_BE_ARRAY:"write_attributes must be an array",RECORDS_REQUIRED:"records is required",RECORDS_MUST_BE_ARRAY:"records must be an array",CANNOT_CREATE_INTERNAL_DBIS_NAME:`cannot create a dbi named ${vg.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${vg.INTERNAL_DBIS_NAME}`,START_VALUE_REQUIRED:"start_value is required",END_VALUE_REQUIRED:"end_value is required",CANNOT_COMPARE_STRING_TO_NUMERIC_KEYS:"cannot compare a string to numeric keys",END_VALUE_MUST_BE_GREATER_THAN_START_VALUE:"end_value must be greater than or equal to start_value",UNKNOWN_SEARCH_TYPE:"unknown search type",CANNOT_DROP_TABLE_HASH_ATTRIBUTE:"cannot drop a table's hash attribute"},YG={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${Pg.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE} bytes.`,ATTR_NAME_NULLISH_ERR:"transaction aborted due to record(s) with an attribute name that is null, undefined or empty string",HASH_VAL_LENGTH_ERR:`transaction aborted due to record(s) with a hash value that exceeds ${Pg.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE} bytes, check log for more info`,INVALID_FORWARD_SLASH_IN_HASH_ERR:"transaction aborted due to record(s) with a hash value that contains a forward slash, check log for more info",RECORD_MISSING_HASH_ERR:"transaction aborted due to record(s) with no hash value, check log for more info"},Gg={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"},KG={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."},WG={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`},QG={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"},zG={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},JG={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`},qg={INVALID_DATE:"Invalid date, must be in ISO-8601 format (YYYY-MM-DD).",SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE:e=>`invalid sort attribute '${e}', the attribute must either be the table's hash attribute or an attribute used in conditions.`},xg={INVALID_ITC_DATA_TYPE:"Invalid ITC event data type, must be an object",MISSING_TYPE:"ITC event missing 'type'",MISSING_MSG:"ITC event missing 'message'",MISSING_ORIGIN:"ITC event message missing 'originator' property",INVALID_EVENT:e=>`ITC server received invalid event type: ${e}`},XG={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."},jG={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},ZG={...Gg,...VG,...xG,...KG,...WG,...QG,...zG,...JG,...YG,...qg,...xg,...XG,...jG,...kG};kg.exports={CHECK_LOGS_WRAPPER:Hg,HDB_ERROR_MSGS:ZG,DEFAULT_ERROR_MSGS:Fg,DEFAULT_ERROR_RESP:qG,HTTP_STATUS_CODES:Bg,LMDB_ERRORS_ENUM:$G,AUTHENTICATION_ERROR_MSGS:Gg,VALIDATION_ERROR_MSGS:qg,ITC_ERRORS:xg}});var j=T((fse,Yg)=>{"use strict";var so=dr(),eq=q(),tq=b(),Xu=class extends Error{static{a(this,"HdbError")}constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,Vg),this.statusCode=s||so.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(so.DEFAULT_ERROR_MSGS[s]?so.DEFAULT_ERROR_MSGS[s]:so.DEFAULT_ERROR_MSGS[so.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,n&&(this.logLevel=n),typeof this.message!="string"&&(this.stack=t.stack),i&&eq[n](i)}},dE=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}},fE=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function Vg(e,t,r,s=tq.LOG_LEVELS.ERROR,n=null,i=!1){if($g(e))return e;let o=new Xu(e,t,r,s,n);return i&&delete o.stack,o}a(Vg,"handleHDBError");function $g(e){return e.__proto__.constructor.name===Xu.name}a($g,"isHDBError");Yg.exports={isHDBError:$g,handleHDBError:Vg,ClientError:dE,ServerError:fE,hdb_errors:so}});var ve=T((hse,jg)=>{"use strict";var Ua=b(),rq=$(),Yt=X(),Ma=require("path"),sq=require("minimist"),Kg=require("fs-extra"),Wg=require("lodash");Yt.initSync();var{CONFIG_PARAMS:Dn,DATABASES_PARAM_CONFIG:wa,SYSTEM_SCHEMA_NAME:ju}=Ua,Ca,La,Da;function Qg(){if(Ca!==void 0)return Ca;if(Yt.getHdbBasePath()!==void 0)return Ca=Yt.get(Dn.STORAGE_PATH)||Ma.join(Yt.getHdbBasePath(),Ua.DATABASES_DIR_NAME),Ca}a(Qg,"getBaseSchemaPath");function zg(){if(La!==void 0)return La;if(Yt.getHdbBasePath()!==void 0)return La=Xg(ju),La}a(zg,"getSystemSchemaPath");function Jg(){if(Da!==void 0)return Da;if(Yt.getHdbBasePath()!==void 0)return Da=Yt.get(Ua.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||Ma.join(Yt.getHdbBasePath(),Ua.TRANSACTIONS_DIR_NAME),Da}a(Jg,"getTransactionAuditStoreBasePath");function nq(e,t){let r=Yt.get(Dn.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||Ma.join(Jg(),e.toString())}a(nq,"getTransactionAuditStorePath");function Xg(e,t){e=e.toString(),t=t&&t.toString();let r=Yt.get(Ua.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||Ma.join(Qg(),e)}a(Xg,"getSchemaPath");function iq(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,sq(process.argv));let s=r[Dn.DATABASES.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!rq.isObject(s))throw o;i=s}for(let o of i){let c=o[ju];if(!c)continue;let u=Yt.get(Dn.DATABASES);u=u??{};let _=c?.tables?.[t]?.[wa.PATH];if(_)return Wg.set(u,[ju,wa.TABLES,t,wa.PATH],_),Yt.setProperty(Dn.DATABASES,u),_;let l=c?.[wa.PATH];if(l)return Wg.set(u,[ju,wa.PATH],l),Yt.setProperty(Dn.DATABASES,u),l}}let n=r[Dn.STORAGE_PATH.toUpperCase()];if(n){if(!Kg.pathExistsSync(n))throw new Error(n+" does not exist");let i=Ma.join(n,e);return Kg.mkdirsSync(i),Yt.setProperty(Dn.STORAGE_PATH,n),i}return zg()}a(iq,"initSystemSchemaPaths");function oq(){Ca=void 0,La=void 0,Da=void 0}a(oq,"resetPaths");jg.exports={getBaseSchemaPath:Qg,getSystemSchemaPath:zg,getTransactionAuditStorePath:nq,getTransactionAuditStoreBasePath:Jg,getSchemaPath:Xg,initSystemSchemaPaths:iq,resetPaths:oq}});var fr=T((Tse,sA)=>{"use strict";var aq=dr().LMDB_ERRORS_ENUM,pse=require("lmdb"),cq=ze(),Sse=require("buffer").Buffer,{OVERFLOW_MARKER:Zg,MAX_SEARCH_KEY_LENGTH:Zu}=cq,eA=["number","string","symbol","boolean","bigint"];function uq(e){if(e=e?.primaryStore||e,!e)throw new Error(aq.ENV_REQUIRED)}a(uq,"validateEnv");function lq(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(lq,"stringifyData");function _q(e){return e instanceof Date?e.valueOf():e}a(_q,"convertKeyValueToWrite");function dq(e){if(e==null)return;if(eA.includes(typeof e))return e.length>Zu?[e.slice(0,Zu)+Zg]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];if(eA.includes(typeof n))n.length>Zu?t.push(n.slice(0,Zu)+Zg):t.push(n);else if(n instanceof Date)return t.push(n.getTime())}}else if(e instanceof Date)return[e.getTime()];return t}a(dq,"getIndexedValues");var el=0,tA=0;function rA(){tA=Date.now()-performance.now()}a(rA,"adjustStartTime");rA();var fq=6e4;setInterval(rA,fq).unref();function Eq(){let e=performance.now()+tA;return e>el?(el=e,e):(el+=488e-6,el)}a(Eq,"getNextMonotonicTime");sA.exports={validateEnv:uq,stringifyData:lq,convertKeyValueToWrite:_q,getNextMonotonicTime:Eq,getIndexedValues:dq}});var nA,ss,EE,Pa=Te(()=>{nA=require("events"),ss=class extends nA.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new EE;return t.queue=this,t}push(t){this.send(t)}send(t){this.resolveNext?(this.resolveNext({value:t}),this.resolveNext=null):this.hasDataListeners?this.emit("data",t):(this.queue||(this.queue=[]),this.queue.push(t))}getNextMessage(){return this.queue?.shift()}on(t,r){if(t==="data"&&!this.hasDataListeners)for(this.hasDataListeners=!0;this.queue?.length>0;)r(this.queue.shift());return super.on(t,r)}},EE=class{static{a(this,"EventQueueIterator")}queue;push(t){this.queue.send(t)}next(){let t=this.queue.getNextMessage();return t?{value:t}:new Promise(r=>this.queue.resolveNext=r)}return(t){return this.queue.emit("close"),{value:t,done:!0}}throw(t){return this.queue.emit("close",t),{done:!0}}}});function Pr(e){return e[vt]||(e[vt]=Object.create(null))}function nl(e,t){let r=e.prototype,s={},n=t.attributes||t.properties||[];for(let o of n){let c=o.name,u;switch(o.type){case"String":u=a(function(l){if(!(typeof l=="string"||l==null&&o.nullable!==!1))throw new ns.ClientError(`${c} must be a string, attempt to assign ${l}`);Pr(this)[c]=l},"set");break;case"ID":u=a(function(l){if(!(typeof l=="string"||l?.length>0&&l.every?.(d=>typeof d=="string")||l==null&&o.nullable!==!1))throw new ns.ClientError(`${c} must be a string, attempt to assign ${l}`);Pr(this)[c]=l},"set");break;case"Float":u=a(function(l){if(!(typeof l=="number"||l==null&&o.nullable!==!1))throw new ns.ClientError(`${c} must be a number, attempt to assign ${l}`);Pr(this)[c]=l},"set");break;case"Int":u=a(function(l){if(!(l>>0===l||l==null&&o.nullable!==!1))if(typeof l=="number"&&Math.abs((l>>0)-l)<=1)l=Math.round(l);else throw new ns.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${l}`);Pr(this)[c]=l},"set");break;case"Long":u=a(function(l){if(!(Math.round(l)===l&&Math.abs(l)<=9007199254740992||l==null&&o.nullable!==!1))if(typeof l=="number"&&Math.abs(l)<=9007199254740992)l=Math.round(l);else throw new ns.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${l}`);Pr(this)[c]=l},"set");break;case"Boolean":u=a(function(l){if(!(typeof l=="boolean"||l==null&&o.nullable!==!1))throw new ns.ClientError(`${c} must be a boolean, attempt to assign ${l}`);Pr(this)[c]=l},"set");break;case"Date":u=a(function(l){if(!(l instanceof Date||l==null&&o.nullable!==!1))if(typeof l=="string"||typeof l=="number")l=new Date(l);else throw new ns.ClientError(`${c} must be a Date, attempt to assign ${l}`);Pr(this)[c]=l},"set");break;case"Bytes":u=a(function(l){if(!(l instanceof Uint8Array||l==null&&o.nullable!==!1))throw new ns.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${l}`);Pr(this)[c]=l},"set");break;case"Any":case void 0:u=a(function(l){Pr(this)[c]=l},"set");break;default:u=a(function(l){if(!(typeof l=="object"||l==null&&o.nullable!==!1))throw new ns.ClientError(`${c} must be an object, attempt to assign ${l}`);Pr(this)[c]=l},"set")}let _=s[c]={get(){let l=this[vt];if(l&&c in l)return l[c];let d=this[Re]?.[c];if(d&&typeof d=="object"){let f=iA(d,o);if(f)return l||(l=this[vt]=Object.create(null)),l[c]=f}return d},set:u,enumerable:!0,configurable:!0};_.get.isAttribute=!0,(!(c in r)||Object.getOwnPropertyDescriptor(r,c)?.get?.isAttribute)&&Object.defineProperty(r,c,_)}i("getProperty",function(o){let c=s[o];if(c)return c.get.call(this);let u=this[vt];return u?.[o]!==void 0?u[o]:this[Re]?.[o]}),i("set",function(o,c){let u=s[o];if(u)return u.set.call(this,c);if(t.sealed)throw new ns.ClientError("Can not add a property to a sealed table schema");Pr(this)[o]=c}),i("deleteProperty",function(o){Pr(this)[o]=void 0}),i("toJSON",function(){let o=this[vt],c;for(let _ in o)c||(c=Object.assign({},this[Re])),c[_]=o[_];return Object.keys(this).length>0&&(c||(c=Object.assign({},this[Re])),Object.assign(c,this)),c||this[Re]}),r.get||i("get",r.getProperty),r.delete||i("delete",r.deleteProperty);function i(o,c){Object.defineProperty(r,o,{value:c,configurable:!0})}a(i,"setMethod")}function iA(e,t){let r;switch(e.constructor){case Object:return t?((r=t.TrackedObject)||(t.TrackedObject=r=class{static{a(this,"TrackedObject")}constructor(n){this[Re]=n}},nl(r,t)),new r(e)):new tl(e);case Array:let s=new sl(e.length);s[Re]=e;for(let n=0,i=e.length;n<i;n++){let o=e[n];o&&typeof o=="object"&&(o=iA(o,t?.elements)),s[n]=o}return s}}function il(e){let t=e[vt],r;for(let n in t){r||(r=Object.assign({},e[Re]));let i=t[n];i&&typeof i=="object"&&(i=il(i)),r[n]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[Re])),Object.assign(r,e)),r||e[Re]}function va(e){let t;if(e[Re]&&e.constructor===Array&&!Object.isFrozen(e)){t=e;for(let s=0,n=e.length;s<n;s++){let i=e[s];if(i&&typeof i=="object"){let o=va(i);o!==i&&t===e&&(t=e.slice(0)),i=o}t[s]=i}return Object.freeze(t)}let r=e[vt];for(let s in r){t||(t=Object.assign({},e[Re]));let n=r[s];n&&typeof n=="object"&&(n=va(n)),t[s]=n}return t?Object.freeze(t):e[Re]||(e.buffer?e:Object.freeze(e))}function rl(e){let t=e[Re];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[ui]||e.length!==t.length)return!0;for(let r=0,s=e.length;r<s;r++){let n=t[r],i=e[r];if(n&&i?.[Re]===n){if(rl(i))return!0}else return!0}}else{let r=e[vt];if(r&&!t)return!0;for(let s in r){let n=r[s];if(n&&typeof n=="object"){let i=t[s];if(i&&n[Re]===i){if(rl(n))return!0}else return!0}else return!0}}return!1}var ns,vt,tl,ui,sl,ol=Te(()=>{is();ns=D(j()),vt=Symbol("own-data");a(Pr,"getChanges");a(nl,"assignTrackedAccessors");a(iA,"trackObject");tl=class{static{a(this,"GenericTrackedObject")}constructor(t){this[Re]=t}};nl(tl,{});a(il,"collapseData");a(va,"deepFreeze");a(rl,"hasChanges");ui=Symbol.for("has-array-changes"),sl=class extends Array{static{a(this,"TrackedArray")}[ui];constructor(t){super(t)}splice(...t){return this[ui]=!0,super.splice(...t)}push(...t){return this[ui]=!0,super.push(...t)}pop(){return this[ui]=!0,super.pop()}unshift(...t){return this[ui]=!0,super.unshift(...t)}shift(){return this[ui]=!0,super.shift()}};sl.prototype.constructor=Array});function Sq(){pq=setInterval(function(){for(let e of hE)if(e.stale){let t=e[me]?.url;oA.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.resetReadSnapshot()}else e.stale=!0},mq).unref()}var mE,oA,hq,hE,li,al,mq,pq,pE=Te(()=>{mE=D(fr()),oA=D(q());is();hq=100,hE=new Set,li=class{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;validated=0;timestamp=0;open=!0;getReadTxn(){return this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn?this.readTxn:(this.readTxn=this.lmdbDb.useReadTransaction(),hE.add(this),this.readTxn)}disregardReadTxn(){--this.readTxnRefCount===0&&this.resetReadSnapshot()}resetReadSnapshot(){this.readTxn&&(hE.delete(this),this.readTxn.done(),this.readTxn=null)}addWrite(t){this.writes.push(t)}removeWrite(t){let r=this.writes.indexOf(t);r>-1&&(this.writes[r]=null)}commit(t={}){let r=this.timestamp;r||(r=this.timestamp=t.timestamp=t.timestamp||(0,mE.getNextMonotonicTime)());let s=t.retries||0;if(this.resetReadSnapshot(),this.validated<this.writes.length){let l=this.validated;this.validated=this.writes.length;for(let f=l;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let d;for(let f=l;f<this.validated;f++){let E=this.writes[f];E&&(E.before||E.beforeIntermediate)&&(d=!0)}if(d)return(async()=>{for(let f=0;f<2;f++){let E;for(let h=l;h<this.validated;h++){let p=this.writes[h];if(!p)continue;let S=p[f===0?"before":"beforeIntermediate"];if(S){let A=S();E?E.push?E.push(A):E=[E,A]:E=A}}E&&await(E.push?Promise.all(E):E)}return this.commit(t)})()}t?.close&&(this.open=!1);let n,i=[],o=0;this.writes=this.writes.filter(l=>l);let c=a(l=>{l.commit(r,l.entry,s)},"doWrite"),u=a(()=>{let l=this.writes[o++];if(l)if(l.key){s>0&&(l.entry=l.store.getEntry(l.key));let d=l.store.ifVersion(l.key,l.entry?.version??null,u);n=n||d}else u();else for(let d of this.writes)c(d)},"nextCondition");if(this.writes.length<hq>>s?u():n=this.writes[0].store.transaction(()=>{for(let l of this.writes)l.entry=l.store.getEntry(l.key),c(l);return!0}),n)return n.then(l=>l?(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))):(t?t.retries=s+1:t={retries:1},this.commit(t)));let _={txnTime:r};if(this.next){let l=this.next?.commit(t);if(l?.then)return l?.then(d=>({txnTime:r,next:d}));_.next=l}return _}abort(){this.resetReadSnapshot(),this.writes=[]}},al=class extends li{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,mE.getNextMonotonicTime)())}getReadTxn(){}},mq=3e4;a(Sq,"startMonitoringTxns");Sq()});function Ge(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let s=e.transaction=new li;e.timestamp&&(s.timestamp=e.timestamp),s[me]=e,e.resourceCache||(e.resourceCache=[]);let n;try{if(n=t(s),n?.then)return n.then(i,o)}catch(c){o(c)}return i(n);function i(c){let u=s.commit({close:!0});return u.then?u.then(()=>(r?.resetTransaction&&(e.transaction=null),c)):(r?.resetTransaction&&(e.transaction=null),c)}function o(c){throw s.abort(),r?.resetTransaction&&(e.transaction=null),c}}var aA,_i=Te(()=>{aA=require("../index");is();pE();a(Ge,"transaction");(0,aA._assignPackageExport)("transaction",Ge);Ge.commit=function(e){let t=(e[me]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Ge.abort=function(e){let t=(e[me]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});function TE(e,t,r,s,n){let i=e[0]??e.attribute,o,c,u,_,l=e[1]??e.value;if(l==null)throw new no.ClientError("Invalid value provided for query, must be non-null value");l instanceof Date&&(l=l.getTime());let d=e.comparator,f;switch(lA[d]||d){case"lt":o=!0,c=l;break;case"le":o=!0,c=l,u=!0;break;case"gt":o=l,_=!0;break;case"ge":o=l;break;case"prefix":o=l,c=l.slice(0),c[c.length-1]=ws.MAXIMUM_KEY;break;case"starts_with":o=l.toString(),c=l+"\uFFFF";break;case"between":o=l[0],o instanceof Date&&(o=o.getTime()),c=l[1],c instanceof Date&&(c=c.getTime()),u=!0;break;case pt.SEARCH_TYPES.EQUALS:case void 0:o=l,c=l,u=!0;break;case"ne":case"contains":case"ends_with":f=!0;break;default:throw new no.ClientError(`Unknown query comparator "${d}"`)}if(r){let S=o;o=c,c=S,S=!_,_=!u,u=S}let E=i===s.primaryKey||i==null,h=E?s.primaryStore:s.indices[i];if(!h||h.isIndexing||f){if(!n)throw new no.ClientError(`"${i}" is not indexed${h?.isIndexing?" yet":""}, can not search for this attribute`,404);let S=RE(e);if(!S)throw new no.ClientError(`Unknown search operator ${e.comparator}`);return s.primaryStore.getRange({start:!0,transaction:t,reverse:r}).map(({key:A,value:I})=>new Promise((N,Y)=>setImmediate(()=>{try{N(I&&S(I)?A:uA.SKIP)}catch(Q){Y(Q)}})))}let p={start:o,end:c,inclusiveEnd:u,exclusiveStart:_,values:!E,transaction:t,reverse:r};return E?h.getRange(p):h.getRange(p).map(({value:S})=>S)}function RE(e){let t=e.comparator,r=e[0]??e.attribute,s=e[1]??e.value;switch(s instanceof Date&&(s=s.getTime()),lA[t]||t){case pt.SEARCH_TYPES.EQUALS:case void 0:return Is(r,n=>n===s);case pt.SEARCH_TYPES.CONTAINS:return Is(r,n=>n?.toString().includes(s));case pt.SEARCH_TYPES.ENDS_WITH:case pt.SEARCH_TYPES._ENDS_WITH:return Is(r,n=>n?.toString().endsWith(s));case pt.SEARCH_TYPES.STARTS_WITH:case pt.SEARCH_TYPES._STARTS_WITH:return Is(r,n=>typeof n=="string"&&n.startsWith(s));case pt.SEARCH_TYPES.BETWEEN:return s[0]instanceof Date&&(s[0]=s[0].getTime()),s[1]instanceof Date&&(s[1]=s[1].getTime()),Is(r,n=>(0,ws.compareKeys)(n,s[0])>=0&&(0,ws.compareKeys)(n,s[1])<=0);case"gt":case pt.SEARCH_TYPES.GREATER_THAN:case pt.SEARCH_TYPES._GREATER_THAN:return Is(r,n=>(0,ws.compareKeys)(n,s)>0);case"ge":case pt.SEARCH_TYPES.GREATER_THAN_EQUAL:case pt.SEARCH_TYPES._GREATER_THAN_EQUAL:return Is(r,n=>(0,ws.compareKeys)(n,s)>=0);case pt.SEARCH_TYPES.LESS_THAN:case"lt":case pt.SEARCH_TYPES._LESS_THAN:return Is(r,n=>(0,ws.compareKeys)(n,s)<0);case"le":case pt.SEARCH_TYPES.LESS_THAN_EQUAL:case pt.SEARCH_TYPES._LESS_THAN_EQUAL:return Is(r,n=>(0,ws.compareKeys)(n,s)<=0);case"ne":return Is(r,n=>(0,ws.compareKeys)(n,s)!==0);default:throw new no.ClientError(`Unknown query comparator "${t}"`)}}function Is(e,t){return r=>{let s=r[e];return typeof s!="object"||!s?t(s):Array.isArray(s)?s.some(t):s instanceof Date?t(s.getTime()):!1}}function cl(e){if(!e)return;let t=new SE,r,s,n,i,o,c=cA;for(;r=c.exec(e);){i=c.lastIndex;let[,u,_]=r;switch(_){case")":case")&":switch(o){case"limit":if(u.indexOf(",")>-1){let[l,d]=u.split(",");t.offset=+l,t.limit=d-t.offset}else t.limit=+u;break;case"select":if(u[0]==="["){if(u[u.length-1]!=="]")throw new Error("Unmatched brackets");t.select=u.slice(1,-1).split(","),t.select.asArray=!0}else u.indexOf(",")>-1?t.select=(u.endsWith(",")?u.slice(0,-1):u).split(","):t.select=u;break;case"group-by":throw new Error("Group by is not implemented yet");case"sort":t.sort=u.split(",").map(l=>{switch(l[0]){case"-":return{attribute:l.slice(1),descending:!0};case"+":return{attribute:l.slice(1),descending:!1};default:return{attribute:l,descending:!1}}});break;default:throw new Error(`Unknown query function call ${o}`)}s=void 0;break;case"(":o=u;break;case"=":s?u.length<=2&&(n=u):(n="equals",s=decodeURIComponent(u));break;case"!=":case"<":case"<=":case">":case">=":n=Tq[_],s=decodeURIComponent(u);break;case"=*":n="ends_with",s=decodeURIComponent(u);break;case"*":case"*&":t.conditions.push({comparator:n==="ends_with"?"contains":"starts_with",attribute:s,value:decodeURIComponent(u)}),s=null;break;case"":case void 0:case"&":case"|":if(!s)throw new Error(`Unable to parse query, no part before ${_} at ${i} in ${e}`);t.conditions.push({comparator:n,attribute:s,value:decodeURIComponent(u)}),s=void 0;break;default:throw new Error(`Unknown operator ${_} in query ${e}`)}c=s?Rq:cA,c.lastIndex=i}if(i!==e.length)throw new Error(`Unable to parse query, unexpected end in ${e}`);return t}var no,pt,ws,uA,Tq,lA,cA,Rq,SE,ul=Te(()=>{no=D(j()),pt=D(ze()),ws=require("ordered-binary"),uA=require("lmdb"),Tq={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne"};a(TE,"idsForCondition");lA={greater_than:"gt",greater_than_equal:"ge",less_than:"lt",less_than_equal:"le",not_equal:"ne",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(RE,"filterByType");a(Is,"attributeComparator");cA=/([^?&|=<>!()*]+)([&|=<>!()*]*)/g,Rq=/([^&|*=]+)([&|*=]*)/g;a(cl,"parseQuery");SE=class{static{a(this,"Query")}constructor(){this.conditions=[]}[Symbol.iterator](){return this.conditions[Symbol.iterator]()}get(t){for(let r=0;r<this.conditions.length;r++){let s=this.conditions[r];if(s.attribute===t)return s.value}}}});var OE={};Qe(OE,{CONTEXT:()=>me,ID_PROPERTY:()=>Ie,IS_COLLECTION:()=>os,RECORD_PROPERTY:()=>Re,Resource:()=>Ot,SAVE_UPDATES_PROPERTY:()=>mA,snake_case:()=>Aq});function Aq(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function _A(e,t){if(e=e.slice(1),e.indexOf("/")===-1)return e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e));let r=e.split("/"),s=new AE(r.length);for(let n=0;n<r.length;n++)s[n]=t.coerceId(decodeURIComponent(r[n]));return s}function vr(e,t){s.reliesOnPrototype=!0;let r=t.hasContent;return s;function s(n,i,o){let c,u,_;if(r?o?(_=i,o=o[me]||o):i?typeof n=="object"&&n&&(!Array.isArray(n)||typeof n[0]=="object")?(_=n,c=_[this.primaryKey]??null,o=i[me]||i):_=i:(_=n,c=_[Ie]??_[this.primaryKey]??null):i?o=i[me]||i:n&&typeof n=="object"&&!Array.isArray(n)&&(o=n),c===void 0)if(typeof n=="string")c=n;else if(typeof n=="object"&&n)if(u=n,n[Symbol.iterator]){c=[];for(let f of n){if(typeof f=="object"&&f)break;c.push(f)}c.length===0?c=null:(c.length===1&&(c=c[0]),u.slice&&(u=u.slice(c.length,u.length),u.length===0&&(u=null)))}else{if(typeof(c=n.url)=="string"){let f=c.indexOf("?");if(f>-1){let h=this.parseQuery(c.slice(f+1));u?u=Object.assign(h,u):u=h,c=c.slice(0,f)}let E=this.parsePath(c,o,u);E?.query?(u=E.query,c=E.id):c=E}c===void 0&&(c=n.id??null)}else c=n??null;o||(o={});let l;if(u?.ensureLoaded!=null||u?.async?(l=Object.assign({},t),u?.ensureLoaded!=null&&(l.ensureLoaded=u.ensureLoaded),u.async&&(l.async=u.async)):l=t,o.transaction){let f=this.getResource(c,o,l);return f.then?f.then(d):d(f)}else return Ge(o,()=>{let f=this.getResource(c,o,l);return f.then?f.then(d):d(f)},l);function d(f){if(t.type==="read"&&(f[mA]=!1),o.authorize){o.authorize=!1;let E=t.type==="read"?f.allowRead(o.user,u,o):t.type==="update"?f.doesExist?.()===!1?f.allowCreate(o.user,_,o):f.allowUpdate(o.user,_,o):t.type==="create"?f.allowCreate(o.user,_,o):f.allowDelete(o.user,u,o);if(E?.then)return E.then(h=>{if(!h)throw new ll(o.user);return typeof _?.then=="function"?_.then(p=>e(f,u,o,p)):e(f,u,o,_)});if(!E)throw new ll(o.user)}return typeof _?.then=="function"?_.then(E=>e(f,u,o,E)):e(f,u,o,_)}a(d,"authorizeActionOnResource")}}function Br(e,t){let r=new hA.ClientError(`The ${e.constructor.name} does not have a ${t} method implemented`,405);r.allow=[],r.method=t;for(let s of["get","put","post","delete","query","move","copy"])typeof e[s]=="function"&&r.allow.push(s);throw r}function gE(e){let t=e[Re];if(t){let r=e[vt];return s=>{let n;return e.hasOwnProperty(s)&&typeof(n=e[s])!="function"?n:r&&s in r?r[s]:t[s]}}else return r=>e[r]}function dA(e){if(typeof e=="string")return t=>gE(t)(e);if(typeof e=="object"){if(e.asArray)return r=>{let s=[],n=gE(r);for(let i of e)s.push(n(i));return s};let t=e.forceNulls;return r=>{let s={},n=gE(r);for(let i of e){let o=n(i);o===void 0&&t&&(o=null),s[i]=o}return s}}else throw new Error("Invalid select argument type "+typeof e)}var fA,EA,hA,me,Ie,os,mA,Re,gq,Ot,ll,AE,is=Te(()=>{fA=require("crypto");Pa();EA=require("../index"),hA=D(j());ol();_i();ul();me=Symbol.for("context"),Ie=Symbol.for("primary-key"),os=Symbol("is-collection"),mA=Symbol("save-updates"),Re=Symbol("stored-record"),gq={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Ot=class{static{a(this,"Resource")}static transactions;constructor(t,r){this[Ie]=t;let s=r?.[me];this[me]=s!==void 0?s:r||null}static get=vr(function(t,r,s,n){let i=t.get?.(r);if(i?.then)return i.then(o);return o(i);function o(c){let u;if((u=r?.select)&&c!=null){let _=dA(u);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",resetTransaction:!0,ensureLoaded:!0,async:!0});static put=vr(function(t,r,s,n){if(Array.isArray(n)&&t[os]){let i=[],o=s.authorize;for(let c of n){let u=t.constructor,_=u.getResource(c[u.primaryKey],s,{async:!0});_.then?i.push(_.then(l=>l.put(c,s))):i.push(_.put(c,s))}return Promise.all(i)}return t.put?t.put(n,r):Br(t,"put")},{hasContent:!0,type:"update"});static delete=vr(function(t,r,s,n){return t.delete?t.delete(r):Br(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,fA.randomUUID)()}static create(t,r,s){let n;return t==null?n=this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?n=[...t,this.getNewId()]:typeof t!="object"?n=[t,this.getNewId()]:(n=this.getNewId(),s=r,r=t),Ge(s,()=>{let i=new this(n,s),o=i.put?i.put(r):Br(i,"put");return s.newLocation=n,s.createdResource=!0,o?.then?o.then(()=>n):n})}static invalidate=vr(function(t,r,s,n){return t.invalidate?t.invalidate(r):Br(t,"delete")},{hasContent:!1,type:"update"});static post=vr(function(t,r,s,n){return t[Ie]!=null&&t.update?.(),t.post(n,r)},{hasContent:!0,type:"create"});static connect=vr(function(t,r,s,n){return t.connect?t.connect(n,r):Br(t,"connect")},{hasContent:!0,type:"read"});static subscribe=vr(function(t,r,s,n){return t.subscribe?t.subscribe(r):Br(t,"subscribe")},{type:"read"});static publish=vr(function(t,r,s,n){return t[Ie]!=null&&t.update?.(),t.publish?t.publish(n,r):Br(t,"publish")},{hasContent:!0,type:"create"});static search=vr(function(t,r,s,n){let i=t.search?t.search(r):Br(t,"search"),o=s.select;if(o&&s.hasOwnProperty("select")&&i!=null){let c=dA(o);return i.map(c)}return i},{type:"read"});static query=vr(function(t,r,s,n){return t.search?t.search(n,r):Br(t,"search")},{hasContent:!0,type:"read"});static copy=vr(function(t,r,s,n){return t.copy?t.copy(n,r):Br(t,"copy")},{type:"create"});static move=vr(function(t,r,s,n){return t.move?t.move(n,r):Br(t,"move")},{type:"delete"});post(t){if(this[os])return this.constructor.create(this[Ie],t,this[me]);Br(this,"post")}static isCollection(t){return t?.[os]}static coerceId(t){return t}static parseQuery(t){return cl(t)}static parsePath(t,r,s){let n=t.indexOf(".");if(n>-1){let i=t.slice(n+1);t=t.slice(0,n);let o=r?.headers&&gq[i];if(o)r.headers.set("accept",o);else if(s)s.property=i;else return{query:{property:i},id:_A(t,this)}}return _A(t,this)}static getResource(t,r,s){let n,i=r[me],o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=t==null||Array.isArray(t)&&t[t.length-1]==null;let c=o&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let u;if(i.resourceCache?u=i.resourceCache:u=i.resourceCache=[],u.asMap){let _=u.asMap.get(t);if(n=_?.find(l=>l.constructor===c),n)return n;_||u.asMap.set(t,_=[]),_.push(n=new c(t,i))}else{if(n=u.find(_=>_[Ie]===t&&_.constructor===c),n)return n;if(u.push(n=new c(t,i)),u.length>10){let _=new Map;for(let l of u){let d=l[Ie],f=_.get(d);f?f.push(l):_.set(d,[l])}i.resourceCache.length=0,i.resourceCache.asMap=_}}}else n=new c(t,i);return o&&(n[os]=!0),n}subscribe(t){return new ss}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new ss}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[Ie]}getContext(){return this[me]}};Ot.prototype[me]=null;(0,EA._assignPackageExport)("Resource",Ot);a(Aq,"snake_case");ll=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(_A,"pathToId");AE=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(vr,"transactional");a(Br,"missingMethod");a(gE,"selectFromObject");a(dA,"transformForSelect")});var io={};Qe(io,{server:()=>ut});var pA,ut,Hr=Te(()=>{pA=require("../index"),ut={};(0,pA._assignPackageExport)("server",ut)});var bE={};Qe(bE,{loadGQLSchema:()=>bq,start:()=>NE,startOnMainThread:()=>Nq});function NE({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,s,n,i){let{parse:o,Source:c,Kind:u,NamedTypeNode:_,StringValueNode:l}=await import("graphql"),d=o(new c(r.toString(),n)),f=new Map,E=[],h;for(let S of d.definitions)switch(S.kind){case u.OBJECT_TYPE_DEFINITION:let Q=function(G){if(G.kind==="NonNullType"){let B=Q(G.type);return B.nullable=!1,B}if(G.kind==="ListType")return{type:"array",elements:Q(G.type)};let K={type:G.name?.value};return Object.defineProperty(K,"location",{value:G.loc.startToken}),K};a(Q,"getProperty");let A=S.name.value,I=[],N={table:null,database:null,properties:I};f.set(A,N);for(let G of S.directives){if(G.name.value==="table"){for(let w of G.arguments)N[w.name.value]=w.value.value;N.schema&&(N.database=N.schema),N.table||(N.table=A),N.audit&&(N.audit=N.audit!=="false"),N.attributes=N.properties,E.push(N)}if(G.name.value==="sealed"&&(N.sealed=!0),G.name.value==="export"){N.export=!0;for(let w of G.arguments)w.name.value==="name"&&(N.export={name:w.value.value})}}let Y=!1;for(let G of S.fields){let w=Q(G.type);w.name=G.name.value,I.push(w);for(let K of G.directives)if(K.name.value==="primaryKey")Y?console.warn("Can not define two attributes as a primary key"):(w.isPrimaryKey=!0,Y=!0);else if(K.name.value==="indexed")w.indexed=!0;else if(K.name.value==="createdTime")w.assignCreatedTime=!0;else if(K.name.value==="updatedTime")w.assignUpdatedTime=!0;else if(K.name.value==="expiresAt")w.expiresAt=!0;else if(K.name.value==="allow"){let B=w.authorizedRoles=[];for(let x of K.arguments)x.name.value==="role"&&B.push(x.value.value)}}N.typeName=A,A==="Query"&&(h=N)}function p(S){let A=f.get(S.type);A?S.properties=A.properties:S.type==="array"?p(S.elements):Oq.includes(S.type)||(0,SA.getWorkerIndex)()===0&&console.error(`The type ${S.type} is unknown at line ${S.location.line}, column ${S.location.column}, in ${n}`)}a(p,"connectPropertyType");for(let S of f.values())for(let A of S.properties)p(A);for(let S of E)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,_l.dirname)(s),S.tableClass):i.set((0,_l.dirname)(s)+"/"+(S.export.name||S.typeName),S.tableClass));if(h)for(let S of h.properties){let A=f.get(S.type);if(!A)throw new Error(`${S.type} was not found as a Query export`);i.set((0,_l.dirname)(s)+"/"+S.name,A.tableClass)}}}var _l,SA,Oq,Nq,bq,TA=Te(()=>{_l=require("path");fe();SA=D(Ze()),Oq=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any"];a(NE,"start");Nq=NE,bq=NE({ensureTable:et}).handleFile});async function dl(e){return yq?(Ba||(Ba=Iq(Cq)),(await(await Ba).import(e)).namespace):import(e)}async function Iq(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Ba=new Compartment({console,Math,Date,fetch:wq,...e()},{},{name:"h-dapp",resolveHook(r,s){return r==="harperdb"?"harperdb":(r=new URL(r,s).toString(),(0,gA.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(n){Object.assign(n,{Resource:Ot,tables:Er,databases:qe})}};let s=await(0,RA.readFile)(new URL(r),{encoding:"utf-8"});return new t(s,r)}}),Ba}function wq(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 Cq(){return{Resource:Ot,tables:Er}}var RA,gA,yq,Ba,yE=Te(()=>{is();fe();RA=require("fs/promises"),gA=require("path"),yq=!1;a(dl,"secureImport");a(Iq,"getCompartment");a(wq,"secureOnlyFetch");a(Cq,"getGlobalVars")});var wE={};Qe(wE,{handleFile:()=>Lq});async function Lq(e,t,r,s){let n=new Map,i=(0,AA.pathToFileURL)(r).toString(),o=await dl(i);u(o.default)&&s.set((0,IE.dirname)(t),o.default),c(o,(0,IE.dirname)(t));function c(_,l){for(let d in _){let f=_[d];u(f)?s.set(l+"/"+d,f):typeof f=="object"&&c(f,l+"/"+d)}}a(c,"recurseForResources");function u(_){return typeof _=="function"&&(_.get||_.put||_.post||_.delete)}return a(u,"isResource"),n}var AA,IE,OA=Te(()=>{AA=require("url");yE();IE=require("path");a(Lq,"handleFile")});var LE={};Qe(LE,{start:()=>Dq});function Dq({resources:e}){e.set("login",CE),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var CE,NA=Te(()=>{is();a(Dq,"start");CE=class extends Ot{static{a(this,"Login")}static async get(t,r,s){}static async post(t,r,s){let{username:n,password:i,redirect:o}=r;return{data:await s.login(n,i)}}}});var UE=T((Xse,IA)=>{"use strict";var{Readable:Uq}=require("stream"),Mq=1e4;IA.exports={streamAsJSON(e){return new DE({value:e})}};var DE=class extends Uq{static{a(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0),this.activeIterators=[]}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],s=t[Symbol.iterator];if((s||r)&&!t.then){yield"[";let n=!0;if((r||s)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();this.activeIterators.push(i);let o;for(;;)if(o=i.next(),o.then&&(yield o.then(c=>(o=c,""))),o.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else n?n=!1:yield",",yield*this.serialize(o.value)}for(let i of t)n?n=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(n=>this.serialize(n),bA)}catch(n){yield bA(n)}else yield JSON.stringify(t)}else yield JSON.stringify(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);yA(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>Mq?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 yA(this.readIterator(t.childIterator),s=>{if(s)return t.childIterator=null,this.readIterator(t)});do{let s=t.next();if(s.done)return!0;if(r=s.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(n=>{if(n&&typeof n.return=="function")return t.childIterator=n,this.readIterator(t);if(this.push(n+""))return this.readIterator(t)});if(typeof r.return=="function")return t.childIterator=r,this.readIterator(t)}}while(this.push(r))}catch(r){return console.error(r),this.push(r.toString()),this.push(null),!0}}_destroy(t,r){for(let s of this.activeIterators)t?s.throw(t):s.return();r()}};function bA(e){return console.error(e),JSON.stringify(e.toString())}a(bA,"handleError");function yA(e,t,r){return e&&e.then?r?e.then(t,r):e.then(t):t(e)}a(yA,"when")});var qA=T((ene,GA)=>{"use strict";var ME=require("recursive-iterator"),Pq=require("alasql"),PE=require("clone"),wA=$(),{handleHDBError:CA,hdb_errors:vq}=j(),{HDB_ERROR_MSGS:LA,HTTP_STATUS_CODES:DA}=vq,{getDatabases:Bq}=(fe(),Z(Ce)),Hq=["DISTINCT_ARRAY"],UA=Symbol("validateTables"),vE=Symbol("validateTable"),Zse=Symbol("getAllColumns"),MA=Symbol("validateAllColumns"),fl=Symbol("findColumn"),PA=Symbol("validateOrderBy"),Ha=Symbol("validateSegment"),BE=Symbol("validateColumn"),vA=Symbol("setColumnsForTable"),BA=Symbol("checkColumnsForAsterisk"),HA=Symbol("validateGroupBy"),FA=Symbol("hasColumns"),HE=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[UA](),this[BA](),this[MA]()}[UA](){if(this[FA]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[vE](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[vE](t.table)})}}[FA](){let t=!1,r=new ME(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[vE](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=Bq();if(!r[t.databaseid])throw CA(new Error,LA.SCHEMA_NOT_FOUND(t.databaseid),DA.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw CA(new Error,LA.TABLE_NOT_FOUND(t.databaseid,t.tableid),DA.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(n=>{let i=PE(n);i.table=PE(t),this.attributes.push(i)})}[fl](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)}[BA](){let t=new ME(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[vA](r.tableid)}[vA](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new Pq.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[MA](){this[Ha](this.statement.columns,!1),this[Ha](this.statement.joins,!1),this[Ha](this.statement.where,!1),this[HA](this.statement.group,!1),this[Ha](this.statement.order,!0)}[Ha](t,r){if(!t)return;let s=new ME(t),n=[];for(let{node:i,path:o}of s)!wA.isEmpty(i)&&!wA.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[PA](i):n.push(this[BE](i)));return n}[HA](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&Hq.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=PE(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[fl](s)[0];n&&r.push(n)}}}),this.statement.group.forEach(s=>{let n=null;if(!s.columnid)r.forEach((i,o)=>{if(i.toString()===s.toString()){n=i,r.splice(o,1);return}});else{let i=this[fl](s);if(!i||i.length===0)throw`unknown column '${s.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${s.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){n=o,r.splice(c,1);return}})}if(!n)throw`group by column '${s.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[PA](t){let r=this.statement.columns.filter(s=>s.as===t.columnid);if(r.length>1)throw`ambiguous column reference ${(t.tableid?t.tableid+".":"")+t.columnid} in order by`;r.length===0&&this[BE](t)}[BE](t){let r=this[fl](t),s=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${s}`;if(r.length>1)throw`ambiguous column reference ${s}`;return r[0]}};GA.exports=HE});var kA=T((rne,xA)=>{"use strict";var FE=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")}};xA.exports=FE});var $A=T((nne,VA)=>{"use strict";var GE=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};VA.exports=GE});var rO={};Qe(rO,{AUDIT_STORE_OPTIONS:()=>eO,createAuditEntry:()=>ml,openAuditStore:()=>hl,readAuditEntry:()=>hr,setAuditRetention:()=>Fq,transactionKeyEncoder:()=>ZA});function hl(e){let t=e.auditStore=e.openDB(zA.AUDIT_STORE_NAME,eO);t.rootStore=e;let r=[];return t.addDeleteRemovalCallback=function(s,n){return r[s]=n,{remove(){delete r[s]}}},(0,XA.getWorkerIndex)()===0&&e.on("aftercommit",()=>{Fa||(Fa=setTimeout(()=>{if(Fa=null,t.rootStore.status!=="closed")for(let{key:s,value:n}of t.getRange({start:0,end:Date.now()-qE})){if((n[0]&15)===kE){let i=hr(n),o=i.tableId;r[o]?.(i.recordId)}t.remove(s)}},qE/10).unref())}),t}function Fq(e){clearTimeout(Fa),Fa=null,qE=e}function ml(e,t,r,s,n,i,o){let c=tO[i],u=1;s&&(s>1?oo.setFloat64(0,s):Fr.set(YE),u=9),f(0),f(t),d(r),oo.setFloat64(u,e),u+=8,n?d(n):Fr[u++]=0,Fr[s?8:0]=c;let l=Fr.subarray(0,u);if(o)return Buffer.concat([l,o]);return l;function d(E){let h=u;u+=1,u=(0,ao.writeKey)(E,Fr,u);let p=u-h-1;p>127?p>16383?($E.error("Key or username was too large for audit entry",E),u=h+1,Fr[h]=0):(Fr.copyWithin(h+2,h+1,u),oo.setUint16(h,p|32768),u++):Fr[h]=p}function f(E){E<128?Fr[u++]=E:E<16384?(oo.setUint16(u,E|32768),u+=2):E<1056964608?(oo.setUint32(u,E|3221225472),u+=4):(Fr[u]=255,oo.setUint32(u+1,E),u+=5)}}function hr(e){try{let t=e.dataView||(e.dataView=new VE(e.buffer,e.byteOffset,e.byteLength)),r;e[0]==66&&(r=t.readFloat64());let s=t.readInt(),n=t.readInt(),i=t.readInt(),o=t.readInt(),c=t.position,u=t.position+=o,_=t.readFloat64();o=t.readInt();let l=t.position,d=t.position+=o;return{type:tO[s&7],tableId:i,get recordId(){return QA(e,c,u)},version:_,previousLocalTime:r,get user(){return d>l?QA(e,l,d):void 0},getValue(f){return s&xE?f.decoder.decode(e.subarray(t.position)):void 0}}}catch{return $E.error("Reading audit entry error",e),{}}}function QA(e,t,r){let s=e.subarray(t,r);return(0,ao.readKey)(s,0,r-t)}var ao,El,zA,JA,XA,jA,$E,Fr,oo,ZA,eO,qE,Fa,xE,YA,kE,KA,WA,tO,VE,co=Te(()=>{ao=require("ordered-binary"),El=D(X()),zA=D(ze()),JA=D(b()),XA=D(Ze()),jA=D($());qa();$E=D(q());(0,El.initSync)();Fr=Buffer.alloc(1024),oo=new DataView(Fr.buffer,Fr.byteOffset,1024),ZA={writeKey(e,t,r){return e===Ga?(t.set(Ga,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,ao.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,ao.readKey)(e,t,r)}},eO={encoding:"binary",keyEncoder:ZA},qE=(0,jA.convertToMS)((0,El.get)(JA.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,Fa=null;a(hl,"openAuditStore");a(Fq,"setAuditRetention");xE=16,YA=1,kE=2,KA=3,WA=4,tO={put:YA|xE,[YA]:"put",delete:kE,[kE]:"delete",message:KA|xE,[KA]:"message",invalidate:WA,[WA]:"invalidate"};a(ml,"createAuditEntry");a(hr,"readAuditEntry");VE=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(QA,"readKeySafely")});var cO={};Qe(cO,{HAS_EXPIRATION:()=>XE,LAST_TIMESTAMP_PLACEHOLDER:()=>Ga,LOCAL_TIMESTAMP:()=>Gq,METADATA:()=>xa,NO_TIMESTAMP:()=>KE,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>YE,RecordEncoder:()=>JE,TIMESTAMP_ASSIGN_LAST:()=>xq,TIMESTAMP_ASSIGN_NEW:()=>iO,TIMESTAMP_ASSIGN_PREVIOUS:()=>oO,TIMESTAMP_PLACEHOLDER:()=>pl,TIMESTAMP_RECORD_PREVIOUS:()=>WE,getUpdateRecord:()=>jE,handleLocalTimeForGets:()=>Rl});function aO(){return lo[0]=lo[0]^64,qq.getFloat64(0)}function Rl(e){let t=e.getEntry;e.getEntry=function(i,o){let c=t.call(this,i,o),u=c?.value,_=u?.[xa];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c};let r=e.get;e.get=function(i,o){let c=r.call(this,i,o);return c?.[xa]>=0?c.value:c};let s=e.getRange;e.getRange=function(i){let o=s.call(this,i);return i.valuesForKey?o.map(c=>c?.value):i.values===!1||i.onlyCount?o:o.map(c=>{let u=c.value,_=u[xa];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c})},e.env.metadataRetriever||(e.env.metadataRetriever=!0,e.on("aftercommit",({next:i,last:o})=>{do{let c=i.meta,u=c&&c.store;if(u&&!(i.flag&67108864)){let _=u.cache;if(c.key){let l=kq.call(_,c.key);if(l&&l.timestampBytes){let d=l.timestampOffset;l.timestampBytes[d]===2&&(l.timestampBytes.copy(lo,0,d),l.timestampBytes=null,l.localTime=aO())}}}}while(i!=o&&(i=i.next))}));let n=e.useReadTransaction();if(n.done(),!n.done.isTracked){let i=n.constructor,o=n.use,c=n.done;i.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,di.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let u=0;u<di.length;u++){let _=di[u].deref();(!_||_===this||_.isDone||_.isCommitted)&&di.splice(u--,1)}},i.prototype.done.isTracked=!0}return e}function jE(e,t,r){return function(s,n,i,o,c=-1,u,_,l,d="put",f,E){if(f||u==null?uo=i?.localTime?WE|oO:KE:uo=u?i?.localTime?WE|16384:iO|16384:KE,l>0&&(c|=XE),Tl=c,zE=l,i?.version===o&&u===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:uo>0},p;try{f&&(h.ifVersion=p=i?.version??null);let S=e.put(s,n,h);if(e.cache&&S.result!==!1){let A=e.cache.get(s);A&&(c>=0?A.metadataFlags=c:A.metadataFlags>=0&&(A.metadataFlags=void 0),(l||!A.expiresAt)&&(A.expiresAt=l),h.instructedWrite&&(A.localTime||(A.localTime=1),A.timestampBytes=QE,A.timestampOffset=QE.start||0))}if(u){let A=_?.user?.username;if(E&&(Sl=e.encoder.encode(E)),f&&i?.localTime){let I=i?.localTime,N=r.get(I);if(N){let Y=hr(N).previousLocalTime;return r.put(I,ml(o,t,s,Y,A,d,Sl),{ifVersion:p}),S}}r.put(Ga,ml(o,t,s,i?.localTime?1:0,A,d,Sl),{append:d!=="invalidate",instructedWrite:!0,ifVersion:p})}return S}catch(S){throw S.message+=" id: "+s+" options: "+h,S}}}var sO,nO,pl,Ga,YE,Gq,xa,lo,qq,KE,iO,xq,oO,WE,XE,QE,Sl,uo,Tl,zE,JE,kq,di,qa=Te(()=>{sO=require("msgpackr");co();nO=D(q()),pl=new Uint8Array([1,1,1,1,4,64,0,0]),Ga=new Uint8Array([1,1,1,1,1,0,0,0]),YE=new Uint8Array([1,1,1,1,3,64,0,0]),Gq=Symbol("local-timestamp"),xa=Symbol("metadata"),lo=new Uint8Array(8),qq=new DataView(lo.buffer,0,8),KE=0,iO=0,xq=1,oO=3,WE=4,XE=16,uo=0,Tl=-1,zE=0,JE=class extends sO.Encoder{static{a(this,"RecordEncoder")}constructor(t){super(t);let r=this.encode;this.encode=function(s,n){if(uo||Tl>=0){let i=0,o=uo;o&&(i+=8,uo=0);let c=Tl,u=zE;c>=0&&(i+=2,Tl=-1,u&&(i+=8,zE=0));let _=QE=r.call(this,s,n|2048|i);Sl=_.subarray((_.start||0)+i,_.end);let l=_.start||0;return o&&(pl[4]=o,pl[5]=o>>8,_.set(pl,l),l+=8),c>=0&&(_[l++]=c,_[l++]=0,u&&(_.dataView||(_.dataView=new DataView(_.buffer,_.byteOffset,_.byteLength))).setFloat64(l,u)),_}else return r.call(this,s,n)}}decode(t,r){let s=r?.start||0,n=r>-1?r:r?.end||t.length,i=t[s],o=0;try{if(i<32&&n>2){let c=s,u;if(i===2){if(t.copy)t.copy(lo,0,c),c+=8;else for(let d=0;d<8;d++)lo[d]=t[c++];u=aO(),i=t[c]}let _;i<32&&(o=i,c+=2,o&XE&&(_=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8));let l=super.decode(t.subarray(c,n),n-c);return{localTime:u,value:l,[xa]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(aO,"getTimestamp");kq=Map.prototype.get;a(Rl,"handleLocalTimeForGets");di=[];setInterval(()=>{for(let e=0;e<di.length;e++){let t=di[e].deref();!t||t.isDone||t.isCommitted?di.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&nO.error("Read transaction detected that has been open too long (over one minute), make sure read transactions are quickly closed",t),t.openTimer++):t.openTimer=1)}},15e3).unref();a(jE,"getUpdateRecord")});var gl=T((lne,uO)=>{"use strict";var eh=X(),th=b(),{RecordEncoder:Vq}=(qa(),Z(cO));eh.initSync();var $q=eh.get(th.CONFIG_PARAMS.STORAGE_COMPRESSION),Yq=eh.get(th.CONFIG_PARAMS.STORAGE_CACHING)!==!1,Kq=th.UPDATES_PROPERTY,ZE=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=$q&&r&&{startingOffset:32},this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=Yq&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:Vq},this.alwaysLazyProperty=s=>s===Kq)}};uO.exports=ZE});var Ol=T((dne,_O)=>{"use strict";var _o=X(),ka=b();_o.initSync();var Wq=_o.get(ka.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||_o.get(ka.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||_o.get(ka.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",lO=_o.get(ka.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),Qq=_o.get(ka.CONFIG_PARAMS.STORAGE_NOREADAHEAD),Al=class{static{a(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=1e3,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.noSync=Wq,this.noFSAccess=!0,lO!==void 0&&(this.overlappingSync=lO),this.noReadAhead=Qq}};_O.exports=Al;Al.MAX_DBS=1e4});var Ue=T((Ene,gO)=>{"use strict";var sh=require("lmdb"),as=require("fs-extra"),mr=require("path"),Nl=fr(),EO=q(),Kt=dr().LMDB_ERRORS_ENUM,bl=$A(),nh=gl(),hO=Ol(),Un=ze(),dO=b(),{table:zq,resetDatabases:Jq}=(fe(),Z(Ce)),fO=X(),cs=Un.INTERNAL_DBIS_NAME,mO=Un.DBI_DEFINITION_NAME,Xq="data.mdb",jq="lock.mdb",Va=".mdb",Zq="-lock",rh=class{static{a(this,"TransactionCursor")}constructor(t,r,s=!1){this.dbi=Gr(t,r),this.key_type=this.dbi[Un.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Un.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new sh.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function yl(e,t){if(e===void 0)throw new Error(Kt.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Kt.ENV_NAME_REQUIRED)}a(yl,"pathEnvNameValidation");async function ih(e,t,r=!0){try{await as.access(e)}catch(s){throw s.code==="ENOENT"?new Error(Kt.INVALID_BASE_PATH):s}try{let s=mr.join(e,t+Va);return await as.access(s,as.constants.R_OK|as.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await as.access(mr.join(e,t,Xq),as.constants.R_OK|as.constants.F_OK),mr.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(Kt.INVALID_ENVIRONMENT)}else throw new Error(Kt.INVALID_ENVIRONMENT);throw s}}a(ih,"validateEnvironmentPath");function Il(e,t){if(Nl.validateEnv(e),t===void 0)throw new Error(Kt.DBI_NAME_REQUIRED)}a(Il,"validateEnvDBIName");async function ex(e,t,r=!1,s=!1){yl(e,t);let n=mr.basename(e);t=t.toString();let i=fO.get(dO.CONFIG_PARAMS.DATABASES);i||fO.setProperty(dO.CONFIG_PARAMS.DATABASES,i={}),i[n]||(i[n]={}),i[n].path=e;try{return await ih(e,t,s),pO(e,t,r)}catch(o){if(o.message===Kt.INVALID_ENVIRONMENT){let c=mr.join(e,t);await as.mkdirp(s?c:e);let u=new hO(s?c:c+Va,!1),_=sh.open(u);_.dbis=Object.create(null);let l=new nh(!1);_.openDB(cs,l),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=oh(e,t,r);return _[Un.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(ex,"createEnvironment");async function tx(e,t,r,s=!0){yl(e,t),t=t.toString();let n=mr.join(e,t);return zq({table:t,database:mr.parse(e).name,path:n,attributes:[{name:"id",isPrimaryKey:!0}]})}a(tx,"copyEnvironment");async function pO(e,t,r=!1){yl(e,t),t=t.toString();let s=oh(e,t,r);if(global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null)),global.lmdb_map[s]!==void 0)return global.lmdb_map[s];let n=await ih(e,t),i=mr.join(e,t+Va),o=n!=i,c=new hO(n,o),u=sh.open(c);u.dbis=Object.create(null);let _=TO(u);for(let l=0;l<_.length;l++)Gr(u,_[l]);return u[Un.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=u,u}a(pO,"openEnvironment");async function rx(e,t,r=!1){yl(e,t),t=t.toString();let s=mr.join(e,t+Va),n=await ih(e,t);if(global.lmdb_map!==void 0){let i=oh(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await SO(o),delete global.lmdb_map[i]}}await as.remove(n),await as.remove(n===s?n+Zq:mr.join(mr.dirname(n),jq))}a(rx,"deleteEnvironment");async function SO(e){Nl.validateEnv(e);let t=e[Un.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(SO,"closeEnvironment");function oh(e,t,r=!1){let n=`${mr.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(oh,"getCachedEnvironmentName");function sx(e){Nl.validateEnv(e);let t=Object.create(null),r=Gr(e,cs);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==cs)try{t[s]=Object.assign(new bl,n)}catch{EO.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(sx,"listDBIDefinitions");function TO(e){Nl.validateEnv(e);let t=[],r=Gr(e,cs);for(let{key:s}of r.getRange({start:!1}))s!==cs&&t.push(s);return t}a(TO,"listDBIs");function nx(e,t){let s=Gr(e,cs).getEntry(t),n=new bl;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{EO.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(nx,"getDBIDefinition");function RO(e,t,r,s=!r){if(Il(e,t),t=t.toString(),t===cs)throw new Error(Kt.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Gr(e,t)}catch(n){if(n.message===Kt.DBI_DOES_NOT_EXIST){let i=new nh(r,s===!0),o=e.openDB(t,i),c=new bl(r===!0,s);return o[mO]=c,Gr(e,cs).putSync(t,c),e.dbis[t]=o,o}throw n}}a(RO,"createDBI");function Gr(e,t){if(Il(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==cs?r=nx(e,t):r=new bl,r===void 0)throw new Error(Kt.DBI_DOES_NOT_EXIST);let s;try{let n=new nh(r.dup_sort,r.useVersions);if(s=e.openDB(t,n),s.db===void 0)throw new Error("MDB_NOTFOUND")}catch(n){throw n.message.includes("MDB_NOTFOUND")===!0?new Error(Kt.DBI_DOES_NOT_EXIST):n}return s[mO]=r,e.dbis[t]=s,s}a(Gr,"openDBI");function ix(e,t){Il(e,t),t=t.toString();let r=Gr(e,t),s=r.getStats();return r[Un.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(ix,"statDBI");async function ox(e,t){try{let r=mr.join(e,t+Va);return(await as.stat(r)).size}catch{throw new Error(Kt.INVALID_ENVIRONMENT)}}a(ox,"environmentDataSize");function ax(e,t){if(Il(e,t),t=t.toString(),t===cs)throw new Error(Kt.CANNOT_DROP_INTERNAL_DBIS_NAME);Gr(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Gr(e,cs).removeSync(t)}a(ax,"dropDBI");function cx(e,t,r){let s;for(let n=0;n<r.length;n++){let i=r[n];if(!e.dbis[i])try{Gr(e,i)}catch(o){if(o.message===Kt.DBI_DOES_NOT_EXIST)RO(e,i,i!==t,i===t),s=!0;else throw o}}s&&Jq()}a(cx,"initializeDBIs");gO.exports={openDBI:Gr,openEnvironment:pO,createEnvironment:ex,listDBIs:TO,listDBIDefinitions:sx,createDBI:RO,dropDBI:ax,statDBI:ix,deleteEnvironment:rx,initializeDBIs:cx,TransactionCursor:rh,environmentDataSize:ox,copyEnvironment:tx,closeEnvironment:SO}});var OO=T((mne,AO)=>{"use strict";var ah=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};AO.exports=ah});var bO=T((Sne,NO)=>{"use strict";var ch=class{static{a(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],s=void 0,n=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s,this.original_records=n}};NO.exports=ch});var IO=T((Rne,yO)=>{"use strict";var uh=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};yO.exports=uh});var fo=T((bne,LO)=>{"use strict";var ux=Ue(),lx=OO(),_x=bO(),dx=IO(),Cs=fr(),$a=dr().LMDB_ERRORS_ENUM,fx=ze(),Zs=b(),Ex=$(),hx=require("uuid"),Ane=require("lmdb"),{handleHDBError:mx,hdb_errors:px}=j(),{OVERFLOW_MARKER:One,MAX_SEARCH_KEY_LENGTH:Nne}=fx,wO=X();wO.initSync();var wl=wO.get(Zs.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),lh=Zs.TIME_STAMP_NAMES_ENUM.CREATED_TIME,fi=Zs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Sx(e,t,r,s,n=Cs.getNextMonotonicTime()){Eh(e,t,r,s),_h(e,t,r);let i=new lx,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u];CO(_,!0,n);let l=Tx(e,t,r,_),d=_[t];o.push(l),c.push(d)}return dh(o,c,s,i,n)}a(Sx,"insertRecords");function Tx(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||s.hasOwnProperty(o)===!1)continue;let c=s[o];if(typeof c=="function"){let l=c([[{}]]);Array.isArray(l)&&(c=l[0][Zs.FUNC_VAL],s[o]=c)}let u=Cs.getIndexedValues(c),_=e.dbis[o];if(u){wl&&_.prefetch(u.map(l=>({key:l,value:n})),Cl);for(let l=0,d=u.length;l<d;l++)_.put(u[l],n)}}wl&&e.dbis[t].prefetch([n],Cl),e.dbis[t].put(n,s,s[fi])})}a(Tx,"insertRecord");function Rx(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(Rx,"removeSkippedRecords");function CO(e,t,r){let s=r>0;(s||!Number.isInteger(e[fi]))&&(e[fi]=r||(r=Cs.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[lh]))&&(e[lh]=r||Cs.getNextMonotonicTime()):delete e[lh]}a(CO,"setTimestamps");function _h(e,t,r){r.indexOf(Zs.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Zs.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Zs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Zs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),ux.initializeDBIs(e,t,r)}a(_h,"initializeTransaction");async function gx(e,t,r,s,n=Cs.getNextMonotonicTime()){Eh(e,t,r,s),_h(e,t,r);let i=new _x,o=[],c=[],u=[];for(let _=0;_<s.length;_++){let l=s[_],d=l[t],f;try{f=fh(e,t,l,d,i,!0,n)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(f),u.push(d)}return dh(c,u,s,i,n,o)}a(gx,"updateRecords");async function Ax(e,t,r,s,n=Cs.getNextMonotonicTime()){try{Eh(e,t,r,s)}catch(u){throw mx(u,u.message,px.HTTP_STATUS_CODES.BAD_REQUEST)}_h(e,t,r);let i=new dx,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u],l;Ex.isEmpty(_[t])?(l=hx.v4(),_[t]=l):l=_[t];let d=fh(e,t,_,l,i,!1,n);o.push(d),c.push(l)}return dh(o,c,s,i,n)}a(Ax,"upsertRecords");async function dh(e,t,r,s,n,i=[]){let o=await Promise.all(e);for(let c=0,u=o.length;c<u;c++)o[c]===!0?s.written_hashes.push(t[c]):(s.skipped_hashes.push(t[c]),i.push(c));return s.txn_time=n||Cs.getNextMonotonicTime(),Rx(r,i),s}a(dh,"finalizeWrite");function fh(e,t,r,s,n,i=!1,o){let c=e.dbis[t],u=c.getEntry(s),_=u?.value,l=_;if(!_){if(i)return!1;_={}}if(CO(r,!l,o),Number.isInteger(r[fi])&&_[fi]>r[fi])return!1;l&&n.original_records.push(_);let d,f=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let p=r[h],S=e.dbis[h];if(S===void 0)continue;let A=_[h];if(typeof p=="function"){let N=p([[_]]);Array.isArray(N)&&(p=N[0][Zs.FUNC_VAL],r[h]=p)}if(p===A)continue;let I=Cs.getIndexedValues(A);if(I){wl&&S.prefetch(I.map(N=>({key:N,value:s})),Cl);for(let N=0,Y=I.length;N<Y;N++)S.remove(I[N],s)}if(I=Cs.getIndexedValues(p),I){wl&&S.prefetch(I.map(N=>({key:N,value:s})),Cl);for(let N=0,Y=I.length;N<Y;N++)S.put(I[N],s)}}let E=Object.assign({},_,r);c.put(s,E,E[fi])},"do_put");return u?d=c.ifVersion(s,u.version,f):d=c.ifNoExists(s,f),d.then(E=>E?!0:fh(e,t,r,s,n,i,o))}a(fh,"updateUpsertRecord");function Ox(e,t,r){if(Cs.validateEnv(e),t===void 0)throw new Error($a.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error($a.WRITE_ATTRIBUTES_REQUIRED):new Error($a.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(Ox,"validateBasic");function Eh(e,t,r,s){if(Ox(e,t,r),!Array.isArray(s))throw s===void 0?new Error($a.RECORDS_REQUIRED):new Error($a.RECORDS_MUST_BE_ARRAY)}a(Eh,"validateWrite");function Cl(){}a(Cl,"noop");LO.exports={insertRecords:Sx,updateRecords:gx,upsertRecords:Ax}});var Ei=T((Ine,Nx)=>{Nx.exports={hdb_table:{hash_attribute:"id",name:"hdb_table",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"name"},{attribute:"hash_attribute"},{attribute:"schema"},{attribute:"residence"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_attribute:{hash_attribute:"id",name:"hdb_attribute",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"schema"},{attribute:"table"},{attribute:"attribute"},{attribute:"schema_table"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_schema:{hash_attribute:"name",name:"hdb_schema",schema:"system",residence:["*"],attributes:[{attribute:"name"},{attribute:"createddate"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metric"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]}}});var Ls=T((wne,MO)=>{"use strict";var UO=$(),DO=b(),Eo=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,en=require("joi"),Mn={schema_format:{pattern:Eo,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},bx=en.alternatives(en.string().min(1).max(Mn.schema_length.maximum).pattern(Eo).messages({"string.pattern.base":"{:#label} "+Mn.schema_format.message}),en.number()).required(),yx=en.alternatives(en.string().min(1).max(Mn.schema_length.maximum).pattern(Eo).messages({"string.pattern.base":"{:#label} "+Mn.schema_format.message}),en.number()),Ix=en.alternatives(en.string().min(1).max(Mn.schema_length.maximum).pattern(Eo).messages({"string.pattern.base":"{:#label} "+Mn.schema_format.message}),en.number()).required();function wx(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Mn.schema_length.maximum?`'${e}' maximum of 250 characters`:Eo.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(wx,"checkValidTable");function Cx(e,t){return UO.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(Cx,"validateSchemaExists");function Lx(e,t){let r=t.state.ancestors[0].schema;return UO.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(Lx,"validateTableExists");function Dx(e,t){return e.toLowerCase()===DO.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${DO.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(Dx,"validateSchemaName");MO.exports={common_validators:Mn,schema_regex:Eo,hdb_schema_table:bx,validateSchemaExists:Cx,validateTableExists:Lx,validateSchemaName:Dx,checkValidTable:wx,hdb_database:yx,hdb_table:Ix}});var xe=T((Lne,PO)=>{"use strict";var Wt=require("validate.js");Wt.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||Wt.validators.type.checks[t](e)?null:` must be a '${t}' value`};Wt.validators.type.checks={Object:function(e){return Wt.isObject(e)&&!Wt.isArray(e)},Array:Wt.isArray,Integer:Wt.isInteger,Number:Wt.isNumber,String:Wt.isString,Date:Wt.isDate,Boolean:function(e){return typeof e=="boolean"}};Wt.validators.hasValidFileExt=function(e,t){return Wt.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};PO.exports={validateObject:Ux,validateObjectAsync:Mx,validateBySchema:Px};function Ux(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Wt(e,t,{format:"flat"});return r?new Error(r):null}a(Ux,"validateObject");async function Mx(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Wt.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(Mx,"validateObjectAsync");function Px(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(Px,"validateBySchema")});var Ll=T((Une,vO)=>{var{common_validators:Ds}=Ls(),Ka=xe(),Ya="is required",tt={database:{presence:!1,format:Ds.schema_format,length:Ds.schema_length},schema:{presence:!1,format:Ds.schema_format,length:Ds.schema_length},table:{presence:!0,format:Ds.schema_format,length:Ds.schema_length},attribute:{presence:!0,format:Ds.schema_format,length:Ds.schema_length},hash_attribute:{presence:!0,format:Ds.schema_format,length:Ds.schema_length}};function Wa(e){for(let t in e)e[t]=e[t]===null||e[t]===void 0||typeof e[t]=="object"?e[t]:e[t].toString();return e}a(Wa,"makeAttributesStrings");function vx(e){return e=Wa(e),tt.table.presence=!1,tt.attribute.presence=!1,tt.hash_attribute.presence=!1,Ka.validateObject(e,tt)}a(vx,"schema_object");function Bx(e){return e=Wa(e),tt.table.presence={message:Ya},tt.attribute.presence=!1,tt.hash_attribute.presence=!1,Ka.validateObject(e,tt)}a(Bx,"table_object");function Hx(e){return e=Wa(e),tt.table.presence={message:Ya},tt.attribute.presence=!1,Ka.validateObject(e,tt)}a(Hx,"create_table_object");function Fx(e){return e=Wa(e),tt.table.presence={message:Ya},tt.attribute.presence={message:Ya},tt.hash_attribute.presence=!1,Ka.validateObject(e,tt)}a(Fx,"attribute_object");function Gx(e){return e=Wa(e),tt.table.presence={message:Ya},tt.attribute.presence=!1,tt.hash_attribute.presence=!1,Ka.validateObject(e,tt)}a(Gx,"describe_table");function qx(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(qx,"validateTableResidence");vO.exports={schema_object:vx,create_table_object:Hx,table_object:Bx,attribute_object:Fx,describe_table:Gx,validateTableResidence:qx}});var HO=T((Pne,BO)=>{"use strict";var xx=require("uuid"),hh=class{static{a(this,"CreateAttributeObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||xx.v4(),this.schema_table=`${this.schema}.${this.table}`}};BO.exports=hh});var Dl=T((Bne,FO)=>{"use strict";var kx=HO(),mh=class extends kx{static{a(this,"LMDBCreateAttributeObject")}constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};FO.exports=mh});var qO=T((Fne,GO)=>{"use strict";GO.exports=$x;var Vx="inserted";function $x(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===Vx?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a($x,"returnObject")});var Ul=T((qne,YO)=>{"use strict";var Yx=b(),ph=Ue(),Kx=fo(),{getSystemSchemaPath:Wx,getSchemaPath:Qx}=ve(),zx=Ei(),Jx=Ll(),Xx=Dl(),jx=qO(),{handleHDBError:xO,hdb_errors:VO}=j(),kO=$(),{HTTP_STATUS_CODES:Zx}=VO,Sh=zx.hdb_attribute,$O=[];for(let e=0;e<Sh.attributes.length;e++)$O.push(Sh.attributes[e].attribute);var ek="inserted";YO.exports=tk;async function tk(e){let t=Jx.attribute_object(e);if(t)throw xO(new Error,t.message,VO.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&kO.checkGlobalSchemaTable(e.schema,e.table);if(r)throw xO(new Error,r,Zx.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=kO.isEmpty(e.dup_sort)||e.dup_sort=="true";let s=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(s=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(s)&&s.length>0){for(let i of s)if(i.attribute===e.attribute)throw new Error(`attribute '${i.attribute}' already exists in ${e.schema}.${e.table}`)}let n=new Xx(e.schema,e.table,e.attribute,e.id);try{let i=await ph.openEnvironment(Qx(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}`);ph.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await ph.openEnvironment(Wx(),Yx.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await Kx.insertRecords(o,Sh.hash_attribute,$O,[n]);return jx(ek,c,{records:[n]},u)}catch(i){throw i}}a(tk,"lmdbCreateAttribute")});var Rh=T((kne,WO)=>{var{hdb_table:rk,hdb_database:KO}=Ls(),sk=xe(),Th=require("joi"),nk={undefined:"undefined",null:"null"},ik=a((e,t)=>{let r=Object.keys(e),s=r.length,n;for(let i=0;i<s;i++){let o=r[i];(!o||o.length===0||nk[o]!==void 0)&&(n===void 0?n=`Invalid attribute name: '${o}'`:n+=`. Invalid attribute name: '${o}'`)}return n?t.message(n):e},"custom_records_val"),ok=Th.object({database:KO,schema:KO,table:rk,records:Th.array().items(Th.object().custom(ik)).required()});WO.exports=function(e){return sk.validateBySchema(e,ok)}});var Qa=T((Yne,zO)=>{"use strict";var tn=$(),QO=q(),$ne=Rh(),{getDatabases:ak}=(fe(),Z(Ce)),{ClientError:hi}=j();zO.exports=ck;function ck(e){if(tn.isEmpty(e))throw new hi("invalid update parameters defined.");if(tn.isEmptyOrZeroLength(e.schema))throw new hi("invalid schema specified.");if(tn.isEmptyOrZeroLength(e.table))throw new hi("invalid table specified.");if(!Array.isArray(e.records))throw new hi("records must be an array");let t=ak()[e.schema]?.[e.table];if(tn.isEmpty(t))throw new hi(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,s=new Set,n={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&tn.isEmptyOrZeroLength(o[r]))throw QO.error("a valid hash attribute must be provided with update record:",o),new hi("a valid hash attribute must be provided with update record, check log for more info");if(!tn.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw QO.error(`a valid hash value must be provided with ${e.operation} record:`,o),new hi(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!tn.isEmpty(o[r])&&o[r]!==""&&s.has(tn.autoCast(o[r]))&&(o.skip=!0),s.add(tn.autoCast(o[r]));for(let c in o)n[c]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(ck,"insertUpdateValidate")});var za=T((Wne,JO)=>{"use strict";var uk=b().OPERATIONS_ENUM,gh=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i=void 0){this.operation=uk.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};JO.exports=gh});var Za=T((Jne,XO)=>{"use strict";var zne=za(),Ml=b(),Oh=$(),Ah=q(),lk=require("uuid"),{handleHDBError:Ja,hdb_errors:_k}=j(),{HDB_ERROR_MSGS:Xa,HTTP_STATUS_CODES:ja}=_k;XO.exports=dk;function dk(e,t,r){for(let n=0;n<t.length;n++)fk(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];Ek(i,r,e.operation)}}a(dk,"processRows");function fk(e){if(Buffer.byteLength(String(e))>Ml.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Ja(new Error,Xa.ATTR_NAME_LENGTH_ERR(e),ja.BAD_REQUEST,void 0,void 0,!0);if(Oh.isEmptyOrZeroLength(e)||Oh.isEmpty(e.trim()))throw Ja(new Error,Xa.ATTR_NAME_NULLISH_ERR,ja.BAD_REQUEST,void 0,void 0,!0)}a(fk,"validateAttribute");function Ek(e,t,r){if(!e.hasOwnProperty(t)||Oh.isEmptyOrZeroLength(e[t])){if(r===Ml.OPERATIONS_ENUM.INSERT||r===Ml.OPERATIONS_ENUM.UPSERT){e[t]=lk.v4();return}throw Ah.error("Update transaction aborted due to record with no hash value:",e),Ja(new Error,Xa.RECORD_MISSING_HASH_ERR,ja.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Ml.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Ah.error(e),Ja(new Error,Xa.HASH_VAL_LENGTH_ERR,ja.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw Ah.error(e),Ja(new Error,Xa.INVALID_FORWARD_SLASH_IN_HASH_ERR,ja.BAD_REQUEST,void 0,void 0,!0)}a(Ek,"validateHash")});var ZO=T((jne,jO)=>{"use strict";var Nh=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};jO.exports=Nh});var rN=T((eie,tN)=>{"use strict";var bh=Ue(),hk=q(),eN=dr().LMDB_ERRORS_ENUM;tN.exports=mk;async function mk(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 bh.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==eN.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await bh.closeEnvironment(global.lmdb_map[s]),await bh.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==eN.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){hk.error(t)}}a(mk,"cleanLMDBMap")});var rn=T((rie,oN)=>{"use strict";var ec=require("crypto"),pk=X(),{CONFIG_PARAMS:Sk}=b(),nN="aes-256-cbc",Tk=32,Rk=16,yh=64,iN=32,gk=yh+iN,sN=new Map;oN.exports={encrypt:Ak,decrypt:Ok,createNatsTableStreamName:Nk};function Ak(e){let t=ec.randomBytes(Tk),r=ec.randomBytes(Rk),s=ec.createCipheriv(nN,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=n.toString("hex");return i+o+c}a(Ak,"encrypt");function Ok(e){let t=e.substr(0,yh),r=e.substr(yh,iN),s=e.substr(gk,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=ec.createDecipheriv(nN,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(Ok,"decrypt");function Nk(e,t){let r=pk.get(Sk.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,s=sN.get(r);return s||(s=ec.createHash("md5").update(r).digest("hex"),sN.set(r,s)),s}a(Nk,"createNatsTableStreamName")});var mi=T((iie,cN)=>{"use strict";var nie=qr(),Pl=q(),aN=Ll(),bk=rn(),vl=$(),{handleHDBError:Bl,hdb_errors:yk}=j(),{HDB_ERROR_MSGS:Hl,HTTP_STATUS_CODES:Ih}=yk,Ik=X();Ik.initSync();var{getDatabases:wh}=(fe(),Z(Ce));cN.exports={describeAll:wk,describeTable:Fl,describeSchema:Ck};async function wk(e){try{let t=vl.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n=wh(),i={},o={},c=[],u=e?.exact_count;for(let l in n){i[l]=!0,!t&&!s&&(o[l]=e.hdb_user.role.permission[l].describe);let d=n[l];for(let f in d)try{let E;if(t||s)E=await Fl({schema:l,table:f,exact_count:u});else if(r&&r[l].describe&&r[l].tables[f].describe){let h=r[l].tables[f].attribute_permissions;E=await Fl({schema:l,table:f,exact_count:u},h)}E&&c.push(E)}catch(E){Pl.error(E)}}let _={};for(let l in c)t||s?(_[c[l].schema]==null&&(_[c[l].schema]={}),_[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]):o[c[l].schema]&&(_[c[l].schema]==null&&(_[c[l].schema]={}),_[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]);for(let l in i)t||s?_[l]={}:o[l]&&(_[l]={});return _}catch(t){return Pl.error("Got an error in describeAll"),Pl.error(t),Bl(new Error,Hl.DESCRIBE_ALL_ERR)}}a(wk,"describeAll");async function Fl(e,t){vl.transformReq(e);let{schema:r,table:s}=e;r=r?.toString(),s=s?.toString();let n=t;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(n=e.hdb_user.role.permission[r].tables[s].attribute_permissions);let i=aN.describe_table(e);if(i)throw i;let c=wh()[r];if(!c)throw Bl(new Error,Hl.SCHEMA_NOT_FOUND(e.schema),Ih.NOT_FOUND);let u=c[s];if(!u)throw Bl(new Error,Hl.TABLE_NOT_FOUND(e.schema,e.table),Ih.NOT_FOUND);function _(f){l.push(Object.assign({},{attribute:f.attribute,type:f.type,elements:f.elements?.type,indexed:f.indexed,is_primary_key:f.isPrimaryKey,assigned_created_time:f.assignCreatedTime,assigned_updated_time:f.assignUpdatedTime,nullable:f.nullable,properties:f.properties?f.properties.map(E=>({type:E.type,name:E.name})):void 0}))}a(_,"pushAtt");let l=[];if(n){let f={};n.forEach(E=>{E.describe&&(f[E.attribute_name]=!0)}),u.attributes.forEach(E=>{f[E.name]&&_(E)})}else u.attributes?.forEach(f=>_(f));let d={schema:r,name:u.tableName,hash_attribute:u.attributes.find(f=>f.isPrimaryKey||f.is_hash_attribute)?.name,audit:u.audit,schema_defined:u.schemaDefined,attributes:l};d.clustering_stream_name=bk.createNatsTableStreamName(d.schema,d.name);try{let f=u.getRecordCount({exactCount:e.exact_count==="true"});d.record_count=f.recordCount,d.estimated_record_range=f.estimatedRange;let E=u.auditStore;if(E)for(let h of E.getKeys({reverse:!0,limit:1}))d.last_updated_record=h[0];if(!d.last_updated_record&&u.indices.__updatedtime__)for(let h of u.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))d.last_updated_record=h}catch(f){Pl.warn(`unable to stat table dbi due to ${f}`)}return d}a(Fl,"descTable");async function Ck(e){vl.transformReq(e);let t=aN.schema_object(e);if(t)throw t;let r;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(r=e.hdb_user.role.permission[e.schema]);let s=e.schema.toString(),i=wh()[s];if(!i)throw Bl(new Error,Hl.SCHEMA_NOT_FOUND(e.schema),Ih.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),vl.isEmpty(u)||u.describe){let _=await Fl({schema:e.schema,table:c,exact_count:e.exact_count},u?u.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(Ck,"describeSchema")});var Pn=T((uie,fN)=>{var Lk=Ei(),{callbackify:lN,promisify:Dk}=require("util"),{getDatabases:_N}=(fe(),Z(Ce));fN.exports={setSchemaDataToGlobal:uN,getTableSchema:Uk,getSystemSchema:Mk,setSchemaDataToGlobalAsync:Dk(uN)};var dN=mi(),aie=lN(dN.describeAll),cie=lN(dN.describeTable);function uN(e){global.hdb_schema=_N(),e&&e()}a(uN,"setSchemaDataToGlobal");function Uk(e,t,r){let s=_N()[e];if(!s)return r(`schema ${e} does not exist`);let n=s[t];return n?r(null,{schema:e,name:t,hash_attribute:n.primaryKey}):r(`table ${e}.${t} does not exist`)}a(Uk,"getTableSchema");function Mk(){return Lk}a(Mk,"getSystemSchema")});var xr=T((_ie,pN)=>{"use strict";var ql=Rh(),Nt=$(),Pk=require("util"),xl=us(),vk=Pn(),EN=q(),{handleHDBError:pi,hdb_errors:Bk}=j(),{HTTP_STATUS_CODES:Si}=Bk,Hk=Pk.promisify(vk.getTableSchema),Fk="updated",hN="inserted",mN="upserted";pN.exports={insert:qk,update:xk,upsert:kk,validation:Gk,flush:Vk};async function Gk(e){if(Nt.isEmpty(e))throw new Error("invalid update parameters defined.");if(Nt.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Nt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await Hk(e.schema,e.table),r=ql(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let s=t.hash_attribute,n=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&Nt.isEmptyOrZeroLength(c[s]))throw EN.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(!Nt.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw EN.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!Nt.isEmpty(c[s])&&c[s]!==""&&n.has(Nt.autoCast(c[s]))&&(c.skip=!0),n.add(Nt.autoCast(c[s]));for(let u in c)i[u]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(Gk,"validation");async function qk(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=ql(e);if(t)throw pi(new Error,t.message,Si.BAD_REQUEST);Nt.transformReq(e);let r=Nt.checkSchemaTableExist(e.schema,e.table);if(r)throw pi(new Error,r,Si.BAD_REQUEST);let s=await xl.createRecords(e);return Gl(hN,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(qk,"insertData");async function xk(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=ql(e);if(t)throw pi(new Error,t.message,Si.BAD_REQUEST);Nt.transformReq(e);let r=Nt.checkSchemaTableExist(e.schema,e.table);if(r)throw pi(new Error,r,Si.BAD_REQUEST);let s=await xl.updateRecords(e);return Nt.isEmpty(s.existing_rows)?Gl(Fk,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):Gl(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(xk,"updateData");async function kk(e){if(e.operation!=="upsert")throw pi(new Error,"invalid operation, must be upsert",Si.INTERNAL_SERVER_ERROR);let t=ql(e);if(t)throw pi(new Error,t.message,Si.BAD_REQUEST);Nt.transformReq(e);let r=Nt.checkSchemaTableExist(e.schema,e.table);if(r)throw pi(new Error,r,Si.BAD_REQUEST);let s=await xl.upsertRecords(e);return Gl(mN,s.written_hashes,e,[],s.new_attributes,s.txn_time)}a(kk,"upsertData");function Gl(e,t,r,s,n,i){let o={message:`${e} ${t.length} of ${t.length+s.length} records`,new_attributes:n,txn_time:i};return e===hN?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===mN?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(Gl,"returnObject");function Vk(e){return Nt.transformReq(e),xl.flush(e.schema,e.table)}a(Vk,"flush")});var Lh=T((fie,RN)=>{var $k=xe(),Ch=require("joi"),{hdb_table:Yk,hdb_database:SN}=Ls(),TN={schema:SN,database:SN,table:Yk},Kk={date:Ch.date().iso().required()},Wk={timestamp:Ch.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};RN.exports=function(e,t){let r=t==="timestamp"?{...TN,...Wk}:{...TN,...Kk},s=Ch.object(r);return $k.validateBySchema(e,s)}});var ON=T((Eie,AN)=>{var Qk=xe(),Dh=require("joi"),{hdb_table:zk,hdb_database:gN}=Ls(),Jk=Dh.object({schema:gN,database:gN,table:zk,hash_values:Dh.array().required(),ids:Dh.array()});AN.exports=function(e){return Qk.validateBySchema(e,Jk)}});var bN=T((hie,NN)=>{"use strict";var Uh=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}},Mh=class{static{a(this,"NoSQLSeachObject")}constructor(t,r,s,n,i,o){this.schema=t,this.table=r,this.search_attribute=s,this.hash_attribute=n,this.get_attributes=i,this.search_value=o}},Ph=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};NN.exports={InsertObject:Uh,NoSQLSeachObject:Mh,DeleteResponseObject:Ph}});var gi=T((pie,LN)=>{"use strict";var IN=Lh(),Xk=ON(),Ti=$(),yN=require("moment"),wN=q(),{promisify:jk,callbackify:Zk}=require("util"),Ri=b(),eV=Pn(),vh=jk(eV.getTableSchema),Bh=us(),{DeleteResponseObject:tV}=bN(),{handleHDBError:vn,hdb_errors:rV}=j(),{HDB_ERROR_MSGS:kl,HTTP_STATUS_CODES:Bn}=rV,sV="records successfully deleted",nV=Zk(CN);LN.exports={delete:nV,deleteRecord:CN,deleteFilesBefore:iV,deleteAuditLogsBefore:oV};async function iV(e){let t=IN(e,"date");if(t)throw vn(t,t.message,Bn.BAD_REQUEST,void 0,void 0,!0);if(Ti.transformReq(e),!yN(e.date,yN.ISO_8601).isValid())throw vn(new Error,kl.INVALID_DATE,Bn.BAD_REQUEST,Ri.LOG_LEVELS.ERROR,kl.INVALID_DATE,!0);let s=Ti.checkSchemaTableExist(e.schema,e.table);if(s)throw vn(new Error,s,Bn.NOT_FOUND,Ri.LOG_LEVELS.ERROR,s,!0);let n=await Bh.deleteRecordsBefore(e);if(await vh(e.schema,e.table),wN.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(iV,"deleteFilesBefore");async function oV(e){let t=IN(e,"timestamp");if(t)throw vn(t,t.message,Bn.BAD_REQUEST,void 0,void 0,!0);if(Ti.transformReq(e),isNaN(e.timestamp))throw vn(new Error,kl.INVALID_VALUE("Timestamp"),Bn.BAD_REQUEST,Ri.LOG_LEVELS.ERROR,kl.INVALID_VALUE("Timestamp"),!0);let r=Ti.checkSchemaTableExist(e.schema,e.table);if(r)throw vn(new Error,r,Bn.NOT_FOUND,Ri.LOG_LEVELS.ERROR,r,!0);let s=await Bh.deleteAuditLogsBefore(e);return await vh(e.schema,e.table),wN.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(oV,"deleteAuditLogsBefore");async function CN(e){e.ids&&(e.hash_values=e.ids);let t=Xk(e);if(t)throw vn(t,t.message,Bn.BAD_REQUEST,void 0,void 0,!0);Ti.transformReq(e);let r=Ti.checkSchemaTableExist(e.schema,e.table);if(r)throw vn(new Error,r,Bn.NOT_FOUND,Ri.LOG_LEVELS.ERROR,r,!0);try{await vh(e.schema,e.table);let s=await Bh.deleteRecords(e);return Ti.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${sV}`),s}catch(s){if(s.message===Ri.SEARCH_NOT_FOUND_MESSAGE){let n=new tV;return n.message=Ri.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(CN,"deleteRecord")});var Vl=T((Tie,MN)=>{var aV=require("crypto"),DN=9;function cV(e){let t=lV(DN),r=UN(e+t);return t+r}a(cV,"createHash");function uV(e,t){let r=e.substr(0,DN),s=r+UN(t+r);return e===s}a(uV,"validateHash");function lV(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,s="";for(let n=0;n<e;n++){let i=Math.floor(Math.random()*r);s+=t[i]}return s}a(lV,"generateSalt");function UN(e){return aV.createHash("md5").update(e).digest("hex")}a(UN,"md5");MN.exports={hash:cV,validate:uV}});var vN=T((gie,PN)=>{var Hh=xe(),Bt={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 _V(e){return Bt.password.presence=!0,Bt.username.presence=!0,Bt.role.presence=!0,Bt.active.presence=!0,Hh.validateObject(e,Bt)}a(_V,"addUserValidation");function dV(e){return Bt.password.presence=!1,Bt.username.presence=!0,Bt.role.presence=!1,Bt.active.presence=!1,Hh.validateObject(e,Bt)}a(dV,"alterUserValidation");function fV(e){return Bt.password.presence=!1,Bt.username.presence=!0,Bt.role.presence=!1,Bt.active.presence=!1,Hh.validateObject(e,Bt)}a(fV,"dropUserValidation");PN.exports={addUserValidation:_V,alterUserValidation:dV,dropUserValidation:fV}});var ke=T((Nie,HN)=>{"use strict";var{platform:Oie}=require("os"),EV="nats-server.zip",Fh="nats-server",hV=process.platform==="win32"?`${Fh}.exe`:Fh,Gh="HDB",mV=/^[^\s.,*>]+$/,BN="__request__",pV=a(e=>`${e}.${BN}`,"REQUEST_SUBJECT"),SV={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},TV={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},RV={HUB:"hub.pid",LEAF:"leaf.pid"},gV={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},AV={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:Gh,deliver_subject:"__HDB__.WORKQUEUE"},OV={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:Gh,deliver_subject:"HDB.SCHEMAQUEUE"},NV={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:Gh,deliver_subject:"HDB.USERQUEUE"},bV={SUCCESS:"success",ERROR:"error"},yV={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},IV={TXN:"txn",MSGID:"msgid"},ho={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},wV={[ho.ERR]:1,[ho.WRN]:2,[ho.INF]:3,[ho.DBG]:4,[ho.TRC]:5},CV={debug:"-D",trace:"-DVV"};HN.exports={NATS_SERVER_ZIP:EV,NATS_SERVER_NAME:Fh,NATS_BINARY_NAME:hV,PID_FILES:RV,NATS_CONFIG_FILES:TV,SERVER_SUFFIX:gV,WORK_QUEUE_CONSUMER_NAMES:AV,SCHEMA_QUEUE_CONSUMER_NAMES:OV,USER_QUEUE_CONSUMER_NAMES:NV,NATS_TERM_CONSTRAINTS_RX:mV,REQUEST_SUFFIX:BN,UPDATE_REMOTE_RESPONSE_STATUSES:bV,CLUSTER_STATUS_STATUSES:yV,REQUEST_SUBJECT:pV,SUBJECT_PREFIXES:IV,MSG_HEADERS:SV,LOG_LEVELS:ho,LOG_LEVEL_FLAGS:CV,LOG_LEVEL_HIERARCHY:wV}});var GN=T((yie,FN)=>{"use strict";var LV={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 Lx=Object.create;var za=Object.defineProperty;var Dx=Object.getOwnPropertyDescriptor;var Mx=Object.getOwnPropertyNames;var Ux=Object.getPrototypeOf,Px=Object.prototype.hasOwnProperty;var a=(e,t)=>za(e,"name",{value:t,configurable:!0});var Ae=(e,t)=>()=>(e&&(t=e(e=0)),t);var T=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Ve=(e,t)=>{for(var r in t)za(e,r,{get:t[r],enumerable:!0})},_A=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of Mx(t))!Px.call(e,s)&&s!==r&&za(e,s,{get:()=>t[s],enumerable:!(n=Dx(t,s))||n.enumerable});return e};var v=(e,t,r)=>(r=e!=null?Lx(Ux(e)):{},_A(t||!e||!e.__esModule?za(r,"default",{value:e,enumerable:!0}):r,e)),ee=e=>_A(za({},"__esModule",{value:!0}),e);var EA=T((cie,fA)=>{var vx=require("fast-glob"),{statSync:WE,existsSync:QE,readFileSync:Bx,writeFileSync:Hx}=require("fs"),{spawnSync:xx,spawn:Fx,execFileSync:aie}=require("child_process"),{isMainThread:qx}=require("worker_threads"),{join:Ys,relative:dA}=require("path"),{PACKAGE_ROOT:An}=M(),{tmpdir:Gx,platform:kx}=require("os");require("source-map-support").install();var Vx=["resources","server","dataLayer","components"],Ja="ts-build",zE,$x=__filename.endsWith("tsBuild.js");if($x){if(qx){let r;try{WE(Ys(An,Ja)),r=!0}catch{}if(r)for(let n of vx.sync(Vx.map(s=>s+"/**/*.ts"),{cwd:An})){let s=0,i=0;try{s=WE(Ys(An,n)).mtimeMs-5e3,i=WE(Ys(An,Ja,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."),zE=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),zE=!0;if(zE){let n=Ys(An,"node_modules/.bin/tsc");kx()==="win32"&&(n+=".cmd");let s=xx(n,{cwd:An});if(s.stdout.length&&console.log(s.stdout.toString()),s.stderr.length&&console.log(s.stderr.toString()),r){let i=Ys(Gx(),"harperdb-tsc.pid"),o;if(QE(i))try{process.kill(+Bx(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=Fx(n,["--watch"],{cwd:An,detached:!0,stdio:"ignore"});Hx(i,c.pid.toString()),c.unref()}}}}let e=fA.constructor,t=e._findPath;e._findPath=function(r,n,s){if(r.startsWith(".")&&!s&&n.length===1&&n[0].startsWith(An)&&!n[0].includes("node_modules")){let i=dA(An,n[0]),o;i.startsWith(Ja)?o=Ys(An,dA(Ja,i)):o=Ys(An,Ja,i);let c=Ys(o,r),u=c+".js";if(QE(u))return u;if(c.includes(".")&&QE(c))return c}return t(r,n,s)}}});var M=T((_ie,wA)=>{"use strict";var Xr=require("path"),Yx=require("fs"),{relative:uie,join:lie}=Xr,{existsSync:Kx}=Yx;function Wx(){let e=__dirname;for(;!Kx(Xr.join(e,"package.json"));){let t=Xr.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(Wx,"getHDBPackageRoot");var Ks=Wx(),hA="js",Ul=hA,Qx="harperdb-config.yaml",zx="defaultConfig.yaml",Jx="hdb",mA=`harperdb.${Ul}`,pA=`customFunctionsServer.${Ul}`,Xx=`restartHdb.${Ul}`,XE="HarperDB",Ml="Custom Functions",Pl="Clustering Hub",vl="Clustering Leaf",jx="Clustering Ingest Service",Zx="Clustering Reply Service",eF="foreground.pid",tF="hdb.pid",rF="data",nF={HDB:XE,CLUSTERING_HUB:Pl,CLUSTERING_LEAF:vl,CLUSTERING_INGEST_SERVICE:jx,CLUSTERING_REPLY_SERVICE:Zx,CUSTOM_FUNCTIONS:Ml,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"},sF={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},iF={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},oF={harperdb:XE,"clustering hub":Pl,"clustering leaf":vl,"custom functions":Ml,custom_functions:Ml,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},aF={CLUSTERING_HUB_PROC_DESCRIPTOR:Pl,CLUSTERING_LEAF_PROC_DESCRIPTOR:vl},JE={HDB:Xr.join(Ks,"server/harperdb"),CUSTOM_FUNCTIONS:Xr.join(Ks,"server/customFunctions"),CLUSTERING_HUB:Xr.join(Ks,"server/nats"),CLUSTERING_LEAF:Xr.join(Ks,"server/nats")},cF={HDB:Xr.join(JE.HDB,mA),CUSTOM_FUNCTIONS:Xr.join(JE.CUSTOM_FUNCTIONS,pA)},uF={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:Xr.join(Ks,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:Xr.join(Ks,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:Xr.join(Ks,"launchServiceScripts/launchUpdateNodes4-0-0.js")},lF={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},SA="support@harperdb.io",_F="customer-success@harperdb.io",TA=1,dF=4141,gA="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",fF="https://www.harperdb.io/product",EF=`For support, please submit a request at ${gA} or contact ${SA}`,RA=`For license support, please contact ${_F}`,hF="None of the specified records were found.",mF="hash attribute not found",pF=`Your current license only supports ${TA} role. ${RA}`,SF="Your current license only supports 3 connections to a node.",TF="127.0.0.1",gF=1,RF=/^\.$/,AF=/^\.\.$/,OF="U+002E",bF=/\//g,NF="U+002F",yF=/U\+002F/g,IF=/^U\+002E$/,wF=/^U\+002EU\+002E$/,CF="d",LF=999999,DF="*",MF="--max-old-space-size=",UF="system",PF="__hdb_hash",vF=".harperdb",BF=".hdb",HF="keys",xF="hdb_boot_properties.file",FF=".updateConfig.json",qF="SIGTSTP",GF=24,kF=6e4,VF=448,$F="blob",YF="trash",KF="database",WF="schema",QF="transactions",zF=".count",JF="id",XF="PROCESS_NAME",AA={SETTINGS_PATH_KEY:"settings_path"},OA=require("lodash"),jF={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"},ZF={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},eq={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},tq={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"},rq={JOB_TABLE_HASH_ATTRIBUTE:"id",NODE_TABLE_HASH_ATTRIBUTE:"name",ATTRIBUTE_TABLE_HASH_ATTRIBUTE:"id",LICENSE_TABLE_HASH_ATTRIBUTE:"license_key",ROLE_TABLE_HASH_ATTRIBUTE:"id",SCHEMA_TABLE_HASH_ATTRIBUTE:"name",TABLE_TABLE_HASH_ATTRIBUTE:"id",USER_TABLE_HASH_ATTRIBUTE:"username",INFO_TABLE_ATTRIBUTE:"info_id"},yr="hdb_internal:",nq={CREATE_SCHEMA:yr+"create_schema",CREATE_TABLE:yr+"create_table",CREATE_ATTRIBUTE:yr+"create_attribute",ADD_USER:yr+"add_user",ALTER_USER:yr+"alter_user",DROP_USER:yr+"drop_user",HDB_NODES:yr+"hdb_nodes",HDB_USERS:yr+"hdb_users",HDB_WORKERS:yr+"hdb_workers",CATCHUP:yr+"catchup",SCHEMA_CATCHUP:yr+"schema_catchup",WORKER_ROOM:yr+"cluster_workers"},sq={ATTR_ATTRIBUTE_KEY:"attribute",ATTR_CREATEDDATE_KEY:"createddate",ATTR_HASH_ATTRIBUTE_KEY:"hash_attribute",ATTR_ID_KEY:"id",ATTR_NAME_KEY:"name",ATTR_PASSWORD_KEY:"password",ATTR_RESIDENCE_KEY:"residence",ATTR_ROLE_KEY:"role",ATTR_SCHEMA_KEY:"schema",ATTR_SCHEMA_TABLE_KEY:"schema_table",ATTR_TABLE_KEY:"table",ATTR_USERNAME_KEY:"username"},iq="060493.ks",oq=".license",aq={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},X={INSERT:"insert",UPDATE:"update",UPSERT:"upsert",SEARCH_BY_CONDITIONS:"search_by_conditions",SEARCH_BY_HASH:"search_by_hash",SEARCH_BY_ID:"search_by_id",SEARCH_BY_VALUE:"search_by_value",SEARCH:"search",SQL:"sql",CSV_DATA_LOAD:"csv_data_load",CSV_FILE_LOAD:"csv_file_load",CSV_URL_LOAD:"csv_url_load",CREATE_SCHEMA:"create_schema",CREATE_DATABASE:"create_database",CREATE_TABLE:"create_table",CREATE_ATTRIBUTE:"create_attribute",DROP_SCHEMA:"drop_schema",DROP_DATABASE:"drop_database",DROP_TABLE:"drop_table",DESCRIBE_SCHEMA:"describe_schema",DESCRIBE_DATABASE:"describe_database",DESCRIBE_TABLE:"describe_table",DESCRIBE_ALL:"describe_all",DELETE:"delete",ADD_USER:"add_user",ALTER_USER:"alter_user",DROP_USER:"drop_user",LIST_USERS:"list_users",LIST_ROLES:"list_roles",ADD_ROLE:"add_role",ALTER_ROLE:"alter_role",DROP_ROLE:"drop_role",USER_INFO:"user_info",READ_LOG:"read_log",ADD_NODE:"add_node",UPDATE_NODE:"update_node",SET_NODE_REPLICATION:"set_node_replication",EXPORT_TO_S3:"export_to_s3",IMPORT_FROM_S3:"import_from_s3",DELETE_FILES_BEFORE:"delete_files_before",DELETE_RECORDS_BEFORE:"delete_records_before",EXPORT_LOCAL:"export_local",SEARCH_JOBS_BY_START_DATE:"search_jobs_by_start_date",GET_JOB:"get_job",DELETE_JOB:"delete_job",UPDATE_JOB:"update_job",GET_FINGERPRINT:"get_fingerprint",SET_LICENSE:"set_license",GET_REGISTRATION_INFO:"registration_info",CONFIGURE_CLUSTER:"configure_cluster",SET_CONFIGURATION:"set_configuration",CLUSTER_STATUS:"cluster_status",CLUSTER_NETWORK:"cluster_network",DROP_ATTRIBUTE:"drop_attribute",REMOVE_NODE:"remove_node",RESTART:"restart",RESTART_SERVICE:"restart_service",CATCHUP:"catchup",SYSTEM_INFORMATION:"system_information",DELETE_AUDIT_LOGS_BEFORE:"delete_audit_logs_before",READ_AUDIT_LOG:"read_audit_log",CREATE_AUTHENTICATION_TOKENS:"create_authentication_tokens",LOGIN:"login",LOGOUT:"logout",REFRESH_OPERATION_TOKEN:"refresh_operation_token",GET_CONFIGURATION:"get_configuration",CUSTOM_FUNCTIONS_STATUS:"custom_functions_status",GET_CUSTOM_FUNCTIONS:"get_custom_functions",GET_CUSTOM_FUNCTION:"get_custom_function",SET_CUSTOM_FUNCTION:"set_custom_function",GET_COMPONENTS:"get_components",GET_COMPONENT_FILE:"get_component_file",SET_COMPONENT_FILE:"set_component_file",DROP_COMPONENT:"drop_component",DROP_CUSTOM_FUNCTION:"drop_custom_function",ADD_CUSTOM_FUNCTION_PROJECT:"add_custom_function_project",ADD_COMPONENT:"add_component",DROP_CUSTOM_FUNCTION_PROJECT:"drop_custom_function_project",PACKAGE_CUSTOM_FUNCTION_PROJECT:"package_custom_function_project",DEPLOY_CUSTOM_FUNCTION_PROJECT:"deploy_custom_function_project",PACKAGE_COMPONENT:"package_component",DEPLOY_COMPONENT:"deploy_component",CLUSTER_SET_ROUTES:"cluster_set_routes",CLUSTER_DELETE_ROUTES:"cluster_delete_routes",CLUSTER_GET_ROUTES:"cluster_get_routes",READ_TRANSACTION_LOG:"read_transaction_log",DELETE_TRANSACTION_LOGS_BEFORE:"delete_transaction_logs_before",INSTALL_NODE_MODULES:"install_node_modules",AUDIT_NODE_MODULES:"audit_node_modules",PURGE_STREAM:"purge_stream",GET_BACKUP:"get_backup"},cq={CSV:".csv",JSON:".json"},uq={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},lq={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Xa={};Xa[X.INSERT]=X.INSERT;Xa[X.UPDATE]=X.UPDATE;Xa[X.UPSERT]=X.UPSERT;Xa[X.DELETE]=X.DELETE;var ve=Object.create(null);ve[X.DESCRIBE_ALL]=X.DESCRIBE_ALL;ve[X.DESCRIBE_TABLE]=X.DESCRIBE_TABLE;ve[X.DESCRIBE_SCHEMA]=X.DESCRIBE_SCHEMA;ve[X.READ_LOG]=X.READ_LOG;ve[X.ADD_NODE]=X.ADD_NODE;ve[X.LIST_USERS]=X.LIST_USERS;ve[X.LIST_ROLES]=X.LIST_ROLES;ve[X.USER_INFO]=X.USER_INFO;ve[X.SQL]=X.SQL;ve[X.GET_JOB]=X.GET_JOB;ve[X.SEARCH_JOBS_BY_START_DATE]=X.SEARCH_JOBS_BY_START_DATE;ve[X.DELETE_FILES_BEFORE]=X.DELETE_FILES_BEFORE;ve[X.EXPORT_LOCAL]=X.EXPORT_LOCAL;ve[X.EXPORT_TO_S3]=X.EXPORT_TO_S3;ve[X.CLUSTER_STATUS]=X.CLUSTER_STATUS;ve[X.REMOVE_NODE]=X.REMOVE_NODE;ve[X.RESTART]=X.RESTART;ve[X.CUSTOM_FUNCTIONS_STATUS]=X.CUSTOM_FUNCTIONS_STATUS;ve[X.GET_CUSTOM_FUNCTIONS]=X.GET_CUSTOM_FUNCTIONS;ve[X.GET_CUSTOM_FUNCTION]=X.GET_CUSTOM_FUNCTION;ve[X.SET_CUSTOM_FUNCTION]=X.SET_CUSTOM_FUNCTION;ve[X.DROP_CUSTOM_FUNCTION]=X.DROP_CUSTOM_FUNCTION;ve[X.ADD_CUSTOM_FUNCTION_PROJECT]=X.ADD_CUSTOM_FUNCTION_PROJECT;ve[X.DROP_CUSTOM_FUNCTION_PROJECT]=X.DROP_CUSTOM_FUNCTION_PROJECT;ve[X.PACKAGE_CUSTOM_FUNCTION_PROJECT]=X.PACKAGE_CUSTOM_FUNCTION_PROJECT;ve[X.DEPLOY_CUSTOM_FUNCTION_PROJECT]=X.DEPLOY_CUSTOM_FUNCTION_PROJECT;var _q={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"},dq={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},bA={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"},fq=OA.invert(bA),Eq={CUSTOMFUNCTIONS_ENABLED:"customFunctions_enabled",CUSTOMFUNCTIONS_NETWORK_PORT:"customFunctions_network_port",CUSTOMFUNCTIONS_TLS_CERTIFICATE:"customFunctions_tls_certificate",CUSTOMFUNCTIONS_NETWORK_CORS:"customFunctions_network_cors",CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST:"customFunctions_network_corsAccessList",CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT:"customFunctions_network_headersTimeout",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT:"customFunctions_network_keepAliveTimeout",CUSTOMFUNCTIONS_TLS_PRIVATEKEY:"customFunctions_tls_privateKey",CUSTOMFUNCTIONS_TLS_CERT_AUTH:"customFunctions_tls_certificateAuthority",CUSTOMFUNCTIONS_NETWORK_TIMEOUT:"customFunctions_network_timeout",CUSTOMFUNCTIONS_NODEENV:"customFunctions_nodeEnv",CUSTOMFUNCTIONS_ROOT:"customFunctions_root"},C={ANALYTICS_AGGREGATEPERIOD:"analytics_aggregatePeriod",AUTHENTICATION_AUTHORIZELOCAL:"authentication_authorizeLocal",AUTHENTICATION_CACHETTL:"authentication_cacheTTL",AUTHENTICATION_ENABLESESSIONS:"authentication_enableSessions",AUTHENTICATION_OPERATIONTOKENTIMEOUT:"authentication_operationTokenTimeout",AUTHENTICATION_REFRESHTOKENTIMEOUT:"authentication_refreshTokenTimeout",CLUSTERING_USER:"clustering_user",CLUSTERING_ENABLED:"clustering_enabled",CLUSTERING_HUBSERVER_CLUSTER_NAME:"clustering_hubServer_cluster_name",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT:"clustering_hubServer_cluster_network_port",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES:"clustering_hubServer_cluster_network_routes",CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT:"clustering_hubServer_leafNodes_network_port",CLUSTERING_HUBSERVER_NETWORK_PORT:"clustering_hubServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_PORT:"clustering_leafServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_ROUTES:"clustering_leafServer_network_routes",CLUSTERING_LEAFSERVER_STREAMS_MAXAGE:"clustering_leafServer_streams_maxAge",CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES:"clustering_leafServer_streams_maxBytes",CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS:"clustering_leafServer_streams_maxMsgs",CLUSTERING_LEAFSERVER_STREAMS_PATH:"clustering_leafServer_streams_path",CLUSTERING_NODENAME:"clustering_nodeName",CLUSTERING_TLS_CERTIFICATE:"clustering_tls_certificate",CLUSTERING_TLS_PRIVATEKEY:"clustering_tls_privateKey",CLUSTERING_TLS_CERT_AUTH:"clustering_tls_certificateAuthority",CLUSTERING_TLS_INSECURE:"clustering_tls_insecure",CLUSTERING_TLS_VERIFY:"clustering_tls_verify",CLUSTERING_LOGLEVEL:"clustering_logLevel",CLUSTERING_REPUBLISHMESSAGES:"clustering_republishMessages",CLUSTERING_DATABASELEVEL:"clustering_databaseLevel",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",THREADS:"threads",MAXHEAPMEMORY:"maxHeapMemory",HTTP_SESSIONAFFINITY:"http_sessionAffinity",HTTP_COMPRESSIONTHRESHOLD:"http_compressionThreshold",HTTP_CORS:"http_cors",HTTP_CORSACCESSLIST:"http_corsAccessList",HTTP_HEADERSTIMEOUT:"http_headersTimeout",HTTP_KEEPALIVETIMEOUT:"http_keepAliveTimeout",HTTP_TIMEOUT:"http_timeout",HTTP_PORT:"http_port",HTTP_SECUREPORT:"http_securePort",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_ROTATION_ENABLED:"logging_rotation_enabled",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_INTERVAL:"logging_rotation_interval",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",LOGGING_ROTATION_PATH:"logging_rotation_path",LOGGING_STDSTREAMS:"logging_stdStreams",LOGGING_AUDITLOG:"logging_auditLog",LOGGING_AUDITRETENTION:"logging_auditRetention",LOGGING_AUDITAUTHEVENTS_LOGFAILED:"logging_auditAuthEvents_logFailed",LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL:"logging_auditAuthEvents_logSuccessful",OPERATIONSAPI_NETWORK_CORS:"operationsApi_network_cors",OPERATIONSAPI_NETWORK_CORSACCESSLIST:"operationsApi_network_corsAccessList",OPERATIONSAPI_NETWORK_HEADERSTIMEOUT:"operationsApi_network_headersTimeout",OPERATIONSAPI_NETWORK_HTTPS:"operationsApi_network_https",OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT:"operationsApi_network_keepAliveTimeout",OPERATIONSAPI_NETWORK_PORT:"operationsApi_network_port",OPERATIONSAPI_NETWORK_DOMAINSOCKET:"operationsApi_network_domainSocket",OPERATIONSAPI_NETWORK_SECUREPORT:"operationsApi_network_securePort",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",OPERATIONSAPI_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",ROOTPATH:"rootPath",SERIALIZATION_BIGINT:"serialization_bigInt",STORAGE_WRITEASYNC:"storage_writeAsync",STORAGE_OVERLAPPINGSYNC:"storage_overlappingSync",STORAGE_CACHING:"storage_caching",STORAGE_COMPRESSION:"storage_compression",STORAGE_NOREADAHEAD:"storage_noReadAhead",STORAGE_PREFETCHWRITES:"storage_prefetchWrites",STORAGE_ENCRYPTION:"storage_encryption",STORAGE_PATH:"storage_path",STORAGE_AUDIT_PATH:"storage_audit_path",DATABASES:"databases",IGNORE_SCRIPTS:"ignoreScripts",MQTT_NETWORK_PORT:"mqtt_network_port",MQTT_WEBSOCKET:"mqtt_webSocket",MQTT_NETWORK_SECUREPORT:"mqtt_network_securePort",MQTT_NETWORK_MTLS:"mqtt_network_mtls",MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY:"mqtt_network_mtls_certificateAuthority",MQTT_NETWORK_MTLS_USER:"mqtt_network_mtls_user",MQTT_REQUIREAUTHENTICATION:"mqtt_requireAuthentication",COMPONENTSROOT:"componentsRoot",TLS_CERTIFICATE:"tls_certificate",TLS_PRIVATEKEY:"tls_privateKey",TLS_CERTIFICATEAUTHORITY:"tls_certificateAuthority",TLS_CIPHERS:"tls_ciphers"},NA={settings_path:AA.SETTINGS_PATH_KEY,hdb_root_key:C.ROOTPATH,hdb_root:C.ROOTPATH,rootpath:C.ROOTPATH,server_port_key:C.OPERATIONSAPI_NETWORK_PORT,server_port:C.OPERATIONSAPI_NETWORK_PORT,cert_key:C.TLS_CERTIFICATE,certificate:C.TLS_CERTIFICATE,private_key_key:C.TLS_PRIVATEKEY,private_key:C.TLS_PRIVATEKEY,http_secure_enabled_key:C.OPERATIONSAPI_NETWORK_HTTPS,https_on:C.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:C.OPERATIONSAPI_NETWORK_CORS,cors_on:C.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:C.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:C.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:C.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:C.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:C.LOGGING_LEVEL,log_level:C.LOGGING_LEVEL,log_path_key:C.LOGGING_ROOT,log_path:C.LOGGING_ROOT,clustering_node_name_key:C.CLUSTERING_NODENAME,node_name:C.CLUSTERING_NODENAME,clustering_enabled_key:C.CLUSTERING_ENABLED,clustering:C.CLUSTERING_ENABLED,max_http_threads:C.THREADS,max_hdb_processes:C.THREADS,server_timeout_key:C.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:C.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:C.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:C.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:C.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:C.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:C.LOGGING_AUDITLOG,disable_transaction_log:C.LOGGING_AUDITLOG,operation_token_timeout_key:C.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:C.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:C.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:C.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:C.HTTP_PORT,custom_functions_port:C.HTTP_PORT,custom_functions_directory_key:C.COMPONENTSROOT,custom_functions_directory:C.COMPONENTSROOT,max_custom_function_processes:C.THREADS,log_to_file:C.LOGGING_FILE,log_to_stdstreams:C.LOGGING_STDSTREAMS,local_studio_on:C.LOCALSTUDIO_ENABLED,clustering_port:C.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:C.CLUSTERING_USER,clustering_enabled:C.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:C.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:C.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:C.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:C.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:C.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:C.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:C.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:C.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:C.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxmsgs:C.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:C.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:C.CLUSTERING_NODENAME,clustering_tls_certificate:C.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:C.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:C.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:C.CLUSTERING_TLS_INSECURE,clustering_tls_verify:C.CLUSTERING_TLS_VERIFY,clustering_loglevel:C.CLUSTERING_LOGLEVEL,clustering_republishmessages:C.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:C.CLUSTERING_DATABASELEVEL,customfunctions_network_port:C.HTTP_PORT,customfunctions_tls_certificate:C.TLS_CERTIFICATE,customfunctions_network_cors:C.HTTP_CORS,customfunctions_network_corsaccesslist:C.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:C.HTTP_HEADERSTIMEOUT,customfunctions_network_https:C.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:C.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:C.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:C.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:C.HTTP_TIMEOUT,http_threads:C.THREADS,threads:C.THREADS,maxheapmemory:C.MAXHEAPMEMORY,http_session_affinity:C.HTTP_SESSIONAFFINITY,http_compressionthreshold:C.HTTP_COMPRESSIONTHRESHOLD,http_cors:C.HTTP_CORS,http_corsaccesslist:C.HTTP_CORSACCESSLIST,http_headerstimeout:C.HTTP_HEADERSTIMEOUT,http_keepalivetimeout:C.HTTP_KEEPALIVETIMEOUT,http_timeout:C.HTTP_TIMEOUT,http_port:C.HTTP_PORT,http_secureport:C.HTTP_SECUREPORT,customfunctions_processes:C.THREADS,customfunctions_root:C.COMPONENTSROOT,localstudio_enabled:C.LOCALSTUDIO_ENABLED,logging_file:C.LOGGING_FILE,logging_level:C.LOGGING_LEVEL,logging_root:C.LOGGING_ROOT,logging_rotation_enabled:C.LOGGING_ROTATION_ENABLED,logging_rotation_compress:C.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:C.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:C.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:C.LOGGING_ROTATION_PATH,logging_stdstreams:C.LOGGING_STDSTREAMS,logging_auditlog:C.LOGGING_AUDITLOG,logging_auditretention:C.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:C.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:C.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:C.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:C.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_network_cors:C.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:C.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:C.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:C.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:C.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:C.OPERATIONSAPI_NETWORK_PORT,operationsapi_network_domainsocket:C.OPERATIONSAPI_NETWORK_DOMAINSOCKET,operationsapi_network_secureport:C.OPERATIONSAPI_NETWORK_SECUREPORT,operationsapi_tls_certificate:C.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_tls_privatekey:C.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:C.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY,operationsapi_network_timeout:C.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_root:C.ROOTPATH,databases:C.DATABASES,storage_path:C.STORAGE_PATH,ignorescripts:C.IGNORE_SCRIPTS,mqtt_network_port:C.MQTT_NETWORK_PORT,mqtt_websocket:C.MQTT_WEBSOCKET,mqtt_network_secureport:C.MQTT_NETWORK_SECUREPORT,mqtt_network_mtls:C.MQTT_NETWORK_MTLS,mqtt_network_mtls_certificateAuthority:C.MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY,mqtt_network_mtls_user:C.MQTT_NETWORK_MTLS_USER,mqtt_requireauthentication:C.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:C.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:C.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:C.AUTHENTICATION_CACHETTL,authentication_enablesessions:C.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:C.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:C.AUTHENTICATION_REFRESHTOKENTIMEOUT,componentsroot:C.COMPONENTSROOT,tls_certificate:C.TLS_CERTIFICATE,tls_privatekey:C.TLS_PRIVATEKEY,tls_certificateauthority:C.TLS_CERTIFICATEAUTHORITY,tls_ciphers:C.TLS_CIPHERS};for(let e in C){let t=C[e];NA[t.toLowerCase()]=t}var hq={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},mq={csv_file_load:"csv_file_load",csv_data_load:X.CSV_DATA_LOAD,csv_url_load:X.CSV_URL_LOAD,delete_files_before:"delete_files_before",delete_records_before:"delete_records_before",delete_audit_logs_before:"delete_audit_logs_before",delete_transaction_logs_before:"delete_transaction_logs_before",empty_trash:"empty_trash",export_local:"export_local",export_to_s3:"export_to_s3",import_from_s3:"import_from_s3"},pq={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"},Sq={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},Tq={VERSION_DEFAULT:"2.2.0"},gq={DEVELOPMENT:8192,DEFAULT:512},Rq={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"},Aq={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"},Oq={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},yA={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},bq=Symbol("metadata"),Nq="__clustering__",yq=Object.values(yA),Iq=15984864e5,IA={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},wq=OA.invert(IA),Cq={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"},Lq=111,Dq=`\r
|
|
2
|
+
`,Mq={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Uq=["*","%"],Pq="unauthorized_access",vq="func_val",Bq={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},Hq={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},xq={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"},Fq={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},qq={HTTP:"http"},Gq={STOPPED:"stopped",ONLINE:"online"},kq="3.x.x",Vq={SUCCESS:"success",FAILURE:"failure"},$q={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};wA.exports={LOCAL_HARPERDB_OPERATIONS:ve,HDB_SUPPORT_ADDRESS:SA,HDB_SUPPORT_URL:gA,HDB_PRICING_URL:fF,SUPPORT_HELP_MSG:EF,LICENSE_HELP_MSG:RA,HDB_PROC_NAME:mA,HDB_PROC_DESCRIPTOR:XE,CLUSTERING_LEAF_PROC_DESCRIPTOR:vl,CLUSTERING_HUB_PROC_DESCRIPTOR:Pl,SYSTEM_SCHEMA_NAME:UF,HASH_FOLDER_NAME:PF,HDB_HOME_DIR_NAME:vF,UPDATE_FILE_NAME:FF,LICENSE_KEY_DIR_NAME:HF,BOOT_PROPS_FILE_NAME:xF,JOB_TYPE_ENUM:mq,JOB_STATUS_ENUM:aq,SYSTEM_TABLE_NAMES:tq,SYSTEM_TABLE_HASH_ATTRIBUTES:rq,OPERATIONS_ENUM:X,VALID_S3_FILE_TYPES:cq,S3_BUCKET_AUTH_KEYS:uq,VALID_SQL_OPS_ENUM:lq,GEO_CONVERSION_ENUM:dq,HDB_SETTINGS_NAMES:bA,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:fq,SERVICE_ACTIONS_ENUM:_q,CLUSTER_MESSAGE_TYPE_ENUM:pq,CLUSTER_CONNECTION_DIRECTION_ENUM:Sq,CLUSTER_EVENTS_DEFS_ENUM:Rq,PERIOD_REGEX:RF,DOUBLE_PERIOD_REGEX:AF,UNICODE_PERIOD:OF,FORWARD_SLASH_REGEX:bF,UNICODE_FORWARD_SLASH:NF,ESCAPED_FORWARD_SLASH_REGEX:yF,ESCAPED_PERIOD_REGEX:IF,ESCAPED_DOUBLE_PERIOD_REGEX:wF,REG_KEY_FILE_NAME:iq,RESTART_TIMEOUT_MS:kF,HDB_FILE_PERMISSIONS:VF,DATABASES_DIR_NAME:KF,LEGACY_DATABASES_DIR_NAME:WF,TRANSACTIONS_DIR_NAME:QF,LIMIT_COUNT_NAME:zF,ID_ATTRIBUTE_STRING:JF,INSERT_MODULE_ENUM:ZF,UPGRADE_JSON_FIELD_NAMES_ENUM:eq,RESTART_CODE:qF,RESTART_CODE_NUM:GF,CLUSTER_OPERATIONS:Xa,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:sq,HDB_INTERNAL_SC_CHANNEL_PREFIX:yr,INTERNAL_SC_CHANNELS:nq,CLUSTERING_MESSAGE_TYPES:Cq,HDB_FILE_SUFFIX:BF,BLOB_FOLDER_NAME:$F,HDB_TRASH_DIR:YF,ORIGINATOR_SET_VALUE:Lq,LICENSE_VALUES:Tq,RAM_ALLOCATION_ENUM:gq,TIME_STAMP_NAMES_ENUM:yA,TIME_STAMP_NAMES:yq,PERMS_UPDATE_RELEASE_TIMESTAMP:Iq,SEARCH_NOT_FOUND_MESSAGE:hF,SEARCH_ATTRIBUTE_NOT_FOUND:mF,LICENSE_ROLE_DENIED_RESPONSE:pF,LICENSE_MAX_CONNS_REACHED:SF,BASIC_LICENSE_MAX_NON_CU_ROLES:TA,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:dF,VALUE_SEARCH_COMPARATORS:IA,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:wq,LICENSE_FILE_NAME:oq,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:Aq,NEW_LINE:Dq,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:gF,MOMENT_DAYS_TAG:CF,API_TURNOVER_SEC:LF,LOOPBACK:TF,CODE_EXTENSION:Ul,WILDCARD_SEARCH_VALUE:DF,NODE_ERROR_CODES:Oq,JAVASCRIPT_EXTENSION:hA,PERMS_CRUD_ENUM:Mq,UNAUTHORIZED_PERMISSION_NAME:Pq,SEARCH_WILDCARDS:Uq,FUNC_VAL:vq,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:Bq,JWT_ENUM:Hq,CLUSTERING_FLAG:Nq,ITC_EVENT_TYPES:xq,CUSTOM_FUNCTION_PROC_NAME:pA,CUSTOM_FUNCTION_PROC_DESCRIPTOR:Ml,SERVICES:Fq,THREAD_TYPES:qq,MEM_SETTING_KEY:MF,HDB_RESTART_SCRIPT:Xx,PROCESS_DESCRIPTORS:nF,SERVICE_SERVERS:cF,SERVICE_SERVERS_CWD:JE,PROCESS_DESCRIPTORS_VALIDATE:oF,LAUNCH_SERVICE_SCRIPTS:uF,LOG_LEVELS:iF,PROCESS_NAME_ENV_PROP:XF,LOG_NAMES:sF,PM2_PROCESS_STATUSES:Gq,CONFIG_PARAM_MAP:NA,CONFIG_PARAMS:C,HDB_CONFIG_FILE:Qx,HDB_DEFAULT_CONFIG_FILE:zx,ROLE_TYPES_ENUM:lF,BOOT_PROP_PARAMS:AA,INSTALL_PROMPTS:jF,HDB_ROOT_DIR_NAME:Jx,CLUSTERING_PROCESSES:aF,FOREGROUND_PID_FILE:eF,PACKAGE_ROOT:Ks,PRE_4_0_0_VERSION:kq,DATABASES_PARAM_CONFIG:hq,METADATA_PROPERTY:bq,AUTH_AUDIT_STATUS:Vq,AUTH_AUDIT_TYPES:$q,HDB_PID_FILE:tF,DEFAULT_DATABASE_NAME:rF,LEGACY_CONFIG_PARAMS:Eq};EA()});var jE=T((fie,DA)=>{"use strict";var CA=require("minimist");DA.exports=Yq;function Yq(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=LA(process.env),n=LA(CA(process.argv))):(r=process.env,n=CA(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(Yq,"assignCMDENVVariables");function LA(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}a(LA,"objKeysToLowerCase")});var V=T((hie,ih)=>{"use strict";var yi=require("fs-extra"),{workerData:Kq,threadId:Wq}=require("worker_threads"),hs=require("path"),PA=require("yaml"),vA=require("properties-reader"),bt=M(),MA=jE(),Qq=require("os"),{PACKAGE_ROOT:eh}=M(),{_assignPackageExport:zq}=require("../index"),Za={};for(let e in console)Za[e]||(Za[e]=console[e]);var tr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},BA={STDOUT:"stdOut",STDERR:"stdErr"},Jq=hs.join(eh,"logs"),Xq=hs.join(eh,"config/yaml/",bt.HDB_DEFAULT_CONFIG_FILE),jq=1e4,Es,kn,er,Bl,Hl,ec,Po,ja;ja===void 0&&HA();ih.exports={notify:qA,fatal:GA,error:tc,warn:sh,info:xl,debug:nh,trace:rh,setLogLevel:iG,log_level:er,loggerWithTag:Zq,suppressLogging:eG,initLogSettings:HA,setupConsoleLogging:xA,logCustomLevel:nG,closeLogFile:th,getLogFilePath:()=>ec,OUTPUTS:BA,AuthAuditLog:cG};zq("logger",ih.exports);function HA(e=!1){try{if(ja===void 0||e){th();let t=sG(),r=MA(["ROOTPATH"]);try{ja=vA(t)}catch(n){if(!r.ROOTPATH||r.ROOTPATH&&!yi.pathExistsSync(hs.join(r.ROOTPATH,bt.HDB_CONFIG_FILE)))throw n}({level:er,config_log_path:Hl,to_file:Es,to_stream:kn}=oG(r.ROOTPATH?hs.join(r.ROOTPATH,bt.HDB_CONFIG_FILE):ja.get("settings_path"))),Bl=bt.LOG_NAMES.HDB,ec=hs.join(Hl,Bl)}}catch(t){if(ja=void 0,t.code===bt.NODE_ERROR_CODES.ENOENT){let r=MA(Object.keys(bt.CONFIG_PARAM_MAP),!0);for(let o in r){let c=bt.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let u=r[o];if(c===bt.CONFIG_PARAMS.LOGGING_LEVEL){er=u;continue}if(c===bt.CONFIG_PARAMS.LOGGING_STDSTREAMS){kn=u;continue}c===bt.CONFIG_PARAMS.LOGGING_FILE&&(Es=c)}let{default_level:n,default_to_file:s,default_to_stream:i}=aG();Es=Es===void 0?s:Es,Es=UA(Es),kn=kn===void 0?i:kn,kn=UA(kn),er=er===void 0?n:er,Hl=Jq,Bl=bt.LOG_NAMES.INSTALL,ec=hs.join(Hl,Bl);return}throw tc("Error initializing log settings"),tc(t),t}process.env.DEV_MODE&&(kn=!0),xA()}a(HA,"initLogSettings");var ZE=!0;function xA(){Uo("error",tc),Uo("warn",sh),Uo("log",xl),Uo("info",xl),Uo("debug",nh),Uo("trace",rh)}a(xA,"setupConsoleLogging");function Uo(e,t){console[e]=function(...r){if(ZE&&t(...r),!/PM2 log:|App \[/.test(r[0]))return Za[e](...r)}}a(Uo,"logConsole");function Zq(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(qA),fatal:r(GA),error:r(tc),warn:r(sh),info:r(xl),debug:r(nh),trace:r(rh)};function r(n){return function(...s){return n(t,...s)}}}a(Zq,"loggerWithTag");function eG(e){try{ZE=!1,e()}finally{ZE=!0}}a(eG,"suppressLogging");var tG=Kq?.name?.replace(/ /g,"-")||"main";function ms(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||tG+"/"+Wq);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(ms,"createLogRecord");function rc(e){Es&&FA(e),kn&&process.stdout.write(e)}a(rc,"logStdOut");function Fl(e){Es&&FA(e),kn&&process.stderr.write(e)}a(Fl,"logStdErr");function FA(e){rG(),Po?yi.appendFileSync(Po,e):Za.log(e)}a(FA,"logToFile");function th(){try{yi.closeSync(Po)}catch{}Po=null}a(th,"closeLogFile");function rG(){if(!Po){try{if(!ec)debugger;Po=yi.openSync(ec,"a")}catch(e){Za.error(e)}setTimeout(()=>{th()},jq).unref()}}a(rG,"openLogFile");function xl(...e){tr[er]<=tr.info&&rc(ms("info",e))}a(xl,"info");function rh(...e){tr[er]<=tr.trace&&rc(ms("trace",e))}a(rh,"trace");function tc(...e){tr[er]<=tr.error&&Fl(ms("error",e))}a(tc,"error");function nh(...e){tr[er]<=tr.debug&&rc(ms("debug",e))}a(nh,"debug");function qA(...e){tr[er]<=tr.notify&&rc(ms("notify",e))}a(qA,"notify");function GA(...e){tr[er]<=tr.fatal&&Fl(ms("fatal",e))}a(GA,"fatal");function sh(...e){tr[er]<=tr.warn&&Fl(ms("warn",e))}a(sh,"warn");function nG(e,t,...r){t===BA.STDERR?Fl(ms(e,r)):rc(ms(e,r))}a(nG,"logCustomLevel");function sG(){let e;try{e=Qq.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=hs.join(e,bt.HDB_HOME_DIR_NAME,bt.BOOT_PROPS_FILE_NAME);return yi.existsSync(t)||(t=hs.join(eh,"utility/hdb_boot_properties.file")),t}a(sG,"getPropsFilePath");function iG(e){er=e}a(iG,"setLogLevel");function UA(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(UA,"autoCastBoolean");function oG(e){try{if(e.includes("config/settings.js")){let o=vA(e);return{level:o.get(bt.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:hs.dirname(o.get(bt.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(bt.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(bt.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=PA.parseDocument(yi.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===bt.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(oG,"getLogConfig");function aG(){try{let e=PA.parseDocument(yi.readFileSync(Xq,"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(aG,"getDefaultConfig");function cG(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(cG,"AuthAuditLog")});var VA=T((pie,kA)=>{"use strict";var uG=require("util"),lG=require("path"),_G=require("child_process"),dG=uG.promisify(_G.execFile),fG=1e3*1e3*10;kA.exports={findPs:EG};async function EG(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:n}=await dG("ps",["wwxo",`pid,${r}`],{maxBuffer:fG});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:lG.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(EG,"findPs")});var ht=T((Tie,YA)=>{"use strict";var hG="__dbis__",mG="__txns__",pG="__environment_name__",SG="__dbi_defintion__",TG={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"},gG=["__createdtime__","__updatedtime__"],RG="\uFFFF",$A={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},AG=Object.values($A);YA.exports={AUDIT_STORE_NAME:mG,INTERNAL_DBIS_NAME:hG,DBI_DEFINITION_NAME:SG,SEARCH_TYPES:TG,TIMESTAMP_NAMES:gG,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:pG,TRANSACTIONS_DBI_NAMES_ENUM:$A,TRANSACTIONS_DBIS:AG,OVERFLOW_MARKER:RG}});var Ir=T((gie,eO)=>{"use strict";var KA=M(),WA=ht(),QA={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},zA=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),JA={500:zA("There was an error processing your request."),400:"Invalid request"},OG=JA[QA.INTERNAL_SERVER_ERROR],bG={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.`},NG={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},yG={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"},IG={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 ${WA.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${WA.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"},wG={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${KA.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 ${KA.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"},XA={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"},CG={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."},LG={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`},DG={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"},MG={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},UG={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`},jA={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.`},ZA={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}`},PG={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."},vG={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},BG={...XA,...yG,...bG,...CG,...LG,...DG,...MG,...UG,...wG,...jA,...ZA,...PG,...vG,...NG};eO.exports={CHECK_LOGS_WRAPPER:zA,HDB_ERROR_MSGS:BG,DEFAULT_ERROR_MSGS:JA,DEFAULT_ERROR_RESP:OG,HTTP_STATUS_CODES:QA,LMDB_ERRORS_ENUM:IG,AUTHENTICATION_ERROR_MSGS:XA,VALIDATION_ERROR_MSGS:jA,ITC_ERRORS:ZA}});var Z=T((Aie,nO)=>{"use strict";var vo=Ir(),HG=V(),xG=M(),ql=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,tO),this.statusCode=n||vo.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(vo.DEFAULT_ERROR_MSGS[n]?vo.DEFAULT_ERROR_MSGS[n]:vo.DEFAULT_ERROR_MSGS[vo.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&&HG[s](i)}},oh=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}},ah=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function tO(e,t,r,n=xG.LOG_LEVELS.ERROR,s=null,i=!1){if(rO(e))return e;let o=new ql(e,t,r,n,s);return i&&delete o.stack,o}a(tO,"handleHDBError");function rO(e){return e.__proto__.constructor.name===ql.name}a(rO,"isHDBError");nO.exports={isHDBError:rO,handleHDBError:tO,ClientError:oh,ServerError:ah,hdb_errors:vo}});var We=T((bie,lO)=>{"use strict";var ac=M(),FG=J(),rr=j(),cc=require("path"),qG=require("minimist"),sO=require("fs-extra"),iO=require("lodash");rr.initSync();var{CONFIG_PARAMS:Ws,DATABASES_PARAM_CONFIG:nc,SYSTEM_SCHEMA_NAME:Gl}=ac,sc,ic,oc;function oO(){if(sc!==void 0)return sc;if(rr.getHdbBasePath()!==void 0)return sc=rr.get(Ws.STORAGE_PATH)||cc.join(rr.getHdbBasePath(),ac.DATABASES_DIR_NAME),sc}a(oO,"getBaseSchemaPath");function aO(){if(ic!==void 0)return ic;if(rr.getHdbBasePath()!==void 0)return ic=uO(Gl),ic}a(aO,"getSystemSchemaPath");function cO(){if(oc!==void 0)return oc;if(rr.getHdbBasePath()!==void 0)return oc=rr.get(ac.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||cc.join(rr.getHdbBasePath(),ac.TRANSACTIONS_DIR_NAME),oc}a(cO,"getTransactionAuditStoreBasePath");function GG(e,t){let r=rr.get(Ws.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||cc.join(cO(),e.toString())}a(GG,"getTransactionAuditStorePath");function uO(e,t){e=e.toString(),t=t&&t.toString();let r=rr.get(ac.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||cc.join(oO(),e)}a(uO,"getSchemaPath");function kG(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,qG(process.argv));let n=r[Ws.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!FG.isObject(n))throw o;i=n}for(let o of i){let c=o[Gl];if(!c)continue;let u=rr.get(Ws.DATABASES);u=u??{};let _=c?.tables?.[t]?.[nc.PATH];if(_)return iO.set(u,[Gl,nc.TABLES,t,nc.PATH],_),rr.setProperty(Ws.DATABASES,u),_;let l=c?.[nc.PATH];if(l)return iO.set(u,[Gl,nc.PATH],l),rr.setProperty(Ws.DATABASES,u),l}}let s=r[Ws.STORAGE_PATH.toUpperCase()];if(s){if(!sO.pathExistsSync(s))throw new Error(s+" does not exist");let i=cc.join(s,e);return sO.mkdirsSync(i),rr.setProperty(Ws.STORAGE_PATH,s),i}return aO()}a(kG,"initSystemSchemaPaths");function VG(){sc=void 0,ic=void 0,oc=void 0}a(VG,"resetPaths");lO.exports={getBaseSchemaPath:oO,getSystemSchemaPath:aO,getTransactionAuditStorePath:GG,getTransactionAuditStoreBasePath:cO,getSchemaPath:uO,initSystemSchemaPaths:kG,resetPaths:VG}});var wr=T((wie,hO)=>{"use strict";var $G=Ir().LMDB_ERRORS_ENUM,yie=require("lmdb"),YG=ht(),Iie=require("buffer").Buffer,{OVERFLOW_MARKER:_O,MAX_SEARCH_KEY_LENGTH:kl}=YG,dO=["number","string","symbol","boolean","bigint"];function KG(e){if(e=e?.primaryStore||e,!e)throw new Error($G.ENV_REQUIRED)}a(KG,"validateEnv");function WG(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(WG,"stringifyData");function QG(e){return e instanceof Date?e.valueOf():e}a(QG,"convertKeyValueToWrite");function zG(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(dO.includes(typeof e))return e.length>kl?[e.slice(0,kl)+_O]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(dO.includes(typeof i))i.length>kl?r.push(i.slice(0,kl)+_O):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(zG,"getIndexedValues");var Vl=0,fO=0;function EO(){fO=Date.now()-performance.now()}a(EO,"adjustStartTime");EO();var JG=6e4;setInterval(EO,JG).unref();function XG(){let e=performance.now()+fO;return e>Vl?(Vl=e,e):(Vl+=488e-6,Vl)}a(XG,"getNextMonotonicTime");hO.exports={validateEnv:KG,stringifyData:WG,convertKeyValueToWrite:QG,getNextMonotonicTime:XG,getIndexedValues:zG}});var mO,On,ch,uc=Ae(()=>{mO=require("events"),On=class extends mO.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new ch;return t.queue=this,t}push(t){this.send(t)}send(t){this.resolveNext?(this.resolveNext({value:t}),this.resolveNext=null):this.hasDataListeners?this.emit("data",t):(this.queue||(this.queue=[]),this.queue.push(t))}getNextMessage(){return this.queue?.shift()}on(t,r){if(t==="data"&&!this.hasDataListeners)for(this.hasDataListeners=!0;this.queue?.length>0;)r(this.queue.shift());return super.on(t,r)}},ch=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 Ii={};Ve(Ii,{server:()=>lt});var pO,lt,nr=Ae(()=>{pO=require("../index"),lt={};(0,pO._assignPackageExport)("server",lt)});var lh={};Ve(lh,{loadGQLSchema:()=>ek,start:()=>uh,startOnMainThread:()=>ZG});function uh({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)),f=new Map,E=[],h;for(let S of d.definitions)switch(S.kind){case u.OBJECT_TYPE_DEFINITION:let K=function(F){if(F.kind==="NonNullType"){let Y=K(F.type);return Y.nullable=!1,Y}if(F.kind==="ListType")return{type:"array",elements:K(F.type)};let Q={type:F.name?.value};return Object.defineProperty(Q,"location",{value:F.loc.startToken}),Q};a(K,"getProperty");let A=S.name.value,I=[],w={table:null,database:null,properties:I};f.set(A,w);for(let F of S.directives){if(F.name.value==="table"){for(let P of F.arguments)w[P.name.value]=P.value.value;w.schema&&(w.database=w.schema),w.table||(w.table=A),w.audit&&(w.audit=w.audit!=="false"),w.attributes=w.properties,E.push(w)}if(F.name.value==="sealed"&&(w.sealed=!0),F.name.value==="export"){w.export=!0;for(let P of F.arguments)P.name.value==="name"&&(w.export={name:P.value.value})}}let B=!1;for(let F of S.fields){let P=K(F.type);P.name=F.name.value,I.push(P);for(let Q of F.directives)if(Q.name.value==="primaryKey")B?console.warn("Can not define two attributes as a primary key"):(P.isPrimaryKey=!0,B=!0);else if(Q.name.value==="indexed")P.indexed=!0;else if(Q.name.value==="relationship"){let Y={};for(let z of Q.arguments)Y[z.name.value]=z.value.value;P.relationship=Y}else if(Q.name.value==="createdTime")P.assignCreatedTime=!0;else if(Q.name.value==="updatedTime")P.assignUpdatedTime=!0;else if(Q.name.value==="expiresAt")P.expiresAt=!0;else if(Q.name.value==="allow"){let Y=P.authorizedRoles=[];for(let z of Q.arguments)z.name.value==="role"&&Y.push(z.value.value)}}w.type=A,A==="Query"&&(h=w)}function p(S){let A=f.get(S.type);A?(Object.defineProperty(S,"properties",{value:A.properties}),Object.defineProperty(S,"definition",{value:A})):S.type==="array"?p(S.elements):jG.includes(S.type)||(0,SO.getWorkerIndex)()===0&&console.error(`The type ${S.type} is unknown at line ${S.location.line}, column ${S.location.column}, in ${s}`)}a(p,"connectPropertyType");for(let S of f.values())for(let A of S.properties)p(A);for(let S of E)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,$l.dirname)(n),S.tableClass):i.set((0,$l.dirname)(n)+"/"+(S.export.name||S.type),S.tableClass));if(h)for(let S of h.properties){let A=f.get(S.type);if(!A)throw new Error(`${S.type} was not found as a Query export`);i.set((0,$l.dirname)(n)+"/"+S.name,A.tableClass)}}}var $l,SO,jG,ZG,ek,TO=Ae(()=>{$l=require("path");ge();SO=v(et()),jG=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];a(uh,"start");ZG=uh,ek=uh({ensureTable:_t}).handleFile});async function Yl(e){return tk?(lc||(lc=rk(sk)),(await(await lc).import(e)).namespace):import(e)}async function rk(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),lc=new Compartment({console,Math,Date,fetch:nk,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,RO.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){Object.assign(s,{Resource:Ft,tables:Cr,databases:tt})}};let n=await(0,gO.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)}}),lc}function nk(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 sk(){return{Resource:Ft,tables:Cr}}var gO,RO,tk,lc,_h=Ae(()=>{bn();ge();gO=require("fs/promises"),RO=require("path"),tk=!1;a(Yl,"secureImport");a(rk,"getCompartment");a(nk,"secureOnlyFetch");a(sk,"getGlobalVars")});var fh={};Ve(fh,{handleFile:()=>ik});async function ik(e,t,r,n){let s=new Map,i=(0,AO.pathToFileURL)(r).toString(),o=await Yl(i);u(o.default)&&n.set((0,dh.dirname)(t),o.default),c(o,(0,dh.dirname)(t));function c(_,l){for(let d in _){let f=_[d];u(f)?n.set(l+"/"+d,f):typeof f=="object"&&c(f,l+"/"+d)}}a(c,"recurseForResources");function u(_){return typeof _=="function"&&(_.get||_.put||_.post||_.delete)}return a(u,"isResource"),s}var AO,dh,OO=Ae(()=>{AO=require("url");_h();dh=require("path");a(ik,"handleFile")});var hh={};Ve(hh,{start:()=>ok});function ok({resources:e}){e.set("login",Eh),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var Eh,bO=Ae(()=>{bn();a(ok,"start");Eh=class extends Ft{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 DO={};Ve(DO,{parse:()=>ph,streamAsJSON:()=>_c,stringify:()=>wi});function _c(e){return new mh({value:e})}function NO(e){return console.error(e),JSON.stringify(e.toString())}function yO(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function wi(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===CO)return LO(e);if(t.resolution)return t.resolution.then(()=>wi(e));throw t}}function LO(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+=LO(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+wi(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function ph(e){return uk.test(e)?ak.parse(e):JSON.parse(e)}var IO,wO,ak,ck,CO,mh,uk,Sh=Ae(()=>{IO=require("stream"),wO=v(require("json-bigint-fixes")),ak=(0,wO.default)({useNativeBigInt:!0}),ck=1e4,CO={};BigInt.prototype.toJSON=function(){throw CO};a(_c,"streamAsJSON");mh=class extends IO.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),NO)}catch(s){yield NO(s)}else yield wi(t)}else yield wi(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);yO(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>ck?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 yO(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(NO,"handleError");a(yO,"when");a(wi,"stringify");a(LO,"jsStringify");uk=/-?\d{16,}/;a(ph,"parse")});var $O=T(($ie,VO)=>{"use strict";var Th=require("recursive-iterator"),lk=require("alasql"),gh=require("clone"),MO=J(),{handleHDBError:UO,hdb_errors:_k}=Z(),{HDB_ERROR_MSGS:PO,HTTP_STATUS_CODES:vO}=_k,{getDatabases:dk}=(ge(),ee(xe)),fk=["DISTINCT_ARRAY"],BO=Symbol("validateTables"),Rh=Symbol("validateTable"),Vie=Symbol("getAllColumns"),HO=Symbol("validateAllColumns"),Kl=Symbol("findColumn"),xO=Symbol("validateOrderBy"),dc=Symbol("validateSegment"),Ah=Symbol("validateColumn"),FO=Symbol("setColumnsForTable"),qO=Symbol("checkColumnsForAsterisk"),GO=Symbol("validateGroupBy"),kO=Symbol("hasColumns"),Oh=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[BO](),this[qO](),this[HO]()}[BO](){if(this[kO]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Rh](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Rh](t.table)})}}[kO](){let t=!1,r=new Th(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[Rh](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=dk();if(!r[t.databaseid])throw UO(new Error,PO.SCHEMA_NOT_FOUND(t.databaseid),vO.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw UO(new Error,PO.TABLE_NOT_FOUND(t.databaseid,t.tableid),vO.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=gh(s);i.table=gh(t),this.attributes.push(i)})}[Kl](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)}[qO](){let t=new Th(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[FO](r.tableid)}[FO](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new lk.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[HO](){this[dc](this.statement.columns,!1),this[dc](this.statement.joins,!1),this[dc](this.statement.where,!1),this[GO](this.statement.group,!1),this[dc](this.statement.order,!0)}[dc](t,r){if(!t)return;let n=new Th(t),s=[];for(let{node:i,path:o}of n)!MO.isEmpty(i)&&!MO.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[xO](i):s.push(this[Ah](i)));return s}[GO](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&fk.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=gh(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[Kl](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[Kl](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`}[xO](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[Ah](t)}[Ah](t){let r=this[Kl](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]}};VO.exports=Oh});var KO=T((Kie,YO)=>{"use strict";var bh=class{static{a(this,"BridgeMethods")}createSchema(){throw new Error("createSchema bridge method is not defined")}dropSchema(){throw new Error("dropSchema bridge method is not defined")}createTable(){throw new Error("createTable bridge method is not defined")}dropTable(){throw new Error("dropTable bridge method is not defined")}createRecords(){throw new Error("createRecords bridge method is not defined")}updateRecords(){throw new Error("updateRecords bridge method is not defined")}async upsertRecords(){throw new Error("upsertRecords bridge method is not defined")}deleteRecords(){throw new Error("deleteRecords bridge method is not defined")}createAttribute(){throw new Error("createAttribute bridge method is not defined")}dropAttribute(){throw new Error("dropAttribute bridge method is not defined")}searchByConditions(){throw new Error("searchByConditions bridge method is not defined")}searchByHash(){throw new Error("searchByHash bridge method is not defined")}searchByValue(){throw new Error("searchByValue bridge method is not defined")}getDataByHash(){throw new Error("getDataByHash bridge method is not defined")}getDataByValue(){throw new Error("getDataByValue bridge method is not defined")}deleteRecordsBefore(){throw new Error("deleteRecordsBefore bridge method is not defined")}deleteAuditLogsBefore(){throw new Error("deleteAuditLogsBefore bridge method is not defined")}async readAuditLog(){throw new Error("readAuditLog bridge method is not defined")}};YO.exports=bh});var QO=T((Qie,WO)=>{"use strict";var Nh=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};WO.exports=Nh});var ZO={};Ve(ZO,{HAS_EXPIRATION:()=>Dh,LAST_TIMESTAMP_PLACEHOLDER:()=>hc,LOCAL_TIMESTAMP:()=>Ek,METADATA:()=>fc,NO_TIMESTAMP:()=>yh,PENDING_LOCAL_TIME:()=>Mh,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>Lh,RecordEncoder:()=>Ch,TIMESTAMP_ASSIGN_LAST:()=>mk,TIMESTAMP_ASSIGN_NEW:()=>XO,TIMESTAMP_ASSIGN_PREVIOUS:()=>jO,TIMESTAMP_PLACEHOLDER:()=>Wl,TIMESTAMP_RECORD_PREVIOUS:()=>Ih,getUpdateRecord:()=>Uh,handleLocalTimeForGets:()=>Xl});function Sk(){return Ec[0]=Ec[0]^64,hk.getFloat64(0)}function Xl(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?.[fc];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?.[fc]>=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[fc];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,Ci.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let u=0;u<Ci.length;u++){let _=Ci[u].deref();(!_||_===this||_.isDone||_.isCommitted)&&Ci.splice(u--,1)}},i.prototype.done.isTracked=!0}return e}function Uh(e,t,r){return function(n,s,i,o,c=-1,u,_,l,d="put",f,E){if(f||u==null?Bo=i?.localTime?Ih|jO:yh:Bo=u?i?.localTime?Ih|16384:XO|16384:yh,l>0&&(c|=Dh),zl=c,wh=l,i?.version===o&&u===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:Bo>0},p;try{f&&(h.ifVersion=p=i?.version??null);let S=e.put(n,s,h);if(u){let A=_?.user?.username;if(E&&(Ql=e.encoder.encode(E)),f&&i?.localTime){let I=i?.localTime,w=r.get(I);if(w){let B=Pt(w).previousLocalTime;return r.put(I,Jl(o,t,n,B,A,d,Ql),{ifVersion:p}),S}}r.put(hc,Jl(o,t,n,i?.localTime?1:0,A,d,Ql),{append:d!=="invalidate",instructedWrite:!0,ifVersion:p})}return S}catch(S){throw S.message+=" id: "+n+" options: "+h,S}}}var zO,JO,Wl,hc,Lh,Ek,fc,Ec,hk,yh,XO,mk,jO,Ih,Dh,Mh,pk,Ql,Bo,zl,wh,Ch,Xie,Ci,mc=Ae(()=>{zO=require("msgpackr");Li();JO=v(V()),Wl=new Uint8Array([1,1,1,1,4,64,0,0]),hc=new Uint8Array([1,1,1,1,1,0,0,0]),Lh=new Uint8Array([1,1,1,1,3,64,0,0]),Ek=Symbol("local-timestamp"),fc=Symbol("metadata"),Ec=new Uint8Array(8),hk=new DataView(Ec.buffer,0,8),yh=0,XO=0,mk=1,jO=3,Ih=4,Dh=16,Mh=1,Bo=0,zl=-1,wh=0,Ch=class extends zO.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(n,s){if(Bo||zl>=0){let i=0,o=Bo;o&&(i+=8,Bo=0);let c=zl,u=wh;c>=0&&(i+=2,zl=-1,u&&(i+=8,wh=0));let _=pk=r.call(this,n,s|2048|i);Ql=_.subarray((_.start||0)+i,_.end);let l=_.start||0;return o&&(Wl[4]=o,Wl[5]=o>>8,_.set(Wl,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(Ec,0,c),c+=8;else for(let d=0;d<8;d++)Ec[d]=t[c++];u=Sk(),i=t[c]}let _;i<32&&(o=i,c+=2,o&Dh&&(_=(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,[fc]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(Sk,"getTimestamp");Xie=Map.prototype.get;a(Xl,"handleLocalTimeForGets");Ci=[];setInterval(()=>{for(let e=0;e<Ci.length;e++){let t=Ci[e].deref();!t||t.isDone||t.isCommitted?Ci.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&JO.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(Uh,"getUpdateRecord")});var jl=T((Zie,eb)=>{"use strict";var vh=j(),Bh=M(),{RecordEncoder:Tk}=(mc(),ee(ZO));vh.initSync();var gk=vh.get(Bh.CONFIG_PARAMS.STORAGE_COMPRESSION),Rk=vh.get(Bh.CONFIG_PARAMS.STORAGE_CACHING)!==!1,Ak=Bh.UPDATES_PROPERTY,Ph=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=gk&&r&&{startingOffset:32},this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=Rk&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:Tk},this.alwaysLazyProperty=n=>n===Ak)}};eb.exports=Ph});var e_=T((toe,rb)=>{"use strict";var Ho=j(),pc=M();Ho.initSync();var Ok=Ho.get(pc.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Ho.get(pc.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Ho.get(pc.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",tb=Ho.get(pc.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),bk=Ho.get(pc.CONFIG_PARAMS.STORAGE_NOREADAHEAD),Zl=class{static{a(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=1e3,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.noSync=Ok,this.noFSAccess=!0,tb!==void 0&&(this.overlappingSync=tb),this.noReadAhead=bk}};rb.exports=Zl;Zl.MAX_DBS=1e4});var $e=T((noe,db)=>{"use strict";var xh=require("lmdb"),Nn=require("fs-extra"),Lr=require("path"),t_=wr(),ib=V(),sr=Ir().LMDB_ERRORS_ENUM,r_=QO(),Fh=jl(),ob=e_(),Qs=ht(),nb=M(),{table:Nk,resetDatabases:yk}=(ge(),ee(xe)),sb=j(),yn=Qs.INTERNAL_DBIS_NAME,ab=Qs.DBI_DEFINITION_NAME,Ik="data.mdb",wk="lock.mdb",Sc=".mdb",Ck="-lock",Hh=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=jr(t,r),this.key_type=this.dbi[Qs.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Qs.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new xh.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function n_(e,t){if(e===void 0)throw new Error(sr.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(sr.ENV_NAME_REQUIRED)}a(n_,"pathEnvNameValidation");async function qh(e,t,r=!0){try{await Nn.access(e)}catch(n){throw n.code==="ENOENT"?new Error(sr.INVALID_BASE_PATH):n}try{let n=Lr.join(e,t+Sc);return await Nn.access(n,Nn.constants.R_OK|Nn.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await Nn.access(Lr.join(e,t,Ik),Nn.constants.R_OK|Nn.constants.F_OK),Lr.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(sr.INVALID_ENVIRONMENT)}else throw new Error(sr.INVALID_ENVIRONMENT);throw n}}a(qh,"validateEnvironmentPath");function s_(e,t){if(t_.validateEnv(e),t===void 0)throw new Error(sr.DBI_NAME_REQUIRED)}a(s_,"validateEnvDBIName");async function Lk(e,t,r=!1,n=!1){n_(e,t);let s=Lr.basename(e);t=t.toString();let i=sb.get(nb.CONFIG_PARAMS.DATABASES);i||sb.setProperty(nb.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await qh(e,t,n),cb(e,t,r)}catch(o){if(o.message===sr.INVALID_ENVIRONMENT){let c=Lr.join(e,t);await Nn.mkdirp(n?c:e);let u=new ob(n?c:c+Sc,!1),_=xh.open(u);_.dbis=Object.create(null);let l=new Fh(!1);_.openDB(yn,l),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=Gh(e,t,r);return _[Qs.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(Lk,"createEnvironment");async function Dk(e,t,r,n=!0){n_(e,t),t=t.toString();let s=Lr.join(e,t);return Nk({table:t,database:Lr.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(Dk,"copyEnvironment");async function cb(e,t,r=!1){n_(e,t),t=t.toString();let n=Gh(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 qh(e,t),i=Lr.join(e,t+Sc),o=s!=i,c=new ob(s,o),u=xh.open(c);u.dbis=Object.create(null);let _=lb(u);for(let l=0;l<_.length;l++)jr(u,_[l]);return u[Qs.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=u,u}a(cb,"openEnvironment");async function Mk(e,t,r=!1){n_(e,t),t=t.toString();let n=Lr.join(e,t+Sc),s=await qh(e,t);if(global.lmdb_map!==void 0){let i=Gh(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await ub(o),delete global.lmdb_map[i]}}await Nn.remove(s),await Nn.remove(s===n?s+Ck:Lr.join(Lr.dirname(s),wk))}a(Mk,"deleteEnvironment");async function ub(e){t_.validateEnv(e);let t=e[Qs.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(ub,"closeEnvironment");function Gh(e,t,r=!1){let s=`${Lr.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(Gh,"getCachedEnvironmentName");function Uk(e){t_.validateEnv(e);let t=Object.create(null),r=jr(e,yn);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==yn)try{t[n]=Object.assign(new r_,s)}catch{ib.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(Uk,"listDBIDefinitions");function lb(e){t_.validateEnv(e);let t=[],r=jr(e,yn);for(let{key:n}of r.getRange({start:!1}))n!==yn&&t.push(n);return t}a(lb,"listDBIs");function Pk(e,t){let n=jr(e,yn).getEntry(t),s=new r_;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{ib.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(Pk,"getDBIDefinition");function _b(e,t,r,n=!r){if(s_(e,t),t=t.toString(),t===yn)throw new Error(sr.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return jr(e,t)}catch(s){if(s.message===sr.DBI_DOES_NOT_EXIST){let i=new Fh(r,n===!0),o=e.openDB(t,i),c=new r_(r===!0,n);return o[ab]=c,jr(e,yn).putSync(t,c),e.dbis[t]=o,o}throw s}}a(_b,"createDBI");function jr(e,t){if(s_(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==yn?r=Pk(e,t):r=new r_,r===void 0)throw new Error(sr.DBI_DOES_NOT_EXIST);let n;try{let s=new Fh(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(sr.DBI_DOES_NOT_EXIST):s}return n[ab]=r,e.dbis[t]=n,n}a(jr,"openDBI");function vk(e,t){s_(e,t),t=t.toString();let r=jr(e,t),n=r.getStats();return r[Qs.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(vk,"statDBI");async function Bk(e,t){try{let r=Lr.join(e,t+Sc);return(await Nn.stat(r)).size}catch{throw new Error(sr.INVALID_ENVIRONMENT)}}a(Bk,"environmentDataSize");function Hk(e,t){if(s_(e,t),t=t.toString(),t===yn)throw new Error(sr.CANNOT_DROP_INTERNAL_DBIS_NAME);jr(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],jr(e,yn).removeSync(t)}a(Hk,"dropDBI");function xk(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{jr(e,i)}catch(o){if(o.message===sr.DBI_DOES_NOT_EXIST)_b(e,i,i!==t,i===t),n=!0;else throw o}}n&&yk()}a(xk,"initializeDBIs");db.exports={openDBI:jr,openEnvironment:cb,createEnvironment:Lk,listDBIs:lb,listDBIDefinitions:Uk,createDBI:_b,dropDBI:Hk,statDBI:vk,deleteEnvironment:Mk,initializeDBIs:xk,TransactionCursor:Hh,environmentDataSize:Bk,copyEnvironment:Dk,closeEnvironment:ub}});var Eb=T((ioe,fb)=>{"use strict";var kh=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};fb.exports=kh});var mb=T((aoe,hb)=>{"use strict";var Vh=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}};hb.exports=Vh});var Sb=T((uoe,pb)=>{"use strict";var $h=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};pb.exports=$h});var xo=T((Eoe,Rb)=>{"use strict";var Fk=$e(),qk=Eb(),Gk=mb(),kk=Sb(),Vn=wr(),Tc=Ir().LMDB_ERRORS_ENUM,Vk=ht(),ps=M(),$k=J(),Yk=require("uuid"),_oe=require("lmdb"),{handleHDBError:Kk,hdb_errors:Wk}=Z(),{OVERFLOW_MARKER:doe,MAX_SEARCH_KEY_LENGTH:foe}=Vk,Tb=j();Tb.initSync();var i_=Tb.get(ps.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Yh=ps.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Di=ps.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Qk(e,t,r,n,s=Vn.getNextMonotonicTime()){zh(e,t,r,n),Kh(e,t,r);let i=new qk,o=[],c=[];for(let u=0;u<n.length;u++){let _=n[u];gb(_,!0,s);let l=zk(e,t,r,_),d=_[t];o.push(l),c.push(d)}return Wh(o,c,n,i,s)}a(Qk,"insertRecords");function zk(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][ps.FUNC_VAL],n[o]=c)}let u=Vn.getIndexedValues(c),_=e.dbis[o];if(u){i_&&_.prefetch(u.map(l=>({key:l,value:s})),o_);for(let l=0,d=u.length;l<d;l++)_.put(u[l],s)}}i_&&e.dbis[t].prefetch([s],o_),e.dbis[t].put(s,n,n[Di])})}a(zk,"insertRecord");function Jk(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(Jk,"removeSkippedRecords");function gb(e,t,r){let n=r>0;(n||!Number.isInteger(e[Di]))&&(e[Di]=r||(r=Vn.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[Yh]))&&(e[Yh]=r||Vn.getNextMonotonicTime()):delete e[Yh]}a(gb,"setTimestamps");function Kh(e,t,r){r.indexOf(ps.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(ps.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(ps.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(ps.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),Fk.initializeDBIs(e,t,r)}a(Kh,"initializeTransaction");async function Xk(e,t,r,n,s=Vn.getNextMonotonicTime()){zh(e,t,r,n),Kh(e,t,r);let i=new Gk,o=[],c=[],u=[];for(let _=0;_<n.length;_++){let l=n[_],d=l[t],f;try{f=Qh(e,t,l,d,i,!0,s)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(f),u.push(d)}return Wh(c,u,n,i,s,o)}a(Xk,"updateRecords");async function jk(e,t,r,n,s=Vn.getNextMonotonicTime()){try{zh(e,t,r,n)}catch(u){throw Kk(u,u.message,Wk.HTTP_STATUS_CODES.BAD_REQUEST)}Kh(e,t,r);let i=new kk,o=[],c=[];for(let u=0;u<n.length;u++){let _=n[u],l;$k.isEmpty(_[t])?(l=Yk.v4(),_[t]=l):l=_[t];let d=Qh(e,t,_,l,i,!1,s);o.push(d),c.push(l)}return Wh(o,c,n,i,s)}a(jk,"upsertRecords");async function Wh(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||Vn.getNextMonotonicTime(),Jk(r,i),n}a(Wh,"finalizeWrite");function Qh(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(gb(r,!l,o),Number.isInteger(r[Di])&&_[Di]>r[Di])return!1;l&&s.original_records.push(_);let d,f=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let p=r[h],S=e.dbis[h];if(S===void 0)continue;let A=_[h];if(typeof p=="function"){let w=p([[_]]);Array.isArray(w)&&(p=w[0][ps.FUNC_VAL],r[h]=p)}if(p===A)continue;let I=Vn.getIndexedValues(A);if(I){i_&&S.prefetch(I.map(w=>({key:w,value:n})),o_);for(let w=0,B=I.length;w<B;w++)S.remove(I[w],n)}if(I=Vn.getIndexedValues(p),I){i_&&S.prefetch(I.map(w=>({key:w,value:n})),o_);for(let w=0,B=I.length;w<B;w++)S.put(I[w],n)}}let E=Object.assign({},_,r);c.put(n,E,E[Di])},"do_put");return u?d=c.ifVersion(n,u.version,f):d=c.ifNoExists(n,f),d.then(E=>E?!0:Qh(e,t,r,n,s,i,o))}a(Qh,"updateUpsertRecord");function Zk(e,t,r){if(Vn.validateEnv(e),t===void 0)throw new Error(Tc.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Tc.WRITE_ATTRIBUTES_REQUIRED):new Error(Tc.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(Zk,"validateBasic");function zh(e,t,r,n){if(Zk(e,t,r),!Array.isArray(n))throw n===void 0?new Error(Tc.RECORDS_REQUIRED):new Error(Tc.RECORDS_MUST_BE_ARRAY)}a(zh,"validateWrite");function o_(){}a(o_,"noop");Rb.exports={insertRecords:Qk,updateRecords:Xk,upsertRecords:jk}});var Mi=T((moe,eV)=>{eV.exports={hdb_table:{hash_attribute:"id",name:"hdb_table",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"name"},{attribute:"hash_attribute"},{attribute:"schema"},{attribute:"residence"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_attribute:{hash_attribute:"id",name:"hdb_attribute",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"schema"},{attribute:"table"},{attribute:"attribute"},{attribute:"schema_table"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_schema:{hash_attribute:"name",name:"hdb_schema",schema:"system",residence:["*"],attributes:[{attribute:"name"},{attribute:"createddate"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metric"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]}}});var Yn=T((poe,bb)=>{"use strict";var Ob=J(),Ab=M(),Fo=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,$n=require("joi"),zs={schema_format:{pattern:Fo,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},tV=$n.alternatives($n.string().min(1).max(zs.schema_length.maximum).pattern(Fo).messages({"string.pattern.base":"{:#label} "+zs.schema_format.message}),$n.number(),$n.array()).required(),rV=$n.alternatives($n.string().min(1).max(zs.schema_length.maximum).pattern(Fo).messages({"string.pattern.base":"{:#label} "+zs.schema_format.message}),$n.number()),nV=$n.alternatives($n.string().min(1).max(zs.schema_length.maximum).pattern(Fo).messages({"string.pattern.base":"{:#label} "+zs.schema_format.message}),$n.number()).required();function sV(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>zs.schema_length.maximum?`'${e}' maximum of 250 characters`:Fo.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(sV,"checkValidTable");function iV(e,t){return Ob.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(iV,"validateSchemaExists");function oV(e,t){let r=t.state.ancestors[0].schema;return Ob.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(oV,"validateTableExists");function aV(e,t){return e.toLowerCase()===Ab.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${Ab.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(aV,"validateSchemaName");bb.exports={common_validators:zs,schema_regex:Fo,hdb_schema_table:tV,validateSchemaExists:iV,validateTableExists:oV,validateSchemaName:aV,checkValidTable:sV,hdb_database:rV,hdb_table:nV}});var rt=T((Toe,Nb)=>{"use strict";var ir=require("validate.js");ir.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||ir.validators.type.checks[t](e)?null:` must be a '${t}' value`};ir.validators.type.checks={Object:function(e){return ir.isObject(e)&&!ir.isArray(e)},Array:ir.isArray,Integer:ir.isInteger,Number:ir.isNumber,String:ir.isString,Date:ir.isDate,Boolean:function(e){return typeof e=="boolean"}};ir.validators.hasValidFileExt=function(e,t){return ir.isString(e)?e===""?"can't be blank":t.filter(r=>e.endsWith(r)).length>0?null:`must include one of the following valid file extensions - '${t.join("', '")}'`:null};Nb.exports={validateObject:cV,validateObjectAsync:uV,validateBySchema:lV};function cV(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=ir(e,t,{format:"flat"});return r?new Error(r):null}a(cV,"validateObject");async function uV(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await ir.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(uV,"validateObjectAsync");function lV(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(lV,"validateBySchema")});var a_=T((Roe,yb)=>{var{common_validators:Kn}=Yn(),Rc=rt(),gc="is required",mt={database:{presence:!1,format:Kn.schema_format,length:Kn.schema_length},schema:{presence:!1,format:Kn.schema_format,length:Kn.schema_length},table:{presence:!0,format:Kn.schema_format,length:Kn.schema_length},attribute:{presence:!0,format:Kn.schema_format,length:Kn.schema_length},hash_attribute:{presence:!0,format:Kn.schema_format,length:Kn.schema_length}};function Ac(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(Ac,"makeAttributesStrings");function _V(e){return e=Ac(e),mt.table.presence=!1,mt.attribute.presence=!1,mt.hash_attribute.presence=!1,Rc.validateObject(e,mt)}a(_V,"schema_object");function dV(e){return e=Ac(e),mt.table.presence={message:gc},mt.attribute.presence=!1,mt.hash_attribute.presence=!1,Rc.validateObject(e,mt)}a(dV,"table_object");function fV(e){return e=Ac(e),mt.table.presence={message:gc},mt.attribute.presence=!1,Rc.validateObject(e,mt)}a(fV,"create_table_object");function EV(e){return e=Ac(e),mt.table.presence={message:gc},mt.attribute.presence={message:gc},mt.hash_attribute.presence=!1,Rc.validateObject(e,mt)}a(EV,"attribute_object");function hV(e){return e=Ac(e),mt.table.presence={message:gc},mt.attribute.presence=!1,mt.hash_attribute.presence=!1,Rc.validateObject(e,mt)}a(hV,"describe_table");function mV(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(mV,"validateTableResidence");yb.exports={schema_object:_V,create_table_object:fV,table_object:dV,attribute_object:EV,describe_table:hV,validateTableResidence:mV}});var wb=T((Ooe,Ib)=>{"use strict";var pV=require("uuid"),Jh=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||pV.v4(),this.schema_table=`${this.schema}.${this.table}`}};Ib.exports=Jh});var c_=T((Noe,Cb)=>{"use strict";var SV=wb(),Xh=class extends SV{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}};Cb.exports=Xh});var Db=T((Ioe,Lb)=>{"use strict";Lb.exports=gV;var TV="inserted";function gV(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===TV?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(gV,"returnObject")});var u_=T((Coe,Bb)=>{"use strict";var RV=M(),jh=$e(),AV=xo(),{getSystemSchemaPath:OV,getSchemaPath:bV}=We(),NV=Mi(),yV=a_(),IV=c_(),wV=Db(),{handleHDBError:Mb,hdb_errors:Pb}=Z(),Ub=J(),{HTTP_STATUS_CODES:CV}=Pb,Zh=NV.hdb_attribute,vb=[];for(let e=0;e<Zh.attributes.length;e++)vb.push(Zh.attributes[e].attribute);var LV="inserted";Bb.exports=DV;async function DV(e){let t=yV.attribute_object(e);if(t)throw Mb(new Error,t.message,Pb.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&Ub.checkGlobalSchemaTable(e.schema,e.table);if(r)throw Mb(new Error,r,CV.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=Ub.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 IV(e.schema,e.table,e.attribute,e.id);try{let i=await jh.openEnvironment(bV(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}`);jh.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await jh.openEnvironment(OV(),RV.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await AV.insertRecords(o,Zh.hash_attribute,vb,[s]);return wV(LV,c,{records:[s]},u)}catch(i){throw i}}a(DV,"lmdbCreateAttribute")});var tm=T((Doe,xb)=>{var{hdb_table:MV,hdb_database:Hb}=Yn(),UV=rt(),em=require("joi"),PV={undefined:"undefined",null:"null"},vV=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||PV[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"),BV=em.object({database:Hb,schema:Hb,table:MV,records:em.array().items(em.object().custom(vV)).required()});xb.exports=function(e){return UV.validateBySchema(e,BV)}});var Oc=T((Poe,qb)=>{"use strict";var Ss=J(),Fb=V(),Uoe=tm(),{getDatabases:HV}=(ge(),ee(xe)),{ClientError:Ui}=Z();qb.exports=xV;function xV(e){if(Ss.isEmpty(e))throw new Ui("invalid update parameters defined.");if(Ss.isEmptyOrZeroLength(e.schema))throw new Ui("invalid schema specified.");if(Ss.isEmptyOrZeroLength(e.table))throw new Ui("invalid table specified.");if(!Array.isArray(e.records))throw new Ui("records must be an array");let t=HV()[e.schema]?.[e.table];if(Ss.isEmpty(t))throw new Ui(`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&&Ss.isEmptyOrZeroLength(o[r]))throw Fb.error("a valid hash attribute must be provided with update record:",o),new Ui("a valid hash attribute must be provided with update record, check log for more info");if(!Ss.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw Fb.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Ui(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!Ss.isEmpty(o[r])&&o[r]!==""&&n.has(Ss.autoCast(o[r]))&&(o.skip=!0),n.add(Ss.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(xV,"insertUpdateValidate")});var bc=T((Boe,Gb)=>{"use strict";var FV=M().OPERATIONS_ENUM,rm=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=FV.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};Gb.exports=rm});var wc=T((Foe,kb)=>{"use strict";var xoe=bc(),l_=M(),sm=J(),nm=V(),qV=require("uuid"),{handleHDBError:Nc,hdb_errors:GV}=Z(),{HDB_ERROR_MSGS:yc,HTTP_STATUS_CODES:Ic}=GV;kb.exports=kV;function kV(e,t,r){for(let s=0;s<t.length;s++)VV(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];$V(i,r,e.operation)}}a(kV,"processRows");function VV(e){if(Buffer.byteLength(String(e))>l_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Nc(new Error,yc.ATTR_NAME_LENGTH_ERR(e),Ic.BAD_REQUEST,void 0,void 0,!0);if(sm.isEmptyOrZeroLength(e)||sm.isEmpty(e.trim()))throw Nc(new Error,yc.ATTR_NAME_NULLISH_ERR,Ic.BAD_REQUEST,void 0,void 0,!0)}a(VV,"validateAttribute");function $V(e,t,r){if(!e.hasOwnProperty(t)||sm.isEmptyOrZeroLength(e[t])){if(r===l_.OPERATIONS_ENUM.INSERT||r===l_.OPERATIONS_ENUM.UPSERT){e[t]=qV.v4();return}throw nm.error("Update transaction aborted due to record with no hash value:",e),Nc(new Error,yc.RECORD_MISSING_HASH_ERR,Ic.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>l_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw nm.error(e),Nc(new Error,yc.HASH_VAL_LENGTH_ERR,Ic.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw nm.error(e),Nc(new Error,yc.INVALID_FORWARD_SLASH_IN_HASH_ERR,Ic.BAD_REQUEST,void 0,void 0,!0)}a($V,"validateHash")});var $b=T((Goe,Vb)=>{"use strict";var im=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};Vb.exports=im});var Wb=T((Voe,Kb)=>{"use strict";var om=$e(),YV=V(),Yb=Ir().LMDB_ERRORS_ENUM;Kb.exports=KV;async function KV(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 om.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==Yb.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await om.closeEnvironment(global.lmdb_map[n]),await om.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==Yb.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){YV.error(t)}}a(KV,"cleanLMDBMap")});var Ts=T((Yoe,Xb)=>{"use strict";var Cc=require("crypto"),WV=j(),{CONFIG_PARAMS:QV}=M(),zb="aes-256-cbc",zV=32,JV=16,am=64,Jb=32,XV=am+Jb,Qb=new Map;Xb.exports={encrypt:jV,decrypt:ZV,createNatsTableStreamName:e$};function jV(e){let t=Cc.randomBytes(zV),r=Cc.randomBytes(JV),n=Cc.createCipheriv(zb,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(jV,"encrypt");function ZV(e){let t=e.substr(0,am),r=e.substr(am,Jb),n=e.substr(XV,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Cc.createDecipheriv(zb,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(ZV,"decrypt");function e$(e,t){let r=WV.get(QV.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=Qb.get(r);return n||(n=Cc.createHash("md5").update(r).digest("hex"),Qb.set(r,n)),n}a(e$,"createNatsTableStreamName")});var Pi=T((Qoe,Zb)=>{"use strict";var Woe=Zr(),__=V(),jb=a_(),t$=Ts(),d_=J(),{handleHDBError:f_,hdb_errors:r$}=Z(),{HDB_ERROR_MSGS:E_,HTTP_STATUS_CODES:cm}=r$,n$=j();n$.initSync();var{getDatabases:um}=(ge(),ee(xe));Zb.exports={describeAll:s$,describeTable:h_,describeSchema:i$};async function s$(e){try{let t=d_.isEmptyOrZeroLength(e),r,n;t||(r=e.hdb_user.role.permission,n=r.super_user||r.cluster_user);let s=um(),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 f in d)try{let E;if(t||n)E=await h_({schema:l,table:f,exact_count:u});else if(r&&r[l].describe&&r[l].tables[f].describe){let h=r[l].tables[f].attribute_permissions;E=await h_({schema:l,table:f,exact_count:u},h)}E&&c.push(E)}catch(E){__.error(E)}}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 __.error("Got an error in describeAll"),__.error(t),f_(new Error,E_.DESCRIBE_ALL_ERR)}}a(s$,"describeAll");async function h_(e,t){d_.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=jb.describe_table(e);if(i)throw i;let c=um()[r];if(!c)throw f_(new Error,E_.SCHEMA_NOT_FOUND(e.schema),cm.NOT_FOUND);let u=c[n];if(!u)throw f_(new Error,E_.TABLE_NOT_FOUND(e.schema,e.table),cm.NOT_FOUND);function _(f){l.push(Object.assign({},{attribute:f.attribute,type:f.type,elements:f.elements?.type,indexed:f.indexed,is_primary_key:f.isPrimaryKey,assigned_created_time:f.assignCreatedTime,assigned_updated_time:f.assignUpdatedTime,nullable:f.nullable,properties:f.properties?f.properties.map(E=>({type:E.type,name:E.name})):void 0}))}a(_,"pushAtt");let l=[];if(s){let f={};s.forEach(E=>{E.describe&&(f[E.attribute_name]=!0)}),u.attributes.forEach(E=>{f[E.name]&&_(E)})}else u.attributes?.forEach(f=>_(f));let d={schema:r,name:u.tableName,hash_attribute:u.attributes.find(f=>f.isPrimaryKey||f.is_hash_attribute)?.name,audit:u.audit,schema_defined:u.schemaDefined,attributes:l};d.clustering_stream_name=t$.createNatsTableStreamName(d.schema,d.name);try{let f=u.getRecordCount({exactCount:e.exact_count==="true"});d.record_count=f.recordCount,d.estimated_record_range=f.estimatedRange;let E=u.auditStore;if(E)for(let h of E.getKeys({reverse:!0,limit:1}))d.last_updated_record=h[0];if(!d.last_updated_record&&u.indices.__updatedtime__)for(let h of u.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))d.last_updated_record=h}catch(f){__.warn(`unable to stat table dbi due to ${f}`)}return d}a(h_,"descTable");async function i$(e){d_.transformReq(e);let t=jb.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=um()[n];if(!i)throw f_(new Error,E_.SCHEMA_NOT_FOUND(e.schema),cm.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),d_.isEmpty(u)||u.describe){let _=await h_({schema:e.schema,table:c,exact_count:e.exact_count},u?u.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(i$,"describeSchema")});var Js=T((joe,sN)=>{var o$=Mi(),{callbackify:tN,promisify:a$}=require("util"),{getDatabases:rN}=(ge(),ee(xe));sN.exports={setSchemaDataToGlobal:eN,getTableSchema:c$,getSystemSchema:u$,setSchemaDataToGlobalAsync:a$(eN)};var nN=Pi(),Joe=tN(nN.describeAll),Xoe=tN(nN.describeTable);function eN(e){global.hdb_schema=rN(),e&&e()}a(eN,"setSchemaDataToGlobal");function c$(e,t,r){let n=rN()[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(c$,"getTableSchema");function u$(){return o$}a(u$,"getSystemSchema")});var en=T((eae,cN)=>{"use strict";var p_=tm(),qt=J(),l$=require("util"),S_=In(),_$=Js(),iN=V(),{handleHDBError:vi,hdb_errors:d$}=Z(),{HTTP_STATUS_CODES:Bi}=d$,f$=l$.promisify(_$.getTableSchema),E$="updated",oN="inserted",aN="upserted";cN.exports={insert:m$,update:p$,upsert:S$,validation:h$,flush:T$};async function h$(e){if(qt.isEmpty(e))throw new Error("invalid update parameters defined.");if(qt.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(qt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await f$(e.schema,e.table),r=p_(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&&qt.isEmptyOrZeroLength(c[n]))throw iN.error("a valid hash attribute must be provided with update record:",c),new Error("a valid hash attribute must be provided with update record");if(!qt.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw iN.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!qt.isEmpty(c[n])&&c[n]!==""&&s.has(qt.autoCast(c[n]))&&(c.skip=!0),s.add(qt.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(h$,"validation");async function m$(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=p_(e);if(t)throw vi(new Error,t.message,Bi.BAD_REQUEST);qt.transformReq(e);let r=qt.checkSchemaTableExist(e.schema,e.table);if(r)throw vi(new Error,r,Bi.BAD_REQUEST);let n=await S_.createRecords(e);return m_(oN,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(m$,"insertData");async function p$(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=p_(e);if(t)throw vi(new Error,t.message,Bi.BAD_REQUEST);qt.transformReq(e);let r=qt.checkSchemaTableExist(e.schema,e.table);if(r)throw vi(new Error,r,Bi.BAD_REQUEST);let n=await S_.updateRecords(e);return qt.isEmpty(n.existing_rows)?m_(E$,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):m_(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(p$,"updateData");async function S$(e){if(e.operation!=="upsert")throw vi(new Error,"invalid operation, must be upsert",Bi.INTERNAL_SERVER_ERROR);let t=p_(e);if(t)throw vi(new Error,t.message,Bi.BAD_REQUEST);qt.transformReq(e);let r=qt.checkSchemaTableExist(e.schema,e.table);if(r)throw vi(new Error,r,Bi.BAD_REQUEST);let n=await S_.upsertRecords(e);return m_(aN,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(S$,"upsertData");function m_(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===oN?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===aN?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(m_,"returnObject");function T$(e){return qt.transformReq(e),S_.flush(e.schema,e.table)}a(T$,"flush")});var _m=T((rae,_N)=>{var g$=rt(),lm=require("joi"),{hdb_table:R$,hdb_database:uN}=Yn(),lN={schema:uN,database:uN,table:R$},A$={date:lm.date().iso().required()},O$={timestamp:lm.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};_N.exports=function(e,t){let r=t==="timestamp"?{...lN,...O$}:{...lN,...A$},n=lm.object(r);return g$.validateBySchema(e,n)}});var EN=T((nae,fN)=>{var b$=rt(),dm=require("joi"),{hdb_table:N$,hdb_database:dN}=Yn(),y$=dm.object({schema:dN,database:dN,table:N$,hash_values:dm.array().required(),ids:dm.array()});fN.exports=function(e){return b$.validateBySchema(e,y$)}});var mN=T((sae,hN)=>{"use strict";var fm=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}},Em=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}},hm=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};hN.exports={InsertObject:fm,NoSQLSeachObject:Em,DeleteResponseObject:hm}});var Fi=T((oae,RN)=>{"use strict";var SN=_m(),I$=EN(),Hi=J(),pN=require("moment"),TN=V(),{promisify:w$,callbackify:C$}=require("util"),xi=M(),L$=Js(),mm=w$(L$.getTableSchema),pm=In(),{DeleteResponseObject:D$}=mN(),{handleHDBError:Xs,hdb_errors:M$}=Z(),{HDB_ERROR_MSGS:T_,HTTP_STATUS_CODES:js}=M$,U$="records successfully deleted",P$=C$(gN);RN.exports={delete:P$,deleteRecord:gN,deleteFilesBefore:v$,deleteAuditLogsBefore:B$};async function v$(e){let t=SN(e,"date");if(t)throw Xs(t,t.message,js.BAD_REQUEST,void 0,void 0,!0);if(Hi.transformReq(e),!pN(e.date,pN.ISO_8601).isValid())throw Xs(new Error,T_.INVALID_DATE,js.BAD_REQUEST,xi.LOG_LEVELS.ERROR,T_.INVALID_DATE,!0);let n=Hi.checkSchemaTableExist(e.schema,e.table);if(n)throw Xs(new Error,n,js.NOT_FOUND,xi.LOG_LEVELS.ERROR,n,!0);let s=await pm.deleteRecordsBefore(e);if(await mm(e.schema,e.table),TN.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(v$,"deleteFilesBefore");async function B$(e){let t=SN(e,"timestamp");if(t)throw Xs(t,t.message,js.BAD_REQUEST,void 0,void 0,!0);if(Hi.transformReq(e),isNaN(e.timestamp))throw Xs(new Error,T_.INVALID_VALUE("Timestamp"),js.BAD_REQUEST,xi.LOG_LEVELS.ERROR,T_.INVALID_VALUE("Timestamp"),!0);let r=Hi.checkSchemaTableExist(e.schema,e.table);if(r)throw Xs(new Error,r,js.NOT_FOUND,xi.LOG_LEVELS.ERROR,r,!0);let n=await pm.deleteAuditLogsBefore(e);return await mm(e.schema,e.table),TN.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(B$,"deleteAuditLogsBefore");async function gN(e){e.ids&&(e.hash_values=e.ids);let t=I$(e);if(t)throw Xs(t,t.message,js.BAD_REQUEST,void 0,void 0,!0);Hi.transformReq(e);let r=Hi.checkSchemaTableExist(e.schema,e.table);if(r)throw Xs(new Error,r,js.NOT_FOUND,xi.LOG_LEVELS.ERROR,r,!0);try{await mm(e.schema,e.table);let n=await pm.deleteRecords(e);return Hi.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${U$}`),n}catch(n){if(n.message===xi.SEARCH_NOT_FOUND_MESSAGE){let s=new D$;return s.message=xi.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(gN,"deleteRecord")});var g_=T((cae,bN)=>{var H$=require("crypto"),AN=9;function x$(e){let t=q$(AN),r=ON(e+t);return t+r}a(x$,"createHash");function F$(e,t){let r=e?.substr(0,AN),n=r+ON(t+r);return e===n}a(F$,"validateHash");function q$(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(q$,"generateSalt");function ON(e){return H$.createHash("md5").update(e).digest("hex")}a(ON,"md5");bN.exports={hash:x$,validate:F$}});var yN=T((lae,NN)=>{var Sm=rt(),Qt={username:{presence:!0,format:"[\\w\\-\\_]+",exclusion:{within:["system"],message:"You cannot create tables within the system schema"}},password:{presence:!0},role:{presence:!0,format:"[\\w\\-\\_]+"},active:{presence:!0,inclusion:{within:[!0,!1],message:"must be a boolean"}}};function G$(e){return Qt.password.presence=!0,Qt.username.presence=!0,Qt.role.presence=!0,Qt.active.presence=!0,Sm.validateObject(e,Qt)}a(G$,"addUserValidation");function k$(e){return Qt.password.presence=!1,Qt.username.presence=!0,Qt.role.presence=!1,Qt.active.presence=!1,Sm.validateObject(e,Qt)}a(k$,"alterUserValidation");function V$(e){return Qt.password.presence=!1,Qt.username.presence=!0,Qt.role.presence=!1,Qt.active.presence=!1,Sm.validateObject(e,Qt)}a(V$,"dropUserValidation");NN.exports={addUserValidation:G$,alterUserValidation:k$,dropUserValidation:V$}});var nt=T((fae,wN)=>{"use strict";var{platform:dae}=require("os"),$$="nats-server.zip",Tm="nats-server",Y$=process.platform==="win32"?`${Tm}.exe`:Tm,gm="HDB",K$=/^[^\s.,*>]+$/,IN="__request__",W$=a(e=>`${e}.${IN}`,"REQUEST_SUBJECT"),Q$={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},z$={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},J$={HUB:"hub.pid",LEAF:"leaf.pid"},X$={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},j$={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:gm,deliver_subject:"__HDB__.WORKQUEUE"},Z$={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:gm,deliver_subject:"HDB.SCHEMAQUEUE"},e1={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:gm,deliver_subject:"HDB.USERQUEUE"},t1={SUCCESS:"success",ERROR:"error"},r1={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},n1={TXN:"txn",MSGID:"msgid"},qo={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},s1={[qo.ERR]:1,[qo.WRN]:2,[qo.INF]:3,[qo.DBG]:4,[qo.TRC]:5},i1={debug:"-D",trace:"-DVV"};wN.exports={NATS_SERVER_ZIP:$$,NATS_SERVER_NAME:Tm,NATS_BINARY_NAME:Y$,PID_FILES:J$,NATS_CONFIG_FILES:z$,SERVER_SUFFIX:X$,WORK_QUEUE_CONSUMER_NAMES:j$,SCHEMA_QUEUE_CONSUMER_NAMES:Z$,USER_QUEUE_CONSUMER_NAMES:e1,NATS_TERM_CONSTRAINTS_RX:K$,REQUEST_SUFFIX:IN,UPDATE_REMOTE_RESPONSE_STATUSES:t1,CLUSTER_STATUS_STATUSES:r1,REQUEST_SUBJECT:W$,SUBJECT_PREFIXES:n1,MSG_HEADERS:Q$,LOG_LEVELS:qo,LOG_LEVEL_FLAGS:i1,LOG_LEVEL_HIERARCHY:s1}});var LN=T((hae,CN)=>{"use strict";var o1={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
|
-
`)},DV="certificate.pem",UV="privateKey.pem",MV="ca.pem";FN.exports={CERTIFICATE_VALUES:LV,CERTIFICATE_PEM_NAME:DV,PRIVATEKEY_PEM_NAME:UV,CA_PEM_NAME:MV}});var xh=T((wie,$N)=>{"use strict";var VN=require("fs-extra"),ce=require("joi"),PV=require("os"),{boolean:we,string:Us,number:bt,array:qh}=ce.types(),{totalmem:qN}=require("os"),mo=require("path"),vV=q(),Yl=$(),Iie=GN(),xN=b(),BV=xe(),kN="log",HV="components",FV="Invalid logging.rotation.maxSize unit. Available units are G, M or K",GV="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",qV="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",xV="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",kV="rootPath config parameter is undefined",VV="clustering.enabled config parameter is undefined",Ai=bt.min(0).required(),Kl=qh.items({host:Us.required(),port:Ai}).empty(null),sn;$N.exports={configValidator:$V,routesValidator:JV,route_constraints:Kl};function $V(e){if(sn=e.rootPath,Yl.isEmpty(sn))throw kV;let t=we.required(),r=bt.min(0).max(1e3).empty(null).default(zV),s=Us.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default($l),n=Us.optional().empty(null),i=Us.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),o=ce.string().empty(null).default($l),c=ce.custom(KV).empty(null).default($l),u=e.clustering?.enabled;if(Yl.isEmpty(u))throw VV;let _;return u===!0?_=ce.object({enabled:t,hubServer:ce.object({cluster:ce.object({name:ce.required().empty(null),network:ce.object({port:Ai,routes:Kl}).required()}).required(),leafNodes:ce.object({network:ce.object({port:Ai}).required()}).required(),network:ce.object({port:Ai}).required()}).required(),leafServer:ce.object({network:ce.object({port:Ai,routes:Kl}).required(),streams:ce.object({maxAge:bt.min(120).allow(null).optional(),maxBytes:bt.min(1).allow(null).optional(),maxMsgs:bt.min(1).allow(null).optional(),path:o}).required()}).required(),logLevel:ce.valid("error","warn","info","debug","trace"),nodeName:i,republishMessages:we.optional(),databaseLevel:we.optional(),tls:ce.object({certificate:n,certificateAuthority:n,privateKey:n,insecure:we.required(),verify:we.optional()}),user:Us.optional().empty(null)}).required():_=ce.object({enabled:t,tls:ce.object({certificate:n,certificateAuthority:n,privateKey:n,insecure:we.required()})}).required(),ce.object({authentication:ce.object({authorizeLocal:we,cacheTTL:bt.required(),enableSessions:we}),analytics:ce.object({aggregatePeriod:bt}),componentsRoot:s.optional(),clustering:_,localStudio:ce.object({enabled:t}).required(),logging:ce.object({auditAuthEvents:ce.object({logFailed:we,logSuccessful:we}),file:we.required(),level:ce.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ce.object({enabled:we.optional(),compress:we.optional(),interval:Us.custom(QV).optional().empty(null),maxSize:Us.custom(WV).optional().empty(null),path:Us.optional().empty(null).default($l)}).required(),root:s,stdStreams:we.required(),auditLog:we.required()}).required(),operationsApi:ce.object({network:ce.object({cors:we.optional(),corsAccessList:qh.optional(),headersTimeout:bt.min(1).optional(),keepAliveTimeout:bt.min(1).optional(),port:bt.optional().empty(null),securePort:bt.optional().empty(null),timeout:bt.min(1).optional()}).optional(),tls:ce.object({certificate:n,certificateAuthority:n,privateKey:n})}).required(),rootPath:Us.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ce.object({network:ce.object({port:Ai,securePort:Ai}).required(),webSocket:we.optional(),requireAuthentication:we.optional()}),http:ce.object({compressionThreshold:bt.optional(),cors:we.optional(),corsAccessList:qh.optional(),headersTimeout:bt.min(1).optional(),port:bt.min(0).optional().empty(null),securePort:bt.min(0).optional().empty(null)}).required(),threads:r.optional(),storage:ce.object({writeAsync:we.required(),overlappingSync:we.optional(),caching:we.optional(),compression:we.optional(),noReadAhead:we.optional(),path:c,prefetchWrites:we.optional()}).required(),ignoreScripts:we.optional(),tls:ce.object({certificate:n.optional(),certificateAuthority:n.optional(),privateKey:n.optional()})}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a($V,"configValidator");function YV(e){return VN.existsSync(e)?null:`Specified path ${e} does not exist.`}a(YV,"doesPathExist");function KV(e,t){ce.assert(e,Us.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=YV(e);if(r)return t.message(r)}a(KV,"validatePath");function WV(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(FV);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(qV):e}a(WV,"validateRotationMaxSize");function QV(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(GV);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(xV):e}a(QV,"validateRotationInterval");function zV(e,t){let r=t.state.path.join("."),s=PV.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||qN();return i=Math.round(Math.min(i,qN())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),vV.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(zV,"setDefaultThreads");function $l(e,t){if(!Yl.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(Yl.isEmpty(sn))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return mo.join(sn,HV);case"logging.root":return mo.join(sn,kN);case"clustering.leafServer.streams.path":return mo.join(sn,"clustering","leaf");case"storage.path":let s=mo.join(sn,xN.LEGACY_DATABASES_DIR_NAME);return VN.existsSync(s)?s:mo.join(sn,xN.DATABASES_DIR_NAME);case"logging.rotation.path":return mo.join(sn,kN);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a($l,"setDefaultRoot");function JV(e){let t=ce.object({routes:Kl});return BV.validateBySchema({routes:e},t)}a(JV,"routesValidator")});var Tr=T((Die,ZN)=>{"use strict";var Sr=b(),St=$(),lt=q(),{configValidator:XV,routesValidator:YN}=xh(),Qt=require("fs-extra"),jV=require("yaml"),ls=require("path"),ZV=require("is-number"),WN=require("properties-reader"),e$=require("lodash"),{handleHDBError:t$}=j(),{HTTP_STATUS_CODES:r$,HDB_ERROR_MSGS:Wl}=dr(),Lie=require("minimist"),{server:s$}=(Hr(),Z(io)),{DATABASES_PARAM_CONFIG:tc,CONFIG_PARAMS:pr,CONFIG_PARAM_MAP:_s}=Sr,n$="Unable to get config value because config is uninitialized",i$="Config successfully initialized",o$="Error backing up config file",a$="Empty parameter sent to getConfigValue",QN=ls.join(Sr.PACKAGE_ROOT,"config","yaml",Sr.HDB_DEFAULT_CONFIG_FILE),c$="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",KN={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"},Ql,_t,zl;ZN.exports={createConfigFile:u$,getDefaultConfig:l$,getConfigValue:JN,initConfig:Vh,flattenConfig:po,updateConfigValue:XN,updateConfigObject:d$,getConfiguration:h$,setConfiguration:m$,readConfigFile:Yh,getClusteringRoutes:p$,initOldConfig:jN,getConfigFromFile:S$,getConfigFilePath:Oi,addConfig:T$,deleteConfigFromFile:R$,getConfigObj:g$};function u$(e){let t=Hn(QN);Ql=po(t.toJSON());let r;for(let o in e){let c=_s[o.toLowerCase()];if(c===pr.DATABASES){r=e[o];continue}if(!c&&o.endsWith("_package")&&(c=o),c!==void 0){let u=c.split("_"),_=kh(c,e[o]);c==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{t.setIn([...u],_)}catch(l){lt.error(l)}}}r&&zN(t,r),$h(t);let s=t.toJSON();_t=po(s);let n=t.getIn(["rootPath"]),i=ls.join(n,Sr.HDB_CONFIG_FILE);Qt.createFileSync(i),Qt.writeFileSync(i,String(t)),lt.trace(`Config file written to ${i}`)}a(u$,"createConfigFile");function zN(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!St.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(tc.TABLES))for(let i in s[n][tc.TABLES])for(let o in s[n][tc.TABLES][i]){let c=s[n][tc.TABLES][i][o],u=[pr.DATABASES,n,tc.TABLES,i,o];e.hasIn(u)?e.setIn(u,c):e.addIn(u,c)}else for(let i in s[n]){let o=s[n][i],c=[pr.DATABASES,n,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(s){lt.error("Error parsing schemas CLI/env config arguments",s)}}a(zN,"setSchemasConfig");function l$(e){if(Ql===void 0){let r=Hn(QN);Ql=po(r.toJSON())}let t=_s[e.toLowerCase()];if(t!==void 0)return Ql[t.toLowerCase()]}a(l$,"getDefaultConfig");function JN(e){if(e==null){lt.error(a$);return}if(_t===void 0){lt.trace(n$);return}let t=_s[e.toLowerCase()];if(t!==void 0)return _t[t.toLowerCase()]}a(JN,"getConfigValue");function Oi(e=St.getPropsFilePath()){let t=St.getEnvCliRootPath();return t?ls.join(t,Sr.HDB_CONFIG_FILE):WN(e).get(Sr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(Oi,"getConfigFilePath");function Vh(e=!1){if(_t===void 0||e){let t;if(!St.noBootFile()){t=St.getPropsFilePath();try{Qt.accessSync(t,Qt.constants.F_OK|Qt.constants.R_OK)}catch(i){throw lt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=Oi(t),s;if(r.includes("config/settings.js"))try{jN(r);return}catch(i){if(i.code!==Sr.NODE_ERROR_CODES.ENOENT)throw i}try{s=Hn(r)}catch(i){if(i.code===Sr.NODE_ERROR_CODES.ENOENT){lt.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 lt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}_$(s,r),$h(s);let n=s.toJSON();if(s$.config=n,_t=po(n),_t.logging_rotation_rotate)for(let i in KN)_t[i]&<.error(`Config ${KN[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);lt.trace(i$)}}a(Vh,"initConfig");function _$(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],ls.join(r,"database")),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],ls.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],ls.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(lt.trace("Updating config file with missing config params"),Qt.writeFileSync(t,String(e)))}a(_$,"checkForUpdatedConfig");function $h(e){let t=e.toJSON();t.componentsRoot=t.componentsRoot??t?.customFunctions?.root,t.threads=t.threads??t?.http?.threads;let r=XV(t);if(r.error)throw Wl.CONFIG_VALIDATION(r.error.message);e.setIn(["threads"],r.value.threads),e.setIn(["componentsRoot"],r.value.componentsRoot),e.setIn(["logging","root"],r.value.logging.root),e.setIn(["storage","path"],r.value.storage.path),e.setIn(["logging","rotation","path"],r.value.logging.rotation.path),e.setIn(["clustering","leafServer","streams","path"],r.value.clustering.leafServer.streams?.path)}a($h,"validateConfig");function d$(e,t){_t===void 0&&(_t={});let r=_s[e.toLowerCase()];if(r===void 0){lt.trace(`Unable to update config object because config param '${e}' does not exist`);return}_t[r.toLowerCase()]=t}a(d$,"updateConfigObject");function XN(e,t,r=void 0,s=!1,n=!1,i=!1){_t===void 0&&Vh();let o=JN(_s.hdb_root),c=ls.join(o,Sr.HDB_CONFIG_FILE),u=Hn(c),_;if(r===void 0&&e.toLowerCase()===pr.DATABASES)_=t;else if(r===void 0){let f;if(i)f=e;else if(f=_s[e.toLowerCase()],f===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=f.split("_"),h=kh(f,t);u.setIn([...E],h)}else for(let f in r){let E=_s[f.toLowerCase()];if(E===pr.HTTP_SECUREPORT&&r[f]===_t[pr.HTTP_PORT]?.toString()&&u.setIn(["http","port"],null),E===pr.OPERATIONSAPI_NETWORK_SECUREPORT&&r[f]===_t[pr.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&u.setIn(["operationsApi","network","port"],null),E===pr.DATABASES){_=r[f];continue}if(!E&&f.endsWith("_package")&&(E=f),E!==void 0){let h=E.split("_"),p=Sr.LEGACY_CONFIG_PARAMS[f.toUpperCase()];p&&p.startsWith("customFunctions")&&u.hasIn(p.split("_"))&&(E=p,h=p.split("_"));let S=kh(E,r[f]);E==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{u.setIn([...h],S)}catch(A){lt.error(A)}}}_&&zN(u,_),$h(u);let l=u.getIn(["rootPath"]),d=ls.join(l,Sr.HDB_CONFIG_FILE);s===!0&&f$(c,l),Qt.writeFileSync(d,String(u)),n&&(_t=po(u.toJSON())),lt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(XN,"updateConfigValue");function f$(e,t){try{let r=ls.join(t,"backup",`${Sr.HDB_CONFIG_FILE}.bak`);Qt.copySync(e,r),lt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){lt.error(o$),lt.error(r)}}a(f$,"backupConfigFile");var E$=["databases"];function po(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)),zl=e,r(e);function r(s){let n={};for(let i in s)if(s.hasOwnProperty(i))if(typeof s[i]=="object"&&s[i]!==null&&!Array.isArray(s[i])&&!E$.includes(i)){let o=r(s[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let u=i+"_"+c;!pr[u.toUpperCase()]&&_s[u]&&(n[_s[u].toLowerCase()]=o[c]),n[u]=o[c]}}else n[i.toLowerCase()]=s[i];return n}a(r,"squashObj")}a(po,"flattenConfig");function kh(e,t){if(e===pr.CLUSTERING_NODENAME||e===pr.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(ZV(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||St.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 St.autoCast(t)}a(kh,"castConfigValue");function h$(){let e=St.getPropsFilePath(),t=Oi(e);return Hn(t).toJSON()}a(h$,"getConfiguration");async function m$(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return XN(void 0,void 0,n,!0),c$}catch(i){throw typeof i=="string"||i instanceof String?t$(i,i,r$.BAD_REQUEST,void 0,void 0,!0):i}}a(m$,"setConfiguration");function Yh(){let e=St.getPropsFilePath();try{Qt.accessSync(e,Qt.constants.F_OK|Qt.constants.R_OK)}catch(s){if(!St.noBootFile())throw lt.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Oi(e);return Hn(t).toJSON()}a(Yh,"readConfigFile");function Hn(e){return jV.parseDocument(Qt.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Hn,"parseYamlDoc");function p$(){let e=Yh(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=St.isEmptyOrZeroLength(t)?[]:t;let r=YN(t);if(r)throw Wl.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=St.isEmptyOrZeroLength(s)?[]:s;let n=YN(s);if(n)throw Wl.CONFIG_VALIDATION(n.message);if(!St.isEmptyOrZeroLength(s)&&!St.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!St.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Wl.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(p$,"getClusteringRoutes");function jN(e){let t=WN(e);_t={};for(let r in _s){let s=t.get(r.toUpperCase());if(St.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=_s[r].toLowerCase();n===pr.LOGGING_ROOT?_t[n]=ls.dirname(s):_t[n]=s}return _t}a(jN,"initOldConfig");function S$(e){let t=Yh();return e$.get(t,e.replaceAll("_","."))}a(S$,"getConfigFromFile");async function T$(e,t){let r=Hn(Oi());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await Qt.writeFile(Oi(),String(r))}a(T$,"addConfig");function R$(e){let t=Oi(St.getPropsFilePath()),r=Hn(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=ls.join(s,Sr.HDB_CONFIG_FILE);Qt.writeFileSync(n,String(r))}a(R$,"deleteConfigFromFile");function g$(){return zl||(Vh(),zl)}a(g$,"getConfigObj")});var tb=T((Mie,eb)=>{"use strict";var Jl=b(),Xl=class{static{a(this,"BaseLicense")}constructor(t=0,r=Jl.RAM_ALLOCATION_ENUM.DEFAULT,s=Jl.LICENSE_VALUES.VERSION_DEFAULT,n){this.exp_date=t,this.ram_allocation=r,this.version=s,this.fingerprint=n}},Kh=class extends Xl{static{a(this,"ExtendedLicense")}constructor(t=0,r=Jl.RAM_ALLOCATION_ENUM.DEFAULT,s=Jl.LICENSE_VALUES.VERSION_DEFAULT,n,i=!1){super(t,r,s,n),this.enterprise=i}};eb.exports={BaseLicense:Xl,ExtendedLicense:Kh}});var rc=T((vie,ab)=>{"use strict";var To=require("fs-extra"),rb=Vl(),sb=require("crypto"),A$=require("moment"),O$=require("uuid").v4,Ht=q(),Qh=require("path"),N$=$(),Fn=b(),b$=tb().ExtendedLicense,So="invalid license key format",y$="061183",I$="mofi25",w$="aes-256-cbc",C$=16,L$=32,nb=X();nb.initSync();var Wh;ab.exports={validateLicense:ib,generateFingerPrint:U$,licenseSearch:ob,getLicense:v$};function zh(){return Qh.join(nb.getHdbBasePath(),Fn.LICENSE_KEY_DIR_NAME,Fn.LICENSE_FILE_NAME)}a(zh,"getLicenseDirPath");function D$(){let e=zh();return Qh.join(e,Fn.LICENSE_FILE_NAME)}a(D$,"getLicenseFilePath");function Jh(){let e=zh();return Qh.join(e,Fn.REG_KEY_FILE_NAME)}a(Jh,"getFingerPrintFilePath");async function U$(){let e=Jh();try{return await To.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await M$();throw Ht.error(`Error writing fingerprint file to ${e}`),Ht.error(t),new Error("There was an error generating the fingerprint")}}a(U$,"generateFingerPrint");async function M$(){let e=O$(),t=rb.hash(e),r=Jh();try{await To.mkdirp(zh()),await To.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw Ht.error(`Error writing fingerprint file to ${r}`),Ht.error(s),new Error("There was an error generating the fingerprint")}return t}a(M$,"writeFingerprint");function ib(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:Fn.RAM_ALLOCATION_ENUM.DEFAULT,version:Fn.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Ht.error("empty license key passed to validate."),r;let s=Jh(),n=!1;try{n=To.statSync(s)}catch(i){Ht.error(i)}if(n){let i;try{i=To.readFileSync(s,"utf8")}catch{Ht.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(I$),c=o[1];c=Buffer.concat([Buffer.from(c)],C$);let u=Buffer.concat([Buffer.from(i)],L$),_=sb.createDecipheriv(w$,u,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let l=null;try{l=_.update(o[0],"hex","utf8"),l.trim(),l+=_.final("utf8")}catch{let E=P$(o[0],i);if(E)l=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(So),Ht.error(So),new Error(So)}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(So),Ht.error(So),new Error(So)}else r.exp_date=l;r.exp_date<A$().valueOf()&&(r.valid_date=!1),rb.validate(o[1],`${y$}${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||Ht.error("Invalid licence"),r}a(ib,"validateLicense");function P$(e,t){try{let r=sb.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{Ht.warn("Check old license failed")}}a(P$,"checkOldLicense");function ob(){let e=new b$,t=[];try{t=To.readFileSync(D$(),"utf-8").split(Fn.NEW_LINE)}catch(r){r.code==="ENOENT"?Ht.info("no license file found"):Ht.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(N$.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=ib(n.license_key,n.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.ram_allocation=i.ram_allocation,e.enterprise=!0)}catch(n){Ht.error("There was an error parsing the license string."),Ht.error(n),e.ram_allocation=Fn.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return Wh=e,e}a(ob,"licenseSearch");async function v$(){return Wh||await ob(),Wh}a(v$,"getLicense")});var kr=T((qie,Ob)=>{"use strict";var _b="username is required",db="nothing to update, must supply active, role or password to update",fb="password cannot be an empty string",Eb="If role is specified, it cannot be empty.",hb="active must be true or false";Ob.exports={addUser:$$,alterUser:Y$,dropUser:W$,getSuperUser:X$,userInfo:Q$,listUsers:Zl,listUsersExternal:z$,setUsersToGlobal:go,findAndValidateUser:gb,getClusterUser:j$,USERNAME_REQUIRED:_b,ALTERUSER_NOTHING_TO_UPDATE:db,EMPTY_PASSWORD:fb,EMPTY_ROLE:Eb,ACTIVE_BOOLEAN:hb};var mb=xr(),B$=gi(),Zh=Vl(),pb=vN(),Sb=qr(),em=nn(),Rr=$(),Tb=require("validate.js"),de=q(),{promisify:H$}=require("util"),tm=rn(),cb=b(),ub=ke(),F$=Tr(),Hie=X(),Fie=rc(),G$=Ei(),{table:Gie}=(fe(),Z(Ce)),{handleHDBError:Ms,hdb_errors:q$}=j(),{HTTP_STATUS_CODES:Ps,AUTHENTICATION_ERROR_MSGS:Xh,HDB_ERROR_MSGS:Ro}=q$,{UserEventMsg:rm}=ds(),jh=require("lodash"),{server:sm}=(Hr(),Z(io)),x$=q();sm.getUser=gb;var Rb={username:!0,active:!0,role:!0,password:!0},lb=new Map,jl=Sb.searchByValue,k$=Sb.searchByHash,V$=H$(B$.delete);async function $$(e){let t=Tb.cleanAttributes(e,Rb),r=pb.addUserValidation(t);if(r)throw Ms(new Error,r.message,Ps.BAD_REQUEST,void 0,void 0,!0);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},n;try{n=await jl(s),n=n&&Array.from(n)}catch(u){throw de.error("There was an error searching for a role in add user"),de.error(u),u}if(!n||n.length<1)throw Ms(new Error,Ro.ROLE_NAME_NOT_FOUND(t.role),Ps.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw Ms(new Error,Ro.DUP_ROLES_FOUND(t.role),Ps.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=tm.encrypt(t.password)),t.password=Zh.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await mb.insert(i)}catch(u){throw de.error("There was an error searching for a user."),de.error(u),u}de.debug(o);try{await go()}catch(u){throw de.error("Got an error setting users to global"),de.error(u),u}if(o.skipped_hashes.length===1)throw Ms(new Error,Ro.USER_ALREADY_EXISTS(t.username),Ps.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],em.signalUserChange(new rm(process.pid)),`${c.username} successfully added`}a($$,"addUser");async function Y$(e){let t=Tb.cleanAttributes(e,Rb);if(Rr.isEmptyOrZeroLength(t.username))throw new Error(_b);if(Rr.isEmptyOrZeroLength(t.password)&&Rr.isEmptyOrZeroLength(t.role)&&Rr.isEmptyOrZeroLength(t.active))throw new Error(db);if(!Rr.isEmpty(t.password)&&Rr.isEmptyOrZeroLength(t.password.trim()))throw new Error(fb);if(!Rr.isEmpty(t.active)&&!Rr.isBoolean(t.active))throw new Error(hb);let r=K$(t.username);if(!Rr.isEmpty(t.password)&&!Rr.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=tm.encrypt(t.password)),t.password=Zh.hash(t.password)),t.role==="")throw new Error(Eb);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 jl(i)||[])}catch(c){throw de.error("Got an error searching for a role."),de.error(c),c}if(!o||o.length===0){let c=Ro.ALTER_USER_ROLE_NOT_FOUND(t.role);throw de.error(c),Ms(new Error,c,Ps.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=Ro.ALTER_USER_DUP_ROLES(t.role);throw de.error(c),Ms(new Error,c,Ps.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await mb.update(s)}catch(i){throw de.error("Error during update."),de.error(i),i}try{await go()}catch(i){throw de.error("Got an error setting users to global"),de.error(i),i}return em.signalUserChange(new rm(process.pid)),n}a(Y$,"alterUser");function K$(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(K$,"isClusterUser");async function W$(e){try{let t=pb.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(Rr.isEmpty(global.hdb_users.get(e.username)))throw Ms(new Error,Ro.USER_NOT_EXIST(e.username),Ps.NOT_FOUND,void 0,void 0,!0);let s;try{s=await V$(r)}catch(n){throw de.error("Got an error deleting a user."),de.error(n),n}de.debug(s);try{await go()}catch(n){throw de.error("Got an error setting users to global."),de.error(n),n}return em.signalUserChange(new rm(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(W$,"dropUser");async function Q$(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=jh.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},s;try{s=await k$(r)}catch(n){throw de.error("Got an error searching for a role."),de.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw de.error(r),r}return t}a(Q$,"userInfo");async function z$(){let e;try{e=await Zl()}catch(t){throw de.error("Got an error listing users."),de.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(z$,"listUsersExternal");async function Zl(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await jl(e)}catch(o){throw de.error("Got an error searching for roles."),de.error(o),o}let r={};for(let o of t)r[o.id]=jh.cloneDeep(o);if(Object.keys(r).length===0)return null;let s={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},n;try{n=await jl(s)}catch(o){throw de.error("Got an error searching for users."),de.error(o),o}let i=new Map;for(let o of n)o=jh.cloneDeep(o),o.role=r[o.role],J$(o.role),i.set(o.username,o);return i}catch(e){throw de.error("got an error listing users"),de.error(e),Rr.errorizeMessage(e)}return null}a(Zl,"listUsers");function J$(e){try{if(!e){de.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(G$)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){de.error("Got an error trying to set system permissions."),de.error(t)}}a(J$,"appendSystemTablesToRole");async function go(){try{let e=await Zl();global.hdb_users=e}catch(e){throw de.error(e),e}}a(go,"setUsersToGlobal");async function gb(e,t,r=!0){global.hdb_users||await go();let s=global.hdb_users.get(e);if(!s)throw Ms(new Error,Xh.GENERIC_AUTH_FAIL,Ps.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw Ms(new Error,Xh.USER_INACTIVE,Ps.UNAUTHORIZED,void 0,void 0,!0);let n={active:s.active,username:s.username};if(s.refresh_token&&(n.refresh_token=s.refresh_token),s.role&&(n.role=s.role),r===!0){if(lb.get(t)===s.password)return n;if(Zh.validate(s.password,t))lb.set(t,s.password);else throw Ms(new Error,Xh.GENERIC_AUTH_FAIL,Ps.UNAUTHORIZED,void 0,void 0,!0)}return n}a(gb,"findAndValidateUser");async function X$(){global.hdb_users||await go();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(X$,"getSuperUser");async function j$(){let e=await Zl(),t=F$.getConfigFromFile(cb.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Rr.isEmpty(r)&&r?.role?.role===cb.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=tm.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+ub.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+ub.SERVER_SUFFIX.ADMIN,r}a(j$,"getClusterUser");var Ab=[];sm.invalidateUser=function(e){for(let t of Ab)try{t(e)}catch(r){x$.error("Error invalidating user",r)}};sm.onInvalidatedUser=function(e){Ab.push(e)}});var nc=T(($ie,Ib)=>{"use strict";var Ni=q(),gr=b(),Z$=rN(),kie=Pn(),Vie=mi(),eY=kr(),{validateEvent:Nb}=ds(),sc=us(),tY=require("process"),{resetDatabases:rY}=(fe(),Z(Ce)),sY={[gr.ITC_EVENT_TYPES.SCHEMA]:nY,[gr.ITC_EVENT_TYPES.USER]:yb};async function nY(e){let t=Nb(e);if(t){Ni.error(t);return}Ni.trace("ITC schemaHandler received schema event:",e),await Z$(e.message),await iY(e.message)}a(nY,"schemaHandler");async function iY(e){try{sc.resetReadTxn(gr.SYSTEM_SCHEMA_NAME,gr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),sc.resetReadTxn(gr.SYSTEM_SCHEMA_NAME,gr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),sc.resetReadTxn(gr.SYSTEM_SCHEMA_NAME,gr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=rY();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Ni.error(t)}}a(iY,"syncSchemaMetadata");var bb=[];async function yb(e){try{try{sc.resetReadTxn(gr.SYSTEM_SCHEMA_NAME,gr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),sc.resetReadTxn(gr.SYSTEM_SCHEMA_NAME,gr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Ni.warn(r)}let t=Nb(e);if(t){Ni.error(t);return}Ni.trace(`ITC userHandler ${gr.HDB_ITC_CLIENT_PREFIX}${tY.pid} received user event:`,e),await eY.setUsersToGlobal();for(let r of bb)r()}catch(t){Ni.error(t)}}a(yb,"userHandler");yb.addListener=function(e){bb.push(e)};Ib.exports=sY});var ds=T((Jie,Cb)=>{"use strict";var Kie=q(),nm=$(),oY=b(),{ITC_ERRORS:ic}=dr(),{parentPort:Wie,threadId:aY,isMainThread:cY,workerData:Qie}=require("worker_threads"),{onMessageFromWorkers:uY,broadcast:zie,broadcastWithAcknowledgement:lY}=Ze();Cb.exports={sendItcEvent:_Y,validateEvent:wb,SchemaEventMsg:dY,UserEventMsg:fY};var e_;uY(async(e,t)=>{e_=e_||nc(),wb(e),e_[e.type]&&await e_[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function _Y(e){return!cY&&e.message&&(e.message.originator=aY),lY(e)}a(_Y,"sendItcEvent");function wb(e){if(typeof e!="object")return ic.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||nm.isEmpty(e.type))return ic.MISSING_TYPE;if(!e.hasOwnProperty("message")||nm.isEmpty(e.message))return ic.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||nm.isEmpty(e.message.originator))return ic.MISSING_ORIGIN;if(oY.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return ic.INVALID_EVENT(e.type)}a(wb,"validateEvent");function dY(e,t,r,s=void 0,n=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=s,this.attribute=n}a(dY,"SchemaEventMsg");function fY(e){this.originator=e}a(fY,"UserEventMsg")});var nn=T((Zie,Mb)=>{"use strict";var Lb=b(),jie=$(),t_=q(),Db=ZO(),Ao,{sendItcEvent:Ub}=ds();function EY(e){try{t_.trace("signalSchemaChange called with message:",e),Ao=Ao||nc();let t=new Db(Lb.ITC_EVENT_TYPES.SCHEMA,e);return Ao.schema(t),Ub(t)}catch(t){t_.error(t)}}a(EY,"signalSchemaChange");function hY(e){try{t_.trace("signalUserChange called with message:",e),Ao=Ao||nc();let t=new Db(Lb.ITC_EVENT_TYPES.USER,e);return Ao.user(t),Ub(t)}catch(t){t_.error(t)}}a(hY,"signalUserChange");Mb.exports={signalSchemaChange:EY,signalUserChange:hY}});var r_=T((toe,vb)=>{"use strict";var Pb=$(),mY=b(),pY=q(),SY=Ul(),TY=Dl(),RY=nn(),{SchemaEventMsg:gY}=ds(),AY="already exists in";vb.exports=OY;async function OY(e,t,r){if(Pb.isEmptyOrZeroLength(r))return r;let s=[];Pb.isEmptyOrZeroLength(t.attributes)||t.attributes.forEach(i=>{s.push(i.attribute)});let n=r.filter(i=>s.indexOf(i)<0);return n.length===0||await Promise.all(n.map(async i=>{await NY(e,t.schema,t.name,i)})),n}a(OY,"lmdbCheckForNewAttributes");async function NY(e,t,r,s){let n=new TY(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await bY(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(AY))pY.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(NY,"createNewAttribute");async function bY(e){let t;return t=await SY(e),RY.signalSchemaChange(new gY(process.pid,mY.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(bY,"createAttribute")});var Oo=T((soe,Bb)=>{"use strict";var im=class{static{a(this,"LMDBTransactionObject")}constructor(t,r,s,n,i=void 0){this.operation=t,this.user_name=r,this.timestamp=s,this.hash_values=n,this.origin=i}};Bb.exports=im});var Fb=T((ioe,Hb)=>{"use strict";var yY=Oo(),IY=b().OPERATIONS_ENUM,om=class extends yY{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(IY.INSERT,r,s,n,i),this.records=t}};Hb.exports=om});var qb=T((aoe,Gb)=>{"use strict";var wY=Oo(),CY=b().OPERATIONS_ENUM,am=class extends wY{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(CY.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};Gb.exports=am});var kb=T((uoe,xb)=>{"use strict";var LY=Oo(),DY=b().OPERATIONS_ENUM,cm=class extends LY{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(DY.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};xb.exports=cm});var $b=T((_oe,Vb)=>{"use strict";var UY=Oo(),MY=b().OPERATIONS_ENUM,um=class extends UY{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super(MY.DELETE,s,n,t,i),this.original_records=r}};Vb.exports=um});var oc=T((Eoe,Qb)=>{"use strict";var foe=require("path"),Yb=Ue(),PY=Fb(),vY=qb(),BY=kb(),HY=$b(),No=ze(),Kb=$(),{CONFIG_PARAMS:FY}=b(),Wb=X();Wb.initSync();var s_=b().OPERATIONS_ENUM,{getTransactionAuditStorePath:GY}=ve();Qb.exports=qY;async function qY(e,t){if(Wb.get(FY.LOGGING_AUDITLOG)===!1)return;let r=GY(e.schema,e.table),s=await Yb.openEnvironment(r,e.table,!0),n=xY(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){Yb.initializeDBIs(s,No.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,No.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[No.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[No.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),Kb.isEmpty(n.user_name)||s.dbis[No.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[No.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(qY,"writeTransaction");function xY(e,t){let r=Kb.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===s_.INSERT)return new PY(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===s_.UPDATE)return new vY(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===s_.UPSERT)return new BY(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===s_.DELETE)return new HY(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(xY,"createTransactionObject")});var lm=T((poe,zb)=>{"use strict";var kY=Qa(),moe=za(),ac=b(),VY=Za(),$Y=fo().insertRecords,YY=Ue(),KY=q(),WY=r_(),{getSchemaPath:QY}=ve(),zY=oc();zb.exports=JY;async function JY(e){try{let{schema_table:t,attributes:r}=kY(e);VY(e,r,t.hash_attribute),e.schema!==ac.SYSTEM_SCHEMA_NAME&&(r.includes(ac.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(ac.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(ac.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(ac.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await WY(e.hdb_auth_header,t,r),n=QY(e.schema,e.table),i=await YY.openEnvironment(n,e.table),o=await $Y(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await zY(e,o)}catch(c){KY.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(JY,"lmdbCreateRecords")});var jb=T((Toe,Xb)=>{"use strict";var Jb=b(),XY=lm(),jY=za(),ZY=require("fs-extra"),{getSchemaPath:e1}=ve();Xb.exports=t1;async function t1(e){let t=[{name:e.schema,createddate:Date.now()}],r=new jY(Jb.SYSTEM_SCHEMA_NAME,Jb.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await XY(r),await ZY.mkdirp(e1(e.schema))}a(t1,"lmdbCreateSchema")});var ey=T((goe,Zb)=>{"use strict";var _m=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};Zb.exports=_m});var ny=T((yoe,sy)=>{"use strict";var ty=Ue(),dm=fr(),fm=dr().LMDB_ERRORS_ENUM,r1=ze(),ry=q(),Ooe=$(),s1=require("lmdb"),n1=ey(),i1=b(),{OVERFLOW_MARKER:Noe,MAX_SEARCH_KEY_LENGTH:boe}=r1,o1=i1.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function a1(e,t,r,s){if(dm.validateEnv(e),t===void 0)throw new Error(fm.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(fm.IDS_REQUIRED):new Error(fm.IDS_MUST_BE_ITERABLE);try{let n=ty.listDBIs(e);ty.initializeDBIs(e,t,n);let i=new n1,o,c=[],u=[];for(let f=0,E=r.length;f<E;f++)try{o=r[f];let h=e.dbis[t].get(o);if(!h||s&&h[o1]>s){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,s1.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<n.length;S++){let A=n[S];if(!h.hasOwnProperty(A)||A===t)continue;let I=e.dbis[A],N=h[A];if(N!=null)try{let Y=dm.getIndexedValues(N);if(Y)for(let Q=0,G=Y.length;Q<G;Q++)I.remove(Y[Q],o)}catch{ry.warn(`cannot delete from attribute: ${A}, ${N}:${o}`)}}});c.push(p),u.push(o),i.original_records.push(h)}catch(h){ry.warn(h),i.skipped.push(o)}let _=[],l=await Promise.all(c);for(let f=0,E=l.length;f<E;f++)l[f]===!0?i.deleted.push(u[f]):(i.skipped.push(u[f]),_.push(f));let d=0;for(let f=0;f<_.length;f++){let E=_[f];i.original_records.splice(E-d,1),d++}return i.txn_time=dm.getNextMonotonicTime(),i}catch(n){throw n}}a(a1,"deleteRecords");sy.exports={deleteRecords:a1}});var cc=T((woe,oy)=>{"use strict";var bo=$(),c1=ny(),u1=Ue(),{getSchemaPath:l1}=ve(),_1=oc(),d1=q();oy.exports=f1;async function f1(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(bo.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(bo.isEmptyOrZeroLength(e.hash_values)&&!bo.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][s];bo.isEmpty(u)||e.hash_values.push(u)}}if(bo.isEmptyOrZeroLength(e.hash_values))return iy([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(bo.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[s]:e.hash_values[c]}}let n=l1(e.schema,e.table),i=await u1.openEnvironment(n,e.table),o=await c1.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await _1(e,o)}catch(c){d1.error(`unable to write transaction due to ${c.message}`)}return iy(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(f1,"lmdbDeleteRecords");function iy(e,t,r){let s=e.length+t.length,n=s===1?"record":"records";return{message:`${e.length} of ${s} ${n} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(iy,"createDeleteResponse")});var hm=T((Doe,ay)=>{"use strict";var E1=b(),Loe=fr();function Em(e,t){let r=Object.create(null);if(t.length===1&&E1.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let s=0;s<t.length;s++){let n=t[s],i=e[n];r[n]=i===void 0?null:i}return r}a(Em,"parseRow");function h1(e,t,r,s){let n=Em(r,e);s.push(n)}a(h1,"searchAll");function m1(e,t,r,s){let n=Em(r,e);s[t]=n}a(m1,"searchAllToMap");function p1(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(p1,"iterateDBI");function bi(e,t,r,s,n){let i=Object.create(null);i[n]=e;let o;s===n?o=e:(o=t,s!==void 0&&(i[s]=o)),r[0].push(o),r[1].push(i)}a(bi,"pushResults");function S1(e,t,r,s,n,i){t.toString().endsWith(e)&&bi(t,r,s,n,i)}a(S1,"endsWith");function T1(e,t,r,s,n,i){t.toString().includes(e)&&bi(t,r,s,n,i)}a(T1,"contains");function R1(e,t,r,s,n,i){t>e&&bi(t,r,s,n,i)}a(R1,"greaterThanCompare");function g1(e,t,r,s,n,i){t>=e&&bi(t,r,s,n,i)}a(g1,"greaterThanEqualCompare");function A1(e,t,r,s,n,i){t<e&&bi(t,r,s,n,i)}a(A1,"lessThanCompare");function O1(e,t,r,s,n,i){t<=e&&bi(t,r,s,n,i)}a(O1,"lessThanEqualCompare");ay.exports={parseRow:Em,searchAll:h1,searchAllToMap:m1,iterateDBI:p1,endsWith:S1,contains:T1,greaterThanCompare:R1,greaterThanEqualCompare:g1,lessThanCompare:A1,lessThanEqualCompare:O1,pushResults:bi}});var yo=T((Boe,Ey)=>{"use strict";var Gn=Ue(),Moe=q(),Ar=fr(),n_=ze(),Je=dr().LMDB_ERRORS_ENUM,Poe=$(),N1=b(),i_=hm(),{parseRow:b1}=i_,voe=require("lmdb"),{OVERFLOW_MARKER:cy,MAX_SEARCH_KEY_LENGTH:y1}=n_;function uy(e,t,r,s=!1,n=void 0,i=void 0){return yi(e,t,r,(o,c)=>c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))}a(uy,"iterateFullIndex");function uc(e,t,r,s,n,i=!1,o=void 0,c=void 0,u=!1,_=!1){return yi(e,t,r,(l,d,f,E)=>{let I={transaction:l,start:i===!0?n:s,end:i===!0?s:n,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!u:!_,exclusiveStart:i===!0?_:u};return E===r?(I.values=!1,d.getRange(I).map(N=>({value:N}))):d.getRange(I)})}a(uc,"iterateRangeBetween");function yi(e,t,r,s){let n=e.database||e,i=Gn.openDBI(n,r);i[n_.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Gn.openDBI(n,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=s(o,i,n,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(yi,"setupTransaction");function ly(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(cy)){if(!n)if(r)n=Gn.openDBI(e,r);else{let u=Gn.listDBIs(e);for(let _=0,l=u.length;_<l&&(n=Gn.openDBI(e,u[_]),!n[n_.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(ly,"getOverflowCheck");function I1(e,t,r,s=!1,n=void 0,i=void 0){if(Ar.validateEnv(e),t===void 0)throw new Error(Je.HASH_ATTRIBUTE_REQUIRED);return yi(e,t,t,(o,c,u)=>(o_(r),r=lc(u,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(_=>b1(_.value,r))))}a(I1,"searchAll");function w1(e,t,r,s=!1,n=void 0,i=void 0){if(Ar.validateEnv(e),t===void 0)throw new Error(Je.HASH_ATTRIBUTE_REQUIRED);o_(r),r=lc(e.database||e,r);let o=new Map;for(let{key:c,value:u}of uy(e,t,t,s,n,i))o.set(c,i_.parseRow(u,r));return o}a(w1,"searchAllToMap");function C1(e,t,r=!1,s=void 0,n=void 0){if(Ar.validateEnv(e),t===void 0)throw new Error(Je.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=uy(e,void 0,t,r,s,n),c=o.transaction,u=ly(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(C1,"iterateDBI");function L1(e,t){if(Ar.validateEnv(e),t===void 0)throw new Error(Je.HASH_ATTRIBUTE_REQUIRED);return Gn.statDBI(e,t).entryCount}a(L1,"countAll");function D1(e,t,r,s,n=!1,i=void 0,o=void 0){return qn(e,r,s),yi(e,t,r,(c,u,_,l)=>(s=Ar.convertKeyValueToWrite(s),l===r?u.get(s,{transaction:c,lazy:!0})===void 0?[]:[{key:s,value:s}]:u.getValues(s,{transaction:c,reverse:n,limit:i,offset:o}).map(d=>({key:s,value:d}))))}a(D1,"equals");function U1(e,t,r){return qn(e,t,r),Gn.openDBI(e,t).getValuesCount(r)}a(U1,"count");function M1(e,t,r,s,n=!1,i=void 0,o=void 0){return qn(e,r,s),yi(e,null,r,(c,u)=>{s=Ar.convertKeyValueToWrite(s);let _=!0;typeof s=="number"&&(_=!1);let l;if(n===!0){let d;for(let f of u.getKeys({transaction:c,start:s}))if(!f.startsWith(s)){d=f;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),l=u.getRange({transaction:c,start:d,end:void 0,reverse:n,limit:i,offset:o}).map(f=>{let{key:E}=f;if(E!==d){if(E.toString().startsWith(s))return f;if(_===!0)return l.DONE}}),l.filter(f=>f)}else return l=u.getRange({transaction:c,start:s,reverse:n,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(s))return d;if(_===!0)return l.DONE}),_?l:l.filter(d=>d)})}a(M1,"startsWith");function P1(e,t,r,s,n=!1,i=void 0,o=void 0){return _y(e,t,r,s,n,i,o,!0)}a(P1,"endsWith");function _y(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return qn(e,r,s),yi(e,null,r,(u,_,l,d)=>{let f=ly(l,u,d,r);return o=Number.isInteger(o)?o:0,_.getKeys({transaction:u,end:n?!1:void 0,reverse:n}).flatMap(E=>{let h=E.toString();return h.endsWith(cy)?_.getValues(E,{transaction:u}).map(p=>{let S=f(E,p);if(c?S.endsWith(s):S.includes(s))return{key:S,value:p}}).filter(p=>p):(c?h.endsWith(s):h.includes(s))?_[n_.DBI_DEFINITION_NAME].is_hash_attribute?{key:E,value:E}:_.getValues(E,{transaction:u}).map(p=>({key:E,value:p})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(_y,"contains");function v1(e,t,r,s,n=!1,i=void 0,o=void 0){qn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),uc(e,t,r,s,u,n,i,o,!0,!1)}a(v1,"greaterThan");function B1(e,t,r,s,n=!1,i=void 0,o=void 0){qn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),uc(e,t,r,s,u,n,i,o,!1,!1)}a(B1,"greaterThanEqual");function H1(e,t,r,s,n=!1,i=void 0,o=void 0){qn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),uc(e,t,r,u,s,n,i,o,!1,!0)}a(H1,"lessThan");function F1(e,t,r,s,n=!1,i=void 0,o=void 0){qn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),uc(e,t,r,u,s,n,i,o,!1,!1)}a(F1,"lessThanEqual");function G1(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(Ar.validateEnv(e),r===void 0)throw new Error(Je.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(Je.START_VALUE_REQUIRED);if(n===void 0)throw new Error(Je.END_VALUE_REQUIRED);if(s=Ar.convertKeyValueToWrite(s),n=Ar.convertKeyValueToWrite(n),s>n)throw new Error(Je.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return uc(e,t,r,s,n,i,o,c)}a(G1,"between");function q1(e,t,r,s){Ar.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(Je.HASH_ATTRIBUTE_REQUIRED);if(o_(r),r=lc(n,r),s===void 0)throw new Error(Je.ID_REQUIRED);let o=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(o=i_.parseRow(c,r)),o}a(q1,"searchByHash");function x1(e,t,r){Ar.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(Je.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Je.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(x1,"checkHashExists");function k1(e,t,r,s,n=[]){return fy(e,t,r,s,n),dy(e,t,r,s,n).map(i=>i[1])}a(k1,"batchSearchByHash");function V1(e,t,r,s,n=[]){fy(e,t,r,s,n);let i=new Map;for(let[o,c]of dy(e,t,r,s,n))i.set(o,c);return i}a(V1,"batchSearchByHashToMap");function dy(e,t,r,s,n=[]){return yi(e,t,t,(i,o,c)=>{r=lc(c,r);let u=r.length<3;return s.map(_=>{let l=c.dbis[t].get(_,{transaction:i,lazy:u});if(l)return[_,i_.parseRow(l,r)];n.push(_)}).filter(_=>_)})}a(dy,"batchHashSearch");function fy(e,t,r,s,n){if(Ar.validateEnv(e),t===void 0)throw new Error(Je.HASH_ATTRIBUTE_REQUIRED);if(o_(r),s==null)throw new Error(Je.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(Je.IDS_MUST_BE_ITERABLE)}a(fy,"initializeBatchSearchByHash");function o_(e){if(!Array.isArray(e))throw e===void 0?new Error(Je.FETCH_ATTRIBUTES_REQUIRED):new Error(Je.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(o_,"validateFetchAttributes");function qn(e,t,r){if(Ar.validateEnv(e),t===void 0)throw new Error(Je.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Je.SEARCH_VALUE_REQUIRED);if(r?.length>y1)throw new Error(Je.SEARCH_VALUE_TOO_LARGE)}a(qn,"validateComparisonFunctions");function lc(e,t){return t.length===1&&N1.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Gn.listDBIs(e)),t}a(lc,"setGetWholeRowAttributes");Ey.exports={searchAll:I1,searchAllToMap:w1,count:U1,countAll:L1,equals:D1,startsWith:M1,endsWith:P1,contains:_y,searchByHash:q1,setGetWholeRowAttributes:lc,batchSearchByHash:k1,batchSearchByHashToMap:V1,checkHashExists:x1,iterateDBI:C1,greaterThan:v1,greaterThanEqual:B1,lessThan:H1,lessThanEqual:F1,between:G1}});var Io=T((Foe,Ty)=>{var hy=require("lodash"),my=xe(),Be=require("joi"),$1=$(),{hdb_schema_table:a_,checkValidTable:py,hdb_table:Sy,hdb_database:c_}=Ls(),{handleHDBError:Y1,hdb_errors:K1}=j(),{getDatabases:W1}=(fe(),Z(Ce)),{HTTP_STATUS_CODES:Q1}=K1,z1=Be.object({database:c_,schema:c_,table:Sy,search_attribute:a_,search_value:Be.any().required(),get_attributes:Be.array().min(1).items(a_).optional(),desc:Be.bool(),limit:Be.number().integer().min(1),offset:Be.number().integer().min(0)}),J1=Be.object({database:c_,schema:c_,table:Sy,operator:Be.string().valid("and","or").default("and").lowercase(),offset:Be.number().integer().min(0),limit:Be.number().integer().min(1),get_attributes:Be.array().min(1).items(a_).optional(),conditions:Be.array().min(1).items(Be.object({search_attribute:a_,search_type:Be.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").optional(),search_value:Be.when("search_type",{switch:[{is:"equals",then:Be.any()},{is:"between",then:Be.array().items(Be.alternatives([Be.string(),Be.number()])).length(2)}],otherwise:Be.alternatives(Be.string(),Be.number())}).required()})).required()});Ty.exports=function(e,t){let r=null;switch(t){case"value":r=my.validateBySchema(e,z1);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(py("database",e.schema)),i(py("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(o=>typeof o=="string"||typeof o=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(o=>typeof o=="string"||typeof o=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),n&&(r=new Error(n.trim()));break;case"conditions":r=my.validateBySchema(e,J1);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=$1.checkGlobalSchemaTable(e.schema,e.table);if(n)return Y1(new Error,n,Q1.NOT_FOUND);let o=W1()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];if(t==="value"&&c.push(e.search_attribute),t==="conditions")for(let _=0,l=e.conditions.length;_<l;_++){let d=e.conditions[_];c.push(d.search_attribute)}let u=hy.filter(c,_=>_!=="*"&&_.attribute!=="*"&&!hy.some(o,l=>l===_||l.attribute===_||l.attribute===_.attribute));if(u&&u.length>0){let _=u.join(", ");return _=_.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${_}'`)}}return r}});var mm=T((qoe,Ry)=>{"use strict";var X1=Ue(),j1=Io(),{getSchemaPath:Z1}=ve();Ry.exports=eK;function eK(e){let t=j1(e,"hashes");if(t)throw t;let r=Z1(e.schema,e.table);return X1.openEnvironment(r,e.table)}a(eK,"initialize")});var pm=T((koe,gy)=>{"use strict";var tK=yo(),rK=mm();gy.exports=sK;async function sK(e){let t=await rK(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return tK.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(sK,"lmdbGetDataByHash")});var wo=T(($oe,Ay)=>{"use strict";var Sm=class{static{a(this,"SearchByHashObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};Ay.exports=Sm});var Ny=T((Woe,Oy)=>{"use strict";var Koe=wo(),nK=yo(),iK=mm();Oy.exports=oK;async function oK(e){let t=await iK(e),r=global.hdb_schema[e.schema][e.table];return nK.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(oK,"lmdbSearchByHash")});var vs=T((zoe,by)=>{"use strict";var Tm=class{static{a(this,"SearchObject")}constructor(t,r,s,n,i,o,c,u=!1,_=void 0,l=void 0){this.schema=t,this.table=r,this.search_attribute=s,this.search_value=n,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=u,this.limit=_,this.offset=l}};by.exports=Tm});var u_=T((Xoe,Dy)=>{"use strict";var Ft=yo(),aK=Ue(),cK=$(),oe=ze(),Ii=b(),uK=Ei(),yy=dr().LMDB_ERRORS_ENUM,{getSchemaPath:lK}=ve(),on=Ii.SEARCH_WILDCARDS;async function _K(e,t,r){let s;e.schema===Ii.SYSTEM_SCHEMA_NAME?s=uK[e.table]:s=global.hdb_schema[e.schema][e.table];let n=Ly(e,s.hash_attribute,r,t);return wy(e,n,s.hash_attribute,r)}a(_K,"prepSearch");async function wy(e,t,r,s){let n=lK(e.schema,e.table),i=await aK.openEnvironment(n,e.table),o=Cy(i,e,t,r),c=o.transaction||i;if([oe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,oe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,oe.SEARCH_TYPES.SEARCH_ALL,oe.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(dK(e,r)===!1){let l=e.search_attribute;if(l===r)return s?Iy(o,()=>!0):o.map(f=>({[r]:f.key}));let d=a(f=>({[r]:f.value,[l]:f.key}),"toObject");return s?Iy(o,d):o.map(d)}let _=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return s===!0?Ft.batchSearchByHashToMap(c,r,e.get_attributes,_):Ft.batchSearchByHash(c,r,e.get_attributes,_)}a(wy,"executeSearch");function Cy(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:o,limit:c,offset:u}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,u=Number.isInteger(u)?u:void 0,r){case oe.SEARCH_TYPES.EQUALS:n=Ft.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.CONTAINS:n=Ft.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.ENDS_WITH:case oe.SEARCH_TYPES._ENDS_WITH:n=Ft.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.STARTS_WITH:case oe.SEARCH_TYPES._STARTS_WITH:n=Ft.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Ft.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case oe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Ft.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case oe.SEARCH_TYPES.SEARCH_ALL:return Ft.searchAll(e,s,t.get_attributes,o,c,u);case oe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Ft.searchAllToMap(e,s,t.get_attributes,o,c,u);case oe.SEARCH_TYPES.BETWEEN:n=Ft.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case oe.SEARCH_TYPES.GREATER_THAN:case oe.SEARCH_TYPES._GREATER_THAN:n=Ft.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.GREATER_THAN_EQUAL:case oe.SEARCH_TYPES._GREATER_THAN_EQUAL:n=Ft.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.LESS_THAN:case oe.SEARCH_TYPES._LESS_THAN:n=Ft.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.LESS_THAN_EQUAL:case oe.SEARCH_TYPES._LESS_THAN_EQUAL:n=Ft.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return n}a(Cy,"searchByType");function Iy(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(Iy,"createMapFromIterable");function dK(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.search_attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let s=!1;for(let n=0;n<e.get_attributes.length;n++)if(r.indexOf(e.get_attributes[n])<0){s=!0;break}return s}a(dK,"checkToFetchMore");function Ly(e,t,r,s){if(cK.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),o=n.charAt(n.length-1),c=!1;if(e.search_attribute===t&&(c=!0),on.indexOf(n)>-1)return r===!0?oe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:oe.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(on[0])<0&&n.indexOf(on[1])<0)return c===!0?r===!0?oe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:oe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:oe.SEARCH_TYPES.EQUALS;if(on.indexOf(i)>=0&&on.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),oe.SEARCH_TYPES.CONTAINS;if(on.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),oe.SEARCH_TYPES.ENDS_WITH;if(on.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),oe.SEARCH_TYPES.STARTS_WITH;if(n.includes(on[0])||n.includes(on[1]))return oe.SEARCH_TYPES.EQUALS;throw new Error(yy.UNKNOWN_SEARCH_TYPE)}else switch(s){case Ii.VALUE_SEARCH_COMPARATORS.BETWEEN:return oe.SEARCH_TYPES.BETWEEN;case Ii.VALUE_SEARCH_COMPARATORS.GREATER:return oe.SEARCH_TYPES.GREATER_THAN;case Ii.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return oe.SEARCH_TYPES.GREATER_THAN_EQUAL;case Ii.VALUE_SEARCH_COMPARATORS.LESS:return oe.SEARCH_TYPES.LESS_THAN;case Ii.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return oe.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(yy.UNKNOWN_SEARCH_TYPE)}}a(Ly,"createSearchTypeFromSearchObject");Dy.exports={executeSearch:wy,createSearchTypeFromSearchObject:Ly,prepSearch:_K,searchByType:Cy}});var My=T((eae,Uy)=>{"use strict";var Zoe=vs(),fK=Io(),EK=$(),hK=b(),mK=u_();Uy.exports=pK;function pK(e,t){if(!EK.isEmpty(t)&&hK.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=fK(e,"value");if(s)throw s;let n=!0;return mK.prepSearch(e,t,n)}a(pK,"lmdbGetDataByValue")});var _c=T((sae,Py)=>{"use strict";var rae=vs(),SK=Io(),TK=$(),RK=b(),gK=u_();Py.exports=AK;async function AK(e,t){if(!TK.isEmpty(t)&&RK.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=SK(e,"value");if(s)throw s;return gK.prepSearch(e,t,!1)}a(AK,"lmdbSearchByValue")});var By=T((oae,vy)=>{"use strict";var iae=ze(),Rm=class{static{a(this,"SearchByConditionsObject")}constructor(t,r,s,n,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=o,this.conditions=n,this.operator=c}},gm=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},Am=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};vy.exports={SearchByConditionsObject:Rm,SearchCondition:gm,SortAttribute:Am}});var xy=T((lae,qy)=>{"use strict";var cae=By().SearchByConditionsObject,OK=vs(),NK=Io(),Om=yo(),l_=ze(),{Resource:uae}=(is(),Z(OE)),Gy=u_(),bK=hm(),yK=require("lodash"),{getSchemaPath:IK}=ve(),Hy=Ue(),{handleHDBError:wK,hdb_errors:CK}=j(),{HTTP_STATUS_CODES:LK}=CK,DK=1e8;qy.exports=UK;async function UK(e){let t=NK(e,"conditions");if(t)throw wK(t,t.message,LK.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=IK(e.schema,e.table),s=await Hy.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)Hy.openDBI(s,_.search_attribute);let i=yK.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let l=_.search_type;l===l_.SEARCH_TYPES.EQUALS?_.estimated_count=Om.count(s,_.search_attribute,_.search_value):l===l_.SEARCH_TYPES.CONTAINS||l===l_.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=DK}return _.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await Fy(o,e,i[0],n.hash_attribute),u;if(!e.operator||e.operator.toLowerCase()==="and"){let _=s.dbis[n.hash_attribute],l=i.slice(1).map(Gy.filterByType),d=l.length,f=Om.setGetWholeRowAttributes(s,e.get_attributes);u=c.map(E=>_.get(E,{transaction:o,lazy:!0})),d>0&&(u=u.filter(E=>{for(let h=0;h<d;h++)if(!l[h](E))return!1;return!0})),(e.offset||e.limit!==void 0)&&(u=u.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),u=u.map(E=>bK.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await Fy(o,e,f,n.hash_attribute);c=c.concat(E)}let _=new Set,l=e.offset||0;c=c.filter(d=>_.has(d)?!1:(_.add(d),!0)).slice(l,e.limit&&e.limit+l),u=Om.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(UK,"lmdbSearchByConditions");async function Fy(e,t,r,s){let n=new OK(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===l_.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,Gy.searchByType(e,n,i,s).map(o=>o.value)}a(Fy,"executeConditionSearch")});var dc=T((dae,ky)=>{"use strict";var MK=b().OPERATIONS_ENUM,Nm=class{static{a(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=MK.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};ky.exports=Nm});var bm=T((Eae,Jy)=>{"use strict";var Ky=vs(),Wy=dc(),Qy=_c(),zy=cc(),zt=b(),Vy=$(),$y=Ue(),{getTransactionAuditStorePath:PK,getSchemaPath:vK}=ve(),Yy=q();Jy.exports=BK;async function BK(e){try{if(Vy.isEmpty(global.hdb_schema[e.schema])||Vy.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await HK(e),await FK(e);let t=vK(e.schema,e.table);try{await $y.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")Yy.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=PK(e.schema,e.table);await $y.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")Yy.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(BK,"lmdbDropTable");async function HK(e){let t=new Ky(zt.SYSTEM_SCHEMA_NAME,zt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await Qy(t)),s=[];for(let i=0;i<r.length;i++){let o=r[i];s.push(o.id)}if(s.length===0)return;let n=new Wy(zt.SYSTEM_SCHEMA_NAME,zt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await zy(n)}a(HK,"deleteAttributesFromSystem");async function FK(e){let t=new Ky(zt.SYSTEM_SCHEMA_NAME,zt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await Qy(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let o=r[i];o.name===e.table&&o.schema===e.schema&&(s=o)}if(!s)throw new Error(`${e.schema}.${e.table} was not found`);let n=new Wy(zt.SYSTEM_SCHEMA_NAME,zt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await zy(n)}catch(i){throw i}}a(FK,"dropTableFromSystem")});var jy=T((mae,Xy)=>{"use strict";var GK=require("fs-extra"),qK=vs(),xK=wo(),kK=dc(),VK=bm(),$K=cc(),YK=pm(),KK=_c(),an=b(),{getSchemaPath:WK}=ve(),{handleHDBError:QK,hdb_errors:zK}=j(),{HDB_ERROR_MSGS:JK,HTTP_STATUS_CODES:XK}=zK;Xy.exports=jK;async function jK(e){let t;try{t=await ZK(e.schema);let r=new qK(an.SYSTEM_SCHEMA_NAME,an.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,an.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[an.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await KK(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await VK(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new kK(an.SYSTEM_SCHEMA_NAME,an.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await $K(n);let i=WK(t);await GK.remove(i)}catch(r){throw r}}a(jK,"lmdbDropSchema");async function ZK(e){let t=new xK(an.SYSTEM_SCHEMA_NAME,an.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[an.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await YK(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw QK(new Error,JK.SCHEMA_NOT_FOUND(e),XK.NOT_FOUND,void 0,void 0,!0);return s}a(ZK,"validateDropSchema")});var Im=T((Sae,Zy)=>{"use strict";var ym=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};Zy.exports=ym});var tI=T((gae,eI)=>{"use strict";var eW=require("fs-extra"),__=Ue(),{getTransactionAuditStorePath:tW}=ve(),wm=ze(),Rae=Im();eI.exports=rW;async function rW(e){let t;try{let r=tW(e.schema,e.table);await eW.mkdirp(r),t=await __.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{__.createDBI(t,wm.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),__.createDBI(t,wm.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),__.createDBI(t,wm.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME,!0,!1)}catch(r){throw r.message=`unable to create dbi for ${e.schema}.${e.table} due to: ${r.message}`,r}return t}a(rW,"createTransactionsAuditEnvironment")});var iI=T((Oae,nI)=>{"use strict";var Cm=b(),rI=Ue(),sW=fo(),{getSystemSchemaPath:nW,getSchemaPath:iW}=ve(),oW=Ei(),aW=Ul(),Lm=Dl(),cW=q(),uW=tI(),Um=oW.hdb_table,sI=[];for(let e=0;e<Um.attributes.length;e++)sI.push(Um.attributes[e].attribute);nI.exports=lW;async function lW(e,t){let r=iW(t.schema,t.table),s=new Lm(t.schema,t.table,Cm.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new Lm(t.schema,t.table,Cm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Lm(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await rI.createEnvironment(r,t.table),e!==void 0){let o=await rI.openEnvironment(nW(),Cm.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await sW.insertRecords(o,Um.hash_attribute,sI,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await Dm(s),await Dm(n),await Dm(i)}await uW(t)}catch(o){throw o}}a(lW,"lmdbCreateTable");async function Dm(e){try{await aW(e)}catch(t){cW.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Dm,"createAttribute")});var aI=T((bae,oI)=>{"use strict";var _W=Qa(),dW=Za(),fW=r_(),fc=b(),EW=fo().updateRecords,hW=Ue(),{getSchemaPath:mW}=ve(),pW=oc(),SW=q();oI.exports=TW;async function TW(e){try{let{schema_table:t,attributes:r}=_W(e);dW(e,r,t.hash_attribute),e.schema!==fc.SYSTEM_SCHEMA_NAME&&(r.includes(fc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(fc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(fc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(fc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await fW(e.hdb_auth_header,t,r),n=mW(e.schema,e.table),i=await hW.openEnvironment(n,e.table),o=await EW(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await pW(e,o)}catch(c){SW.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(TW,"lmdbUpdateRecords")});var uI=T((Iae,cI)=>{"use strict";var RW=b().OPERATIONS_ENUM,Mm=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=RW.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};cI.exports=Mm});var _I=T((Lae,lI)=>{"use strict";var Cae=uI(),gW=Qa(),AW=Za(),OW=r_(),Ec=b(),NW=fo().upsertRecords,bW=Ue(),{getSchemaPath:yW}=ve(),IW=oc(),wW=q(),{handleHDBError:CW,hdb_errors:LW}=j();lI.exports=DW;async function DW(e){let t;try{t=gW(e)}catch(u){throw CW(u,u.message,LW.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;AW(e,s,r.hash_attribute),e.schema!==Ec.SYSTEM_SCHEMA_NAME&&(s.includes(Ec.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Ec.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Ec.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Ec.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await OW(e.hdb_auth_header,r,s),i=yW(e.schema,e.table),o=await bW.openEnvironment(i,e.table),c=await NW(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await IW(e,c)}catch(u){wW.error(`unable to write transaction due to ${u.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:n,txn_time:c.txn_time}}a(DW,"lmdbUpsertRecords")});var fI=T((Uae,dI)=>{"use strict";var Pm=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};dI.exports=Pm});var hI=T((Pae,EI)=>{"use strict";var vm=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};EI.exports=vm});var SI=T((Hae,pI)=>{"use strict";var Bm=Ue(),{getTransactionAuditStorePath:UW}=ve(),Bae=fI(),hc=ze(),MW=$(),mI=hI(),PW=require("util").promisify,vW=PW(setTimeout),BW=1e4,HW=100;pI.exports=FW;async function FW(e){let t=UW(e.schema,e.table),r=await Bm.openEnvironment(t,e.table,!0),s=Bm.listDBIs(r);Bm.initializeDBIs(r,hc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new mI;do n=await GW(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=n.start_timestamp),n.end_timestamp!==void 0&&(i.end_timestamp=n.end_timestamp),i.transactions_deleted+=n.transactions_deleted,await vW(HW);while(n.transactions_deleted>0);return i}a(FW,"deleteAuditLogsBefore");async function GW(e,t){let r=new mI;try{let s=e.dbis[hc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:o}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let c=o[hc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];MW.isEmpty(c)||(n=e.dbis[hc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)n=e.dbis[hc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>BW)break}return await n,r}catch(s){throw s}}a(GW,"deleteTransactions")});var RI=T((Gae,TI)=>{"use strict";var Hm=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};TI.exports=Hm});var AI=T((kae,gI)=>{"use strict";var qW=vs(),xW=dc(),xae=RI(),Bs=b(),kW=$(),Fm=Ue(),VW=Ei(),$W=_c(),YW=cc(),{getSchemaPath:KW}=ve();gI.exports=WW;async function WW(e,t=!0){let r;e.schema===Bs.SYSTEM_SCHEMA_NAME?r=VW[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await zW(e),n=KW(e.schema,e.table),i=await Fm.openEnvironment(n,e.table);return t===!0&&await QW(e,i,r.hash_attribute),Fm.dropDBI(i,e.attribute),s}a(WW,"lmdbDropAttribute");async function QW(e,t,r){let s=Fm.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:c,version:u}of s.getRange({start:!1,versions:!0})){let _={};for(let l in c)l!==i&&(_[l]=c[l]);n=t.dbis[r].put(o,_,u)}await n}a(QW,"removeAttributeFromAllObjects");async function zW(e){let t=new qW(Bs.SYSTEM_SCHEMA_NAME,Bs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await $W(t)).filter(o=>o[Bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(kW.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[Bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new xW(Bs.SYSTEM_SCHEMA_NAME,Bs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return YW(i)}a(zW,"dropAttributeFromSystem")});var wI=T((Yae,II)=>{"use strict";var Gm=Ue(),Co=ze(),$ae=fr(),qm=b(),OI=$(),{getTransactionAuditStorePath:JW}=ve(),XW=yo(),d_=Oo(),jW=q();II.exports=ZW;async function ZW(e){let t=JW(e.schema,e.table),r=await Gm.openEnvironment(t,e.table,!0),s=Gm.listDBIs(r);Gm.initializeDBIs(r,Co.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case qm.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return NI(r,e.search_values);case qm.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,tQ(r,e.search_values,n);case qm.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return eQ(r,e.search_values);default:return NI(r)}}a(ZW,"readAuditLog");function NI(e,t=[0,Date.now()]){OI.isEmpty(t[0])&&(t[0]=0),OI.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Co.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let n of r.getKeys({start:t[1]}))if(n!==t[1]){s=n;break}return r.getRange({start:t[0],end:s}).map(({value:n})=>Object.assign(new d_,n))}a(NI,"searchTransactionsByTimestamp");function eQ(e,t=[]){let r=new Map;for(let s=0;s<t.length;s++){let n=t[s],i=[];for(let o of e.dbis[Co.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,yI(e,i))}return Object.fromEntries(r)}a(eQ,"searchTransactionsByUsername");function tQ(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let _=t[c],l=XW.equals(e,Co.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Co.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,_);for(let{value:d}of l){let f=Number(d);s.has(f)?s.get(f).push(_.toString()):s.set(f,[_.toString()])}}let n=Array.from(s.keys()),i=yI(e,n),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],_=u.timestamp,l=s.get(_);bI(u,"records",r,l,o),bI(u,"original_records",r,l,o)}return Object.fromEntries(o)}a(tQ,"searchTransactionsByHashValues");function bI(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],u=c[r].toString();if(s.indexOf(u)>=0)if(n.has(u)){let _=n.get(u),l=_[_.length-1];if(l.timestamp===i)l[t]=[c];else{let d=new d_(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new d_(e.operation,e.user_name,i,void 0);_[t]=[c],n.set(u,[_])}}}a(bI,"loopRecords");function yI(e,t){let r=[];try{let s=e.dbis[Co.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let n=0;n<t.length;n++)try{let i=s.get(t[n]);if(i){let o=Object.assign(new d_,i);r.push(o)}}catch(i){jW.warn(i)}return r}catch(s){throw s}}a(yI,"batchSearchTransactions")});var LI=T((zae,CI)=>{"use strict";var{getSchemaPath:Wae}=ve(),Qae=Ue(),{database:rQ}=(fe(),Z(Ce));CI.exports={writeTransaction:sQ};async function sQ(e,t,r){return rQ({database:e,table:t}).transaction(r)}a(sQ,"writeTransaction")});var PI=T((Xae,MI)=>{"use strict";var{getSchemaPath:DI}=ve(),UI=Ue();MI.exports={flush:nQ,resetReadTxn:iQ};async function nQ(e,t){return(await UI.openEnvironment(DI(e,t),t.toString())).flushed}a(nQ,"flush");async function iQ(e,t){try{(await UI.openEnvironment(DI(e,t),t.toString())).resetReadTxn()}catch{}}a(iQ,"resetReadTxn")});var FI=T((Zae,HI)=>{"use strict";var{Readable:oQ}=require("stream"),{getDatabases:aQ}=(fe(),Z(Ce)),{readSync:cQ,openSync:uQ,createReadStream:vI}=require("fs"),{open:lQ}=require("lmdb"),BI=gl(),_Q=Ol(),{AUDIT_STORE_OPTIONS:dQ}=(co(),Z(rO)),{INTERNAL_DBIS_NAME:fQ,AUDIT_STORE_NAME:EQ}=ze();HI.exports=mQ;var xm=32768,hQ=100;async function mQ(e){let t=e.database||e.schema||"data",r=aQ()[t],s=new Date().toISOString(),n=e.tables||e.table&&[e.table];if(n){let _=r[n[0]];if(!_)throw new Error(`Can not find table ${n[0]}`);let l=_.dbisDB,d=lQ({noSync:!0,maxDbs:_Q.MAX_DBS}),f,E=d.openDB(fQ,new BI(!1)),h=l.useReadTransaction(),p=0,S=a(async function(I,N){N.encoding="binary",N.encoder=void 0;let Y=d.openDB(I,N),Q=l.openDB(I,N);for(let{key:G,version:w,value:K}of Q.getRange({transaction:h,versions:Q.useVersions}))f=Y.put(G,K,w),p++%hQ===0&&(await new Promise(B=>setTimeout(B,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:I,value:N}of l.getRange({transaction:h,start:!1}))if(n.some(Y=>I.startsWith?.(Y+"/"))){E.put(I,N);let[,Y]=I.split("/"),Q=!Y,G=new BI(!Q,Q);await S(I,G)}e.include_audit&&await S(EQ,Object.assign({},dQ)),await f;let A=vI(d.path);return A.headers=u(),A.on("close",()=>{h.done(),d.close()}),A}let o=r[Object.keys(r)[0]].primaryStore,c=uQ(o.path);return o.transaction(()=>{let _=Buffer.alloc(xm);cQ(c,_,0,xm),o.resetReadTxn();let l=o.useReadTransaction();l.renew();let d=vI(null,{fd:c,start:xm}),f=new oQ.from(async function*(){yield _;for await(let E of d)l.openTimer&&(l.openTimer=0),yield E;l.done()}());return f.headers=u(),f});function u(){let _=new Map;return _.set("content-type","application/octet-stream"),_.set("content-disposition",`attachment; filename="${t}"`),_.set("date",s),_}}a(mQ,"getBackup")});var xI=T((tce,qI)=>{"use strict";var pQ=q(),{handleHDBError:SQ}=j(),TQ=kA(),RQ=Ul(),gQ=lm(),AQ=jb(),OQ=cc(),NQ=pm(),bQ=Ny(),yQ=My(),IQ=_c(),wQ=xy(),CQ=jy(),LQ=iI(),DQ=aI(),UQ=_I(),MQ=SI(),PQ=bm(),vQ=AI(),BQ=wI(),HQ=LI(),GI=PI(),FQ=FI(),km=class extends TQ{static{a(this,"LMDBBridge")}async searchByConditions(t){return wQ(t)}async getDataByHash(t){return await NQ(t)}async searchByHash(t){return await bQ(t)}async getDataByValue(t,r){return await yQ(t,r)}async searchByValue(t){return await IQ(t)}async createSchema(t){return await AQ(t)}async dropSchema(t){return await CQ(t)}async createTable(t,r){return await LQ(t,r)}async dropTable(t){return await PQ(t)}async createAttribute(t){return await RQ(t)}async createRecords(t){return await gQ(t)}async updateRecords(t){return await DQ(t)}async upsertRecords(t){try{return await UQ(t)}catch(r){throw SQ(r,null,null,pQ.ERR,r)}}async deleteRecords(t){return await OQ(t)}async dropAttribute(t){return await vQ(t)}async deleteAuditLogsBefore(t){return await MQ(t)}async readAuditLog(t){return await BQ(t)}writeTransaction(t,r,s){return HQ.writeTransaction(t,r,s)}flush(t,r){return GI.flush(t,r)}resetReadTxn(t,r){return GI.resetReadTxn(t,r)}getBackup(t){return FQ(t)}};qI.exports=km});var JI={};Qe(JI,{ResourceBridge:()=>Ym});function Km({get_attributes:e},t){if(e){if(e[0]==="*"){if(t.schemaDefined)return;e=t.attributes.map(r=>r.name)}return e.forceNulls=!0,e}}function VI(e,t){let r=Hs(e),s=Km(e,r);if(!r)throw new Es.ClientError(`Table ${e.table} not found`);let n;s&&r.attributes.length-s.length>2&&s.length<5&&(n=!0);let i={user:e.hdb_user},o;Ge(i,()=>new Promise(_=>o=_));let c=e.ids||e.hash_values,u=0;return{[Symbol.asyncIterator](){return{async next(){if(u<c.length){let _=c[u++],l=await r.get({id:_,lazy:n,select:s},i);return l=l&&il(l),t?{value:{key:_,value:l}}:{value:l}}else return o(),{done:!0}},return(_){return o(),{value:_,done:!0}},throw(_){return o(),{done:!0}}}}}}function Hs(e){let t=e.database||e.schema||qQ,r=hs()[t];if(!r)throw(0,Es.handleHDBError)(new Error,GQ.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function $I(e,t,r){let s=e.length+t.length,n=s===1?"record":"records";return{message:`${e.length} of ${s} ${n} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}async function*YI(e,t,r){let s;for await(let n of e.getHistory(t,r)){let i=n.type;i==="put"&&(i="upsert");let{id:o,version:c,value:u}=n;s?.timestamp===c?(s.hash_values.push(o),s.records.push(u)):(s&&(yield s),s={operation:i,user_name:n.user,timestamp:c,hash_values:[o],records:[u]})}s&&(yield s)}var KI,f_,Es,WI,QI,ms,Vm,$m,zI,GQ,qQ,xQ,kQ,kI,Ym,XI=Te(()=>{"use strict";KI=D(xI()),f_=D(Io()),Es=D(j());fe();WI=D(Qa()),QI=D(Za()),ms=D(b()),Vm=D(nn()),$m=D(ds()),zI=D($());_i();ol();({HDB_ERROR_MSGS:GQ}=Es.hdb_errors),qQ="data",xQ=1e4,kQ=10,Ym=class extends KI.default{static{a(this,"ResourceBridge")}constructor(t){super(t),kI=this}async searchByConditions(t){let r=(0,f_.default)(t,"conditions");if(r)throw(0,Es.handleHDBError)(r,r.message,400,void 0,void 0,!0);let s=Hs(t);if(!s)throw new Es.ClientError(`Table ${t.table} not found`);let n=t.conditions.map(i=>({attribute:i.search_attribute,comparator:i.search_type,value:i.search_value}));return s.search({conditions:n,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:Km(t,s),allowFullScan:!0})}async createTable(t,r){let s=r.attributes,n=!!s,i=r.primary_key||r.hash_attribute;if(s)for(let o of s)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new Es.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");s=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}et({database:r.schema,table:r.table,attributes:s,schemaDefined:n,expiration:r.expiration})}async createAttribute(t){return await Hs(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Hs(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let s=t.attribute,n,i=a((o,c,u)=>(c=Object.assign({},c),delete c[s],r.primaryStore.ifVersion(o,u,()=>r.primaryStore.put(o,c,u)).then(_=>{if(!_){let{value:l,version:d}=r.primaryStore.getEntry(o);return i(o,l,d)}})),"deleteRecord");for(let{key:o,value:c,version:u}of r.primaryStore.getRange({start:!0,versions:!0}))n=i(o,c,u),await new Promise(_=>setImmediate(_));await n}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){Hs(t).dropTable()}createSchema(t){return mc({database:t.schema,table:null}),Vm.signalSchemaChange(new $m.SchemaEventMsg(process.pid,ms.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await Wm(t.schema),Vm.signalSchemaChange(new $m.SchemaEventMsg(process.pid,ms.OPERATIONS_ENUM.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,kI.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:s}=(0,WI.default)(t);(0,QI.default)(t,s,r.primaryKey);let n,i=hs()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return Ge(o,async c=>{if(!i.schemaDefined){n=[];for(let l of s)i.attributes.find(f=>f.name==l)||n.push(l);n.length>0&&await i.addAttributes(n.map(l=>({name:l,indexed:!0})))}let u=[],_=[];for(let l of t.records){let d=await i.get(l[i.primaryKey],o);if(t.requires_existing&&!d||t.requires_no_existing&&d){_.push(l[i.primaryKey]);continue}d&&(d=il(d));for(let f in l)if(Object.prototype.hasOwnProperty.call(l,f)){let E=l[f];if(typeof E=="function")try{let h=E([[d]]);Array.isArray(h)&&(E=h[0].func_val,l[f]=E)}catch(h){throw h.message+="Trying to set key "+f+" on object"+JSON.stringify(l),h}}if(d)for(let f in d)Object.prototype.hasOwnProperty.call(l,f)||(l[f]=d[f]);await i.put(l,o),u.push(l[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:u,new_attributes:n,skipped_hashes:_}})}async deleteRecords(t){let r=hs()[t.schema][t.table],s={user:t.hdb_user};return Ge(s,async n=>{let i=t.hash_values||t.records.map(u=>u[r.primaryKey]),o=[],c=[];for(let u of i)await r.delete(u,s)?o.push(u):c.push(u);return $I(o,c,n.timestamp)})}async deleteRecordsBefore(t){let r=hs()[t.schema][t.table];if(!r.createdTimeProperty)throw new Es.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let s=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:ms.VALUE_SEARCH_COMPARATORS.LESS}]}),n=!1,i=[],o=[],c=0,u=[],_=a(async()=>{let l=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:u});i.push(...l.deleted_hashes),o.push(...l.skipped_hashes),await(0,zI.async_set_timeout)(kQ),u=[],n=!0},"chunkDelete");for await(let l of s)u.push(l[r.primaryKey]),c++,c%xQ===0&&await _();return u.length>0&&await _(),n?$I(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){let r=(0,f_.default)(t,"hashes");if(r)throw r;return VI(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:s,value:n}of VI(t,!0))r.set(s,n);return r}searchByValue(t,r){if(r&&ms.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);let s=(0,f_.default)(t,"value");if(s)throw s;let n=Hs(t);if(!n)throw new Es.ClientError(`Table ${t.table} not found`);let i=t.search_value;i.includes?.("*")&&(i.startsWith("*")?i.endsWith("*")?i!=="*"&&(r="contains",i=i.slice(1,-1)):(r="ends_with",i=i.slice(1)):i.endsWith("*")&&(r="starts_with",i=i.slice(0,-1))),r===ms.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return n.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:Km(t,n)})}async getDataByValue(t,r){let s=new Map,n=Hs(t);t.get_attributes&&!t.get_attributes.includes(n.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(n.primaryKey);for await(let i of this.searchByValue(t,r))s.set(i[n.primaryKey],i);return s}resetReadTxn(t,r){Hs({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Hs(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=Hs(t),s={};switch(t.search_type){case ms.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)s[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.type;return c==="put"&&(c="upsert"),{operation:c,timestamp:o.version,user_name:o.user,hash_values:[i],records:[o.value]}});return s;case ms.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let n=t.search_values;for await(let i of YI(r))n.includes(i.user_name)&&(s[i.user_name]||(s[i.user_name]=[])).push(i);return s;default:return YI(r,t.search_values?.[0],t.search_values?.[1])}}};a(Km,"getSelect");a(VI,"getRecords");a(Hs,"getTable");a($I,"createDeleteResponse");a(YI,"groupRecordsInHistory")});var us=T((ace,jI)=>{"use strict";var{ResourceBridge:VQ}=(XI(),Z(JI)),$Q=X();$Q.initSync();var E_;function YQ(){return E_||(E_=new VQ,E_)}a(YQ,"getBridge");jI.exports=YQ()});var rw=T((uce,tw)=>{"use strict";var ZI=require("lodash"),pc=require("mathjs"),KQ=require("jsonata"),ew=$();tw.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?ZI.uniqWith(e,ZI.isEqual):e,searchJSON:WQ,mad:Sc.bind(null,pc.mad),mean:Sc.bind(null,pc.mean),mode:Sc.bind(null,pc.mode),prod:Sc.bind(null,pc.prod),median:Sc.bind(null,pc.median)};function Sc(e,t,r,s){return s===1?t==null?[]:[t]:s===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(Sc,"aggregateFunction");function WQ(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(ew.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),ew.isEmpty(this.__ala__.res[r])){let s=KQ(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(WQ,"searchJSON")});var nw=T((_ce,sw)=>{"use strict";var rt=require("moment"),Qm="YYYY-MM-DDTHH:mm:ss.SSSZZ";rt.suppressDeprecationWarnings=!0;sw.exports={current_date:()=>rt().utc().format("YYYY-MM-DD"),current_time:()=>rt().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return rt(e).utc().format("YYYY");case"month":return rt(e).utc().format("MM");case"day":return rt(e).utc().format("DD");case"hour":return rt(e).utc().format("HH");case"minute":return rt(e).utc().format("mm");case"second":return rt(e).utc().format("ss");case"millisecond":return rt(e).utc().format("SSS");default:break}},date:e=>rt(e).utc().format(Qm),date_format:(e,t)=>rt(e).utc().format(t),date_add:(e,t,r)=>rt(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>rt(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=rt(e).utc(),n=rt(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>rt().utc().valueOf(),get_server_time:()=>rt().format(Qm),offset_utc:(e,t)=>rt(e).utc().utcOffset(t).format(Qm)}});var cw=T((dce,aw)=>{"use strict";var QQ=require("@turf/area"),zQ=require("@turf/length"),JQ=require("@turf/circle"),XQ=require("@turf/difference"),jQ=require("@turf/distance"),ZQ=require("@turf/boolean-contains"),ez=require("@turf/boolean-equal"),tz=require("@turf/boolean-disjoint"),rz=require("@turf/helpers"),iw=b(),ue=$(),cn=q();aw.exports={geoArea:sz,geoLength:nz,geoCircle:iz,geoDifference:oz,geoDistance:ow,geoNear:az,geoContains:cz,geoEqual:uz,geoCrosses:lz,geoConvert:_z};function sz(e){if(ue.isEmpty(e))return NaN;typeof e=="string"&&(e=ue.autoCastJSON(e));try{return QQ.default(e)}catch(t){return cn.trace(t,e),NaN}}a(sz,"geoArea");function nz(e,t){if(ue.isEmpty(e))return NaN;typeof e=="string"&&(e=ue.autoCastJSON(e));try{return zQ.default(e,{units:t||"kilometers"})}catch(r){return cn.trace(r,e),NaN}}a(nz,"geoLength");function iz(e,t,r){if(ue.isEmpty(e))return NaN;if(ue.isEmpty(t))return NaN;typeof e=="string"&&(e=ue.autoCastJSON(e));try{return JQ.default(e,t,{units:r||"kilometers"})}catch(s){return cn.trace(s,e,t),NaN}}a(iz,"geoCircle");function oz(e,t){if(ue.isEmpty(e))return NaN;if(ue.isEmpty(t))return NaN;typeof e=="string"&&(e=ue.autoCastJSON(e)),typeof t=="string"&&(t=ue.autoCastJSON(t));try{return XQ(e,t)}catch(r){return cn.trace(r,e,t),NaN}}a(oz,"geoDifference");function ow(e,t,r){if(ue.isEmpty(e))return NaN;if(ue.isEmpty(t))return NaN;typeof e=="string"&&(e=ue.autoCastJSON(e)),typeof t=="string"&&(t=ue.autoCastJSON(t));try{return jQ.default(e,t,{units:r||"kilometers"})}catch(s){return cn.trace(s,e,t),NaN}}a(ow,"geoDistance");function az(e,t,r,s){if(ue.isEmpty(e)||ue.isEmpty(t))return!1;if(ue.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=ue.autoCastJSON(e)),typeof t=="string"&&(t=ue.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return ow(e,t,s)<=r}catch(n){return cn.trace(n,e,t),!1}}a(az,"geoNear");function cz(e,t){if(ue.isEmpty(e)||ue.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=ue.autoCastJSON(e)),typeof t=="string"&&(t=ue.autoCastJSON(t));try{return ZQ.default(e,t)}catch(r){return cn.trace(r,e,t),!1}}a(cz,"geoContains");function uz(e,t){if(ue.isEmpty(e)||ue.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=ue.autoCastJSON(e)),typeof t=="string"&&(t=ue.autoCastJSON(t));try{return ez.default(e,t)}catch(r){return cn.trace(r,e,t),!1}}a(uz,"geoEqual");function lz(e,t){if(ue.isEmpty(e)||ue.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=ue.autoCastJSON(e)),typeof t=="string"&&(t=ue.autoCastJSON(t));try{return!tz.default(e,t)}catch(r){return cn.trace(r,e,t),!1}}a(lz,"geoCrosses");function _z(e,t,r){if(ue.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(ue.isEmpty(t))throw new Error("geo_type is required");if(ue.isEmpty(iw.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(iw.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=ue.autoCastJSON(e)),rz[t](e,r)}a(_z,"geoConvert")});var h_=T((Ece,uw)=>{var wi=rw(),Or=nw(),Fs=cw();uw.exports=e=>{e.aggr.mad=e.aggr.MAD=wi.mad,e.aggr.mean=e.aggr.MEAN=wi.mean,e.aggr.mode=e.aggr.MODE=wi.mode,e.aggr.prod=e.aggr.PROD=wi.prod,e.aggr.median=e.aggr.MEDIAN=wi.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=wi.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=wi.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Or.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Or.current_time,e.fn.extract=e.fn.EXTRACT=Or.extract,e.fn.date=e.fn.DATE=Or.date,e.fn.date_format=e.fn.DATE_FORMAT=Or.date_format,e.fn.date_add=e.fn.DATE_ADD=Or.date_add,e.fn.date_sub=e.fn.DATE_SUB=Or.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Or.date_diff,e.fn.now=e.fn.NOW=Or.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Or.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Or.get_server_time,e.fn.getdate=e.fn.GETDATE=Or.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Or.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Fs.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Fs.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Fs.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Fs.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Fs.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Fs.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Fs.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Fs.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Fs.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Fs.geoNear}});var fw=T((hce,dw)=>{"use strict";var Tc=require("lodash"),Jt=require("alasql");Jt.options.cache=!1;var dz=h_(),lw=require("clone"),m_=require("recursive-iterator"),re=q(),le=$(),Lo=us(),fz=b(),{hdb_errors:Ez}=j(),{getDatabases:_w}=(fe(),Z(Ce)),hz="IS NULL",ps="There was a problem performing this search. Please check the logs and try again.";dz(Jt);var zm=class{static{a(this,"SQLSearch")}constructor(t,r){if(le.isEmpty(t))throw re.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),le.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!le.isEmptyOrZeroLength(s))return re.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw re.error("Error thrown from checkEmptySQL in SQLSearch class method search."),re.error(s),new Error(ps)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw re.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),re.error(s),new Error(ps)}if(Object.keys(this.data).length===0)return re.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw re.error("Error thrown from processJoins in SQLSearch class method search."),re.error(s),new Error(ps)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw re.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),re.error(s),new Error(ps)}try{return t=await this._finalSQL(),t}catch(s){throw re.error("Error thrown from finalSQL in SQLSearch class method search."),re.error(s),new Error(ps)}}_getColumns(){let t=new m_(this.statement);for(let{node:r,path:s}of t)r&&r.columnid&&(this.columns[s[0]]||(this.columns[s[0]]=[]),this.columns[s[0]].push(lw(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Tc.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let s=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[s]={},this.data[s].__hash_name=_w()[r.databaseid][r.tableid].primaryKey,this.data[s].__merged_data={},this.data[s].__merged_attributes=[],this.data[s].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(le.isEmpty(this.statement.where)){re.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new m_(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!le.isEmpty(r)&&r.right)if(le.isNotEmptyAndHasValue(r.right.value)){let s=le.autoCast(r.right.value);[!0,!1].indexOf(s)>=0&&(r.right=new Jt.yy.LogicValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=le.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new Jt.yy.LogicValue({value:i}):s instanceof Jt.yy.StringValue&&le.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new Jt.yy.NumValue({value:i}))});if(t){re.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new m_(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let s=new Set,n=r.left.columnid?r.left:r.right,i=this._findColumn(n);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!le.isEmpty(fz.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)?s.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)s.add(u[_].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...s])}}}_setAliasesForColumns(){if(le.isEmptyOrZeroLength(this.all_table_attributes)&&le.isEmptyOrZeroLength(this.statement.from)&&le.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((s,n)=>{if(s.columnid==="*"){t.push(n);return}if(s.aggregatorid&&(this.has_aggregator=!0),!s.aggregatorid&&!s.funcid)if(s.as_orig=s.as?s.as:s.columnid,this.statement.joins)if(r[s.as_orig]>=0){let i=r[s.as_orig]+1;s.as=`[${s.as_orig+i}]`,r[s.as_orig]=i}else s.as=`[${s.as_orig}]`,r[s.as_orig]=0;else s.as=`[${s.as_orig}]`;!s.aggregatorid&&s.funcid&&s.args&&(s.as_orig=s.as?s.as:s.toString().replace(/'/g,'"'),s.as=`[${s.as_orig}]`),s.aggregatorid&&s.expression.columnid!=="*"&&(s.as_orig=s.as?s.as:s.expression.tableid?`${s.aggregatorid}(${s.expression.tableid}.${s.expression.columnid})`:`${s.aggregatorid}(${s.expression.columnid})`,s.as=`[${s.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&Tc.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(s=>{if(t.columnid_orig&&t.tableid_orig)return(s.table.as===t.tableid_orig||s.table.tableid===t.tableid_orig)&&s.attribute===t.columnid_orig;if(t.tableid)return(s.table.as===t.tableid||s.table.tableid===t.tableid)&&s.attribute===t.columnid;let n=t.columnid_orig?t.columnid_orig:t.columnid;return s.attribute===n});if(le.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);le.isEmptyOrZeroLength(s)||(r=this.all_table_attributes.filter(n=>n.attribute===s[0].columnid&&s[0].tableid&&s[0].tableid===(n.table.as?n.table.as:n.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(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 Jt.promise(r)}catch(r){throw re.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),re.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let s=this._findColumn(r);s&&this.fetch_attributes.push(lw(s))})}_addColumnToMergedAttributes(t,r){this.data[t].__merged_attributes.push(r),this.data[t].__merged_attr_map[r]=this.data[t].__merged_attributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__merged_data[r].splice(0,1,r)}_updateMergedAttribute(t,r,s,n){let i=this.data[t].__merged_attr_map[s];this.data[t].__merged_data[r].splice(i,1,n)}async _getFetchAttributeValues(){if(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(hz)>-1&&this.tables.forEach(n=>{let i={columnid:_w()[n.databaseid][n.tableid].primaryKey,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Tc.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(n[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,o=this.data[i].__hash_name,c={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},u=!1,_=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(u=!0),!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 Lo.getDataByHash(c);for(let d of c.hash_values)l.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,d))}catch(l){throw re.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),re.error(l),new Error(ps)}else try{c.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[_].values).map(async l=>{let d=Object.assign({},c);d.search_value=l;let f=await Lo.getDataByValue(d);for(let[E,h]of f)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,n.attribute,h[n.attribute]):(this.data[i].__merged_data[E]=[...s[i]],this._updateMergedAttribute(i,E,n.attribute,h[n.attribute]),this._setMergedHashAttribute(i,le.autoCast(E)))}))}catch(l){throw re.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),re.error(l),new Error(ps)}else if(!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,f=l.length;d<f;d++){let E=l[d];c.search_attribute=E.attribute,c.search_value=E.search_value;let h=await Lo.getDataByValue(c,E.operation);if(u)for(let[p]of h)this.data[i].__merged_data[p]||(this.data[i].__merged_data[p]=[...s[i]],this._setMergedHashAttribute(i,le.autoCast(p)));else for(let[p,S]of h)this.data[i].__merged_data[p]?this._updateMergedAttribute(i,p,n.attribute,S[n.attribute]):(this.data[i].__merged_data[p]=[...s[i]],this._updateMergedAttribute(i,p,n.attribute,S[n.attribute]),this._setMergedHashAttribute(i,le.autoCast(p)))}}catch(l){throw re.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),re.error(l),new Error(ps)}else try{c.search_attribute=n.attribute,c.search_value="*";let l=await Lo.getDataByValue(c);if(u)for(let[d]of l)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,le.autoCast(d)));else for(let[d,f]of l)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,n.attribute,f[n.attribute]):(this.data[i].__merged_data[d]=[...s[i]],this._updateMergedAttribute(i,d,n.attribute,f[n.attribute]),this._setMergedHashAttribute(i,le.autoCast(d)))}catch(l){throw re.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),re.error(l),new Error(ps)}}}_isSimpleSelect(){let t=!0;return Object.keys(this.statement).length!==2||!this.statement.columns||!this.statement.from||this.statement.from.length!==1?(t=!1,t):(this.statement.columns.forEach(r=>{r instanceof Jt.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(n=>{let i=n.aggregatorid?n.expression:n,o=n.aggregatorid?n.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===o});r[0]||r.push(this._findColumn(t.expression));let s=r[0];if(t.is_func=!!s.funcid,t.is_aggregator=!!s.aggregatorid,s.as)if(s.as&&!t.expression.tableid)t.expression.columnid=s.as,t.expression.columnid_orig=s.as_orig;else{let n=new Jt.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new Jt.yy.Column,t.expression),t.initial_select_column.as=`[${t.expression.columnid_orig}]`,t.expression.columnid=t.initial_select_column.as;return}if(!t.is_aggregator){let n=t.is_func?new Jt.yy.FuncValue:new Jt.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(E=>{E.joinmode&&E.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(E.table);let h=E.joinmode+" JOIN ? AS "+(E.as?E.as:E.table.tableid);E.on&&(h+=" ON "+E.on.toString()),i.push(h),t.push(Object.values(this.data[`${E.table.databaseid_orig}_${E.table.as?E.table.as_orig:E.table.tableid_orig}`].__merged_data))});let o=[],c={};n.forEach(E=>{let h=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__hash_name,p=E.as?E.as_orig:E.tableid_orig;o.push({key:`'${p}.${h}'`,schema:E.databaseid_orig,table:E.as?E.as_orig:E.tableid_orig,keys:new Set}),r.push(`${E.as?E.as:E.tableid}.\`${h}\` AS "${p}.${h}"`),c[E.as?E.as_orig:E.tableid_orig]=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__merged_attributes});let u=this.statement.where?"WHERE "+this.statement.where:"",_="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(_="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(E=>{E.is_func?r.push(E.initial_select_column.toString()):E.initial_select_column.tableid?r.push(`${E.initial_select_column.tableid}.${E.initial_select_column.columnid} AS ${E.expression.columnid}`):r.push(`${E.initial_select_column.columnid} AS ${E.expression.columnid}`)}));let l="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(l=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let f=[];try{let E=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${u} ${_} ${l} ${d}`,h=this._convertColumnsToIndexes(E,n);f=await Jt.promise(h,t),t=null}catch(E){throw re.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),re.error(E),new Error("There was a problem processing the data.")}if(f&&f.length>0){for(let E=0,h=f.length;E<h;E++){let p=f[E];o.forEach(S=>{p[S.key]!==null&&p[S.key]!==void 0&&S.keys.add(p[S.key])})}o.forEach(E=>{let h=Object.keys(this.data[`${E.schema}_${E.table}`].__merged_data),p=Tc.difference(h,[...E.keys].map(S=>S.toString()));for(let S=0,A=p.length;S<A;S++){let I=p[S];delete this.data[`${E.schema}_${E.table}`].__merged_data[I]}})}return{existing_attributes:c,joined_length:f?f.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new m_(this.columns);for(let{node:i}of n)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&s.push(o)}}s=Tc.uniqBy(s,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(s)}catch(i){throw re.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),re.error(i),new Error(ps)}}async _getData(t){try{let r=t.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]?s[i].columns.push(n.attribute):s[i]={schema:n.table.databaseid,table:n.table.tableid,columns:[n.attribute]},s},{});for(let s in r){let n=r[s],i=this.data[s].__merged_data,o=[];for(let l in i)o.push(i[l][0]);this.data[s].__merged_attributes.push(...n.columns);let c={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},u=await Lo.getDataByHash(c),_=n.columns.length;for(let l=0,d=o.length;l<d;l++){let f=o[l],E=u.get(f);for(let h=0;h<_;h++){let p=n.columns[h],S=E[p]===void 0?null:E[p];this.data[s].__merged_data[f].push(S)}}}}catch(r){throw re.error("Error thrown from getDataByHash function in SQLSearch class method getData."),re.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,u=o.aggregatorid?o.as_orig:c.as_orig;return n.expression.tableid?c.columnid_orig===n.expression.columnid_orig&&c.tableid_orig===n.expression.tableid_orig:c.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===u}).length===0&&(n.expression.columnid=n.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(this.statement.limit&&delete this.statement.limit,this.statement.offset&&delete this.statement.offset);let s;try{let n=this._buildSQL();re.trace(`Final SQL: ${n}`),s=await Jt.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),re.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw re.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),re.error(n),new Error("There was a problem running the generated sql.")}return s}_translateUndefinedValues(t){try{let r=[];for(let s of t){let n=Object.create(null);Object.keys(s).forEach(i=>{s[i]===void 0?n[i]=null:n[i]=s[i]}),r.push(n)}return r}catch(r){return re.error(Ez.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),re.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return this.statement.columns.forEach(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=n[i],_=new RegExp(`${u}.\`${o}\``,"g"),l=`${u}.[${c}]`;s=s.replace(_,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=new RegExp(`\`${o}\``,"g"),_=`[${c}]`;s=s.replace(u,_)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let o=await Lo.getDataByValue(i);for(let[c,u]of o)this.data[n].__merged_data[c]||(u[s.attribute]===void 0&&(u[s.attribute]=null),this.data[n].__merged_data[c]=Object.assign({},r[n])),this.data[n].__merged_data[c][t[s.attribute]]=u[s.attribute]??null}catch(o){throw re.error("There was an error when processing this SQL operation. Check your logs"),re.error(o),new Error(ps)}}return Object.values(Object.values(this.data)[0].__merged_data)}};dw.exports=zm});var qr=T((pce,Ew)=>{"use strict";var mz=qA();Ew.exports={searchByConditions:Sz,searchByHash:Tz,searchByValue:Rz,search:gz};var Jm=us(),{transformReq:Xm}=$(),pz=fw();async function Sz(e){return Xm(e),Jm.searchByConditions(e)}a(Sz,"searchByConditions");async function Tz(e){Xm(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of Jm.searchByHash(e))r&&t.push(r);return t}a(Tz,"searchByHash");async function Rz(e){Xm(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of Jm.searchByValue(e))t.push(r);return t}a(Rz,"searchByValue");function gz(e,t){try{let r=new mz(e);r.validate(),new pz(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(gz,"search")});var p_=T((Tce,hw)=>{"use strict";var Az=us();hw.exports={writeTransaction:Oz};function Oz(e,t,r){return Az.writeTransaction(e,t,r)}a(Oz,"writeTransaction")});var Tw=T((Ace,Sw)=>{"use strict";var Nz=qr(),bz=Pn(),mw=q(),yz=xr(),gce=p_(),Iz=require("clone"),Zm=require("alasql"),wz=h_(),pw=require("util"),Cz=pw.promisify(bz.getTableSchema),Lz=pw.promisify(Nz.search),Dz=b(),jm=$();wz(Zm);Sw.exports={update:Mz};var Uz="There was a problem performing this update. Please check the logs and try again.";async function Mz({statement:e,hdb_user:t}){let r=await Cz(e.table.databaseid,e.table.tableid),s=Pz(e.columns);jm.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=Iz(n),c=jm.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,_=Zm.parse(u).statements[0],l=await Lz(_),d=vz(s,l);return Bz(o,d,t)}a(Mz,"update");function Pz(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=Zm.compile(`SELECT ${r.expression.toString()} AS [${Dz.FUNC_VAL}] FROM ?`)}),t}catch(t){throw mw.error(t),new Error(Uz)}}a(Pz,"createUpdateRecord");function vz(e,t){return jm.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(vz,"buildUpdateRecords");async function Bz(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await yz.update(s);try{delete n.new_attributes,delete n.txn_time}catch(i){mw.error(`Error delete new_attributes from update response: ${i}`)}return n}a(Bz,"updateRecords")});var gw=T((yce,Rw)=>{var Hz=require("alasql"),Fz=qr(),Gz=q(),qz=us(),tp=require("util"),ep=$(),xz=b(),kz=Pn(),Nce=p_(),bce=xr(),Vz="record",$z="successfully deleted",Yz=tp.callbackify(zz),Kz=tp.promisify(Fz.search),Wz=tp.promisify(kz.getTableSchema);Rw.exports={convertDelete:Yz};function Qz(e){return`${e.deleted_hashes.length} ${Vz}${e.deleted_hashes.length===1?"":"s"} ${$z}`}a(Qz,"generateReturnMessage");async function zz({statement:e,hdb_user:t}){let r=await Wz(e.table.databaseid,e.table.tableid);ep.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=ep.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=Hz.parse(o).statements[0],u={operation:xz.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await Kz(c);let _=await qz.deleteRecords(u);return ep.isEmptyOrZeroLength(_.message)&&(_.message=Qz(_)),delete _.txn_time,_}catch(_){throw Gz.error(_),_.hdb_code?_.message:_}}a(zz,"convertDelete")});var yw=T((wce,bw)=>{"use strict";var Jz=mi(),{hdb_errors:Aw}=j(),{getDatabases:Ow}=(fe(),Z(Ce));bw.exports={checkSchemaExists:Nw,checkSchemaTableExists:Xz,schema_describe:Jz};async function Nw(e){if(!Ow()[e])return Aw.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(Nw,"checkSchemaExists");async function Xz(e,t){let r=await Nw(e);if(r)return r;if(!Ow()[e][t])return Aw.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Xz,"checkSchemaTableExists")});var g_=T((Dce,Lw)=>{"use strict";var Do=Ll(),Uo=yw(),jz=q(),Zz=require("uuid").v4,Lce=require("clone"),T_=nn(),Mo=b(),eJ=require("util"),xn=us(),{handleHDBError:Xt,hdb_errors:tJ}=j(),{HDB_ERROR_MSGS:S_,HTTP_STATUS_CODES:jt}=tJ,{SchemaEventMsg:R_}=ds(),Iw=dt(),{getDatabases:rJ}=(fe(),Z(Ce)),{transformReq:Po}=$();Lw.exports={createSchema:sJ,createSchemaStructure:ww,createTable:nJ,createTableStructure:Cw,createAttribute:uJ,dropSchema:iJ,dropTable:oJ,dropAttribute:aJ,getBackup:lJ};async function sJ(e){let t=await ww(e);return T_.signalSchemaChange(new R_(process.pid,e.operation,e.schema)),t}a(sJ,"createSchema");async function ww(e){let t=Do.schema_object(e);if(t)throw Xt(t,t.message,jt.BAD_REQUEST,void 0,void 0,!0);if(Po(e),!await Uo.checkSchemaExists(e.schema))throw Xt(new Error,S_.SCHEMA_EXISTS_ERR(e.schema),jt.BAD_REQUEST,Mo.LOG_LEVELS.ERROR,S_.SCHEMA_EXISTS_ERR(e.schema),!0);return await xn.createSchema(e),`database '${e.schema}' successfully created`}a(ww,"createSchemaStructure");async function nJ(e){return Po(e),e.hash_attribute=e.primary_key??e.hash_attribute,await Cw(e)}a(nJ,"createTable");async function Cw(e){let t=Do.create_table_object(e);if(t)throw Xt(t,t.message,jt.BAD_REQUEST,void 0,void 0,!0);if(Do.validateTableResidence(e.residence),!await Uo.checkSchemaTableExists(e.schema,e.table))throw Xt(new Error,S_.TABLE_EXISTS_ERR(e.schema,e.table),jt.BAD_REQUEST,Mo.LOG_LEVELS.ERROR,S_.TABLE_EXISTS_ERR(e.schema,e.table),!0);let s={name:e.table,schema:e.schema,id:Zz(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)s.residence=e.residence,await xn.createTable(s,e);else throw Xt(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",jt.BAD_REQUEST);else await xn.createTable(s,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(n){throw n}}a(Cw,"createTableStructure");async function iJ(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=Do.schema_object(e),s=t??r;if(s)throw Xt(s,s.message,jt.BAD_REQUEST,void 0,void 0,!0);Po(e);let n=await Uo.checkSchemaExists(e.schema);if(n)throw Xt(new Error,n,jt.NOT_FOUND,Mo.LOG_LEVELS.ERROR,n,!0);let i=await Uo.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await xn.dropSchema(e),T_.signalSchemaChange(new R_(process.pid,e.operation,e.schema)),await Iw.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(iJ,"dropSchema");async function oJ(e){let t=Do.table_object(e);if(t)throw Xt(t,t.message,jt.BAD_REQUEST,void 0,void 0,!0);Po(e);let r=await Uo.checkSchemaTableExists(e.schema,e.table);if(r)throw Xt(new Error,r,jt.NOT_FOUND,Mo.LOG_LEVELS.ERROR,r,!0);return await xn.dropTable(e),await Iw.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(oJ,"dropTable");async function aJ(e){let t=Do.attribute_object(e);if(t)throw Xt(t,t.message,jt.BAD_REQUEST,void 0,void 0,!0);Po(e);let r=await Uo.checkSchemaTableExists(e.schema,e.table);if(r)throw Xt(new Error,r,jt.NOT_FOUND,Mo.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw Xt(new Error,"You cannot drop a hash attribute",jt.BAD_REQUEST,void 0,void 0,!0);if(Mo.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw Xt(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,jt.BAD_REQUEST,void 0,void 0,!0);try{return await xn.dropAttribute(e),cJ(e),T_.signalSchemaChange(new R_(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw jz.error(`Got an error deleting attribute ${eJ.inspect(e)}.`),s}}a(aJ,"dropAttribute");function cJ(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(cJ,"dropAttributeFromGlobal");async function uJ(e){Po(e);let t=rJ()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw Xt(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,jt.BAD_REQUEST,void 0,void 0,!0);return await xn.createAttribute(e),T_.signalSchemaChange(new R_(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(uJ,"createAttribute");function lJ(e){return xn.getBackup(e)}a(lJ,"getBackup")});var Uw=T((Mce,Dw)=>{"use strict";var{OPERATIONS_ENUM:_J}=b(),rp=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,s=void 0,n=void 0){this.operation=_J.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};Dw.exports=rp});var sp=T((Bce,Hw)=>{"use strict";var dJ=us(),vce=Uw(),A_=$(),O_=b(),fJ=X(),{handleHDBError:Mw,hdb_errors:EJ}=j(),{HDB_ERROR_MSGS:Pw,HTTP_STATUS_CODES:vw}=EJ,hJ=Object.values(O_.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),Bw="To use this operation audit log must be enabled in harperdb-config.yaml";Hw.exports=mJ;async function mJ(e){if(A_.isEmpty(e.schema))throw new Error(Pw.SCHEMA_REQUIRED_ERR);if(A_.isEmpty(e.table))throw new Error(Pw.TABLE_REQUIRED_ERR);if(!fJ.get(O_.CONFIG_PARAMS.LOGGING_AUDITLOG))throw Mw(new Error,Bw,vw.BAD_REQUEST,O_.LOG_LEVELS.ERROR,Bw,!0);let t=A_.checkSchemaTableExist(e.schema,e.table);if(t)throw Mw(new Error,t,vw.NOT_FOUND,O_.LOG_LEVELS.ERROR,t,!0);if(!A_.isEmpty(e.search_type)&&hJ.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await dJ.readAuditLog(e)}a(mJ,"readAuditLog")});var Gw=T((Fce,Fw)=>{"use strict";var{OPERATIONS_ENUM:pJ}=b(),np=class{static{a(this,"GetBackupObject")}constructor(t,r,s=void 0,n=void 0){this.operation=pJ.GET_BACKUP,this.schema=t,this.table=r}};Fw.exports=np});var kw=T((kce,xw)=>{"use strict";var SJ=us(),qce=Gw(),ip=$(),TJ=b(),xce=X(),{handleHDBError:RJ,hdb_errors:gJ}=j(),{HDB_ERROR_MSGS:qw,HTTP_STATUS_CODES:AJ}=gJ;xw.exports=OJ;async function OJ(e){if(ip.isEmpty(e.schema))throw new Error(qw.SCHEMA_REQUIRED_ERR);if(ip.isEmpty(e.table))throw new Error(qw.TABLE_REQUIRED_ERR);let t=ip.checkSchemaTableExist(e.schema,e.table);if(t)throw RJ(new Error,t,AJ.NOT_FOUND,TJ.LOG_LEVELS.ERROR,t,!0);return await SJ.getBackup(read_audit_log_object)}a(OJ,"getBackup")});var Qw=T(($ce,Ww)=>{var kn=require("validate.js"),$w=xe(),vo=b(),{handleHDBError:NJ,hdb_errors:bJ}=j(),{HDB_ERROR_MSGS:Xe,HTTP_STATUS_CODES:yJ}=bJ,op=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),IJ={STRUCTURE_USER:"structure_user"},Vw=Object.values(vo.ROLE_TYPES_ENUM),wJ="attribute_permissions",CJ="attribute_name",{PERMS_CRUD_ENUM:Bo}=vo,LJ=[wJ,...Object.values(Bo)],Yw=[Bo.READ,Bo.INSERT,Bo.UPDATE],DJ=[CJ,...Yw];function UJ(e){let t=op();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,Kw(e,t)}a(UJ,"addRoleValidation");function MJ(e){let t=op();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,Kw(e,t)}a(MJ,"alterRoleValidation");function PJ(e){let t=op();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,$w.validateObject(e,t)}a(PJ,"dropRoleValidation");var vJ=["operation","role","id","permission","hdb_user","hdb_auth_header"];function Kw(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)vJ.includes(s[o])||n.push(s[o]);n.length>0&&st(Xe.INVALID_ROLE_JSON_KEYS(n),r);let i=$w.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{st(o,r)}),e.permission){let o=BJ(e);o&&st(o,r),Vw.forEach(c=>{e.permission[c]&&!kn.isBoolean(e.permission[c])&&st(Xe.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(Vw.indexOf(o)<0){if(o===IJ.STRUCTURE_USER){let u=e.permission[o];if(typeof u=="boolean")continue;if(Array.isArray(u)){for(let _=0,l=u.length;_<l;_++){let d=u[_];global.hdb_schema[d]||st(Xe.SCHEMA_NOT_FOUND(d),r)}continue}st(Xe.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){st(Xe.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let u in c.tables){let _=c.tables[u];if(!u||!global.hdb_schema[o][u]){st(Xe.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(_).forEach(l=>{LJ.includes(l)||st(Xe.INVALID_PERM_KEY(l),r,o,u)}),Object.values(Bo).forEach(l=>{kn.isDefined(_[l])?kn.isBoolean(_[l])||st(Xe.TABLE_PERM_NOT_BOOLEAN(l),r,o,u):st(Xe.TABLE_PERM_MISSING(l),r,o,u)}),kn.isDefined(_.attribute_permissions)){if(!kn.isArray(_.attribute_permissions)){st(Xe.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{st(Xe.ATTR_PERMS_ARRAY_MISSING,r,o,u);continue}if(_.attribute_permissions){let l=global.hdb_schema[o][u].attributes.map(({attribute:f})=>f),d={read:!1,insert:!1,update:!1};for(let f in _.attribute_permissions){let E=_.attribute_permissions[f];if(Object.keys(E).forEach(p=>{!DJ.includes(p)&&p!==Bo.DELETE&&st(Xe.INVALID_ATTR_PERM_KEY(p),r,o,u)}),!kn.isDefined(E.attribute_name)){st(Xe.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=E.attribute_name;if(!l.includes(h)){st(Xe.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}Yw.forEach(p=>{kn.isDefined(E[p])?kn.isBoolean(E[p])||st(Xe.ATTR_PERM_NOT_BOOLEAN(p,h),r,o,u):st(Xe.ATTR_PERM_MISSING(p,h),r,o,u)}),!d.read&&E.read===!0&&(d.read=!0),!d.insert&&E.insert===!0&&(d.insert=!0),!d.update&&E.update===!0&&(d.update=!0)}if(_.read===!1&&d.read===!0||_.insert===!1&&d.insert===!0||_.update===!1&&d.update===!0){let f=`${o}.${u}`;st(Xe.MISMATCHED_TABLE_ATTR_PERMS(f),r,o,u)}}}}return HJ(r)}a(Kw,"customValidate");Ww.exports={addRoleValidation:UJ,alterRoleValidation:MJ,dropRoleValidation:PJ};function BJ(e){let{operation:t,permission:r}=e;if(t===vo.OPERATIONS_ENUM.ADD_ROLE||t===vo.OPERATIONS_ENUM.ALTER_ROLE){let s=r.super_user===!0,n=r.cluster_user===!0;if(Object.keys(r).length>1&&(s||n)){if(n&&s)return Xe.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?vo.ROLE_TYPES_ENUM.SUPER_USER:vo.ROLE_TYPES_ENUM.CLUSTER_USER;return Xe.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(BJ,"validateNoSUPerms");function HJ(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:Xe.ROLE_PERMS_ERROR,...e};return NJ(new Error,s,yJ.BAD_REQUEST)}else return null}a(HJ,"generateRolePermResponse");function st(e,t,r,s){if(!r)t.main_permissions.push(e);else{let n=s?r+"_"+s:r;t.schema_permissions[n]?t.schema_permissions[n].push(e):t.schema_permissions[n]=[e]}}a(st,"addPermError")});var dp=T((Kce,jw)=>{"use strict";var zw=xr(),Jw=qr(),FJ=gi(),cp=Qw(),up=nn(),GJ=require("uuid").v4,qJ=require("util"),N_=b(),xJ=$(),lp=Jw.searchByValue,kJ=Jw.searchByHash,VJ=qJ.promisify(FJ.delete),$J=vs(),YJ=wo(),{hdb_errors:KJ,handleHDBError:Ho}=j(),{HDB_ERROR_MSGS:Xw,HTTP_STATUS_CODES:b_}=KJ,{UserEventMsg:_p}=ds();jw.exports={addRole:WJ,alterRole:QJ,dropRole:zJ,listRoles:JJ};function ap(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(ap,"scrubRoleDetails");async function WJ(e){let t=cp.addRoleValidation(e);if(t)throw t;e=ap(e);let r={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},s;try{s=Array.from(await lp(r)||[])}catch(i){throw Ho(i)}if(s&&s.length>0)throw Ho(new Error,Xw.ROLE_ALREADY_EXISTS(e.role),b_.CONFLICT,void 0,void 0,!0);e.id||(e.id=GJ());let n={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await zw.insert(n),up.signalUserChange(new _p(process.pid)),e=ap(e),e}a(WJ,"addRole");async function QJ(e){let t=cp.alterRoleValidation(e);if(t)throw t;e=ap(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},s;try{s=await zw.update(r)}catch(n){throw Ho(n)}if(s&&s?.message==="updated 0 of 1 records")throw Ho(new Error,"Invalid role id",b_.BAD_REQUEST,void 0,void 0,!0);return await up.signalUserChange(new _p(process.pid)),e}a(QJ,"alterRole");async function zJ(e){let t=cp.dropRoleValidation(e);if(t)throw Ho(new Error,t,b_.BAD_REQUEST,void 0,void 0,!0);let r=new YJ(N_.SYSTEM_SCHEMA_NAME,N_.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await kJ(r));if(s.length===0)throw Ho(new Error,Xw.ROLE_NOT_FOUND,b_.NOT_FOUND,void 0,void 0,!0);let n=new $J(N_.SYSTEM_SCHEMA_NAME,N_.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await lp(n)),o=!1;if(xJ.isEmptyOrZeroLength(i)===!1){for(let u=0;u<i.length;u++)if(i[u].active===!0){o=!0;break}}if(o===!0)throw new Error(`Cannot drop role ${s[0].role} as it has active user(s) tied to this role`);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await VJ(c),up.signalUserChange(new _p(process.pid)),`${s[0].role} successfully deleted`}a(zJ,"dropRole");async function JJ(){return lp({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(JJ,"listRoles")});var rC=T((Qce,tC)=>{"use strict";var XJ=X(),Vn=require("joi"),jJ=xe(),Zw=require("moment"),ZJ=require("fs-extra"),fp=require("path"),e2=require("lodash"),Rc=b(),{LOG_LEVELS:Ci}=b(),t2="YYYY-MM-DD hh:mm:ss",r2=fp.resolve(__dirname,"../logs");tC.exports=function(e){return jJ.validateBySchema(e,s2)};var s2=Vn.object({from:Vn.custom(eC),until:Vn.custom(eC),level:Vn.valid(Ci.NOTIFY,Ci.FATAL,Ci.ERROR,Ci.WARN,Ci.INFO,Ci.DEBUG,Ci.TRACE),order:Vn.valid("asc","desc"),limit:Vn.number().min(1),start:Vn.number().min(0),log_name:Vn.custom(n2)});function eC(e,t){if(Zw(e,Zw.ISO_8601).format(t2)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(eC,"validateDatetime");function n2(e,t){if(e2.invert(Rc.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=XJ.get(Rc.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?Rc.LOG_NAMES.HDB:e,i=n===Rc.LOG_NAMES.INSTALL?fp.join(r2,Rc.LOG_NAMES.INSTALL):fp.join(s,n);return ZJ.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(n2,"validateReadLogPath")});var hp=T((Jce,nC)=>{"use strict";var y_=b(),i2=q(),o2=X(),a2=rC(),Ep=require("path"),sC=require("fs-extra"),{once:c2}=require("events"),{handleHDBError:u2,hdb_errors:l2}=j(),{PACKAGE_ROOT:_2}=b(),d2=Ep.join(_2,"logs"),f2=1e3,E2=200;nC.exports=h2;async function h2(e){let t=a2(e);if(t)throw u2(t,t.message,l2.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=o2.get(y_.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?y_.LOG_NAMES.HDB:e.log_name,n=s===y_.LOG_NAMES.INSTALL?Ep.join(d2,y_.LOG_NAMES.INSTALL):Ep.join(r,s),i=e.level!==void 0,o=i?e.level:void 0,c=e.from!==void 0,u=c?new Date(e.from):void 0,_=e.until!==void 0,l=_?new Date(e.until):void 0,d=e.limit===void 0?f2:e.limit,f=e.order===void 0?void 0:e.order,E=e.start===void 0?0:e.start,h=E+d,p=0;f==="desc"&&!u&&!l&&(p=Math.max(sC.statSync(n).size-(h+5)*E2,0));let S=sC.createReadStream(n,{start:p});S.on("error",G=>{i2.error(G)});let A=0,I=[],N="",Y;S.on("data",G=>{let w=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;G=N+G;let K=0,B;for(;(B=w.exec(G))&&!S.destroyed;){Y&&(Y.message=G.slice(K,B.index),Q(Y));let[x,te,be]=B,se=be.split("] ["),Mt=se[0],Pe=se[1];se.splice(0,2),Y={timestamp:te,thread:Mt,level:Pe,tags:se,message:""},K=B.index+x.length}N=G.slice(K)}),S.on("end",G=>{S.destroyed||Y&&(Y.message=N.trim(),Q(Y))}),S.resume();function Q(G){let w,K,B;switch(!0){case(i&&c&&_):w=new Date(G.timestamp),K=new Date(u),B=new Date(l),G.level===o&&w>=K&&w<=B&&A<E?A++:G.level===o&&w>=K&&w<=B&&($n(G,f,I),A++,A===h&&S.destroy());break;case(i&&c):w=new Date(G.timestamp),K=new Date(u),G.level===o&&w>=K&&A<E?A++:G.level===o&&w>=K&&($n(G,f,I),A++,A===h&&S.destroy());break;case(i&&_):w=new Date(G.timestamp),B=new Date(l),G.level===o&&w<=B&&A<E?A++:G.level===o&&w<=B&&($n(G,f,I),A++,A===h&&S.destroy());break;case(c&&_):w=new Date(G.timestamp),K=new Date(u),B=new Date(l),w>=K&&w<=B&&A<E?A++:w>=K&&w<=B&&($n(G,f,I),A++,A===h&&S.destroy());break;case i:G.level===o&&A<E?A++:G.level===o&&($n(G,f,I),A++,A===h&&S.destroy());break;case c:w=new Date(G.timestamp),K=new Date(u),w>=K&&A<E?A++:w>=K&&A>=E&&($n(G,f,I),A++,A===h&&S.destroy());break;case _:w=new Date(G.timestamp),B=new Date(l),w<=B&&A<E?A++:w<=B&&A>=E&&($n(G,f,I),A++,A===h&&S.destroy());break;default:A<E?A++:($n(G,f,I),A++,A===h&&S.destroy())}}return a(Q,"onLogMessage"),await c2(S,"close"),I}a(h2,"readLog");function $n(e,t,r){t==="desc"?m2(e,r):t==="asc"?p2(e,r):r.push(e)}a($n,"pushLineToResult");function m2(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)>r?s=i+1:n=i}t.splice(s,0,e)}a(m2,"insertDescending");function p2(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)<r?s=i+1:n=i}t.splice(s,0,e)}a(p2,"insertAscending")});var w_=T((tue,cC)=>{"use strict";var mp=require("joi"),{string:I_,boolean:iC,date:S2}=mp.types(),T2=xe(),{validateSchemaExists:jce,validateTableExists:Zce,validateSchemaName:eue}=Ls(),R2=b(),g2=ke(),oC=X();oC.initSync();var A2=I_.invalid(oC.get(R2.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(g2.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(),aC={operation:I_.valid("add_node","update_node"),node_name:A2,subscriptions:mp.array().items({table:I_.optional(),schema:I_.required(),subscribe:iC.required(),publish:iC.required().custom(N2),start_time:S2.iso()}).min(1).required()};function O2(e){return T2.validateBySchema(e,mp.object(aC))}a(O2,"addUpdateNodeValidator");function N2(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(N2,"checkForFalsy");cC.exports={addUpdateNodeValidator:O2,validation_schema:aC}});var lC=T((sue,uC)=>{var b2=xe(),y2={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};uC.exports=function(e){return b2.validateObject(e,y2)}});var Sp=T((nue,_C)=>{"use strict";var I2=b().OPERATIONS_ENUM,pp=class{static{a(this,"UpdateObject")}constructor(t,r,s,n=void 0){this.operation=I2.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};_C.exports=pp});var fC=T((oue,dC)=>{"use strict";var w2={OPERATION:"operation",REFRESH:"refresh"},Tp=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},Rp=class{static{a(this,"JWTRSAKeys")}constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};dC.exports={JWTTokens:Tp,TOKEN_TYPE_ENUM:w2,JWTRSAKeys:Rp}});var Oc=T((cue,pC)=>{"use strict";var Ac=require("jsonwebtoken"),gp=require("fs-extra"),Ap=$(),Vr=b(),{handleHDBError:Zt,hdb_errors:C2}=j(),{HTTP_STATUS_CODES:er,AUTHENTICATION_ERROR_MSGS:tr}=C2,gc=q(),EC=Vl(),bp=kr(),L2=xr().update,D2=Sp(),U2=nn(),{UserEventMsg:M2}=ds(),Yn=X();Yn.initSync();var Op=require("path"),{JWTTokens:P2,JWTRSAKeys:v2,TOKEN_TYPE_ENUM:C_}=fC(),B2=Yn.get(Vr.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Yn.get(Vr.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",H2=Yn.get(Vr.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Yn.get(Vr.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",L_="RS256",Np;pC.exports={createTokens:F2,validateOperationToken:q2,refreshOperationToken:G2,validateRefreshToken:mC};async function F2(e){if(Ap.isEmpty(e)||typeof e!="object")throw Zt(new Error,tr.INVALID_AUTH_OBJECT,er.BAD_REQUEST,void 0,void 0,!0);if(Ap.isEmpty(e.username))throw Zt(new Error,tr.USERNAME_REQUIRED,er.BAD_REQUEST,void 0,void 0,!0);if(Ap.isEmpty(e.password))throw Zt(new Error,tr.PASSWORD_REQUIRED,er.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await bp.findAndValidateUser(e.username,e.password),!t)throw Zt(new Error,tr.INVALID_CREDENTIALS,er.UNAUTHORIZED,void 0,void 0,!0)}catch(f){throw gc.error(f),Zt(new Error,tr.INVALID_CREDENTIALS,er.UNAUTHORIZED,void 0,void 0,!0)}let r=await D_(),s=!1,n=!1;t.role&&t.role.permission&&(s=t.role.permission.super_user===!0,n=t.role.permission.cluster_user===!0);let i={username:e.username,super_user:s,cluster_user:n},o=await hC(i,r.private_key,r.passphrase),c=await Ac.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:H2,algorithm:L_,subject:C_.REFRESH}),u=EC.hash(c),_=new D2(Vr.SYSTEM_SCHEMA_NAME,Vr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),l,d;try{l=await L2(_)}catch(f){gc.error(f),d=f}if(d!==void 0||l.skipped_hashes.length>0)throw Zt(new Error,tr.REFRESH_TOKEN_SAVE_FAILED,er.INTERNAL_SERVER_ERROR);return U2.signalUserChange(new M2(process.pid)),new P2(o,c)}a(F2,"createTokens");async function hC(e,t,r){return await Ac.sign(e,{key:t,passphrase:r},{expiresIn:B2,algorithm:L_,subject:C_.OPERATION})}a(hC,"signOperationToken");async function D_(){if(Np===void 0)try{let e=Op.join(Yn.getHdbBasePath(),Vr.LICENSE_KEY_DIR_NAME,Vr.JWT_ENUM.JWT_PASSPHRASE_NAME),t=Op.join(Yn.getHdbBasePath(),Vr.LICENSE_KEY_DIR_NAME,Vr.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=Op.join(Yn.getHdbBasePath(),Vr.LICENSE_KEY_DIR_NAME,Vr.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await gp.readFile(e)).toString(),n=(await gp.readFile(t)).toString(),i=(await gp.readFile(r)).toString();Np=new v2(i,n,s)}catch(e){throw gc.error(e),Zt(new Error,tr.NO_ENCRYPTION_KEYS,er.INTERNAL_SERVER_ERROR)}return Np}a(D_,"getJWTRSAKeys");async function G2(e){if(!e)throw Zt(new Error,tr.INVALID_BODY,er.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw Zt(new Error,tr.REFRESH_TOKEN_REQUIRED,er.BAD_REQUEST,void 0,void 0,!0);await mC(e.refresh_token);let t=await D_(),r=await Ac.decode(e.refresh_token);return{operation_token:await hC({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(G2,"refreshOperationToken");async function q2(e){try{let t=await D_(),r=await Ac.verify(e,t.public_key,{algorithms:L_,subject:C_.OPERATION});return await bp.findAndValidateUser(r.username,void 0,!1)}catch(t){throw gc.warn(t),t.name&&t.name==="TokenExpiredError"?Zt(new Error,tr.TOKEN_EXPIRED,er.FORBIDDEN):Zt(new Error,tr.INVALID_TOKEN,er.UNAUTHORIZED)}}a(q2,"validateOperationToken");async function mC(e){let t;try{let r=await D_(),s=await Ac.verify(e,r.public_key,{algorithms:L_,subject:C_.REFRESH});t=await bp.findAndValidateUser(s.username,void 0,!1)}catch(r){throw gc.warn(r),r.name&&r.name==="TokenExpiredError"?Zt(new Error,tr.TOKEN_EXPIRED,er.FORBIDDEN):Zt(new Error,tr.INVALID_TOKEN,er.UNAUTHORIZED)}if(!EC.validate(t.refresh_token,e))throw Zt(new Error,tr.INVALID_TOKEN,er.UNAUTHORIZED);return t}a(mC,"validateRefreshToken")});var yp=T((_ue,RC)=>{"use strict";var x2=lC(),Fo=require("passport"),k2=require("passport-local").Strategy,V2=require("passport-http").BasicStrategy,$2=require("util"),Y2=kr(),TC=$2.callbackify(Y2.findAndValidateUser),lue=dr(),K2=b(),SC=Oc();Fo.use(new k2(function(e,t,r){TC(e,t,r)}));Fo.use(new V2(function(e,t,r){TC(e,t,r)}));Fo.serializeUser(function(e,t){t(null,e)});Fo.deserializeUser(function(e,t){t(null,e)});function W2(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let s,n;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");s=o[0],n=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("Must login")}switch(a(i,"handleResponse"),s){case"Basic":Fo.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===K2.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?SC.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):SC.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Fo.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(W2,"authorize");function Q2(e,t){let r=x2(e);if(r){t(r);return}let s={authorized:!0,messages:[]},n=e.user.role;if(!n?.permission)return t("Invalid role");let i=JSON.parse(n.permission);if(i.super_user)return t(null,s);if(!i[e.schema])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.schema} schema`),t(null,s);if(!i[e.schema].tables[e.table])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.table} table`),t(null,s);if(!i[e.schema].tables[e.table][e.operation])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return s.authorized=!1,s.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let o=i[e.schema].tables[e.table].attribute_permissions;for(let c in o)e.attributes.indexOf(o[c].attribute_name)>-1&&!o[c][e.operation]&&(s.authorized=!1,s.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,s)}a(Q2,"checkPermissions");RC.exports={authorize:W2,checkPermissions:Q2}});var Go=T((fue,gC)=>{"use strict";var Ip=class{static{a(this,"Node")}constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}},wp=class{static{a(this,"NodeSubscription")}constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};gC.exports={Node:Ip,NodeSubscription:wp}});var OC=T((hue,AC)=>{"use strict";var z2=b().OPERATIONS_ENUM,Cp=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=z2.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};AC.exports=Cp});var Nc=T((pue,NC)=>{"use strict";var Lp=class{static{a(this,"RemotePayloadObject")}constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}},Dp=class{static{a(this,"RemotePayloadSubscription")}constructor(t,r,s,n,i,o,c){this.schema=t,this.table=r,this.hash_attribute=s,this.publish=n,this.subscribe=i,this.start_time=o,c!==void 0&&(this.attributes=c)}};NC.exports={RemotePayloadObject:Lp,RemotePayloadSubscription:Dp}});var yC=T((Tue,bC)=>{"use strict";var Up=class{static{a(this,"TableSizeObject")}constructor(t,r,s=0,n=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=s,this.record_count=n,this.transaction_log_size=i,this.transaction_log_record_count=o}};bC.exports=Up});var CC=T((Nue,wC)=>{"use strict";var J2=yC(),gue=ze(),IC=Ue(),X2=q(),{getSchemaPath:Aue,getTransactionAuditStorePath:Oue}=ve(),{getDatabases:j2}=(fe(),Z(Ce));wC.exports=Z2;async function Z2(e){let t=new J2;try{let r=j2()[e.schema]?.[e.name],s=r.primaryStore.getStats(),n=r.auditStore?.getStats(),i=await IC.environmentDataSize(schema_path,e.name),o=await IC.environmentDataSize(txn_path,e.name);t.schema=e.schema,t.table=e.name,t.table_size=i,t.record_count=s.entryCount,t.transaction_log_size=o,t.transaction_log_record_count=n.entryCount}catch(r){X2.warn(`unable to stat table dbi due to ${r}`)}return t}a(Z2,"lmdbGetTableSize")});var DC=T((yue,LC)=>{"use strict";var Mp=class{static{a(this,"SystemInformationObject")}constructor(t,r,s,n,i,o,c){this.system=t,this.time=r,this.cpu=s,this.memory=n,this.disk=i,this.network=o,this.harperdb_processes=c}};LC.exports=Mp});var qo=T((Lue,vC)=>{"use strict";var e4=require("fs-extra"),t4=require("path"),Gt=require("systeminformation"),Kn=q(),r4=dt(),Pp=ke(),M_=b(),s4=CC(),PC=mi(),{getThreadInfo:UC}=Ze(),$p=X();$p.initSync();var n4=DC(),{openEnvironment:wue}=Ue(),{getSchemaPath:Cue}=ve(),{database:i4}=(fe(),Z(Ce)),U_;vC.exports={getHDBProcessInfo:Fp,getNetworkInfo:qp,getDiskInfo:Gp,getMemoryInfo:Hp,getCPUInfo:Bp,getTimeInfo:vp,getSystemInformation:xp,systemInformation:o4,getTableSize:kp,getMetrics:Vp};function vp(){return Gt.time()}a(vp,"getTimeInfo");async function Bp(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:c,socket:u,cache:_,...l}=await Gt.cpu();l.cpu_speed=await Gt.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:f,raw_currentload_irq:E,raw_currentload_nice:h,raw_currentload_system:p,raw_currentload_user:S,cpus:A,...I}=await Gt.currentLoad();return I.cpus=[],A.forEach(N=>{let{raw_load:Y,raw_load_idle:Q,raw_load_irq:G,raw_load_nice:w,raw_load_system:K,raw_load_user:B,...x}=N;I.cpus.push(x)}),l.current_load=I,l}catch(e){return Kn.error(`error in getCPUInfo: ${e}`),{}}}a(Bp,"getCPUInfo");async function Hp(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await Gt.mem();return Object.assign(n,process.memoryUsage())}catch(e){return Kn.error(`error in getMemoryInfo: ${e}`),{}}}a(Hp,"getMemoryInfo");async function Fp(){let e={core:[],clustering:[]};try{let t=await Gt.processes(),r;try{r=Number.parseInt(await e4.readFile(t4.join($p.get(M_.CONFIG_PARAMS.ROOTPATH),M_.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===M_.NODE_ERROR_CODES.ENOENT)Kn.error("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB");else throw s}t.list.forEach(s=>{s.pid===r?e.core.push(s):s.name==="nats-server"&&e.clustering.push(s)});for(let s of e.core)for(let n of t.list)n.pid===s.parentPid&&(n.name==="PM2"||n.command==="PM2")&&(s.parent="PM2");return e}catch(t){return Kn.error(`error in getHDBProcessInfo: ${t}`),e}}a(Fp,"getHDBProcessInfo");async function Gp(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await Gt.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:u,..._}=await Gt.fsStats();return e.read_write=_,e.size=await Gt.fsSize(),e}catch(t){return Kn.error(`error in getDiskInfo: ${t}`),e}}a(Gp,"getDiskInfo");async function qp(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await Gt.networkInterfaceDefault(),e.latency=await Gt.inetChecksite("google.com"),(await Gt.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:o,dhcp:c,dnsSuffix:u,ieee8021xAuth:_,ieee8021xState:l,carrier_changes:d,...f}=s;e.interfaces.push(f)}),(await Gt.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,...c}=s;e.stats.push(c)}),e}catch(t){return Kn.error(`error in getNetworkInfo: ${t}`),e}}a(qp,"getNetworkInfo");async function xp(){if(U_!==void 0)return U_;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,...c}=await Gt.osInfo();e=c;let u=await Gt.versions("node, npm");return e.node_version=u.node,e.npm_version=u.npm,U_=e,U_}catch(t){return Kn.error(`error in getSystemInformation: ${t}`),e}}a(xp,"getSystemInformation");async function kp(){let e=[],t=await PC.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await s4(s));return e}a(kp,"getTableSize");async function Vp(){let e=await PC.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let i=i4({database:r,table:n}),o=i.getStats();o.readers=i.readerList().split(/\n\s+/).slice(1).map(c=>{let[u,_,l]=c.trim().split(" ");return{pid:u,thread:_,txnid:l}}),s[n]=o}catch(i){Kn.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(Vp,"getMetrics");async function MC(){if($p.get(M_.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await r4.getNATSReferences(),r=await t.streams.info(Pp.WORK_QUEUE_CONSUMER_NAMES.stream_name),s=await e.consumers.get(Pp.WORK_QUEUE_CONSUMER_NAMES.stream_name,Pp.WORK_QUEUE_CONSUMER_NAMES.durable_name),n={ingest:{stream:{...r.state},consumer:{num_ack_pending:s._info.num_ack_pending,num_redelivered:s._info.num_redelivered,num_waiting:s._info.num_waiting,num_pending:s._info.num_pending}}};return r.sources&&(n.ingest.stream.sources=r.sources),n}}a(MC,"getNatsStreamInfo");async function o4(e){let t=new n4;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await xp(),t.time=vp(),t.cpu=await Bp(),t.memory=await Hp(),t.disk=await Gp(),t.network=await qp(),t.harperdb_processes=await Fp(),t.table_size=await kp(),t.metrics=await Vp(),t.threads=await UC(),t.replication=await MC(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await xp();break;case"time":t.time=vp();break;case"cpu":t.cpu=await Bp();break;case"memory":t.memory=await Hp();break;case"disk":t.disk=await Gp();break;case"network":t.network=await qp();break;case"harperdb_processes":t.harperdb_processes=await Fp();break;case"table_size":t.table_size=await kp();break;case"database_metrics":case"metrics":t.metrics=await Vp();break;case"threads":t.threads=await UC();break;case"replication":t.replication=await MC();break;default:break}return t}a(o4,"systemInformation")});var bc=T((Uue,a4)=>{a4.exports={name:"harperdb",version:"4.2.8",description:"HarperDB is a distributed SQL & NoSQL data platform focused on speed, flexibility, and ease of use.",keywords:["database","sql","nosql","api","distributed","cloud","enterprise","Fastify","NATS"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{"minimum-node":"16.0.0","go-lang":"1.21.1","nats-server":"2.10.1"},exports:{".":"./index.js"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"SEE LICENSE IN LICENSE",scripts:{submodules:"git submodule update --init --recursive",build:"eslint -c ./.eslintbuild bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/","cover:test":"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && nyc --no-clean --reporter=lcovonly npm run test:apitests && nyc --no-clean --reporter=lcovonly npm run test:logging && nyc --no-clean --reporter=lcovonly npm run test:upgrade && nyc --no-clean --reporter=lcovonly npm run test:nats && nyc --no-clean --reporter=lcovonly npm run test:cfserver && nyc --no-clean --reporter=lcovonly npm run test:hdbserver && nyc --no-clean --reporter=lcovonly npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license",test:"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && npm run test:apitests && npm run test:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:main":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","test:lmdbbridge":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","test:lmdbutility":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","test:hdbserver":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","test:cfserver":"npm run submodules && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/fastifyRoutes/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","test:nats":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","test:upgrade":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","test:apitests":"pm2 kill && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*-test.mjs' --config '../unitTests/.mocharc.json'","test:logging":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test"},dependencies:{"@aws-sdk/abort-controller":"3.374.0","@aws-sdk/client-s3":"3.441.0","@aws-sdk/lib-storage":"3.441.0","@endo/static-module-record":"^0.8.1","@fastify/autoload":"5.7.1","@fastify/compress":"~6.4.0","@fastify/cors":"~8.4.1","@fastify/static":"~6.11.2","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"1.7.4","cbor-x":"1.5.4",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2","fast-glob":"3.3.1",fastify:"~4.24.3","fastify-plugin":"~4.5.1","fs-extra":"11.1.1",graphql:"^16.8.1","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.11.0",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.2",lmdb:"2.9.1",lodash:"4.17.21",mathjs:"11.11.2",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.29.4","mqtt-packet":"~8.2.1",msgpackr:"1.9.9",nats:"2.17.0",needle:"3.2.0","node-stream-zip":"1.15.0","node-unix-socket":"^0.2.5","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.4.1",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.15.6",pm2:"5.3.0",prompt:"1.3.0","properties-reader":"2.3.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^0.18.0",ses:"^0.18.1","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.21.10","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.1","validate.js":"0.13.1",ws:"^8.14.2",yaml:"2.3.4"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"latest","@typescript-eslint/eslint-plugin":"^5.55.0","@typescript-eslint/parser":"^5.55.0",axios:"0.27.2",chai:"4.3.7","chai-integer":"0.1.0",esbuild:"^0.19.1",eslint:"8.22.0","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.1","eslint-plugin-radar":"0.2.1",eventsource:"^2.0.2","hook-std":"3.0.0","intercept-stdout":"0.1.2",mocha:"^10.2.0","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",mqtt:"~4.3.7",newman:"5.3.2","newman-reporter-html":"1.0.5","newman-reporter-htmlextra":"^1.22.11","newman-reporter-teamcity":"^0.1.12","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"2.8.4",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0","source-map-support":"^0.5.21",typescript:"^5.2.2","why-is-node-still-running":"^1.0.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},"newman-reporter-html":{newman:"5.3.2"},alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","utf-8-validate":"^5.0.10"}}});var Yp=T((Mue,BC)=>{"use strict";BC.exports={version:c4,printVersion:u4};var P_=bc();function c4(){if(P_)return P_.version}a(c4,"version");function u4(){P_&&console.log(`HarperDB Version ${P_.version}`)}a(u4,"printVersion")});var un=T((Hue,qC)=>{"use strict";var l4=xr(),Kp=$(),_4=require("util"),Li=b(),HC=X();HC.initSync();var d4=yp(),FC=qr(),{Node:vue,NodeSubscription:Bue}=Go(),f4=wo(),E4=OC(),{RemotePayloadObject:h4,RemotePayloadSubscription:m4}=Nc(),{handleHDBError:p4,hdb_errors:S4}=j(),{HTTP_STATUS_CODES:T4,HDB_ERROR_MSGS:R4}=S4,g4=vs(),A4=qo(),O4=Yp(),{getDatabases:N4}=(fe(),Z(Ce)),b4=_4.promisify(d4.authorize),y4=FC.searchByHash,I4=FC.searchByValue;qC.exports={authHeaderToUser:w4,isEmpty:C4,getNodeRecord:L4,upsertNodeRecord:D4,buildNodePayloads:U4,checkClusteringEnabled:M4,getAllNodeRecords:P4,getSystemInfo:v4,reverseSubscription:GC};async function w4(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await b4(t,null),e}a(w4,"authHeaderToUser");function C4(e){return e==null}a(C4,"isEmpty");async function L4(e){let t=new f4(Li.SYSTEM_SCHEMA_NAME,Li.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return y4(t)}a(L4,"getNodeRecord");async function D4(e){let t=new E4(Li.SYSTEM_SCHEMA_NAME,Li.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return l4.upsert(t)}a(D4,"upsertNodeRecord");function GC(e){if(Kp.isEmpty(e.subscribe)||Kp.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:s}=e,n={schema:t,table:r,hash_attribute:s};return e.subscribe===!0&&e.publish===!1?(n.subscribe=!1,n.publish=!0):e.subscribe===!1&&e.publish===!0?(n.subscribe=!0,n.publish=!1):(n.subscribe=e.subscribe,n.publish=e.publish),n}a(GC,"reverseSubscription");function U4(e,t,r,s){let n=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:u,table:_}=c,l=Kp.getTableHashAttribute(u,_),{subscribe:d,publish:f}=GC(c),E=N4()[u]?.[_],h=new m4(u,_,l,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);n.push(h)}return new h4(r,t,n,s)}a(U4,"buildNodePayloads");function M4(){if(!HC.get(Li.CONFIG_PARAMS.CLUSTERING_ENABLED))throw p4(new Error,R4.CLUSTERING_NOT_ENABLED,T4.BAD_REQUEST,void 0,void 0,!0)}a(M4,"checkClusteringEnabled");async function P4(){let e=new g4(Li.SYSTEM_SCHEMA_NAME,Li.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await I4(e))}a(P4,"getAllNodeRecords");async function v4(){let e=await A4.getSystemInformation();return{hdb_version:O4.version(),node_version:e.node_version,platform:e.platform}}a(v4,"getSystemInfo")});var Wp=T((Gue,QC)=>{"use strict";var v_=dt(),xC=$(),kC=ke(),VC=b(),B_=q(),$C=g_(),B4=Im(),{RemotePayloadObject:H4}=Nc(),{handleHDBError:YC,hdb_errors:F4}=j(),{HTTP_STATUS_CODES:KC}=F4,{NodeSubscription:WC}=Go();QC.exports=G4;async function G4(e,t){let r;try{r=await v_.request(`${t}.${kC.REQUEST_SUFFIX}`,new H4(VC.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),B_.trace("Response from remote describe all request:",r)}catch(o){B_.error(`addNode received error from describe all request to remote node: ${o}`);let c=v_.requestErrorHandler(o,"add_node",t);throw YC(new Error,c,KC.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===kC.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw YC(new Error,o,KC.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:u}=o;if(c===VC.SYSTEM_SCHEMA_NAME){await v_.createLocalTableStream(c,u);let h=new WC(c,u,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=xC.doesSchemaExist(c),l=s[c]!==void 0,d=u?xC.doesTableExist(c,u):!0,f=u?s?.[c]?.[u]!==void 0:!0;if(!_&&!l||!d&&!f){n.push(o);continue}if(!_&&l&&(B_.trace(`addNode creating schema: ${c}`),await $C.createSchema({operation:"create_schema",schema:c})),!d&&f){B_.trace(`addNode creating table: ${u} in schema: ${c} with attributes ${JSON.stringify(s[c][u].attributes)}`);let h=new B4(c,u,s[c][u].hash_attribute);s[c][u].attributes&&(h.attributes=s[c][u].attributes),await $C.createTable(h)}await v_.createLocalTableStream(c,u);let E=new WC(c,u,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:n}}a(G4,"reviewSubscriptions")});var G_=T((xue,XC)=>{"use strict";var{handleHDBError:H_,hdb_errors:q4}=j(),{HTTP_STATUS_CODES:F_}=q4,{addUpdateNodeValidator:x4}=w_(),yc=q(),JC=b(),zC=ke(),k4=$(),Qp=dt(),Ic=un(),V4=X(),$4=Wp(),{Node:Y4,NodeSubscription:K4}=Go(),{broadcast:W4}=Ze(),Q4="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",z4="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",J4=V4.get(JC.CONFIG_PARAMS.CLUSTERING_NODENAME);XC.exports=X4;async function X4(e,t=!1){yc.trace("addNode called with:",e),Ic.checkClusteringEnabled();let r=x4(e);if(r)throw H_(r,r.message,F_.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let d=await Ic.getNodeRecord(s);if(!k4.isEmptyOrZeroLength(d))throw H_(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,F_.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await $4(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=Q4,o;let c=Ic.buildNodePayloads(n,J4,JC.OPERATIONS_ENUM.ADD_NODE,await Ic.getSystemInfo());yc.trace("addNode sending remote payload:",c);let u;try{u=await Qp.request(`${s}.${zC.REQUEST_SUFFIX}`,c)}catch(d){yc.error(`addNode received error from request: ${d}`);let f=Qp.requestErrorHandler(d,"add_node",s);throw H_(new Error,f,F_.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===zC.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${s}: ${u.message}`;throw H_(new Error,d,F_.INTERNAL_SERVER_ERROR,"error",d)}yc.trace(u);let _=[];for(let d=0,f=n.length;d<f;d++){let E=n[d];yc.trace("Add node updating work stream for node:",s,"subscriptions:",E),await Qp.updateWorkStream(E,s),n[d].start_time===void 0&&delete n[d].start_time,_.push(new K4(E.schema,E.table,E.publish,E.subscribe))}let l=new Y4(s,_,u.system_info);return await Ic.upsertNodeRecord(l),W4({type:"nats_update"}),i.length>0?o.message=z4:o.message=`Successfully added '${s}' to manifest`,o}a(X4,"addNode")});var Jp=T((Vue,eL)=>{"use strict";var{handleHDBError:q_,hdb_errors:j4}=j(),{HTTP_STATUS_CODES:x_}=j4,{addUpdateNodeValidator:Z4}=w_(),wc=q(),ZC=b(),jC=ke(),e3=$(),zp=dt(),Cc=un(),t3=X(),{cloneDeep:r3}=require("lodash"),s3=Wp(),{NodeSubscription:n3}=Go(),{broadcast:i3}=Ze(),o3="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",a3="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",c3=t3.get(ZC.CONFIG_PARAMS.CLUSTERING_NODENAME);eL.exports=u3;async function u3(e){wc.trace("updateNode called with:",e),Cc.checkClusteringEnabled();let t=Z4(e);if(t)throw q_(t,t.message,x_.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=r3(await Cc.getNodeRecord(r));if(e3.isEmptyOrZeroLength(s))throw q_(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,x_.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await s3(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=o3,o;let c=Cc.buildNodePayloads(n,c3,ZC.OPERATIONS_ENUM.UPDATE_NODE,await Cc.getSystemInfo());wc.trace("updateNode sending remote payload:",c);let u;try{u=await zp.request(`${r}.${jC.REQUEST_SUFFIX}`,c)}catch(_){wc.error(`updateNode received error from request: ${_}`);let l=zp.requestErrorHandler(_,"update_node",r);throw q_(new Error,l,x_.INTERNAL_SERVER_ERROR,"error",l)}if(u.status===jC.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let _=`Error returned from remote node ${r}: ${u.message}`;throw q_(new Error,_,x_.INTERNAL_SERVER_ERROR,"error",_)}wc.trace(u);for(let _=0,l=n.length;_<l;_++){let d=n[_];wc.trace(`updateNode updating work stream for node: ${r} subscription:`,d),await zp.updateWorkStream(d,r),n[_].start_time===void 0&&delete n[_].start_time}return await l3(s[0],n,u.system_info),i.length>0?o.message=a3:o.message=`Successfully updated '${r}'`,o}a(u3,"updateNode");async function l3(e,t,r){let s=e;for(let n=0,i=t.length;n<i;n++){let o=t[n],c=!1;for(let u=0,_=e.subscriptions.length;u<_;u++){let l=s.subscriptions[u];if(l.schema===o.schema&&l.table===o.table){l.publish=o.publish,l.subscribe=o.subscribe,c=!0;break}}c||s.subscriptions.push(new n3(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await Cc.upsertNodeRecord(s),i3({type:"nats_update"})}a(l3,"updateNodeTable")});var iL=T((Yue,nL)=>{"use strict";var sL=require("joi"),{string:tL}=sL.types(),_3=xe(),rL=b(),d3=X(),f3=ke();nL.exports=E3;function E3(e){let t=tL.invalid(d3.get(rL.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(f3.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=sL.object({operation:tL.valid(rL.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return _3.validateBySchema(e,r)}a(E3,"removeNodeValidator")});var V_=T((Wue,_L)=>{"use strict";var{handleHDBError:oL,hdb_errors:h3}=j(),{HTTP_STATUS_CODES:aL}=h3,m3=iL(),Lc=q(),cL=un(),p3=$(),k_=b(),uL=ke(),lL=dt(),S3=X(),{RemotePayloadObject:T3}=Nc(),{NodeSubscription:R3}=Go(),g3=dc(),A3=gi(),{broadcast:O3}=Ze(),N3=S3.get(k_.CONFIG_PARAMS.CLUSTERING_NODENAME);_L.exports=b3;async function b3(e){Lc.trace("removeNode called with:",e),cL.checkClusteringEnabled();let t=m3(e);if(t)throw oL(t,t.message,aL.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await cL.getNodeRecord(r);if(p3.isEmptyOrZeroLength(s))throw oL(new Error,`Node '${r}' was not found.`,aL.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new T3(k_.OPERATIONS_ENUM.REMOVE_NODE,N3,[]),i,o=!1;try{i=await lL.request(`${r}.${uL.REQUEST_SUFFIX}`,n),Lc.trace("Remove node reply from remote node:",r,i)}catch(u){Lc.error("removeNode received error from request:",u),o=!0}for(let u=0,_=s.subscriptions.length;u<_;u++){let l=s.subscriptions[u];Lc.trace(`Remove node removing subscription: ${l.schema}.${l.table} for node: ${r}`);let d=new R3(l.schema,l.table,!1,!1);await lL.updateWorkStream(d,r)}let c=new g3(k_.SYSTEM_SCHEMA_NAME,k_.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await A3.deleteRecord(c),O3({type:"nats_update"}),i?.status===uL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(Lc.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(b3,"removeNode")});var EL=T((zue,fL)=>{"use strict";var dL=require("joi"),{string:y3,array:I3}=dL.types(),w3=xe(),C3=w_();fL.exports=L3;function L3(e){let t=dL.object({operation:y3.valid("configure_cluster").required(),connections:I3.items(C3.validation_schema).required()});return w3.validateBySchema(e,t)}a(L3,"configureClusterValidator")});var Xp=T((Xue,TL)=>{"use strict";var D3=b(),$_=q(),U3=$(),M3=V_(),P3=G_(),hL=un(),v3=EL(),{handleHDBError:mL,hdb_errors:B3}=j(),{HTTP_STATUS_CODES:pL}=B3,H3="Configure cluster complete.",F3="Failed to configure the cluster. Check the logs for more details.",G3="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";TL.exports=q3;async function q3(e){$_.trace("configure cluster called with:",e),hL.checkClusteringEnabled();let t=v3(e);if(t)throw mL(t,t.message,pL.BAD_REQUEST,void 0,void 0,!0);let r=await hL.getAllNodeRecords(),s=[];for(let f=0,E=r.length;f<E;f++)s.push(SL(M3,{operation:D3.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name));let n=await Promise.allSettled(s);$_.trace("All results from configure_cluster remove node:",n);let i=[],o=e.connections.length;for(let f=0;f<o;f++){let E=e.connections[f];i.push(SL(P3,E,E.node_name))}let c=await Promise.allSettled(i);$_.trace("All results from configure_cluster add node:",c);let u=[],_=[],l=!1,d=n.concat(c);for(let f=0,E=d.length;f<E;f++){let h=d[f];h.status==="rejected"&&($_.error(h.reason),u.includes(h.reason.node_name)||u.push(h.reason.node_name)),h.status==="fulfilled"&&(l=!0);let p=h?.value?.result;typeof p=="string"&&p.includes("Successfully removed")||h.status==="rejected"||_.push({node_name:h?.value?.node_name,subscriptions:h?.value?.result})}if(U3.isEmptyOrZeroLength(u))return{message:H3,connections:_};if(l)return{message:G3,failed_nodes:u,connections:_};throw mL(new Error,F3,pL.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(q3,"configureCluster");async function SL(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(SL,"functionWrapper")});var gL=T((Zue,RL)=>{"use strict";var Y_=require("joi"),x3=xe(),{validateSchemaExists:k3,validateTableExists:V3,validateSchemaName:$3}=Ls(),Y3=Y_.object({operation:Y_.string().valid("purge_stream"),schema:Y_.string().custom(k3).custom($3).required(),table:Y_.string().custom(V3).required()});function K3(e){return x3.validateBySchema(e,Y3)}a(K3,"purgeStreamValidator");RL.exports=K3});var jp=T((tle,AL)=>{"use strict";var{handleHDBError:W3,hdb_errors:Q3}=j(),{HTTP_STATUS_CODES:z3}=Q3,J3=gL(),X3=dt(),j3=un();AL.exports=Z3;async function Z3(e){let t=J3(e);if(t)throw W3(t,t.message,z3.BAD_REQUEST,void 0,void 0,!0);j3.checkClusteringEnabled();let{schema:r,table:s}=e;return await X3.purgeTableStream(r,s),`Successfully purged table '${r}.${s}'`}a(Z3,"purgeStream")});var tS=T((sle,wL)=>{"use strict";var eS=un(),eX=dt(),bL=X(),K_=b(),Di=ke(),tX=$(),Zp=q(),{RemotePayloadObject:rX}=Nc(),{ErrorCode:OL}=require("nats"),NL=bL.get(K_.CONFIG_PARAMS.CLUSTERING_ENABLED),yL=bL.get(K_.CONFIG_PARAMS.CLUSTERING_NODENAME);wL.exports={clusterStatus:sX,buildNodeStatus:IL};async function sX(){let e={node_name:yL,is_enabled:NL,connections:[]};if(!NL)return e;let t=await eS.getAllNodeRecords();if(tX.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(IL(t[s],e.connections));return await Promise.allSettled(r),e}a(sX,"clusterStatus");async function IL(e,t){let r=e.name,s=new rX(K_.OPERATIONS_ENUM.CLUSTER_STATUS,yL,void 0,await eS.getSystemInfo()),n,i,o=Di.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();n=await eX.request(Di.REQUEST_SUBJECT(r),s),i=Date.now()-u,n.status===Di.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Di.CLUSTER_STATUS_STATUSES.CLOSED,Zp.error(`Error getting node status from ${r} `,n))}catch(u){Zp.warn(`Error getting node status from ${r}`,u),u.code===OL.NoResponders?o=Di.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===OL.Timeout?o=Di.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Di.CLUSTER_STATUS_STATUSES.CLOSED}let c=new nX(r,o,n?.message?.ports?.clustering,n?.message?.ports?.operations_api,i,n?.message?.uptime,e.subscriptions,n?.message?.system_info);try{let u={name:r,system_info:n?.message?.system_info};e.system_info?.hdb_version!==K_.PRE_4_0_0_VERSION&&await eS.upsertNodeRecord(u)}catch(u){Zp.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(IL,"buildNodeStatus");function nX(e,t,r,s,n,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:s},this.latency_ms=n,this.uptime=i,this.subscriptions=o,this.system_info=c}a(nX,"NodeStatusObject")});var sS=T((ile,CL)=>{"use strict";var{handleHDBError:iX,hdb_errors:oX}=j(),{HTTP_STATUS_CODES:aX}=oX,cX=dt(),uX=un(),rS=$(),W_=require("joi"),lX=xe(),_X=2e3,dX=W_.object({timeout:W_.number().min(1),connected_nodes:W_.boolean(),routes:W_.boolean()});CL.exports=fX;async function fX(e){uX.checkClusteringEnabled();let t=lX.validateBySchema(e,dX);if(t)throw iX(t,t.message,aX.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||rS.autoCastBoolean(s),o=n===void 0||rS.autoCastBoolean(n),c={nodes:[]},u=await cX.getServerList(r??_X),_={};if(i)for(let l=0,d=u.length;l<d;l++){let f=u[l].statsz;f&&(_[u[l].server.name]=f.routes)}for(let l=0,d=u.length;l<d;l++){if(u[l].statsz)continue;let f=u[l].server,E=u[l].data;if(f.name.endsWith("-hub")){let h={name:f.name.slice(0,-4),response_time:u[l].response_time};i&&(h.connected_nodes=[],_[f.name]&&_[f.name].forEach(p=>{h.connected_nodes.includes(p.name.slice(0,-4))||h.connected_nodes.push(p.name.slice(0,-4))})),o&&(h.routes=E.cluster?.urls?E.cluster?.urls.map(p=>({host:p.split(":")[0],port:rS.autoCast(p.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(fX,"clusterNetwork")});var ML=T((ale,UL)=>{"use strict";var nS=require("joi"),LL=xe(),{route_constraints:DL}=xh();UL.exports={setRoutesValidator:EX,deleteRoutesValidator:hX};function EX(e){let t=nS.object({server:nS.valid("hub","leaf").required(),routes:DL.required()});return LL.validateBySchema(e,t)}a(EX,"setRoutesValidator");function hX(e){let t=nS.object({routes:DL.required()});return LL.validateBySchema(e,t)}a(hX,"deleteRoutesValidator")});var oS=T((ule,HL)=>{"use strict";var Ui=Tr(),iS=$(),Q_=b(),PL=ML(),{handleHDBError:vL,hdb_errors:mX}=j(),{HTTP_STATUS_CODES:BL}=mX,pX="cluster routes successfully set",SX="cluster routes successfully deleted";HL.exports={setRoutes:TX,getRoutes:RX,deleteRoutes:gX};function TX(e){let t=PL.setRoutesValidator(e);if(t)throw vL(t,t.message,BL.BAD_REQUEST,void 0,void 0,!0);let r=Ui.getClusteringRoutes(),s=e.server==="hub"?r.hub_routes:r.leaf_routes,n=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],o=[];for(let c=0,u=e.routes.length;c<u;c++){let _=e.routes[c];_.port=iS.autoCast(_.port);let l=s.some(f=>f.host===_.host&&f.port===_.port),d=n.some(f=>f.host===_.host&&f.port===_.port);l||d?i.push(_):(s.push(_),o.push(_))}return e.server==="hub"?Ui.updateConfigValue(Q_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):Ui.updateConfigValue(Q_.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:pX,set:o,skipped:i}}a(TX,"setRoutes");function RX(){let e=Ui.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(RX,"getRoutes");function gX(e){let t=PL.deleteRoutesValidator(e);if(t)throw vL(t,t.message,BL.BAD_REQUEST,void 0,void 0,!0);let r=Ui.getClusteringRoutes(),s=r.hub_routes,n=r.leaf_routes,i=[],o=[],c=!1,u=!1;for(let _=0,l=e.routes.length;_<l;_++){let d=e.routes[_],f=!1;for(let E=0,h=s.length;E<h;E++){let p=s[E];if(d.host===p.host&&d.port===p.port){s.splice(E,1),f=!0,c=!0,i.push(d);break}}if(!f){let E=!0;for(let h=0,p=n.length;h<p;h++){let S=n[h];if(d.host===S.host&&d.port===S.port){n.splice(h,1),u=!0,E=!1,i.push(d);break}}E&&o.push(d)}}return c&&(s=iS.isEmptyOrZeroLength(s)?null:s,Ui.updateConfigValue(Q_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),u&&(n=iS.isEmptyOrZeroLength(n)?null:n,Ui.updateConfigValue(Q_.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:SX,deleted:i,skipped:o}}a(gX,"deleteRoutes")});var GL=T((_le,FL)=>{"use strict";var Dc=require("alasql"),Mi=require("recursive-iterator"),Ss=q(),AX=$(),Uc=b(),aS=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,NX(this.ast,this.affected_attributes,this.table_lookup,this.schema_lookup,this.table_to_schema_lookup)}getAttributesBySchemaTableName(t,r){if(!t||!r||!this.affected_attributes)return[];if(this.affected_attributes.has(t))return!this.affected_attributes.get(t).has(r)&&(r=this.table_lookup.get(r),!r)?[]:this.affected_attributes.get(t).get(r)}getAllTables(){let t=[];if(!this.affected_attributes)return t;for(let r of this.affected_attributes.keys())t.push(Array.from(this.affected_attributes.get(r).keys()));return t}getTablesBySchemaName(t){return!t||!this.affected_attributes?[]:Array.from(this.affected_attributes.get(t).keys())}getSchemas(){return this.affected_attributes?Array.from(this.affected_attributes.keys()):[]}getAst(){return this.ast}updateAttributeWildcardsForRolePerms(t){let r=this.ast.columns.filter(n=>Uc.SEARCH_WILDCARDS.includes(n.columnid));if(r.length===0)return this.ast;let s=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(n=>!Uc.SEARCH_WILDCARDS.includes(n.columnid)),r.forEach(n=>{let i=this.table_to_schema_lookup.has(n.tableid)?this.table_to_schema_lookup.get(n.tableid):s,o=this.table_lookup.has(n.tableid)?this.table_lookup.get(n.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][Uc.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=OX(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(_=>!Uc.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let l=new Dc.yy.Column({columnid:_});n.tableid&&(l.tableid=n.tableid),this.ast.columns.push(l),u.includes(_)||u.push(_)}),this.affected_attributes.get(i).set(o,u)}}),this.ast}};function OX(e){return e.filter(t=>t[Uc.PERMS_CRUD_ENUM.READ])}a(OX,"filterReadRestrictedAttrs");function NX(e,t,r,s,n){bX(e,t,r,s,n)}a(NX,"interpretAST");function Mc(e,t,r,s,n){if(!(!e||!e.databaseid)&&(t.has(e.databaseid)||t.set(e.databaseid,new Map),t.get(e.databaseid).has(e.tableid)||t.get(e.databaseid).set(e.tableid,[]),e.as&&(r.has(e.as)||r.set(e.as,e.tableid),s&&!s.has(e.as)&&s.set(e.as,e.databaseid)),n)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),n.set(o,i)}}a(Mc,"addSchemaTableToMap");function bX(e,t,r,s,n){if(!e){Ss.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof Dc.yy.Insert?CX(e,t,r):e instanceof Dc.yy.Select?yX(e,t,r,s,n):e instanceof Dc.yy.Update?IX(e,t,r):e instanceof Dc.yy.Delete?wX(e,t,r):Ss.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(bX,"getRecordAttributesAST");function yX(e,t,r,s,n){if(!e){Ss.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(AX.isEmptyOrZeroLength(i)){Ss.error("No schema specified");return}e.from.forEach(c=>{Mc(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),Mc(c.table,t,r,s,n)});let o=new Mi(e.columns);for(let{node:c}of o)if(c&&c.columnid){let u=c.tableid,_=s.has(u)?s.get(u):i;if(u||(u=e.from[0].tableid),!t.get(_).has(u))if(r.has(u))u=r.get(u);else{Ss.info(`table specified as ${u} not found.`);return}t.get(_).get(u).indexOf(c.columnid)<0&&t.get(_).get(u).push(c.columnid)}if(e.where){let c=new Mi(e.where),u=e.from[0].tableid;for(let{node:_}of c)if(_&&_.columnid){let l=_.tableid?_.tableid:u;if(!t.get(i).has(l))if(r.has(l))l=r.get(l);else{Ss.info(`table specified as ${l} not found.`);continue}t.get(i).get(l).indexOf(_.columnid)<0&&t.get(i).get(l).push(_.columnid)}}if(e.joins&&e.joins.forEach(c=>{let u=new Mi(c.on);for(let{node:_}of u)if(_&&_.columnid){let l=_.tableid,d=n.get(l);if(!t.get(d).has(l))if(r.has(l))l=r.get(l);else{Ss.info(`table specified as ${l} not found.`);continue}t.get(d).get(l).indexOf(_.columnid)<0&&t.get(d).get(l).push(_.columnid)}}),e.order){let c=new Mi(e.order);for(let{node:u}of c)if(u&&u.columnid){let _=u.tableid,l=s.has(_)?s.get(_):i;if(_||(_=e.from[0].tableid),!t.get(l).has(_))if(r.has(_))_=r.get(_);else{Ss.info(`table specified as ${_} not found.`);return}t.get(l).get(_).indexOf(u.columnid)<0&&t.get(l).get(_).push(u.columnid)}}}a(yX,"getSelectAttributes");function IX(e,t,r){if(!e){Ss.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new Mi(e.columns),n=e.table.databaseid;Mc(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&cS(e.table.tableid,n,i.columnid,t,r)}a(IX,"getUpdateAttributes");function wX(e,t,r){if(!e){Ss.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new Mi(e.where),n=e.table.databaseid;Mc(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&cS(e.table.tableid,n,i.columnid,t,r)}a(wX,"getDeleteAttributes");function CX(e,t,r){if(!e){Ss.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new Mi(e.columns),n=e.into.databaseid;Mc(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&cS(e.into.tableid,n,i.columnid,t,r)}a(CX,"getInsertAttributes");function cS(e,t,r,s,n){if(!s.get(t))return;let i=e;s.get(t).has(i)||(i=n.get(i)),s.get(t).get(i).push(r)}a(cS,"pushAttribute");FL.exports=aS});var _S=T((fle,VL)=>{var z_=rc(),qL=require("chalk"),Nr=q(),xL=require("prompt"),{promisify:LX}=require("util"),uS=b(),DX=require("fs-extra"),UX=require("path"),MX=$(),PX=Yp(),kL=X();kL.initSync();var vX=require("moment"),BX=LX(xL.get),HX=UX.join(kL.getHdbBasePath(),uS.LICENSE_KEY_DIR_NAME,uS.LICENSE_FILE_NAME,uS.LICENSE_FILE_NAME);VL.exports={getFingerprint:GX,setLicense:FX,parseLicense:lS,register:qX,getRegistrationInfo:kX};async function FX(e){if(e&&e.key&&e.company){try{Nr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await lS(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw Nr.error(r),Nr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(FX,"setLicense");async function GX(){let e={};try{e=await z_.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw Nr.error(r),Nr.error(t),new Error(r)}return e}a(GX,"getFingerprint");async function lS(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");Nr.info("Validating license input...");let r=z_.validateLicense(e,t);if(Nr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(Nr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(Nr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{Nr.info("writing license to disk"),await DX.writeFile(HX,JSON.stringify({license_key:e,company:t}))}catch(s){throw Nr.error("Failed to write License"),s}return"Registration successful."}a(lS,"parseLicense");async function qX(){let e=await xX();return lS(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(qX,"register");async function xX(){let e=await z_.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:qL.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:qL.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{xL.start()}catch(s){Nr.error(s)}let r;try{r=await BX(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(xX,"promptForRegistration");async function kX(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await z_.getLicense()}catch(r){throw Nr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(MX.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=PX.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=vX.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(kX,"getRegistrationInfo")});var YL=T((hle,$L)=>{"use strict";var VX=ke(),dS=class{static{a(this,"HubConfigObject")}constructor(t,r,s,n,i,o,c,u,_,l,d,f,E,h){this.port=t,o===null&&(o=void 0),this.server_name=r+VX.SERVER_SUFFIX.HUB,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!1},this.tls={cert_file:n,key_file:i,ca_file:o,insecure:c,verify:u},this.leafnodes={port:_,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c}},this.cluster={name:l,port:d,routes:f,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c,verify:u}},this.accounts={SYS:{users:E},HDB:{users:h}},this.system_account="SYS"}};$L.exports=dS});var QL=T((ple,WL)=>{"use strict";var KL=ke(),fS=class{static{a(this,"LeafConfigObject")}constructor(t,r,s,n,i,o,c,u,_,l,d){this.port=t,d===null&&(d=void 0),this.server_name=r+KL.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:n,domain:r+KL.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"}};WL.exports=fS});var JL=T((Tle,zL)=>{"use strict";var ES=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};zL.exports=ES});var jL=T((gle,XL)=>{"use strict";var $X=ke(),hS=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+$X.SERVER_SUFFIX.ADMIN,this.password=r}};XL.exports=hS});var SS=T((Ole,tD)=>{"use strict";var xo=require("path"),j_=require("fs-extra"),YX=YL(),KX=QL(),WX=JL(),QX=jL(),mS=kr(),Vo=$(),rr=Tr(),X_=b(),Pc=ke(),{CONFIG_PARAMS:je}=X_,vc=q(),Bc=X(),ZL=rn(),pS=dt(),ko="clustering",zX=1e4,eD=5;tD.exports={generateNatsConfig:XX,removeNatsConfig:jX,getHubConfigPath:JX};function JX(){let e=Bc.get(je.ROOTPATH);return xo.join(e,ko,Pc.NATS_CONFIG_FILES.HUB_SERVER)}a(JX,"getHubConfigPath");async function XX(e=!1,t=void 0){Bc.initSync();let r=Bc.get(je.ROOTPATH),s=xo.join(r,ko,Pc.PID_FILES.HUB),n=xo.join(r,ko,Pc.PID_FILES.LEAF),i=rr.getConfigFromFile(je.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=xo.join(r,ko,Pc.NATS_CONFIG_FILES.HUB_SERVER),c=xo.join(r,ko,Pc.NATS_CONFIG_FILES.LEAF_SERVER),u=rr.getConfigFromFile(je.CLUSTERING_TLS_CERTIFICATE),_=rr.getConfigFromFile(je.CLUSTERING_TLS_PRIVATEKEY),l=rr.getConfigFromFile(je.CLUSTERING_TLS_CERT_AUTH),d=rr.getConfigFromFile(je.CLUSTERING_TLS_INSECURE),f=rr.getConfigFromFile(je.CLUSTERING_TLS_VERIFY),E=rr.getConfigFromFile(je.CLUSTERING_NODENAME),h=rr.getConfigFromFile(je.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await pS.checkNATSServerInstalled()||Z_("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let p=await mS.listUsers(),S=rr.getConfigFromFile(je.CLUSTERING_USER),A=await mS.getClusterUser();(Vo.isEmpty(A)||A.active!==!0)&&Z_(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await J_(je.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await J_(je.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await J_(je.CLUSTERING_HUBSERVER_NETWORK_PORT),await J_(je.CLUSTERING_LEAFSERVER_NETWORK_PORT));let I=[],N=[];for(let[x,te]of p.entries())te.role.role===X_.ROLE_TYPES_ENUM.CLUSTER_USER&&te.active&&(I.push(new QX(te.username,ZL.decrypt(te.hash))),N.push(new WX(te.username,ZL.decrypt(te.hash))));let Y=[],{hub_routes:Q}=rr.getClusteringRoutes();if(!Vo.isEmptyOrZeroLength(Q))for(let x of Q)Y.push(`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@${x.host}:${x.port}`);let G=new YX(rr.getConfigFromFile(je.CLUSTERING_HUBSERVER_NETWORK_PORT),E,s,u,_,l,d,f,h,rr.getConfigFromFile(je.CLUSTERING_HUBSERVER_CLUSTER_NAME),rr.getConfigFromFile(je.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),Y,I,N);l==null&&(delete G.tls.ca_file,delete G.leafnodes.tls.ca_file),t=Vo.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===X_.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await j_.writeJson(o,G),vc.trace(`Hub server config written to ${o}`));let w=`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@0.0.0.0:${h}`,K=`tls://${A.uri_encoded_name}:${A.uri_encoded_d_hash}@0.0.0.0:${h}`,B=new KX(rr.getConfigFromFile(je.CLUSTERING_LEAFSERVER_NETWORK_PORT),E,n,i,[w],[K],I,N,u,_,l,d);l==null&&delete B.tls.ca_file,(t===void 0||t===X_.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await j_.writeJson(c,B),vc.trace(`Leaf server config written to ${c}`))}a(XX,"generateNatsConfig");async function J_(e){let t=Bc.get(e);return Vo.isEmpty(t)&&Z_(`port undefined for '${e}'`),await Vo.isPortTaken(t)&&Z_(`'${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(J_,"isPortAvailable");function Z_(e){let t=`Error generating clustering config: ${e}`;vc.error(t),console.error(t),process.exit(1)}a(Z_,"generateNatsConfigError");async function jX(e){let{port:t,config_file:r}=pS.getServerConfig(e),{username:s,decrypt_hash:n}=await mS.getClusterUser(),i=0,o=2e3;for(;i<eD;){try{let _=await pS.createConnection(t,s,n,!1);if(_.protocol.connected===!0){_.close();break}}catch(_){vc.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${_}`)}if(i++,i>=eD)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check hdb.log for further details.`);await Vo.async_set_timeout(o*(i*2))}let c="0".repeat(zX),u=xo.join(Bc.get(je.ROOTPATH),ko,r);await j_.writeFile(u,c),await j_.remove(u),vc.notify(e,"started.")}a(jX,"removeNatsConfig")});var aD=T((ble,oD)=>{"use strict";var br=X(),ZX=rc(),ae=b(),Hc=ke(),ln=require("path"),{PACKAGE_ROOT:td}=b(),rD=X(),ed=$(),$o="/dev/null",ej=ln.join(td,"launchServiceScripts"),sD=ln.join(td,"utility/scripts"),tj=ln.join(sD,ae.HDB_RESTART_SCRIPT),nD=ln.resolve(td,"dependencies",`${process.platform}-${process.arch}`,Hc.NATS_BINARY_NAME);function iD(){let t=ZX.licenseSearch().ram_allocation||ae.RAM_ALLOCATION_ENUM.DEFAULT,r=ae.MEM_SETTING_KEY+t,s={[ae.PROCESS_NAME_ENV_PROP]:ae.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return ed.noBootFile()&&(s[ae.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=ed.getEnvCliRootPath()),{name:ae.PROCESS_DESCRIPTORS.HDB,script:ae.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:s,node_args:r,cwd:td}}a(iD,"generateMainServerConfig");var rj=9930;function sj(){br.initSync(!0);let e=br.get(ae.CONFIG_PARAMS.ROOTPATH),t=ln.join(e,"clustering",Hc.NATS_CONFIG_FILES.HUB_SERVER),r=ln.join(br.get(ae.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ae.LOG_NAMES.HDB),s=rD.get(ae.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=Hc.LOG_LEVEL_FLAGS[br.get(ae.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==rj?"-"+s:""),script:nD,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[ae.PROCESS_NAME_ENV_PROP]:ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return br.get(ae.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=$o,i.error_file=$o),i}a(sj,"generateNatsHubServerConfig");var nj=9940;function ij(){br.initSync(!0);let e=br.get(ae.CONFIG_PARAMS.ROOTPATH),t=ln.join(e,"clustering",Hc.NATS_CONFIG_FILES.LEAF_SERVER),r=ln.join(br.get(ae.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ae.LOG_NAMES.HDB),s=rD.get(ae.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=Hc.LOG_LEVEL_FLAGS[br.get(ae.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==nj?"-"+s:""),script:nD,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[ae.PROCESS_NAME_ENV_PROP]:ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return br.get(ae.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=$o,i.error_file=$o),i}a(ij,"generateNatsLeafServerConfig");function oj(){br.initSync();let e=ln.join(br.get(ae.CONFIG_PARAMS.LOGGING_ROOT),ae.LOG_NAMES.HDB),t={name:ae.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:ae.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[ae.PROCESS_NAME_ENV_PROP]:ae.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:ej,autorestart:!1};return br.get(ae.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=$o,t.error_file=$o),t}a(oj,"generateClusteringUpgradeV4ServiceConfig");function aj(){let e={[ae.PROCESS_NAME_ENV_PROP]:ae.PROCESS_DESCRIPTORS.RESTART_HDB};return ed.noBootFile()&&(e[ae.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=ed.getEnvCliRootPath()),{...{name:ae.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:sD},script:tj}}a(aj,"generateRestart");function cj(){return{apps:[iD()]}}a(cj,"generateAllServiceConfigs");oD.exports={generateAllServiceConfigs:cj,generateMainServerConfig:iD,generateRestart:aj,generateNatsHubServerConfig:sj,generateNatsLeafServerConfig:ij,generateClusteringUpgradeV4ServiceConfig:oj}});var gD=T((wle,RD)=>{"use strict";var Ae=b(),uj=$(),_n=SS(),Fc=dt(),Gs=ke(),Wn=aD(),rd=X(),Qn=q(),lj=un(),{startWorker:cD,onMessageFromWorkers:_j}=Ze(),dj=qo(),Ile=require("util"),fj=require("child_process"),Ej=require("fs"),{execFile:hj}=fj,pe;RD.exports={enterPM2Mode:mj,start:zn,stop:TS,reload:lD,restart:_D,list:RS,describe:fD,connect:dn,kill:gj,startAllServices:Aj,startService:gS,getUniqueServicesList:ED,restartAllServices:Oj,isServiceRegistered:hD,reloadStopStart:mD,restartHdb:dD,deleteProcess:Tj,startClusteringProcesses:SD,startClusteringThreads:TD,isHdbRestartRunning:Rj,isClusteringRunning:bj,stopClustering:Nj,reloadClustering:yj};var Gc=!1;_j(e=>{e.type==="restart"&&rd.initSync(!0)});function mj(){Gc=!0}a(mj,"enterPM2Mode");function dn(){return pe||(pe=require("pm2")),new Promise((e,t)=>{pe.connect((r,s)=>{Qn.setupConsoleLogging(),r&&t(r),e(s)})})}a(dn,"connect");var sr,pj=10,uD;function zn(e,t=!1){if(Gc)return Sj(e);let r=hj(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=sr.indexOf(r);o>-1&&sr.splice(o,1),!uD&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<pj&&(Ej.existsSync(_n.getHubConfigPath())?zn(e):(await _n.generateNatsConfig(!0),zn(e),await new Promise(c=>setTimeout(c,3e3)),await _n.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await _n.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let s={serviceName:e.name.replace(/ /g,"-")};function n(i){let o=rd.get(Ae.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,u,_=0,l;for(;u=c.exec(i);){if(u.index&&Gs.LOG_LEVEL_HIERARCHY[o]>=Gs.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===Gs.LOG_LEVELS.ERR||l===Gs.LOG_LEVELS.WRN?Qn.OUTPUTS.STDERR:Qn.OUTPUTS.STDOUT;Qn.logCustomLevel(l||"info",E,s,i.slice(_,u.index).trim())}let[d,f]=u;_=u.index+d.length,l=Gs.LOG_LEVELS[f]}if(Gs.LOG_LEVEL_HIERARCHY[o]>=Gs.LOG_LEVEL_HIERARCHY[l||"info"]){let d=l===Gs.LOG_LEVELS.ERR||l===Gs.LOG_LEVELS.WRN?Qn.OUTPUTS.STDERR:Qn.OUTPUTS.STDOUT;Qn.logCustomLevel(l||"info",d,s,i.slice(_).trim())}}if(a(n,"extractMessages"),r.stdout.on("data",n),r.stderr.on("data",n),r.unref(),sr=[],!sr&&!t){let i=a(()=>{uD=!0,sr&&(sr.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)}sr.push(r)}a(zn,"start");function Sj(e){return new Promise(async(t,r)=>{try{await dn()}catch(s){r(s)}pe.start(e,(s,n)=>{s&&(pe.disconnect(),r(s)),pe.disconnect(),t(n)})})}a(Sj,"startWithPM2");function TS(e){if(!Gc){for(let t of sr||[])t.name===e&&(sr.splice(sr.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await dn()}catch(s){r(s)}pe.stop(e,async(s,n)=>{s&&(pe.disconnect(),r(s)),pe.delete(e,(i,o)=>{i&&(pe.disconnect(),r(s)),pe.disconnect(),t(o)})})})}a(TS,"stop");function lD(e){return new Promise(async(t,r)=>{try{await dn()}catch(s){r(s)}pe.reload(e,(s,n)=>{s&&(pe.disconnect(),r(s)),pe.disconnect(),t(n)})})}a(lD,"reload");function _D(e){if(!Gc)for(let t of sr||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await dn()}catch(s){r(s)}pe.restart(e,(s,n)=>{pe.disconnect(),t(n)})})}a(_D,"restart");function Tj(e){return new Promise(async(t,r)=>{try{await dn()}catch(s){r(s)}pe.delete(e,(s,n)=>{s&&(pe.disconnect(),r(s)),pe.disconnect(),t(n)})})}a(Tj,"deleteProcess");async function dD(){await zn(Wn.generateRestart())}a(dD,"restartHdb");async function Rj(){let e=await RS();for(let t in e)if(e[t].name===Ae.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(Rj,"isHdbRestartRunning");function RS(){return new Promise(async(e,t)=>{try{await dn()}catch(r){t(r)}pe.list((r,s)=>{r&&(pe.disconnect(),t(r)),pe.disconnect(),e(s)})})}a(RS,"list");function fD(e){return new Promise(async(t,r)=>{try{await dn()}catch(s){r(s)}pe.describe(e,(s,n)=>{s&&(pe.disconnect(),r(s)),pe.disconnect(),t(n)})})}a(fD,"describe");function gj(){if(!Gc){for(let e of sr||[])e.kill();sr=[];return}return new Promise(async(e,t)=>{try{await dn()}catch(r){t(r)}pe.killDaemon((r,s)=>{r&&(pe.disconnect(),t(r)),pe.disconnect(),e(s)})})}a(gj,"kill");async function Aj(){try{await SD(),await TD(),await zn(Wn.generateAllServiceConfigs())}catch(e){throw pe?.disconnect(),e}}a(Aj,"startAllServices");async function gS(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case Ae.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=Wn.generateMainServerConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=Wn.generateNatsIngestServiceConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=Wn.generateNatsReplyServiceConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=Wn.generateNatsHubServerConfig(),await zn(r,t),await _n.removeNatsConfig(e);return;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=Wn.generateNatsLeafServerConfig(),await zn(r,t),await _n.removeNatsConfig(e);return;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=Wn.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await zn(r)}catch(r){throw pe?.disconnect(),r}}a(gS,"startService");async function ED(){try{let e=await RS(),t={};for(let r=0,s=e.length;r<s;r++){let n=e[r];t[n.name]===void 0&&(t[n.name]={name:n.name,exec_mode:n.pm2_env.exec_mode})}return t}catch(e){throw pe?.disconnect(),e}}a(ED,"getUniqueServicesList");async function Oj(e=[]){try{let t=!1,r=await ED();for(let s=0,n=Object.values(r).length;s<n;s++){let o=Object.values(r)[s].name;e.includes(o)||(o===Ae.PROCESS_DESCRIPTORS.HDB?t=!0:await _D(o))}t&&await mD(Ae.PROCESS_DESCRIPTORS.HDB)}catch(t){throw pe?.disconnect(),t}}a(Oj,"restartAllServices");async function hD(e){if(sr?.find(r=>r.name===e))return!0;let t=await dj.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(hD,"isServiceRegistered");async function mD(e){let t=e===Ae.PROCESS_DESCRIPTORS.HDB?rd.get(Ae.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):rd.get(Ae.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await fD(e),s=uj.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await TS(e),await gS(e)):e===Ae.PROCESS_DESCRIPTORS.HDB?await dD():await lD(e)}a(mD,"reloadStopStart");var pD;async function SD(e=!1){for(let t in Ae.CLUSTERING_PROCESSES){let r=Ae.CLUSTERING_PROCESSES[t];await gS(r,e)}}a(SD,"startClusteringProcesses");async function TD(){pD=cD(Ae.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Ae.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await Fc.createWorkQueueStream(Gs.WORK_QUEUE_CONSUMER_NAMES),await Fc.updateIngestStreamConsumer(),await Fc.updateLocalStreams();let e=await lj.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Ae.PRE_4_0_0_VERSION){Qn.info("Starting clustering upgrade 4.0.0 process"),cD(Ae.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(TD,"startClusteringThreads");async function Nj(){for(let e in Ae.CLUSTERING_PROCESSES)if(e!==Ae.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===Ae.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await pD.terminate();else{let t=Ae.CLUSTERING_PROCESSES[e];await TS(t)}}a(Nj,"stopClustering");async function bj(){for(let e in Ae.CLUSTERING_PROCESSES){let t=Ae.CLUSTERING_PROCESSES[e];if(await hD(t)===!1)return!1}return!0}a(bj,"isClusteringRunning");async function yj(){await _n.generateNatsConfig(!0),await Fc.reloadNATSHub(),await Fc.reloadNATSLeaf(),await _n.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await _n.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(yj,"reloadClustering")});var od=T((Lle,wD)=>{"use strict";var Ij=require("minimist"),{isMainThread:NS,parentPort:ND}=require("worker_threads"),Ve=b(),{PROCESS_DESCRIPTORS_VALIDATE:qc}=Ve,qs=q(),bS=$(),sd=SS(),Yo=dt(),AS=ke(),bD=Tr(),xs=gD(),AD=qo(),wj=nE(),{restartWorkers:nd,onMessageByType:Cj}=Ze(),{handleHDBError:Lj,hdb_errors:Dj}=j(),{HTTP_STATUS_CODES:Uj}=Dj,id=X();id.initSync();var xc=`Restarting HarperDB. This may take up to ${Ve.RESTART_TIMEOUT_MS/1e3} seconds.`,Mj="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",OD="Clustering is not enabled so cannot be restarted",Pj="Invalid service",Ko,$r;wD.exports={restart:yD,restartService:yS};NS&&Cj(Ve.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?yS({service:e.workerType}):yD({operation:"restart"})});async function yD(e){$r=Object.keys(e).length===0,Ko=await xs.isServiceRegistered(Ve.HDB_PROC_DESCRIPTOR);let t=Ij(process.argv);if(t.service){await yS(t);return}if($r&&!Ko){console.error(Mj);return}if($r&&console.log(xc),Ko){xs.enterPM2Mode(),qs.notify(xc);let r=wj(Object.keys(Ve.CONFIG_PARAM_MAP),!0);return bS.isEmptyOrZeroLength(Object.keys(r))||bD.updateConfigValue(void 0,void 0,r,!0,!0),Bj(),xc}return NS?(qs.notify(xc),setTimeout(()=>{nd()},50)):ND.postMessage({type:Ve.ITC_EVENT_TYPES.RESTART}),xc}a(yD,"restart");async function yS(e){let{service:t}=e;if(Ve.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw Lj(new Error,Pj,Uj.BAD_REQUEST,void 0,void 0,!0);if(Ko=await xs.isServiceRegistered(Ve.HDB_PROC_DESCRIPTOR),!NS)return ND.postMessage({type:Ve.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case qc.clustering:if(!id.get(Ve.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=OD;break}$r&&console.log("Restarting clustering"),qs.notify("Restarting clustering"),await ID();break;case qc.clustering_config:case qc["clustering config"]:if(!id.get(Ve.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=OD;break}$r&&console.log("Restarting clustering_config"),qs.notify("Restarting clustering_config"),await xs.reloadClustering();break;case"custom_functions":case"custom functions":case qc.harperdb:case qc.http_workers:if($r&&!Ko){r=`Restart ${t} is not available from the CLI when running in non-pm2 mode. Either call restart ${t} from the API or stop and start HarperDB.`;break}$r&&console.log("Restarting http_workers"),qs.notify("Restarting http_workers"),$r?await xs.restart(Ve.HDB_PROC_DESCRIPTOR):setTimeout(()=>{nd("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(qs.error(r),$r&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(yS,"restartService");async function vj(){await Yo.publishToStream(`${AS.SUBJECT_PREFIXES.TXN}.${AS.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,AS.WORK_QUEUE_CONSUMER_NAMES.stream_name,Yo.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(vj,"postDummyNatsMsg");async function Bj(){await ID(),await xs.restart(Ve.HDB_PROC_DESCRIPTOR),await bS.async_set_timeout(2e3),id.get(Ve.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await OS(),$r&&(await Yo.closeConnection(),process.exit(0))}a(Bj,"restartPM2Mode");async function ID(){if(!bD.getConfigFromFile(Ve.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await AD.getHDBProcessInfo()).clustering.length===0)qs.trace("Clustering not running, restart will start clustering services"),await sd.generateNatsConfig(!0),await xs.startClusteringProcesses(),await xs.startClusteringThreads(),await OS(),$r&&await Yo.closeConnection();else{await vj(),await sd.generateNatsConfig(!0),Ko?(qs.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await xs.restart(Ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await xs.restart(Ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await AD.getHDBProcessInfo()).clustering.forEach(n=>{qs.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await bS.async_set_timeout(3e3),await OS(),await Yo.updateLocalStreams(),$r&&await Yo.closeConnection(),qs.trace("Restart clustering restarting ingest and reply service threads");let t=nd(Ve.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=nd(Ve.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(ID,"restartClustering");async function OS(){await sd.removeNatsConfig(Ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await sd.removeNatsConfig(Ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(OS,"removeNatsConfig")});var GD=T((Mle,FD)=>{"use strict";var Ule=require("lodash"),nr=b(),{handleHDBError:CD,hdb_errors:Hj}=j(),{HDB_ERROR_MSGS:Fj,HTTP_STATUS_CODES:Gj}=Hj,IS=q();FD.exports={getRolePermissions:xj};var Pi=Object.create(null),qj=a(e=>({key:e,perms:{}}),"perms_template_obj"),MD=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),PD=a((e=!1,t=!1,r=!1,s=!1)=>({[nr.PERMS_CRUD_ENUM.READ]:e,[nr.PERMS_CRUD_ENUM.INSERT]:t,[nr.PERMS_CRUD_ENUM.UPDATE]:r,[nr.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),wS=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...PD(t,r,s,n)}),"table_perms_template"),LD=a((e,t=PD())=>({attribute_name:e,describe:HD(t),[kc]:t[kc],[CS]:t[CS],[LS]:t[LS]}),"attr_perms_template"),DD=a((e,t=!1)=>({attribute_name:e,describe:t,[kc]:t}),"timestamp_attr_perms_template"),{READ:kc,INSERT:CS,UPDATE:LS}=nr.PERMS_CRUD_ENUM,vD=Object.values(nr.PERMS_CRUD_ENUM),BD=[kc,CS,LS];function xj(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r=Object.assign({},global.hdb_schema);delete r[nr.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(Pi[t]&&Pi[t].key===s)return Pi[t].perms;let n=kj(e,r);return Pi[t]?Pi[t].key=s:Pi[t]=qj(s),Pi[t].perms=n,n}catch(r){if(!e[nr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[nr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<nr.PERMS_UPDATE_RELEASE_TIMESTAMP){let s=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw IS.error(s),IS.debug(r),CD(new Error,Fj.OUTDATED_PERMS_TRANSLATION_ERROR,Gj.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
|
|
8
|
-
${r.stack}`;throw IS.error(s),CD(new Error)}}}a(xj,"getRolePermissions");function kj(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[nr.SYSTEM_SCHEMA_NAME]=s[nr.SYSTEM_SCHEMA_NAME],r.structure_user=s.structure_user;let n=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(n===!0||n.indexOf(i)>-1){r[i]=Vj(t[i]);return}r[i]=MD(),s[i]?(s[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(s[i].tables[o]){let c=s[i].tables[o],u=t[i][o],_=$j(c,u);r[i].describe||vD.forEach(l=>{_[l]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=wS()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=wS()})}),r}a(kj,"translateRolePermissions");function Vj(e){let t=MD(!0);return Object.keys(e).forEach(r=>{t.tables[r]=wS(!0,!0,!0,!0,!0)}),t}a(Vj,"createStructureUserPermissions");function $j(e,t){let{attribute_permissions:r}=e;if(r.length>0){let n=Object.assign({},e);n.attribute_permissions=[];let i=r.reduce((_,l)=>{let{attribute_name:d}=l,f=l;return nr.TIME_STAMP_NAMES.includes(d)&&(f=DD(d,l[kc])),_[d]=f,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=LD(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let l=i[_];l.describe=HD(l),n.attribute_permissions.push(l),c||Yj(l,u)}else if(_!==o){let l;nr.TIME_STAMP_NAMES.includes(_)?l=DD(_):l=LD(_),n.attribute_permissions.push(l)}}),c||n.attribute_permissions.push(u),n.describe=UD(n),n}else return e.describe=UD(e),e}a($j,"getTableAttrPerms");function UD(e){return vD.filter(t=>e[t]).length>0}a(UD,"getSchemaTableDescribePerm");function HD(e){return BD.filter(t=>e[t]).length>0}a(HD,"getAttributeDescribePerm");function Yj(e,t){BD.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(Yj,"checkForHashPerms")});var qD={};Qe(qD,{Resources:()=>ad,keyArrayToString:()=>Wo,resetResources:()=>Kj,resources:()=>Jn});function Kj(){return Jn=new ad}function Wo(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var ad,Jn,Vc=Te(()=>{_i();ad=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;set(t,r,s,n){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,type:s,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!n)throw new Error(`Conflicting paths for ${t}`);super.set(t,i);for(let[c,u]of this){let _=2;for(;(_=c.indexOf("/",_))>-1;){let l=this.get(c.slice(0,_));l&&(l.hasSubPaths=!0),_+=2}}}getMatch(t,r){let s=2,n;for(;(s=t.indexOf("/",s))>-1;){let c=t.slice(0,s),u=this.get(c);if(u){if(u.relativeURL=t.slice(s),!u.hasSubPaths)return u;n=u}s+=2}if(n)return n;let i=t.indexOf("?"),o=i>-1?t.slice(0,i):t;return n=this.get(o),n?n.relativeURL=i>-1?t.slice(i):"":n||(n=this.get(""),n&&(t[0]!=="/"&&(t="/"+t),n.relativeURL=t)),n}getResource(t,r){let s=this.getMatch(t);if(s)return t=s.relativeURL,s.Resource.getResource(this.pathToId(t,s.Resource),r)}call(t,r,s){return Ge(r,async()=>{let n=this.getMatch(t);if(n)return t=n.relativeURL,s(n.Resource,n.path,t)})}setRepresentation(t,r,s){}};a(Kj,"resetResources");a(Wo,"keyArrayToString")});var vi,DS=Te(()=>{vi=class extends Map{static{a(this,"Headers")}set(t,r){return typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r),super.set(t.toLowerCase(),[t,r])}get(t){return typeof t!="string"&&(t=""+t),super.get(t.toLowerCase())?.[1]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase();if(!super.has(s))return super.set(s,[t,r])}append(t,r,s){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase(),i=super.get(n);if(i){let o=i[1];s?r=(typeof o=="string"?o:o.join(", "))+", "+r:typeof o=="string"?r=[o,r]:o.push(r)}return super.set(n,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}}});var $c={};Qe($c,{authentication:()=>QD,bypassAuth:()=>Zj,login:()=>tZ,logout:()=>rZ,start:()=>eZ});function Zj(){WD=!0}async function QD(e,t){let r=e.headers.asObject,s=r.authorization,n=r.cookie,i=r.origin,o=[];try{if(i){let E=e.isOperationsServer?Jj?zj:[]:Qj?Wj:[];if(E.includes(i)||E.includes("*")){if(e.method==="OPTIONS"){let h=new vi([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return cd&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),cd&&o.push("Access-Control-Allow-Credentials","true")}}let u,_;if(cd){let E=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=n?.indexOf(E);if(h>=0){let p=n.indexOf(";",h),S=n.indexOf("=",h);u=n.slice(S+1,p===-1?n.length:p),_=await kD.get(u)}e.session=_||(_={})}e.user=null;let l=a((E,h,p)=>{let S=new ld.AuthAuditLog(E,h,yt.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===yt.AUTH_AUDIT_STATUS.SUCCESS?xD.notify(S):xD.error(S)},"authAuditLog"),d;if(s){if(d=Bi.get(s),!d){let[E,h]=s.split(" "),p,S;try{switch(E){case"Basic":[p,S]=atob(h).split(":"),d=p||S?await ut.getUser(p,S):null;break;case"Bearer":try{d=await(0,ud.validateOperationToken)(h)}catch(A){if(A.message==="invalid token")try{return await(0,ud.validateRefreshToken)(h),c({status:-1})}catch{throw A}}break}}catch(A){return jj&&(Bi.get(h)||(Bi.set(h,h),l(p,yt.AUTH_AUDIT_STATUS.FAILURE,E))),c({status:401,body:Xn({error:A.message},e)})}Bi.set(s,d),Xj&&l(d.username,yt.AUTH_AUDIT_STATUS.SUCCESS,E)}e.user=d}else _?.user?e.user=await ut.getUser(_.user,null,!1):WD&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")&&(e.user=await(0,$D.getSuperUser)());cd&&(e.session.update=function(E){if(!u){u=(0,YD.v4)();let p=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${u}; Path=/; Expires=Tue, 01 Oct 8307 19:33:20 GMT; HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",p):f?.headers?.set&&f.headers.set("Set-Cookie",p)}return e.protocol==="https"&&(o?(i&&o.push("Access-Control-Expose-Headers","X-Hdb-Session"),o.push("X-Hdb-Session","Secure")):f?.headers?.set&&(i&&f.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),f.headers.set("X-Hdb-Session","Secure"))),E.id=u,kD.put(E)},e.login=async function(E,h){e.user=await ut.getUser(E,h),e.session.update({user:e.user.username})},(d&&!_||_?.user?.username!==d?.username)&&r["user-agent"]?.startsWith("Mozilla")&&e.session.update({user:e.user.username}));let f=await t(e);return f&&(f.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&Jn.loginPath?(f.status=302,f.headers.set("Location",Jn.loginPath(e))):f.headers.set("WWW-Authenticate","Basic")),c(f))}catch(u){throw c(u)}function c(u){let _=o.length;if(_>0){let l=u.headers;l||(u.headers=l=new vi);for(let d=0;d<_;){let f=o[d++];l.set(f,o[d++])}}return o=null,u}a(c,"applyResponseHeaders")}function eZ({server:e,port:t}){e.request(QD,{port:t||"all"}),VD||(VD=!0,setInterval(()=>{Bi=new Map},Yr.get(yt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),KD.user.addListener(()=>{Bi=new Map}))}async function tZ(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 rZ(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var $D,ud,YD,Yr,yt,ld,KD,xD,Wj,Qj,zj,Jj,kD,cd,WD,Xj,jj,Bi,VD,_d=Te(()=>{$D=D(kr());Hr();Vc();ud=D(Oc());fe();YD=require("uuid"),Yr=D(X()),yt=D(b()),ld=D(q()),KD=D(nc());DS();Qo();xD=(0,ld.loggerWithTag)("auth-event");Yr.initSync();Wj=Yr.get(yt.CONFIG_PARAMS.HTTP_CORSACCESSLIST),Qj=Yr.get(yt.CONFIG_PARAMS.HTTP_CORS),zj=Yr.get(yt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),Jj=Yr.get(yt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),kD=et({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),cd=Yr.get(yt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,WD=Yr.get(yt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,Xj=Yr.get(yt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,jj=Yr.get(yt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,Bi=new Map;ut.onInvalidatedUser(()=>{Bi=new Map});a(Zj,"bypassAuth");a(QD,"authentication");a(eZ,"start");a(tZ,"login");a(rZ,"logout")});var tU=T((Yle,eU)=>{"use strict";var Se=require("joi"),zD=require("fs-extra"),JD=require("path"),En=xe(),XD=X(),jD=b(),ZD=q(),{hdb_errors:sZ}=j(),{HDB_ERROR_MSGS:qt}=sZ,fn=/^[a-zA-Z0-9-_]+$/;eU.exports={getDropCustomFunctionValidator:iZ,setCustomFunctionValidator:oZ,addComponentValidator:lZ,dropCustomFunctionProjectValidator:_Z,packageComponentValidator:dZ,deployComponentValidator:fZ,setComponentFileValidator:aZ,getComponentFileValidator:uZ,dropComponentFileValidator:cZ};function dd(e,t,r){try{let s=XD.get(jD.CONFIG_PARAMS.COMPONENTSROOT),n=JD.join(s,t);return zD.existsSync(n)?e?t:r.message(qt.PROJECT_EXISTS):e?r.message(qt.NO_PROJECT):t}catch(s){return ZD.error(s),r.message(qt.VALIDATION_ERR)}}a(dd,"checkProjectExists");function Yc(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(Yc,"checkFilePath");function nZ(e,t,r,s){try{let n=XD.get(jD.CONFIG_PARAMS.COMPONENTSROOT),i=JD.join(n,e,t,r+".js");return zD.existsSync(i)?r:s.message(qt.NO_FILE)}catch(n){return ZD.error(n),s.message(qt.VALIDATION_ERR)}}a(nZ,"checkFileExists");function iZ(e){let t=Se.object({project:Se.string().pattern(fn).custom(dd.bind(null,!0)).required().messages({"string.pattern.base":qt.BAD_PROJECT_NAME}),type:Se.string().valid("helpers","routes").required(),file:Se.string().pattern(fn).custom(nZ.bind(null,e.project,e.type)).custom(Yc).required().messages({"string.pattern.base":qt.BAD_FILE_NAME})});return En.validateBySchema(e,t)}a(iZ,"getDropCustomFunctionValidator");function oZ(e){let t=Se.object({project:Se.string().pattern(fn).custom(dd.bind(null,!0)).required().messages({"string.pattern.base":qt.BAD_PROJECT_NAME}),type:Se.string().valid("helpers","routes").required(),file:Se.string().custom(Yc).required(),function_content:Se.string().required()});return En.validateBySchema(e,t)}a(oZ,"setCustomFunctionValidator");function aZ(e){let t=Se.object({project:Se.string().pattern(fn).required().messages({"string.pattern.base":qt.BAD_PROJECT_NAME}),file:Se.string().custom(Yc).required(),payload:Se.string().allow("").optional(),encoding:Se.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return En.validateBySchema(e,t)}a(aZ,"setComponentFileValidator");function cZ(e){let t=Se.object({project:Se.string().pattern(fn).required().messages({"string.pattern.base":qt.BAD_PROJECT_NAME}),file:Se.string().custom(Yc).optional()});return En.validateBySchema(e,t)}a(cZ,"dropComponentFileValidator");function uZ(e){let t=Se.object({project:Se.string().required(),file:Se.string().custom(Yc).required(),encoding:Se.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return En.validateBySchema(e,t)}a(uZ,"getComponentFileValidator");function lZ(e){let t=Se.object({project:Se.string().pattern(fn).custom(dd.bind(null,!1)).required().messages({"string.pattern.base":qt.BAD_PROJECT_NAME})});return En.validateBySchema(e,t)}a(lZ,"addComponentValidator");function _Z(e){let t=Se.object({project:Se.string().pattern(fn).custom(dd.bind(null,!0)).required().messages({"string.pattern.base":qt.BAD_PROJECT_NAME})});return En.validateBySchema(e,t)}a(_Z,"dropCustomFunctionProjectValidator");function dZ(e){let t=Se.object({project:Se.string().pattern(fn).required().messages({"string.pattern.base":qt.BAD_PROJECT_NAME}),skip_node_modules:Se.boolean()});return En.validateBySchema(e,t)}a(dZ,"packageComponentValidator");function fZ(e){let t=Se.object({project:Se.string().pattern(fn).required().messages({"string.pattern.base":qt.BAD_PROJECT_NAME}),payload:Se.string().optional().messages({"string.pattern.base":qt.BAD_PACKAGE}),package:Se.string().optional()});return En.validateBySchema(e,t)}a(fZ,"deployComponentValidator")});var md=T((Wle,cU)=>{"use strict";var fd=require("joi"),Ed=require("path"),rU=require("fs-extra"),{exec:EZ}=require("child_process"),hZ=require("util"),sU=hZ.promisify(EZ),Kc=b(),{handleHDBError:zo,hdb_errors:mZ}=j(),{HTTP_STATUS_CODES:Jo}=mZ,Wc=X(),pZ=xe(),Xo=q();Wc.initSync();var US=Wc.get(Kc.CONFIG_PARAMS.COMPONENTSROOT),nU="npm install --omit=dev --json",SZ=`${nU} --dry-run`;cU.exports={installModules:AZ,auditModules:OZ,installAllRootModules:TZ,uninstallRootModule:RZ,linkHarperdb:gZ};async function TZ(e=!1){await hd(),await Qc(e?"npm install --ignore-scripts":"npm install",Wc.get(Kc.CONFIG_PARAMS.ROOTPATH))}a(TZ,"installAllRootModules");async function RZ(e){await Qc(`npm uninstall ${e}`,Wc.get(Kc.CONFIG_PARAMS.ROOTPATH))}a(RZ,"uninstallRootModule");async function gZ(){await hd(),await Qc(`npm link ${Kc.PACKAGE_ROOT}`,Wc.get(Kc.CONFIG_PARAMS.ROOTPATH))}a(gZ,"linkHarperdb");async function Qc(e,t=void 0){let r,s;try{({stdout:r,stderr:s}=await sU(e,{cwd:t}))}catch(n){throw new Error(n.stderr.replace(`
|
|
9
|
-
`,""))}return
|
|
10
|
-
`,"")}a(
|
|
6
|
+
`)},a1="certificate.pem",c1="privateKey.pem",u1="ca.pem";CN.exports={CERTIFICATE_VALUES:o1,CERTIFICATE_PEM_NAME:a1,PRIVATEKEY_PEM_NAME:c1,CA_PEM_NAME:u1}});var Am=T((pae,vN)=>{"use strict";var PN=require("fs-extra"),ce=require("joi"),l1=require("os"),{boolean:Be,string:tn,number:vt,array:Rm}=ce.types(),{totalmem:DN}=require("os"),qi=require("path"),_1=V(),R_=J(),mae=LN(),MN=M(),d1=rt(),UN="log",f1="components",E1="Invalid logging.rotation.maxSize unit. Available units are G, M or K",h1="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",m1="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",p1="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",S1="rootPath config parameter is undefined",T1="clustering.enabled config parameter is undefined",Gi=vt.min(0).required(),A_=Rm.items({host:tn.required(),port:Gi}).empty(null),Wn;vN.exports={configValidator:g1,routesValidator:y1,route_constraints:A_};function g1(e){if(Wn=e.rootPath,R_.isEmpty(Wn))throw S1;let t=Be.required(),r=vt.min(0).max(1e3).empty(null).default(N1),n=tn.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Lc),s=tn.optional().empty(null),i=tn.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),o=ce.string().empty(null).default(Lc),c=ce.custom(A1).empty(null).default(Lc),u=e.clustering?.enabled;if(R_.isEmpty(u))throw T1;let _;return u===!0?_=ce.object({enabled:t,hubServer:ce.object({cluster:ce.object({name:ce.required().empty(null),network:ce.object({port:Gi,routes:A_}).required()}).required(),leafNodes:ce.object({network:ce.object({port:Gi}).required()}).required(),network:ce.object({port:Gi}).required()}).required(),leafServer:ce.object({network:ce.object({port:Gi,routes:A_}).required(),streams:ce.object({maxAge:vt.min(120).allow(null).optional(),maxBytes:vt.min(1).allow(null).optional(),maxMsgs:vt.min(1).allow(null).optional(),path:o}).required()}).required(),logLevel:ce.valid("error","warn","info","debug","trace"),nodeName:i,republishMessages:Be.optional(),databaseLevel:Be.optional(),tls:ce.object({certificate:s,certificateAuthority:s,privateKey:s,insecure:Be.required(),verify:Be.optional()}),user:tn.optional().empty(null)}).required():_=ce.object({enabled:t,tls:ce.object({certificate:s,certificateAuthority:s,privateKey:s,insecure:Be.required()})}).required(),ce.object({authentication:ce.object({authorizeLocal:Be,cacheTTL:vt.required(),enableSessions:Be}),analytics:ce.object({aggregatePeriod:vt}),componentsRoot:n.optional(),clustering:_,localStudio:ce.object({enabled:t}).required(),logging:ce.object({auditAuthEvents:ce.object({logFailed:Be,logSuccessful:Be}),file:Be.required(),level:ce.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ce.object({enabled:Be.optional(),compress:Be.optional(),interval:tn.custom(b1).optional().empty(null),maxSize:tn.custom(O1).optional().empty(null),path:tn.optional().empty(null).default(Lc)}).required(),root:n,stdStreams:Be.required(),auditLog:Be.required()}).required(),operationsApi:ce.object({network:ce.object({cors:Be.optional(),corsAccessList:Rm.optional(),headersTimeout:vt.min(1).optional(),keepAliveTimeout:vt.min(1).optional(),port:vt.optional().empty(null),domainSocket:ce.optional().empty("hdb/operations-server").default(Lc),securePort:vt.optional().empty(null),timeout:vt.min(1).optional()}).optional(),tls:ce.object({certificate:s,certificateAuthority:s,privateKey:s})}).required(),rootPath:tn.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ce.object({network:ce.object({port:Gi,securePort:Gi,mtls:ce.alternatives([Be.optional(),ce.object({user:tn.optional(),certificateAuthority:s})])}).required(),webSocket:Be.optional(),requireAuthentication:Be.optional()}),http:ce.object({compressionThreshold:vt.optional(),cors:Be.optional(),corsAccessList:Rm.optional(),headersTimeout:vt.min(1).optional(),port:vt.min(0).optional().empty(null),securePort:vt.min(0).optional().empty(null)}).required(),threads:r.optional(),maxHeapMemory:vt.min(0).optional(),storage:ce.object({writeAsync:Be.required(),overlappingSync:Be.optional(),caching:Be.optional(),compression:Be.optional(),noReadAhead:Be.optional(),path:c,prefetchWrites:Be.optional()}).required(),ignoreScripts:Be.optional(),tls:ce.object({certificate:s.optional(),certificateAuthority:s.optional(),privateKey:s.optional(),ciphers:tn.optional()})}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(g1,"configValidator");function R1(e){return PN.existsSync(e)?null:`Specified path ${e} does not exist.`}a(R1,"doesPathExist");function A1(e,t){ce.assert(e,tn.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=R1(e);if(r)return t.message(r)}a(A1,"validatePath");function O1(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(E1);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(m1):e}a(O1,"validateRotationMaxSize");function b1(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(h1);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(p1):e}a(b1,"validateRotationInterval");function N1(e,t){let r=t.state.path.join("."),n=l1.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||DN();return i=Math.round(Math.min(i,DN())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),_1.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(N1,"setDefaultThreads");function Lc(e,t){let r=t.state.path.join(".");if(!R_.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(R_.isEmpty(Wn))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return qi.join(Wn,f1);case"logging.root":return qi.join(Wn,UN);case"clustering.leafServer.streams.path":return qi.join(Wn,"clustering","leaf");case"storage.path":let n=qi.join(Wn,MN.LEGACY_DATABASES_DIR_NAME);return PN.existsSync(n)?n:qi.join(Wn,MN.DATABASES_DIR_NAME);case"logging.rotation.path":return qi.join(Wn,UN);case"operationsApi.network.domainSocket":return r==null?null:qi.join(Wn,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Lc,"setDefaultRoot");function y1(e){let t=ce.object({routes:A_});return d1.validateBySchema({routes:e},t)}a(y1,"routesValidator")});var Ur=T((gae,$N)=>{"use strict";var Mr=M(),Bt=J(),Nt=V(),{configValidator:I1,routesValidator:BN}=Am(),or=require("fs-extra"),w1=require("yaml"),wn=require("path"),C1=require("is-number"),xN=require("properties-reader"),L1=require("lodash"),{handleHDBError:D1}=Z(),{HTTP_STATUS_CODES:M1,HDB_ERROR_MSGS:O_}=Ir(),Tae=require("minimist"),{server:U1}=(nr(),ee(Ii)),{DATABASES_PARAM_CONFIG:Dc,CONFIG_PARAMS:Dr,CONFIG_PARAM_MAP:Cn}=Mr,P1="Unable to get config value because config is uninitialized",v1="Config successfully initialized",B1="Error backing up config file",H1="Empty parameter sent to getConfigValue",FN=wn.join(Mr.PACKAGE_ROOT,"config","yaml",Mr.HDB_DEFAULT_CONFIG_FILE),x1="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",HN={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"},b_,yt,N_;$N.exports={createConfigFile:F1,getDefaultConfig:q1,getConfigValue:GN,initConfig:bm,flattenConfig:Go,updateConfigValue:kN,updateConfigObject:k1,getConfiguration:Y1,setConfiguration:K1,readConfigFile:ym,getClusteringRoutes:W1,initOldConfig:VN,getConfigFromFile:Q1,getConfigFilePath:ki,addConfig:z1,deleteConfigFromFile:J1,getConfigObj:X1};function F1(e){let t=Zs(FN);b_=Go(t.toJSON());let r;for(let o in e){let c=Cn[o.toLowerCase()];if(c===Dr.DATABASES){r=e[o];continue}if(!c&&o.endsWith("_package")&&(c=o),c!==void 0){let u=c.split("_"),_=Om(c,e[o]);c==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{t.setIn([...u],_)}catch(l){Nt.error(l)}}}r&&qN(t,r),Nm(t);let n=t.toJSON();yt=Go(n);let s=t.getIn(["rootPath"]),i=wn.join(s,Mr.HDB_CONFIG_FILE);or.createFileSync(i),or.writeFileSync(i,String(t)),Nt.trace(`Config file written to ${i}`)}a(F1,"createConfigFile");function qN(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(Dc.TABLES))for(let i in n[s][Dc.TABLES])for(let o in n[s][Dc.TABLES][i]){let c=n[s][Dc.TABLES][i][o],u=[Dr.DATABASES,s,Dc.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=[Dr.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){Nt.error("Error parsing schemas CLI/env config arguments",n)}}a(qN,"setSchemasConfig");function q1(e){if(b_===void 0){let r=Zs(FN);b_=Go(r.toJSON())}let t=Cn[e.toLowerCase()];if(t!==void 0)return b_[t.toLowerCase()]}a(q1,"getDefaultConfig");function GN(e){if(e==null){Nt.error(H1);return}if(yt===void 0){Nt.trace(P1);return}let t=Cn[e.toLowerCase()];if(t!==void 0)return yt[t.toLowerCase()]}a(GN,"getConfigValue");function ki(e=Bt.getPropsFilePath()){let t=Bt.getEnvCliRootPath();return t?wn.join(t,Mr.HDB_CONFIG_FILE):xN(e).get(Mr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(ki,"getConfigFilePath");function bm(e=!1){if(yt===void 0||e){let t;if(!Bt.noBootFile()){t=Bt.getPropsFilePath();try{or.accessSync(t,or.constants.F_OK|or.constants.R_OK)}catch(i){throw Nt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=ki(t),n;if(r.includes("config/settings.js"))try{VN(r);return}catch(i){if(i.code!==Mr.NODE_ERROR_CODES.ENOENT)throw i}try{n=Zs(r)}catch(i){if(i.code===Mr.NODE_ERROR_CODES.ENOENT){Nt.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 Nt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}G1(n,r),Nm(n);let s=n.toJSON();if(U1.config=s,yt=Go(s),yt.logging_rotation_rotate)for(let i in HN)yt[i]&&Nt.error(`Config ${HN[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);Nt.trace(v1)}}a(bm,"initConfig");function G1(e,t){let r=e.getIn(["rootPath"]),n=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],wn.join(r,"database")),n=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],wn.join(r,"clustering","leaf")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],wn.join(r,"log")),n=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),n=!0),n&&(Nt.trace("Updating config file with missing config params"),or.writeFileSync(t,String(e)))}a(G1,"checkForUpdatedConfig");function Nm(e){let t=e.toJSON();t.componentsRoot=t.componentsRoot??t?.customFunctions?.root,t.threads=t.threads??t?.http?.threads;let r=I1(t);if(r.error)throw O_.CONFIG_VALIDATION(r.error.message);e.setIn(["threads"],r.value.threads),e.setIn(["componentsRoot"],r.value.componentsRoot),e.setIn(["logging","root"],r.value.logging.root),e.setIn(["storage","path"],r.value.storage.path),e.setIn(["logging","rotation","path"],r.value.logging.rotation.path),e.setIn(["clustering","leafServer","streams","path"],r.value.clustering.leafServer.streams?.path),e.setIn(["operationsApi","network","domainSocket"],r.value?.operationsApi?.network?.domainSocket)}a(Nm,"validateConfig");function k1(e,t){yt===void 0&&(yt={});let r=Cn[e.toLowerCase()];if(r===void 0){Nt.trace(`Unable to update config object because config param '${e}' does not exist`);return}yt[r.toLowerCase()]=t}a(k1,"updateConfigObject");function kN(e,t,r=void 0,n=!1,s=!1,i=!1){yt===void 0&&bm();let o=GN(Cn.hdb_root),c=wn.join(o,Mr.HDB_CONFIG_FILE),u=Zs(c),_;if(r===void 0&&e.toLowerCase()===Dr.DATABASES)_=t;else if(r===void 0){let f;if(i)f=e;else if(f=Cn[e.toLowerCase()],f===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=f.split("_"),h=Om(f,t);u.setIn([...E],h)}else for(let f in r){let E=Cn[f.toLowerCase()];if(E===Dr.HTTP_SECUREPORT&&r[f]===yt[Dr.HTTP_PORT]?.toString()&&u.setIn(["http","port"],null),E===Dr.OPERATIONSAPI_NETWORK_SECUREPORT&&r[f]===yt[Dr.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&u.setIn(["operationsApi","network","port"],null),E===Dr.DATABASES){_=r[f];continue}if(!E&&f.endsWith("_package")&&(E=f),E!==void 0){let h=E.split("_"),p=Mr.LEGACY_CONFIG_PARAMS[f.toUpperCase()];p&&p.startsWith("customFunctions")&&u.hasIn(p.split("_"))&&(E=p,h=p.split("_"));let S=Om(E,r[f]);E==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{h.length>1&&typeof u.getIn(h.slice(0,-1))=="boolean"&&u.deleteIn(h.slice(0,-1)),u.setIn([...h],S)}catch(A){Nt.error(A)}}}_&&qN(u,_),Nm(u);let l=u.getIn(["rootPath"]),d=wn.join(l,Mr.HDB_CONFIG_FILE);n===!0&&V1(c,l),or.writeFileSync(d,String(u)),s&&(yt=Go(u.toJSON())),Nt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(kN,"updateConfigValue");function V1(e,t){try{let r=wn.join(t,"backup",`${Mr.HDB_CONFIG_FILE}.bak`);or.copySync(e,r),Nt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){Nt.error(B1),Nt.error(r)}}a(V1,"backupConfigFile");var $1=["databases"];function Go(e){return e.http&&Object.assign(e.http,e?.customFunctions?.network),e?.operationsApi?.network&&(e.operationsApi.network=Object.assign({},e.http,e.operationsApi.network)),e?.operationsApi&&(e.operationsApi.tls=Object.assign({},e.tls,e.operationsApi.tls)),N_=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])&&!$1.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;!Dr[u.toUpperCase()]&&Cn[u]&&(s[Cn[u].toLowerCase()]=o[c]),s[u]=o[c]}}else s[i.toLowerCase()]=n[i];return s}a(r,"squashObj")}a(Go,"flattenConfig");function Om(e,t){if(e===Dr.CLUSTERING_NODENAME||e===Dr.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(C1(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(Om,"castConfigValue");function Y1(){let e=Bt.getPropsFilePath(),t=ki(e);return Zs(t).toJSON()}a(Y1,"getConfiguration");async function K1(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return kN(void 0,void 0,s,!0),x1}catch(i){throw typeof i=="string"||i instanceof String?D1(i,i,M1.BAD_REQUEST,void 0,void 0,!0):i}}a(K1,"setConfiguration");function ym(){let e=Bt.getPropsFilePath();try{or.accessSync(e,or.constants.F_OK|or.constants.R_OK)}catch(n){if(!Bt.noBootFile())throw Nt.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=ki(e);return Zs(t).toJSON()}a(ym,"readConfigFile");function Zs(e){return w1.parseDocument(or.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Zs,"parseYamlDoc");function W1(){let e=ym(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Bt.isEmptyOrZeroLength(t)?[]:t;let r=BN(t);if(r)throw O_.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Bt.isEmptyOrZeroLength(n)?[]:n;let s=BN(n);if(s)throw O_.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 O_.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(W1,"getClusteringRoutes");function VN(e){let t=xN(e);yt={};for(let r in Cn){let n=t.get(r.toUpperCase());if(Bt.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=Cn[r].toLowerCase();s===Dr.LOGGING_ROOT?yt[s]=wn.dirname(n):yt[s]=n}return yt}a(VN,"initOldConfig");function Q1(e){let t=ym();return L1.get(t,e.replaceAll("_","."))}a(Q1,"getConfigFromFile");async function z1(e,t){let r=Zs(ki());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await or.writeFile(ki(),String(r))}a(z1,"addConfig");function J1(e){let t=ki(Bt.getPropsFilePath()),r=Zs(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=wn.join(n,Mr.HDB_CONFIG_FILE);or.writeFileSync(s,String(r))}a(J1,"deleteConfigFromFile");function X1(){return N_||(bm(),N_)}a(X1,"getConfigObj")});var KN=T((Aae,YN)=>{"use strict";var y_=M(),I_=class{static{a(this,"BaseLicense")}constructor(t=0,r=y_.RAM_ALLOCATION_ENUM.DEFAULT,n=y_.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},Im=class extends I_{static{a(this,"ExtendedLicense")}constructor(t=0,r=y_.RAM_ALLOCATION_ENUM.DEFAULT,n=y_.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};YN.exports={BaseLicense:I_,ExtendedLicense:Im}});var Vi=T((bae,jN)=>{"use strict";var Vo=require("fs-extra"),QN=g_(),zN=require("crypto"),j1=require("moment"),Z1=require("uuid").v4,zt=V(),Cm=require("path"),eY=J(),ei=M(),{totalmem:WN}=require("os"),tY=KN().ExtendedLicense,ko="invalid license key format",rY="061183",nY="mofi25",sY="aes-256-cbc",iY=16,oY=32,JN=j();JN.initSync();var wm;jN.exports={validateLicense:XN,generateFingerPrint:cY,licenseSearch:Mm,getLicense:_Y,checkMemoryLimit:dY};function Lm(){return Cm.join(JN.getHdbBasePath(),ei.LICENSE_KEY_DIR_NAME,ei.LICENSE_FILE_NAME)}a(Lm,"getLicenseDirPath");function aY(){let e=Lm();return Cm.join(e,ei.LICENSE_FILE_NAME)}a(aY,"getLicenseFilePath");function Dm(){let e=Lm();return Cm.join(e,ei.REG_KEY_FILE_NAME)}a(Dm,"getFingerPrintFilePath");async function cY(){let e=Dm();try{return await Vo.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await uY();throw zt.error(`Error writing fingerprint file to ${e}`),zt.error(t),new Error("There was an error generating the fingerprint")}}a(cY,"generateFingerPrint");async function uY(){let e=Z1(),t=QN.hash(e),r=Dm();try{await Vo.mkdirp(Lm()),await Vo.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw zt.error(`Error writing fingerprint file to ${r}`),zt.error(n),new Error("There was an error generating the fingerprint")}return t}a(uY,"writeFingerprint");function XN(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:ei.RAM_ALLOCATION_ENUM.DEFAULT,version:ei.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return zt.error("empty license key passed to validate."),r;let n=Dm(),s=!1;try{s=Vo.statSync(n)}catch(i){zt.error(i)}if(s){let i;try{i=Vo.readFileSync(n,"utf8")}catch{zt.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(nY),c=o[1];c=Buffer.concat([Buffer.from(c)],iY);let u=Buffer.concat([Buffer.from(i)],oY),_=zN.createDecipheriv(sY,u,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let l=null;try{l=_.update(o[0],"hex","utf8"),l.trim(),l+=_.final("utf8")}catch{let E=lY(o[0],i);if(E)l=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(ko),zt.error(ko),new Error(ko)}let d;if(isNaN(l))try{d=JSON.parse(l),r.version=d.version,r.exp_date=d.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),d.ram_allocation&&(r.ram_allocation=d.ram_allocation)}catch{throw console.error(ko),zt.error(ko),new Error(ko)}else r.exp_date=l;r.exp_date<j1().valueOf()&&(r.valid_date=!1),QN.validate(o[1],`${rY}${i}${t}`)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||zt.error("Invalid licence"),r}a(XN,"validateLicense");function lY(e,t){try{let r=zN.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{zt.warn("Check old license failed")}}a(lY,"checkOldLicense");function Mm(){let e=new tY,t=[];try{t=Vo.readFileSync(aY(),"utf-8").split(ei.NEW_LINE)}catch(r){r.code==="ENOENT"?zt.info("no license file found"):zt.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(eY.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=XN(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){zt.error("There was an error parsing the license string."),zt.error(s),e.ram_allocation=ei.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return wm=e,e}a(Mm,"licenseSearch");async function _Y(){return wm||await Mm(),wm}a(_Y,"getLicense");function dY(){let e=Mm().ram_allocation,t=process.constrainedMemory?.()||WN();if(t=Math.round(Math.min(t,WN())/2**20),t>e)return`This server has more memory (${t}MB) than HarperDB is licensed for (${e}MB), this should only be used for educational and development purposes.`}a(dY,"checkMemoryLimit")});var rn=T((Cae,Ey)=>{"use strict";var ry="username is required",ny="nothing to update, must supply active, role or password to update",sy="password cannot be an empty string",iy="If role is specified, it cannot be empty.",oy="active must be true or false";Ey.exports={addUser:RY,alterUser:AY,dropUser:bY,getSuperUser:wY,userInfo:NY,listUsers:C_,listUsersExternal:yY,setUsersToGlobal:Yo,findAndValidateUser:dy,getClusterUser:CY,USERNAME_REQUIRED:ry,ALTERUSER_NOTHING_TO_UPDATE:ny,EMPTY_PASSWORD:sy,EMPTY_ROLE:iy,ACTIVE_BOOLEAN:oy};var ay=en(),fY=Fi(),vm=g_(),cy=yN(),uy=Zr(),Bm=gs(),Pr=J(),ly=require("validate.js"),Te=V(),{promisify:EY}=require("util"),Hm=Ts(),ZN=M(),ey=nt(),hY=Ur(),yae=j(),Iae=Vi(),mY=Mi(),{table:wae}=(ge(),ee(xe)),{handleHDBError:Qn,hdb_errors:pY}=Z(),{HTTP_STATUS_CODES:zn,AUTHENTICATION_ERROR_MSGS:Um,HDB_ERROR_MSGS:$o}=pY,{UserEventMsg:xm}=Ln(),Pm=require("lodash"),{server:Fm}=(nr(),ee(Ii)),SY=V();Fm.getUser=(e,t)=>dy(e,t,t!=null);var _y={username:!0,active:!0,role:!0,password:!0},ty=new Map,w_=uy.searchByValue,TY=uy.searchByHash,gY=EY(fY.delete);async function RY(e){let t=ly.cleanAttributes(e,_y),r=cy.addUserValidation(t);if(r)throw Qn(new Error,r.message,zn.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 w_(n),s=s&&Array.from(s)}catch(u){throw Te.error("There was an error searching for a role in add user"),Te.error(u),u}if(!s||s.length<1)throw Qn(new Error,$o.ROLE_NAME_NOT_FOUND(t.role),zn.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw Qn(new Error,$o.DUP_ROLES_FOUND(t.role),zn.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=Hm.encrypt(t.password)),t.password=vm.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await ay.insert(i)}catch(u){throw Te.error("There was an error searching for a user."),Te.error(u),u}Te.debug(o);try{await Yo()}catch(u){throw Te.error("Got an error setting users to global"),Te.error(u),u}if(o.skipped_hashes.length===1)throw Qn(new Error,$o.USER_ALREADY_EXISTS(t.username),zn.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=s[0],Bm.signalUserChange(new xm(process.pid)),`${c.username} successfully added`}a(RY,"addUser");async function AY(e){let t=ly.cleanAttributes(e,_y);if(Pr.isEmptyOrZeroLength(t.username))throw new Error(ry);if(Pr.isEmptyOrZeroLength(t.password)&&Pr.isEmptyOrZeroLength(t.role)&&Pr.isEmptyOrZeroLength(t.active))throw new Error(ny);if(!Pr.isEmpty(t.password)&&Pr.isEmptyOrZeroLength(t.password.trim()))throw new Error(sy);if(!Pr.isEmpty(t.active)&&!Pr.isBoolean(t.active))throw new Error(oy);let r=OY(t.username);if(!Pr.isEmpty(t.password)&&!Pr.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Hm.encrypt(t.password)),t.password=vm.hash(t.password)),t.role==="")throw new Error(iy);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 w_(i)||[])}catch(c){throw Te.error("Got an error searching for a role."),Te.error(c),c}if(!o||o.length===0){let c=$o.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Te.error(c),Qn(new Error,c,zn.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=$o.ALTER_USER_DUP_ROLES(t.role);throw Te.error(c),Qn(new Error,c,zn.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 ay.update(n)}catch(i){throw Te.error("Error during update."),Te.error(i),i}try{await Yo()}catch(i){throw Te.error("Got an error setting users to global"),Te.error(i),i}return Bm.signalUserChange(new xm(process.pid)),s}a(AY,"alterUser");function OY(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(OY,"isClusterUser");async function bY(e){try{let t=cy.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(Pr.isEmpty(global.hdb_users.get(e.username)))throw Qn(new Error,$o.USER_NOT_EXIST(e.username),zn.NOT_FOUND,void 0,void 0,!0);let n;try{n=await gY(r)}catch(s){throw Te.error("Got an error deleting a user."),Te.error(s),s}Te.debug(n);try{await Yo()}catch(s){throw Te.error("Got an error setting users to global."),Te.error(s),s}return Bm.signalUserChange(new xm(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(bY,"dropUser");async function NY(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=Pm.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await TY(r)}catch(s){throw Te.error("Got an error searching for a role."),Te.error(s),s}t.role=n[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Te.error(r),r}return t}a(NY,"userInfo");async function yY(){let e;try{e=await C_()}catch(t){throw Te.error("Got an error listing users."),Te.error(t),t}try{e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token})}catch{throw new Error("there was an error massaging the user data")}return[...e.values()]}a(yY,"listUsersExternal");async function C_(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await w_(e)}catch(o){throw Te.error("Got an error searching for roles."),Te.error(o),o}let r={};for(let o of t)r[o.id]=Pm.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 w_(n)}catch(o){throw Te.error("Got an error searching for users."),Te.error(o),o}let i=new Map;for(let o of s)o=Pm.cloneDeep(o),o.role=r[o.role],IY(o.role),i.set(o.username,o);return i}catch(e){throw Te.error("got an error listing users"),Te.error(e),Pr.errorizeMessage(e)}return null}a(C_,"listUsers");function IY(e){try{if(!e){Te.error("invalid user role found.");return}e.permission.system||(e.permission.system={}),e.permission.system.tables||(e.permission.system.tables={});for(let t of Object.keys(mY)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Te.error("Got an error trying to set system permissions."),Te.error(t)}}a(IY,"appendSystemTablesToRole");async function Yo(){try{let e=await C_();global.hdb_users=e}catch(e){throw Te.error(e),e}}a(Yo,"setUsersToGlobal");async function dy(e,t,r=!0){global.hdb_users||await Yo();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw Qn(new Error,Um.GENERIC_AUTH_FAIL,zn.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw Qn(new Error,Um.USER_INACTIVE,zn.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(ty.get(t)===n.password)return s;if(vm.validate(n.password,t))ty.set(t,n.password);else throw Qn(new Error,Um.GENERIC_AUTH_FAIL,zn.UNAUTHORIZED,void 0,void 0,!0)}return s}a(dy,"findAndValidateUser");async function wY(){global.hdb_users||await Yo();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(wY,"getSuperUser");async function CY(){let e=await C_(),t=hY.getConfigFromFile(ZN.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Pr.isEmpty(r)&&r?.role?.role===ZN.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=Hm.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+ey.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+ey.SERVER_SUFFIX.ADMIN,r}a(CY,"getClusterUser");var fy=[];Fm.invalidateUser=function(e){for(let t of fy)try{t(e)}catch(r){SY.error("Error invalidating user",r)}};Fm.onInvalidatedUser=function(e){fy.push(e)}});var Uc=T((Uae,Sy)=>{"use strict";var $i=V(),vr=M(),LY=Wb(),Dae=Js(),Mae=Pi(),DY=rn(),{validateEvent:hy}=Ln(),Mc=In(),MY=require("process"),{resetDatabases:UY}=(ge(),ee(xe)),PY={[vr.ITC_EVENT_TYPES.SCHEMA]:vY,[vr.ITC_EVENT_TYPES.USER]:py};async function vY(e){let t=hy(e);if(t){$i.error(t);return}$i.trace("ITC schemaHandler received schema event:",e),await LY(e.message),await BY(e.message)}a(vY,"schemaHandler");async function BY(e){try{Mc.resetReadTxn(vr.SYSTEM_SCHEMA_NAME,vr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Mc.resetReadTxn(vr.SYSTEM_SCHEMA_NAME,vr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Mc.resetReadTxn(vr.SYSTEM_SCHEMA_NAME,vr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=UY();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){$i.error(t)}}a(BY,"syncSchemaMetadata");var my=[];async function py(e){try{try{Mc.resetReadTxn(vr.SYSTEM_SCHEMA_NAME,vr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Mc.resetReadTxn(vr.SYSTEM_SCHEMA_NAME,vr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){$i.warn(r)}let t=hy(e);if(t){$i.error(t);return}$i.trace(`ITC userHandler ${vr.HDB_ITC_CLIENT_PREFIX}${MY.pid} received user event:`,e),await DY.setUsersToGlobal();for(let r of my)r()}catch(t){$i.error(t)}}a(py,"userHandler");py.addListener=function(e){my.push(e)};Sy.exports=PY});var Ln=T((Fae,gy)=>{"use strict";var vae=V(),qm=J(),HY=M(),{ITC_ERRORS:Pc}=Ir(),{parentPort:Bae,threadId:xY,isMainThread:FY,workerData:Hae}=require("worker_threads"),{onMessageFromWorkers:qY,broadcast:xae,broadcastWithAcknowledgement:GY}=et();gy.exports={sendItcEvent:kY,validateEvent:Ty,SchemaEventMsg:VY,UserEventMsg:$Y};var L_;qY(async(e,t)=>{L_=L_||Uc(),Ty(e),L_[e.type]&&await L_[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function kY(e){return!FY&&e.message&&(e.message.originator=xY),GY(e)}a(kY,"sendItcEvent");function Ty(e){if(typeof e!="object")return Pc.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||qm.isEmpty(e.type))return Pc.MISSING_TYPE;if(!e.hasOwnProperty("message")||qm.isEmpty(e.message))return Pc.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||qm.isEmpty(e.message.originator))return Pc.MISSING_ORIGIN;if(HY.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Pc.INVALID_EVENT(e.type)}a(Ty,"validateEvent");function VY(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(VY,"SchemaEventMsg");function $Y(e){this.originator=e}a($Y,"UserEventMsg")});var gs=T((kae,by)=>{"use strict";var Ry=M(),Gae=J(),D_=V(),Ay=$b(),Ko,{sendItcEvent:Oy}=Ln();function YY(e){try{D_.trace("signalSchemaChange called with message:",e),Ko=Ko||Uc();let t=new Ay(Ry.ITC_EVENT_TYPES.SCHEMA,e);return Ko.schema(t),Oy(t)}catch(t){D_.error(t)}}a(YY,"signalSchemaChange");function KY(e){try{D_.trace("signalUserChange called with message:",e),Ko=Ko||Uc();let t=new Ay(Ry.ITC_EVENT_TYPES.USER,e);return Ko.user(t),Oy(t)}catch(t){D_.error(t)}}a(KY,"signalUserChange");by.exports={signalSchemaChange:YY,signalUserChange:KY}});var M_=T(($ae,yy)=>{"use strict";var Ny=J(),WY=M(),QY=V(),zY=u_(),JY=c_(),XY=gs(),{SchemaEventMsg:jY}=Ln(),ZY="already exists in";yy.exports=eK;async function eK(e,t,r){if(Ny.isEmptyOrZeroLength(r))return r;let n=[];Ny.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 tK(e,t.schema,t.name,i)})),s}a(eK,"lmdbCheckForNewAttributes");async function tK(e,t,r,n){let s=new JY(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await rK(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(ZY))QY.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(tK,"createNewAttribute");async function rK(e){let t;return t=await zY(e),XY.signalSchemaChange(new jY(process.pid,WY.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(rK,"createAttribute")});var Wo=T((Kae,Iy)=>{"use strict";var Gm=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}};Iy.exports=Gm});var Cy=T((Qae,wy)=>{"use strict";var nK=Wo(),sK=M().OPERATIONS_ENUM,km=class extends nK{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(sK.INSERT,r,n,s,i),this.records=t}};wy.exports=km});var Dy=T((Jae,Ly)=>{"use strict";var iK=Wo(),oK=M().OPERATIONS_ENUM,Vm=class extends iK{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(oK.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};Ly.exports=Vm});var Uy=T((jae,My)=>{"use strict";var aK=Wo(),cK=M().OPERATIONS_ENUM,$m=class extends aK{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(cK.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};My.exports=$m});var vy=T((ece,Py)=>{"use strict";var uK=Wo(),lK=M().OPERATIONS_ENUM,Ym=class extends uK{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(lK.DELETE,n,s,t,i),this.original_records=r}};Py.exports=Ym});var vc=T((nce,Fy)=>{"use strict";var rce=require("path"),By=$e(),_K=Cy(),dK=Dy(),fK=Uy(),EK=vy(),Qo=ht(),Hy=J(),{CONFIG_PARAMS:hK}=M(),xy=j();xy.initSync();var U_=M().OPERATIONS_ENUM,{getTransactionAuditStorePath:mK}=We();Fy.exports=pK;async function pK(e,t){if(xy.get(hK.LOGGING_AUDITLOG)===!1)return;let r=mK(e.schema,e.table),n=await By.openEnvironment(r,e.table,!0),s=SK(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){By.initializeDBIs(n,Qo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Qo.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[Qo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[Qo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),Hy.isEmpty(s.user_name)||n.dbis[Qo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[Qo.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(pK,"writeTransaction");function SK(e,t){let r=Hy.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===U_.INSERT)return new _K(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===U_.UPDATE)return new dK(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===U_.UPSERT)return new fK(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===U_.DELETE)return new EK(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(SK,"createTransactionObject")});var Km=T((oce,qy)=>{"use strict";var TK=Oc(),ice=bc(),Bc=M(),gK=wc(),RK=xo().insertRecords,AK=$e(),OK=V(),bK=M_(),{getSchemaPath:NK}=We(),yK=vc();qy.exports=IK;async function IK(e){try{let{schema_table:t,attributes:r}=TK(e);gK(e,r,t.hash_attribute),e.schema!==Bc.SYSTEM_SCHEMA_NAME&&(r.includes(Bc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Bc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Bc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Bc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await bK(e.hdb_auth_header,t,r),s=NK(e.schema,e.table),i=await AK.openEnvironment(s,e.table),o=await RK(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await yK(e,o)}catch(c){OK.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(IK,"lmdbCreateRecords")});var Vy=T((cce,ky)=>{"use strict";var Gy=M(),wK=Km(),CK=bc(),LK=require("fs-extra"),{getSchemaPath:DK}=We();ky.exports=MK;async function MK(e){let t=[{name:e.schema,createddate:Date.now()}],r=new CK(Gy.SYSTEM_SCHEMA_NAME,Gy.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await wK(r),await LK.mkdirp(DK(e.schema))}a(MK,"lmdbCreateSchema")});var Yy=T((lce,$y)=>{"use strict";var Wm=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}};$y.exports=Wm});var zy=T((hce,Qy)=>{"use strict";var Ky=$e(),Qm=wr(),zm=Ir().LMDB_ERRORS_ENUM,UK=ht(),Wy=V(),dce=J(),PK=require("lmdb"),vK=Yy(),BK=M(),{OVERFLOW_MARKER:fce,MAX_SEARCH_KEY_LENGTH:Ece}=UK,HK=BK.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function xK(e,t,r,n){if(Qm.validateEnv(e),t===void 0)throw new Error(zm.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(zm.IDS_REQUIRED):new Error(zm.IDS_MUST_BE_ITERABLE);try{let s=Ky.listDBIs(e);Ky.initializeDBIs(e,t,s);let i=new vK,o,c=[],u=[];for(let f=0,E=r.length;f<E;f++)try{o=r[f];let h=e.dbis[t].get(o);if(!h||n&&h[HK]>n){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,PK.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<s.length;S++){let A=s[S];if(!h.hasOwnProperty(A)||A===t)continue;let I=e.dbis[A],w=h[A];if(w!=null)try{let B=Qm.getIndexedValues(w);if(B)for(let K=0,F=B.length;K<F;K++)I.remove(B[K],o)}catch{Wy.warn(`cannot delete from attribute: ${A}, ${w}:${o}`)}}});c.push(p),u.push(o),i.original_records.push(h)}catch(h){Wy.warn(h),i.skipped.push(o)}let _=[],l=await Promise.all(c);for(let f=0,E=l.length;f<E;f++)l[f]===!0?i.deleted.push(u[f]):(i.skipped.push(u[f]),_.push(f));let d=0;for(let f=0;f<_.length;f++){let E=_[f];i.original_records.splice(E-d,1),d++}return i.txn_time=Qm.getNextMonotonicTime(),i}catch(s){throw s}}a(xK,"deleteRecords");Qy.exports={deleteRecords:xK}});var Hc=T((pce,Xy)=>{"use strict";var zo=J(),FK=zy(),qK=$e(),{getSchemaPath:GK}=We(),kK=vc(),VK=V();Xy.exports=$K;async function $K(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(zo.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(zo.isEmptyOrZeroLength(e.hash_values)&&!zo.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][n];zo.isEmpty(u)||e.hash_values.push(u)}}if(zo.isEmptyOrZeroLength(e.hash_values))return Jy([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(zo.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=GK(e.schema,e.table),i=await qK.openEnvironment(s,e.table),o=await FK.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await kK(e,o)}catch(c){VK.error(`unable to write transaction due to ${c.message}`)}return Jy(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a($K,"lmdbDeleteRecords");function Jy(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(Jy,"createDeleteResponse")});var Xm=T((gce,jy)=>{"use strict";var YK=M(),Tce=wr();function Jm(e,t){let r=Object.create(null);if(t.length===1&&YK.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(Jm,"parseRow");function KK(e,t,r,n){let s=Jm(r,e);n.push(s)}a(KK,"searchAll");function WK(e,t,r,n){let s=Jm(r,e);n[t]=s}a(WK,"searchAllToMap");function QK(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(QK,"iterateDBI");function Yi(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(Yi,"pushResults");function zK(e,t,r,n,s,i){t.toString().endsWith(e)&&Yi(t,r,n,s,i)}a(zK,"endsWith");function JK(e,t,r,n,s,i){t.toString().includes(e)&&Yi(t,r,n,s,i)}a(JK,"contains");function XK(e,t,r,n,s,i){t>e&&Yi(t,r,n,s,i)}a(XK,"greaterThanCompare");function jK(e,t,r,n,s,i){t>=e&&Yi(t,r,n,s,i)}a(jK,"greaterThanEqualCompare");function ZK(e,t,r,n,s,i){t<e&&Yi(t,r,n,s,i)}a(ZK,"lessThanCompare");function eW(e,t,r,n,s,i){t<=e&&Yi(t,r,n,s,i)}a(eW,"lessThanEqualCompare");jy.exports={parseRow:Jm,searchAll:KK,searchAllToMap:WK,iterateDBI:QK,endsWith:zK,contains:JK,greaterThanCompare:XK,greaterThanEqualCompare:jK,lessThanCompare:ZK,lessThanEqualCompare:eW,pushResults:Yi}});var Jo=T((Nce,iI)=>{"use strict";var ti=$e(),Ace=V(),Br=wr(),P_=ht(),dt=Ir().LMDB_ERRORS_ENUM,Oce=J(),tW=M(),v_=Xm(),{parseRow:rW}=v_,bce=require("lmdb"),{OVERFLOW_MARKER:Zy,MAX_SEARCH_KEY_LENGTH:nW}=P_;function eI(e,t,r,n=!1,s=void 0,i=void 0){return Ki(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(eI,"iterateFullIndex");function xc(e,t,r,n,s,i=!1,o=void 0,c=void 0,u=!1,_=!1){return Ki(e,t,r,(l,d,f,E)=>{let I={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 E===r?(I.values=!1,d.getRange(I).map(w=>({value:w}))):d.getRange(I)})}a(xc,"iterateRangeBetween");function Ki(e,t,r,n){let s=e.database||e,i=ti.openDBI(s,r);i[P_.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&ti.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(Ki,"setupTransaction");function tI(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(Zy)){if(!s)if(r)s=ti.openDBI(e,r);else{let u=ti.listDBIs(e);for(let _=0,l=u.length;_<l&&(s=ti.openDBI(e,u[_]),!s[P_.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(tI,"getOverflowCheck");function sW(e,t,r,n=!1,s=void 0,i=void 0){if(Br.validateEnv(e),t===void 0)throw new Error(dt.HASH_ATTRIBUTE_REQUIRED);return Ki(e,t,t,(o,c,u)=>(B_(r),r=Fc(u,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(_=>rW(_.value,r))))}a(sW,"searchAll");function iW(e,t,r,n=!1,s=void 0,i=void 0){if(Br.validateEnv(e),t===void 0)throw new Error(dt.HASH_ATTRIBUTE_REQUIRED);B_(r),r=Fc(e.database||e,r);let o=new Map;for(let{key:c,value:u}of eI(e,t,t,n,s,i))o.set(c,v_.parseRow(u,r));return o}a(iW,"searchAllToMap");function oW(e,t,r=!1,n=void 0,s=void 0){if(Br.validateEnv(e),t===void 0)throw new Error(dt.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=eI(e,void 0,t,r,n,s),c=o.transaction,u=tI(c.database,c,void 0,t);for(let{key:_,value:l}of o){let d=u(_,l);i[d]===void 0&&(i[d]=[]),i[d].push(l)}return i}a(oW,"iterateDBI");function aW(e,t){if(Br.validateEnv(e),t===void 0)throw new Error(dt.HASH_ATTRIBUTE_REQUIRED);return ti.statDBI(e,t).entryCount}a(aW,"countAll");function cW(e,t,r,n,s=!1,i=void 0,o=void 0){return ri(e,r,n),Ki(e,t,r,(c,u,_,l)=>(n=Br.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(cW,"equals");function uW(e,t,r){return ri(e,t,r),ti.openDBI(e,t).getValuesCount(r)}a(uW,"count");function lW(e,t,r,n,s=!1,i=void 0,o=void 0){return ri(e,r,n),Ki(e,null,r,(c,u)=>{n=Br.convertKeyValueToWrite(n);let _=!0;typeof n=="number"&&(_=!1);let l;if(s===!0){let d;for(let f of u.getKeys({transaction:c,start:n}))if(!f.startsWith(n)){d=f;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(f=>{let{key:E}=f;if(E!==d){if(E.toString().startsWith(n))return f;if(_===!0)return l.DONE}}),l.filter(f=>f)}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(lW,"startsWith");function _W(e,t,r,n,s=!1,i=void 0,o=void 0){return rI(e,t,r,n,s,i,o,!0)}a(_W,"endsWith");function rI(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return ri(e,r,n),Ki(e,null,r,(u,_,l,d)=>{let f=tI(l,u,d,r);return o=Number.isInteger(o)?o:0,_.getKeys({transaction:u,end:s?!1:void 0,reverse:s}).flatMap(E=>{let h=E.toString();return h.endsWith(Zy)?_.getValues(E,{transaction:u}).map(p=>{let S=f(E,p);if(c?S.endsWith(n):S.includes(n))return{key:S,value:p}}).filter(p=>p):(c?h.endsWith(n):h.includes(n))?_[P_.DBI_DEFINITION_NAME].is_hash_attribute?{key:E,value:E}:_.getValues(E,{transaction:u}).map(p=>({key:E,value:p})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(rI,"contains");function dW(e,t,r,n,s=!1,i=void 0,o=void 0){ri(e,r,n);let c=typeof n,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),xc(e,t,r,n,u,s,i,o,!0,!1)}a(dW,"greaterThan");function fW(e,t,r,n,s=!1,i=void 0,o=void 0){ri(e,r,n);let c=typeof n,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),xc(e,t,r,n,u,s,i,o,!1,!1)}a(fW,"greaterThanEqual");function EW(e,t,r,n,s=!1,i=void 0,o=void 0){ri(e,r,n);let c=typeof n,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),xc(e,t,r,u,n,s,i,o,!1,!0)}a(EW,"lessThan");function hW(e,t,r,n,s=!1,i=void 0,o=void 0){ri(e,r,n);let c=typeof n,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),xc(e,t,r,u,n,s,i,o,!1,!1)}a(hW,"lessThanEqual");function mW(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(Br.validateEnv(e),r===void 0)throw new Error(dt.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(dt.START_VALUE_REQUIRED);if(s===void 0)throw new Error(dt.END_VALUE_REQUIRED);if(n=Br.convertKeyValueToWrite(n),s=Br.convertKeyValueToWrite(s),n>s)throw new Error(dt.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return xc(e,t,r,n,s,i,o,c)}a(mW,"between");function pW(e,t,r,n){Br.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(dt.HASH_ATTRIBUTE_REQUIRED);if(B_(r),r=Fc(s,r),n===void 0)throw new Error(dt.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=v_.parseRow(c,r)),o}a(pW,"searchByHash");function SW(e,t,r){Br.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(dt.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(dt.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(SW,"checkHashExists");function TW(e,t,r,n,s=[]){return sI(e,t,r,n,s),nI(e,t,r,n,s).map(i=>i[1])}a(TW,"batchSearchByHash");function gW(e,t,r,n,s=[]){sI(e,t,r,n,s);let i=new Map;for(let[o,c]of nI(e,t,r,n,s))i.set(o,c);return i}a(gW,"batchSearchByHashToMap");function nI(e,t,r,n,s=[]){return Ki(e,t,t,(i,o,c)=>{r=Fc(c,r);let u=r.length<3;return n.map(_=>{let l=c.dbis[t].get(_,{transaction:i,lazy:u});if(l)return[_,v_.parseRow(l,r)];s.push(_)}).filter(_=>_)})}a(nI,"batchHashSearch");function sI(e,t,r,n,s){if(Br.validateEnv(e),t===void 0)throw new Error(dt.HASH_ATTRIBUTE_REQUIRED);if(B_(r),n==null)throw new Error(dt.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(dt.IDS_MUST_BE_ITERABLE)}a(sI,"initializeBatchSearchByHash");function B_(e){if(!Array.isArray(e))throw e===void 0?new Error(dt.FETCH_ATTRIBUTES_REQUIRED):new Error(dt.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(B_,"validateFetchAttributes");function ri(e,t,r){if(Br.validateEnv(e),t===void 0)throw new Error(dt.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(dt.SEARCH_VALUE_REQUIRED);if(r?.length>nW)throw new Error(dt.SEARCH_VALUE_TOO_LARGE)}a(ri,"validateComparisonFunctions");function Fc(e,t){return t.length===1&&tW.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=ti.listDBIs(e)),t}a(Fc,"setGetWholeRowAttributes");iI.exports={searchAll:sW,searchAllToMap:iW,count:uW,countAll:aW,equals:cW,startsWith:lW,endsWith:_W,contains:rI,searchByHash:pW,setGetWholeRowAttributes:Fc,batchSearchByHash:TW,batchSearchByHashToMap:gW,checkHashExists:SW,iterateDBI:oW,greaterThan:dW,greaterThanEqual:fW,lessThan:EW,lessThanEqual:hW,between:mW}});var Xo=T((Ice,lI)=>{var oI=require("lodash"),aI=rt(),fe=require("joi"),RW=J(),{hdb_schema_table:qc,checkValidTable:cI,hdb_table:uI,hdb_database:H_}=Yn(),{handleHDBError:AW,hdb_errors:OW}=Z(),{getDatabases:bW}=(ge(),ee(xe)),{HTTP_STATUS_CODES:NW}=OW,yW=fe.object({database:H_,schema:H_,table:uI,search_attribute:qc,search_value:fe.any().required(),get_attributes:fe.array().min(1).items(fe.alternatives(qc,fe.object())).optional(),desc:fe.bool(),limit:fe.number().integer().min(1),offset:fe.number().integer().min(0)}),IW=fe.object({database:H_,schema:H_,table:uI,operator:fe.string().valid("and","or").default("and").lowercase(),offset:fe.number().integer().min(0),limit:fe.number().integer().min(1),get_attributes:fe.array().min(1).items(fe.alternatives(qc,fe.object())).optional(),sort:fe.object({attribute:fe.alternatives(qc,fe.array().min(1)),descending:fe.bool().optional()}).optional(),conditions:fe.array().min(1).items(fe.alternatives(fe.object({operator:fe.string().valid("and","or").default("and").lowercase(),conditions:fe.array()}),fe.object({search_attribute:fe.alternatives(qc,fe.array().min(1)),search_type:fe.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:fe.when("search_type",{switch:[{is:"equals",then:fe.any()},{is:"between",then:fe.array().items(fe.alternatives([fe.string(),fe.number()])).length(2)}],otherwise:fe.alternatives(fe.string(),fe.number())}).required()}))).required()});lI.exports=function(e,t){let r=null;switch(t){case"value":r=aI.validateBySchema(e,yW);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(cI("database",e.schema)),i(cI("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=aI.validateBySchema(e,IW);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=RW.checkGlobalSchemaTable(e.schema,e.table);if(s)return AW(new Error,s,NW.NOT_FOUND);let o=bW()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let u=a(l=>{for(let d=0,f=l.conditions.length;d<f;d++){let E=l.conditions[d];E.conditions?u(E):c.push(E.search_attribute)}},"addConditions");t==="conditions"&&u(e);let _=oI.filter(c,l=>l!=="*"&&l.attribute!=="*"&&!Array.isArray(l)&&!oI.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 jm=T((Cce,_I)=>{"use strict";var wW=$e(),CW=Xo(),{getSchemaPath:LW}=We();_I.exports=DW;function DW(e){let t=CW(e,"hashes");if(t)throw t;let r=LW(e.schema,e.table);return wW.openEnvironment(r,e.table)}a(DW,"initialize")});var Zm=T((Dce,dI)=>{"use strict";var MW=Jo(),UW=jm();dI.exports=PW;async function PW(e){let t=await UW(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return MW.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(PW,"lmdbGetDataByHash")});var jo=T((Uce,fI)=>{"use strict";var ep=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};fI.exports=ep});var hI=T((Bce,EI)=>{"use strict";var vce=jo(),vW=Jo(),BW=jm();EI.exports=HW;async function HW(e){let t=await BW(e),r=global.hdb_schema[e.schema][e.table];return vW.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(HW,"lmdbSearchByHash")});var Jn=T((xce,mI)=>{"use strict";var tp=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}};mI.exports=tp});var x_=T((qce,AI)=>{"use strict";var Jt=Jo(),xW=$e(),FW=J(),Ee=ht(),Wi=M(),qW=Mi(),pI=Ir().LMDB_ERRORS_ENUM,{getSchemaPath:GW}=We(),Rs=Wi.SEARCH_WILDCARDS;async function kW(e,t,r){let n;e.schema===Wi.SYSTEM_SCHEMA_NAME?n=qW[e.table]:n=global.hdb_schema[e.schema][e.table];let s=RI(e,n.hash_attribute,r,t);return TI(e,s,n.hash_attribute,r)}a(kW,"prepSearch");async function TI(e,t,r,n){let s=GW(e.schema,e.table),i=await xW.openEnvironment(s,e.table),o=gI(i,e,t,r),c=o.transaction||i;if([Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,Ee.SEARCH_TYPES.SEARCH_ALL,Ee.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(VW(e,r)===!1){let l=e.search_attribute;if(l===r)return n?SI(o,()=>!0):o.map(f=>({[r]:f.key}));let d=a(f=>({[r]:f.value,[l]:f.key}),"toObject");return n?SI(o,d):o.map(d)}let _=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return n===!0?Jt.batchSearchByHashToMap(c,r,e.get_attributes,_):Jt.batchSearchByHash(c,r,e.get_attributes,_)}a(TI,"executeSearch");function gI(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 Ee.SEARCH_TYPES.EQUALS:s=Jt.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.CONTAINS:s=Jt.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.ENDS_WITH:case Ee.SEARCH_TYPES._ENDS_WITH:s=Jt.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.STARTS_WITH:case Ee.SEARCH_TYPES._STARTS_WITH:s=Jt.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Jt.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Jt.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case Ee.SEARCH_TYPES.SEARCH_ALL:return Jt.searchAll(e,n,t.get_attributes,o,c,u);case Ee.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Jt.searchAllToMap(e,n,t.get_attributes,o,c,u);case Ee.SEARCH_TYPES.BETWEEN:s=Jt.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case Ee.SEARCH_TYPES.GREATER_THAN:case Ee.SEARCH_TYPES._GREATER_THAN:s=Jt.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.GREATER_THAN_EQUAL:case Ee.SEARCH_TYPES._GREATER_THAN_EQUAL:s=Jt.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.LESS_THAN:case Ee.SEARCH_TYPES._LESS_THAN:s=Jt.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.LESS_THAN_EQUAL:case Ee.SEARCH_TYPES._LESS_THAN_EQUAL:s=Jt.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return s}a(gI,"searchByType");function SI(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(SI,"createMapFromIterable");function VW(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(VW,"checkToFetchMore");function RI(e,t,r,n){if(FW.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),Rs.indexOf(s)>-1)return r===!0?Ee.SEARCH_TYPES.SEARCH_ALL_TO_MAP:Ee.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(Rs[0])<0&&s.indexOf(Rs[1])<0)return c===!0?r===!0?Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:Ee.SEARCH_TYPES.EQUALS;if(Rs.indexOf(i)>=0&&Rs.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),Ee.SEARCH_TYPES.CONTAINS;if(Rs.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),Ee.SEARCH_TYPES.ENDS_WITH;if(Rs.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),Ee.SEARCH_TYPES.STARTS_WITH;if(s.includes(Rs[0])||s.includes(Rs[1]))return Ee.SEARCH_TYPES.EQUALS;throw new Error(pI.UNKNOWN_SEARCH_TYPE)}else switch(n){case Wi.VALUE_SEARCH_COMPARATORS.BETWEEN:return Ee.SEARCH_TYPES.BETWEEN;case Wi.VALUE_SEARCH_COMPARATORS.GREATER:return Ee.SEARCH_TYPES.GREATER_THAN;case Wi.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return Ee.SEARCH_TYPES.GREATER_THAN_EQUAL;case Wi.VALUE_SEARCH_COMPARATORS.LESS:return Ee.SEARCH_TYPES.LESS_THAN;case Wi.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return Ee.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(pI.UNKNOWN_SEARCH_TYPE)}}a(RI,"createSearchTypeFromSearchObject");AI.exports={executeSearch:TI,createSearchTypeFromSearchObject:RI,prepSearch:kW,searchByType:gI}});var bI=T((Vce,OI)=>{"use strict";var kce=Jn(),$W=Xo(),YW=J(),KW=M(),WW=x_();OI.exports=QW;function QW(e,t){if(!YW.isEmpty(t)&&KW.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=$W(e,"value");if(n)throw n;return WW.prepSearch(e,t,!0)}a(QW,"lmdbGetDataByValue")});var Gc=T((Kce,NI)=>{"use strict";var Yce=Jn(),zW=Xo(),JW=J(),XW=M(),jW=x_();NI.exports=ZW;async function ZW(e,t){if(!JW.isEmpty(t)&&XW.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=zW(e,"value");if(n)throw n;return jW.prepSearch(e,t,!1)}a(ZW,"lmdbSearchByValue")});var II=T((zce,yI)=>{"use strict";var Qce=ht(),rp=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}},np=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},sp=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};yI.exports={SearchByConditionsObject:rp,SearchCondition:np,SortAttribute:sp}});var MI=T((Zce,DI)=>{"use strict";var Xce=II().SearchByConditionsObject,eQ=Jn(),tQ=Xo(),ip=Jo(),F_=ht(),{Resource:jce}=(bn(),ee(op)),LI=x_(),rQ=Xm(),nQ=require("lodash"),{getSchemaPath:sQ}=We(),wI=$e(),{handleHDBError:iQ,hdb_errors:oQ}=Z(),{HTTP_STATUS_CODES:aQ}=oQ,cQ=1e8;DI.exports=uQ;async function uQ(e){let t=tQ(e,"conditions");if(t)throw iQ(t,t.message,aQ.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=sQ(e.schema,e.table),n=await wI.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)wI.openDBI(n,_.search_attribute);let i=nQ.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let l=_.search_type;l===F_.SEARCH_TYPES.EQUALS?_.estimated_count=ip.count(n,_.search_attribute,_.search_value):l===F_.SEARCH_TYPES.CONTAINS||l===F_.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=cQ}return _.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await CI(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(LI.filterByType),d=l.length,f=ip.setGetWholeRowAttributes(n,e.get_attributes);u=c.map(E=>_.get(E,{transaction:o,lazy:!0})),d>0&&(u=u.filter(E=>{for(let h=0;h<d;h++)if(!l[h](E))return!1;return!0})),(e.offset||e.limit!==void 0)&&(u=u.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),u=u.map(E=>rQ.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await CI(o,e,f,s.hash_attribute);c=c.concat(E)}let _=new Set,l=e.offset||0;c=c.filter(d=>_.has(d)?!1:(_.add(d),!0)).slice(l,e.limit&&e.limit+l),u=ip.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(uQ,"lmdbSearchByConditions");async function CI(e,t,r,n){let s=new eQ(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===F_.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,LI.searchByType(e,s,i,n).map(o=>o.value)}a(CI,"executeConditionSearch")});var kc=T((tue,UI)=>{"use strict";var lQ=M().OPERATIONS_ENUM,ap=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=lQ.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};UI.exports=ap});var cp=T((nue,GI)=>{"use strict";var HI=Jn(),xI=kc(),FI=Gc(),qI=Hc(),ar=M(),PI=J(),vI=$e(),{getTransactionAuditStorePath:_Q,getSchemaPath:dQ}=We(),BI=V();GI.exports=fQ;async function fQ(e){try{if(PI.isEmpty(global.hdb_schema[e.schema])||PI.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await EQ(e),await hQ(e);let t=dQ(e.schema,e.table);try{await vI.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")BI.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=_Q(e.schema,e.table);await vI.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")BI.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(fQ,"lmdbDropTable");async function EQ(e){let t=new HI(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,ar.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[ar.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await FI(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 xI(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await qI(s)}a(EQ,"deleteAttributesFromSystem");async function hQ(e){let t=new HI(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,ar.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[ar.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,ar.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,ar.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await FI(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 xI(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await qI(s)}catch(i){throw i}}a(hQ,"dropTableFromSystem")});var VI=T((iue,kI)=>{"use strict";var mQ=require("fs-extra"),pQ=Jn(),SQ=jo(),TQ=kc(),gQ=cp(),RQ=Hc(),AQ=Zm(),OQ=Gc(),As=M(),{getSchemaPath:bQ}=We(),{handleHDBError:NQ,hdb_errors:yQ}=Z(),{HDB_ERROR_MSGS:IQ,HTTP_STATUS_CODES:wQ}=yQ;kI.exports=CQ;async function CQ(e){let t;try{t=await LQ(e.schema);let r=new pQ(As.SYSTEM_SCHEMA_NAME,As.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,As.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[As.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await OQ(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await gQ(c)}catch(u){if(u.message!=="invalid environment")throw u}}let s=new TQ(As.SYSTEM_SCHEMA_NAME,As.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await RQ(s);let i=bQ(t);await mQ.remove(i)}catch(r){throw r}}a(CQ,"lmdbDropSchema");async function LQ(e){let t=new SQ(As.SYSTEM_SCHEMA_NAME,As.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[As.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await AQ(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw NQ(new Error,IQ.SCHEMA_NOT_FOUND(e),wQ.NOT_FOUND,void 0,void 0,!0);return n}a(LQ,"validateDropSchema")});var lp=T((aue,$I)=>{"use strict";var up=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};$I.exports=up});var KI=T((lue,YI)=>{"use strict";var DQ=require("fs-extra"),q_=$e(),{getTransactionAuditStorePath:MQ}=We(),_p=ht(),uue=lp();YI.exports=UQ;async function UQ(e){let t;try{let r=MQ(e.schema,e.table);await DQ.mkdirp(r),t=await q_.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{q_.createDBI(t,_p.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),q_.createDBI(t,_p.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),q_.createDBI(t,_p.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(UQ,"createTransactionsAuditEnvironment")});var JI=T((due,zI)=>{"use strict";var dp=M(),WI=$e(),PQ=xo(),{getSystemSchemaPath:vQ,getSchemaPath:BQ}=We(),HQ=Mi(),xQ=u_(),fp=c_(),FQ=V(),qQ=KI(),hp=HQ.hdb_table,QI=[];for(let e=0;e<hp.attributes.length;e++)QI.push(hp.attributes[e].attribute);zI.exports=GQ;async function GQ(e,t){let r=BQ(t.schema,t.table),n=new fp(t.schema,t.table,dp.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new fp(t.schema,t.table,dp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new fp(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await WI.createEnvironment(r,t.table),e!==void 0){let o=await WI.openEnvironment(vQ(),dp.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await PQ.insertRecords(o,hp.hash_attribute,QI,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await Ep(n),await Ep(s),await Ep(i)}await qQ(t)}catch(o){throw o}}a(GQ,"lmdbCreateTable");async function Ep(e){try{await xQ(e)}catch(t){FQ.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Ep,"createAttribute")});var jI=T((Eue,XI)=>{"use strict";var kQ=Oc(),VQ=wc(),$Q=M_(),Vc=M(),YQ=xo().updateRecords,KQ=$e(),{getSchemaPath:WQ}=We(),QQ=vc(),zQ=V();XI.exports=JQ;async function JQ(e){try{let{schema_table:t,attributes:r}=kQ(e);VQ(e,r,t.hash_attribute),e.schema!==Vc.SYSTEM_SCHEMA_NAME&&(r.includes(Vc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Vc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Vc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Vc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await $Q(e.hdb_auth_header,t,r),s=WQ(e.schema,e.table),i=await KQ.openEnvironment(s,e.table),o=await YQ(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await QQ(e,o)}catch(c){zQ.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(JQ,"lmdbUpdateRecords")});var ew=T((mue,ZI)=>{"use strict";var XQ=M().OPERATIONS_ENUM,mp=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=XQ.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};ZI.exports=mp});var rw=T((Tue,tw)=>{"use strict";var Sue=ew(),jQ=Oc(),ZQ=wc(),ez=M_(),$c=M(),tz=xo().upsertRecords,rz=$e(),{getSchemaPath:nz}=We(),sz=vc(),iz=V(),{handleHDBError:oz,hdb_errors:az}=Z();tw.exports=cz;async function cz(e){let t;try{t=jQ(e)}catch(u){throw oz(u,u.message,az.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;ZQ(e,n,r.hash_attribute),e.schema!==$c.SYSTEM_SCHEMA_NAME&&(n.includes($c.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push($c.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes($c.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push($c.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await ez(e.hdb_auth_header,r,n),i=nz(e.schema,e.table),o=await rz.openEnvironment(i,e.table),c=await tz(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await sz(e,c)}catch(u){iz.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(cz,"lmdbUpsertRecords")});var sw=T((Rue,nw)=>{"use strict";var pp=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};nw.exports=pp});var ow=T((Oue,iw)=>{"use strict";var Sp=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}};iw.exports=Sp});var uw=T((yue,cw)=>{"use strict";var Tp=$e(),{getTransactionAuditStorePath:uz}=We(),Nue=sw(),Yc=ht(),lz=J(),aw=ow(),_z=require("util").promisify,dz=_z(setTimeout),fz=1e4,Ez=100;cw.exports=hz;async function hz(e){let t=uz(e.schema,e.table),r=await Tp.openEnvironment(t,e.table,!0),n=Tp.listDBIs(r);Tp.initializeDBIs(r,Yc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new aw;do s=await mz(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 dz(Ez);while(s.transactions_deleted>0);return i}a(hz,"deleteAuditLogsBefore");async function mz(e,t){let r=new aw;try{let n=e.dbis[Yc.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[Yc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];lz.isEmpty(c)||(s=e.dbis[Yc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)s=e.dbis[Yc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>fz)break}return await s,r}catch(n){throw n}}a(mz,"deleteTransactions")});var _w=T((wue,lw)=>{"use strict";var gp=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};lw.exports=gp});var fw=T((Due,dw)=>{"use strict";var pz=Jn(),Sz=kc(),Lue=_w(),Xn=M(),Tz=J(),Rp=$e(),gz=Mi(),Rz=Gc(),Az=Hc(),{getSchemaPath:Oz}=We();dw.exports=bz;async function bz(e,t=!0){let r;e.schema===Xn.SYSTEM_SCHEMA_NAME?r=gz[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await yz(e),s=Oz(e.schema,e.table),i=await Rp.openEnvironment(s,e.table);return t===!0&&await Nz(e,i,r.hash_attribute),Rp.dropDBI(i,e.attribute),n}a(bz,"lmdbDropAttribute");async function Nz(e,t,r){let n=Rp.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(Nz,"removeAttributeFromAllObjects");async function yz(e){let t=new pz(Xn.SYSTEM_SCHEMA_NAME,Xn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Xn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Xn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Xn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await Rz(t)).filter(o=>o[Xn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(Tz.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[Xn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new Sz(Xn.SYSTEM_SCHEMA_NAME,Xn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return Az(i)}a(yz,"dropAttributeFromSystem")});var Tw=T((Pue,Sw)=>{"use strict";var Ap=$e(),Zo=ht(),Uue=wr(),Op=M(),Ew=J(),{getTransactionAuditStorePath:Iz}=We(),wz=Jo(),G_=Wo(),Cz=V();Sw.exports=Lz;async function Lz(e){let t=Iz(e.schema,e.table),r=await Ap.openEnvironment(t,e.table,!0),n=Ap.listDBIs(r);Ap.initializeDBIs(r,Zo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case Op.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return hw(r,e.search_values);case Op.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,Mz(r,e.search_values,s);case Op.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return Dz(r,e.search_values);default:return hw(r)}}a(Lz,"readAuditLog");function hw(e,t=[0,Date.now()]){Ew.isEmpty(t[0])&&(t[0]=0),Ew.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Zo.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 G_,s))}a(hw,"searchTransactionsByTimestamp");function Dz(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[Zo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,pw(e,i))}return Object.fromEntries(r)}a(Dz,"searchTransactionsByUsername");function Mz(e,t,r){let n=new Map;for(let c=0,u=t.length;c<u;c++){let _=t[c],l=wz.equals(e,Zo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Zo.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,_);for(let{value:d}of l){let f=Number(d);n.has(f)?n.get(f).push(_.toString()):n.set(f,[_.toString()])}}let s=Array.from(n.keys()),i=pw(e,s),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],_=u.timestamp,l=n.get(_);mw(u,"records",r,l,o),mw(u,"original_records",r,l,o)}return Object.fromEntries(o)}a(Mz,"searchTransactionsByHashValues");function mw(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 G_(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new G_(e.operation,e.user_name,i,void 0);_[t]=[c],s.set(u,[_])}}}a(mw,"loopRecords");function pw(e,t){let r=[];try{let n=e.dbis[Zo.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 G_,i);r.push(o)}}catch(i){Cz.warn(i)}return r}catch(n){throw n}}a(pw,"batchSearchTransactions")});var Rw=T((xue,gw)=>{"use strict";var{getSchemaPath:Bue}=We(),Hue=$e(),{database:Uz}=(ge(),ee(xe));gw.exports={writeTransaction:Pz};async function Pz(e,t,r){return Uz({database:e,table:t}).transaction(r)}a(Pz,"writeTransaction")});var Nw=T((que,bw)=>{"use strict";var{getSchemaPath:Aw}=We(),Ow=$e();bw.exports={flush:vz,resetReadTxn:Bz};async function vz(e,t){return(await Ow.openEnvironment(Aw(e,t),t.toString())).flushed}a(vz,"flush");async function Bz(e,t){try{(await Ow.openEnvironment(Aw(e,t),t.toString())).resetReadTxn()}catch{}}a(Bz,"resetReadTxn")});var Cw=T((kue,ww)=>{"use strict";var{Readable:Hz}=require("stream"),{getDatabases:xz}=(ge(),ee(xe)),{readSync:Fz,openSync:qz,createReadStream:yw}=require("fs"),{open:Gz}=require("lmdb"),Iw=jl(),kz=e_(),{AUDIT_STORE_OPTIONS:Vz}=(Li(),ee(Lw)),{INTERNAL_DBIS_NAME:$z,AUDIT_STORE_NAME:Yz}=ht();ww.exports=Wz;var bp=32768,Kz=100;async function Wz(e){let t=e.database||e.schema||"data",r=xz()[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=Gz({noSync:!0,maxDbs:kz.MAX_DBS}),f,E=d.openDB($z,new Iw(!1)),h=l.useReadTransaction(),p=0,S=a(async function(I,w){w.encoding="binary",w.encoder=void 0;let B=d.openDB(I,w),K=l.openDB(I,w);for(let{key:F,version:P,value:Q}of K.getRange({transaction:h,versions:K.useVersions}))f=B.put(F,Q,P),p++%Kz===0&&(await new Promise(Y=>setTimeout(Y,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:I,value:w}of l.getRange({transaction:h,start:!1}))if(s.some(B=>I.startsWith?.(B+"/"))){E.put(I,w);let[,B]=I.split("/"),K=!B,F=new Iw(!K,K);await S(I,F)}e.include_audit&&await S(Yz,Object.assign({},Vz)),await f;let A=yw(d.path);return A.headers=u(),A.on("close",()=>{h.done(),d.close()}),A}let o=r[Object.keys(r)[0]].primaryStore,c=qz(o.path);return o.transaction(()=>{let _=Buffer.alloc(bp);Fz(c,_,0,bp),o.resetReadTxn();let l=o.useReadTransaction();l.renew();let d=yw(null,{fd:c,start:bp}),f=new Hz.from(async function*(){yield _;for await(let E of d)l.openTimer&&(l.openTimer=0),yield E;l.done()}());return f.headers=u(),f});function u(){let _=new Map;return _.set("content-type","application/octet-stream"),_.set("content-disposition",`attachment; filename="${t}"`),_.set("date",n),_}}a(Wz,"getBackup")});var Uw=T(($ue,Mw)=>{"use strict";var Qz=V(),{handleHDBError:zz}=Z(),Jz=KO(),Xz=u_(),jz=Km(),Zz=Vy(),eJ=Hc(),tJ=Zm(),rJ=hI(),nJ=bI(),sJ=Gc(),iJ=MI(),oJ=VI(),aJ=JI(),cJ=jI(),uJ=rw(),lJ=uw(),_J=cp(),dJ=fw(),fJ=Tw(),EJ=Rw(),Dw=Nw(),hJ=Cw(),Np=class extends Jz{static{a(this,"LMDBBridge")}async searchByConditions(t){return iJ(t)}async getDataByHash(t){return await tJ(t)}async searchByHash(t){return await rJ(t)}async getDataByValue(t,r){return await nJ(t,r)}async searchByValue(t){return await sJ(t)}async createSchema(t){return await Zz(t)}async dropSchema(t){return await oJ(t)}async createTable(t,r){return await aJ(t,r)}async dropTable(t){return await _J(t)}async createAttribute(t){return await Xz(t)}async createRecords(t){return await jz(t)}async updateRecords(t){return await cJ(t)}async upsertRecords(t){try{return await uJ(t)}catch(r){throw zz(r,null,null,Qz.ERR,r)}}async deleteRecords(t){return await eJ(t)}async dropAttribute(t){return await dJ(t)}async deleteAuditLogsBefore(t){return await lJ(t)}async readAuditLog(t){return await fJ(t)}writeTransaction(t,r,n){return EJ.writeTransaction(t,r,n)}flush(t,r){return Dw.flush(t,r)}resetReadTxn(t,r){return Dw.resetReadTxn(t,r)}getBackup(t){return hJ(t)}};Mw.exports=Np});function TJ(){SJ=setInterval(function(){for(let e of yp)if(e.stale){let t=e[Re]?.url;Pw.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},pJ).unref()}var Ip,Pw,mJ,yp,Qi,k_,pJ,SJ,wp=Ae(()=>{Ip=v(wr()),Pw=v(V());bn();mJ=100,yp=new Set,Qi=class{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;open=!0;getReadTxn(){if(this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn)return this.readTxn;if(!this.open)throw new Error("Can not start a read on a transaction that is no longer open");return this.readTxnsUsed=1,this.readTxn=this.lmdbDb.useReadTransaction(),yp.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(yp.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}addWrite(t){if(!this.open&&!this.autoCommitMode)throw new Error("Can not use a transaction that is no longer open");this.writes.push(t),this.autoCommitMode&&this.commit()}removeWrite(t){let r=this.writes.indexOf(t);r>-1&&(this.writes[r]=null)}commit(t={}){let r=this.timestamp;r||(r=this.timestamp=t.timestamp=t.timestamp||(0,Ip.getNextMonotonicTime)());let n=t.retries||0;if(this.validated<this.writes.length)try{let l=this.validated;this.validated=this.writes.length;for(let f=l;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let d;for(let f=l;f<this.validated;f++){let E=this.writes[f];E&&(E.before||E.beforeIntermediate)&&(d=!0)}if(d)return(async()=>{try{for(let f=0;f<2;f++){let E;for(let h=l;h<this.validated;h++){let p=this.writes[h];if(!p)continue;let S=p[f===0?"before":"beforeIntermediate"];if(S){let A=S();E?E.push?E.push(A):E=[E,A]:E=A}}E&&await(E.push?Promise.all(E):E)}}catch(f){throw this.abort(),f}return this.commit(t)})()}catch(l){throw this.abort(),l}n||this.doneReadTxn(),t?.prepared?.(),this.open=!1;let s,i=[],o=0;this.writes=this.writes.filter(l=>l);let c=a(l=>{l.commit(r,l.entry,n)},"doWrite"),u=a(()=>{let l=this.writes[o++];if(l)if(l.key){n>0&&(l.entry=l.store.getEntry(l.key));let d=l.store.ifVersion(l.key,l.entry?.version??null,u);s=s||d}else u();else for(let d of this.writes)c(d)},"nextCondition");if(this.writes.length<mJ>>n?u():s=this.writes[0].store.transaction(()=>{for(let l of this.writes)l.entry=l.store.getEntry(l.key),c(l);return!0}),s)return s.then(l=>l?(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))):(t?t.retries=n+1:t={retries:1},this.commit(t)));let _={txnTime:r};if(this.next){let l=this.next?.commit(t);if(l?.then)return l?.then(d=>({txnTime:r,next:d}));_.next=l}return _}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=!1,this.writes=[]}},k_=class extends Qi{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,Ip.getNextMonotonicTime)())}getReadTxn(){}},pJ=3e4;a(TJ,"startMonitoringTxns");TJ()});function Qe(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let n=e.transaction=new Qi;e.timestamp&&(n.timestamp=e.timestamp),n[Re]=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(r?.resetTransaction?{prepared(){n.autoCommitMode=!0}}:{});return u.then?u.then(()=>c):c}function o(c){throw n.abort({}),c}}var vw,zi=Ae(()=>{vw=require("../index");bn();wp();a(Qe,"transaction");(0,vw._assignPackageExport)("transaction",Qe);Qe.commit=function(e){let t=(e[Re]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Qe.abort=function(e){let t=(e[Re]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var $w={};Ve($w,{ResourceBridge:()=>Dp});function Mp({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 Hw(e,t){let r=jn(e),n=Mp(e,r);if(!r)throw new Dn.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;Qe(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&&$_(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 jn(e){let t=e.database||e.schema||RJ,r=Mn()[t];if(!r)throw(0,Dn.handleHDBError)(new Error,gJ.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function xw(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*Fw(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 qw,V_,Dn,Gw,kw,Un,Cp,Lp,Vw,gJ,RJ,AJ,OJ,Bw,Dp,Yw=Ae(()=>{"use strict";qw=v(Uw()),V_=v(Xo()),Dn=v(Z());ge();Gw=v(Oc()),kw=v(wc()),Un=v(M()),Cp=v(gs()),Lp=v(Ln()),Vw=v(J());zi();Y_();({HDB_ERROR_MSGS:gJ}=Dn.hdb_errors),RJ="data",AJ=1e4,OJ=10,Dp=class extends qw.default{static{a(this,"ResourceBridge")}constructor(t){super(t),Bw=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,V_.default)(t,"conditions");if(r)throw(0,Dn.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=jn(t);if(!n)throw new Dn.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:Mp(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 Dn.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}]}_t({database:r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration})}async createAttribute(t){return await jn(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=jn(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){jn(t).dropTable()}createSchema(t){return Kc({database:t.schema,table:null}),Cp.signalSchemaChange(new Lp.SchemaEventMsg(process.pid,Un.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await Up(t.schema),Cp.signalSchemaChange(new Lp.SchemaEventMsg(process.pid,Un.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,Bw.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,Gw.default)(t);(0,kw.default)(t,n,r.primaryKey);let s,i=Mn()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return Qe(o,async c=>{if(!i.schemaDefined){s=[];for(let l of n)i.attributes.find(f=>f.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=$_(d));for(let f in l)if(Object.prototype.hasOwnProperty.call(l,f)){let E=l[f];if(typeof E=="function")try{let h=E([[d]]);Array.isArray(h)&&(E=h[0].func_val,l[f]=E)}catch(h){throw h.message+="Trying to set key "+f+" on object"+JSON.stringify(l),h}}if(d)for(let f in d)Object.prototype.hasOwnProperty.call(l,f)||(l[f]=d[f]);await i.put(l,o),u.push(l[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:u,new_attributes:s,skipped_hashes:_}})}async deleteRecords(t){let r=Mn()[t.schema][t.table],n={user:t.hdb_user};return Qe(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 xw(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=Mn()[t.schema][t.table];if(!r.createdTimeProperty)throw new Dn.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:Un.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,Vw.async_set_timeout)(OJ),u=[],s=!0},"chunkDelete");for await(let l of n)u.push(l[r.primaryKey]),c++,c%AJ===0&&await _();return u.length>0&&await _(),s?xw(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,V_.default)(t,"hashes");if(r)throw r;return Hw(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of Hw(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&Un.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,V_.default)(t,"value");if(n)throw n;let s=jn(t);if(!s)throw new Dn.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===Un.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:Mp(t,s)})}async getDataByValue(t,r){let n=new Map,s=jn(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){jn({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return jn(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=jn(t),n={};switch(t.search_type){case Un.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 Un.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let s=t.search_values;for await(let i of Fw(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return Fw(r,t.search_values?.[0],t.search_values?.[1])}}};a(Mp,"getSelect");a(Hw,"getRecords");a(jn,"getTable");a(xw,"createDeleteResponse");a(Fw,"groupRecordsInHistory")});var In=T((sle,Kw)=>{"use strict";var{ResourceBridge:bJ}=(Yw(),ee($w)),NJ=j();NJ.initSync();var K_;function yJ(){return K_||(K_=new bJ,K_)}a(yJ,"getBridge");Kw.exports=yJ()});var Jw=T((ole,zw)=>{"use strict";var Ww=require("lodash"),Wc=require("mathjs"),IJ=require("jsonata"),Qw=J();zw.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?Ww.uniqWith(e,Ww.isEqual):e,searchJSON:wJ,mad:Qc.bind(null,Wc.mad),mean:Qc.bind(null,Wc.mean),mode:Qc.bind(null,Wc.mode),prod:Qc.bind(null,Wc.prod),median:Qc.bind(null,Wc.median)};function Qc(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(Qc,"aggregateFunction");function wJ(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(Qw.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),Qw.isEmpty(this.__ala__.res[r])){let n=IJ(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(wJ,"searchJSON")});var jw=T((cle,Xw)=>{"use strict";var pt=require("moment"),Pp="YYYY-MM-DDTHH:mm:ss.SSSZZ";pt.suppressDeprecationWarnings=!0;Xw.exports={current_date:()=>pt().utc().format("YYYY-MM-DD"),current_time:()=>pt().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return pt(e).utc().format("YYYY");case"month":return pt(e).utc().format("MM");case"day":return pt(e).utc().format("DD");case"hour":return pt(e).utc().format("HH");case"minute":return pt(e).utc().format("mm");case"second":return pt(e).utc().format("ss");case"millisecond":return pt(e).utc().format("SSS");default:break}},date:e=>pt(e).utc().format(Pp),date_format:(e,t)=>pt(e).utc().format(t),date_add:(e,t,r)=>pt(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>pt(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let n=pt(e).utc(),s=pt(t).utc();return r?n.diff(s,r,!0):n.diff(s)},now:()=>pt().utc().valueOf(),get_server_time:()=>pt().format(Pp),offset_utc:(e,t)=>pt(e).utc().utcOffset(t).format(Pp)}});var rC=T((ule,tC)=>{"use strict";var CJ=require("@turf/area"),LJ=require("@turf/length"),DJ=require("@turf/circle"),MJ=require("@turf/difference"),UJ=require("@turf/distance"),PJ=require("@turf/boolean-contains"),vJ=require("@turf/boolean-equal"),BJ=require("@turf/boolean-disjoint"),HJ=require("@turf/helpers"),Zw=M(),me=J(),Os=V();tC.exports={geoArea:xJ,geoLength:FJ,geoCircle:qJ,geoDifference:GJ,geoDistance:eC,geoNear:kJ,geoContains:VJ,geoEqual:$J,geoCrosses:YJ,geoConvert:KJ};function xJ(e){if(me.isEmpty(e))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e));try{return CJ.default(e)}catch(t){return Os.trace(t,e),NaN}}a(xJ,"geoArea");function FJ(e,t){if(me.isEmpty(e))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e));try{return LJ.default(e,{units:t||"kilometers"})}catch(r){return Os.trace(r,e),NaN}}a(FJ,"geoLength");function qJ(e,t,r){if(me.isEmpty(e))return NaN;if(me.isEmpty(t))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e));try{return DJ.default(e,t,{units:r||"kilometers"})}catch(n){return Os.trace(n,e,t),NaN}}a(qJ,"geoCircle");function GJ(e,t){if(me.isEmpty(e))return NaN;if(me.isEmpty(t))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return MJ(e,t)}catch(r){return Os.trace(r,e,t),NaN}}a(GJ,"geoDifference");function eC(e,t,r){if(me.isEmpty(e))return NaN;if(me.isEmpty(t))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return UJ.default(e,t,{units:r||"kilometers"})}catch(n){return Os.trace(n,e,t),NaN}}a(eC,"geoDistance");function kJ(e,t,r,n){if(me.isEmpty(e)||me.isEmpty(t))return!1;if(me.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return eC(e,t,n)<=r}catch(s){return Os.trace(s,e,t),!1}}a(kJ,"geoNear");function VJ(e,t){if(me.isEmpty(e)||me.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return PJ.default(e,t)}catch(r){return Os.trace(r,e,t),!1}}a(VJ,"geoContains");function $J(e,t){if(me.isEmpty(e)||me.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return vJ.default(e,t)}catch(r){return Os.trace(r,e,t),!1}}a($J,"geoEqual");function YJ(e,t){if(me.isEmpty(e)||me.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return!BJ.default(e,t)}catch(r){return Os.trace(r,e,t),!1}}a(YJ,"geoCrosses");function KJ(e,t,r){if(me.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(me.isEmpty(t))throw new Error("geo_type is required");if(me.isEmpty(Zw.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(Zw.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=me.autoCastJSON(e)),HJ[t](e,r)}a(KJ,"geoConvert")});var W_=T((_le,nC)=>{var Ji=Jw(),Hr=jw(),Zn=rC();nC.exports=e=>{e.aggr.mad=e.aggr.MAD=Ji.mad,e.aggr.mean=e.aggr.MEAN=Ji.mean,e.aggr.mode=e.aggr.MODE=Ji.mode,e.aggr.prod=e.aggr.PROD=Ji.prod,e.aggr.median=e.aggr.MEDIAN=Ji.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Ji.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Ji.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Hr.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Hr.current_time,e.fn.extract=e.fn.EXTRACT=Hr.extract,e.fn.date=e.fn.DATE=Hr.date,e.fn.date_format=e.fn.DATE_FORMAT=Hr.date_format,e.fn.date_add=e.fn.DATE_ADD=Hr.date_add,e.fn.date_sub=e.fn.DATE_SUB=Hr.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Hr.date_diff,e.fn.now=e.fn.NOW=Hr.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Hr.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Hr.get_server_time,e.fn.getdate=e.fn.GETDATE=Hr.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Hr.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Zn.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Zn.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Zn.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Zn.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Zn.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Zn.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Zn.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Zn.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Zn.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Zn.geoNear}});var aC=T((dle,oC)=>{"use strict";var zc=require("lodash"),cr=require("alasql");cr.options.cache=!1;var WJ=W_(),sC=require("clone"),Q_=require("recursive-iterator"),ue=V(),we=J(),ea=In(),QJ=M(),{hdb_errors:zJ}=Z(),{getDatabases:iC}=(ge(),ee(xe)),JJ="IS NULL",Pn="There was a problem performing this search. Please check the logs and try again.";WJ(cr);var vp=class{static{a(this,"SQLSearch")}constructor(t,r){if(we.isEmpty(t))throw ue.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),we.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!we.isEmptyOrZeroLength(n))return ue.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw ue.error("Error thrown from checkEmptySQL in SQLSearch class method search."),ue.error(n),new Error(Pn)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw ue.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),ue.error(n),new Error(Pn)}if(Object.keys(this.data).length===0)return ue.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw ue.error("Error thrown from processJoins in SQLSearch class method search."),ue.error(n),new Error(Pn)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw ue.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),ue.error(n),new Error(Pn)}try{return t=await this._finalSQL(),t}catch(n){throw ue.error("Error thrown from finalSQL in SQLSearch class method search."),ue.error(n),new Error(Pn)}}_getColumns(){let t=new Q_(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(sC(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=zc.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=iC()[r.databaseid][r.tableid].primaryKey,this.data[n].__merged_data={},this.data[n].__merged_attributes=[],this.data[n].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(we.isEmpty(this.statement.where)){ue.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Q_(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!we.isEmpty(r)&&r.right)if(we.isNotEmptyAndHasValue(r.right.value)){let n=we.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new cr.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=we.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new cr.yy.LogicValue({value:i}):n instanceof cr.yy.StringValue&&we.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new cr.yy.NumValue({value:i}))});if(t){ue.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Q_(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(!we.isEmpty(QJ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(we.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(we.isEmptyOrZeroLength(r.left.columnid)||we.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[o].ignore=!0,this.comparator_search_values[o].comparators=[];continue}this.comparator_search_values[o].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(we.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let c=!1;switch(r.op){case"=":!we.isEmpty(r.right.value)||!we.isEmpty(r.left.value)?n.add(we.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let u=Array.isArray(r.right)?r.right:r.left;for(let _=0;_<u.length;_++)if(u[_].value)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(we.isEmptyOrZeroLength(this.all_table_attributes)&&we.isEmptyOrZeroLength(this.statement.from)&&we.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&&zc.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(we.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);we.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(we.isEmptyOrZeroLength(this.all_table_attributes)&&!we.isEmptyOrZeroLength(this.columns.columns))return t;if(we.isEmptyOrZeroLength(this.all_table_attributes)&&we.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await cr.promise(r)}catch(r){throw ue.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),ue.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let n=this._findColumn(r);n&&this.fetch_attributes.push(sC(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(we.isEmptyOrZeroLength(Object.keys(this.columns)))return[];this._addFetchColumns(this.columns.joins);let t=null;try{t=this.statement.where?this.statement.where.toString():""}catch{throw new Error("Could not generate proper where clause")}this.columns.where&&this._addFetchColumns(this.columns.where);let r=this._isSimpleSelect();if(r?this._addFetchColumns(this.columns.columns):(!this.columns.where&&this.fetch_attributes.length===0)|t.indexOf(JJ)>-1&&this.tables.forEach(s=>{let i={columnid:iC()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=zc.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),!we.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!we.isEmptyOrZeroLength(this.exact_search_values[_].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[_].values);let l=await ea.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 ue.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),ue.error(l),new Error(Pn)}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 f=await ea.getDataByValue(d);for(let[E,h]of f)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,s.attribute,h[s.attribute]):(this.data[i].__merged_data[E]=[...n[i]],this._updateMergedAttribute(i,E,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,E))}))}catch(l){throw ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),ue.error(l),new Error(Pn)}else if(!we.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!we.isEmptyOrZeroLength(this.comparator_search_values[_].comparators))try{let l=this.comparator_search_values[_].comparators;for(let d=0,f=l.length;d<f;d++){let E=l[d];c.search_attribute=E.attribute,c.search_value=E.search_value;let h=await ea.getDataByValue(c,E.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 ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),ue.error(l),new Error(Pn)}else try{c.search_attribute=s.attribute,c.search_value="*";let l=await ea.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,f]of l)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,s.attribute,f[s.attribute]):(this.data[i].__merged_data[d]=[...n[i]],this._updateMergedAttribute(i,d,s.attribute,f[s.attribute]),this._setMergedHashAttribute(i,d))}catch(l){throw ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),ue.error(l),new Error(Pn)}}}_isSimpleSelect(){let t=!0;return Object.keys(this.statement).length!==2||!this.statement.columns||!this.statement.from||this.statement.from.length!==1?(t=!1,t):(this.statement.columns.forEach(r=>{r instanceof cr.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(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 cr.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new cr.yy.Column,t.expression),t.initial_select_column.as=`[${t.expression.columnid_orig}]`,t.expression.columnid=t.initial_select_column.as;return}if(!t.is_aggregator){let s=t.is_func?new cr.yy.FuncValue:new cr.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(E=>{E.joinmode&&E.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(E.table);let h=E.joinmode+" JOIN ? AS "+(E.as?E.as:E.table.tableid);E.on&&(h+=" ON "+E.on.toString()),i.push(h),t.push(Object.values(this.data[`${E.table.databaseid_orig}_${E.table.as?E.table.as_orig:E.table.tableid_orig}`].__merged_data))});let o=[],c={};s.forEach(E=>{let h=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__hash_name,p=E.as?E.as_orig:E.tableid_orig;o.push({key:`'${p}.${h}'`,schema:E.databaseid_orig,table:E.as?E.as_orig:E.tableid_orig,keys:new Set}),r.push(`${E.as?E.as:E.tableid}.\`${h}\` AS "${p}.${h}"`),c[E.as?E.as_orig:E.tableid_orig]=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__merged_attributes});let u=this.statement.where?"WHERE "+this.statement.where:"";u=u.replace(/NOT\(NULL\)/g,"NOT NULL");let _="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(_="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(E=>{E.is_func?r.push(E.initial_select_column.toString()):E.initial_select_column.tableid?r.push(`${E.initial_select_column.tableid}.${E.initial_select_column.columnid} AS ${E.expression.columnid}`):r.push(`${E.initial_select_column.columnid} AS ${E.expression.columnid}`)}));let l="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(l=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let f=[];try{let E=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${u} ${_} ${l} ${d}`,h=this._convertColumnsToIndexes(E,s);f=await cr.promise(h,t),t=null}catch(E){throw ue.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),ue.error(E),new Error("There was a problem processing the data.")}if(f&&f.length>0){for(let E=0,h=f.length;E<h;E++){let p=f[E];o.forEach(S=>{p[S.key]!==null&&p[S.key]!==void 0&&S.keys.add(p[S.key])})}o.forEach(E=>{let h=Object.keys(this.data[`${E.schema}_${E.table}`].__merged_data),p=zc.difference(h,[...E.keys].map(S=>S.toString()));for(let S=0,A=p.length;S<A;S++){let I=p[S];delete this.data[`${E.schema}_${E.table}`].__merged_data[I]}})}return{existing_attributes:c,joined_length:f?f.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new Q_(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=zc.uniqBy(n,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(n)}catch(i){throw ue.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),ue.error(i),new Error(Pn)}}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 ea.getDataByHash(c),_=s.columns.length;for(let l=0,d=o.length;l<d;l++){let f=o[l],E=u.get(f);for(let h=0;h<_;h++){let p=s.columns[h],S=E[p]===void 0?null:E[p];this.data[n].__merged_data[f].push(S)}}}}catch(r){throw ue.error("Error thrown from getDataByHash function in SQLSearch class method getData."),ue.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(s=>{s.as=s.as?s.as:s.table.tableid,t.push(Object.values(this.data[`${s.table.databaseid_orig}_${s.table.as?s.table.as_orig:s.table.tableid_orig}`].__merged_data)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,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();ue.trace(`Final SQL: ${s}`),n=await cr.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),ue.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw ue.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),ue.error(s),new Error("There was a problem running the generated sql.")}return n}_translateUndefinedValues(t){try{let r=[];for(let n of t){let s=Object.create(null);Object.keys(n).forEach(i=>{n[i]===void 0?s[i]=null:s[i]=n[i]}),r.push(s)}return r}catch(r){return ue.error(zJ.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),ue.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return r=r.replace(/NOT\(NULL\)/g,"NOT NULL"),this.statement.columns.forEach(n=>{if(n.funcid&&n.as){let s=n.toString().replace(" AS "+n.as,"");r=r.replace(n.toString(),s)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let n=t,s={};r.forEach(i=>{i.databaseid_orig?s[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:s[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let 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 ea.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 ue.error("There was an error when processing this SQL operation. Check your logs"),ue.error(o),new Error(Pn)}}return Object.values(Object.values(this.data)[0].__merged_data)}};oC.exports=vp});var Zr=T((Ele,cC)=>{"use strict";var XJ=$O();cC.exports={searchByConditions:ZJ,searchByHash:e2,searchByValue:t2,search:r2};var Bp=In(),{transformReq:Hp}=J(),jJ=aC();async function ZJ(e){return Hp(e),Bp.searchByConditions(e)}a(ZJ,"searchByConditions");async function e2(e){Hp(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of Bp.searchByHash(e))r&&t.push(r);return t}a(e2,"searchByHash");async function t2(e){Hp(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of Bp.searchByValue(e))t.push(r);return t}a(t2,"searchByValue");function r2(e,t){try{let r=new XJ(e);r.validate(),new jJ(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(r2,"search")});var z_=T((mle,uC)=>{"use strict";var n2=In();uC.exports={writeTransaction:s2};function s2(e,t,r){return n2.writeTransaction(e,t,r)}a(s2,"writeTransaction")});var fC=T((Tle,dC)=>{"use strict";var i2=Zr(),o2=Js(),lC=V(),a2=en(),Sle=z_(),c2=require("clone"),Fp=require("alasql"),u2=W_(),_C=require("util"),l2=_C.promisify(o2.getTableSchema),_2=_C.promisify(i2.search),d2=M(),xp=J();u2(Fp);dC.exports={update:E2};var f2="There was a problem performing this update. Please check the logs and try again.";async function E2({statement:e,hdb_user:t}){let r=await l2(e.table.databaseid,e.table.tableid),n=h2(e.columns);xp.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=c2(s),c=xp.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,_=Fp.parse(u).statements[0],l=await _2(_),d=m2(n,l);return p2(o,d,t)}a(E2,"update");function h2(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=Fp.compile(`SELECT ${r.expression.toString()} AS [${d2.FUNC_VAL}] FROM ?`)}),t}catch(t){throw lC.error(t),new Error(f2)}}a(h2,"createUpdateRecord");function m2(e,t){return xp.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(m2,"buildUpdateRecords");async function p2(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await a2.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){lC.error(`Error delete new_attributes from update response: ${i}`)}return s}a(p2,"updateRecords")});var hC=T((Ole,EC)=>{var S2=require("alasql"),T2=Zr(),g2=V(),R2=In(),Gp=require("util"),qp=J(),A2=M(),O2=Js(),Rle=z_(),Ale=en(),b2="record",N2="successfully deleted",y2=Gp.callbackify(L2),I2=Gp.promisify(T2.search),w2=Gp.promisify(O2.getTableSchema);EC.exports={convertDelete:y2};function C2(e){return`${e.deleted_hashes.length} ${b2}${e.deleted_hashes.length===1?"":"s"} ${N2}`}a(C2,"generateReturnMessage");async function L2({statement:e,hdb_user:t}){let r=await w2(e.table.databaseid,e.table.tableid);qp.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=qp.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=S2.parse(o).statements[0],u={operation:A2.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{u.records=await I2(c);let _=await R2.deleteRecords(u);return qp.isEmptyOrZeroLength(_.message)&&(_.message=C2(_)),delete _.txn_time,_}catch(_){throw g2.error(_),_.hdb_code?_.message:_}}a(L2,"convertDelete")});var gC=T((Nle,TC)=>{"use strict";var D2=Pi(),{hdb_errors:mC}=Z(),{getDatabases:pC}=(ge(),ee(xe));TC.exports={checkSchemaExists:SC,checkSchemaTableExists:M2,schema_describe:D2};async function SC(e){if(!pC()[e])return mC.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(SC,"checkSchemaExists");async function M2(e,t){let r=await SC(e);if(r)return r;if(!pC()[e][t])return mC.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(M2,"checkSchemaTableExists")});var Z_=T((wle,bC)=>{"use strict";var ta=a_(),ra=gC(),U2=V(),P2=require("uuid").v4,Ile=require("clone"),X_=gs(),na=M(),v2=require("util"),ni=In(),{handleHDBError:ur,hdb_errors:B2}=Z(),{HDB_ERROR_MSGS:J_,HTTP_STATUS_CODES:lr}=B2,{SchemaEventMsg:j_}=Ln(),RC=It(),{getDatabases:H2}=(ge(),ee(xe)),{transformReq:sa}=J();bC.exports={createSchema:x2,createSchemaStructure:AC,createTable:F2,createTableStructure:OC,createAttribute:$2,dropSchema:q2,dropTable:G2,dropAttribute:k2,getBackup:Y2};async function x2(e){let t=await AC(e);return X_.signalSchemaChange(new j_(process.pid,e.operation,e.schema)),t}a(x2,"createSchema");async function AC(e){let t=ta.schema_object(e);if(t)throw ur(t,t.message,lr.BAD_REQUEST,void 0,void 0,!0);if(sa(e),!await ra.checkSchemaExists(e.schema))throw ur(new Error,J_.SCHEMA_EXISTS_ERR(e.schema),lr.BAD_REQUEST,na.LOG_LEVELS.ERROR,J_.SCHEMA_EXISTS_ERR(e.schema),!0);return await ni.createSchema(e),`database '${e.schema}' successfully created`}a(AC,"createSchemaStructure");async function F2(e){return sa(e),e.hash_attribute=e.primary_key??e.hash_attribute,await OC(e)}a(F2,"createTable");async function OC(e){let t=ta.create_table_object(e);if(t)throw ur(t,t.message,lr.BAD_REQUEST,void 0,void 0,!0);if(ta.validateTableResidence(e.residence),!await ra.checkSchemaTableExists(e.schema,e.table))throw ur(new Error,J_.TABLE_EXISTS_ERR(e.schema,e.table),lr.BAD_REQUEST,na.LOG_LEVELS.ERROR,J_.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:P2(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await ni.createTable(n,e);else throw ur(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",lr.BAD_REQUEST);else await ni.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(OC,"createTableStructure");async function q2(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=ta.schema_object(e),n=t??r;if(n)throw ur(n,n.message,lr.BAD_REQUEST,void 0,void 0,!0);sa(e);let s=await ra.checkSchemaExists(e.schema);if(s)throw ur(new Error,s,lr.NOT_FOUND,na.LOG_LEVELS.ERROR,s,!0);let i=await ra.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await ni.dropSchema(e),X_.signalSchemaChange(new j_(process.pid,e.operation,e.schema)),await RC.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(q2,"dropSchema");async function G2(e){let t=ta.table_object(e);if(t)throw ur(t,t.message,lr.BAD_REQUEST,void 0,void 0,!0);sa(e);let r=await ra.checkSchemaTableExists(e.schema,e.table);if(r)throw ur(new Error,r,lr.NOT_FOUND,na.LOG_LEVELS.ERROR,r,!0);return await ni.dropTable(e),await RC.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(G2,"dropTable");async function k2(e){let t=ta.attribute_object(e);if(t)throw ur(t,t.message,lr.BAD_REQUEST,void 0,void 0,!0);sa(e);let r=await ra.checkSchemaTableExists(e.schema,e.table);if(r)throw ur(new Error,r,lr.NOT_FOUND,na.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw ur(new Error,"You cannot drop a hash attribute",lr.BAD_REQUEST,void 0,void 0,!0);if(na.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw ur(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,lr.BAD_REQUEST,void 0,void 0,!0);try{return await ni.dropAttribute(e),V2(e),X_.signalSchemaChange(new j_(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw U2.error(`Got an error deleting attribute ${v2.inspect(e)}.`),n}}a(k2,"dropAttribute");function V2(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(V2,"dropAttributeFromGlobal");async function $2(e){sa(e);let t=H2()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw ur(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,lr.BAD_REQUEST,void 0,void 0,!0);return await ni.createAttribute(e),X_.signalSchemaChange(new j_(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a($2,"createAttribute");function Y2(e){return ni.getBackup(e)}a(Y2,"getBackup")});var yC=T((Lle,NC)=>{"use strict";var{OPERATIONS_ENUM:K2}=M(),kp=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=K2.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};NC.exports=kp});var Vp=T((Ule,DC)=>{"use strict";var W2=In(),Mle=yC(),ed=J(),td=M(),Q2=j(),{handleHDBError:IC,hdb_errors:z2}=Z(),{HDB_ERROR_MSGS:wC,HTTP_STATUS_CODES:CC}=z2,J2=Object.values(td.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),LC="To use this operation audit log must be enabled in harperdb-config.yaml";DC.exports=X2;async function X2(e){if(ed.isEmpty(e.schema))throw new Error(wC.SCHEMA_REQUIRED_ERR);if(ed.isEmpty(e.table))throw new Error(wC.TABLE_REQUIRED_ERR);if(!Q2.get(td.CONFIG_PARAMS.LOGGING_AUDITLOG))throw IC(new Error,LC,CC.BAD_REQUEST,td.LOG_LEVELS.ERROR,LC,!0);let t=ed.checkSchemaTableExist(e.schema,e.table);if(t)throw IC(new Error,t,CC.NOT_FOUND,td.LOG_LEVELS.ERROR,t,!0);if(!ed.isEmpty(e.search_type)&&J2.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await W2.readAuditLog(e)}a(X2,"readAuditLog")});var UC=T((vle,MC)=>{"use strict";var{OPERATIONS_ENUM:j2}=M(),$p=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=j2.GET_BACKUP,this.schema=t,this.table=r}};MC.exports=$p});var BC=T((Fle,vC)=>{"use strict";var Z2=In(),Hle=UC(),Yp=J(),e4=M(),xle=j(),{handleHDBError:t4,hdb_errors:r4}=Z(),{HDB_ERROR_MSGS:PC,HTTP_STATUS_CODES:n4}=r4;vC.exports=s4;async function s4(e){if(Yp.isEmpty(e.schema))throw new Error(PC.SCHEMA_REQUIRED_ERR);if(Yp.isEmpty(e.table))throw new Error(PC.TABLE_REQUIRED_ERR);let t=Yp.checkSchemaTableExist(e.schema,e.table);if(t)throw t4(new Error,t,n4.NOT_FOUND,e4.LOG_LEVELS.ERROR,t,!0);return await Z2.getBackup(read_audit_log_object)}a(s4,"getBackup")});var kC=T((Gle,GC)=>{var si=require("validate.js"),xC=rt(),ia=M(),{handleHDBError:i4,hdb_errors:o4}=Z(),{HDB_ERROR_MSGS:ft,HTTP_STATUS_CODES:a4}=o4,Kp=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),c4={STRUCTURE_USER:"structure_user"},HC=Object.values(ia.ROLE_TYPES_ENUM),u4="attribute_permissions",l4="attribute_name",{PERMS_CRUD_ENUM:oa}=ia,_4=[u4,...Object.values(oa)],FC=[oa.READ,oa.INSERT,oa.UPDATE],d4=[l4,...FC];function f4(e){let t=Kp();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,qC(e,t)}a(f4,"addRoleValidation");function E4(e){let t=Kp();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,qC(e,t)}a(E4,"alterRoleValidation");function h4(e){let t=Kp();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,xC.validateObject(e,t)}a(h4,"dropRoleValidation");var m4=["operation","role","id","permission","hdb_user","hdb_auth_header"];function qC(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)m4.includes(n[o])||s.push(n[o]);s.length>0&&St(ft.INVALID_ROLE_JSON_KEYS(s),r);let i=xC.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{St(o,r)}),e.permission){let o=p4(e);o&&St(o,r),HC.forEach(c=>{e.permission[c]&&!si.isBoolean(e.permission[c])&&St(ft.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(HC.indexOf(o)<0){if(o===c4.STRUCTURE_USER){let u=e.permission[o];if(typeof u=="boolean")continue;if(Array.isArray(u)){for(let _=0,l=u.length;_<l;_++){let d=u[_];global.hdb_schema[d]||St(ft.SCHEMA_NOT_FOUND(d),r)}continue}St(ft.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){St(ft.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let u in c.tables){let _=c.tables[u];if(!u||!global.hdb_schema[o][u]){St(ft.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(_).forEach(l=>{_4.includes(l)||St(ft.INVALID_PERM_KEY(l),r,o,u)}),Object.values(oa).forEach(l=>{si.isDefined(_[l])?si.isBoolean(_[l])||St(ft.TABLE_PERM_NOT_BOOLEAN(l),r,o,u):St(ft.TABLE_PERM_MISSING(l),r,o,u)}),si.isDefined(_.attribute_permissions)){if(!si.isArray(_.attribute_permissions)){St(ft.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{St(ft.ATTR_PERMS_ARRAY_MISSING,r,o,u);continue}if(_.attribute_permissions){let l=global.hdb_schema[o][u].attributes.map(({attribute:f})=>f),d={read:!1,insert:!1,update:!1};for(let f in _.attribute_permissions){let E=_.attribute_permissions[f];if(Object.keys(E).forEach(p=>{!d4.includes(p)&&p!==oa.DELETE&&St(ft.INVALID_ATTR_PERM_KEY(p),r,o,u)}),!si.isDefined(E.attribute_name)){St(ft.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=E.attribute_name;if(!l.includes(h)){St(ft.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}FC.forEach(p=>{si.isDefined(E[p])?si.isBoolean(E[p])||St(ft.ATTR_PERM_NOT_BOOLEAN(p,h),r,o,u):St(ft.ATTR_PERM_MISSING(p,h),r,o,u)}),!d.read&&E.read===!0&&(d.read=!0),!d.insert&&E.insert===!0&&(d.insert=!0),!d.update&&E.update===!0&&(d.update=!0)}if(_.read===!1&&d.read===!0||_.insert===!1&&d.insert===!0||_.update===!1&&d.update===!0){let f=`${o}.${u}`;St(ft.MISMATCHED_TABLE_ATTR_PERMS(f),r,o,u)}}}}return S4(r)}a(qC,"customValidate");GC.exports={addRoleValidation:f4,alterRoleValidation:E4,dropRoleValidation:h4};function p4(e){let{operation:t,permission:r}=e;if(t===ia.OPERATIONS_ENUM.ADD_ROLE||t===ia.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 ft.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?ia.ROLE_TYPES_ENUM.SUPER_USER:ia.ROLE_TYPES_ENUM.CLUSTER_USER;return ft.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(p4,"validateNoSUPerms");function S4(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:ft.ROLE_PERMS_ERROR,...e};return i4(new Error,n,a4.BAD_REQUEST)}else return null}a(S4,"generateRolePermResponse");function St(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(St,"addPermError")});var jp=T((Vle,KC)=>{"use strict";var VC=en(),$C=Zr(),T4=Fi(),Qp=kC(),zp=gs(),g4=require("uuid").v4,R4=require("util"),rd=M(),A4=J(),Jp=$C.searchByValue,O4=$C.searchByHash,b4=R4.promisify(T4.delete),N4=Jn(),y4=jo(),{hdb_errors:I4,handleHDBError:Xi}=Z(),{HDB_ERROR_MSGS:YC,HTTP_STATUS_CODES:Jc}=I4,{UserEventMsg:Xp}=Ln();KC.exports={addRole:w4,alterRole:C4,dropRole:L4,listRoles:D4};function Wp(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(Wp,"scrubRoleDetails");async function w4(e){let t=Qp.addRoleValidation(e);if(t)throw t;e=Wp(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 Jp(r)||[])}catch(i){throw Xi(i)}if(n&&n.length>0)throw Xi(new Error,YC.ROLE_ALREADY_EXISTS(e.role),Jc.CONFLICT,void 0,void 0,!0);e.id||(e.id=g4());let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await VC.insert(s),zp.signalUserChange(new Xp(process.pid)),e=Wp(e),e}a(w4,"addRole");async function C4(e){let t=Qp.alterRoleValidation(e);if(t)throw t;e=Wp(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await VC.update(r)}catch(s){throw Xi(s)}if(n&&n?.message==="updated 0 of 1 records")throw Xi(new Error,"Invalid role id",Jc.BAD_REQUEST,void 0,void 0,!0);return await zp.signalUserChange(new Xp(process.pid)),e}a(C4,"alterRole");async function L4(e){let t=Qp.dropRoleValidation(e);if(t)throw Xi(new Error,t,Jc.BAD_REQUEST,void 0,void 0,!0);let r=new y4(rd.SYSTEM_SCHEMA_NAME,rd.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await O4(r));if(n.length===0)throw Xi(new Error,YC.ROLE_NOT_FOUND,Jc.NOT_FOUND,void 0,void 0,!0);let s=new N4(rd.SYSTEM_SCHEMA_NAME,rd.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await Jp(s)),o=!1;if(A4.isEmptyOrZeroLength(i)===!1){for(let u=0;u<i.length;u++)if(i[u].active===!0){o=!0;break}}if(o===!0)throw Xi(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,Jc.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await b4(c),zp.signalUserChange(new Xp(process.pid)),`${n[0].role} successfully deleted`}a(L4,"dropRole");async function D4(){return Jp({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(D4,"listRoles")});var JC=T((Yle,zC)=>{"use strict";var M4=j(),ii=require("joi"),U4=rt(),WC=require("moment"),P4=require("fs-extra"),Zp=require("path"),v4=require("lodash"),Xc=M(),{LOG_LEVELS:ji}=M(),B4="YYYY-MM-DD hh:mm:ss",H4=Zp.resolve(__dirname,"../logs");zC.exports=function(e){return U4.validateBySchema(e,x4)};var x4=ii.object({from:ii.custom(QC),until:ii.custom(QC),level:ii.valid(ji.NOTIFY,ji.FATAL,ji.ERROR,ji.WARN,ji.INFO,ji.DEBUG,ji.TRACE),order:ii.valid("asc","desc"),limit:ii.number().min(1),start:ii.number().min(0),log_name:ii.custom(F4)});function QC(e,t){if(WC(e,WC.ISO_8601).format(B4)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(QC,"validateDatetime");function F4(e,t){if(v4.invert(Xc.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=M4.get(Xc.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?Xc.LOG_NAMES.HDB:e,i=s===Xc.LOG_NAMES.INSTALL?Zp.join(H4,Xc.LOG_NAMES.INSTALL):Zp.join(n,s);return P4.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(F4,"validateReadLogPath")});var tS=T((Wle,jC)=>{"use strict";var nd=M(),q4=V(),G4=j(),k4=JC(),eS=require("path"),XC=require("fs-extra"),{once:V4}=require("events"),{handleHDBError:$4,hdb_errors:Y4}=Z(),{PACKAGE_ROOT:K4}=M(),W4=eS.join(K4,"logs"),Q4=1e3,z4=200;jC.exports=J4;async function J4(e){let t=k4(e);if(t)throw $4(t,t.message,Y4.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=G4.get(nd.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e.log_name===void 0?nd.LOG_NAMES.HDB:e.log_name,s=n===nd.LOG_NAMES.INSTALL?eS.join(W4,nd.LOG_NAMES.INSTALL):eS.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?Q4:e.limit,f=e.order===void 0?void 0:e.order,E=e.start===void 0?0:e.start,h=E+d,p=0;f==="desc"&&!u&&!l&&(p=Math.max(XC.statSync(s).size-(h+5)*z4,0));let S=XC.createReadStream(s,{start:p});S.on("error",F=>{q4.error(F)});let A=0,I=[],w="",B;S.on("data",F=>{let P=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;F=w+F;let Q=0,Y;for(;(Y=P.exec(F))&&!S.destroyed;){B&&(B.message=F.slice(Q,Y.index),K(B));let[z,re,Ie]=Y,ne=Ie.split("] ["),ct=ne[0],de=ne[1];ne.splice(0,2),B={timestamp:re,thread:ct,level:de,tags:ne,message:""},Q=Y.index+z.length}w=F.slice(Q)}),S.on("end",F=>{S.destroyed||B&&(B.message=w.trim(),K(B))}),S.resume();function K(F){let P,Q,Y;switch(!0){case(i&&c&&_):P=new Date(F.timestamp),Q=new Date(u),Y=new Date(l),F.level===o&&P>=Q&&P<=Y&&A<E?A++:F.level===o&&P>=Q&&P<=Y&&(oi(F,f,I),A++,A===h&&S.destroy());break;case(i&&c):P=new Date(F.timestamp),Q=new Date(u),F.level===o&&P>=Q&&A<E?A++:F.level===o&&P>=Q&&(oi(F,f,I),A++,A===h&&S.destroy());break;case(i&&_):P=new Date(F.timestamp),Y=new Date(l),F.level===o&&P<=Y&&A<E?A++:F.level===o&&P<=Y&&(oi(F,f,I),A++,A===h&&S.destroy());break;case(c&&_):P=new Date(F.timestamp),Q=new Date(u),Y=new Date(l),P>=Q&&P<=Y&&A<E?A++:P>=Q&&P<=Y&&(oi(F,f,I),A++,A===h&&S.destroy());break;case i:F.level===o&&A<E?A++:F.level===o&&(oi(F,f,I),A++,A===h&&S.destroy());break;case c:P=new Date(F.timestamp),Q=new Date(u),P>=Q&&A<E?A++:P>=Q&&A>=E&&(oi(F,f,I),A++,A===h&&S.destroy());break;case _:P=new Date(F.timestamp),Y=new Date(l),P<=Y&&A<E?A++:P<=Y&&A>=E&&(oi(F,f,I),A++,A===h&&S.destroy());break;default:A<E?A++:(oi(F,f,I),A++,A===h&&S.destroy())}}return a(K,"onLogMessage"),await V4(S,"close"),I}a(J4,"readLog");function oi(e,t,r){t==="desc"?X4(e,r):t==="asc"?j4(e,r):r.push(e)}a(oi,"pushLineToResult");function X4(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(X4,"insertDescending");function j4(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(j4,"insertAscending")});var sd=T((jle,rL)=>{"use strict";var rS=require("joi"),{string:jc,boolean:ZC,date:Z4}=rS.types(),e3=rt(),{validateSchemaExists:zle,validateTableExists:Jle,validateSchemaName:Xle}=Yn(),t3=M(),r3=nt(),eL=j();eL.initSync();var n3=jc.invalid(eL.get(t3.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(r3.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(),tL={operation:jc.valid("add_node","update_node","set_node_replication"),node_name:n3,subscriptions:rS.array().items({table:jc.optional(),schema:jc.optional(),database:jc.optional(),subscribe:ZC.required(),publish:ZC.required().custom(i3),start_time:Z4.iso()}).min(1).required()};function s3(e){return e3.validateBySchema(e,rS.object(tL))}a(s3,"addUpdateNodeValidator");function i3(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(i3,"checkForFalsy");rL.exports={addUpdateNodeValidator:s3,validation_schema:tL}});var sL=T((e_e,nL)=>{var o3=rt(),a3={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};nL.exports=function(e){return o3.validateObject(e,a3)}});var sS=T((t_e,iL)=>{"use strict";var c3=M().OPERATIONS_ENUM,nS=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=c3.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};iL.exports=nS});var aL=T((n_e,oL)=>{"use strict";var u3={OPERATION:"operation",REFRESH:"refresh"},iS=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},oS=class{static{a(this,"JWTRSAKeys")}constructor(t,r,n){this.public_key=t,this.private_key=r,this.passphrase=n}};oL.exports={JWTTokens:iS,TOKEN_TYPE_ENUM:u3,JWTRSAKeys:oS}});var tu=T((i_e,_L)=>{"use strict";var eu=require("jsonwebtoken"),aS=require("fs-extra"),cS=J(),nn=M(),{handleHDBError:_r,hdb_errors:l3}=Z(),{HTTP_STATUS_CODES:dr,AUTHENTICATION_ERROR_MSGS:fr}=l3,Zc=V(),cL=g_(),_S=rn(),_3=en().update,d3=sS(),f3=gs(),{UserEventMsg:E3}=Ln(),ai=j();ai.initSync();var uS=require("path"),{JWTTokens:h3,JWTRSAKeys:m3,TOKEN_TYPE_ENUM:id}=aL(),p3=ai.get(nn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?ai.get(nn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",S3=ai.get(nn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?ai.get(nn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",od="RS256",lS;_L.exports={createTokens:T3,validateOperationToken:R3,refreshOperationToken:g3,validateRefreshToken:lL};async function T3(e){if(cS.isEmpty(e)||typeof e!="object")throw _r(new Error,fr.INVALID_AUTH_OBJECT,dr.BAD_REQUEST,void 0,void 0,!0);if(cS.isEmpty(e.username))throw _r(new Error,fr.USERNAME_REQUIRED,dr.BAD_REQUEST,void 0,void 0,!0);if(cS.isEmpty(e.password))throw _r(new Error,fr.PASSWORD_REQUIRED,dr.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await _S.findAndValidateUser(e.username,e.password),!t)throw _r(new Error,fr.INVALID_CREDENTIALS,dr.UNAUTHORIZED,void 0,void 0,!0)}catch(f){throw Zc.error(f),_r(new Error,fr.INVALID_CREDENTIALS,dr.UNAUTHORIZED,void 0,void 0,!0)}let r=await ad(),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 uL(i,r.private_key,r.passphrase),c=await eu.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:S3,algorithm:od,subject:id.REFRESH}),u=cL.hash(c),_=new d3(nn.SYSTEM_SCHEMA_NAME,nn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),l,d;try{l=await _3(_)}catch(f){Zc.error(f),d=f}if(d!==void 0||l.skipped_hashes.length>0)throw _r(new Error,fr.REFRESH_TOKEN_SAVE_FAILED,dr.INTERNAL_SERVER_ERROR);return f3.signalUserChange(new E3(process.pid)),new h3(o,c)}a(T3,"createTokens");async function uL(e,t,r){return await eu.sign(e,{key:t,passphrase:r},{expiresIn:p3,algorithm:od,subject:id.OPERATION})}a(uL,"signOperationToken");async function ad(){if(lS===void 0)try{let e=uS.join(ai.getHdbBasePath(),nn.LICENSE_KEY_DIR_NAME,nn.JWT_ENUM.JWT_PASSPHRASE_NAME),t=uS.join(ai.getHdbBasePath(),nn.LICENSE_KEY_DIR_NAME,nn.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=uS.join(ai.getHdbBasePath(),nn.LICENSE_KEY_DIR_NAME,nn.JWT_ENUM.JWT_PUBLIC_KEY_NAME),n=(await aS.readFile(e)).toString(),s=(await aS.readFile(t)).toString(),i=(await aS.readFile(r)).toString();lS=new m3(i,s,n)}catch(e){throw Zc.error(e),_r(new Error,fr.NO_ENCRYPTION_KEYS,dr.INTERNAL_SERVER_ERROR)}return lS}a(ad,"getJWTRSAKeys");async function g3(e){if(!e)throw _r(new Error,fr.INVALID_BODY,dr.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw _r(new Error,fr.REFRESH_TOKEN_REQUIRED,dr.BAD_REQUEST,void 0,void 0,!0);await lL(e.refresh_token);let t=await ad(),r=await eu.decode(e.refresh_token);return{operation_token:await uL({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(g3,"refreshOperationToken");async function R3(e){try{let t=await ad(),r=await eu.verify(e,t.public_key,{algorithms:od,subject:id.OPERATION});return await _S.findAndValidateUser(r.username,void 0,!1)}catch(t){throw Zc.warn(t),t.name&&t.name==="TokenExpiredError"?_r(new Error,fr.TOKEN_EXPIRED,dr.FORBIDDEN):_r(new Error,fr.INVALID_TOKEN,dr.UNAUTHORIZED)}}a(R3,"validateOperationToken");async function lL(e){let t;try{let r=await ad(),n=await eu.verify(e,r.public_key,{algorithms:od,subject:id.REFRESH});t=await _S.findAndValidateUser(n.username,void 0,!1)}catch(r){throw Zc.warn(r),r.name&&r.name==="TokenExpiredError"?_r(new Error,fr.TOKEN_EXPIRED,dr.FORBIDDEN):_r(new Error,fr.INVALID_TOKEN,dr.UNAUTHORIZED)}if(!cL.validate(t.refresh_token,e))throw _r(new Error,fr.INVALID_TOKEN,dr.UNAUTHORIZED);return t}a(lL,"validateRefreshToken")});var dS=T((c_e,EL)=>{"use strict";var A3=sL(),aa=require("passport"),O3=require("passport-local").Strategy,b3=require("passport-http").BasicStrategy,N3=require("util"),y3=rn(),fL=N3.callbackify(y3.findAndValidateUser),a_e=Ir(),I3=M(),dL=tu();aa.use(new O3(function(e,t,r){fL(e,t,r)}));aa.use(new b3(function(e,t,r){fL(e,t,r)}));aa.serializeUser(function(e,t){t(null,e)});aa.deserializeUser(function(e,t){t(null,e)});function w3(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":aa.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===I3.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?dL.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):dL.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:aa.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(w3,"authorize");function C3(e,t){let r=A3(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(C3,"checkPermissions");EL.exports={authorize:w3,checkPermissions:C3}});var ca=T((l_e,hL)=>{"use strict";var fS=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},ES=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};hL.exports={Node:fS,NodeSubscription:ES}});var pL=T((d_e,mL)=>{"use strict";var L3=M().OPERATIONS_ENUM,hS=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=L3.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};mL.exports=hS});var ru=T((E_e,SL)=>{"use strict";var mS=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},pS=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)}};SL.exports={RemotePayloadObject:mS,RemotePayloadSubscription:pS}});var gL=T((m_e,TL)=>{"use strict";var SS=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}};TL.exports=SS});var OL=T((R_e,AL)=>{"use strict";var D3=gL(),S_e=ht(),RL=$e(),M3=V(),{getSchemaPath:T_e,getTransactionAuditStorePath:g_e}=We(),{getDatabases:U3}=(ge(),ee(xe));AL.exports=P3;async function P3(e){let t=new D3;try{let r=U3()[e.schema]?.[e.name],n=r.primaryStore.getStats(),s=r.auditStore?.getStats(),i=await RL.environmentDataSize(schema_path,e.name),o=await RL.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){M3.warn(`unable to stat table dbi due to ${r}`)}return t}a(P3,"lmdbGetTableSize")});var NL=T((O_e,bL)=>{"use strict";var TS=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}};bL.exports=TS});var ua=T((I_e,CL)=>{"use strict";var v3=require("fs-extra"),B3=require("path"),Xt=require("systeminformation"),ci=V(),H3=It(),gS=nt(),ud=M(),x3=OL(),wL=Pi(),{getThreadInfo:yL}=et(),LS=j();LS.initSync();var F3=NL(),{openEnvironment:N_e}=$e(),{getSchemaPath:y_e}=We(),{database:q3}=(ge(),ee(xe)),cd;CL.exports={getHDBProcessInfo:bS,getNetworkInfo:yS,getDiskInfo:NS,getMemoryInfo:OS,getCPUInfo:AS,getTimeInfo:RS,getSystemInformation:IS,systemInformation:G3,getTableSize:wS,getMetrics:CS};function RS(){return Xt.time()}a(RS,"getTimeInfo");async function AS(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:u,cache:_,...l}=await Xt.cpu();l.cpu_speed=await Xt.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:f,raw_currentload_irq:E,raw_currentload_nice:h,raw_currentload_system:p,raw_currentload_user:S,cpus:A,...I}=await Xt.currentLoad();return I.cpus=[],A.forEach(w=>{let{raw_load:B,raw_load_idle:K,raw_load_irq:F,raw_load_nice:P,raw_load_system:Q,raw_load_user:Y,...z}=w;I.cpus.push(z)}),l.current_load=I,l}catch(e){return ci.error(`error in getCPUInfo: ${e}`),{}}}a(AS,"getCPUInfo");async function OS(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await Xt.mem();return Object.assign(s,process.memoryUsage())}catch(e){return ci.error(`error in getMemoryInfo: ${e}`),{}}}a(OS,"getMemoryInfo");async function bS(){let e={core:[],clustering:[]};try{let t=await Xt.processes(),r;try{r=Number.parseInt(await v3.readFile(B3.join(LS.get(ud.CONFIG_PARAMS.ROOTPATH),ud.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===ud.NODE_ERROR_CODES.ENOENT)ci.error("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB");else throw n}t.list.forEach(n=>{n.pid===r?e.core.push(n):n.name==="nats-server"&&e.clustering.push(n)});for(let n of e.core)for(let s of t.list)s.pid===n.parentPid&&(s.name==="PM2"||s.command==="PM2")&&(n.parent="PM2");return e}catch(t){return ci.error(`error in getHDBProcessInfo: ${t}`),e}}a(bS,"getHDBProcessInfo");async function NS(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await Xt.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:u,..._}=await Xt.fsStats();return e.read_write=_,e.size=await Xt.fsSize(),e}catch(t){return ci.error(`error in getDiskInfo: ${t}`),e}}a(NS,"getDiskInfo");async function yS(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await Xt.networkInterfaceDefault(),e.latency=await Xt.inetChecksite("google.com"),(await Xt.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:o,dhcp:c,dnsSuffix:u,ieee8021xAuth:_,ieee8021xState:l,carrier_changes:d,...f}=n;e.interfaces.push(f)}),(await Xt.networkStats()).forEach(n=>{let{rx_sec:s,tx_sec:i,ms:o,...c}=n;e.stats.push(c)}),e}catch(t){return ci.error(`error in getNetworkInfo: ${t}`),e}}a(yS,"getNetworkInfo");async function IS(){if(cd!==void 0)return cd;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await Xt.osInfo();e=c;let u=await Xt.versions("node, npm");return e.node_version=u.node,e.npm_version=u.npm,cd=e,cd}catch(t){return ci.error(`error in getSystemInformation: ${t}`),e}}a(IS,"getSystemInformation");async function wS(){let e=[],t=await wL.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await x3(n));return e}a(wS,"getTableSize");async function CS(){let e=await wL.describeAll(),t={};for(let r in e){let n=t[r]={};for(let s in e[r])try{let i=q3({database:r,table:s}),o=i.getStats();o.readers=i.readerList().split(/\n\s+/).slice(1).map(c=>{let[u,_,l]=c.trim().split(" ");return{pid:u,thread:_,txnid:l}}),n[s]=o}catch(i){ci.notify(`Error getting stats for table ${s}: ${i}`)}}return t}a(CS,"getMetrics");async function IL(){if(LS.get(ud.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await H3.getNATSReferences(),r=await t.streams.info(gS.WORK_QUEUE_CONSUMER_NAMES.stream_name),n=await e.consumers.get(gS.WORK_QUEUE_CONSUMER_NAMES.stream_name,gS.WORK_QUEUE_CONSUMER_NAMES.durable_name),s={ingest:{stream:{...r.state},consumer:{num_ack_pending:n._info.num_ack_pending,num_redelivered:n._info.num_redelivered,num_waiting:n._info.num_waiting,num_pending:n._info.num_pending}}};return r.sources&&(s.ingest.stream.sources=r.sources),s}}a(IL,"getNatsStreamInfo");async function G3(e){let t=new F3;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await IS(),t.time=RS(),t.cpu=await AS(),t.memory=await OS(),t.disk=await NS(),t.network=await yS(),t.harperdb_processes=await bS(),t.table_size=await wS(),t.metrics=await CS(),t.threads=await yL(),t.replication=await IL(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await IS();break;case"time":t.time=RS();break;case"cpu":t.cpu=await AS();break;case"memory":t.memory=await OS();break;case"disk":t.disk=await NS();break;case"network":t.network=await yS();break;case"harperdb_processes":t.harperdb_processes=await bS();break;case"table_size":t.table_size=await wS();break;case"database_metrics":case"metrics":t.metrics=await CS();break;case"threads":t.threads=await yL();break;case"replication":t.replication=await IL();break;default:break}return t}a(G3,"systemInformation")});var nu=T((C_e,k3)=>{k3.exports={name:"harperdb",version:"4.3.0-alpha.2",description:"HarperDB is a distributed SQL & NoSQL data platform focused on speed, flexibility, and ease of use.",keywords:["database","sql","nosql","api","distributed","cloud","enterprise","Fastify","NATS"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{"minimum-node":"16.0.0","go-lang":"1.21.1","nats-server":"2.10.1"},exports:{".":"./index.js"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"SEE LICENSE IN LICENSE",scripts:{submodules:"git submodule update --init --recursive",build:"eslint -c ./.eslintbuild bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/","cover:test":"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && nyc --no-clean --reporter=lcovonly npm run test:apitests && nyc --no-clean --reporter=lcovonly npm run test:resources && nyc --no-clean --reporter=lcovonly npm run test:logging && nyc --no-clean --reporter=lcovonly npm run test:upgrade && nyc --no-clean --reporter=lcovonly npm run test:nats && nyc --no-clean --reporter=lcovonly npm run test:cfserver && nyc --no-clean --reporter=lcovonly npm run test:hdbserver && nyc --no-clean --reporter=lcovonly npm run test:bin && nyc --no-clean --reporter=lcovonly npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license",test:"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && npm run test:apitests && npm run test:resources && npm run test:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:bin && npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:resources":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/resources/**/*.js' --config '../unitTests/.mocharc.json'","test:bin":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/bin/**/*.js' --config '../unitTests/.mocharc.json'","test:main":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","test:lmdbbridge":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","test:lmdbutility":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","test:hdbserver":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","test:cfserver":"npm run submodules && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/fastifyRoutes/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","test:nats":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","test:upgrade":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","test:apitests":"pm2 kill && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*-test.mjs' --config '../unitTests/.mocharc.json'","test:logging":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test"},dependencies:{"@aws-sdk/abort-controller":"3.374.0","@aws-sdk/client-s3":"3.477.0","@aws-sdk/lib-storage":"3.477.0","@endo/static-module-record":"^1.0.0","@fastify/autoload":"5.7.1","@fastify/compress":"~6.5.0","@fastify/cors":"~8.5.0","@fastify/static":"~6.11.2","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"4.1.10","cbor-x":"1.5.4",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2","fast-glob":"3.3.1",fastify:"~4.25.1","fastify-plugin":"~4.5.1","fs-extra":"11.2.0",graphql:"^16.8.1","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.11.0","json-bigint-fixes":"1.1.0",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.2",lmdb:"2.9.3-beta.2",lodash:"4.17.21",mathjs:"11.11.2",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.29.4","mqtt-packet":"~8.2.1",msgpackr:"1.10.1",nats:"2.17.0",needle:"3.2.0","node-stream-zip":"1.15.0","node-unix-socket":"0.2.5","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.5.1",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.16.0",pm2:"5.3.0",prompt:"1.3.0","properties-reader":"2.3.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^0.18.0","serve-static":"1.15.0",ses:"1.0.0","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.21.20","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.1","validate.js":"0.13.1",ws:"8.15.1",yaml:"2.3.4"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"latest","@typescript-eslint/eslint-plugin":"^5.55.0","@typescript-eslint/parser":"^5.55.0",axios:"1.6.2",chai:"4.3.7","chai-integer":"0.1.0",esbuild:"^0.19.1",eslint:"8.22.0","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.1","eslint-plugin-radar":"0.2.1",eventsource:"^2.0.2","hook-std":"3.0.0","intercept-stdout":"0.1.2",mocha:"^10.2.0","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",mqtt:"~4.3.7",newman:"5.3.2","newman-reporter-html":"1.0.5","newman-reporter-htmlextra":"^1.22.11","newman-reporter-teamcity":"^0.1.12","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"2.8.4",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0","source-map-support":"^0.5.21",typescript:"^5.3.3","why-is-node-still-running":"^1.0.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},"newman-reporter-html":{newman:"5.3.2"},alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","utf-8-validate":"^5.0.10"}}});var DS=T((L_e,LL)=>{"use strict";LL.exports={version:V3,printVersion:$3};var ld=nu();function V3(){if(ld)return ld.version}a(V3,"version");function $3(){ld&&console.log(`HarperDB Version ${ld.version}`)}a($3,"printVersion")});var bs=T((P_e,PL)=>{"use strict";var Y3=en(),MS=J(),K3=require("util"),Zi=M(),DL=j();DL.initSync();var W3=dS(),ML=Zr(),{Node:M_e,NodeSubscription:U_e}=ca(),Q3=jo(),z3=pL(),{RemotePayloadObject:J3,RemotePayloadSubscription:X3}=ru(),{handleHDBError:j3,hdb_errors:Z3}=Z(),{HTTP_STATUS_CODES:eX,HDB_ERROR_MSGS:tX}=Z3,rX=Jn(),nX=ua(),sX=DS(),{getDatabases:iX}=(ge(),ee(xe)),oX=K3.promisify(W3.authorize),aX=ML.searchByHash,cX=ML.searchByValue;PL.exports={authHeaderToUser:uX,isEmpty:lX,getNodeRecord:_X,upsertNodeRecord:dX,buildNodePayloads:fX,checkClusteringEnabled:EX,getAllNodeRecords:hX,getSystemInfo:mX,reverseSubscription:UL};async function uX(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await oX(t,null),e}a(uX,"authHeaderToUser");function lX(e){return e==null}a(lX,"isEmpty");async function _X(e){let t=new Q3(Zi.SYSTEM_SCHEMA_NAME,Zi.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return aX(t)}a(_X,"getNodeRecord");async function dX(e){let t=new z3(Zi.SYSTEM_SCHEMA_NAME,Zi.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return Y3.upsert(t)}a(dX,"upsertNodeRecord");function UL(e){if(MS.isEmpty(e.subscribe)||MS.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(UL,"reverseSubscription");function fX(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=MS.getTableHashAttribute(u,_),{subscribe:d,publish:f}=UL(c),E=iX()[u]?.[_],h=new X3(u,_,l,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);s.push(h)}return new J3(r,t,s,n)}a(fX,"buildNodePayloads");function EX(){if(!DL.get(Zi.CONFIG_PARAMS.CLUSTERING_ENABLED))throw j3(new Error,tX.CLUSTERING_NOT_ENABLED,eX.BAD_REQUEST,void 0,void 0,!0)}a(EX,"checkClusteringEnabled");async function hX(){let e=new rX(Zi.SYSTEM_SCHEMA_NAME,Zi.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await cX(e))}a(hX,"getAllNodeRecords");async function mX(){let e=await nX.getSystemInformation();return{hdb_version:sX.version(),node_version:e.node_version,platform:e.platform}}a(mX,"getSystemInfo")});var US=T((B_e,kL)=>{"use strict";var _d=It(),vL=J(),BL=nt(),HL=M(),dd=V(),xL=Z_(),pX=lp(),{RemotePayloadObject:SX}=ru(),{handleHDBError:FL,hdb_errors:TX}=Z(),{HTTP_STATUS_CODES:qL}=TX,{NodeSubscription:GL}=ca();kL.exports=gX;async function gX(e,t){let r;try{r=await _d.request(`${t}.${BL.REQUEST_SUFFIX}`,new SX(HL.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),dd.trace("Response from remote describe all request:",r)}catch(o){dd.error(`addNode received error from describe all request to remote node: ${o}`);let c=_d.requestErrorHandler(o,"add_node",t);throw FL(new Error,c,qL.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===BL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw FL(new Error,o,qL.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===HL.SYSTEM_SCHEMA_NAME){await _d.createLocalTableStream(u,c);let h=new GL(u,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=vL.doesSchemaExist(u),l=n[u]!==void 0,d=c?vL.doesTableExist(u,c):!0,f=c?n?.[u]?.[c]!==void 0:!0;if(!_&&!l||!d&&!f){s.push(o);continue}if(!_&&l&&(dd.trace(`addNode creating schema: ${u}`),await xL.createSchema({operation:"create_schema",schema:u})),!d&&f){dd.trace(`addNode creating table: ${c} in schema: ${u} with attributes ${JSON.stringify(n[u][c].attributes)}`);let h=new pX(u,c,n[u][c].hash_attribute);n[u][c].attributes&&(h.attributes=n[u][c].attributes),await xL.createTable(h)}await _d.createLocalTableStream(u,c);let E=new GL(u,c,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:s}}a(gX,"reviewSubscriptions")});var hd=T((x_e,YL)=>{"use strict";var{handleHDBError:fd,hdb_errors:RX}=Z(),{HTTP_STATUS_CODES:Ed}=RX,{addUpdateNodeValidator:AX}=sd(),su=V(),$L=M(),VL=nt(),OX=J(),PS=It(),iu=bs(),bX=j(),NX=US(),{Node:yX,NodeSubscription:IX}=ca(),{broadcast:wX}=et(),CX="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",LX="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",DX=bX.get($L.CONFIG_PARAMS.CLUSTERING_NODENAME);YL.exports=MX;async function MX(e,t=!1){su.trace("addNode called with:",e),iu.checkClusteringEnabled();let r=AX(e);if(r)throw fd(r,r.message,Ed.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let d=await iu.getNodeRecord(n);if(!OX.isEmptyOrZeroLength(d))throw fd(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,Ed.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await NX(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=CX,o;let c=iu.buildNodePayloads(s,DX,$L.OPERATIONS_ENUM.ADD_NODE,await iu.getSystemInfo());su.trace("addNode sending remote payload:",c);let u;try{u=await PS.request(`${n}.${VL.REQUEST_SUFFIX}`,c)}catch(d){su.error(`addNode received error from request: ${d}`);let f=PS.requestErrorHandler(d,"add_node",n);throw fd(new Error,f,Ed.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===VL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${n}: ${u.message}`;throw fd(new Error,d,Ed.INTERNAL_SERVER_ERROR,"error",d)}su.trace(u);let _=[];for(let d=0,f=s.length;d<f;d++){let E=s[d];su.trace("Add node updating work stream for node:",n,"subscriptions:",E),await PS.updateWorkStream(E,n),s[d].start_time===void 0&&delete s[d].start_time,_.push(new IX(E.schema,E.table,E.publish,E.subscribe))}let l=new yX(n,_,u.system_info);return await iu.upsertNodeRecord(l),wX({type:"nats_update"}),i.length>0?o.message=LX:o.message=`Successfully added '${n}' to manifest`,o}a(MX,"addNode")});var xS=T((G_e,QL)=>{"use strict";var{handleHDBError:vS,hdb_errors:UX}=Z(),{HTTP_STATUS_CODES:BS}=UX,{addUpdateNodeValidator:PX}=sd(),ou=V(),WL=M(),KL=nt(),q_e=J(),HS=It(),au=bs(),vX=j(),{cloneDeep:BX}=require("lodash"),HX=US(),{Node:xX,NodeSubscription:FX}=ca(),{broadcast:qX}=et(),GX="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",kX="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",VX=vX.get(WL.CONFIG_PARAMS.CLUSTERING_NODENAME);QL.exports=$X;async function $X(e){ou.trace("updateNode called with:",e),au.checkClusteringEnabled();let t=PX(e);if(t)throw vS(t,t.message,BS.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await au.getNodeRecord(r);s.length>0&&(n=BX(s));let{added:i,skipped:o}=await HX(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=GX,c;let u=au.buildNodePayloads(i,VX,WL.OPERATIONS_ENUM.UPDATE_NODE,await au.getSystemInfo());ou.trace("updateNode sending remote payload:",u);let _;try{_=await HS.request(`${r}.${KL.REQUEST_SUFFIX}`,u)}catch(l){ou.error(`updateNode received error from request: ${l}`);let d=HS.requestErrorHandler(l,"update_node",r);throw vS(new Error,d,BS.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===KL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let l=`Error returned from remote node ${r}: ${_.message}`;throw vS(new Error,l,BS.INTERNAL_SERVER_ERROR,"error",l)}ou.trace(_);for(let l=0,d=i.length;l<d;l++){let f=i[l];ou.trace(`updateNode updating work stream for node: ${r} subscription:`,f),await HS.updateWorkStream(f,r),i[l].start_time===void 0&&delete i[l].start_time}return n||(n=[new xX(r,[],_.system_info)]),await YX(n[0],i,_.system_info),o.length>0?c.message=kX:c.message=`Successfully updated '${r}'`,c}a($X,"updateNode");async function YX(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 FX(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await au.upsertNodeRecord(n),qX({type:"nats_update"})}a(YX,"updateNodeTable")});var ZL=T((V_e,jL)=>{"use strict";var XL=require("joi"),{string:zL}=XL.types(),KX=rt(),JL=M(),WX=j(),QX=nt();jL.exports=zX;function zX(e){let t=zL.invalid(WX.get(JL.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(QX.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=XL.object({operation:zL.valid(JL.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return KX.validateBySchema(e,r)}a(zX,"removeNodeValidator")});var pd=T((Y_e,iD)=>{"use strict";var{handleHDBError:eD,hdb_errors:JX}=Z(),{HTTP_STATUS_CODES:tD}=JX,XX=ZL(),cu=V(),rD=bs(),jX=J(),md=M(),nD=nt(),sD=It(),ZX=j(),{RemotePayloadObject:ej}=ru(),{NodeSubscription:tj}=ca(),rj=kc(),nj=Fi(),{broadcast:sj}=et(),ij=ZX.get(md.CONFIG_PARAMS.CLUSTERING_NODENAME);iD.exports=oj;async function oj(e){cu.trace("removeNode called with:",e),rD.checkClusteringEnabled();let t=XX(e);if(t)throw eD(t,t.message,tD.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await rD.getNodeRecord(r);if(jX.isEmptyOrZeroLength(n))throw eD(new Error,`Node '${r}' was not found.`,tD.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new ej(md.OPERATIONS_ENUM.REMOVE_NODE,ij,[]),i,o=!1;try{i=await sD.request(`${r}.${nD.REQUEST_SUFFIX}`,s),cu.trace("Remove node reply from remote node:",r,i)}catch(u){cu.error("removeNode received error from request:",u),o=!0}for(let u=0,_=n.subscriptions.length;u<_;u++){let l=n.subscriptions[u];cu.trace(`Remove node removing subscription: ${l.schema}.${l.table} for node: ${r}`);let d=new tj(l.schema,l.table,!1,!1);await sD.updateWorkStream(d,r)}let c=new rj(md.SYSTEM_SCHEMA_NAME,md.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await nj.deleteRecord(c),sj({type:"nats_update"}),i?.status===nD.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(cu.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(oj,"removeNode")});var cD=T((W_e,aD)=>{"use strict";var oD=require("joi"),{string:aj,array:cj}=oD.types(),uj=rt(),lj=sd();aD.exports=_j;function _j(e){let t=oD.object({operation:aj.valid("configure_cluster").required(),connections:cj.items(lj.validation_schema).required()});return uj.validateBySchema(e,t)}a(_j,"configureClusterValidator")});var FS=T((z_e,fD)=>{"use strict";var dj=M(),Sd=V(),fj=J(),Ej=pd(),hj=hd(),uD=bs(),mj=cD(),{handleHDBError:lD,hdb_errors:pj}=Z(),{HTTP_STATUS_CODES:_D}=pj,Sj="Configure cluster complete.",Tj="Failed to configure the cluster. Check the logs for more details.",gj="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";fD.exports=Rj;async function Rj(e){Sd.trace("configure cluster called with:",e),uD.checkClusteringEnabled();let t=mj(e);if(t)throw lD(t,t.message,_D.BAD_REQUEST,void 0,void 0,!0);let r=await uD.getAllNodeRecords(),n=[];for(let f=0,E=r.length;f<E;f++)n.push(dD(Ej,{operation:dj.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name));let s=await Promise.allSettled(n);Sd.trace("All results from configure_cluster remove node:",s);let i=[],o=e.connections.length;for(let f=0;f<o;f++){let E=e.connections[f];i.push(dD(hj,E,E.node_name))}let c=await Promise.allSettled(i);Sd.trace("All results from configure_cluster add node:",c);let u=[],_=[],l=!1,d=s.concat(c);for(let f=0,E=d.length;f<E;f++){let h=d[f];h.status==="rejected"&&(Sd.error(h.reason),u.includes(h.reason.node_name)||u.push(h.reason.node_name)),h.status==="fulfilled"&&(l=!0);let p=h?.value?.result;typeof p=="string"&&p.includes("Successfully removed")||h.status==="rejected"||_.push({node_name:h?.value?.node_name,subscriptions:h?.value?.result})}if(fj.isEmptyOrZeroLength(u))return{message:Sj,connections:_};if(l)return{message:gj,failed_nodes:u,connections:_};throw lD(new Error,Tj,_D.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(Rj,"configureCluster");async function dD(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){throw{node_name:r,error:n}}}a(dD,"functionWrapper")});var hD=T((X_e,ED)=>{"use strict";var Td=require("joi"),Aj=rt(),{validateSchemaExists:Oj,validateTableExists:bj,validateSchemaName:Nj}=Yn(),yj=Td.object({operation:Td.string().valid("purge_stream"),schema:Td.string().custom(Oj).custom(Nj).required(),table:Td.string().custom(bj).required()});function Ij(e){return Aj.validateBySchema(e,yj)}a(Ij,"purgeStreamValidator");ED.exports=Ij});var qS=T((Z_e,mD)=>{"use strict";var{handleHDBError:wj,hdb_errors:Cj}=Z(),{HTTP_STATUS_CODES:Lj}=Cj,Dj=hD(),Mj=It(),Uj=bs();mD.exports=Pj;async function Pj(e){if(e.purge_ingest!==!0){let s=Dj(e);if(s)throw wj(s,s.message,Lj.BAD_REQUEST,void 0,void 0,!0)}Uj.checkClusteringEnabled();let{schema:t,table:r,purge_ingest:n}=e;return await Mj.purgeTableStream(t,r,n),n?"Successfully purged ingest":`Successfully purged table '${t}.${r}'`}a(Pj,"purgeStream")});var VS=T((tde,AD)=>{"use strict";var kS=bs(),vj=It(),TD=j(),gd=M(),eo=nt(),Bj=J(),GS=V(),{RemotePayloadObject:Hj}=ru(),{ErrorCode:pD}=require("nats"),SD=TD.get(gd.CONFIG_PARAMS.CLUSTERING_ENABLED),gD=TD.get(gd.CONFIG_PARAMS.CLUSTERING_NODENAME);AD.exports={clusterStatus:xj,buildNodeStatus:RD};async function xj(){let e={node_name:gD,is_enabled:SD,connections:[]};if(!SD)return e;let t=await kS.getAllNodeRecords();if(Bj.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(RD(t[n],e.connections));return await Promise.allSettled(r),e}a(xj,"clusterStatus");async function RD(e,t){let r=e.name,n=new Hj(gd.OPERATIONS_ENUM.CLUSTER_STATUS,gD,void 0,await kS.getSystemInfo()),s,i,o=eo.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();s=await vj.request(eo.REQUEST_SUBJECT(r),n),i=Date.now()-u,s.status===eo.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=eo.CLUSTER_STATUS_STATUSES.CLOSED,GS.error(`Error getting node status from ${r} `,s))}catch(u){GS.warn(`Error getting node status from ${r}`,u),u.code===pD.NoResponders?o=eo.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===pD.Timeout?o=eo.CLUSTER_STATUS_STATUSES.TIMEOUT:o=eo.CLUSTER_STATUS_STATUSES.CLOSED}let c=new Fj(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!==gd.PRE_4_0_0_VERSION&&await kS.upsertNodeRecord(u)}catch(u){GS.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(RD,"buildNodeStatus");function Fj(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(Fj,"NodeStatusObject")});var YS=T((nde,OD)=>{"use strict";var{handleHDBError:qj,hdb_errors:Gj}=Z(),{HTTP_STATUS_CODES:kj}=Gj,Vj=It(),$j=bs(),$S=J(),Rd=require("joi"),Yj=rt(),Kj=2e3,Wj=Rd.object({timeout:Rd.number().min(1),connected_nodes:Rd.boolean(),routes:Rd.boolean()});OD.exports=Qj;async function Qj(e){$j.checkClusteringEnabled();let t=Yj.validateBySchema(e,Wj);if(t)throw qj(t,t.message,kj.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||$S.autoCastBoolean(n),o=s===void 0||$S.autoCastBoolean(s),c={nodes:[]},u=await Vj.getServerList(r??Kj),_={};if(i)for(let l=0,d=u.length;l<d;l++){let f=u[l].statsz;f&&(_[u[l].server.name]=f.routes)}for(let l=0,d=u.length;l<d;l++){if(u[l].statsz)continue;let f=u[l].server,E=u[l].data;if(f.name.endsWith("-hub")){let h={name:f.name.slice(0,-4),response_time:u[l].response_time};i&&(h.connected_nodes=[],_[f.name]&&_[f.name].forEach(p=>{h.connected_nodes.includes(p.name.slice(0,-4))||h.connected_nodes.push(p.name.slice(0,-4))})),o&&(h.routes=E.cluster?.urls?E.cluster?.urls.map(p=>({host:p.split(":")[0],port:$S.autoCast(p.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(Qj,"clusterNetwork")});var ID=T((ide,yD)=>{"use strict";var KS=require("joi"),bD=rt(),{route_constraints:ND}=Am();yD.exports={setRoutesValidator:zj,deleteRoutesValidator:Jj};function zj(e){let t=KS.object({server:KS.valid("hub","leaf").required(),routes:ND.required()});return bD.validateBySchema(e,t)}a(zj,"setRoutesValidator");function Jj(e){let t=KS.object({routes:ND.required()});return bD.validateBySchema(e,t)}a(Jj,"deleteRoutesValidator")});var QS=T((ade,DD)=>{"use strict";var to=Ur(),WS=J(),Ad=M(),wD=ID(),{handleHDBError:CD,hdb_errors:Xj}=Z(),{HTTP_STATUS_CODES:LD}=Xj,jj="cluster routes successfully set",Zj="cluster routes successfully deleted";DD.exports={setRoutes:eZ,getRoutes:tZ,deleteRoutes:rZ};function eZ(e){let t=wD.setRoutesValidator(e);if(t)throw CD(t,t.message,LD.BAD_REQUEST,void 0,void 0,!0);let r=to.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=WS.autoCast(_.port);let l=n.some(f=>f.host===_.host&&f.port===_.port),d=s.some(f=>f.host===_.host&&f.port===_.port);l||d?i.push(_):(n.push(_),o.push(_))}return e.server==="hub"?to.updateConfigValue(Ad.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n):to.updateConfigValue(Ad.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n),{message:jj,set:o,skipped:i}}a(eZ,"setRoutes");function tZ(){let e=to.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(tZ,"getRoutes");function rZ(e){let t=wD.deleteRoutesValidator(e);if(t)throw CD(t,t.message,LD.BAD_REQUEST,void 0,void 0,!0);let r=to.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[_],f=!1;for(let E=0,h=n.length;E<h;E++){let p=n[E];if(d.host===p.host&&d.port===p.port){n.splice(E,1),f=!0,c=!0,i.push(d);break}}if(!f){let E=!0;for(let h=0,p=s.length;h<p;h++){let S=s[h];if(d.host===S.host&&d.port===S.port){s.splice(h,1),u=!0,E=!1,i.push(d);break}}E&&o.push(d)}}return c&&(n=WS.isEmptyOrZeroLength(n)?null:n,to.updateConfigValue(Ad.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n)),u&&(s=WS.isEmptyOrZeroLength(s)?null:s,to.updateConfigValue(Ad.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s)),{message:Zj,deleted:i,skipped:o}}a(rZ,"deleteRoutes")});var UD=T((ude,MD)=>{"use strict";var uu=require("alasql"),ro=require("recursive-iterator"),vn=V(),nZ=J(),lu=M(),zS=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,iZ(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=>lu.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=>!lu.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][lu.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=sZ(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(_=>!lu.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let l=new uu.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 sZ(e){return e.filter(t=>t[lu.PERMS_CRUD_ENUM.READ])}a(sZ,"filterReadRestrictedAttrs");function iZ(e,t,r,n,s){oZ(e,t,r,n,s)}a(iZ,"interpretAST");function _u(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(_u,"addSchemaTableToMap");function oZ(e,t,r,n,s){if(!e){vn.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof uu.yy.Insert?lZ(e,t,r):e instanceof uu.yy.Select?aZ(e,t,r,n,s):e instanceof uu.yy.Update?cZ(e,t,r):e instanceof uu.yy.Delete?uZ(e,t,r):vn.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(oZ,"getRecordAttributesAST");function aZ(e,t,r,n,s){if(!e){vn.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(nZ.isEmptyOrZeroLength(i)){vn.error("No schema specified");return}e.from.forEach(c=>{_u(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),_u(c.table,t,r,n,s)});let o=new ro(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{vn.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 ro(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{vn.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 ro(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{vn.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 ro(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{vn.info(`table specified as ${_} not found.`);return}t.get(l).get(_).indexOf(u.columnid)<0&&t.get(l).get(_).push(u.columnid)}}}a(aZ,"getSelectAttributes");function cZ(e,t,r){if(!e){vn.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new ro(e.columns),s=e.table.databaseid;_u(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&JS(e.table.tableid,s,i.columnid,t,r)}a(cZ,"getUpdateAttributes");function uZ(e,t,r){if(!e){vn.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new ro(e.where),s=e.table.databaseid;_u(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&JS(e.table.tableid,s,i.columnid,t,r)}a(uZ,"getDeleteAttributes");function lZ(e,t,r){if(!e){vn.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new ro(e.columns),s=e.into.databaseid;_u(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&JS(e.into.tableid,s,i.columnid,t,r)}a(lZ,"getInsertAttributes");function JS(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(JS,"pushAttribute");MD.exports=zS});var ZS=T((_de,HD)=>{var Od=Vi(),PD=require("chalk"),xr=V(),vD=require("prompt"),{promisify:_Z}=require("util"),XS=M(),dZ=require("fs-extra"),fZ=require("path"),EZ=J(),hZ=DS(),BD=j();BD.initSync();var mZ=require("moment"),pZ=_Z(vD.get),SZ=fZ.join(BD.getHdbBasePath(),XS.LICENSE_KEY_DIR_NAME,XS.LICENSE_FILE_NAME,XS.LICENSE_FILE_NAME);HD.exports={getFingerprint:gZ,setLicense:TZ,parseLicense:jS,register:RZ,getRegistrationInfo:OZ};async function TZ(e){if(e&&e.key&&e.company){try{xr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await jS(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw xr.error(r),xr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(TZ,"setLicense");async function gZ(){let e={};try{e=await Od.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw xr.error(r),xr.error(t),new Error(r)}return e}a(gZ,"getFingerprint");async function jS(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");xr.info("Validating license input...");let r=Od.validateLicense(e,t);if(xr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(xr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(xr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{xr.info("writing license to disk"),await dZ.writeFile(SZ,JSON.stringify({license_key:e,company:t}))}catch(n){throw xr.error("Failed to write License"),n}return"Registration successful."}a(jS,"parseLicense");async function RZ(){let e=await AZ();return jS(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(RZ,"register");async function AZ(){let e=await Od.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:PD.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:PD.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{vD.start()}catch(n){xr.error(n)}let r;try{r=await pZ(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(AZ,"promptForRegistration");async function OZ(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await Od.getLicense()}catch(r){throw xr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(EZ.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=hZ.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=mZ.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(OZ,"getRegistrationInfo")});var FD=T((fde,xD)=>{"use strict";var bZ=nt(),eT=class{static{a(this,"HubConfigObject")}constructor(t,r,n,s,i,o,c,u,_,l,d,f,E,h){this.port=t,o===null&&(o=void 0),this.server_name=r+bZ.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!1},this.tls={cert_file:s,key_file:i,ca_file:o,insecure:c,verify:u},this.leafnodes={port:_,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c}},this.cluster={name:l,port:d,routes:f,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c,verify:u}},this.accounts={SYS:{users:E},HDB:{users:h}},this.system_account="SYS"}};xD.exports=eT});var kD=T((hde,GD)=>{"use strict";var qD=nt(),tT=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+qD.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+qD.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"}};GD.exports=tT});var $D=T((pde,VD)=>{"use strict";var rT=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};VD.exports=rT});var KD=T((Tde,YD)=>{"use strict";var NZ=nt(),nT=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+NZ.SERVER_SUFFIX.ADMIN,this.password=r}};YD.exports=nT});var oT=T((Rde,zD)=>{"use strict";var la=require("path"),yd=require("fs-extra"),yZ=FD(),IZ=kD(),wZ=$D(),CZ=KD(),sT=rn(),da=J(),Er=Ur(),Nd=M(),du=nt(),{CONFIG_PARAMS:Et}=Nd,fu=V(),Eu=j(),WD=Ts(),iT=It(),_a="clustering",LZ=1e4,QD=5;zD.exports={generateNatsConfig:MZ,removeNatsConfig:UZ,getHubConfigPath:DZ};function DZ(){let e=Eu.get(Et.ROOTPATH);return la.join(e,_a,du.NATS_CONFIG_FILES.HUB_SERVER)}a(DZ,"getHubConfigPath");async function MZ(e=!1,t=void 0){Eu.initSync();let r=Eu.get(Et.ROOTPATH),n=la.join(r,_a,du.PID_FILES.HUB),s=la.join(r,_a,du.PID_FILES.LEAF),i=Er.getConfigFromFile(Et.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=la.join(r,_a,du.NATS_CONFIG_FILES.HUB_SERVER),c=la.join(r,_a,du.NATS_CONFIG_FILES.LEAF_SERVER),u=Er.getConfigFromFile(Et.CLUSTERING_TLS_CERTIFICATE),_=Er.getConfigFromFile(Et.CLUSTERING_TLS_PRIVATEKEY),l=Er.getConfigFromFile(Et.CLUSTERING_TLS_CERT_AUTH),d=Er.getConfigFromFile(Et.CLUSTERING_TLS_INSECURE),f=Er.getConfigFromFile(Et.CLUSTERING_TLS_VERIFY),E=Er.getConfigFromFile(Et.CLUSTERING_NODENAME),h=Er.getConfigFromFile(Et.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await iT.checkNATSServerInstalled()||Id("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let p=await sT.listUsers(),S=Er.getConfigFromFile(Et.CLUSTERING_USER),A=await sT.getClusterUser();(da.isEmpty(A)||A.active!==!0)&&Id(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await bd(Et.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await bd(Et.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await bd(Et.CLUSTERING_HUBSERVER_NETWORK_PORT),await bd(Et.CLUSTERING_LEAFSERVER_NETWORK_PORT));let I=[],w=[];for(let[z,re]of p.entries())re.role.role===Nd.ROLE_TYPES_ENUM.CLUSTER_USER&&re.active&&(I.push(new CZ(re.username,WD.decrypt(re.hash))),w.push(new wZ(re.username,WD.decrypt(re.hash))));let B=[],{hub_routes:K}=Er.getClusteringRoutes();if(!da.isEmptyOrZeroLength(K))for(let z of K)B.push(`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@${z.host}:${z.port}`);let F=new yZ(Er.getConfigFromFile(Et.CLUSTERING_HUBSERVER_NETWORK_PORT),E,n,u,_,l,d,f,h,Er.getConfigFromFile(Et.CLUSTERING_HUBSERVER_CLUSTER_NAME),Er.getConfigFromFile(Et.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),B,I,w);l==null&&(delete F.tls.ca_file,delete F.leafnodes.tls.ca_file),t=da.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===Nd.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await yd.writeJson(o,F),fu.trace(`Hub server config written to ${o}`));let P=`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@0.0.0.0:${h}`,Q=`tls://${A.uri_encoded_name}:${A.uri_encoded_d_hash}@0.0.0.0:${h}`,Y=new IZ(Er.getConfigFromFile(Et.CLUSTERING_LEAFSERVER_NETWORK_PORT),E,s,i,[P],[Q],I,w,u,_,l,d);l==null&&delete Y.tls.ca_file,(t===void 0||t===Nd.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await yd.writeJson(c,Y),fu.trace(`Leaf server config written to ${c}`))}a(MZ,"generateNatsConfig");async function bd(e){let t=Eu.get(e);return da.isEmpty(t)&&Id(`port undefined for '${e}'`),await da.isPortTaken(t)&&Id(`'${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(bd,"isPortAvailable");function Id(e){let t=`Error generating clustering config: ${e}`;fu.error(t),console.error(t),process.exit(1)}a(Id,"generateNatsConfigError");async function UZ(e){let{port:t,config_file:r}=iT.getServerConfig(e),{username:n,decrypt_hash:s}=await sT.getClusterUser(),i=0,o=2e3;for(;i<QD;){try{let _=await iT.createConnection(t,n,s,!1);if(_.protocol.connected===!0){_.close();break}}catch(_){fu.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${_}`)}if(i++,i>=QD)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check hdb.log for further details.`);await da.async_set_timeout(o*(i*2))}let c="0".repeat(LZ),u=la.join(Eu.get(Et.ROOTPATH),_a,r);await yd.writeFile(u,c),await yd.remove(u),fu.notify(e,"started.")}a(UZ,"removeNatsConfig")});var tM=T((Ode,eM)=>{"use strict";var Fr=j(),PZ=Vi(),he=M(),hu=nt(),Ns=require("path"),{PACKAGE_ROOT:Cd}=M(),JD=j(),wd=J(),fa="/dev/null",vZ=Ns.join(Cd,"launchServiceScripts"),XD=Ns.join(Cd,"utility/scripts"),BZ=Ns.join(XD,he.HDB_RESTART_SCRIPT),jD=Ns.resolve(Cd,"dependencies",`${process.platform}-${process.arch}`,hu.NATS_BINARY_NAME);function ZD(){let t=PZ.licenseSearch().ram_allocation||he.RAM_ALLOCATION_ENUM.DEFAULT,r=he.MEM_SETTING_KEY+t,n={[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return wd.noBootFile()&&(n[he.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=wd.getEnvCliRootPath()),{name:he.PROCESS_DESCRIPTORS.HDB,script:he.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:Cd}}a(ZD,"generateMainServerConfig");var HZ=9930;function xZ(){Fr.initSync(!0);let e=Fr.get(he.CONFIG_PARAMS.ROOTPATH),t=Ns.join(e,"clustering",hu.NATS_CONFIG_FILES.HUB_SERVER),r=Ns.join(Fr.get(he.HDB_SETTINGS_NAMES.LOG_PATH_KEY),he.LOG_NAMES.HDB),n=JD.get(he.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=hu.LOG_LEVEL_FLAGS[Fr.get(he.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:he.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==HZ?"-"+n:""),script:jD,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return Fr.get(he.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=fa,i.error_file=fa),i}a(xZ,"generateNatsHubServerConfig");var FZ=9940;function qZ(){Fr.initSync(!0);let e=Fr.get(he.CONFIG_PARAMS.ROOTPATH),t=Ns.join(e,"clustering",hu.NATS_CONFIG_FILES.LEAF_SERVER),r=Ns.join(Fr.get(he.HDB_SETTINGS_NAMES.LOG_PATH_KEY),he.LOG_NAMES.HDB),n=JD.get(he.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=hu.LOG_LEVEL_FLAGS[Fr.get(he.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:he.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==FZ?"-"+n:""),script:jD,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return Fr.get(he.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=fa,i.error_file=fa),i}a(qZ,"generateNatsLeafServerConfig");function GZ(){Fr.initSync();let e=Ns.join(Fr.get(he.CONFIG_PARAMS.LOGGING_ROOT),he.LOG_NAMES.HDB),t={name:he.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:he.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:vZ,autorestart:!1};return Fr.get(he.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=fa,t.error_file=fa),t}a(GZ,"generateClusteringUpgradeV4ServiceConfig");function kZ(){let e={[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.RESTART_HDB};return wd.noBootFile()&&(e[he.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=wd.getEnvCliRootPath()),{...{name:he.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:XD},script:BZ}}a(kZ,"generateRestart");function VZ(){return{apps:[ZD()]}}a(VZ,"generateAllServiceConfigs");eM.exports={generateAllServiceConfigs:VZ,generateMainServerConfig:ZD,generateRestart:kZ,generateNatsHubServerConfig:xZ,generateNatsLeafServerConfig:qZ,generateClusteringUpgradeV4ServiceConfig:GZ}});var hM=T((yde,EM)=>{"use strict";var Ce=M(),$Z=J(),ys=oT(),mu=It(),es=nt(),ui=tM(),Ld=j(),li=V(),YZ=bs(),{startWorker:rM,onMessageFromWorkers:KZ}=et(),WZ=ua(),Nde=require("util"),QZ=require("child_process"),zZ=require("fs"),{execFile:JZ}=QZ,Oe;EM.exports={enterPM2Mode:XZ,start:_i,stop:aT,reload:sM,restart:iM,list:cT,describe:aM,connect:Is,kill:r5,startAllServices:n5,startService:uT,getUniqueServicesList:cM,restartAllServices:s5,isServiceRegistered:uM,reloadStopStart:lM,restartHdb:oM,deleteProcess:e5,startClusteringProcesses:dM,startClusteringThreads:fM,isHdbRestartRunning:t5,isClusteringRunning:o5,stopClustering:i5,reloadClustering:a5};var pu=!1;KZ(e=>{e.type==="restart"&&Ld.initSync(!0)});function XZ(){pu=!0}a(XZ,"enterPM2Mode");function Is(){return Oe||(Oe=require("pm2")),new Promise((e,t)=>{Oe.connect((r,n)=>{li.setupConsoleLogging(),r&&t(r),e(n)})})}a(Is,"connect");var hr,jZ=10,nM;function _i(e,t=!1){if(pu)return ZZ(e);let r=JZ(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=hr.indexOf(r);o>-1&&hr.splice(o,1),!nM&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<jZ&&(zZ.existsSync(ys.getHubConfigPath())?_i(e):(await ys.generateNatsConfig(!0),_i(e),await new Promise(c=>setTimeout(c,3e3)),await ys.removeNatsConfig(Ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await ys.removeNatsConfig(Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let o=Ld.get(Ce.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,u,_=0,l;for(;u=c.exec(i);){if(u.index&&es.LOG_LEVEL_HIERARCHY[o]>=es.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===es.LOG_LEVELS.ERR||l===es.LOG_LEVELS.WRN?li.OUTPUTS.STDERR:li.OUTPUTS.STDOUT;li.logCustomLevel(l||"info",E,n,i.slice(_,u.index).trim())}let[d,f]=u;_=u.index+d.length,l=es.LOG_LEVELS[f]}if(es.LOG_LEVEL_HIERARCHY[o]>=es.LOG_LEVEL_HIERARCHY[l||"info"]){let d=l===es.LOG_LEVELS.ERR||l===es.LOG_LEVELS.WRN?li.OUTPUTS.STDERR:li.OUTPUTS.STDOUT;li.logCustomLevel(l||"info",d,n,i.slice(_).trim())}}if(a(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),hr=[],!hr&&!t){let i=a(()=>{nM=!0,hr&&(hr.map(o=>o.kill()),process.exit(0))},"kill_children");process.on("exit",i),process.on("SIGINT",i),process.on("SIGQUIT",i),process.on("SIGTERM",i)}hr.push(r)}a(_i,"start");function ZZ(e){return new Promise(async(t,r)=>{try{await Is()}catch(n){r(n)}Oe.start(e,(n,s)=>{n&&(Oe.disconnect(),r(n)),Oe.disconnect(),t(s)})})}a(ZZ,"startWithPM2");function aT(e){if(!pu){for(let t of hr||[])t.name===e&&(hr.splice(hr.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Is()}catch(n){r(n)}Oe.stop(e,async(n,s)=>{n&&(Oe.disconnect(),r(n)),Oe.delete(e,(i,o)=>{i&&(Oe.disconnect(),r(n)),Oe.disconnect(),t(o)})})})}a(aT,"stop");function sM(e){return new Promise(async(t,r)=>{try{await Is()}catch(n){r(n)}Oe.reload(e,(n,s)=>{n&&(Oe.disconnect(),r(n)),Oe.disconnect(),t(s)})})}a(sM,"reload");function iM(e){if(!pu)for(let t of hr||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await Is()}catch(n){r(n)}Oe.restart(e,(n,s)=>{Oe.disconnect(),t(s)})})}a(iM,"restart");function e5(e){return new Promise(async(t,r)=>{try{await Is()}catch(n){r(n)}Oe.delete(e,(n,s)=>{n&&(Oe.disconnect(),r(n)),Oe.disconnect(),t(s)})})}a(e5,"deleteProcess");async function oM(){await _i(ui.generateRestart())}a(oM,"restartHdb");async function t5(){let e=await cT();for(let t in e)if(e[t].name===Ce.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(t5,"isHdbRestartRunning");function cT(){return new Promise(async(e,t)=>{try{await Is()}catch(r){t(r)}Oe.list((r,n)=>{r&&(Oe.disconnect(),t(r)),Oe.disconnect(),e(n)})})}a(cT,"list");function aM(e){return new Promise(async(t,r)=>{try{await Is()}catch(n){r(n)}Oe.describe(e,(n,s)=>{n&&(Oe.disconnect(),r(n)),Oe.disconnect(),t(s)})})}a(aM,"describe");function r5(){if(!pu){for(let e of hr||[])e.kill();hr=[];return}return new Promise(async(e,t)=>{try{await Is()}catch(r){t(r)}Oe.killDaemon((r,n)=>{r&&(Oe.disconnect(),t(r)),Oe.disconnect(),e(n)})})}a(r5,"kill");async function n5(){try{await dM(),await fM(),await _i(ui.generateAllServiceConfigs())}catch(e){throw Oe?.disconnect(),e}}a(n5,"startAllServices");async function uT(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case Ce.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=ui.generateMainServerConfig();break;case Ce.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=ui.generateNatsIngestServiceConfig();break;case Ce.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=ui.generateNatsReplyServiceConfig();break;case Ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=ui.generateNatsHubServerConfig(),await _i(r,t),await ys.removeNatsConfig(e);return;case Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=ui.generateNatsLeafServerConfig(),await _i(r,t),await ys.removeNatsConfig(e);return;case Ce.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=ui.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await _i(r)}catch(r){throw Oe?.disconnect(),r}}a(uT,"startService");async function cM(){try{let e=await cT(),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 Oe?.disconnect(),e}}a(cM,"getUniqueServicesList");async function s5(e=[]){try{let t=!1,r=await cM();for(let n=0,s=Object.values(r).length;n<s;n++){let o=Object.values(r)[n].name;e.includes(o)||(o===Ce.PROCESS_DESCRIPTORS.HDB?t=!0:await iM(o))}t&&await lM(Ce.PROCESS_DESCRIPTORS.HDB)}catch(t){throw Oe?.disconnect(),t}}a(s5,"restartAllServices");async function uM(e){if(hr?.find(r=>r.name===e))return!0;let t=await WZ.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(uM,"isServiceRegistered");async function lM(e){let t=e===Ce.PROCESS_DESCRIPTORS.HDB?Ld.get(Ce.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):Ld.get(Ce.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await aM(e),n=$Z.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await aT(e),await uT(e)):e===Ce.PROCESS_DESCRIPTORS.HDB?await oM():await sM(e)}a(lM,"reloadStopStart");var _M;async function dM(e=!1){for(let t in Ce.CLUSTERING_PROCESSES){let r=Ce.CLUSTERING_PROCESSES[t];await uT(r,e)}}a(dM,"startClusteringProcesses");async function fM(){_M=rM(Ce.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Ce.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await mu.createWorkQueueStream(es.WORK_QUEUE_CONSUMER_NAMES),await mu.updateIngestStreamConsumer(),await mu.updateLocalStreams();let e=await YZ.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Ce.PRE_4_0_0_VERSION){li.info("Starting clustering upgrade 4.0.0 process"),rM(Ce.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(fM,"startClusteringThreads");async function i5(){for(let e in Ce.CLUSTERING_PROCESSES)if(e!==Ce.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===Ce.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await _M.terminate();else{let t=Ce.CLUSTERING_PROCESSES[e];await aT(t)}}a(i5,"stopClustering");async function o5(){for(let e in Ce.CLUSTERING_PROCESSES){let t=Ce.CLUSTERING_PROCESSES[e];if(await uM(t)===!1)return!1}return!0}a(o5,"isClusteringRunning");async function a5(){await ys.generateNatsConfig(!0),await mu.reloadNATSHub(),await mu.reloadNATSLeaf(),await ys.removeNatsConfig(Ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await ys.removeNatsConfig(Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(a5,"reloadClustering")});var Pd=T((wde,AM)=>{"use strict";var c5=require("minimist"),{isMainThread:dT,parentPort:SM}=require("worker_threads"),st=M(),{PROCESS_DESCRIPTORS_VALIDATE:Su}=st,ts=V(),fT=J(),Dd=oT(),Ea=It(),lT=nt(),TM=Ur(),rs=hM(),mM=ua(),u5=jE(),{restartWorkers:Md,onMessageByType:l5}=et(),{handleHDBError:_5,hdb_errors:d5}=Z(),{HTTP_STATUS_CODES:f5}=d5,Ud=j();Ud.initSync();var Tu=`Restarting HarperDB. This may take up to ${st.RESTART_TIMEOUT_MS/1e3} seconds.`,E5="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",pM="Clustering is not enabled so cannot be restarted",h5="Invalid service",ha,sn;AM.exports={restart:gM,restartService:ET};dT&&l5(st.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?ET({service:e.workerType}):gM({operation:"restart"})});async function gM(e){sn=Object.keys(e).length===0,ha=await rs.isServiceRegistered(st.HDB_PROC_DESCRIPTOR);let t=c5(process.argv);if(t.service){await ET(t);return}if(sn&&!ha){console.error(E5);return}if(sn&&console.log(Tu),ha){rs.enterPM2Mode(),ts.notify(Tu);let r=u5(Object.keys(st.CONFIG_PARAM_MAP),!0);return fT.isEmptyOrZeroLength(Object.keys(r))||TM.updateConfigValue(void 0,void 0,r,!0,!0),p5(),Tu}return dT?(ts.notify(Tu),setTimeout(()=>{Md()},50)):SM.postMessage({type:st.ITC_EVENT_TYPES.RESTART}),Tu}a(gM,"restart");async function ET(e){let{service:t}=e;if(st.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw _5(new Error,h5,f5.BAD_REQUEST,void 0,void 0,!0);if(ha=await rs.isServiceRegistered(st.HDB_PROC_DESCRIPTOR),!dT)return SM.postMessage({type:st.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case Su.clustering:if(!Ud.get(st.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=pM;break}sn&&console.log("Restarting clustering"),ts.notify("Restarting clustering"),await RM();break;case Su.clustering_config:case Su["clustering config"]:if(!Ud.get(st.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=pM;break}sn&&console.log("Restarting clustering_config"),ts.notify("Restarting clustering_config"),await rs.reloadClustering();break;case"custom_functions":case"custom functions":case Su.harperdb:case Su.http_workers:if(sn&&!ha){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}sn&&console.log("Restarting http_workers"),ts.notify("Restarting http_workers"),sn?await rs.restart(st.HDB_PROC_DESCRIPTOR):setTimeout(()=>{Md("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(ts.error(r),sn&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(ET,"restartService");async function m5(){await Ea.publishToStream(`${lT.SUBJECT_PREFIXES.TXN}.${lT.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,lT.WORK_QUEUE_CONSUMER_NAMES.stream_name,Ea.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(m5,"postDummyNatsMsg");async function p5(){await RM(),await rs.restart(st.HDB_PROC_DESCRIPTOR),await fT.async_set_timeout(2e3),Ud.get(st.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await _T(),sn&&(await Ea.closeConnection(),process.exit(0))}a(p5,"restartPM2Mode");async function RM(){if(!TM.getConfigFromFile(st.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await mM.getHDBProcessInfo()).clustering.length===0)ts.trace("Clustering not running, restart will start clustering services"),await Dd.generateNatsConfig(!0),await rs.startClusteringProcesses(),await rs.startClusteringThreads(),await _T(),sn&&await Ea.closeConnection();else{await m5(),await Dd.generateNatsConfig(!0),ha?(ts.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await rs.restart(st.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await rs.restart(st.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await mM.getHDBProcessInfo()).clustering.forEach(s=>{ts.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await fT.async_set_timeout(3e3),await _T(),await Ea.updateLocalStreams(),sn&&await Ea.closeConnection(),ts.trace("Restart clustering restarting ingest and reply service threads");let t=Md(st.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=Md(st.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(RM,"restartClustering");async function _T(){await Dd.removeNatsConfig(st.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Dd.removeNatsConfig(st.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(_T,"removeNatsConfig")});var UM=T((Dde,MM)=>{"use strict";var Lde=require("lodash"),mr=M(),{handleHDBError:OM,hdb_errors:S5}=Z(),{HDB_ERROR_MSGS:T5,HTTP_STATUS_CODES:g5}=S5,hT=V();MM.exports={getRolePermissions:A5};var no=Object.create(null),R5=a(e=>({key:e,perms:{}}),"perms_template_obj"),IM=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),wM=a((e=!1,t=!1,r=!1,n=!1)=>({[mr.PERMS_CRUD_ENUM.READ]:e,[mr.PERMS_CRUD_ENUM.INSERT]:t,[mr.PERMS_CRUD_ENUM.UPDATE]:r,[mr.PERMS_CRUD_ENUM.DELETE]:n}),"permissions_template"),mT=a((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...wM(t,r,n,s)}),"table_perms_template"),bM=a((e,t=wM())=>({attribute_name:e,describe:DM(t),[gu]:t[gu],[pT]:t[pT],[ST]:t[ST]}),"attr_perms_template"),NM=a((e,t=!1)=>({attribute_name:e,describe:t,[gu]:t}),"timestamp_attr_perms_template"),{READ:gu,INSERT:pT,UPDATE:ST}=mr.PERMS_CRUD_ENUM,CM=Object.values(mr.PERMS_CRUD_ENUM),LM=[gu,pT,ST];function A5(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[mr.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(no[t]&&no[t].key===n)return no[t].perms;let s=O5(e,r);return no[t]?no[t].key=n:no[t]=R5(n),no[t].perms=s,s}catch(r){if(!e[mr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[mr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<mr.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 hT.error(n),hT.debug(r),OM(new Error,T5.OUTDATED_PERMS_TRANSLATION_ERROR,g5.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
|
|
8
|
+
${r.stack}`;throw hT.error(n),OM(new Error)}}}a(A5,"getRolePermissions");function O5(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[mr.SYSTEM_SCHEMA_NAME]=n[mr.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]=b5(t[i]);return}r[i]=IM(),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],_=N5(c,u);r[i].describe||CM.forEach(l=>{_[l]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=mT()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=mT()})}),r}a(O5,"translateRolePermissions");function b5(e){let t=IM(!0);return Object.keys(e).forEach(r=>{t.tables[r]=mT(!0,!0,!0,!0,!0)}),t}a(b5,"createStructureUserPermissions");function N5(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,f=l;return mr.TIME_STAMP_NAMES.includes(d)&&(f=NM(d,l[gu])),_[d]=f,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=bM(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let l=i[_];l.describe=DM(l),s.attribute_permissions.push(l),c||y5(l,u)}else if(_!==o){let l;mr.TIME_STAMP_NAMES.includes(_)?l=NM(_):l=bM(_),s.attribute_permissions.push(l)}}),c||s.attribute_permissions.push(u),s.describe=yM(s),s}else return e.describe=yM(e),e}a(N5,"getTableAttrPerms");function yM(e){return CM.filter(t=>e[t]).length>0}a(yM,"getSchemaTableDescribePerm");function DM(e){return LM.filter(t=>e[t]).length>0}a(DM,"getAttributeDescribePerm");function y5(e,t){LM.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(y5,"checkForHashPerms")});var PM={};Ve(PM,{Resources:()=>vd,keyArrayToString:()=>ma,resetResources:()=>I5,resources:()=>di});function I5(){return di=new vd}function ma(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var vd,di,Ru=Ae(()=>{zi();vd=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){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?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 Qe(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};a(I5,"resetResources");a(ma,"keyArrayToString")});var vM={};Ve(vM,{Headers:()=>fi});var fi,Bd=Ae(()=>{fi=class extends Map{static{a(this,"Headers")}set(t,r){return typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r),super.set(t.toLowerCase(),[t,r])}get(t){return typeof t!="string"&&(t=""+t),super.get(t.toLowerCase())?.[1]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase();if(!super.has(n))return super.set(n,[t,r])}append(t,r,n){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase(),i=super.get(s);if(i){let o=i[1];n?r=(typeof o=="string"?o:o.join(", "))+", "+r:typeof o=="string"?r=[o,r]:o.push(r)}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}}});var Au={};Ve(Au,{authentication:()=>VM,bypassAuth:()=>P5,login:()=>B5,logout:()=>H5,start:()=>v5});function P5(){kM=!0}async function VM(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,o=[];try{if(i){let E=e.isOperationsServer?D5?L5:[]:C5?w5:[];if(E.includes(i)||E.includes("*")){if(e.method==="OPTIONS"){let h=new fi([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return Hd&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),Hd&&o.push("Access-Control-Allow-Credentials","true")}}let u,_;if(Hd){let E=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=s?.indexOf(E);if(h>=0){let p=s.indexOf(";",h),S=s.indexOf("=",h);u=s.slice(S+1,p===-1?s.length:p),_=await HM.get(u)}e.session=_||(_={})}e.user=null;let l=a((E,h,p)=>{let S=new Fd.AuthAuditLog(E,h,Gt.AUTH_AUDIT_TYPES.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);S.auth_strategy=p,u&&(S.session_id=u),r.referer&&(S.referer=r.referer),r.origin&&(S.origin=r.origin),h===Gt.AUTH_AUDIT_STATUS.SUCCESS?BM.notify(S):BM.error(S)},"authAuditLog"),d;if(n){if(d=so.get(n),!d){let[E,h]=n.split(" "),p,S;try{switch(E){case"Basic":[p,S]=atob(h).split(":"),d=p||S?await lt.getUser(p,S,e):null;break;case"Bearer":try{d=await(0,xd.validateOperationToken)(h)}catch(A){if(A.message==="invalid token")try{return await(0,xd.validateRefreshToken)(h),c({status:-1})}catch{throw A}}break}}catch(A){return U5&&(so.get(h)||(so.set(h,h),l(p,Gt.AUTH_AUDIT_STATUS.FAILURE,E))),c({status:401,body:Ei({error:A.message},e)})}so.set(n,d),M5&&l(d.username,Gt.AUTH_AUDIT_STATUS.SUCCESS,E)}e.user=d}else _?.user?e.user=await lt.getUser(_.user,null,e):(kM&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,FM.getSuperUser)());Hd&&(e.session.update=function(E){if(!u){u=(0,qM.v4)();let p=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${u}; Path=/; Expires=Tue, 01 Oct 8307 19:33:20 GMT; HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",p):f?.headers?.set&&f.headers.set("Set-Cookie",p)}return e.protocol==="https"&&(o?(i&&o.push("Access-Control-Expose-Headers","X-Hdb-Session"),o.push("X-Hdb-Session","Secure")):f?.headers?.set&&(i&&f.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),f.headers.set("X-Hdb-Session","Secure"))),E.id=u,HM.put(E)},e.login=async function(E,h){e.user=await lt.getUser(E,h,e),e.session.update({user:e.user.username})},(d&&!_||_?.user?.username!==d?.username)&&r["user-agent"]?.startsWith("Mozilla")&&e.session.update({user:e.user.username}));let f=await t(e);return f&&(f.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&di.loginPath?(f.status=302,f.headers.set("Location",di.loginPath(e))):f.headers.set("WWW-Authenticate","Basic")),c(f))}catch(u){throw c(u)}function c(u){let _=o.length;if(_>0){let l=u.headers;l||(u.headers=l=new fi);for(let d=0;d<_;){let f=o[d++];l.set(f,o[d++])}}return o=null,u}a(c,"applyResponseHeaders")}function v5({server:e,port:t}){e.request(VM,{port:t||"all"}),xM||(xM=!0,setInterval(()=>{so=new Map},on.get(Gt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),GM.user.addListener(()=>{so=new Map}))}async function B5(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 H5(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var FM,xd,qM,on,Gt,Fd,GM,BM,w5,C5,L5,D5,HM,Hd,kM,M5,U5,so,xM,qd=Ae(()=>{FM=v(rn());nr();Ru();xd=v(tu());ge();qM=require("uuid"),on=v(j()),Gt=v(M()),Fd=v(V()),GM=v(Uc());Bd();pa();BM=(0,Fd.loggerWithTag)("auth-event");on.initSync();w5=on.get(Gt.CONFIG_PARAMS.HTTP_CORSACCESSLIST),C5=on.get(Gt.CONFIG_PARAMS.HTTP_CORS),L5=on.get(Gt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),D5=on.get(Gt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),HM=_t({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),Hd=on.get(Gt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,kM=on.get(Gt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,M5=on.get(Gt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,U5=on.get(Gt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,so=new Map;lt.onInvalidatedUser(()=>{so=new Map});a(P5,"bypassAuth");a(VM,"authentication");a(v5,"start");a(B5,"login");a(H5,"logout")});var JM=T((kde,zM)=>{"use strict";var be=require("joi"),$M=require("fs-extra"),YM=require("path"),Cs=rt(),KM=j(),WM=M(),QM=V(),{hdb_errors:x5}=Z(),{HDB_ERROR_MSGS:jt}=x5,ws=/^[a-zA-Z0-9-_]+$/;zM.exports={getDropCustomFunctionValidator:q5,setCustomFunctionValidator:G5,addComponentValidator:Y5,dropCustomFunctionProjectValidator:K5,packageComponentValidator:W5,deployComponentValidator:Q5,setComponentFileValidator:k5,getComponentFileValidator:$5,dropComponentFileValidator:V5};function Gd(e,t,r){try{let n=KM.get(WM.CONFIG_PARAMS.COMPONENTSROOT),s=YM.join(n,t);return $M.existsSync(s)?e?t:r.message(jt.PROJECT_EXISTS):e?r.message(jt.NO_PROJECT):t}catch(n){return QM.error(n),r.message(jt.VALIDATION_ERR)}}a(Gd,"checkProjectExists");function Ou(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(Ou,"checkFilePath");function F5(e,t,r,n){try{let s=KM.get(WM.CONFIG_PARAMS.COMPONENTSROOT),i=YM.join(s,e,t,r+".js");return $M.existsSync(i)?r:n.message(jt.NO_FILE)}catch(s){return QM.error(s),n.message(jt.VALIDATION_ERR)}}a(F5,"checkFileExists");function q5(e){let t=be.object({project:be.string().pattern(ws).custom(Gd.bind(null,!0)).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),type:be.string().valid("helpers","routes").required(),file:be.string().pattern(ws).custom(F5.bind(null,e.project,e.type)).custom(Ou).required().messages({"string.pattern.base":jt.BAD_FILE_NAME})});return Cs.validateBySchema(e,t)}a(q5,"getDropCustomFunctionValidator");function G5(e){let t=be.object({project:be.string().pattern(ws).custom(Gd.bind(null,!0)).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),type:be.string().valid("helpers","routes").required(),file:be.string().custom(Ou).required(),function_content:be.string().required()});return Cs.validateBySchema(e,t)}a(G5,"setCustomFunctionValidator");function k5(e){let t=be.object({project:be.string().pattern(ws).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),file:be.string().custom(Ou).required(),payload:be.string().allow("").optional(),encoding:be.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Cs.validateBySchema(e,t)}a(k5,"setComponentFileValidator");function V5(e){let t=be.object({project:be.string().pattern(ws).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),file:be.string().custom(Ou).optional()});return Cs.validateBySchema(e,t)}a(V5,"dropComponentFileValidator");function $5(e){let t=be.object({project:be.string().required(),file:be.string().custom(Ou).required(),encoding:be.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Cs.validateBySchema(e,t)}a($5,"getComponentFileValidator");function Y5(e){let t=be.object({project:be.string().pattern(ws).custom(Gd.bind(null,!1)).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME})});return Cs.validateBySchema(e,t)}a(Y5,"addComponentValidator");function K5(e){let t=be.object({project:be.string().pattern(ws).custom(Gd.bind(null,!0)).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME})});return Cs.validateBySchema(e,t)}a(K5,"dropCustomFunctionProjectValidator");function W5(e){let t=be.object({project:be.string().pattern(ws).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),skip_node_modules:be.boolean()});return Cs.validateBySchema(e,t)}a(W5,"packageComponentValidator");function Q5(e){let t=be.object({project:be.string().pattern(ws).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),payload:be.string().optional().messages({"string.pattern.base":jt.BAD_PACKAGE}),package:be.string().optional()});return Cs.validateBySchema(e,t)}a(Q5,"deployComponentValidator")});var Yd=T(($de,nU)=>{"use strict";var kd=require("joi"),Vd=require("path"),XM=require("fs-extra"),{exec:z5}=require("child_process"),J5=require("util"),jM=J5.promisify(z5),bu=M(),{handleHDBError:Sa,hdb_errors:X5}=Z(),{HTTP_STATUS_CODES:Ta}=X5,Nu=j(),j5=rt(),ga=V();Nu.initSync();var TT=Nu.get(bu.CONFIG_PARAMS.COMPONENTSROOT),ZM="npm install --omit=dev --json",Z5=`${ZM} --dry-run`;nU.exports={installModules:n8,auditModules:s8,installAllRootModules:e8,uninstallRootModule:t8,linkHarperdb:r8};async function e8(e=!1){await $d(),await yu(e?"npm install --ignore-scripts":"npm install",Nu.get(bu.CONFIG_PARAMS.ROOTPATH))}a(e8,"installAllRootModules");async function t8(e){await yu(`npm uninstall ${e}`,Nu.get(bu.CONFIG_PARAMS.ROOTPATH))}a(t8,"uninstallRootModule");async function r8(){await $d(),await yu(`npm link ${bu.PACKAGE_ROOT}`,Nu.get(bu.CONFIG_PARAMS.ROOTPATH))}a(r8,"linkHarperdb");async function yu(e,t=void 0){let r,n;try{({stdout:r,stderr:n}=await jM(e,{cwd:t}))}catch(s){throw new Error(s.stderr.replace(`
|
|
9
|
+
`,""))}return n&&!n.includes("Debugger listening")&&ga.error("Error running NPM command:",e,n),ga.trace(r,n),r?.replace(`
|
|
10
|
+
`,"")}a(yu,"runCommand");async function n8(e){ga.info(`starting installModules for request: ${e}`);let t=rU(e);if(t)throw Sa(t,t.message,Ta.BAD_REQUEST);let{projects:r,dry_run:n}=e,s=n===!0?Z5:ZM;await $d(),await tU(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 _=Vd.join(TT,u),l,d=null;try{let{stdout:f,stderr:E}=await jM(s,{cwd:_});l=f?f.replace(`
|
|
11
11
|
`,""):null,d=E?E.replace(`
|
|
12
|
-
`,""):null}catch(f){f.stderr?i[u].npm_error=
|
|
13
|
-
`);return r>-1&&s>-1?JSON.parse(e.substring(r+t.length-1,s+1)):e}a(iU,"parseNPMStdErr");async function OZ(e){Xo.info(`starting auditModules for request: ${e}`);let t=aU(e);if(t)throw zo(t,t.message,Jo.BAD_REQUEST);let{projects:r}=e;await hd(),await oU(r);let s={};for(let n=0,i=r.length;n<i;n++){let o=r[n],c=Ed.join(US,o);s[o]={npm_output:null,npm_error:null};try{let u=await Qc("npm audit --json",c);s[o].npm_output=JSON.parse(u)}catch(u){s[o].npm_error=iU(u.stderr)}}return Xo.info(`finished auditModules with response ${s}`),s}a(OZ,"auditModules");async function hd(){try{return await Qc("npm -v"),!0}catch{throw zo(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",Jo.BAD_REQUEST,void 0,void 0,!0)}}a(hd,"checkNPMInstalled");async function oU(e){if(!Array.isArray(e)||e.length===0)throw zo(new Error,"projects argument must be an array with at least 1 element",Jo.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let s=0,n=e.length;s<n;s++){let i=e[s],o=Ed.join(US,i.toString());if(!await rU.pathExists(o)){t.push(i);continue}let u=Ed.join(o,"package.json");await rU.pathExists(u)||r.push(i)}if(t.length>0)throw zo(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Jo.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw zo(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Jo.BAD_REQUEST,void 0,void 0,!0)}a(oU,"checkProjectPaths");function aU(e){let t=fd.object({projects:fd.array().min(1).items(fd.string()).required(),dry_run:fd.boolean().default(!1)});return pZ.validateBySchema(e,t)}a(aU,"modulesValidator")});var PS=T((zle,fU)=>{"use strict";var jo=require("fs-extra"),MS=require("path"),pd=q(),uU=$(),Sd=b(),dU=X(),NZ=Tr();fU.exports=bZ;async function bZ(){let e=yZ(),t=dU.get(Sd.CONFIG_PARAMS.ROOTPATH),r=MS.join(t,"package.json"),s={dependencies:{harperdb:"file:"+Sd.PACKAGE_ROOT}},n=MS.join(t,"node_modules");await jo.ensureDir(n);let i,o=!0,c=!1;try{i=await jo.readJson(r)}catch(u){if(uU.isEmptyOrZeroLength(e))return;if(u.code!==Sd.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!uU.isEmptyOrZeroLength(e)){for(let{name:u,package:_}of e){let l=await lU(_);s.dependencies[u]=l+_}if(!o){pd.notify("Installing components"),await _U(r,s,null);return}for(let{name:u,package:_}of e){let l=i.dependencies[u],d=await lU(_);if(l===void 0||l!==d+_){c=!0;break}}}for(let u in i.dependencies)s.dependencies[u]===void 0&&(pd.notify("Removing component",u),c=!0);c&&(pd.notify("Updating components."),await _U(r,s,i))}a(bZ,"installComponents");function yZ(){let e=NZ.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(yZ,"getComponentsConfig");async function lU(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":MS.extname(e)||await jo.pathExists(e)?"file:":"github:"}a(lU,"getPkgPrefix");async function _U(e,t,r){pd.trace("npm installing components package.json",t),await jo.writeFile(e,JSON.stringify(t,null," "));try{await md().installAllRootModules(dU.get(Sd.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(s){throw r?await jo.writeFile(e,JSON.stringify(r,null," ")):await jo.unlink(e),s}}a(_U,"installPackages")});var HS=T((jle,pU)=>{"use strict";var Le=require("fs-extra"),vS=require("fast-glob"),_e=require("path"),hU=require("tar-fs"),Xle=require("uuid").v4,BS=require("normalize-path"),ks=tU(),ft=q(),Me=b(),nt=X(),zc=Tr(),IZ=$(),{PACKAGE_ROOT:wZ}=b(),{handleHDBError:Tt,hdb_errors:CZ}=j(),{basename:LZ}=require("path"),DZ=PS(),mU=X(),UZ=b(),{Readable:MZ}=require("stream"),{isMainThread:PZ}=require("worker_threads"),{HDB_ERROR_MSGS:Hi,HTTP_STATUS_CODES:Rt}=CZ,vZ=_e.join(wZ,"application-template"),EU=_e.join(nt.get(Me.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function BZ(){ft.trace("getting custom api status");let e={};try{e={port:nt.get(Me.CONFIG_PARAMS.HTTP_PORT),directory:nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Tt(new Error,Hi.FUNCTION_STATUS,Rt.INTERNAL_SERVER_ERROR,ft.ERR,t)}return e}a(BZ,"customFunctionsStatus");function HZ(){ft.trace("getting custom api endpoints");let e={},t=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT);try{vS.sync(BS(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:vS.sync(BS(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:vS.sync(BS(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Tt(new Error,Hi.GET_FUNCTIONS,Rt.INTERNAL_SERVER_ERROR,ft.ERR,r)}return e}a(HZ,"getCustomFunctions");function FZ(e){e.project&&(e.project=_e.parse(e.project).name),e.file&&(e.file=_e.parse(e.file).name);let t=ks.getDropCustomFunctionValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);ft.trace("getting custom api endpoint file content");let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i}=e,o=_e.join(r,s,n,i+".js");try{return Le.readFileSync(o,{encoding:"utf8"})}catch(c){throw Tt(new Error,Hi.GET_FUNCTION,Rt.INTERNAL_SERVER_ERROR,ft.ERR,c)}}a(FZ,"getCustomFunction");function GZ(e){e.project&&(e.project=_e.parse(e.project).name),e.file&&(e.file=_e.parse(e.file).name);let t=ks.setCustomFunctionValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);ft.trace("setting custom function file content");let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i,function_content:o}=e;try{return Le.outputFileSync(_e.join(r,s,n,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw Tt(new Error,Hi.SET_FUNCTION,Rt.INTERNAL_SERVER_ERROR,ft.ERR,c)}}a(GZ,"setCustomFunction");function qZ(e){e.project&&(e.project=_e.parse(e.project).name),e.file&&(e.file=_e.parse(e.file).name);let t=ks.getDropCustomFunctionValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);ft.trace("dropping custom function file");let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i}=e;try{return Le.unlinkSync(_e.join(r,s,n,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw Tt(new Error,Hi.DROP_FUNCTION,Rt.INTERNAL_SERVER_ERROR,ft.ERR,o)}}a(qZ,"dropCustomFunction");function xZ(e){e.project&&(e.project=_e.parse(e.project).name);let t=ks.addComponentValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);ft.trace("adding component");let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e;try{let n=_e.join(r,s);return Le.mkdirSync(n,{recursive:!0}),Le.copySync(vZ,n),`Successfully added project: ${s}`}catch(n){throw Tt(new Error,Hi.ADD_FUNCTION,Rt.INTERNAL_SERVER_ERROR,ft.ERR,n)}}a(xZ,"addComponent");function kZ(e){e.project&&(e.project=_e.parse(e.project).name);let t=ks.dropCustomFunctionProjectValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);ft.trace("dropping custom function project");let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e,n=nt.get(Me.CONFIG_PARAMS.APPS);if(!IZ.isEmptyOrZeroLength(n)){let i=!1;for(let[o,c]of n.entries())if(c.name===s){n.splice(o,1),i=!0;break}if(i)return zc.updateConfigValue(Me.CONFIG_PARAMS.APPS,n),`Successfully deleted project: ${s}`}try{let i=_e.join(r,s);return Le.rmSync(i,{recursive:!0}),`Successfully deleted project: ${s}`}catch(i){throw Tt(new Error,Hi.DROP_FUNCTION_PROJECT,Rt.INTERNAL_SERVER_ERROR,ft.ERR,i)}}a(kZ,"dropCustomFunctionProject");async function VZ(e){e.project&&(e.project=_e.parse(e.project).name);let t=ks.packageComponentValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e;ft.trace("packaging component",s);let n;try{n=await Le.realpath(_e.join(r,s))}catch(u){if(u.code!==Me.NODE_ERROR_CODES.ENOENT)throw u;try{n=await Le.realpath(_e.join(nt.get(Me.CONFIG_PARAMS.ROOTPATH),"node_modules",s))}catch(_){if(_.code===Me.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${s}'`)}}await Le.ensureDir(EU);let i=_e.join(EU,`${s}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(_e.join(n,"node_modules"))}),hU.pack(n,o).pipe(Le.createWriteStream(i,{overwrite:!0})),await new Promise(u=>setTimeout(u,2e3));let c=Le.readFileSync(i,{encoding:"base64"});return await Le.remove(i),{project:s,payload:c}}a(VZ,"packageComponent");async function $Z(e){e.project&&(e.project=_e.parse(e.project).name);let t=ks.deployComponentValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s,payload:n,package:i}=e;if(ft.trace("deploying component",s),!n&&!i)throw new Error("'payload' or 'package' must be provided");let o;if(n){o=_e.join(r,s),i="file:"+o,await Le.ensureDir(o);let f=MZ.from(Buffer.from(n,"base64"));await new Promise((h,p)=>{f.pipe(hU.extract(o,{finish:h})).on("error",p)});let E=await Le.readdir(o);E.length===1&&E[0]==="package"&&(await Le.copy(_e.join(o,"package"),o),await Le.remove(_e.join(o,"package")))}if(await zc.addConfig(s,{package:i}),!n){await DZ();let f=mU.get(UZ.CONFIG_PARAMS.ROOTPATH);o=_e.join(f,"node_modules",s)}if(PZ)return;let c=new Map;c.isWorker=!0;let u=(Rd(),Z(Td)),_;u.setErrorReporter(f=>_=f);let l=LZ(o),d=u.component_errors.get(l);try{await u.loadComponent(o,c)}finally{u.component_errors.set(l,d)}if(_)throw _;return ft.info("Installed component"),`Successfully deployed: ${s}`}a($Z,"deployComponent");async function YZ(){let e=zc.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 Le.readdir(o,{withFileTypes:!0});for(let _ of u){let l=_.name;if(l.startsWith(".")||l==="node_modules")continue;let d=_e.join(o,l);if(_.isDirectory()||_.isSymbolicLink()){let f={name:l,entries:[]};c.entries.push(f),await r(d,f)}else{let f=await Le.stat(d),E={name:_e.basename(l),mtime:f.mtime,size:f.size};c.entries.push(E)}}return c}catch(u){return ft.warn("Error loading package",u),{error:u.toString(),entries:[]}}},"walk_dir"),s=await r(nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{name:nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT).split(_e.sep).slice(-1).pop(),entries:t});for(let o of s.entries)if(o.package){let c=await r(_e.join(nt.get(Me.CONFIG_PARAMS.ROOTPATH),"node_modules",o.name),{name:o.name,entries:[]});Object.assign(o,c)}let i=(Rd(),Z(Td)).component_errors;for(let o of t){let c=i.get(o.name);c?o.error=i.get(o.name):c===void 0&&(o.error="The component has not been loaded yet (may need a restart)")}return s}a(YZ,"getComponents");async function KZ(e){let t=ks.getComponentFileValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);let s=zc.getConfigObj()[e.project]||e.project==="harperdb"?_e.join(mU.get(Me.CONFIG_PARAMS.ROOTPATH),"node_modules"):nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),n=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await Le.stat(_e.join(s,e.project,e.file));return{message:await Le.readFile(_e.join(s,e.project,e.file),n),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===Me.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${_e.join(e.project,e.file)}'`):i}}a(KZ,"getComponentFile");async function WZ(e){let t=ks.setComponentFileValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},s=_e.join(nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);return e.payload!==void 0?(await Le.ensureFile(s),await Le.outputFile(s,e.payload,r)):await Le.ensureDir(s),"Successfully set component: "+e.file}a(WZ,"setComponentFile");async function QZ(e){let t=ks.dropComponentFileValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);let r=e.file?_e.join(e.project,e.file):e.project,s=_e.join(nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),r);return await Le.pathExists(s)&&await Le.remove(s),zc.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(QZ,"dropComponent");pU.exports={customFunctionsStatus:BZ,getCustomFunctions:HZ,getCustomFunction:FZ,setCustomFunction:GZ,dropCustomFunction:qZ,addComponent:xZ,dropCustomFunctionProject:kZ,packageComponent:VZ,deployComponent:$Z,getComponents:YZ,getComponentFile:KZ,setComponentFile:WZ,dropComponent:QZ}});var FS=T((e_e,TU)=>{"use strict";var Vs=require("joi"),SU=xe();TU.exports={readTransactionLogValidator:zZ,deleteTransactionLogsBeforeValidator:JZ};function zZ(e){let t=Vs.object({schema:Vs.string().required(),table:Vs.string().required(),from:Vs.date().timestamp(),to:Vs.date().timestamp(),limit:Vs.number().min(1)});return SU.validateBySchema(e,t)}a(zZ,"readTransactionLogValidator");function JZ(e){let t=Vs.object({schema:Vs.string().required(),table:Vs.string().required(),timestamp:Vs.date().timestamp().required()});return SU.validateBySchema(e,t)}a(JZ,"deleteTransactionLogsBeforeValidator")});var Ad=T((r_e,NU)=>{"use strict";var GS=b(),gd=dt(),RU=$(),gU=X(),AU=rn(),{handleHDBError:Zo,hdb_errors:XZ}=j(),{HTTP_STATUS_CODES:ea}=XZ,{readTransactionLogValidator:jZ,deleteTransactionLogsBeforeValidator:ZZ}=FS(),OU="This operation relies on clustering and cannot run with it disable.",e5="Logs successfully deleted from transaction log.",t5="All logs successfully deleted from transaction log.";NU.exports={readTransactionLog:r5,deleteTransactionLogsBefore:s5};async function*r5(e){let t=jZ(e);if(t)throw Zo(t,t.message,ea.BAD_REQUEST,void 0,void 0,!0);if(!gU.get(GS.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Zo(new Error,OU,ea.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=RU.checkSchemaTableExist(r,s);if(n)throw Zo(new Error,n,ea.NOT_FOUND,void 0,void 0,!0);let i=AU.createNatsTableStreamName(r,s),o=await gd.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===GS.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(r5,"readTransactionLog");async function s5(e){let t=ZZ(e);if(t)throw Zo(t,t.message,ea.BAD_REQUEST,void 0,void 0,!0);if(!gU.get(GS.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Zo(new Error,OU,ea.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=RU.checkSchemaTableExist(r,s);if(i)throw Zo(new Error,i,ea.NOT_FOUND,void 0,void 0,!0);let o=AU.createNatsTableStreamName(r,s),{jsm:c}=await gd.getNATSReferences(),u=await gd.getStreamInfo(o),_=new Date(u.state.first_ts).getTime();if(n<=_)return`No transactions exist before: ${n}`;let l=e5,d,f=new Date(u.state.last_ts).getTime();return n>f?(d=u.state.last_seq+1,l=t5):d=(await gd.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),l}a(s5,"deleteTransactionLogsBefore")});var yU=T((n_e,bU)=>{"use strict";var qS=class{static{a(this,"PermissionTableResponseObject")}constructor(t,r,s=[],n=[]){this.schema=t,this.table=r,this.required_table_permissions=s,this.required_attribute_permissions=n}};bU.exports=qS});var wU=T((o_e,IU)=>{"use strict";var xS=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};IU.exports=xS});var VS=T((c_e,LU)=>{"use strict";var CU=yU(),n5=wU(),{HDB_ERROR_MSGS:i5}=dr(),kS=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=i5.OP_AUTH_PERMS_ERROR,this.unauthorized_access={},this.invalid_schema_items=[]}handleUnauthorizedItem(t){return this.invalid_schema_items=[],this.unauthorized_access=[t],this}handleInvalidItem(t){return this.invalid_schema_items=[t],this.unauthorized_access=[],this}addInvalidItem(t,r,s){if(r&&s){let n=`${r}_${s}`;if(this.unauthorized_access[n])return}this.invalid_schema_items.push(t)}addUnauthorizedTable(t,r,s){let n=new CU(t,r,s),i=`${t}_${r}`;this.unauthorized_access[i]=n}addUnauthorizedAttributes(t,r,s,n){let i=[];t.forEach(c=>{let u=new n5(c,n[c]);i.push(u)});let o=`${r}_${s}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new CU(r,s,[],i);this.unauthorized_access[o]=c}}getPermsResponse(){let t=Object.values(this.unauthorized_access);return t.length>0||this.invalid_schema_items.length>0?(this.unauthorized_access=t,this):null}};LU.exports=kS});var yd=T((l_e,KU)=>{"use strict";var $S=xr(),Od=qr(),Wr=g_(),jc=mi(),YS=gi(),o5=sp(),a5=kw(),Zc=kr(),Nd=dp(),Et=q(),c5=hp(),u5=G_(),l5=Jp(),_5=V_(),d5=Xp(),f5=jp(),E5=tS(),h5=sS(),KS=oS(),hn=$(),m5=GL(),WS=_S(),MU=od(),Kr=b(),PU=GD(),p5=qo(),vU=Oc(),BU=(_d(),Z($c)),HU=Tr(),yr=HS(),S5=require("alasql"),FU=Ad(),GU=md(),qU=VS(),{handleHDBError:ir,hdb_errors:xU}=j(),{HDB_ERROR_MSGS:It,HTTP_STATUS_CODES:Jc}=xU,v=new Map,kU="delete",jn="insert",mn="read",Fi="update",Xc="describe",DU=jc.describeSchema.name,UU=jc.describeTable.name,VU={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},T5="catchup",R5="handleGetJob",g5="handleGetJobsByStartDate",bd={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},A5=[Wr.createTable.name,Wr.createAttribute.name,Wr.dropTable.name,Wr.dropAttribute.name],$U={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},F=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};v.set($S.insert.name,new F(!1,[jn]));v.set($S.update.name,new F(!1,[Fi]));v.set($S.upsert.name,new F(!1,[jn,Fi]));v.set(Od.searchByConditions.name,new F(!1,[mn]));v.set(Od.searchByHash.name,new F(!1,[mn]));v.set(Od.searchByValue.name,new F(!1,[mn]));v.set(Od.search.name,new F(!1,[mn]));v.set(Wr.createSchema.name,new F(!0,[]));v.set(Wr.createTable.name,new F(!0,[]));v.set(Wr.createAttribute.name,new F(!1,[jn]));v.set(Wr.dropSchema.name,new F(!0,[]));v.set(Wr.dropTable.name,new F(!0,[]));v.set(Wr.dropAttribute.name,new F(!0,[]));v.set(jc.describeSchema.name,new F(!1,[mn]));v.set(jc.describeTable.name,new F(!1,[mn]));v.set(YS.deleteRecord.name,new F(!1,[kU]));v.set(Zc.addUser.name,new F(!0,[]));v.set(Zc.alterUser.name,new F(!0,[]));v.set(Zc.dropUser.name,new F(!0,[]));v.set(Zc.listUsersExternal.name,new F(!0,[]));v.set(Nd.listRoles.name,new F(!0,[]));v.set(Nd.addRole.name,new F(!0,[]));v.set(Nd.alterRole.name,new F(!0,[]));v.set(Nd.dropRole.name,new F(!0,[]));v.set(c5.name,new F(!0,[]));v.set(u5.name,new F(!0,[]));v.set(l5.name,new F(!0,[]));v.set(_5.name,new F(!0,[]));v.set(d5.name,new F(!0,[]));v.set(f5.name,new F(!0,[]));v.set(KS.setRoutes.name,new F(!0,[]));v.set(KS.getRoutes.name,new F(!0,[]));v.set(KS.deleteRoutes.name,new F(!0,[]));v.set(HU.setConfiguration.name,new F(!0,[]));v.set(E5.clusterStatus.name,new F(!0,[]));v.set(h5.name,new F(!0,[]));v.set(WS.getFingerprint.name,new F(!0,[]));v.set(WS.setLicense.name,new F(!0,[]));v.set(YS.deleteFilesBefore.name,new F(!0,[]));v.set(YS.deleteAuditLogsBefore.name,new F(!0,[]));v.set(MU.restart.name,new F(!0,[]));v.set(MU.restartService.name,new F(!0,[]));v.set(o5.name,new F(!0,[]));v.set(a5.name,new F(!0,[mn]));v.set(p5.systemInformation.name,new F(!0,[]));v.set(HU.getConfiguration.name,new F(!0,[]));v.set(FU.readTransactionLog.name,new F(!0,[]));v.set(FU.deleteTransactionLogsBefore.name,new F(!0,[]));v.set(GU.installModules.name,new F(!0,[]));v.set(GU.auditModules.name,new F(!0,[]));v.set(vU.createTokens.name,new F(!1,[]));v.set(vU.refreshOperationToken.name,new F(!1,[]));v.set(BU.login.name,new F(!1,[]));v.set(BU.logout.name,new F(!1,[]));v.set(yr.customFunctionsStatus.name,new F(!0,[]));v.set(yr.getCustomFunctions.name,new F(!0,[]));v.set(yr.getComponents.name,new F(!0,[]));v.set(yr.getComponentFile.name,new F(!0,[]));v.set(yr.setComponentFile.name,new F(!0,[]));v.set(yr.dropComponent.name,new F(!0,[]));v.set(yr.getCustomFunction.name,new F(!0,[]));v.set(yr.setCustomFunction.name,new F(!0,[]));v.set(yr.dropCustomFunction.name,new F(!0,[]));v.set(yr.addComponent.name,new F(!0,[]));v.set(yr.dropCustomFunctionProject.name,new F(!0,[]));v.set(yr.packageComponent.name,new F(!0,[]));v.set(yr.deployComponent.name,new F(!0,[]));v.set(WS.getRegistrationInfo.name,new F(!1,[]));v.set(Zc.userInfo.name,new F(!1,[]));v.set(jc.describeAll.name,new F(!1,[]));v.set(R5,new F(!1,[]));v.set(g5,new F(!0,[]));v.set(T5,new F(!0,[]));v.set(bd.CSV_DATA_LOAD,new F(!1,[jn,Fi]));v.set(bd.CSV_URL_LOAD,new F(!1,[jn,Fi]));v.set(bd.CSV_FILE_LOAD,new F(!1,[jn,Fi]));v.set(bd.IMPORT_FROM_S3,new F(!1,[jn,Fi]));v.set($U.EXPORT_TO_S3,new F(!0,[]));v.set($U.EXPORT_LOCAL,new F(!0,[]));v.set(Kr.VALID_SQL_OPS_ENUM.DELETE,new F(!1,[kU]));v.set(Kr.VALID_SQL_OPS_ENUM.SELECT,new F(!1,[mn]));v.set(Kr.VALID_SQL_OPS_ENUM.INSERT,new F(!1,[jn]));v.set(Kr.VALID_SQL_OPS_ENUM.UPDATE,new F(!1,[Fi]));KU.exports={verifyPerms:N5,verifyPermsAst:O5,verifyBulkLoadAttributePerms:y5};function O5(e,t,r){if(hn.isEmptyOrZeroLength(e))throw Et.info("verify_perms_ast has an empty user parameter"),ir(new Error);if(hn.isEmptyOrZeroLength(t))throw Et.info("verify_perms_ast has an empty user parameter"),ir(new Error);if(hn.isEmptyOrZeroLength(r))throw Et.info("verify_perms_ast has a null operation parameter"),ir(new Error);try{let s=new qU,n=new m5(e),i=n.getSchemas(),o=new Map;if((!i||i.length===0)&&n.affected_attributes&&n.affected_attributes.size>0)throw Et.info("No schemas defined in verifyPermsAst(), will not continue."),ir(new Error);let c=!!t.role.permission.super_user,u=i.includes("system");if(u&&VU[r])throw ir(new Error,It.DROP_SYSTEM,Jc.FORBIDDEN);if(c&&!u)return null;let _=PU.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof S5.yy.Select&&(e=n.updateAttributeWildcardsForRolePerms(_));for(let d=0;d<i.length;d++){let f=n.getTablesBySchemaName(i[d]);f&&o.set(i[d],f)}let l=YU(t,r,o,s);return l||(o.forEach((d,f)=>{for(let E=0;E<d.length;E++){let h=n.getAttributesBySchemaTableName(f,d[E]),p=zS(t.role.permission,f,d[E]);QS(h,p,r,d[E],f,s)}}),s.getPermsResponse())}catch(s){throw ir(s)}}a(O5,"verifyPermsAst");function N5(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Et.info("null required parameter in verifyPerms"),ir(new Error,It.DEFAULT_INVALID_REQUEST,Jc.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let s=e.action,n=e.schema??e.database,i=e.table,o=new Map;n&&i&&o.set(n,[i]);let c=new qU;if(hn.isEmptyOrZeroLength(e.hdb_user.role)||hn.isEmptyOrZeroLength(e.hdb_user.role.permission))return Et.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(It.USER_HAS_NO_PERMS(e.hdb_user.username));let u=!!e.hdb_user.role.permission.super_user,_=e.hdb_user.role.permission.structure_user,l=o.has(Kr.SYSTEM_SCHEMA_NAME)||n===Kr.SYSTEM_SCHEMA_NAME;if(l&&VU[r])throw ir(new Error,It.DROP_SYSTEM,Jc.FORBIDDEN);if(u&&!l||_===!0&&(r===Wr.createSchema.name||r===Wr.dropSchema.name))return null;if(A5.indexOf(r)>=0&&(_===!0||Array.isArray(_)))return _===!0||_.indexOf(n)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${n}'`);let d=PU.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===DU||r===UU){if(n===Kr.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(It.SCHEMA_PERM_ERROR(n));if(!d.super_user){if(r===DU&&(!d[n]||!d[n][Xc]))return c.handleInvalidItem(It.SCHEMA_NOT_FOUND(n));if(r===UU&&(!d[n]||!d[n].tables[i]||!d[n].tables[i][Xc]))return c.handleInvalidItem(It.TABLE_NOT_FOUND(n,i))}}let f=YU(e.hdb_user,r,o,c,s);if(f)return f;if(v.get(r)&&v.get(r).perms.length===0)return null;if(!u&&e.get_attributes&&Kr.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let p=[],S=d[n].tables[i];S[Kr.PERMS_CRUD_ENUM.READ]&&(S.attribute_permissions.length>0?S.attribute_permissions.filter(I=>I[Kr.PERMS_CRUD_ENUM.READ]).forEach(I=>{p.push(I.attribute_name)}):p=global.hdb_schema[n][i].attributes.map(A=>A.attribute),e.get_attributes=p)}let E=b5(e),h=zS(e.hdb_user.role.permission,n,i);return QS(E,h,r,i,n,c,s),c.getPermsResponse()}a(N5,"verifyPerms");function YU(e,t,r,s,n){if(hn.arrayHasEmptyValues([e,t,r]))throw Et.info("hasPermissions has an invalid parameter"),ir(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||v.get(t).requires_su))return null;if(!v.get(t))throw Et.info(`operation ${t} not found.`),ir(new Error,It.OP_NOT_FOUND(t),Jc.BAD_REQUEST);if(v.get(t)&&v.get(t).requires_su)return Et.info(`operation ${t} requires SU permissions.`),s.handleUnauthorizedItem(It.OP_IS_SU_ONLY(t));let c=r.keys();for(let u of c){try{if(u&&!o[u]||o[u][Xc]===!1){s.addInvalidItem(It.SCHEMA_NOT_FOUND(u));continue}}catch{s.addInvalidItem(It.SCHEMA_NOT_FOUND(u));continue}let _=r.get(u);for(let l of _){let d=o[u].tables[l];if(!d||d[Xc]===!1)s.addInvalidItem(It.TABLE_NOT_FOUND(u,l));else try{let f=[],E=v.get(t).perms;!hn.isEmpty(n)&&E.includes(n)&&(E=[n]);for(let h=0;h<E.length;h++){let p=E[h],S=d[p];(S==null||S===!1)&&(Et.info(`Required ${p} permission not found for ${t} ${n?`${n} `:""}operation in role ${e.role.id}`),f.push(p))}f.length>0&&s.addUnauthorizedTable(u,l,f)}catch(f){let E=It.UNKNOWN_OP_AUTH_ERROR(t,u,l);throw Et.error(E),Et.error(f),ir(xU.CHECK_LOGS_WRAPPER(E))}}}return r.size<2?s.getPermsResponse():null}a(YU,"hasPermissions");function QS(e,t,r,s,n,i,o){if(!e||!t)throw Et.info("no attributes specified in checkAttributePerms."),ir(new Error);let c=v.get(r).perms;if(!c||c==="")throw Et.info(`no permissions found for ${r} in checkAttributePerms().`),ir(new Error);if(hn.isEmptyOrZeroLength(t))return Et.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[Xc]===!1){i.addInvalidItem(It.ATTR_NOT_FOUND(n,s,l),n,s);continue}if(c)for(let f of c){if(Kr.TIME_STAMP_NAMES.includes(d.attribute_name)&&f!==mn)throw ir(new Error,It.SYSTEM_TIMESTAMP_PERMS_ERR,Jc.FORBIDDEN);d[f]===!1&&(u[d.attribute_name]?u[d.attribute_name].push(f):u[d.attribute_name]=[f])}}else i.addInvalidItem(It.ATTR_NOT_FOUND(n,s,l),n,s)}let _=Object.keys(u);_.length>0&&i.addUnauthorizedAttributes(_,n,s,u)}a(QS,"checkAttributePerms");function b5(e){let t=new Set;try{if(e.action)return t;if(e.operation===Kr.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{t.add(r.search_attribute)}),e&&e.search_attribute&&t.add(e.search_attribute),!e.records||e.records.length===0){if(!e.get_attributes||!e.get_attributes.length===0)return t;for(let r=0;r<e.get_attributes.length;r++)t.add(e.get_attributes[r])}else for(let r=0;r<e.records.length;r++){let s=Object.keys(e.records[r]);for(let n=0;n<s.length;n++)t.add(s[n])}}catch(r){Et.info(r)}return t}a(b5,"getRecordAttributes");function zS(e,t,r){let s=new Map;if(hn.isEmpty(e))return Et.info("no hdb_user specified in getAttributePermissions"),s;if(e.super_user||!t||!r)return s;try{e[t].tables[r].attribute_permissions.forEach(n=>{s.has(n.attribute_name)||s.set(n.attribute_name,n)})}catch{Et.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return s}a(zS,"getAttributePermissions");function y5(e,t,r,s,n,i,o){let c=new Set(i),u=zS(e,s,n);QS(c,u,t,n,s,o,r)}a(y5,"verifyBulkLoadAttributePerms")});var wd=T((d_e,XU)=>{"use strict";XU.exports={evaluateSQL:G5,processAST:JU,convertSQLToAST:zU,checkASTPermissions:QU};var I5=xr(),WU=require("util"),w5=WU.callbackify(I5.insert),C5=qr().search,L5=Tw().update,D5=WU.callbackify(L5),U5=gw().convertDelete,Zn=require("alasql"),M5=yd(),Id=q(),P5=h_(),v5=$(),eu=b(),{hdb_errors:B5,handleHDBError:JS}=j(),{HTTP_STATUS_CODES:XS}=B5;P5(Zn);var H5=403,F5="There was a problem performing this insert. Please check the logs and try again.",jS=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function G5(e,t){let r=e.parsed_sql_object;if(!r){r=zU(e.sql);let s,n=r.ast.statements[0];if(n instanceof Zn.yy.Insert?s=n.into.databaseid:n instanceof Zn.yy.Select?s=n.from?n.from[0].databaseid:null:n instanceof Zn.yy.Update||n instanceof Zn.yy.Delete?s=n.table.databaseid:Id.error("AST in evaluateSQL is not a valid SQL type."),!(n instanceof Zn.yy.Select)&&v5.isEmptyOrZeroLength(s))return t("No schema specified",null)}JU(e,r,(s,n)=>{if(s)return t(s);t(null,n)})}a(G5,"evaluateSQL");function QU(e,t){let r;try{r=M5.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(s){throw s}return r||null}a(QU,"checkASTPermissions");function zU(e){let t=new jS;if(!e)throw JS(new Error,"The 'sql' parameter is missing from the request body",XS.BAD_REQUEST);try{let r=e.trim(),s=Zn.parse(r),n=r.split(" ")[0].toLowerCase();t.ast=s,t.variant=n}catch(r){let s=r.message.split(`
|
|
14
|
-
`);throw s[1]?JS(r,`Invalid SQL at: ${s[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,XS.BAD_REQUEST):JS(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",XS.BAD_REQUEST)}return t}a(zU,"convertSQLToAST");function JU(e,t,r){try{let s=q5;if(!e.bypass_auth&&!t.permissions_checked){let i=QU(e,t);if(i&&i.length>0)return r(H5,i)}let n={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case eu.VALID_SQL_OPS_ENUM.SELECT:s=C5,n=t.ast.statements[0];break;case eu.VALID_SQL_OPS_ENUM.INSERT:s=x5;break;case eu.VALID_SQL_OPS_ENUM.UPDATE:s=D5;break;case eu.VALID_SQL_OPS_ENUM.DELETE:s=U5;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}s(n,(i,o)=>{if(i){r(i);return}r(null,o)})}catch(s){return r(s)}}a(JU,"processAST");function q5(e,t){Id.info(e),t("unknown sql statement")}a(q5,"nullFunction");function x5({statement:e,hdb_user:t},r){let s=e.into,n={schema:s.databaseid,table:s.tableid,operation:"insert",hdb_user:t},i=e.columns.map(o=>o.columnid);try{n.records=k5(i,e.values)}catch(o){return r(o)}w5(n,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){Id.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a(x5,"convertInsert");function k5(e,t){try{return t.map(r=>{if(e.length!==r.length)throw"number of values do not match number of columns in insert";let s={};return r.forEach((n,i)=>{if(n.columnid)throw"cannot use a column in insert value";"value"in n?s[e[i]]=n.value:s[e[i]]=Zn.compile(`SELECT ${n.toString()} AS [${eu.FUNC_VAL}] FROM ?`)}),s})}catch(r){throw Id.error(r),new Error(F5)}}a(k5,"createDataObjects")});var ZS=T((E_e,ZU)=>{"use strict";var{S3:V5,GetObjectCommand:$5}=require("@aws-sdk/client-s3");ZU.exports={getFileStreamFromS3:Y5,getS3AuthObj:jU};async function Y5(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await jU(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new $5(r))).Body}a(Y5,"getFileStreamFromS3");function jU(e,t,r){return new V5({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(jU,"getS3AuthObj")});var Cd=T((m_e,uM)=>{"use strict";var rM=qr(),K5=wd(),W5=ZS(),{AsyncParser:Q5,Transform:z5}=require("json2csv"),ru=require("stream"),Ir=$(),eT=require("fs-extra"),J5=require("path"),Qr=q(),{promisify:sM}=require("util"),tu=$(),{handleHDBError:it,hdb_errors:X5}=j(),{HDB_ERROR_MSGS:or,HTTP_STATUS_CODES:ot}=X5,{streamAsJSON:j5}=UE(),{Upload:Z5}=require("@aws-sdk/lib-storage"),eM=["search_by_value","search_by_hash","sql"],tM=["json","csv"],nM="json",iM="csv",e8="Successfully exported JSON locally.",t8="Successfully exported CSV locally.",r8=1e3,s8=rM.searchByHash,n8=rM.searchByValue,i8=sM(K5.evaluateSQL),o8=sM(ru.finished);uM.exports={export_to_s3:l8,export_local:a8,toCsvStream:oM};async function a8(e){Qr.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=aM(e);if(!Ir.isEmpty(t))throw Qr.error(t),it(new Error,t,ot.BAD_REQUEST,void 0,void 0,!0);if(Ir.isEmpty(e.path))throw Qr.error(or.MISSING_VALUE("path")),it(new Error,or.MISSING_VALUE("path"),ot.BAD_REQUEST,void 0,void 0,!0);let r=(Ir.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(J5.sep)&&(e.path=e.path.substring(0,e.path.length-1));let s=Ir.buildFolderPath(e.path,r);await c8(e.path);let n=await cM(e);return await u8(s,e.format,n)}a(a8,"export_local");async function c8(e){if(Qr.trace("in confirmPath"),Ir.isEmptyOrZeroLength(e))throw it(new Error,`Invalid path: ${e}`,ot.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await eT.stat(e)}catch(r){let s;throw r.code==="ENOENT"?s=`path '${e}' does not exist`:r.code==="EACCES"?s=`access to path '${e}' is denied`:s=r.message,Qr.error(s),it(new Error,s,ot.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${e}' is not a directory, please supply a valid folder path`;throw Qr.error(r),it(new Error,r,ot.BAD_REQUEST,void 0,void 0,!0)}return!0}a(c8,"confirmPath");async function u8(e,t,r){if(Qr.trace("in saveToLocal"),tu.isEmptyOrZeroLength(e))throw it(new Error,or.INVALID_VALUE("file_path"),ot.BAD_REQUEST,void 0,void 0,!0);if(tu.isEmptyOrZeroLength(t))throw it(new Error,or.INVALID_VALUE("Source format"),ot.BAD_REQUEST,void 0,void 0,!0);if(tu.isEmpty(r))throw it(new Error,or.NOT_FOUND("Data"),ot.BAD_REQUEST,void 0,void 0,!0);if(t===nM){let s=eT.createWriteStream(e);return j5(r).pipe(s),await o8(s),{message:e8,path:e}}else if(t===iM){let s=eT.createWriteStream(e),n=ru.Readable.from(r),i={},o={objectMode:!0};return await new Q5(i,o).fromInput(n).toOutput(s).promise(!1),{message:t8,path:e}}throw it(new Error,or.INVALID_VALUE("format"),ot.BAD_REQUEST)}a(u8,"saveToLocal");async function l8(e){if(!e.s3||Object.keys(e.s3).length===0)throw it(new Error,or.MISSING_VALUE("S3 object"),ot.BAD_REQUEST);if(Ir.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw it(new Error,or.MISSING_VALUE("aws_access_key_id"),ot.BAD_REQUEST);if(Ir.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw it(new Error,or.MISSING_VALUE("aws_secret_access_key"),ot.BAD_REQUEST);if(Ir.isEmptyOrZeroLength(e.s3.bucket))throw it(new Error,or.MISSING_VALUE("bucket"),ot.BAD_REQUEST);if(Ir.isEmptyOrZeroLength(e.s3.key))throw it(new Error,or.MISSING_VALUE("key"),ot.BAD_REQUEST);if(Ir.isEmptyOrZeroLength(e.s3.region))throw it(new Error,or.MISSING_VALUE("region"),ot.BAD_REQUEST);let t=aM(e);if(!Ir.isEmpty(t))throw it(new Error,t,ot.BAD_REQUEST);Qr.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await cM(e)}catch(u){throw Qr.error(u),u}let s,n=await W5.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new ru.PassThrough;if(e.format===iM){i=e.s3.key+".csv";let u=oM(r);u.on("error",_=>{throw _}),u.pipe(o)}else if(e.format===nM){i=e.s3.key+".json";let u=new ru.Readable;u.pipe(o),u.on("error",d=>{throw d}),u.push("[");let _=r.length,l="";for(let[d,f]of r.entries()){let E=d===_-1?JSON.stringify(f):JSON.stringify(f)+",";l+=E,d!==0&&d%r8===0&&(u.push(l),l="")}l.length!==0&&u.push(l),u.push("]"),u.push(null)}else throw it(new Error,or.INVALID_VALUE("format"),ot.BAD_REQUEST);return new Z5({client:n,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(l8,"export_to_s3");function oM(e){let t=ru.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),r={},s={objectMode:!0},n=new z5(r,s);return t.pipe(n)}a(oM,"toCsvStream");function aM(e){if(Qr.trace("in exportCoreValidation"),Ir.isEmpty(e.format))return"format missing";if(tM.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${tM.join(", ")}`;let t=e.search_operation.operation;if(Ir.isEmpty(t))return"search_operation.operation missing";if(eM.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${eM.join(", ")}`}a(aM,"exportCoreValidation");async function cM(e){Qr.trace("in getRecords");let t,r;if(tu.isEmpty(e.search_operation)||tu.isEmptyOrZeroLength(e.search_operation.operation))throw it(new Error,or.INVALID_VALUE("Search operation"),ot.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=n8;break;case"search_by_hash":t=s8;break;case"sql":t=i8;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Qr.error(r),it(new Error,r,ot.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(cM,"getRecords")});var pM={};Qe(pM,{contentTypes:()=>rT,findBestSerializer:()=>Ud,getDeserializer:()=>ta,registerContentHandlers:()=>sT,serialize:()=>Md,serializeMessage:()=>Xn});function _8(e){try{return e?.[0]===123?JSON.parse(e):e}catch{return e}}function sT(e){e.register(f8,{serializers:[{regex:/^application\/json$/,serializer:Ld.streamAsJSON},{regex:/^application\/cbor$/,serializer:function(t){return new Gi.EncoderStream(su).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?Dd.Readable.from((0,$s.encodeIter)(t,su)):(0,$s.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,tT.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,$s.unpack)(r))}catch(n){n.statusCode=400,s(n)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,Gi.decode)(r))}catch(n){n.statusCode=400,s(n)}})}function Ud(e){let r=(e.headers.asObject||e.headers).accept,s,n=0,i,o,c=r?r.toLowerCase().split(/\s*,\s*/):[];for(let u of c){let[_,...l]=u.split(/\s*;\s*/),d=1,f={q:1};for(let h of l){let p=h.indexOf("=");f[h.substring(0,p)]=h.substring(p+1)}d=+f.q;let E=wt.get(_);if(E){let h=(E.q||1)*d;h>n&&(s=E,i=E.type||_,n=h,o=f)}}if(!s){if(r)return{serializer(){this.code(406).send("No supported content types found in Accept header, supported types include: "+Array.from(wt.keys()).join(", "))}};s=wt.get("application/json"),i="application/json"}return{serializer:s,type:i,parameters:o}}function Md(e,t,r){let s=_M&&t.headers.asObject?.["accept-encoding"]?.includes("br"),n;if(e?.contentType!=null&&e.data!=null)r.headers.set("Content-Type",e.contentType),r.headers.set("Vary","Accept-Encoding"),n=e.data;else if(e instanceof Uint8Array)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),n=e;else{let i=Ud(t);if(i.serializer.compressible===!1&&(s=!1),r.headers.set("Vary","Accept, Accept-Encoding"),r.headers.set("Content-Type",i.type),typeof e=="object"&&(e[Symbol.iterator]||e[Symbol.asyncIterator])&&i.serializer.serializeStream){let o=i.serializer.serializeStream(e);return s&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,pn.createBrotliCompress)({params:{[pn.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?pn.constants.BROTLI_MODE_TEXT:pn.constants.BROTLI_MODE_GENERIC,[pn.constants.BROTLI_PARAM_QUALITY]:2}}))),o}n=i.serializer.serialize(e)}return s&&n?.length>_M?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,pn.brotliCompress)(n,(c,u)=>{c?o(c):i(u)}))):n}function Xn(e,t){if(e?.contentType!=null&&e.data!=null)return e.data;if(!t)return JSON.stringify(e);let r=t.serialize;if(r)return r(e);let s=Ud(t);return r=t.serialize=s.serializer.serialize,r(e)}function E8(e){return new Promise((t,r)=>{let s=[];e.on("data",n=>s.push(n)),e.on("end",()=>t(Buffer.concat(s))),e.on("error",r)})}function ta(e,t){e||(e="");let r=e.indexOf(";"),s;r>-1&&(s=e.slice(r+1),e=e.slice(0,r));let n=wt.get(e);if(t){if(n?.deserializeStream)return n.deserializeStream;let i=wt.get(e)?.deserialize||dM(e,s);return o=>E8(o).then(i)}return e&&wt.get(e)?.deserialize||dM(e,s)}function dM(e,t){if(e.startsWith("text/")){let r=t?.match(/charset=(.+)/)?.[1]||"utf-8";return s=>({contentType:e,data:s.toString(r)})}else return e==="application/octet-stream"?r=>r:r=>{if(!e)try{if(r?.[0]===123)return JSON.parse(r)}catch{}return{contentType:e||"application/octet-stream",data:r}}}function h8(e,t){return{[Symbol.asyncIterator](){let r=e[Symbol.asyncIterator]?e[Symbol.asyncIterator]():e[Symbol.iterator]();return{next(){let s=r.next();return s.then?s.then(n=>({value:t(n.value),done:n.done})):{value:t(s.value),done:s.done}},return(s){return r.return(s)},throw(s){return r.throw(s)}}}}}var Ld,tT,$s,Gi,pn,Dd,fM,EM,hM,su,wt,rT,lM,mM,d8,f8,_M,Qo=Te(()=>{Ld=D(UE()),tT=D(Cd()),$s=require("msgpackr"),Gi=require("cbor-x"),pn=require("zlib"),Dd=require("stream");Hr();fM=require("../index"),EM=D(X()),hM=D(b()),su={useRecords:!1,useToJSON:!0},wt=new Map,rT=wt;ut.contentTypes=rT;(0,fM._assignPackageExport)("contentTypes",rT);wt.set("application/json",{serializeStream:Ld.streamAsJSON,serialize:JSON.stringify,deserialize:JSON.parse,q:.8});lM=new Gi.Encoder(su);wt.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new Gi.EncoderStream(su).end(e)},serialize:lM.encode,deserialize:lM.decode,q:1});wt.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?Dd.Readable.from((0,$s.encodeIter)(e,su)):(0,$s.pack)(e)},serialize:$s.pack,deserialize:$s.unpack,q:.9});wt.set("text/csv",{serializeStream(e){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,tT.toCsvStream)(e)},q:.1});wt.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});wt.set("text/event-stream",{serializeStream:function(e){return Dd.Readable.from(h8(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+`
|
|
15
|
-
`),e.data){let r=e.data;typeof r=="object"&&(r=
|
|
12
|
+
`,""):null}catch(f){f.stderr?i[u].npm_error=eU(f.stderr):i[u].npm_error=f.message;continue}try{i[u].npm_output=JSON.parse(l)}catch{i[u].npm_output=l}try{i[u].npm_error=JSON.parse(d)}catch{i[u].npm_error=d}}return ga.info(`finished installModules with response ${i}`),i}a(n8,"installModules");function eU(e){let t='"error": {',r=e.indexOf('"error": {'),n=e.indexOf(`}
|
|
13
|
+
`);return r>-1&&n>-1?JSON.parse(e.substring(r+t.length-1,n+1)):e}a(eU,"parseNPMStdErr");async function s8(e){ga.info(`starting auditModules for request: ${e}`);let t=rU(e);if(t)throw Sa(t,t.message,Ta.BAD_REQUEST);let{projects:r}=e;await $d(),await tU(r);let n={};for(let s=0,i=r.length;s<i;s++){let o=r[s],c=Vd.join(TT,o);n[o]={npm_output:null,npm_error:null};try{let u=await yu("npm audit --json",c);n[o].npm_output=JSON.parse(u)}catch(u){n[o].npm_error=eU(u.stderr)}}return ga.info(`finished auditModules with response ${n}`),n}a(s8,"auditModules");async function $d(){try{return await yu("npm -v"),!0}catch{throw Sa(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",Ta.BAD_REQUEST,void 0,void 0,!0)}}a($d,"checkNPMInstalled");async function tU(e){if(!Array.isArray(e)||e.length===0)throw Sa(new Error,"projects argument must be an array with at least 1 element",Ta.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=Vd.join(TT,i.toString());if(!await XM.pathExists(o)){t.push(i);continue}let u=Vd.join(o,"package.json");await XM.pathExists(u)||r.push(i)}if(t.length>0)throw Sa(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Ta.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Sa(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Ta.BAD_REQUEST,void 0,void 0,!0)}a(tU,"checkProjectPaths");function rU(e){let t=kd.object({projects:kd.array().min(1).items(kd.string()).required(),dry_run:kd.boolean().default(!1)});return j5.validateBySchema(e,t)}a(rU,"modulesValidator")});var RT=T((Kde,cU)=>{"use strict";var Ra=require("fs-extra"),gT=require("path"),Kd=V(),sU=J(),Wd=M(),aU=j(),i8=Ur();cU.exports=o8;async function o8(){let e=a8(),t=aU.get(Wd.CONFIG_PARAMS.ROOTPATH),r=gT.join(t,"package.json"),n={dependencies:{harperdb:"file:"+Wd.PACKAGE_ROOT}},s=gT.join(t,"node_modules");await Ra.ensureDir(s);let i,o=!0,c=!1;try{i=await Ra.readJson(r)}catch(u){if(sU.isEmptyOrZeroLength(e))return;if(u.code!==Wd.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!sU.isEmptyOrZeroLength(e)){for(let{name:u,package:_}of e){let l=await iU(_);n.dependencies[u]=l+_}if(!o){Kd.notify("Installing components"),await oU(r,n,null);return}for(let{name:u,package:_}of e){let l=i.dependencies[u],d=await iU(_);if(l===void 0||l!==d+_){c=!0;break}}}for(let u in i.dependencies)n.dependencies[u]===void 0&&(Kd.notify("Removing component",u),c=!0);c&&(Kd.notify("Updating components."),await oU(r,n,i))}a(o8,"installComponents");function a8(){let e=i8.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(a8,"getComponentsConfig");async function iU(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":gT.extname(e)||await Ra.pathExists(e)?"file:":"github:"}a(iU,"getPkgPrefix");async function oU(e,t,r){Kd.trace("npm installing components package.json",t),await Ra.writeFile(e,JSON.stringify(t,null," "));try{await Yd().installAllRootModules(aU.get(Wd.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(n){throw r?await Ra.writeFile(e,JSON.stringify(r,null," ")):await Ra.unlink(e),n}}a(oU,"installPackages")});var bT=T((zde,dU)=>{"use strict";var Fe=require("fs-extra"),AT=require("fast-glob"),pe=require("path"),lU=require("tar-fs"),Qde=require("uuid").v4,OT=require("normalize-path"),ns=JM(),wt=V(),Ye=M(),Tt=j(),Iu=Ur(),c8=J(),{PACKAGE_ROOT:u8}=M(),{handleHDBError:Ht,hdb_errors:l8}=Z(),{basename:_8}=require("path"),d8=RT(),_U=j(),f8=M(),{Readable:E8}=require("stream"),{isMainThread:h8}=require("worker_threads"),{HDB_ERROR_MSGS:io,HTTP_STATUS_CODES:xt}=l8,m8=pe.join(u8,"application-template"),uU=pe.join(Tt.get(Ye.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function p8(){wt.trace("getting custom api status");let e={};try{e={port:Tt.get(Ye.CONFIG_PARAMS.HTTP_PORT),directory:Tt.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Ht(new Error,io.FUNCTION_STATUS,xt.INTERNAL_SERVER_ERROR,wt.ERR,t)}return e}a(p8,"customFunctionsStatus");function S8(){wt.trace("getting custom api endpoints");let e={},t=Tt.get(Ye.CONFIG_PARAMS.COMPONENTSROOT);try{AT.sync(OT(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:AT.sync(OT(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:AT.sync(OT(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Ht(new Error,io.GET_FUNCTIONS,xt.INTERNAL_SERVER_ERROR,wt.ERR,r)}return e}a(S8,"getCustomFunctions");function T8(e){e.project&&(e.project=pe.parse(e.project).name),e.file&&(e.file=pe.parse(e.file).name);let t=ns.getDropCustomFunctionValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);wt.trace("getting custom api endpoint file content");let r=Tt.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,o=pe.join(r,n,s,i+".js");try{return Fe.readFileSync(o,{encoding:"utf8"})}catch(c){throw Ht(new Error,io.GET_FUNCTION,xt.INTERNAL_SERVER_ERROR,wt.ERR,c)}}a(T8,"getCustomFunction");function g8(e){e.project&&(e.project=pe.parse(e.project).name),e.file&&(e.file=pe.parse(e.file).name);let t=ns.setCustomFunctionValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);wt.trace("setting custom function file content");let r=Tt.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:o}=e;try{return Fe.outputFileSync(pe.join(r,n,s,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw Ht(new Error,io.SET_FUNCTION,xt.INTERNAL_SERVER_ERROR,wt.ERR,c)}}a(g8,"setCustomFunction");function R8(e){e.project&&(e.project=pe.parse(e.project).name),e.file&&(e.file=pe.parse(e.file).name);let t=ns.getDropCustomFunctionValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);wt.trace("dropping custom function file");let r=Tt.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{return Fe.unlinkSync(pe.join(r,n,s,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw Ht(new Error,io.DROP_FUNCTION,xt.INTERNAL_SERVER_ERROR,wt.ERR,o)}}a(R8,"dropCustomFunction");function A8(e){e.project&&(e.project=pe.parse(e.project).name);let t=ns.addComponentValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);wt.trace("adding component");let r=Tt.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;try{let s=pe.join(r,n);return Fe.mkdirSync(s,{recursive:!0}),Fe.copySync(m8,s),`Successfully added project: ${n}`}catch(s){throw Ht(new Error,io.ADD_FUNCTION,xt.INTERNAL_SERVER_ERROR,wt.ERR,s)}}a(A8,"addComponent");function O8(e){e.project&&(e.project=pe.parse(e.project).name);let t=ns.dropCustomFunctionProjectValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);wt.trace("dropping custom function project");let r=Tt.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=Tt.get(Ye.CONFIG_PARAMS.APPS);if(!c8.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 Iu.updateConfigValue(Ye.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=pe.join(r,n);return Fe.rmSync(i,{recursive:!0}),`Successfully deleted project: ${n}`}catch(i){throw Ht(new Error,io.DROP_FUNCTION_PROJECT,xt.INTERNAL_SERVER_ERROR,wt.ERR,i)}}a(O8,"dropCustomFunctionProject");async function b8(e){e.project&&(e.project=pe.parse(e.project).name);let t=ns.packageComponentValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);let r=Tt.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;wt.trace("packaging component",n);let s;try{s=await Fe.realpath(pe.join(r,n))}catch(u){if(u.code!==Ye.NODE_ERROR_CODES.ENOENT)throw u;try{s=await Fe.realpath(pe.join(Tt.get(Ye.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(_){if(_.code===Ye.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}await Fe.ensureDir(uU);let i=pe.join(uU,`${n}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(pe.join(s,"node_modules"))}),lU.pack(s,o).pipe(Fe.createWriteStream(i,{overwrite:!0})),await new Promise(u=>setTimeout(u,2e3));let c=Fe.readFileSync(i,{encoding:"base64"});return await Fe.remove(i),{project:n,payload:c}}a(b8,"packageComponent");async function N8(e){e.project&&(e.project=pe.parse(e.project).name);let t=ns.deployComponentValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);let r=Tt.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),{project:n,payload:s,package:i}=e;if(wt.trace("deploying component",n),!s&&!i)throw new Error("'payload' or 'package' must be provided");let o;if(s){o=pe.join(r,n),i="file:"+o,await Fe.ensureDir(o);let f=E8.from(Buffer.from(s,"base64"));await new Promise((h,p)=>{f.pipe(lU.extract(o,{finish:h})).on("error",p)});let E=await Fe.readdir(o);E.length===1&&E[0]==="package"&&(await Fe.copy(pe.join(o,"package"),o),await Fe.remove(pe.join(o,"package")))}if(await Iu.addConfig(n,{package:i}),!s){await d8();let f=_U.get(f8.CONFIG_PARAMS.ROOTPATH);o=pe.join(f,"node_modules",n)}if(h8)return;let c=new Map;c.isWorker=!0;let u=(zd(),ee(Qd)),_;u.setErrorReporter(f=>_=f);let l=_8(o),d=u.component_errors.get(l);try{await u.loadComponent(o,c)}finally{u.component_errors.set(l,d)}if(_)throw _;return wt.info("Installed component"),`Successfully deployed: ${n}`}a(N8,"deployComponent");async function y8(){let e=Iu.getConfiguration(),t=[];for(let o in e)if(e[o]?.package){if(e[o].package.startsWith("file:"))continue;t.push(Object.assign({},e[o],{name:o}))}let r=a(async(o,c)=>{try{let u=await Fe.readdir(o,{withFileTypes:!0});for(let _ of u){let l=_.name;if(l.startsWith(".")||l==="node_modules")continue;let d=pe.join(o,l);if(_.isDirectory()||_.isSymbolicLink()){let f={name:l,entries:[]};c.entries.push(f),await r(d,f)}else{let f=await Fe.stat(d),E={name:pe.basename(l),mtime:f.mtime,size:f.size};c.entries.push(E)}}return c}catch(u){return wt.warn("Error loading package",u),{error:u.toString(),entries:[]}}},"walk_dir"),n=await r(Tt.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),{name:Tt.get(Ye.CONFIG_PARAMS.COMPONENTSROOT).split(pe.sep).slice(-1).pop(),entries:t});for(let o of n.entries)if(o.package){let c=await r(pe.join(Tt.get(Ye.CONFIG_PARAMS.ROOTPATH),"node_modules",o.name),{name:o.name,entries:[]});Object.assign(o,c)}let i=(zd(),ee(Qd)).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(y8,"getComponents");async function I8(e){let t=ns.getComponentFileValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);let n=Iu.getConfigObj()[e.project]||e.project==="harperdb"?pe.join(_U.get(Ye.CONFIG_PARAMS.ROOTPATH),"node_modules"):Tt.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),s=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await Fe.stat(pe.join(n,e.project,e.file));return{message:await Fe.readFile(pe.join(n,e.project,e.file),s),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===Ye.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${pe.join(e.project,e.file)}'`):i}}a(I8,"getComponentFile");async function w8(e){let t=ns.setComponentFileValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=pe.join(Tt.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);return e.payload!==void 0?(await Fe.ensureFile(n),await Fe.outputFile(n,e.payload,r)):await Fe.ensureDir(n),"Successfully set component: "+e.file}a(w8,"setComponentFile");async function C8(e){let t=ns.dropComponentFileValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);let r=e.file?pe.join(e.project,e.file):e.project,n=pe.join(Tt.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),r);return await Fe.pathExists(n)&&await Fe.remove(n),Iu.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(C8,"dropComponent");dU.exports={customFunctionsStatus:p8,getCustomFunctions:S8,getCustomFunction:T8,setCustomFunction:g8,dropCustomFunction:R8,addComponent:A8,dropCustomFunctionProject:O8,packageComponent:b8,deployComponent:N8,getComponents:y8,getComponentFile:I8,setComponentFile:w8,dropComponent:C8}});var NT=T((Xde,EU)=>{"use strict";var ss=require("joi"),fU=rt();EU.exports={readTransactionLogValidator:L8,deleteTransactionLogsBeforeValidator:D8};function L8(e){let t=ss.object({schema:ss.string().required(),table:ss.string().required(),from:ss.date().timestamp(),to:ss.date().timestamp(),limit:ss.number().min(1)});return fU.validateBySchema(e,t)}a(L8,"readTransactionLogValidator");function D8(e){let t=ss.object({schema:ss.string().required(),table:ss.string().required(),timestamp:ss.date().timestamp().required()});return fU.validateBySchema(e,t)}a(D8,"deleteTransactionLogsBeforeValidator")});var Xd=T((Zde,TU)=>{"use strict";var yT=M(),Jd=It(),hU=J(),mU=j(),pU=Ts(),{handleHDBError:Aa,hdb_errors:M8}=Z(),{HTTP_STATUS_CODES:Oa}=M8,{readTransactionLogValidator:U8,deleteTransactionLogsBeforeValidator:P8}=NT(),SU="This operation relies on clustering and cannot run with it disable.",v8="Logs successfully deleted from transaction log.",B8="All logs successfully deleted from transaction log.";TU.exports={readTransactionLog:H8,deleteTransactionLogsBefore:x8};async function*H8(e){let t=U8(e);if(t)throw Aa(t,t.message,Oa.BAD_REQUEST,void 0,void 0,!0);if(!mU.get(yT.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Aa(new Error,SU,Oa.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n}=e,s=hU.checkSchemaTableExist(r,n);if(s)throw Aa(new Error,s,Oa.NOT_FOUND,void 0,void 0,!0);let i=pU.createNatsTableStreamName(r,n),o=await Jd.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===yT.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(H8,"readTransactionLog");async function x8(e){let t=P8(e);if(t)throw Aa(t,t.message,Oa.BAD_REQUEST,void 0,void 0,!0);if(!mU.get(yT.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Aa(new Error,SU,Oa.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n,timestamp:s}=e,i=hU.checkSchemaTableExist(r,n);if(i)throw Aa(new Error,i,Oa.NOT_FOUND,void 0,void 0,!0);let o=pU.createNatsTableStreamName(r,n),{jsm:c}=await Jd.getNATSReferences(),u=await Jd.getStreamInfo(o),_=new Date(u.state.first_ts).getTime();if(s<=_)return`No transactions exist before: ${s}`;let l=v8,d,f=new Date(u.state.last_ts).getTime();return s>f?(d=u.state.last_seq+1,l=B8):d=(await Jd.viewStream(o,parseInt(s),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),l}a(x8,"deleteTransactionLogsBefore")});var RU=T((tfe,gU)=>{"use strict";var IT=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}};gU.exports=IT});var OU=T((nfe,AU)=>{"use strict";var wT=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};AU.exports=wT});var LT=T((ife,NU)=>{"use strict";var bU=RU(),F8=OU(),{HDB_ERROR_MSGS:q8}=Ir(),CT=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=q8.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 bU(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let u=new F8(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 bU(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}};NU.exports=CT});var tf=T((afe,GU)=>{"use strict";var DT=en(),jd=Zr(),cn=Z_(),Lu=Pi(),MT=Fi(),G8=Vp(),k8=BC(),Du=rn(),Zd=jp(),Ct=V(),V8=tS(),$8=hd(),Y8=xS(),K8=pd(),W8=FS(),Q8=qS(),z8=VS(),J8=YS(),UT=QS(),Ls=J(),X8=UD(),PT=ZS(),wU=Pd(),an=M(),CU=UM(),j8=ua(),LU=tu(),DU=(qd(),ee(Au)),MU=Ur(),qr=bT(),Z8=require("alasql"),UU=Xd(),PU=Yd(),vU=LT(),{handleHDBError:pr,hdb_errors:BU}=Z(),{HDB_ERROR_MSGS:kt,HTTP_STATUS_CODES:wu}=BU,q=new Map,HU="delete",hi="insert",Ds="read",oo="update",Cu="describe",yU=Lu.describeSchema.name,IU=Lu.describeTable.name,xU={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},e6="catchup",t6="handleGetJob",r6="handleGetJobsByStartDate",ef={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},n6=[cn.createTable.name,cn.createAttribute.name,cn.dropTable.name,cn.dropAttribute.name],FU={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},$=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};q.set(DT.insert.name,new $(!1,[hi]));q.set(DT.update.name,new $(!1,[oo]));q.set(DT.upsert.name,new $(!1,[hi,oo]));q.set(jd.searchByConditions.name,new $(!1,[Ds]));q.set(jd.searchByHash.name,new $(!1,[Ds]));q.set(jd.searchByValue.name,new $(!1,[Ds]));q.set(jd.search.name,new $(!1,[Ds]));q.set(cn.createSchema.name,new $(!0,[]));q.set(cn.createTable.name,new $(!0,[]));q.set(cn.createAttribute.name,new $(!1,[hi]));q.set(cn.dropSchema.name,new $(!0,[]));q.set(cn.dropTable.name,new $(!0,[]));q.set(cn.dropAttribute.name,new $(!0,[]));q.set(Lu.describeSchema.name,new $(!1,[Ds]));q.set(Lu.describeTable.name,new $(!1,[Ds]));q.set(MT.deleteRecord.name,new $(!1,[HU]));q.set(Du.addUser.name,new $(!0,[]));q.set(Du.alterUser.name,new $(!0,[]));q.set(Du.dropUser.name,new $(!0,[]));q.set(Du.listUsersExternal.name,new $(!0,[]));q.set(Zd.listRoles.name,new $(!0,[]));q.set(Zd.addRole.name,new $(!0,[]));q.set(Zd.alterRole.name,new $(!0,[]));q.set(Zd.dropRole.name,new $(!0,[]));q.set(V8.name,new $(!0,[]));q.set($8.name,new $(!0,[]));q.set(Y8.name,new $(!0,[]));q.set(K8.name,new $(!0,[]));q.set(W8.name,new $(!0,[]));q.set(Q8.name,new $(!0,[]));q.set(UT.setRoutes.name,new $(!0,[]));q.set(UT.getRoutes.name,new $(!0,[]));q.set(UT.deleteRoutes.name,new $(!0,[]));q.set(MU.setConfiguration.name,new $(!0,[]));q.set(z8.clusterStatus.name,new $(!0,[]));q.set(J8.name,new $(!0,[]));q.set(PT.getFingerprint.name,new $(!0,[]));q.set(PT.setLicense.name,new $(!0,[]));q.set(MT.deleteFilesBefore.name,new $(!0,[]));q.set(MT.deleteAuditLogsBefore.name,new $(!0,[]));q.set(wU.restart.name,new $(!0,[]));q.set(wU.restartService.name,new $(!0,[]));q.set(G8.name,new $(!0,[]));q.set(k8.name,new $(!0,[Ds]));q.set(j8.systemInformation.name,new $(!0,[]));q.set(MU.getConfiguration.name,new $(!0,[]));q.set(UU.readTransactionLog.name,new $(!0,[]));q.set(UU.deleteTransactionLogsBefore.name,new $(!0,[]));q.set(PU.installModules.name,new $(!0,[]));q.set(PU.auditModules.name,new $(!0,[]));q.set(LU.createTokens.name,new $(!1,[]));q.set(LU.refreshOperationToken.name,new $(!1,[]));q.set(DU.login.name,new $(!1,[]));q.set(DU.logout.name,new $(!1,[]));q.set(qr.customFunctionsStatus.name,new $(!0,[]));q.set(qr.getCustomFunctions.name,new $(!0,[]));q.set(qr.getComponents.name,new $(!0,[]));q.set(qr.getComponentFile.name,new $(!0,[]));q.set(qr.setComponentFile.name,new $(!0,[]));q.set(qr.dropComponent.name,new $(!0,[]));q.set(qr.getCustomFunction.name,new $(!0,[]));q.set(qr.setCustomFunction.name,new $(!0,[]));q.set(qr.dropCustomFunction.name,new $(!0,[]));q.set(qr.addComponent.name,new $(!0,[]));q.set(qr.dropCustomFunctionProject.name,new $(!0,[]));q.set(qr.packageComponent.name,new $(!0,[]));q.set(qr.deployComponent.name,new $(!0,[]));q.set(PT.getRegistrationInfo.name,new $(!1,[]));q.set(Du.userInfo.name,new $(!1,[]));q.set(Lu.describeAll.name,new $(!1,[]));q.set(t6,new $(!1,[]));q.set(r6,new $(!0,[]));q.set(e6,new $(!0,[]));q.set(ef.CSV_DATA_LOAD,new $(!1,[hi,oo]));q.set(ef.CSV_URL_LOAD,new $(!1,[hi,oo]));q.set(ef.CSV_FILE_LOAD,new $(!1,[hi,oo]));q.set(ef.IMPORT_FROM_S3,new $(!1,[hi,oo]));q.set(FU.EXPORT_TO_S3,new $(!0,[]));q.set(FU.EXPORT_LOCAL,new $(!0,[]));q.set(an.VALID_SQL_OPS_ENUM.DELETE,new $(!1,[HU]));q.set(an.VALID_SQL_OPS_ENUM.SELECT,new $(!1,[Ds]));q.set(an.VALID_SQL_OPS_ENUM.INSERT,new $(!1,[hi]));q.set(an.VALID_SQL_OPS_ENUM.UPDATE,new $(!1,[oo]));GU.exports={verifyPerms:i6,verifyPermsAst:s6,verifyBulkLoadAttributePerms:a6};function s6(e,t,r){if(Ls.isEmptyOrZeroLength(e))throw Ct.info("verify_perms_ast has an empty user parameter"),pr(new Error);if(Ls.isEmptyOrZeroLength(t))throw Ct.info("verify_perms_ast has an empty user parameter"),pr(new Error);if(Ls.isEmptyOrZeroLength(r))throw Ct.info("verify_perms_ast has a null operation parameter"),pr(new Error);try{let n=new vU,s=new X8(e),i=s.getSchemas(),o=new Map;if((!i||i.length===0)&&s.affected_attributes&&s.affected_attributes.size>0)throw Ct.info("No schemas defined in verifyPermsAst(), will not continue."),pr(new Error);let c=!!t.role.permission.super_user,u=i.includes("system");if(u&&xU[r])throw pr(new Error,kt.DROP_SYSTEM,wu.FORBIDDEN);if(c&&!u)return null;let _=CU.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof Z8.yy.Select&&(e=s.updateAttributeWildcardsForRolePerms(_));for(let d=0;d<i.length;d++){let f=s.getTablesBySchemaName(i[d]);f&&o.set(i[d],f)}let l=qU(t,r,o,n);return l||(o.forEach((d,f)=>{for(let E=0;E<d.length;E++){let h=s.getAttributesBySchemaTableName(f,d[E]),p=BT(t.role.permission,f,d[E]);vT(h,p,r,d[E],f,n)}}),n.getPermsResponse())}catch(n){throw pr(n)}}a(s6,"verifyPermsAst");function i6(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Ct.info("null required parameter in verifyPerms"),pr(new Error,kt.DEFAULT_INVALID_REQUEST,wu.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 vU;if(Ls.isEmptyOrZeroLength(e.hdb_user.role)||Ls.isEmptyOrZeroLength(e.hdb_user.role.permission))return Ct.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(kt.USER_HAS_NO_PERMS(e.hdb_user.username));let u=!!e.hdb_user.role.permission.super_user,_=e.hdb_user.role.permission.structure_user,l=o.has(an.SYSTEM_SCHEMA_NAME)||s===an.SYSTEM_SCHEMA_NAME;if(l&&xU[r])throw pr(new Error,kt.DROP_SYSTEM,wu.FORBIDDEN);if(u&&!l||_===!0&&(r===cn.createSchema.name||r===cn.dropSchema.name))return null;if(n6.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=CU.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===yU||r===IU){if(s===an.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(kt.SCHEMA_PERM_ERROR(s));if(!d.super_user){if(r===yU&&(!d[s]||!d[s][Cu]))return c.handleInvalidItem(kt.SCHEMA_NOT_FOUND(s));if(r===IU&&(!d[s]||!d[s].tables[i]||!d[s].tables[i][Cu]))return c.handleInvalidItem(kt.TABLE_NOT_FOUND(s,i))}}let f=qU(e.hdb_user,r,o,c,n);if(f)return f;if(q.get(r)&&q.get(r).perms.length===0)return null;if(!u&&e.get_attributes&&an.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let p=[],S=d[s].tables[i];S[an.PERMS_CRUD_ENUM.READ]&&(S.attribute_permissions.length>0?S.attribute_permissions.filter(I=>I[an.PERMS_CRUD_ENUM.READ]).forEach(I=>{p.push(I.attribute_name)}):p=global.hdb_schema[s][i].attributes.map(A=>A.attribute),e.get_attributes=p)}let E=o6(e),h=BT(e.hdb_user.role.permission,s,i);return vT(E,h,r,i,s,c,n),c.getPermsResponse()}a(i6,"verifyPerms");function qU(e,t,r,n,s){if(Ls.arrayHasEmptyValues([e,t,r]))throw Ct.info("hasPermissions has an invalid parameter"),pr(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||q.get(t).requires_su))return null;if(!q.get(t))throw Ct.info(`operation ${t} not found.`),pr(new Error,kt.OP_NOT_FOUND(t),wu.BAD_REQUEST);if(q.get(t)&&q.get(t).requires_su)return Ct.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(kt.OP_IS_SU_ONLY(t));let c=r.keys();for(let u of c){try{if(u&&!o[u]||o[u][Cu]===!1){n.addInvalidItem(kt.SCHEMA_NOT_FOUND(u));continue}}catch{n.addInvalidItem(kt.SCHEMA_NOT_FOUND(u));continue}let _=r.get(u);for(let l of _){let d=o[u].tables[l];if(!d||d[Cu]===!1)n.addInvalidItem(kt.TABLE_NOT_FOUND(u,l));else try{let f=[],E=q.get(t).perms;!Ls.isEmpty(s)&&E.includes(s)&&(E=[s]);for(let h=0;h<E.length;h++){let p=E[h],S=d[p];(S==null||S===!1)&&(Ct.info(`Required ${p} permission not found for ${t} ${s?`${s} `:""}operation in role ${e.role.id}`),f.push(p))}f.length>0&&n.addUnauthorizedTable(u,l,f)}catch(f){let E=kt.UNKNOWN_OP_AUTH_ERROR(t,u,l);throw Ct.error(E),Ct.error(f),pr(BU.CHECK_LOGS_WRAPPER(E))}}}return r.size<2?n.getPermsResponse():null}a(qU,"hasPermissions");function vT(e,t,r,n,s,i,o){if(!e||!t)throw Ct.info("no attributes specified in checkAttributePerms."),pr(new Error);let c=q.get(r).perms;if(!c||c==="")throw Ct.info(`no permissions found for ${r} in checkAttributePerms().`),pr(new Error);if(Ls.isEmptyOrZeroLength(t))return Ct.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let u={};for(let l of e){let d=t.get(l);if(d){if(d[Cu]===!1){i.addInvalidItem(kt.ATTR_NOT_FOUND(s,n,l),s,n);continue}if(c)for(let f of c){if(an.TIME_STAMP_NAMES.includes(d.attribute_name)&&f!==Ds)throw pr(new Error,kt.SYSTEM_TIMESTAMP_PERMS_ERR,wu.FORBIDDEN);d[f]===!1&&(u[d.attribute_name]?u[d.attribute_name].push(f):u[d.attribute_name]=[f])}}else i.addInvalidItem(kt.ATTR_NOT_FOUND(s,n,l),s,n)}let _=Object.keys(u);_.length>0&&i.addUnauthorizedAttributes(_,s,n,u)}a(vT,"checkAttributePerms");function o6(e){let t=new Set;try{if(e.action)return t;if(e.operation===an.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){Ct.info(r)}return t}a(o6,"getRecordAttributes");function BT(e,t,r){let n=new Map;if(Ls.isEmpty(e))return Ct.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{Ct.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}a(BT,"getAttributePermissions");function a6(e,t,r,n,s,i,o){let c=new Set(i),u=BT(e,n,s);vT(c,u,t,s,n,o,r)}a(a6,"verifyBulkLoadAttributePerms")});var nf=T((ufe,KU)=>{"use strict";KU.exports={evaluateSQL:g6,processAST:YU,convertSQLToAST:$U,checkASTPermissions:VU};var c6=en(),kU=require("util"),u6=kU.callbackify(c6.insert),l6=Zr().search,_6=fC().update,d6=kU.callbackify(_6),f6=hC().convertDelete,mi=require("alasql"),E6=tf(),rf=V(),h6=W_(),m6=J(),Mu=M(),{hdb_errors:p6,handleHDBError:HT}=Z(),{HTTP_STATUS_CODES:xT}=p6;h6(mi);var S6=403,T6="There was a problem performing this insert. Please check the logs and try again.",FT=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function g6(e,t){let r=e.parsed_sql_object;if(!r){r=$U(e.sql);let n,s=r.ast.statements[0];if(s instanceof mi.yy.Insert?n=s.into.databaseid:s instanceof mi.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof mi.yy.Update||s instanceof mi.yy.Delete?n=s.table.databaseid:rf.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof mi.yy.Select)&&m6.isEmptyOrZeroLength(n))return t("No schema specified",null)}YU(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}a(g6,"evaluateSQL");function VU(e,t){let r;try{r=E6.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}a(VU,"checkASTPermissions");function $U(e){let t=new FT;if(!e)throw HT(new Error,"The 'sql' parameter is missing from the request body",xT.BAD_REQUEST);try{let r=e.trim(),n=mi.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
|
|
14
|
+
`);throw n[1]?HT(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,xT.BAD_REQUEST):HT(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",xT.BAD_REQUEST)}return t}a($U,"convertSQLToAST");function YU(e,t,r){try{let n=R6;if(!e.bypass_auth&&!t.permissions_checked){let i=VU(e,t);if(i&&i.length>0)return r(S6,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case Mu.VALID_SQL_OPS_ENUM.SELECT:n=l6,s=t.ast.statements[0];break;case Mu.VALID_SQL_OPS_ENUM.INSERT:n=A6;break;case Mu.VALID_SQL_OPS_ENUM.UPDATE:n=d6;break;case Mu.VALID_SQL_OPS_ENUM.DELETE:n=f6;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(YU,"processAST");function R6(e,t){rf.info(e),t("unknown sql statement")}a(R6,"nullFunction");function A6({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=O6(i,e.values)}catch(o){return r(o)}u6(s,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){rf.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a(A6,"convertInsert");function O6(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]]=mi.compile(`SELECT ${s.toString()} AS [${Mu.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw rf.error(r),new Error(T6)}}a(O6,"createDataObjects")});var qT=T((_fe,QU)=>{"use strict";var{S3:b6,GetObjectCommand:N6}=require("@aws-sdk/client-s3");QU.exports={getFileStreamFromS3:y6,getS3AuthObj:WU};async function y6(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await WU(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new N6(r))).Body}a(y6,"getFileStreamFromS3");function WU(e,t,r){return new b6({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(WU,"getS3AuthObj")});var sf=T((ffe,nP)=>{"use strict";var kT=Zr(),I6=nf(),w6=qT(),{AsyncParser:C6,Transform:L6}=require("json2csv"),Pu=require("stream"),Gr=J(),GT=require("fs-extra"),D6=require("path"),un=V(),{promisify:XU}=require("util"),Uu=J(),{handleHDBError:gt,hdb_errors:M6}=Z(),{HDB_ERROR_MSGS:Sr,HTTP_STATUS_CODES:Rt}=M6,{streamAsJSON:U6}=(Sh(),ee(DO)),{Upload:P6}=require("@aws-sdk/lib-storage"),zU=["search_by_value","search_by_hash","sql","search_by_conditions"],JU=["json","csv"],jU="json",ZU="csv",v6="Successfully exported JSON locally.",B6="Successfully exported CSV locally.",H6=1e3,x6=kT.searchByHash,F6=kT.searchByValue,q6=XU(I6.evaluateSQL),G6=XU(Pu.finished);nP.exports={export_to_s3:Y6,export_local:k6,toCsvStream:eP};async function k6(e){un.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=tP(e);if(!Gr.isEmpty(t))throw un.error(t),gt(new Error,t,Rt.BAD_REQUEST,void 0,void 0,!0);if(Gr.isEmpty(e.path))throw un.error(Sr.MISSING_VALUE("path")),gt(new Error,Sr.MISSING_VALUE("path"),Rt.BAD_REQUEST,void 0,void 0,!0);let r=(Gr.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(D6.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=Gr.buildFolderPath(e.path,r);await V6(e.path);let s=await rP(e);return await $6(n,e.format,s)}a(k6,"export_local");async function V6(e){if(un.trace("in confirmPath"),Gr.isEmptyOrZeroLength(e))throw gt(new Error,`Invalid path: ${e}`,Rt.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await GT.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,un.error(n),gt(new Error,n,Rt.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 un.error(r),gt(new Error,r,Rt.BAD_REQUEST,void 0,void 0,!0)}return!0}a(V6,"confirmPath");async function $6(e,t,r){if(un.trace("in saveToLocal"),Uu.isEmptyOrZeroLength(e))throw gt(new Error,Sr.INVALID_VALUE("file_path"),Rt.BAD_REQUEST,void 0,void 0,!0);if(Uu.isEmptyOrZeroLength(t))throw gt(new Error,Sr.INVALID_VALUE("Source format"),Rt.BAD_REQUEST,void 0,void 0,!0);if(Uu.isEmpty(r))throw gt(new Error,Sr.NOT_FOUND("Data"),Rt.BAD_REQUEST,void 0,void 0,!0);if(t===jU){let n=GT.createWriteStream(e);return U6(r).pipe(n),await G6(n),{message:v6,path:e}}else if(t===ZU){let n=GT.createWriteStream(e),s=Pu.Readable.from(r),i={},o={objectMode:!0};return await new C6(i,o).fromInput(s).toOutput(n).promise(!1),{message:B6,path:e}}throw gt(new Error,Sr.INVALID_VALUE("format"),Rt.BAD_REQUEST)}a($6,"saveToLocal");async function Y6(e){if(!e.s3||Object.keys(e.s3).length===0)throw gt(new Error,Sr.MISSING_VALUE("S3 object"),Rt.BAD_REQUEST);if(Gr.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw gt(new Error,Sr.MISSING_VALUE("aws_access_key_id"),Rt.BAD_REQUEST);if(Gr.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw gt(new Error,Sr.MISSING_VALUE("aws_secret_access_key"),Rt.BAD_REQUEST);if(Gr.isEmptyOrZeroLength(e.s3.bucket))throw gt(new Error,Sr.MISSING_VALUE("bucket"),Rt.BAD_REQUEST);if(Gr.isEmptyOrZeroLength(e.s3.key))throw gt(new Error,Sr.MISSING_VALUE("key"),Rt.BAD_REQUEST);if(Gr.isEmptyOrZeroLength(e.s3.region))throw gt(new Error,Sr.MISSING_VALUE("region"),Rt.BAD_REQUEST);let t=tP(e);if(!Gr.isEmpty(t))throw gt(new Error,t,Rt.BAD_REQUEST);un.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await rP(e)}catch(u){throw un.error(u),u}let n,s=await w6.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new Pu.PassThrough;if(e.format===ZU){i=e.s3.key+".csv";let u=eP(r);u.on("error",_=>{throw _}),u.pipe(o)}else if(e.format===jU){i=e.s3.key+".json";let u=new Pu.Readable;u.pipe(o),u.on("error",d=>{throw d}),u.push("[");let _=r.length,l="";for(let[d,f]of r.entries()){let E=d===_-1?JSON.stringify(f):JSON.stringify(f)+",";l+=E,d!==0&&d%H6===0&&(u.push(l),l="")}l.length!==0&&u.push(l),u.push("]"),u.push(null)}else throw gt(new Error,Sr.INVALID_VALUE("format"),Rt.BAD_REQUEST);return new P6({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(Y6,"export_to_s3");function eP(e){let t=Pu.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),r={},n={objectMode:!0},s=new L6(r,n);return t.pipe(s)}a(eP,"toCsvStream");function tP(e){if(un.trace("in exportCoreValidation"),Gr.isEmpty(e.format))return"format missing";if(JU.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${JU.join(", ")}`;let t=e.search_operation.operation;if(Gr.isEmpty(t))return"search_operation.operation missing";if(zU.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${zU.join(", ")}`}a(tP,"exportCoreValidation");async function rP(e){un.trace("in getRecords");let t,r;if(Uu.isEmpty(e.search_operation)||Uu.isEmptyOrZeroLength(e.search_operation.operation))throw gt(new Error,Sr.INVALID_VALUE("Search operation"),Rt.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=F6;break;case"search_by_hash":t=x6;break;case"search_by_conditions":t=kT.searchByConditions;break;case"sql":t=q6;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,un.error(r),gt(new Error,r,Rt.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(rP,"getRecords")});var lP={};Ve(lP,{contentTypes:()=>WT,findBestSerializer:()=>af,getDeserializer:()=>co,registerContentHandlers:()=>QT,serialize:()=>cf,serializeMessage:()=>Ei});function K6(e){try{return e?.[0]===123?KT(e):e}catch{return e}}function QT(e){e.register(Q6,{serializers:[{regex:/^application\/json$/,serializer:_c},{regex:/^application\/cbor$/,serializer:function(t){return new ao.EncoderStream(Bu).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?of.Readable.from((0,is.encodeIter)(t,Bu)):(0,is.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,VT.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,is.unpack)(r))}catch(s){s.statusCode=400,n(s)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,ao.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function af(e){let r=(e.headers.asObject||e.headers).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,f={q:1};for(let h of l){let p=h.indexOf("=");f[h.substring(0,p)]=h.substring(p+1)}d=+f.q;let E=Vt.get(_);if(E){let h=(E.q||1)*d;h>s&&(n=E,i=E.type||_,s=h,o=f)}}if(!n){if(r)return{serializer(){this.code(406).send("No supported content types found in Accept header, supported types include: "+Array.from(Vt.keys()).join(", "))}};n=Vt.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:o}}function cf(e,t,r){let n=iP&&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=af(t);if(i.serializer.compressible===!1&&(n=!1),r.headers.set("Vary","Accept, Accept-Encoding"),r.headers.set("Content-Type",i.type),typeof e=="object"&&(e[Symbol.iterator]||e[Symbol.asyncIterator])&&i.serializer.serializeStream){let o=i.serializer.serializeStream(e);return n&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,Ms.createBrotliCompress)({params:{[Ms.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?Ms.constants.BROTLI_MODE_TEXT:Ms.constants.BROTLI_MODE_GENERIC,[Ms.constants.BROTLI_PARAM_QUALITY]:2}}))),o}s=i.serializer.serialize(e)}return n&&s?.length>iP?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,Ms.brotliCompress)(s,(c,u)=>{c?o(c):i(u)}))):s}function Ei(e,t){if(e?.contentType!=null&&e.data!=null)return e.data;if(!t)return vu(e);let r=t.serialize;if(r)return r(e);let n=af(t);return r=t.serialize=n.serializer.serialize,r(e)}function z6(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 co(e,t){e||(e="");let r=e.indexOf(";"),n;r>-1&&(n=e.slice(r+1),e=e.slice(0,r));let s=Vt.get(e);if(t){if(s?.deserializeStream)return s.deserializeStream;let i=Vt.get(e)?.deserialize||oP(e,n);return o=>z6(o).then(i)}return e&&Vt.get(e)?.deserialize||oP(e,n)}function oP(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 KT(r)}catch{}return{contentType:e||"application/octet-stream",data:r}}}function J6(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 VT,is,ao,Ms,of,aP,$T,YT,cP,vu,KT,Bu,Vt,WT,sP,uP,W6,Q6,iP,pa=Ae(()=>{Sh();VT=v(sf()),is=require("msgpackr"),ao=require("cbor-x"),Ms=require("zlib"),of=require("stream");nr();aP=require("../index"),$T=v(j()),YT=v(M()),cP=$T.default.get(YT.CONFIG_PARAMS.SERIALIZATION_BIGINT)!==!1,vu=cP?wi:JSON.stringify,KT=cP?ph:JSON.parse,Bu={useRecords:!1,useToJSON:!0},Vt=new Map,WT=Vt;lt.contentTypes=WT;(0,aP._assignPackageExport)("contentTypes",WT);Vt.set("application/json",{serializeStream:_c,serialize:vu,deserialize:KT,q:.8});sP=new ao.Encoder(Bu);Vt.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new ao.EncoderStream(Bu).end(e)},serialize:sP.encode,deserialize:sP.decode,q:1});Vt.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?of.Readable.from((0,is.encodeIter)(e,Bu)):(0,is.pack)(e)},serialize:is.pack,deserialize:is.unpack,q:.9});Vt.set("text/csv",{serializeStream(e){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,VT.toCsvStream)(e)},q:.1});Vt.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});Vt.set("text/event-stream",{serializeStream:function(e){return of.Readable.from(J6(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+`
|
|
15
|
+
`),e.data){let r=e.data;typeof r=="object"&&(r=vu(r)),t+="data: "+r+`
|
|
16
16
|
`}return e.id&&(t+="id: "+e.id+`
|
|
17
17
|
`),e.retry&&(t+="retry: "+e.retry+`
|
|
18
18
|
`),t+`
|
|
19
|
-
`}else return typeof e=="object"?`data: ${
|
|
19
|
+
`}else return typeof e=="object"?`data: ${vu(e)}
|
|
20
20
|
|
|
21
21
|
`:`data: ${e}
|
|
22
22
|
|
|
23
|
-
`},compressible:!1,q:.8});
|
|
24
|
-
`,t)}var qi,bM,yM,nu,nT,vd,iu,iT,Bd,IM,Pd,wM,CM,LM,DM,SM,TM,UM,T8,R8,gM,AM,PM,OM,NM,A8,BM,ei,O8,ti=Te(()=>{qi=require("worker_threads"),bM=D(Ze());fe();yM=D(q()),nu=require("path"),nT=require("fs/promises"),vd=D(fr()),iu=D(X()),iT=D(b());Hr();(0,iu.initSync)();Bd=new Map,IM=(0,iu.get)(iT.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(m8,"setAnalyticsEnabled");a(wr,"recordAction");ut.recordAnalytics=wr;a(zr,"recordActionBinary");Pd=0,wM=1e3,CM="analytics-report",LM=[];a(ou,"addAnalyticsListener");DM=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(p8,"sendAnalytics");a(S8,"aggregation");SM=0,TM=0,UM=a(()=>new Promise(setImmediate),"rest");a(RM,"cleanup");T8=36e5,R8=31536e6;a(oT,"getRawAnalyticsTable");a(MM,"getAnalyticsTable");(0,bM.setChildListenerByType)(CM,vM);a(g8,"startScheduledTasks");OM=0,NM=new Map,A8=!1;a(vM,"recordAnalytics");O8=1e6;a(N8,"logAnalytics")});var Fd={};Qe(Fd,{start:()=>I8});async function y8(e,t){let r=e.headers.asObject,s=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&cl(e);let n=new vi;try{e.responseHeaders=n;let i=e.url.slice(1),o=cT.getMatch(i);if(!o)return t(e);e.handlerPath=o.path;let c={url:o.relativeURL,async:!0},u=o.Resource,_=r["cache-control"];if(_){_=_.toLowerCase();let p=_.match(/max-age=(\d+)/)?.[1];p&&(e.expiresAt=p*1e3+Date.now()),_.includes("only-if-cached")&&(e.onlyIfCached=!0),_.includes("no-cache")&&(e.noCache=!0),_.includes("no-store")&&(e.noCacheStore=!0),_.includes("stale-if-error")&&(e.staleIfError=!0),_.includes("must-revalidate")&&(e.mustRevalidate=!0)}let l=await Ge(e,()=>{if(s==="POST"||s==="PUT"||s==="PATCH"||s==="QUERY")try{e.data=ta(r["content-type"],!0)(e.body)}catch(p){throw new cu.ClientError(p,400)}switch(e.authorize=!0,s){case"GET":case"HEAD":return u.get(c,e);case"POST":return u.post(c,e.data,e);case"PUT":return u.put(c,e.data,e);case"DELETE":return u.delete(c,e);case"PATCH":return u.patch(c,e.data,e);case"OPTIONS":n.setIfNone("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return u.connect(c,null,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return u.query(c,e.data,e);case"COPY":return u.copy(c,r.destination,e);case"MOVE":return u.move(c,r.destination,e);case"BREW":throw new cu.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new cu.ServerError(`Method ${s} is not recognized`,501)}}),d=200,f;if(l==null)d=s==="GET"||s==="HEAD"?404:204,aT.lastModified&&e.lastModified&&n.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(f=e.lastModified){b8[0]=f;let p=String.fromCharCode(34,(Ct[0]&63)+62,(Ct[0]>>6)+(Ct[1]<<2&63)+62,(Ct[1]>>4)+(Ct[2]<<4&63)+62,(Ct[2]>>2)+62,(Ct[3]&63)+62,(Ct[3]>>6)+(Ct[4]<<2&63)+62,(Ct[4]>>4)+(Ct[5]<<4&63)+62,(Ct[5]>>2)+62,(Ct[6]&63)+62,(Ct[6]>>6)+(Ct[7]<<2&63)+62,34),S=r["if-none-match"];S&&p==S?(l?.onDone&&l.onDone(),d=304,l=void 0):n.setIfNone("ETag",p),aT.lastModified&&n.setIfNone("Last-Modified",new Date(f).toUTCString())}e.createdResource&&(d=201),e.newLocation&&n.setIfNone("Location",e.newLocation);let E={status:d,headers:n,body:void 0},h=l?.wasLoadedFromSource?.();return h!==void 0&&(E.wasCacheMiss=h,!h&&f&&n.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||f))/1e3))),l!==void 0&&(E.body=Md(l,e,E),s==="HEAD"&&(E.body=void 0)),E}catch(i){i.statusCode?i.statusCode===500?xi.warn(i):xi.info(i):xi.error(i),i.statusCode===405&&(i.method&&(i.message+=` to handle HTTP method ${i.method.toUpperCase()||""}`),i.allow&&(i.allow.push("trace","head","options"),n.setIfNone("Allow",i.allow.map(c=>c.toUpperCase()).join(", "))));let o={status:i.statusCode||500,headers:n,body:void 0};return o.body=Md(i.contentType?i:i.toString(),e,o),o}}function I8(e){aT=e,!HM&&(HM=!0,cT=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return y8(t,r)}),e.server.ws(async(t,r,s)=>{au++;let n=new ss;FM||(FM=!0,ou(l=>{au>0&&l.push({metric:"ws-connections",connections:au,byThread:!0})}));let i;t.on("error",l=>{i=!0,xi.warn(l)});let o;t.on("message",a(function(d){o||(o=ta(r.headers.asObject["content-type"]));let f=o(d);n.push(f)},"message"));let c;t.on("close",()=>{au--,zr(!i,"connection","ws","disconnect"),n.emit("close"),c&&c.return()}),await s;let u=r.url.slice(1),_=cT.getMatch(u);if(zr(!!_,"connection","ws","connect"),!_)t.send(Xn(`No resource was found to handle ${r.pathname}`,r));else{r.handlerPath=_.path,wr(h=>({count:h.count,total:au}),"connections",r.handlerPath,"connect","ws");let l={url:_.relativeURL,async:!0},d=_.Resource;c=(await Ge(r,()=>d.connect(l,n,r)))[Symbol.asyncIterator]();let E;for(;!(E=await c.next()).done;){let h=Xn(E.value,r);t.send(h),wr(h.length,"bytes-sent",r.handlerPath,"message","ws")}}t.close()}))}var xi,cu,Ct,b8,aT,HM,cT,FM,au,GM=Te(()=>{Qo();ti();xi=D(q()),cu=D(j());ul();Pa();_i();DS();Ct=new Uint8Array(8),b8=new Float64Array(Ct.buffer,0,1),aT={};a(y8,"http");au=0;a(I8,"start")});var uT=T((B_e,qM)=>{var{recordAction:Gd,recordActionBinary:w8}=(ti(),Z(Hd)),C8=require("fastify-plugin"),L8=200;qM.exports=C8(function(e,t,r){e.addHook("onResponse",async(s,n)=>{n.getResponseTime()}),e.addHook("onSend",async(s,n,i)=>{let o=n.getResponseTime(),c=performance.now(),u=n.request.routeOptions,_,l,d;u.config?.isOperation?(_=s.body?.operation,l="operation"):(_=u.url,l="fastify-route",d=u.method),Gd(o,"duration",_,d,l),w8(n.raw.statusCode<400,"success",_,d,l);let f=L8;i?.pipe?(i.on("data",h=>{f+=h.length}),i.on("end",()=>{Gd(performance.now()-c,"transfer",_,d,l),Gd(f,"bytes-sent",_,d,l)})):(f+=i?.length||0,Gd(f,"bytes-sent",_,d,l));let E=o.toFixed(3);n.header("Server-Timing",`db;dur=${E}`)}),r()},{name:"hdb-request-time"})});var fT=T((H_e,YM)=>{var $d=require("clone"),Yd=xe(),D8=$(),kd=b(),U8=q(),qd=require("fs"),lT=require("joi"),{string:Vd}=lT.types(),{hdb_errors:M8,handleHDBError:uu}=j(),{HDB_ERROR_MSGS:P8,HTTP_STATUS_CODES:xd}=M8,{common_validators:ra}=Ls(),xM=1e9,kM=" is required",v8=["insert","update","upsert"],_T={database:{presence:!1,format:ra.schema_format,length:ra.schema_length},schema:{presence:!1,format:ra.schema_format,length:ra.schema_length},table:{presence:!0,format:ra.schema_format,length:ra.schema_length},action:{inclusion:{within:v8,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},B8={schema:Vd.required(),table:Vd.required(),action:Vd.valid("insert","update","upsert")},{AWS_ACCESS_KEY:H8,AWS_SECRET:F8,AWS_BUCKET:G8,AWS_FILE_KEY:q8,REGION:x8}=kd.S3_BUCKET_AUTH_KEYS,k8={s3:{presence:!0},[`s3.${H8}`]:{presence:!0,type:"String"},[`s3.${F8}`]:{presence:!0,type:"String"},[`s3.${G8}`]:{presence:!0,type:"String"},[`s3.${q8}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${x8}`]:{presence:!0,type:"String"}},VM=$d(_T);VM.data.presence={message:kM};var $M=$d(_T);$M.file_path.presence={message:kM};var V8=Object.assign($d(_T),k8),dT=$d(B8);dT.csv_url=Vd.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();dT.passthrough_headers=lT.object();function $8(e){let t=Yd.validateObject(e,VM);return Kd(e,t)}a($8,"dataObject");function Y8(e){let t=Yd.validateBySchema(e,lT.object(dT));return Kd(e,t)}a(Y8,"urlObject");function K8(e){let t=Yd.validateObject(e,$M);return Kd(e,t)}a(K8,"fileObject");function W8(e){let t=Yd.validateObject(e,V8);return Kd(e,t)}a(W8,"s3FileObject");function Kd(e,t){if(!t){let r=D8.checkGlobalSchemaTable(e.schema,e.table);if(r)return uu(new Error,r,xd.BAD_REQUEST);if(e.operation===kd.OPERATIONS_ENUM.CSV_FILE_LOAD){try{qd.accessSync(e.file_path,qd.constants.R_OK|qd.constants.F_OK)}catch(s){return s.code===kd.NODE_ERROR_CODES.ENOENT?uu(s,`No such file or directory ${s.path}`,xd.BAD_REQUEST):s.code===kd.NODE_ERROR_CODES.EACCES?uu(s,`Permission denied ${s.path}`,xd.BAD_REQUEST):uu(s)}try{let s=qd.statSync(e.file_path).size;if(s>xM)return uu(new Error,P8.MAX_FILE_SIZE_ERR(s,xM),xd.BAD_REQUEST)}catch(s){U8.error(s),console.error(s)}}}return t}a(Kd,"postValidateChecks");YM.exports={dataObject:$8,urlObject:Y8,fileObject:K8,s3FileObject:W8}});var ET=T((G_e,KM)=>{"use strict";var lu=q(),Wd=b();async function Q8(e,t,r,s=void 0){if(!e||typeof e!="function")throw new Error("Invalid function parameter");let n;try{return n=await e(t),r&&await r(t,n,s),t.operation===Wd.OPERATIONS_ENUM.INSERT||t.operation===Wd.OPERATIONS_ENUM.UPDATE||t.operation===Wd.OPERATIONS_ENUM.UPSERT?(delete n.new_attributes,delete n.txn_time):t.operation===Wd.OPERATIONS_ENUM.DELETE&&delete n.txn_time,n}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(lu.info(i.message),i):i.http_resp_msg?(lu.error(`Error calling operation: ${e.name}`),lu.error(i.http_resp_msg),i):(lu.error(`Error calling operation: ${e.name}`),lu.error(i),i)}}a(Q8,"callOperationFunctionAsAwait");KM.exports={callOperationFunctionAsAwait:Q8}});var QM=T((x_e,WM)=>{"use strict";var hT=class{static{a(this,"BulkLoadFileObject")}constructor(t,r,s,n,i,o,c=null){this.op=t,this.action=r,this.schema=s,this.table=n,this.file_path=i,this.file_type=o,this.role_perms=c}},mT=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,s,n){this.action=t,this.schema=r,this.table=s,this.data=n}};WM.exports={BulkLoadFileObject:hT,BulkLoadDataObject:mT}});var JM=T((V_e,zM)=>{"use strict";var pT=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};zM.exports=pT});var OT=T((z_e,fP)=>{"use strict";var Qd=xr(),Jd=fT(),z8=require("needle"),Ts=b(),Y_e=ke(),sa=$(),{handleHDBError:$e,hdb_errors:iP}=j(),{HTTP_STATUS_CODES:Lt,HDB_ERROR_MSGS:ht,CHECK_LOGS_WRAPPER:Vi}=iP,na=q(),ST=require("papaparse");sa.promisifyPapaParse();var Rs=require("fs-extra"),J8=require("path"),{chain:XM}=require("stream-chain"),jM=require("stream-json/streamers/StreamArray"),ZM=require("stream-json/utils/Batch"),eP=require("stream-chain/utils/comp"),{finished:tP}=require("stream"),X8=X(),oP=ET(),j8=ZS(),{BulkLoadFileObject:RT,BulkLoadDataObject:Z8}=QM(),gT=VS(),{verifyBulkLoadAttributePerms:aP}=yd(),K_e=JM(),W_e=dt(),Q_e=rn(),{databases:e6}=(fe(),Z(Ce)),{coerceType:t6}=(Xd(),Z(NT)),rP="No records parsed from csv file.",ki=`${X8.get("HDB_ROOT")}/tmp`,{schema_regex:r6}=Ls(),sP=1024*1024*2,nP=5e3,s6={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};fP.exports={csvDataLoad:n6,csvURLLoad:i6,csvFileLoad:o6,importFromS3:a6};async function n6(e,t){let r=Jd.dataObject(e);if(r)throw $e(r,r.message,Lt.BAD_REQUEST,void 0,void 0,!0);let s={};try{let n=lP(e.schema,e.table),i=ST.parse(e.data,{header:!0,skipEmptyLines:!0,transform:TT.bind(null,n),dynamicTyping:!1}),o=new gT;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&aP(e.hdb_user.role.permission,this.job_operation_function.name,e.action,e.schema,e.table,i.meta.fields,o);let c=o.getPermsResponse();if(c)throw $e(new Error,c,Lt.BAD_REQUEST,void 0,void 0,!0);let u=new Z8(e.action,e.schema,e.table,i.data);return s=await oP.callOperationFunctionAsAwait(_P,u,null),s.message===rP?rP:dP(s.records,s.number_written)}catch(n){throw $i(n)}}a(n6,"csvDataLoad");async function i6(e){let t=Jd.urlObject(e);if(t)throw $e(t,t.message,Lt.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,s=`${ki}/${r}`;try{await c6(e,r)}catch(n){throw na.error(ht.DOWNLOAD_FILE_ERR(r)+" - "+n),$e(n,Vi(ht.DOWNLOAD_FILE_ERR(r)))}try{let n=new RT(this.job_operation_function.name,e.action,e.schema,e.table,s,Ts.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await AT(n);return await zd(s),i}catch(n){throw await zd(s),$i(n)}}a(i6,"csvURLLoad");async function o6(e){let t=Jd.fileObject(e);if(t)throw $e(t,t.message,Lt.BAD_REQUEST,void 0,void 0,!0);let r=new RT(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Ts.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await AT(r)}catch(s){throw $i(s)}}a(o6,"csvFileLoad");async function a6(e){let t=Jd.s3FileObject(e);if(t)throw $e(t,t.message,Lt.BAD_REQUEST,void 0,void 0,!0);let r;try{let s=J8.extname(e.s3.key),n=`${Date.now()}${s}`;r=`${ki}/${n}`;let i=new RT(this.job_operation_function.name,e.action,e.schema,e.table,r,s,e.hdb_user.role.permission);await u6(n,e);let o=await AT(i);return await zd(r),o}catch(s){throw await zd(r),$i(s)}}a(a6,"importFromS3");async function c6(e,t){let r;try{let s=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await z8("get",e.csv_url,s)}catch(s){let n=`Error downloading CSV file from ${e.csv_url}, status code: ${s.statusCode}. Check the log for more information.`;throw $e(s,n,s.statusCode,Ts.LOG_LEVELS.ERROR,"Error downloading CSV file - "+s)}_6(r,e.csv_url),await l6(t,r.raw)}a(c6,"downloadCSVFile");async function u6(e,t){try{let r=`${ki}/${e}`;await Rs.mkdirp(ki),await Rs.writeFile(`${ki}/${e}`,"",{flag:"a+"});let s=await Rs.createWriteStream(r),n=await j8.getFileStreamFromS3(t);await new Promise((i,o)=>{n.on("error",function(c){o(c)}),n.pipe(s).on("error",function(c){o(c)}).on("close",function(){na.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw na.error(ht.S3_DOWNLOAD_ERR+" - "+r),$e(r,Vi(ht.S3_DOWNLOAD_ERR))}}a(u6,"downloadFileFromS3");async function l6(e,t){try{await Rs.mkdirp(ki),await Rs.writeFile(`${ki}/${e}`,t)}catch(r){throw na.error(ht.WRITE_TEMP_FILE_ERR),$e(r,Vi(ht.DEFAULT_BULK_LOAD_ERR))}}a(l6,"writeFileToTempFolder");async function zd(e){if(e)try{await Rs.access(e),await Rs.unlink(e)}catch{na.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(zd,"deleteTempFile");function _6(e,t){if(e.statusCode!==iP.HTTP_STATUS_CODES.OK)throw $e(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Lt.BAD_REQUEST);if(!s6[e.headers["content-type"]])throw $e(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Lt.BAD_REQUEST);if(!e.raw)throw $e(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Lt.BAD_REQUEST)}a(_6,"validateURLResponse");async function AT(e){try{let t;switch(e.file_type){case Ts.VALID_S3_FILE_TYPES.CSV:t=await d6(e);break;case Ts.VALID_S3_FILE_TYPES.JSON:t=await f6(e);break;default:throw $e(new Error,ht.DEFAULT_BULK_LOAD_ERR,Lt.BAD_REQUEST,Ts.LOG_LEVELS.ERROR,ht.INVALID_FILE_EXT_ERR(e))}return dP(t.records,t.number_written)}catch(t){throw $i(t)}}a(AT,"fileLoad");async function cP(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;n&&n.pause();let o={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await Qd.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&aP(e.role_perms,e.op,e.action,e.schema,e.table,c,t),n&&n.resume()}catch(c){let u=$e(c);r(u)}}a(cP,"validateChunk");async function uP(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;sa.autoCastJSONDeep(i),n&&n.pause();let o=s.meta?s.meta.fields:null;if(o)i.forEach(c=>{!sa.isEmpty(c)&&!sa.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 oP.callOperationFunctionAsAwait(_P,c,null);t.records+=u.records,t.number_written+=u.number_written,n&&n.resume()}catch(c){let u=$e(c,Vi(ht.INSERT_CSV_ERR),Lt.INTERNAL_SERVER_ERROR,Ts.LOG_LEVELS.ERROR,ht.INSERT_CSV_ERR+" - "+c);r(u)}}a(uP,"insertChunk");async function d6(e){let t={records:0,number_written:0},r=lP(e.schema,e.table);try{let s=new gT,n=Rs.createReadStream(e.file_path,{highWaterMark:sP});n.setEncoding("utf8"),await ST.parsePromise(n,cP.bind(null,e,s),TT.bind(null,r));let i=s.getPermsResponse();if(i)throw $e(new Error,i,Lt.BAD_REQUEST);return n=Rs.createReadStream(e.file_path,{highWaterMark:sP}),n.setEncoding("utf8"),await ST.parsePromise(n,uP.bind(null,e,t),TT.bind(null,r)),n.destroy(),t}catch(s){throw $e(s,Vi(ht.PAPA_PARSE_ERR),Lt.INTERNAL_SERVER_ERROR,Ts.LOG_LEVELS.ERROR,ht.PAPA_PARSE_ERR+s)}}a(d6,"callPapaParse");function lP(e,t){let r=e6[e][t].attributes,s=new Map;for(let n of r)n.type&&s.set(n.name,i=>t6(i,n));return s}a(lP,"createTransformMap");function TT(e,t,r){let s=e.get(r);return s?s(t):sa.autoCast(t)}a(TT,"typeFunction");async function f6(e){let t={records:0,number_written:0},r=a(s=>{throw s},"throwErr");try{let s=new gT,n=XM([Rs.createReadStream(e.file_path,{encoding:"utf-8"}),jM.withParser(),c=>c.value,new ZM({batchSize:nP}),eP(async c=>{await cP(e,s,r,c)})]);await new Promise((c,u)=>{tP(n,_=>{_?u(_):c()}),n.resume()});let i=s.getPermsResponse();if(i)throw $e(new Error,i,Lt.BAD_REQUEST);let o=XM([Rs.createReadStream(e.file_path,{encoding:"utf-8"}),jM.withParser(),c=>c.value,new ZM({batchSize:nP}),eP(async c=>{await uP(e,t,r,c)})]);return await new Promise((c,u)=>{tP(o,_=>{_?u(_):c()}),o.resume()}),t}catch(s){throw $e(s,Vi(ht.INSERT_JSON_ERR),Lt.INTERNAL_SERVER_ERROR,Ts.LOG_LEVELS.ERROR,ht.INSERT_JSON_ERR+s)}}a(f6,"insertJson");async function _P(e){let t={};try{e.data&&e.data.length>0&&E6(e.data[0])?t=await h6(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",na.info(t.message))}catch(r){throw $i(r)}return t}a(_P,"callBulkFileLoad");function E6(e){let t=Object.keys(e);for(let r of t)if(!r6.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(E6,"validateColumnNames");async function h6(e,t,r,s){s||(s="insert");let n={operation:s,schema:t,table:r,records:e},i;switch(s){case"insert":i=Qd.insert;break;case"update":i=Qd.update;break;case"upsert":i=Qd.upsert;break;default:throw $e(new Error,ht.INVALID_ACTION_PARAM_ERR(s),Lt.BAD_REQUEST,Ts.LOG_LEVELS.ERROR,ht.INVALID_ACTION_PARAM_ERR(s))}try{let o=await i(n),c;switch(s){case"insert":c=o.inserted_hashes;break;case"update":c=o.update_hashes;break;case"upsert":c=o.upserted_hashes;break;default:break}if(Array.isArray(o.skipped_hashes)&&o.skipped_hashes.length>0){let l=global.hdb_schema[t][r].hash_attribute,d=e.length;for(;d--;)o.skipped_hashes.indexOf(e[d][l])>=0&&e.splice(d,1)}let u=sa.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw $i(o)}}a(h6,"bulkFileLoad");function dP(e,t){return`successfully loaded ${t} of ${e} records`}a(dP,"buildResponseMsg");function $i(e){return $e(e,Vi(ht.DEFAULT_BULK_LOAD_ERR),Lt.INTERNAL_SERVER_ERROR,Ts.LOG_LEVELS.ERROR,ht.DEFAULT_BULK_LOAD_ERR+" - "+e)}a($i,"buildTopLevelErrMsg")});var hP=T((X_e,EP)=>{"use strict";var bT=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};EP.exports=bT});var SP=T((Z_e,pP)=>{"use strict";var m6=b(),mP=require("moment"),p6=require("uuid").v4,yT=class{static{a(this,"JobObject")}constructor(){this.id=p6(),this.type=void 0,this.start_datetime=mP().valueOf(),this.created_datetime=mP().valueOf(),this.end_datetime=void 0,this.status=m6.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};pP.exports=yT});var IT=T((tde,NP)=>{"use strict";var S6=require("uuid").v4,gP=xr(),AP=qr(),T6=vs(),R6=wo(),g6=hP(),Ye=b(),A6=SP(),O6=Sp(),Jr=q(),N6=za(),ia=$(),{promisify:b6}=require("util"),Yi=require("moment"),y6=wd(),jd=fT(),TP=Lh(),{deleteTransactionLogsBeforeValidator:I6}=FS(),{handleHDBError:w6,hdb_errors:C6}=j(),{HTTP_STATUS_CODES:L6}=C6,RP=AP.searchByValue,D6=AP.searchByHash,U6=gP.insert,M6=b6(y6.evaluateSQL),P6=gP.update;NP.exports={addJob:H6,updateJob:G6,handleGetJob:v6,handleGetJobsByStartDate:B6,getJobById:OP};async function v6(e){try{let t=await OP(e.id);return ia.isEmptyOrZeroLength(t)||(t[0]={...t[0]},t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}catch(t){let r=`There was an error getting job: ${t}`;throw Jr.error("There was an error getting job",t),new Error(r)}}a(v6,"handleGetJob");async function B6(e){try{let t=await F6(e);if(Jr.trace(`Searching for jobs from ${e.from_date} to ${e.to_date}`),t&&t.length>0)for(let r of t)r.start_datetime&&(r.start_datetime_converted=Yi(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=Yi(r.end_datetime)),r.request!==void 0&&delete r.request,delete r.__createdtime__,delete r.__updatedtime__;return t}catch(t){let r=`There was an error searching jobs by date: ${t}`;throw Jr.error(r),new Error(r)}}a(B6,"handleGetJobsByStartDate");async function H6(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||ia.isEmptyOrZeroLength(e.operation)){let l="job parameter is invalid";return Jr.info(l),t.error=l,t}if(!Ye.JOB_TYPE_ENUM[e.operation])return Jr.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,s;switch(r){case Ye.OPERATIONS_ENUM.CSV_FILE_LOAD:s=jd.fileObject(e);break;case Ye.OPERATIONS_ENUM.CSV_URL_LOAD:s=jd.urlObject(e);break;case Ye.OPERATIONS_ENUM.CSV_DATA_LOAD:s=jd.dataObject(e);break;case Ye.OPERATIONS_ENUM.IMPORT_FROM_S3:s=jd.s3FileObject(e);break;case Ye.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Ye.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:s=TP(e,"date");break;case Ye.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:s=TP(e,"timestamp");break;case Ye.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:s=I6(e);break;default:break}if(s)throw w6(s,s.message,L6.BAD_REQUEST,void 0,void 0,!0);let n=new A6;n.type=e.operation===Ye.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Ye.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,n.type=e.operation,n.user=e.hdb_user.username;let i=new T6(Ye.SYSTEM_SCHEMA_NAME,Ye.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",n.id,"id",["id"]),o;try{o=Array.from(await RP(i))}catch(l){let d=`There was an error inserting a new job: ${l}`;return Jr.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){n.id=S6();try{o=await RP(i)}catch(l){let d=`There was an error inserting a new job: ${l}`;return Jr.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return Jr.error("Error creating a job, could not find a unique job id."),t}n.request=e;let u=new N6(Ye.SYSTEM_SCHEMA_NAME,Ye.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[n]),_;try{_=await U6(u)}catch(l){return Jr.error(`There was an error inserting a job for job type: ${e.operation} -- ${l}`),t.success=!1,t}if(_.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${n.operation} and id ${n.id}`;else{let l=`Created a job with type ${n.type} and id ${n.id}`;t.message=l,t.createdJob=n,t.success=!0,Jr.trace(l)}return t}a(H6,"addJob");async function F6(e){let t=Yi(e.from_date,Yi.ISO_8601),r=Yi(e.to_date,Yi.ISO_8601);if(!t.isValid())throw new Error("Invalid 'from' date, must be in ISO-8601 format (YYYY-MM-DD).");if(!r.isValid())throw new Error("Invalid 'to' date, must be in ISO-8601 format (YYYY-MM-DD)");let s=`select * from system.hdb_job where start_datetime > '${t.valueOf()}' and start_datetime < '${r.valueOf()}'`,n=new g6(s,e.hdb_user);try{return await M6(n)}catch(i){throw Jr.error(`there was a problem searching for jobs from date ${e.from_date} to date ${e.to_date} ${i}`),new Error("there was an error searching for jobs. Please check the log for details.")}}a(F6,"getJobsInDateRange");async function OP(e){if(ia.isEmptyOrZeroLength(e))return ia.errorizeMessage("Invalid job ID specified.");let t=new R6(Ye.SYSTEM_SCHEMA_NAME,Ye.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await D6(t)}catch(r){let s=`There was an error searching for a job by id: ${e} ${r}`;return Jr.error(s),ia.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(OP,"getJobById");async function G6(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(ia.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===Ye.JOB_STATUS_ENUM.COMPLETE||e.status===Ye.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=Yi().valueOf());let t=new O6(Ye.SYSTEM_SCHEMA_NAME,Ye.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await P6(t),r}a(G6,"updateJob")});var LP=T((sde,CP)=>{"use strict";var bP=$(),ar=b(),q6=require("moment"),Zd=OT(),ef=q(),yP=IT(),IP=Cd(),wP=gi(),x6=Ze(),k6=Ad(),wT=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function V6(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(bP.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(bP.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case ar.JOB_TYPE_ENUM.csv_file_load:await Sn(e,Zd.csvFileLoad);break;case ar.JOB_TYPE_ENUM.csv_url_load:await Sn(e,Zd.csvURLLoad);break;case ar.JOB_TYPE_ENUM.csv_data_load:await Sn(e,Zd.csvDataLoad);break;case ar.JOB_TYPE_ENUM.import_from_s3:await Sn(e,Zd.importFromS3);break;case ar.JOB_TYPE_ENUM.empty_trash:break;case ar.JOB_TYPE_ENUM.export_local:await Sn(e,IP.export_local);break;case ar.JOB_TYPE_ENUM.export_to_s3:await Sn(e,IP.export_to_s3);break;case ar.JOB_TYPE_ENUM.delete_files_before:case ar.JOB_TYPE_ENUM.delete_records_before:await Sn(e,wP.deleteFilesBefore);break;case ar.JOB_TYPE_ENUM.delete_audit_logs_before:await Sn(e,wP.deleteAuditLogsBefore);break;case ar.JOB_TYPE_ENUM.delete_transaction_logs_before:await Sn(e,k6.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(V6,"parseMessage");async function Sn(e,t){try{e.job.status=ar.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=q6().valueOf(),await yP.updateJob(e.job),await $6(e.job.id)}catch(r){let s=r.message!==void 0?r.message:r;typeof s=="string"?(s=`There was an error running ${t.name} job with id ${e.job.id} - ${s}`,r.message=s):ef.error(`There was an error running ${t.name} job with id ${e.job.id}`),ef.error(s),e.job.message=s,e.job.status=ar.JOB_STATUS_ENUM.ERROR;try{await yP.updateJob(e.job)}catch(n){throw ef.error(`Unable to update job with id ${e.job.id}`),n}throw r}}a(Sn,"runJob");async function $6(e){ef.trace("launching job thread:",e),x6.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[ar.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a($6,"launchJobThread");CP.exports={parseMessage:V6,RunnerMessage:wT}});var UP=T((ide,DP)=>{"use strict";var CT=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};DP.exports=CT});var QP=T((ade,vT)=>{"use strict";var nf=qr(),UT=wd(),tf=OT(),Tn=g_(),rf=mi(),du=gi(),Y6=sp(),_u=kr(),sf=dp(),Dt=HS(),mt=q(),K6=hp(),W6=G_(),Q6=Jp(),z6=V_(),J6=Xp(),X6=jp(),j6=tS(),Z6=sS(),LT=oS(),MP=Cd(),e9=yd(),MT=IT(),P=b(),{hdb_errors:Eu,handleHDBError:fu}=j(),{HTTP_STATUS_CODES:PP}=Eu,DT=_S(),vP=od(),$P=require("util"),oa=xr(),t9=Pn(),r9=qo(),BP=LP(),HP=Oc(),FP=(_d(),Z($c)),GP=Tr(),qP=Ad(),xP=md(),{setServerUtilities:s9}=(Xd(),Z(NT)),{CONTEXT:n9}=(is(),Z(OE)),{_assignPackageExport:i9}=require("../index"),{transformReq:o9}=$(),{server:a9}=(Hr(),Z(io)),c9=ET(),kP=nf.searchByHash,u9=nf.searchByValue,l9=$P.promisify(nf.search),_9=$P.promisify(UT.evaluateSQL),d9={[P.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[P.OPERATIONS_ENUM.CREATE_TABLE]:!0,[P.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[P.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[P.OPERATIONS_ENUM.DROP_TABLE]:!0,[P.OPERATIONS_ENUM.DROP_SCHEMA]:!0},H=UP();async function YP(e,t){try{if(e.body.operation!=="read_log"&&(mt.log_level===P.LOG_LEVELS.INFO||mt.log_level===P.LOG_LEVELS.DEBUG||mt.log_level===P.LOG_LEVELS.TRACE)){let{hdb_user:s,hdb_auth_header:n,password:i,...o}=e.body;mt.info(o)}}catch(s){mt.error(s)}let r=await c9.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return d9[e.body.operation]&&t9.setSchemaDataToGlobal(s=>{s&&mt.error(s)}),r}a(YP,"processLocalTransaction");var VP=E9();vT.exports={chooseOperation:KP,getOperationFunction:WP,operation:PT,processLocalTransaction:YP};s9(vT.exports);a9.operation=PT;function KP(e){let t;try{t=WP(e)}catch(n){throw mt.error(`Error when selecting operation function - ${n}`),n}let{operation_function:r,job_operation_function:s}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let n=e.operation==="sql"?e.sql:e.search_operation.sql,i=UT.convertSQLToAST(n);if(e.parsed_sql_object=i,!e.bypass_auth){let o=UT.checkASTPermissions(e,i);if(o)throw mt.error(`${PP.FORBIDDEN} from operation ${e.operation}`),mt.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),fu(new Error,o,Eu.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==P.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==P.OPERATIONS_ENUM.LOGIN&&e.operation!==P.OPERATIONS_ENUM.LOGOUT){let n=s===void 0?r:s,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=e9.verifyPerms(i,n);if(o)throw mt.error(`${PP.FORBIDDEN} from operation ${e.operation}`),mt.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),fu(new Error,o,Eu.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(n){throw fu(n,"There was an error when trying to choose an operation path")}return r}a(KP,"chooseOperation");function WP(e){if(mt.trace(`getOperationFunction with operation: ${e.operation}`),VP.has(e.operation))return VP.get(e.operation);throw fu(new Error,Eu.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),Eu.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(WP,"getOperationFunction");i9("operation",PT);function PT(e,t){e.hdb_user=this[n9]?.user,e.bypass_auth=!t;let r=KP(e);return YP({body:e},r)}a(PT,"operation");async function f9(e){mt.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),s=r[0],n=r[1];for(let i of t.transactions)try{i.schema=s,i.table=n,i[P.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case P.OPERATIONS_ENUM.INSERT:o=await oa.insert(i);break;case P.OPERATIONS_ENUM.UPDATE:o=await oa.update(i);break;case P.OPERATIONS_ENUM.UPSERT:o=await oa.upsert(i);break;case P.OPERATIONS_ENUM.DELETE:o=await du.deleteRecord(i);break;default:mt.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){mt.info("Invalid operation in transaction"),mt.error(o)}}a(f9,"catchup");async function Ys(e){o9(e);let t,r;try{r=await MT.addJob(e),t=r.createdJob,mt.info("addJob result",r);let s=new BP.RunnerMessage(t,e);return await BP.parseMessage(s),{message:`Starting job with id ${t.id}`,job_id:t.id}}catch(s){let n=`There was an error executing job: ${s.http_resp_msg?s.http_resp_msg:s}`;throw mt.error(n),fu(s,n)}}a(Ys,"executeJob");function E9(){let e=new Map;return e.set(P.OPERATIONS_ENUM.INSERT,new H(oa.insert)),e.set(P.OPERATIONS_ENUM.UPDATE,new H(oa.update)),e.set(P.OPERATIONS_ENUM.UPSERT,new H(oa.upsert)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new H(nf.searchByConditions)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_HASH,new H(kP)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_ID,new H(kP)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_VALUE,new H(u9)),e.set(P.OPERATIONS_ENUM.SEARCH,new H(l9)),e.set(P.OPERATIONS_ENUM.SQL,new H(_9)),e.set(P.OPERATIONS_ENUM.CSV_DATA_LOAD,new H(Ys,tf.csvDataLoad)),e.set(P.OPERATIONS_ENUM.CSV_FILE_LOAD,new H(Ys,tf.csvFileLoad)),e.set(P.OPERATIONS_ENUM.CSV_URL_LOAD,new H(Ys,tf.csvURLLoad)),e.set(P.OPERATIONS_ENUM.IMPORT_FROM_S3,new H(Ys,tf.importFromS3)),e.set(P.OPERATIONS_ENUM.CREATE_SCHEMA,new H(Tn.createSchema)),e.set(P.OPERATIONS_ENUM.CREATE_DATABASE,new H(Tn.createSchema)),e.set(P.OPERATIONS_ENUM.CREATE_TABLE,new H(Tn.createTable)),e.set(P.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new H(Tn.createAttribute)),e.set(P.OPERATIONS_ENUM.DROP_SCHEMA,new H(Tn.dropSchema)),e.set(P.OPERATIONS_ENUM.DROP_DATABASE,new H(Tn.dropSchema)),e.set(P.OPERATIONS_ENUM.DROP_TABLE,new H(Tn.dropTable)),e.set(P.OPERATIONS_ENUM.DROP_ATTRIBUTE,new H(Tn.dropAttribute)),e.set(P.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new H(rf.describeSchema)),e.set(P.OPERATIONS_ENUM.DESCRIBE_DATABASE,new H(rf.describeSchema)),e.set(P.OPERATIONS_ENUM.DESCRIBE_TABLE,new H(rf.describeTable)),e.set(P.OPERATIONS_ENUM.DESCRIBE_ALL,new H(rf.describeAll)),e.set(P.OPERATIONS_ENUM.DELETE,new H(du.deleteRecord)),e.set(P.OPERATIONS_ENUM.ADD_USER,new H(_u.addUser)),e.set(P.OPERATIONS_ENUM.ALTER_USER,new H(_u.alterUser)),e.set(P.OPERATIONS_ENUM.DROP_USER,new H(_u.dropUser)),e.set(P.OPERATIONS_ENUM.LIST_USERS,new H(_u.listUsersExternal)),e.set(P.OPERATIONS_ENUM.LIST_ROLES,new H(sf.listRoles)),e.set(P.OPERATIONS_ENUM.ADD_ROLE,new H(sf.addRole)),e.set(P.OPERATIONS_ENUM.ALTER_ROLE,new H(sf.alterRole)),e.set(P.OPERATIONS_ENUM.DROP_ROLE,new H(sf.dropRole)),e.set(P.OPERATIONS_ENUM.USER_INFO,new H(_u.userInfo)),e.set(P.OPERATIONS_ENUM.READ_LOG,new H(K6)),e.set(P.OPERATIONS_ENUM.ADD_NODE,new H(W6)),e.set(P.OPERATIONS_ENUM.UPDATE_NODE,new H(Q6)),e.set(P.OPERATIONS_ENUM.REMOVE_NODE,new H(z6)),e.set(P.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new H(J6)),e.set(P.OPERATIONS_ENUM.PURGE_STREAM,new H(X6)),e.set(P.OPERATIONS_ENUM.SET_CONFIGURATION,new H(GP.setConfiguration)),e.set(P.OPERATIONS_ENUM.CLUSTER_STATUS,new H(j6.clusterStatus)),e.set(P.OPERATIONS_ENUM.CLUSTER_NETWORK,new H(Z6)),e.set(P.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new H(LT.setRoutes)),e.set(P.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new H(LT.getRoutes)),e.set(P.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new H(LT.deleteRoutes)),e.set(P.OPERATIONS_ENUM.EXPORT_TO_S3,new H(Ys,MP.export_to_s3)),e.set(P.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new H(Ys,du.deleteFilesBefore)),e.set(P.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new H(Ys,du.deleteFilesBefore)),e.set(P.OPERATIONS_ENUM.EXPORT_LOCAL,new H(Ys,MP.export_local)),e.set(P.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new H(MT.handleGetJobsByStartDate)),e.set(P.OPERATIONS_ENUM.GET_JOB,new H(MT.handleGetJob)),e.set(P.OPERATIONS_ENUM.GET_FINGERPRINT,new H(DT.getFingerprint)),e.set(P.OPERATIONS_ENUM.SET_LICENSE,new H(DT.setLicense)),e.set(P.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new H(DT.getRegistrationInfo)),e.set(P.OPERATIONS_ENUM.RESTART,new H(vP.restart)),e.set(P.OPERATIONS_ENUM.RESTART_SERVICE,new H(vP.restartService)),e.set(P.OPERATIONS_ENUM.CATCHUP,new H(f9)),e.set(P.OPERATIONS_ENUM.SYSTEM_INFORMATION,new H(r9.systemInformation)),e.set(P.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new H(Ys,du.deleteAuditLogsBefore)),e.set(P.OPERATIONS_ENUM.READ_AUDIT_LOG,new H(Y6)),e.set(P.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new H(HP.createTokens)),e.set(P.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new H(HP.refreshOperationToken)),e.set(P.OPERATIONS_ENUM.LOGIN,new H(FP.login)),e.set(P.OPERATIONS_ENUM.LOGOUT,new H(FP.logout)),e.set(P.OPERATIONS_ENUM.GET_CONFIGURATION,new H(GP.getConfiguration)),e.set(P.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new H(Dt.customFunctionsStatus)),e.set(P.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new H(Dt.getCustomFunctions)),e.set(P.OPERATIONS_ENUM.GET_COMPONENT_FILE,new H(Dt.getComponentFile)),e.set(P.OPERATIONS_ENUM.GET_COMPONENTS,new H(Dt.getComponents)),e.set(P.OPERATIONS_ENUM.SET_COMPONENT_FILE,new H(Dt.setComponentFile)),e.set(P.OPERATIONS_ENUM.DROP_COMPONENT,new H(Dt.dropComponent)),e.set(P.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new H(Dt.getCustomFunction)),e.set(P.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new H(Dt.setCustomFunction)),e.set(P.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new H(Dt.dropCustomFunction)),e.set(P.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new H(Dt.addComponent)),e.set(P.OPERATIONS_ENUM.ADD_COMPONENT,new H(Dt.addComponent)),e.set(P.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new H(Dt.dropCustomFunctionProject)),e.set(P.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new H(Dt.packageComponent)),e.set(P.OPERATIONS_ENUM.PACKAGE_COMPONENT,new H(Dt.packageComponent)),e.set(P.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new H(Dt.deployComponent)),e.set(P.OPERATIONS_ENUM.DEPLOY_COMPONENT,new H(Dt.deployComponent)),e.set(P.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new H(qP.readTransactionLog)),e.set(P.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new H(Ys,qP.deleteTransactionLogsBefore)),e.set(P.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new H(xP.installModules)),e.set(P.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new H(xP.auditModules)),e.set(P.OPERATIONS_ENUM.GET_BACKUP,new H(Tn.getBackup)),e}a(E9,"initializeOperationFunctionMap")});var af=T((ude,XP)=>{"use strict";var BT=b(),h9=$(),hu=q(),{handleHDBError:HT,hdb_errors:of}=j(),{isMainThread:m9}=require("worker_threads"),{Readable:p9}=require("stream"),zP=require("os"),S9=require("util"),T9=yp(),R9=S9.promisify(T9.authorize),JP=QP(),{createGzip:g9,constants:A9}=require("zlib");function O9(e){let t=`Found an uncaught exception with message: ${e.message}. ${zP.EOL}Stack: ${e.stack} ${zP.EOL}Terminating ${m9?"HDB":"thread"}.`;console.error(t),hu.fatal(t),process.exit(1)}a(O9,"handleServerUncaughtException");function N9(e,t,r){if(hu[e.logLevel||"error"](e),e.statusCode)return typeof e.http_resp_msg!="object"?r.code(e.statusCode).send({error:e.http_resp_msg||e.message}):r.code(e.statusCode).send(e.http_resp_msg);let s=e.statusCode?e.statusCode:of.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(s).send({error:e}):r.code(s).send(e.message?{error:e.message}:e)}a(N9,"serverErrorHandler");function b9(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let s=HT(new Error,"Invalid JSON.",of.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}if(h9.isEmpty(e.body.operation)){let s=HT(new Error,"Request body must include an 'operation' property.",of.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}r()}a(b9,"reqBodyValidationHandler");function y9(e,t,r){let s;e.body.operation!==BT.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==BT.OPERATIONS_ENUM.LOGIN&&e.body.operation!==BT.OPERATIONS_ENUM.LOGOUT?R9(e,t).then(n=>{s=n,e.body.hdb_user=s,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(n=>{hu.warn(n),hu.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${n.stack}"`);let i=typeof n=="string"?{error:n}:{error:n.message};r(HT(n,i,of.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(y9,"authHandler");async function I9(e,t,r=!1){let s;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),s=JP.chooseOperation(e.body);let n=await JP.processLocalTransaction(e,s);if(n instanceof p9&&n.headers){for(let[i,o]of n.headers)t.header(i,o);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),n=n.pipe(g9({level:A9.Z_BEST_SPEED})))}return n}catch(n){throw hu.error(n),n}}a(I9,"handlePostRequest");XP.exports={authHandler:y9,handlePostRequest:I9,handleServerUncaughtException:O9,serverErrorHandler:N9,reqBodyValidationHandler:b9}});var tv=T((_de,ev)=>{"use strict";var w9=require("fastify-plugin"),{handlePostRequest:jP,authHandler:C9,reqBodyValidationHandler:L9}=af();async function D9(e){e.decorate("hdbCore",{preValidation:[L9,C9],request:t=>ZP(jP(t,response)),requestWithoutAuthentication:(t,r)=>ZP(jP(t,r,!0))})}a(D9,"hdbCore");async function ZP(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(ZP,"convertAsyncIterators");ev.exports=w9(D9)});var sv=T((fde,rv)=>{"use strict";var FT=require("fs"),aa=X();aa.initSync();var{CONFIG_PARAMS:mu}=b(),U9=1024*1024*1024;function M9(e){let t=aa.get(mu.HTTP_TIMEOUT),r=aa.get(mu.HTTP_KEEPALIVETIMEOUT),s={bodyLimit:U9,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0};if(e){let n=aa.get(mu.TLS_PRIVATEKEY),i=aa.get(mu.TLS_CERTIFICATE),o=aa.get(mu.TLS_CERTIFICATEAUTHORITY);s.https={allowHTTP1:!0,key:FT.readFileSync(`${n}`),cert:FT.readFileSync(i)+(o?`
|
|
25
|
-
|
|
26
|
-
`+FT.readFileSync(o):"")},s.http2=!0}return s}a(M9,"getServerOptions");rv.exports=M9});var ov=T((hde,iv)=>{"use strict";var GT=X();GT.initSync();var{CONFIG_PARAMS:nv}=b();function P9(){let e=GT.get(nv.HTTP_CORSACCESSLIST),t=GT.get(nv.HTTP_CORS),r;return t&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},e&&e.length>0&&e[0]!==null&&e[0]!=="*"&&(r.origin=(s,n)=>n(null,e.indexOf(s)!==-1))),r}a(P9,"getCORSOptions");iv.exports=P9});var uv=T((pde,cv)=>{"use strict";var av=X();av.initSync();var v9=b();function B9(){return av.get(v9.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(B9,"getHeaderTimeoutConfig");cv.exports=B9});var kT={};Qe(kT,{customFunctionsServer:()=>G9,handleFile:()=>F9,ready:()=>k9});async function F9(e,t,r,s){if(!Rn){let c=qT.get(xT.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS);Rn=Av(c),ut.http((await Rn).server)}let n=await Rn,i=(0,_v.dirname)(r),o=t.replace(/\/routes\/.*/g,"");if(o.startsWith("/")&&(o=o.slice(1)),!lv.has(i)){lv.add(i);try{n.register(x9(i,o))}catch(c){if(c.message==="Root plugin has already booted")De.warn(`Could not load root fastify route for ${r}, this may require a restart to install properly`);else throw c}}}async function G9(){try{De.info("In Custom Functions Fastify server"+process.cwd()),De.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),De.debug(`Custom Functions server process ${process.pid} starting up.`),await q9();let e=qT.get(xT.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS),t=e&&(e===!0||e.toUpperCase()===TRUE_COMPARE_VAL),r;try{r=Rn=await Av(t)}catch(s){throw De.error(`Custom Functions buildServer error: ${s}`),s}try{await r.ready()}catch(s){throw De.error(`Custom Functions server.ready() error: ${s}`),s}r.server.cantCleanupProperly=!0}catch(e){De.error(`Custom Functions ${process.pid} Error: ${e}`),De.error(e),process.exit(1)}}async function q9(){try{De.info("Custom Functions starting configuration."),await pv.setUsersToGlobal(),De.info("Custom Functions completed configuration.")}catch(e){De.error(e)}}function x9(e,t){return async function(r){try{De.info("Custom Functions starting buildRoutes"),De.trace("Loading fastify routes folder "+e),(0,dv.existsSync)(e)&&r.register(mv.default,n=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:n.hdbCore,logger:De.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((n,i,o)=>{n?.message?De.error(n.message):n&&De.error(n),o()})}catch(s){De.error(`Custom Functions errored buildRoutes: ${s}`)}}}async function Av(e){De.info("Custom Functions starting buildServer.");let t=(0,Sv.default)(e),r=(0,fv.default)(t);r.server.headersTimeout=(0,Rv.default)(),r.setErrorHandler(gv.serverErrorHandler);let s=(0,Tv.default)();return s&&r.register(Ev.default,s),r.register(function(n,i,o){n.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(hv.default),await r.register(H9),await r.after(),sT(r),De.info("Custom Functions completed buildServer."),r}function k9(){if(Rn)return Rn.then?Rn.then(e=>e.ready()):Rn.ready()}var _v,dv,fv,Ev,hv,mv,qT,xT,De,H9,pv,Sv,Tv,Rv,gv,Rn,lv,Ov=Te(()=>{_v=require("path"),dv=require("fs"),fv=D(require("fastify")),Ev=D(require("@fastify/cors")),hv=D(uT()),mv=D(require("@fastify/autoload")),qT=D(X()),xT=D(b()),De=D(q()),H9=D(tv()),pv=D(kr()),Sv=D(sv()),Tv=D(ov()),Rv=D(uv()),gv=D(af());Qo();Hr();lv=new Set;a(F9,"handleFile");a(G9,"customFunctionsServer");a(q9,"setUp");a(x9,"buildRouteFolder");a(Av,"buildServer");a(k9,"ready")});var VT={};Qe(VT,{start:()=>V9});function V9(e){return{handleFile(t,r,s){bv||(bv=!0,e.server.http(async(n,i)=>{if(!n.isWebSocket){let o=Nv.get(n.pathname);if(o)return{handlesHeaders:!0,body:(0,yv.default)(n,(0,Iv.realpathSync)(o))}}return i(n)},{runFirst:!0})),Nv.set(r,s)}}}var yv,Iv,Nv,bv,wv=Te(()=>{yv=D(require("send")),Iv=require("fs"),Nv=new Map;a(V9,"start")});function K9(e,t=1,r){if($T++,(0,Ki.startWorker)("server/threads/threadServer.js",{name:lf.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(s){let n=new Promise((o,c)=>{function u(_){_.type===lf.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(s.removeListener("message",u),o(s))}a(u,"onMessage"),s.on("message",u),s.on("error",c)});Y9.push(n),await n,ca.push(s),s.expectedIdle=1,s.lastIdle=0,s.requests=1,s.on("message",o=>{if(o.requestId){let c=uf.get(o.requestId);c&&c(o)}}),s.on("exit",i),s.on("shutdown",i);function i(){let o=ca.indexOf(s);o>-1&&ca.splice(o,1)}if(a(i,"removeWorker"),ua){let o=ua;ua=[];for(let c of o)Uv[c.localPort](null,c)}}}),r){let s=setInterval(()=>{YT?YT=!1:(clearInterval(s),console.log("shut down dynamic thread due to inactivity"),(0,Ki.shutdownWorkers)(),$T=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function Mv(e=0,t){if(typeof e=="string")try{(0,_f.existsSync)(e)&&(0,_f.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=W9:r=Q9(t):r=KT;let s=(0,la.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(s._handle){s._handle.onconnection=Uv[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),YT=!0,r(o,(c,u)=>{if(!c){if(Cv){let l=o._socket||new la.Socket({handle:o,writable:!0,readable:!0});Cv.deliverSocket(l,e,u),l.resume()}else $T>0?(ua.length===0&&setTimeout(()=>{ua.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,ua.push(o)):(console.log("start up a dynamic thread to handle request"),K9(0));wr(!1,"socket-routed");return}c.requests++;let _=o.fd;if(_>=0)c.postMessage({port:e,fd:_,data:u});else{let l=o._socket||new la.Socket({handle:o,writable:!0,readable:!0});j9(l,c,e)}wr(!0,"socket-routed")})};let n=bc();Dv.info(`HarperDB ${n.version} Server running on port ${e}`)}return s.on("error",n=>{console.error("Error in socket server",n)}),process.env._UNREF_SERVER&&s.unref(),s}function KT(e,t){let r,s=0;for(let n of ca){if(n.threadId===-1)continue;let i=n.expectedIdle/n.requests;if(i>s)r=n;else if(s>=cf)return cf=i,t(r);s=i}cf=0,t(r)}function W9(e,t){let r={};e.getpeername(r);let s=r.address,n=_a.get(s),i=Date.now();if(n&&n.worker.threadId!==-1)return n.lastUsed=i,t(n.worker);KT(e,o=>{_a.set(s,{worker:o,lastUsed:i}),t(o)})}function Q9(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(s,n){let i=new la.Socket({handle:s,readable:!0,writable:!0});s._socket=i,i.on("data",o=>{s.readStop();let u=o.toString("latin1").match(t)?.[1],_=_a.get(u),l=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=l,n(_.worker);KT(s,d=>{_a.set(u,{worker:d,lastUsed:l}),n(d,o)})})}a(r,"findByHeaderAffinity")}function J9(){cf=0;for(let e of ca)e.expectedIdle=e.recentELU.idle+z9,e.requests=1;ca.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function j9(e,t,r){let s=X9++;t.postMessage({port:r,requestId:s,event:"connection"}),e.on("data",n=>{let i=n.toString("latin1");t.postMessage({port:r,requestId:s,data:i,event:"data"})}).on("close",n=>{t.postMessage({port:r,requestId:s,event:"close",hadError:n})}).on("error",n=>{t.postMessage({port:r,requestId:s,event:"error",error:n})}).on("drain",n=>{t.postMessage({port:r,requestId:s,event:"drain",error:n})}).on("end",()=>{t.postMessage({port:r,requestId:s,event:"end"})}).resume(),uf.set(s,n=>{n.event=="data"&&e.write(Buffer.from(n.data,"latin1")),n.event=="end"&&(e.end(n.data&&Buffer.from(n.data,"latin1")),uf.delete(s)),n.event=="destroy"&&(e.destroy(),uf.delete(s))})}var Ki,la,lf,Dv,_f,$9,ca,ua,Uv,Cv,$T,Y9,YT,cf,Lv,_a,z9,uf,X9,Pv=Te(()=>{Ki=D(Ze()),la=require("net"),lf=D(b()),Dv=D(q()),_f=require("fs");ti();({isMainThread:$9}=require("worker_threads")),ca=[],ua=[],Uv=[],$T=0,Y9=[];$9&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});a(K9,"startHTTPWorker");a(Mv,"startSocketServer");cf=0;a(KT,"findMostIdleWorker");Lv=36e5,_a=new Map;a(W9,"findByRemoteAddressAffinity");a(Q9,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of _a)r.lastUsed+Lv<e&&_a.delete(t)},Lv).unref();z9=1e3;a(J9,"updateWorkerIdleness");(0,Ki.setMonitorListener)(J9);uf=new Map,X9=1;a(j9,"proxySocket")});var Fv=T((Cde,Hv)=>{"use strict";var Z9=require("cluster"),gs=X();gs.initSync();var Bv=b(),yde=require("util"),gn=q(),WT=require("fs"),e7=require("fastify"),Ide=bc(),t7=require("@fastify/cors"),r7=require("@fastify/compress"),s7=require("@fastify/static"),n7=uT(),i7=require("path"),{PACKAGE_ROOT:o7}=b(),a7=Pn(),c7=$(),u7=kr(),l7=rc(),{server:_7}=(Hr(),Z(io)),{authHandler:d7,handlePostRequest:f7,serverErrorHandler:E7,reqBodyValidationHandler:h7}=af(),wde=require("net"),{registerContentHandlers:m7}=(Qo(),Z(pM)),p7=6e4,S7=1024*1024*1024,T7="TRUE",{CONFIG_PARAMS:An}=Bv,Wi;Hv.exports={hdbServer:vv,start:vv};async function vv(e){try{gn.info("In Fastify server"+process.cwd()),gn.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),gn.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=Z9.isMaster,await R7();let t=gs.get(An.OPERATIONSAPI_NETWORK_SECUREPORT)!=null;Wi=g7(t),await Wi.ready(),e||(e={}),e.isOperationsServer=!0,Wi.server.cantCleanupProperly=!0;try{_7.http(Wi.server,e),Wi.server.closeIdleConnections||await Wi.listen({port:0,host:"::"})}catch(r){throw Wi.close(),gn.error(r),gn.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),gn.fatal(t),process.exit(1)}}a(vv,"operationsServer");async function R7(){gn.trace("Configuring HarperDB process."),a7.setSchemaDataToGlobal(),await u7.setUsersToGlobal(),await l7.getLicense()}a(R7,"setUp");function g7(e){gn.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=A7(e),r=e7(t);r.server.headersTimeout=N7(),r.setErrorHandler(E7);let s=O7();s&&r.register(t7,s),r.register(function(i,o,c){i.setNotFoundHandler(function(u,_){r.server.emit("unhandled",u.raw,_.raw)}),c()}),r.register(n7),r.register(r7),r.register(s7,{root:i7.join(o7,"studio")}),m7(r);let n=gs.get(Bv.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!c7.isEmpty(n)&&n.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[h7,d7],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),f7(i,o)}),r.get("/health",()=>"HarperDB is running."),gn.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(g7,"buildServer");function A7(e){let t=gs.get(An.OPERATIONSAPI_NETWORK_TIMEOUT),r=gs.get(An.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT),s={bodyLimit:S7,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1};if(e){let n=gs.get(An.OPERATIONSAPI_TLS_PRIVATEKEY),i=gs.get(An.OPERATIONSAPI_TLS_CERTIFICATE),o=gs.get(An.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY),c={allowHTTP1:!0,key:WT.readFileSync(n),cert:WT.readFileSync(i)+(o?`
|
|
27
|
-
|
|
28
|
-
`+WT.readFileSync(o):"")};s.http2=!0,s.https=c}return s}a(A7,"getServerOptions");function O7(){let e=gs.get(An.OPERATIONSAPI_NETWORK_CORS),t=gs.get(An.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===T7)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(s,n)=>n(null,t.indexOf(s)!==-1))),r}a(O7,"getCORSOpts");function N7(){return gs.get(An.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??p7}a(N7,"getHeaderTimeoutConfig")});var ZT={};Qe(ZT,{disableNATS:()=>y7,publishToStream:()=>mf,setNATSReplicator:()=>QT,setPublishToStream:()=>I7,setSubscription:()=>jT,start:()=>b7});function b7(){ff.default.get(Ef.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&C7()}function y7(e=!0){Vv=e}function I7(e,t){mf=e,jT=t}function C7(){if(Vv||process.env._DISABLE_NATS)return;let e=hs(),t=Object.keys(e);t.push("system");for(let r of t){let s=e[r];for(let n in s){let i=s[n];QT(n,r,i)}}eR((r,s)=>{QT(r.tableName,r.databaseName,r),s&&Yv(r)}),!Gv&&(Gv=!0)}function QT(e,t,r){if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.sources.some(n=>n?.isNATSReplicator))return;r.sourcedFrom(class extends Ot{static{a(this,"NATSReplicator")}put(i){return s(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[Ie],record:i})}delete(){return s(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[Ie]})}publish(i){return s(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[Ie],record:i})}invalidate(){s(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[Ie]})}static defineSchema(i){Yv(i)}static subscribe(){let i=new ss;return jT(t,e,i),i}static subscribeOnThisThread(i){return i<w7}static isEqual(i){return i.isNATSReplicator}static isNATSReplicator=!0;static shouldReceiveInvalidations=!0},{intermediateSource:!0});function s(n){let i=n?.transaction?.nats;if(!i)if(n?.transaction){n.transaction.nats=i=new df(n.transaction,n);let o=n.transaction;for(;o.next;)o=o.next;o.next=n.transaction.nats,i.user=n.user,i.context=n}else i=$v;return i}a(s,"getNATSTransaction")}function Yv(e){let t=ff.default.get(Ef.default.CONFIG_PARAMS.CLUSTERING_NODENAME);mf(`${JT.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,XT.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 qv,JT,XT,xv,kv,ff,Ef,hf,Vv,mf,jT,w7,$v,Gv,df,zT,Kv=Te(()=>{fe();is();qv=D(dt()),JT=D(ke()),XT=D(rn());Pa();xv=D(tR()),kv=D(fr()),ff=D(X()),Ef=D(b()),hf=D(q());a(b7,"start");a(y7,"disableNATS");mf=qv.publishToStream,jT=xv.setSubscription;a(I7,"setPublishToStream");w7=2;a(C7,"assignReplicationSource");a(QT,"setNATSReplicator");a(Yv,"publishSchema");df=class{constructor(t,r){this.transaction=t;this.options=r}static{a(this,"NATSTransaction")}user;writes_by_db=new Map;addWrite(t,r){r.expiresAt=this.context?.expiresAt;let s=this.writes_by_db.get(t);s||this.writes_by_db.set(t,s=[]),s.push(r)}commit({timestamp:t}){let r=ff.default.get(Ef.default.CONFIG_PARAMS.CLUSTERING_NODENAME),s=[];for(let[n,i]of this.writes_by_db){let o=[],c=[],u,_;for(let l of i){let d=l.table,f=l.operation=="put"?"upsert":l.operation;u||(hf.trace(`Sending transaction event ${f}`),_=u={operation:f,schema:n,table:d,__origin:{user:this.user?.username,timestamp:t,node_name:r}},u.hash_values=c,f!=="delete"&&f!=="invalidate"&&(u.records=o)),u.table===d&&u.operation===f?(o.push(l.record),c.push(l.id)):_=_.next={operation:f,table:d,id:l.id,record:l.record},l.expiresAt&&(_.expiresAt=l.expiresAt)}u&&s.push(mf(`${JT.SUBJECT_PREFIXES.TXN}.${n}.${u.table}`,(0,XT.createNatsTableStreamName)(n,u.table),void 0,u)?.catch(l=>{throw hf.error("An error has occurred trying to replicate transaction",u,l),l.statusCode=504,l}))}return Promise.all(s)}},zT=class extends df{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,kv.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit()}};$v=new zT});async function Qv({clientId:e,user:t,listener:r,clean:s}){let n;if(e&&!s){let i=await rR.getResource(e,{});n=new nR(e,t,i),i&&(n.sessionWasPresent=!0)}else{if(e){let i=await rR.get(e);i&&i.delete()}n=new Sf(e,t)}return n}function sR(){return pf++,pf>65500&&(pf=1),pf}var Wv,da,rR,pf,Sf,nR,zv=Te(()=>{fe();Vc();Wv=D(fr()),da=D(q());_i();rR=et({database:"system",table:"hdb_durable_session",attributes:[{name:"id",isPrimaryKey:!0},{name:"subscriptions",type:"array",elements:{attributes:[{name:"topic"},{name:"qos"},{name:"startTime"},{name:"acks"}]}}]});a(Qv,"getSession");pf=1;a(sR,"getNextMessageId");Sf=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;subscriptions=[];awaitingAcks;sessionWasPresent;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,s){let{topic:n,omitCurrent:i,startTime:o}=t,c=n.indexOf("?"),u,_;if(c>-1?(u=n.slice(c),_=n.slice(0,c)):_=n,!_)throw new Error("No topic provided");let l=!1,d;if((_.endsWith("+")||_.endsWith("#"))&&(l=!0,_.endsWith("+")&&(d=!0),_=_.slice(0,_.length-1)),_.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");if(_.indexOf("#")>-1||_.indexOf("+")>-1)throw new Error("Only trailing wildcards are supported");let f=this.subscriptions.find(I=>I.topic===n);f&&(f.end(),this.subscriptions.splice(this.subscriptions.indexOf(f),1));let E={search:u,async:!0,authorize:!0,user:this.user,startTime:o,omitCurrent:i,isCollection:l,shallowWildcard:d,url:""};o&&(0,da.trace)("Resuming subscription from",n,"from",o);let h=Jn.getMatch(_);if(!h)throw new Error(`The topic ${n} does not exist, no resource has been defined to handle this topic`);E.url=h.relativeURL;let p=h.path,S=h.Resource,A=await Ge(E,async()=>{let I=await S.subscribe(E);if(!I)throw new Error(`No subscription was returned from subscribe for topic ${n}`);if(!I[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${n}`);return(async()=>{for await(let N of I)try{let Y;if(N.type&&N.type!=="put"&&N.type!=="delete"&&N.type!=="message"||s&&!s(N))continue;r?(N.topic=n,Y=this.needsAcknowledge(N)):(N.acknowledge?.(),Y=sR());let Q=N.id;Array.isArray(Q)&&(Q=Wo(Q)),Q==null&&(Q=""),this.listener(p+"/"+Q,N.value,Y,t)}catch(Y){(0,da.warn)(Y)}})(),I});return A.topic=n,A.qos=t.qos,this.subscriptions.push(A),A}resume(){}needsAcknowledge(t){let r=sR();return t.acknowledge&&(this.awaitingAcks||(this.awaitingAcks=new Map),this.awaitingAcks.set(r,t.acknowledge)),r}acknowledge(t){let r=this.awaitingAcks?.get(t);r&&(this.awaitingAcks.delete(t),r())}async removeSubscription(t){let r=this.subscriptions.find(s=>s.topic===t);r&&r.end()}async publish(t,r){let{topic:s,retain:n}=t;t.data=r,t.user=this.user,t.async=!0,t.authorize=!0;let i=Jn.getMatch(s);if(!i)throw new Error(`Can not publish to topic ${s} as it does not exist, no resource has been defined to handle this topic`);t.url=i.relativeURL;let o=i.Resource;return Ge(t,()=>n?r===void 0?o.delete(t,t):o.put(t,t.data,t):o.publish(t,t.data,t))}setListener(t){this.listener=t}disconnect(){for(let t of this.subscriptions)t.end();this.subscriptions=[]}},nR=class extends Sf{static{a(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,s){super(t,r),this.sessionRecord=s||{id:t,subscriptions:[]}}async resume(){for(let t of this.sessionRecord.subscriptions||[])await this.resumeSubscription({omitCurrent:!0,topic:t.topic,qos:t.qos,startTime:t.startTime},!0,t.acks?r=>!t.acks.includes(r.timestamp):null)}resumeSubscription(t,r,s){return super.addSubscription(t,r,s)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=sR(),s={topic:t.topic,timestamp:t.timestamp};return t.acknowledge&&(s.acknowledge=t.acknowledge),this.awaitingAcks.set(r,s),r}acknowledge(t){let r=this.awaitingAcks.get(t);this.awaitingAcks.delete(t),r.acknowledge?.();let s=r.topic;for(let[,n]of this.awaitingAcks)if(n.topic===s&&n.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===s){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,da.trace)("Received ack",s,r.timestamp),this.sessionRecord.update();return}}for(let n of this.sessionRecord.subscriptions)n.topic===s&&(n.startTime=r.timestamp);this.sessionRecord.update()}async addSubscription(t,r){await this.resumeSubscription(t,r);let{qos:s,startTime:n}=t;return s>0&&!n&&(this.sessionRecord.subscriptions=this.subscriptions.map(i=>{let o=i.startTime;return o||(o=i.startTime=(0,Wv.getNextMonotonicTime)()),(0,da.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),rR.put(this.sessionRecord)),t.qos}}});var oR={};Qe(oR,{start:()=>D7});async function D7({server:e,port:t,webSocket:r,securePort:s,requireAuthentication:n}){let i=e.mqtt={requireAuthentication:n};r&&e.ws((o,c,u)=>{if(o.protocol==="mqtt"){let{onMessage:_,onClose:l}=jv(o,(d,f)=>{if(o.send(d),f&&o._socket.writableNeedDrain)return new Promise(E=>this._socket.once("drain",E))},c,Promise.resolve(u).then(()=>c?.user),i);o.on("message",_),o.on("close",l),o.on("error",d=>{(0,Xr.info)("WebSocket error",d)})}},{subProtocol:"mqtt"}),(t||s)&&e.socket(async o=>{let c;L7&&o.remoteAddress.includes("127.0.0.1")&&(c=await(0,Zv.getSuperUser)());let{onMessage:u,onClose:_}=jv(o,l=>o.write(l),null,c,i);o.on("data",u),o.on("close",_),o.on("error",l=>{(0,Xr.info)("Socket error",l)})},{port:t,securePort:s})}function jv(e,t,r,s,n){Xv||(Xv=!0,ou(d=>{Tf>0&&d.push({metric:"mqtt-connections",connections:Tf,byThread:!0})}));let i;Tf++;let o,c={protocolVersion:4},u=(0,Rf.parser)({protocolVersion:5});function _(d){u.parse(d)}a(_,"onMessage");function l(){Tf--,i||(i=!0,o?.disconnect(),zr(!1,"connection","mqtt","disconnect"))}return a(l,"onClose"),u.on("packet",async d=>{s?.then&&(s=await s),o?.then&&await o;try{switch(d.cmd){case"connect":if(c.protocolVersion=d.protocolVersion,d.username)try{s=await ut.getUser(d.username,d.password.toString()),(0,iR.get)(On.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&Jv.notify({username:s.username,status:On.AUTH_AUDIT_STATUS.SUCCESS,type:On.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,iR.get)(On.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&Jv.error({username:s.username,status:On.AUTH_AUDIT_STATUS.FAILURE,type:On.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),f({cmd:"connack",reasonCode:4,returnCode:134})}if(!s&&n.requireAuthentication)return zr(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:4,returnCode:134});try{n.authorizeClient?.(d,s),o=Qv({user:s,...d}),o=await o}catch(N){return(0,Xr.error)(N),zr(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:N.code||5,returnCode:N.code||128})}zr(!0,"connection","mqtt","connect"),f({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((N,Y,Q,G)=>{try{let w=N.indexOf("/",1),K=w>0?N.slice(0,w):N;f({cmd:"publish",topic:N,payload:E(Y),messageId:Q||Math.floor(Math.random()*1e8),qos:G.qos},K)}catch(w){(0,Xr.error)(w),o?.disconnect()}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let h=[];for(let N of d.subscriptions){let Y;try{Y=(await o.addSubscription(N,N.qos>=1)).qos||0}catch(Q){(0,Xr.error)(Q),Y=128}h.push(Y)}await o.committed,f({cmd:"suback",granted:h,messageId:d.messageId});break;case"unsubscribe":for(let N of d.unsubscriptions)o.removeSubscription(N);f({cmd:"unsuback",messageId:d.messageId});break;case"pubrel":f({cmd:"pubcomp",messageId:d.messageId,reasonCode:0});return;case"publish":let p=d.qos===2?"pubrec":"puback",S=e.deserialize||(e.deserialize=ta(r?.headers.get?.("content-type"))),A=d.payload?.length>0?S(d.payload):void 0,I;try{I=await o.publish(d,A)}catch(N){(0,Xr.warn)(N),d.qos>0&&f({cmd:p,messageId:d.messageId,reasonCode:128},d.topic);break}d.qos>0&&f({cmd:p,messageId:d.messageId,reasonCode:I===!1?144:0},d.topic);break;case"pubrec":f({cmd:"pubrel",messageId:d.messageId,reasonCode:0});break;case"pubcomp":case"puback":o.acknowledge(d.messageId);break;case"pingreq":f({cmd:"pingresp"});break;case"disconnect":i=!0,o?.disconnect(),zr(!0,"connection","mqtt","disconnect"),e.close?e.close():e.end();break}}catch(h){(0,Xr.error)(h),f({cmd:"disconnect"})}function f(h,p){let S=(0,Rf.generate)(h,c);t(S),wr(S.length,"bytes-sent",p,h.cmd,"mqtt")}a(f,"sendPacket");function E(h){return Xn(h,r)}a(E,"serialize")}),{onMessage:_,onClose:l}}var Rf,Zv,iR,On,Xr,Jv,L7,Xv,Tf,e0=Te(()=>{Rf=require("mqtt-packet");zv();Zv=D(kr());Qo();ti();Hr();iR=D(X()),On=D(b()),Xr=D(q()),Jv=(0,Xr.loggerWithTag)("auth-event"),L7=!0;a(D7,"start");Tf=0;a(jv,"onSocket")});var r0,t0,aR,s0=Te(()=>{r0=require("os"),t0=class{constructor(t){this.asObject=t}static{a(this,"Headers")}set(t,r){this.asObject[t.toLowerCase()]=r}get(t){return this.asObject[t.toLowerCase()]}has(t){return this.asObject.hasOwnProperty(t.toLowerCase())}[Symbol.iterator](){return Object.entries(this.asObject)[Symbol.iterator]()}keys(){return Object.keys(this.asObject)}values(){return Object.values(this.asObject)}forEach(t){for(let[r,s]of this)t(s,r,this)}};(0,r0.platform)()!="win32"&&(aR=require("node-unix-socket").createReuseportFd)});var Td={};Qe(Td,{component_errors:()=>fa,loadComponent:()=>gf,loadComponentDirectories:()=>d0,setErrorReporter:()=>v7});function d0(e,t){t&&(uR=t),e&&(lR=e);let r=[];if((0,As.existsSync)(cR)){let n=(0,As.readdirSync)(cR,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,gt.join)(cR,o);r.push(gf(c,uR,"hdb",!1))}}let s=process.env.RUN_HDB_APP;return s&&r.push(gf(s,uR,s,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{_0=!0})}function v7(e){Tu=e}async function gf(e,t,r,s,n,i){if(!i0.has(e)){i0.set(e,!0),n&&(lR=n);try{let o;s&&(fa=new Map);let c=(0,gt.join)(e,s?"harperdb-config.yaml":"config.yaml");(0,As.existsSync)(c)?o=s?(0,l0.getConfigObj)():(0,o0.parseDocument)((0,As.readFileSync)(c,"utf8"),{simpleKeys:!0}).toJSON():o=_R;let u=[],_=s;for(let l in o){let d=o[l];if(fa.set(s?l:(0,gt.basename)(e),!1),!d)continue;let f,E=d.package;try{if(E){let I=e,N;for(;!(0,As.existsSync)(N=(0,gt.join)(I,"node_modules",l));)if(I=(0,gt.dirname)(I),I.length<(0,u0.getHdbBasePath)().length){N=null;break}if(N)f=await gf(N,t,r,!1),_=!0;else throw new Error(`Unable to find package ${l}:${E}`)}else f=P7[l];if(!f)continue;u.push(f);let h=a(I=>(I.origin=r,et(I)),"ensureTable"),p=d.network||(d.port||d.securePort)&&d,S=p?.securePort||p?.https&&p.port,A=!p?.https&&p?.port;if(pu.isMainThread&&(f=await f.startOnMainThread?.({server:ut,ensureTable:h,port:A,securePort:S,resources:t,...d})||f,s&&p))for(let I of[A,S])try{if(+I&&!n0.includes(I)){let N=dR.get(fR.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);N&&Su.default.warn("Session affinity is not recommended and may cause memory leaks"),(N||!aR)&&(n0.push(I),Mv(I,N))}}catch(N){console.error("Error listening on socket",I,N,l)}if(t.isWorker&&(f=await f.start?.({server:ut,ensureTable:h,port:A,securePort:S,resources:t,...d})||f),lR.set(f,!0),f.handleFile&&d.files){if(d.files.includes(".."))throw(0,c0.handleHDBError)("Can not reference parent directories");let I=(0,gt.join)(e,d.files).replace(/\\/g,"/"),N=I.indexOf("/*");if(N>-1&&d.files!==_R[l]?.files&&!(0,As.existsSync)(I.slice(0,N)))throw new Error(`The path '${I.slice(0,N)}' does not exist and cannot be used as the base of the resolved 'files' path value '${d.files}'`);for(let Y of await(0,a0.default)(I,{onlyFiles:!1,objectMode:!0})){let{path:Q,dirent:G}=Y;_=!0;let w=(0,gt.relative)(e,Q).replace(/\\/g,"/");if(d.root){let x=d.root;if(x.startsWith("/")&&(x=x.slice(1)),x.endsWith("/")&&(x=x.slice(0,-1)),x+="/",w.startsWith(x))w=w.slice(x.length);else throw new Error(`The root path '${d.root}' does not reference a valid part of the file path '${w}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`)}let K=(0,gt.basename)(e),B=d.path||"/";B=B.startsWith("/")?B:B.startsWith("./")?"/"+K+B.slice(2):B==="."?"/"+K:"/"+K+"/"+B,B+=(B.endsWith("/")?"":"/")+w;try{if(G.isFile()){let x=await M7(Q);pu.isMainThread&&await f.setupFile?.(x,B,Q,t),t.isWorker&&await f.handleFile?.(x,B,Q,t)}else pu.isMainThread&&await f.setupDirectory?.(B,Q,t),t.isWorker&&await f.handleDirectory?.(B,Q,t)}catch(x){x.message=`Could not load ${G.isFile()?"file":"directory"} '${Q}'${d.module?" using '"+d.module+"'":""} for application '${e}' due to: ${x.message}`,Tu?.(x),((0,Ea.getWorkerIndex)()===0?console:Su.default).error(x),t.set(d.path||"/",new Ru(x)),fa.set(s?l:(0,gt.basename)(e),x.message)}}}}catch(h){h.message=`Could not load component '${l}' for application '${(0,gt.basename)(e)}' due to: ${h.message}`,Tu?.(h),((0,Ea.getWorkerIndex)()===0?console:Su.default).error(h),t.set(d.path||"/",new Ru(h),null,!0),fa.set(s?l:(0,gt.basename)(e),h.message)}}if(pu.isMainThread&&!_0&&i&&(0,Ea.watchDir)(e,async()=>d0()),o.extensionModule)return await dl((0,gt.join)(e,o.extensionModule));if(!_){let l=`${e} did not load any modules, resources, or files, is this a valid component?`;Tu?.(new Error(l)),((0,Ea.getWorkerIndex)()===0?console:Su.default).error(l),fa.set((0,gt.basename)(e),l)}}catch(o){console.error(`Could not load application directory ${e}`,o),o.message=`Could not load application due to ${o.message}`,Tu?.(o),t.set("",new Ru(o))}}}var As,gt,pu,o0,dR,fR,a0,Ea,Su,c0,u0,U7,l0,M7,cR,lR,_0,uR,fa,P7,_R,n0,i0,Tu,Ru,Rd=Te(()=>{As=require("fs"),gt=require("path"),pu=require("worker_threads"),o0=require("yaml"),dR=D(X()),fR=D(b());TA();OA();NA();GM();Ov();wv();a0=D(require("fast-glob")),Ea=D(Ze()),Su=D(q());yE();Hr();c0=D(j());is();fe();Pv();u0=D(X()),U7=D(Fv());_d();Kv();e0();l0=D(Tr());s0();({readFile:M7}=As.promises),cR=dR.get(fR.CONFIG_PARAMS.COMPONENTSROOT),lR=new Map,fa=new Map;a(d0,"loadComponentDirectories");P7={REST:Fd,rest:Fd,graphqlSchema:bE,jsResource:wE,fastifyRoutes:kT,login:LE,static:VT,operationsApi:U7,customFunctions:{},http:{},clustering:ZT,authentication:$c,mqtt:oR},_R={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(_R,"static",{value:{files:"web/**"}});n0=[],i0=new Map;a(v7,"setErrorReporter");a(gf,"loadComponent");Ru=class extends Ot{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 h0=T((ofe,E0)=>{var{isMainThread:f0}=require("worker_threads"),{getTables:B7}=(fe(),Z(Ce)),{loadComponentDirectories:H7,loadComponent:F7}=(Rd(),Z(Td)),{resetResources:G7}=(Vc(),Z(qD)),q7=PS(),x7=Tr(),{dirname:k7}=require("path"),{getConnection:V7}=dt(),$7=X(),Y7=b(),ER=new Map;async function K7(e=!1){!f0&&$7.get(Y7.CONFIG_PARAMS.CLUSTERING_ENABLED)&&V7();try{f0&&await q7()}catch(s){console.error(s)}let t=G7();B7(),t.isWorker=e,await F7(k7(x7.getConfigFilePath()),t,"hdb",!0,ER),await H7(ER,t);let r=[];for(let[s]of ER)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}a(K7,"loadRootComponents");E0.exports.loadRootComponents=K7});var Ze=T((cfe,si)=>{"use strict";var{Worker:W7,MessageChannel:Q7,parentPort:Ks,isMainThread:TR,threadId:z7,workerData:Nn}=require("worker_threads"),{PACKAGE_ROOT:J7}=b(),{join:T0,isAbsolute:X7,extname:j7}=require("path"),{server:R0}=(Hr(),Z(io)),{watch:Z7,readdir:eee}=require("fs/promises"),{totalmem:m0}=require("os"),Nf=b(),tee=X(),bn=q(),{randomBytes:ree}=require("crypto"),{_assignPackageExport:see}=require("../index"),nee=b(),p0=1024*1024,ri=[],jr=[],iee=50,RR=1e4,oee="restart",g0="request_thread_info",A0="resource_report",O0="thread_info",N0="added-port",aee="ack",hR;see("threads",jr);si.exports={startWorker:mR,restartWorkers:AR,shutdownWorkers:dee,workers:ri,setMonitorListener:Ree,onMessageFromWorkers:fee,onMessageByType:L0,broadcast:hee,broadcastWithAcknowledgement:pee,setChildListenerByType:_ee,getWorkerIndex:b0,getWorkerCount:y0,getTicketKeys:I0,setMainIsWorker:uee,setTerminateTimeout:cee,restartNumber:Nn?.restartNumber||1};jr.onMessageByType=L0;jr.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=jr.find(s=>s.threadId===e);if(r)return r.postMessage(t),!0};var gR;function cee(e){RR=e}a(cee,"setTerminateTimeout");function b0(){return Nn?Nn.workerIndex:gR?0:void 0}a(b0,"getWorkerIndex");function y0(){return Nn?Nn.workerCount:gR?1:void 0}a(y0,"getWorkerCount");function uee(e){gR=e}a(uee,"setMainIsWorker");var Af;function I0(){return Af||(Af=TR?ree(48):Nn.ticketKeys,Af)}a(I0,"getTicketKeys");Object.defineProperty(R0,"workerIndex",{get(){return b0()}});Object.defineProperty(R0,"workerCount",{get(){return y0()}});var w0={[g0](e,t){See(t)},[A0](e,t){Tee(t,e)}};function mR(e,t={}){let r=process.constrainedMemory?.()||m0();r=Math.min(r,m0(),2e4*p0);let s=Math.max(Math.floor(r/p0/(10+(t.threadCount||1)/4)),512),n=Math.min(Math.max(s>>6,16),64),i=[],o=[];for(let u of jr){let _=new Q7;_.existingPort=u,i.push(_),o.push(_.port2)}j7(e)||(e+=".js");let c=new W7(X7(e)?e:T0(J7,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:s,maxYoungGenerationSizeMb:n},execArgv:["--enable-source-maps"],argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(u=>u.existingPort.threadId),workerIndex:t.workerIndex,workerCount:t.threadCount,name:t.name,restartNumber:si.exports.restartNumber,ticketKeys:I0()},transferList:o},t));for(let{port1:u,existingPort:_}of i)_.postMessage({type:N0,port:u,threadId:c.threadId},[u]);return bf(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>mR(e,t),c.on("error",u=>{console.error("Worker error:",u),bn.error("Worker error:",u)}),c.on("exit",u=>{ri.splice(ri.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<iee?(t.unexpectedRestarts=c.unexpectedRestarts+1,mR(e,t)):bn.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",u=>{w0[u.type]?.(u,c)}),ri.push(c),Aee(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(mR,"startWorker");var lee=[Nf.THREAD_TYPES.HTTP];async function AR(e=null,t=2,r=!0){if(TR){if(r){let{loadRootComponents:o}=h0();await o()}si.exports.restartNumber++,t<1&&(t=t*ri.length);let s=[],n=[];for(let o of ri.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;bn.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:si.exports.restartNumber,type:Nf.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=lee.indexOf(o.name)>-1,u=new Promise(_=>{let l=setTimeout(()=>o.terminate(),RR*2).unref();o.on("exit",()=>{clearTimeout(l),s.splice(s.indexOf(u)),!c&&r&&o.startCopy(),_()})});if(s.push(u),c&&r){let _=o.startCopy(),l=new Promise(d=>{let f=a(E=>{E.type===nee.ITC_EVENT_TYPES.CHILD_STARTED&&(bn.trace("Worker has started",_.threadId),d(),n.splice(n.indexOf(l)),_.off("message",f))},"startListener");bn.trace("Waiting for worker to start",_.threadId),_.on("message",f)});n.push(l),s.length>=t&&await Promise.race(s),n.length>=t&&await Promise.race(n)}}await Promise.all(s),await Promise.all(n);let{restartService:i}=od();r&&(e==="http"||!e)&&tee.get(Nf.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else Ks.postMessage({type:oee,workerType:e})}a(AR,"restartWorkers");function _ee(e,t){w0[e]=t}a(_ee,"setChildListenerByType");function dee(e){return AR(e,1/0,!1)}a(dee,"shutdownWorkers");var C0=[];function fee(e){C0.push(e)}a(fee,"onMessageFromWorkers");var pR=new Map;function L0(e,t){let r=pR.get(e);r||pR.set(e,r=[]),r.push(t)}a(L0,"onMessageByType");var Eee=10;async function hee(e){let t=0;for(let r of jr)try{r.postMessage(e),t++>Eee&&(t=0,await new Promise(setImmediate))}catch(s){bn.error("Unable to send message to worker",s)}}a(hee,"broadcast");var Of=new Map,mee=1;function pee(e){return new Promise(t=>{let r=0;for(let s of jr)try{let n=mee++,i=a(()=>{Of.delete(n),--r===0&&t(),s!==Ks&&--s.refCount===0&&s.unref()},"ack_handler");i.port=s,s.ref(),s.refCount=(s.refCount||0)+1,Of.set(e.requestId=n,i),s.hasAckCloseListener||(s.hasAckCloseListener=!0,s.on(s.close?"close":"exit",()=>{for(let[,o]of Of)o.port===s&&o()})),s.postMessage(e),r++}catch(n){bn.error("Unable to send message to worker",n)}r===0&&t()})}a(pee,"broadcastWithAcknowledgement");function See(e){e.postMessage({type:O0,workers:D0()})}a(See,"sendThreadInfo");function D0(){let e=Date.now();return ri.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(D0,"getChildWorkerInfo");function Tee(e,t){e.resources=t,e.resources.updated=Date.now()}a(Tee,"recordResourceReport");var SR;function Ree(e){SR=e}a(Ree,"setMonitorListener");var gee=1e3,S0=!1;function Aee(){S0||(S0=!0,setInterval(()=>{for(let e of ri){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}SR&&SR()},gee).unref())}a(Aee,"startMonitoring");var Oee=1e3;if(Ks){bf(Ks);for(let e=0,t=Nn.addPorts.length;e<t;e++){let r=Nn.addPorts[e];r.threadId=Nn.addThreadIds[e],bf(r)}setInterval(()=>{let e=process.memoryUsage();Ks.postMessage({type:A0,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Oee).unref(),hR=a(()=>new Promise((e,t)=>{Ks.on("message",r),Ks.postMessage({type:g0});function r(s){s.type===O0&&(Ks.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else hR=D0;si.exports.getThreadInfo=hR;function bf(e,t){jr.push(e),e.on("message",r=>{if(r.type===N0)r.port.threadId=r.threadId,bf(r.port);else if(r.type===aee){let s=Of.get(r.id);s&&s()}else{for(let n of C0)n(r,e);let s=pR.get(r.type);if(s)for(let n of s)try{n(r,e)}catch(i){bn.error(i)}}}).on("close",()=>{jr.splice(jr.indexOf(e),1)}).on("exit",()=>{jr.splice(jr.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(bf,"addPort");if(TR){let e,t,r=a(async(s,n)=>{n&&(e=n);for(let i of await eee(s,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(T0(s,i.name));try{for await(let{filename:i}of Z7(s,{persistent:!1}))t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await AR(),console.log("Reloaded HarperDB components")},100)}catch(i){console.warn("Error trying to watch component directory",s,i)}},"watch_dir");si.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else Ks.on("message",async e=>{let{type:t}=e;t===Nf.ITC_EVENT_TYPES.SHUTDOWN&&(si.exports.restartNumber=e.restartNumber,Ks.unref(),setTimeout(()=>{bn.warn("Thread did not voluntarily terminate",z7),process.exit(0)},RR).unref())})});function M0(e,t,r,s,n){let i=e.primaryStore.env.path,o=e.primaryStore.tableId;ha||((0,Au.onMessageByType)(U0,d=>{P0(d.path)}),(0,Au.onMessageByType)(Nee,d=>{(0,gu.trace)("confirming to proceed with txn",d.txnId)}),ha=Object.create(null));let c=ha[i]||(ha[i]=[]);c.auditStore=e.auditStore;let u=c[o];u||(u=c[o]=new Map,u.envs=c,u.tableId=o,u.store=e.primaryStore),t=Wo(t);let _=new NR(r);_.startTime=s,n&&(_.includeDescendants=n);let l=u.get(t);return l?l.push(_):(u.set(t,l=[_]),l.tables=u,l.key=t),_.subscriptions=l,_}function P0(e,t){if(!ha)return;let r=ha[e];if(!r)return;try{r.auditStore.resetReadTxn()}catch(n){throw n.message+=" in "+e,n}let s;for(let{key:n,value:i}of r.auditStore.getRange({start:OR,exclusiveStart:!0})){OR=n;let o=hr(i),c=r[o.tableId];if(!c)continue;let u=o.recordId,_,l=Wo(o.recordId),d;do{let f=c.get(l);if(f){for(let h of f)if(!(d&&!h.includeDescendants)){if(h.startTime>=n){(0,gu.info)("omitting",u,h.startTime,n);continue}try{if(h.crossThreads===!1&&!t)continue;let p;h.supportsTransactions&&h.txnInProgress!==o.version&&(p=!0,h.txnInProgress||(s?s.push(h):s=[h]),h.txnInProgress=o.version),h.listener(u,o,n,p)}catch(p){console.error(p),(0,gu.info)(p)}}}if(l==null)break;let E=l.lastIndexOf?.("/",l.length-2);E>-1?l=l.slice(0,E+1):l=null,d=!0}while(!0)}if(s)for(let n of s)n.txnInProgress=null,n.listener(null,{type:"end_txn"},OR,!0)}function v0(e,t){let r=t||e,s=r.env;if(t&&!t.cache&&(t.cache=new Map),!s.hasBroadcastListener){s.hasBroadcastListener=!0;let n=s.path;r.on("aftercommit",()=>{(0,Au.broadcast)({type:U0,path:n}),P0(n,!0)})}}var gu,Au,U0,Nee,ha,Efe,NR,OR,B0=Te(()=>{gu=D(q()),Au=D(Ze());Pa();Vc();co();U0="transaction",Nee="transaction-await",Efe=Buffer.alloc(4096);a(M0,"addSubscription");NR=class extends ss{static{a(this,"Subscription")}listener;subscriptions;startTime;constructor(t){super(),this.listener=t,this.on("close",()=>this.end())}end(){if(this.subscriptions){if(this.subscriptions.splice(this.subscriptions.indexOf(this),1),this.subscriptions.length===0){let t=this.subscriptions.tables,r=this.subscriptions.key;if(t.delete(r),t.size===0){let s=t.envs,n=t.dbi;delete s[n]}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}},OR=Date.now();a(P0,"notifyFromTransactionData");a(v0,"listenToCommits")});var NT={};Qe(NT,{coerceType:()=>Lf,makeTable:()=>Mf,setServerUtilities:()=>Mee,updateResource:()=>yu});function Mf(e){let{primaryKey:t,indices:r,tableId:s,tableName:n,primaryStore:i,databasePath:o,databaseName:c,auditStore:u,schemaDefined:_,dbisDB:l}=e,{expirationMS:d,evictionMS:f,audit:E,trackDeletes:h}=e,{attributes:p}=e;p||(p=[]),v0(i,u);let S=jE(i,s,u),A=0,I,N,Y,Q={},G=Promise.resolve(),w,K,B;for(let W of p)(W.assignCreatedTime||W.name==="__createdtime__")&&(w=W),(W.assignUpdatedTime||W.name==="__updatedtime__")&&(K=W),W.expiresAt&&(B=W),W.isPrimaryKey&&(Q=W);let x,te=[],be=[],se=1,Mt=2,Pe={},At={},ts=864e5,zR,qu,kB=10,VB=6;E&&jR();class at extends Ot{static name=n;static primaryStore=i;static auditStore=u;static primaryKey=t;static tableName=n;static indices=r;static audit=E;static databasePath=o;static databaseName=c;static attributes=p;static expirationTimer;static createdTimeProperty=w;static updatedTimeProperty=K;static sources=[];static get expirationMS(){return d}static dbisDB=l;static schemaDefined=_;static sourcedFrom(m,g){g&&(this.sourceOptions=g,(g.expiration||g.eviction||g.scanInterval)&&this.setTTLExpiration(g)),g?.intermediateSource?(m.intermediateSource=!0,this.sources.unshift(m)):this.sources.push(m),N=m.get&&(!m.get.reliesOnPrototype||m.prototype.get);let C=a(y=>{let U=this.sources.slice(0,-1);if(U=U.filter(M=>M[y]&&(!M[y].reliesOnPrototype||M.prototype[y])),U.length>0)if(U.length===1){let M=U[0];return(V,z,ie)=>{if(V?.source!==M)return M[y](z,ie,V)}}else return(M,V,z)=>{let ie=[];for(let k of U){if(M?.source===k)break;ie.push(k[y](V,z,M))}return Promise.all(ie)}},"getApplyToIntermediateSource"),R=this.sources[this.sources.length-1],L=a(y=>{if(R[y]&&(!R[y].reliesOnPrototype||R.prototype[y]))return(U,M,V)=>{if(!U?.source)return R[y](M,V,U)}},"getApplyToCanonicalSource");return Pe={put:L("put"),delete:L("delete"),publish:L("publish")},At={put:C("put"),delete:C("delete"),publish:C("publish"),invalidate:C("invalidate")},(async()=>{let y=!1,U=a(async(M,V)=>{let z=M.value,ie=M.table?qe[c][M.table]:at;if(c===Os.SYSTEM_SCHEMA_NAME&&(M.table===Os.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||M.table===Os.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(y=!0),M.id===void 0&&(M.id=z[ie.primaryKey],M.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(M));M.source=m;let k=await ie.getResource(M.id,V,Ou);switch(M.type){case"put":return k._writeUpdate(z,Ou);case"delete":return k._writeDelete(Ou);case"publish":return k._writePublish(z,Ou);case"invalidate":return k.invalidate(Ou);default:Ke.error("Unknown operation",M.type,M.id)}},"writeUpdate");try{let M=m.subscribe;M&&h==null&&(h=!0);let V=m.subscribeOnThisThread?m.subscribeOnThisThread((0,Qi.getWorkerIndex)()):(0,Qi.getWorkerIndex)()===0,z=M&&V&&await m.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(z){let ie;for await(let k of z)try{if(!(k.type==="transaction"?k.writes[0]:k)){Ke.error("Bad subscription event",k);continue}if(k.source=m,ie)if(k.beginTxn)ie.resolve();else{U(k,ie);continue}if(k.type==="end_txn")continue;let Ne=Ge(k,()=>{if(k.type==="transaction"){let ne=[];for(let Pt of k.writes)try{ne.push(U(Pt,k))}catch(kt){throw kt.message+=" writing "+JSON.stringify(Pt)+" of event "+JSON.stringify(k),kt}return Promise.all(ne)}else if(k.type==="define_schema"){let ne=this.attributes.slice(0),Pt;for(let kt of k.attributes)ne.find(ai=>ai.name===kt.name)||(ne.push(kt),Pt=!0);Pt&&(et({table:n,database:c,attributes:ne,origin:"cluster"}),wu.signalSchemaChange(new Cu.SchemaEventMsg(process.pid,Os.OPERATIONS_ENUM.CREATE_TABLE,c,n)))}else return k.beginTxn?(ie=k,U(k,k),new Promise(ne=>{ie.resolve=ne})):U(k,k)});y&&(await Ne,wu.signalUserChange(new Cu.UserEventMsg(process.pid))),k.onCommit&&(Ne?.then?Ne.then(k.onCommit):k.onCommit())}catch(Ee){Ke.error("error in subscription handler",Ee)}}}catch(M){Ke.error(M)}})(),this}static getResource(m,g,C){let R=super.getResource(m,g,C);if(m!=null){Ta(m);try{if(R.hasOwnProperty(Re))return R;if(typeof m=="object"&&m&&!Array.isArray(m))throw new Error(`Invalid id ${JSON.stringify(m)}`);let L=!C?.async||i.cache?.get(m),y=wn(g),U=y.getReadTxn();if(U?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return JR(m,g,{transaction:U},L,M=>{if(M?yu(R,M):R[Re]=null,g.onlyIfCached&&g.noCacheStore){if(!R.doesExist())throw new Qs.ServerError("Entry is not cached",504)}else if(C?.ensureLoaded){let V=Xf(m,M,g,R);if(V)return y?.disregardReadTxn(),R[yR]=!0,wR(V,z=>(yu(R,z),R))}return R})}catch(L){throw L.message.includes("Unable to serialize object")&&(L.message+=": "+JSON.stringify(m)),L}}return R}ensureLoaded(){let m=Xf(this[Ie],this[Ws],this[me]);if(m)return this[yR]=!0,wR(m,g=>{this[Ws]=g,this[Re]=g.value,this[Cf]=g.version})}static setTTLExpiration(m){if(typeof m=="number")d=m*1e3,f||(f=0);else if(m&&typeof m=="object")d=m.expiration*1e3,f=(m.eviction||0)*1e3,ts=m.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(d<0)throw new Error("Expiration can not be negative");ts=ts||(d+f)/4,jf()}static enableAuditing(m=!0){E=m,m&&jR(),at.audit=m}static coerceId(m){return m===""?null:Lf(m,Q)}static async dropTable(){if(delete qe[c][n],c===o){for(let m of p)l.remove(at.tableName+"/"+m.name),r[m.name]?.drop();l.remove(at.tableName+"/"),i.drop(),await l.committed}else console.log("legacy dropTable"),await i.close(),await fs.remove(data_path),await fs.remove(data_path===standard_path?data_path+MDB_LOCK_FILE_SUFFIX:path.join(path.dirname(data_path),MDB_LEGACY_LOCK_FILE_NAME));wu.signalSchemaChange(new Cu.SchemaEventMsg(process.pid,Os.OPERATIONS_ENUM.DROP_TABLE,c,n))}static get(m,g){if(m&&typeof m=="object"&&!Array.isArray(m)&&m.url===""){let C=this.getRecordCount();return{recordCount:C.recordCount,estimatedRecordRange:C.estimatedRange,records:"./",name:n,database:c,attributes:p}}return super.get(m,g)}get(m){if(typeof m=="string")return this.getProperty(m);if(this[os])return this.search(m);if(m?.property)return this.getProperty(m.property);if(this.doesExist()||m?.ensureLoaded===!1||this[me]?.returnNonexistent)return this}allowRead(m,g){let C=ku(m);if(C?.read){let R=C.attribute_permissions;if(R?.length>0){g||(g={});let L=g.select;if(L){let y=IR(R,"read");g.select=L.filter(U=>y[U])}else g.select=R.filter(y=>y.read).map(y=>y.attribute_name);return g}else return!0}}allowUpdate(m,g){let C=ku(m);if(C?.update){let R=C.attribute_permissions;if(R?.length>0){let L=IR(R,"update");for(let y in g)if(!L[y])return!1;for(let y of R){let U=y.attribute_name;!y.update&&!(U in g)&&(g[U]=this.getProperty(U))}}return!0}}allowCreate(m,g){if(this[os]){let C=ku(m);if(C?.insert){let R=C.attribute_permissions;if(R?.length>0){let L=IR(R,"insert");for(let y in g)if(!L[y])return!1}else return!0}}else return this.allowUpdate(m,{})}allowDelete(m){return ku(m)?.delete}update(m,g){if(!wn(this[me]))throw new Error("Can not update a table resource outside of a transaction");if(m===!1)return this;let R;if(typeof m=="object"&&m)if(g){Object.isFrozen(m)&&(m=Object.assign({},m));for(let L in this[Re])m[L]===void 0&&(m[L]=void 0);this[vt]=m}else R=this[vt],R&&(m=Object.assign(R,m)),this[vt]=R=m;return this._writeUpdate(this),this}invalidate(m){let g=this[me],C=this[Ie];Ta(C),wn(this[me]).addWrite({key:C,store:i,invalidated:!0,entry:this[Ws],nodeName:this[me]?.nodeName,before:Pe.invalidate?.bind(this,g,C),beforeIntermediate:At.invalidate?.bind(this,g,C),commit:(L,y)=>{if(y?.version>L)return;let U=null;for(let M in r)U||(U={}),U[M]=this.getProperty(M);S(C,U,this[Ws],L,yf,E,this[me],0,"invalidate")}})}static evict(m,g,C){let R=this.Source,L;if(!((N||E)&&(!g||(L=i.getEntry(m),!L||!g)||L.version!==C))){if(N){if(i.hasLock(m,L.version))return;let y;for(let U in r)y||(y={}),y[U]=g[U];if(y){S(m,y,L,C,If,null,null,0,null,!0);return}}if(i.ifVersion(C,()=>{xu(m,g,null)}),E)S(m,null,L,C,If,null,null,0,null,!0);else return i.remove(m,C)}}lock(){throw new Error("Not yet implemented")}static operation(m,g){return m.table||=n,m.schema||=c,V0.operation(m,g)}async put(m){this.update(m,!0)}_writeUpdate(m,g){let C=this[me],R=wn(C),L=this[Ie];Ta(L);let y=this[Ws];this[bR]=!0;let U={key:L,store:i,entry:y,nodeName:C?.nodeName,validate:M=>{if(!m[F0]||rl(m)){if(this.validate(m),C?.source?m=va(m):(t&&m[t]!==L&&(m[t]=L),K&&(m[K.name]=K.type==="Date"?new Date(M):K.type==="String"?new Date(M).toISOString():M),w&&(y?.value?m[w.name]=y?.value[w.name]:m[w.name]=w.type==="Date"?new Date(M):w.type==="String"?new Date(M).toISOString():M),m=va(m)),m[Re])throw new Error("Can not assign a record with a record property");this[Re]=m}else R.removeWrite(U)},before:Pe.put&&(()=>Pe.put(C,L,m)),beforeIntermediate:At.put&&(()=>At.put(C,L,m)),commit:(M,V,z)=>{z&&(C&&V?.version>(C.lastModified||0)&&(C.lastModified=V.version),yu(this,V));let ie=V?.value;this[bR]=!1,Ke.trace("Checking timestamp for put",L,V?.version>M,V?.version,M),!(V?.version>M)&&(xu(L,ie,m),S(L,m,V,M,0,E,C,C.expiresAt||(d?d+Date.now():0)))}};R.addWrite(U)}async delete(m){if(typeof m=="string")return this.deleteProperty(m);if(this[os]){for await(let g of this.search(m))(await at.getResource(g[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(m);return}return this[Re]?this._writeDelete(m):!1}_writeDelete(m){let g=wn(this[me]),C=this[Ie];Ta(C);let R=this[me];return g.addWrite({key:C,store:i,resource:this,nodeName:R?.nodeName,before:Pe.delete?.bind(this,R,C),beforeIntermediate:At.delete?.bind(this,R,C),commit:(L,y,U)=>{let M=y?.value;U&&(R&&y?.version>(R.lastModified||0)&&(R.lastModified=y.version),yu(this,y)),!(y?.version>L)&&(xu(this[Ie],M),Ke.trace("Write delete entry",C,L),E||h?(S(C,null,this[Ws],L,0,E,this[me],0,"delete"),E||jf()):i.remove(this[Ie]))}}),!0}search(m){let g=wn(this[me]);if(!m)throw new Error("No query provided");let C=m.reverse===!0,R=m.conditions;R?R.length===void 0&&(R=Array.from(R)):R=Array.isArray(m)?m:m[Symbol.iterator]?Array.from(m):[],this[Ie]&&(R=[{attribute:null,comparator:"prefix",value:this[Ie]}].concat(R));for(let k of R){let Ee=k[0]??k.attribute,Ne=Ee==null?Q:p.find(ne=>ne.name==Ee);if(Ne)Ne.type&&(k[1]===void 0?k.value=L(k.value,Ne):k[1]=L(k[1],Ne));else if(Ee!=null)throw(0,Qs.handleHDBError)(new Error,`${Ee} is not a defined attribute`,404)}function L(k,Ee){return Array.isArray(k)?k.map(Ne=>Lf(Ne,Ee)):Lf(k,Ee)}a(L,"coerceTypedValues"),R.length>1&&(R=(0,k0.sortBy)(R,k=>{if(k.estimated_count===void 0){let Ee=k.comparator||k.search_type;if(Ee===bu.SEARCH_TYPES.EQUALS){let Ne=k[0]??k.attribute;if(Ne==null||Ne===t)k.estimated_count=1;else{let ne=r[Ne];k.estimated_count=ne?ne.getValuesCount(k[1]??k.value):1/0}}else Ee===bu.SEARCH_TYPES.CONTAINS||Ee===bu.SEARCH_TYPES.ENDS_WITH||Ee==="ne"?k.estimated_count=1/0:Ee===bu.SEARCH_TYPES.STARTS_WITH||Ee==="prefix"?k.estimated_count=Iee:k.estimated_count=yee}return k.estimated_count}));let y=g.getReadTxn();y.use();let U=m.select,M=R[0],V;if(!M)V=i.getRange(C?{end:!1,reverse:!0,transaction:y,lazy:U?.length<4}:{start:!1,transaction:y,lazy:U?.length<4}).map(({value:k})=>k?new Promise(Ee=>setImmediate(()=>Ee(k))):wf.SKIP);else{let k=TE(M,y,C,at,m.allowFullScan);if(!m.operator||m.operator.toLowerCase()==="and"){let Ee=R.slice(1).map(RE);V=ie(k,Ee)}else{for(let Ne=1;Ne<R.length;Ne++){let ne=R[Ne],Pt=TE(ne,y,C,at,m.allowFullScan);k=k.concat(Pt)}let Ee=new Set;k=k.filter(Ne=>Ee.has(Ne)?!1:(Ee.add(Ne),!0)),V=ie(k)}}(m.offset||m.limit!==void 0)&&(V=V.slice(m.offset,m.limit!==void 0?(m.offset||0)+m.limit:void 0)),V.onDone=()=>{V.onDone=null,y.done()};let z=this[me];function ie(k,Ee){let Ne=Ee?.length,ne={transaction:y,lazy:Ne>0||U?.length<4,alwaysPrefetch:!0},Pt=m.ensureLoaded!==!1;function kt(ai,He){if(Pt&&He!==void 0){let lr=!z.onlyIfCached&&Xf(He,ai,z,this);if(lr)return lr.then(KB=>kt(KB))}let bs=ai?.value;if(!bs)return wf.SKIP;for(let lr=0;lr<Ne;lr++)if(!Ee[lr](bs))return wf.SKIP;return bs}return a(kt,"processEntry"),k.map(ai=>JR(ai,z,ne,!1,kt))}return a(ie,"idsToRecords"),V}async subscribe(m){if(!u)throw new Error("Can not subscribe to a table without an audit log");E||et({table:n,database:c,schemaDefined:_,attributes:p,audit:!0}),m||(m={});let g=M0(at,this[Ie]??null,function(y,U,M,V){try{let z=U.getValue?.(i);this.send({id:y,timestamp:M,value:z,version:U.version,type:U.type,beginTxn:V})}catch(z){Ke.error(z)}},m.startTime,this[os]);m.crossThreads===!1&&(g.crossThreads=!1),m.supportsTransactions&&(g.supportsTransactions=!0);let C=this[Ie],R=m.previousCount;R>1e3&&(R=1e3);let L=m.startTime;if(this[os]){if(L){if(R)throw new Qs.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:y,value:U}of u.getRange({start:L,exclusiveStart:!0})){let M=hr(U,i);if(M.tableId!==s)continue;let V=M.recordId;(C==null||x0(C,V))&&g.send({id:V,timestamp:y,...M}),g.startTime=y}}else if(R){let y=[];for(let{key:U,value:M}of u.getRange({start:"z",end:!1,reverse:!0}))try{let V=hr(M);if(V.tableId!==s)continue;let z=V.recordId;if(C==null||x0(C,z)){let ie=V.getValue(i);if(y.push({id:z,timestamp:U,value:ie,version:V.version,type:V.type}),--R<=0)break}}catch(V){Ke.error("Error getting history entry",U,V)}for(let U=y.length;U>0;)g.send(y[--U]);y[0]&&(g.startTime=y[0].timestamp)}else if(!m.omitCurrent)for(let{key:y,value:U,version:M,localTime:V}of i.getRange({start:C??!1,end:C==null?void 0:[C,Df.MAXIMUM_KEY],versions:!0}))U&&g.send({id:y,version:M,timestamp:V,value:U})}else{R&&!L&&(L=0);let y=this[Ws]?.localTime;if(Ke.trace("Subscription from",L,"from",C),L<y){let U=[],M=y;do{let V=u.get(M);if(V){m.omitCurrent=!0;let z=hr(V),ie=z.getValue(i);U.push({id:C,value:ie,timestamp:M,...z}),M=z.previousLocalTime}else break;R&&R--}while(M>L&&R!==0);for(let V=U.length;V>0;)g.send(U[--V]);g.startTime=y}!m.omitCurrent&&this.doesExist()&&g.send({id:C,version:this[Cf],timestamp:this[Ws]?.localTime,value:this})}return m.listener&&g.on("data",m.listener),g}doesExist(){return!!(this[Re]||this[bR])}async publish(m,g){this._writePublish(m,g)}_writePublish(m,g){let C=wn(this[me]),R=this[Ie]||null;Ta(R);let L=this[me];C.addWrite({key:R,store:i,entry:this[Ws],nodeName:L?.nodeName,validate:()=>{this.validate(m)},before:Pe.publish?.bind(this,L,R,m),beforeIntermediate:At.publish?.bind(this,L,R,m),commit:(y,U,M)=>{U===void 0&&h&&!E&&jf(),S(R,U?.value??null,U,U?.version||y,0,!0,L,U?.expiresAt,"message",!1,m)}})}validate(m){let g,C=a((R,L,y)=>{if(L.type&&R!=null)if(L.properties){typeof R!="object"&&(g||(g=[])).push(`Property ${y} must be an object${L.type?" ("+L.type+")":""}`);let U=L.properties;for(let M=0,V=U.length;M<V;M++){let z=U[M],ie=C(R[z.name],z,y+"."+z.name);ie&&(R[z.name]=ie)}}else switch(L.type){case"Int":(typeof R!="number"||R>>0!==R)&&(g||(g=[])).push(`Property ${y} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof R!="number"||!(Math.floor(R)===R&&Math.abs(R)<=9007199254740992))&&(g||(g=[])).push(`Property ${y} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof R!="number"&&(g||(g=[])).push(`Property ${y} must be a number`);break;case"ID":typeof R=="string"||R?.length>0&&R.every?.(U=>typeof U=="string")||(g||(g=[])).push(`Property ${y} must be a string, or an array of strings`);break;case"String":typeof R!="string"&&(g||(g=[])).push(`Property ${y} must be a string`);break;case"Boolean":typeof R!="boolean"&&(g||(g=[])).push(`Property ${y} must be a boolean`);break;case"Date":if(!(R instanceof Date)){if(typeof R=="string"||typeof R=="number")return new Date(R);(g||(g=[])).push(`Property ${y} must be a Date`)}break;case"Bytes":R instanceof Uint8Array||(g||(g=[])).push(`Property ${y} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(R)){if(L.elements)for(let U=0,M=R.length;U<M;U++){let V=R[U],z=C(V,L.elements,y+"[*]");z&&(R[U]=z)}}else(g||(g=[])).push(`Property ${y} must be a Buffer or Uint8Array`);break}L.nullable===!1&&R==null&&(g||(g=[])).push(`Property ${y} is required (and not does not allow null values)`)},"validateValue");for(let R=0,L=p.length;R<L;R++){let y=p[R],U=C(m[y.name],y,y.name);U&&(m[y.name]=U)}if(g)throw new Qs.ClientError(g.join(". "))}getUpdatedTime(){return this[Cf]}wasLoadedFromSource(){return N?!!this[yR]:void 0}static async addAttributes(m){let g=p.slice(0);for(let C of m){if(!C.name)throw new Qs.ClientError("Attribute name is required");if(C.name.match(/[`/]/))throw new Qs.ClientError("Attribute names cannot include backticks or forward slashes");g.push(C)}return et({table:n,database:c,schemaDefined:_,attributes:g}),at.indexingOperation}static async removeAttributes(m){let g=p.filter(C=>!m.includes(C.name));return et({table:n,database:c,schemaDefined:_,attributes:g}),at.indexingOperation}static getRecordCount(m){let g=i.getStats().entryCount,C=5e3,R=1e3,L;g>C&&!m?.exactCount&&(L=R);let y=0;for(let{value:U}of i.getRange({start:!0,lazy:!0,limit:L}))U!=null&&y++;if(L){let U=y;y=0;for(let{value:Pt}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:L}))Pt!=null&&y++;let M=L*2,V=(y+U)/M,z=Math.pow((y-U+1)/L/2,2)+V*(1-V)/M,ie=Math.max(Math.sqrt(z)*g,1),k=Math.round(V*g),Ee=Math.max(k-1.96*ie,0),Ne=Math.min(k+1.96*ie,g),ne=Math.pow(10,Math.round(Math.log10(ie)));return ne>k&&(ne=ne/10),y=Math.round(k/ne)*ne,{recordCount:y,estimatedRange:[Math.round(Ee),Math.round(Ne)]}}return{recordCount:y}}static updatedAttributes(){nl(this,this)}static async deleteHistory(m=0){let g;for(let{key:C,value:R}of u.getRange({start:0,end:m}))await Nu(),hr(R).tableId===s&&(g=u.remove(C));await g}static async*getHistory(m=0,g=1/0){for(let{key:C,value:R}of u.getRange({start:m,end:g})){await Nu();let L=hr(R);L.tableId===s&&(yield{id:L.recordId,localTime:C,version:L.version,type:L.type,value:L.getValue(i),user:L.user})}}static async getHistoryOfRecord(m){let g=[],C=i.getEntry(m);if(!C)return g;let R=C.localTime,L=0;do{await Nu();let y=u.get(R);if(y){let U=hr(y);g.push({id:U.recordId,localTime:R,version:U.version,type:U.type,value:U.getValue(i),user:U.user}),R=U.previousLocalTime}else break}while(L<1e3&&R);return g.reverse()}static cleanup(){x?.remove()}}at.updatedAttributes();let $B=at.prototype;return $B[F0]=!0,d&&at.setTTLExpiration(d/1e3),B&&YB(),at;function xu(W,m,g){let C;for(let R in r){let L=r[R],y=L.isIndexing,U=g?.[R],M=m?.[R];if(U===M&&!y)continue;C=!0;let V=(0,Iu.getIndexedValues)(M);if(V){H0&&L.prefetch(V.map(z=>({key:z,value:W})),q0);for(let z=0,ie=V.length;z<ie;z++)L.remove(V[z],W)}if(V=(0,Iu.getIndexedValues)(U),V){H0&&L.prefetch(V.map(z=>({key:z,value:W})),q0);for(let z=0,ie=V.length;z<ie;z++)L.put(V[z],W)}}return C}a(xu,"updateIndices");function Ta(W){switch(typeof W){case"number":return!0;case"string":if(W.length<659)return!0;if(W.length>G0)throw new Error("Primary key size is too large: "+W.length);break;case"object":if(W===null)return!0;break;default:throw new Error("Invalid primary key type: "+typeof W)}if((0,Df.writeKey)(W,Dee,0)>G0)throw new Error("Primary key size is too large: "+W.length);return!0}a(Ta,"checkValidId");function JR(W,m,g,C,R){let L=a(()=>{if(m?.transaction?.stale&&(m.transaction.stale=!1),g.transaction?.isDone)return R(null,W);let y=i.getEntry(W,g);return y&&m&&(y?.version>(m.lastModified||0)&&(m.lastModified=y.version),y?.localTime&&!m.lastRefreshed&&(m.lastRefreshed=y.localTime)),R(y,W)},"whenPrefetched");return C?L():se>0?(se--,L()):new Promise((y,U)=>{se===0?(se--,i.prefetch([W],()=>{M(),V()})):(te.push(W),be.push(V),te.length>VB&&(se--,M()));function M(){if(te.length>0){let z=be;i.prefetch(te,()=>{se===-1?M():se++;for(let ie of z)ie()}),te=[],be=[],Mt>2&&Mt--}else se=Mt,Mt<kB&&Mt++}a(M,"prefetch");function V(){try{y(L())}catch(z){U(z)}}a(V,"load")})}a(JR,"loadLocalRecord");function ku(W){if(!W)return;let m=W.role.permission;if(m.super_user)return Uee;let g=m[c],C,R=g?.tables;if(R)return R[n];if(c==="data"&&(C=m[n])&&!C.tables)return C}a(ku,"getTablePermissions");function Xf(W,m,g,C){if(N){let R;if(g.noCache?R=!0:(m?(!m.value||m.metadataFlags&(yf|If)||m.expiresAt&&m.expiresAt<Date.now())&&(R=!0):R=!0,zr(!R,"cache-hit",n)),R){let L=XR(W,m,g).then(y=>(y?.value?.[Re]&&Ke.error("Can not assign a record with a record property"),g&&(y?.version>(g.lastModified||0)&&(g.lastModified=y.version),g.lastRefreshed=Date.now()),y));if(g?.onlyIfCached||m?.value&&C?.allowStaleWhileRevalidate?.(m,W)){if(L.catch(y=>Ke.warn(y)),g?.onlyIfCached&&!C.doesExist())throw new Qs.ServerError("Entry is not cached",504);return}else return L}}}a(Xf,"ensureLoadedFromSource");function wn(W){let m=W?.transaction;if(m){if(!m.open)throw new Error("Can not use a transaction that is not open");if(!m.lmdbDb)return m.lmdbDb=i,m;do{if(m.lmdbDb?.path===i.path)return m;let g=m.next;if(!g)return m=m.next=new li,m.lmdbDb=i,m;m=g}while(!0)}else return new al}a(wn,"txnForContext");async function XR(W,m,g){let C=m?.metadataFlags,R=m?.version,L,y;if(!i.attemptLock(W,R,()=>{clearTimeout(y);let z=i.getEntry(W);!z||!z.value||z.metadataFlags&(yf|If)?L(XR(W,i.getEntry(W),g)):L(z)}))return new Promise(z=>{L=z,y=setTimeout(()=>{i.unlock(W,R)},Lee)});let U=m?.value,M={requestContext:g,replacingRecord:U,replacingVersion:R,source:null,resourceCache:g?.resourceCache},V=g?.responseHeaders;return new Promise((z,ie)=>{let k;wR(Ge(M,async Ee=>{let Ne=performance.now(),ne,Pt,kt;try{for(let lr of at.sources)if(lr.get&&(!lr.get.reliesOnPrototype||lr.prototype.get)&&(M.source=lr,ne=await lr.get(W,M),ne))break;kt=C&yf;let He=M.lastModified||kt&&R;Pt=kt||He>R||!U,He||(He=(0,Iu.getNextMonotonicTime)());let bs=performance.now()-Ne;if(wr(bs,"cache-resolution",n),V&&V.append("Server-Timing",`cache-resolve;dur=${bs.toFixed(2)}`),Ee.timestamp=He,d&&!M.expiresAt&&(M.expiresAt=Date.now()+d),ne){if(typeof ne!="object")throw new Error("Only objects can be cached and stored in tables");typeof ne.toJSON=="function"&&(ne=ne.toJSON()),t&&ne[t]!==W&&(ne[t]=W)}k=!0,z({version:He,value:ne})}catch(He){He.message+=` while resolving record ${W} for ${n}`,U&&((He.code==="ECONNRESET"||He.code==="ECONNREFUSED"||He.code==="EAI_AGAIN")&&!g?.mustRevalidate||g?.staleIfError&&(He.statusCode===500||He.statusCode===502||He.statusCode===503||He.statusCode===504))?(z({version:R,value:U}),Ke.trace(He.message,"(returned stale record)")):ie(He),M.transaction.abort();return}if(g?.noCacheStore){M.transaction.abort();return}wn(M).addWrite({key:W,store:i,entry:m,nodeName:"source",commit:(He,bs)=>{if(bs?.version!==R)return;let lr=xu(W,U,ne);ne?(At.put?.(M,W,ne),S(W,ne,bs,He,0,E&&Pt||null,M,M.expiresAt,"put",!!kt)):(At.delete?.(M,W),E||h?S(W,null,bs,He,0,E&&Pt||null,M,0,"delete",!!kt):i.remove(W,R))}})}),()=>{i.unlock(W,R)},Ee=>{i.unlock(W,R),k&&Ke.error("Error committing cache update",Ee)})})}a(XR,"getFromSource");function jf(){if(ts!==zR&&(zR=ts,(0,Qi.getWorkerIndex)()===(0,Qi.getWorkerCount)()-1)){if(qu&&clearTimeout(qu),!ts)return;let W=new Date;W.setMonth(0),W.setDate(1),W.setHours(0),W.setMinutes(0),W.setSeconds(0);let m=Math.ceil((Date.now()-W.getTime())/ts)*ts+W.getTime(),g=a(C=>{Ke.trace(`Scheduled next cleanup scan at ${new Date(C)}ms`),qu=setTimeout(()=>G=G.then(async()=>{if(g(Math.max(C+ts,Date.now())),i.rootStore.status!=="open"){clearTimeout(qu);return}Ke.trace(`Starting cleanup scan for ${n}`);try{let R=0;for(let{key:L,value:y,version:U,expiresAt:M}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0}))y===null&&!E&&U+Cee<Date.now()?i.remove(L,U):M&&M+f<Date.now()&&(at.evict(L,y,U),R++),await Nu();Ke.trace(`Finished cleanup scan for ${n}, evicted ${R} entries`)}catch(R){Ke.trace(`Error in cleanup scan for ${n}:`,R)}}),Math.min(C-Date.now(),2147483647)).unref()},"startNextTimer");g(m)}}a(jf,"scheduleCleanup");function jR(){x=u?.addDeleteRemovalCallback(s,W=>{let m=i.getEntry(W);m?.value===null&&i.remove(W,m.version)})}a(jR,"addDeleteRemoval");function YB(){(0,Qi.getWorkerIndex)()===0&&setInterval(async()=>{try{let W=B.name,m=r[W];if(!m)throw new Error(`expiresAt attribute ${B} must be indexed`);for(let{value:g}of m.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let C=i.getEntry(g);C?.value?.[W]<Date.now()&&at.evict(g,C.value,C.version),await Nu()}}catch(W){Ke.error("Error in evicting old records",W)}},wee).unref()}a(YB,"runRecordExpirationEviction")}function IR(e,t){let r=e.attr_object||(e.attr_object={}),s=r[t];if(s)return s;s=r[t]=Object.create(null);for(let n of e)s[n.attribute_name]=n[t];return s}function q0(){}function Mee(e){V0=e}function Lf(e,t){let r=t?.type;return e===null?e:r==="Int"||r==="Long"?parseInt(e):r==="Float"?parseFloat(e):r==="Date"?(typeof e!="number"&&!Pee.test(e)&&(e+="Z"),new Date(e)):r?e:(0,Uf.autoCast)(e)}function x0(e,t){if(e==null)return!0;if(!Array.isArray(t))return e===t;if(Array.isArray(e)){let r=e.length;if(e[r-1]===null&&r--,t.length>=r){for(let s=0;s<r;s++)if(t[s]!==e[s])return!1;return!0}return!1}else if(t[0]===e)return!0}function wR(e,t,r){return e?.then?e.then(t,r):t(e)}function yu(e,t){e[Ws]=t,e[Re]=t?.value??null,e[Cf]=t?.version}var Os,wf,Iu,k0,bu,Lu,Qs,wu,Cu,Ke,Df,Qi,Uf,bee,V0,yee,Iee,wee,Cee,H0,Lee,Cf,F0,Ws,bR,yR,Ou,yf,If,Dee,G0,Uee,Dfe,Pee,Nu,Xd=Te(()=>{Os=D(b()),wf=require("lmdb"),Iu=D(fr()),k0=require("lodash");is();pE();bu=D(ze()),Lu=D(X());B0();Qs=D(j()),wu=D(nn()),Cu=D(ds());fe();ul();Ke=D(q());ol();_i();Df=require("ordered-binary"),Qi=D(Ze());co();Uf=D($());qa();ti();bee=new Uint8Array(9);bee[8]=192;yee=1e8,Iee=1e7,wee=6e4,Cee=864e5;Lu.initSync();H0=Lu.get(Os.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Lee=1e4,Cf=Symbol.for("version"),F0=Symbol.for("incremental-update"),Ws=Symbol("entry"),bR=Symbol("is-saving"),yR=Symbol("loaded-from-source"),Ou={isNotification:!0,ensureLoaded:!1},yf=1,If=8,Dee=Buffer.allocUnsafeSlow(8192),G0=1978,Uee={read:!0,insert:!0,update:!0,delete:!0},Dfe=(0,Uf.convertToMS)(Lu.get(Os.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(Mf,"makeTable");a(IR,"attributesAsObject");a(q0,"noop");a(Mee,"setServerUtilities");Pee=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(Lf,"coerceType");a(x0,"isDescendantId");Nu=a(()=>new Promise(setImmediate),"rest");a(wR,"when");a(yu,"updateResource")});var Ce={};Qe(Ce,{database:()=>mc,databases:()=>qe,dropDatabase:()=>Wm,dropTableMeta:()=>qee,getDatabases:()=>hs,getTables:()=>vee,onUpdatedTable:()=>eR,readMetaDb:()=>Du,resetDatabases:()=>Bee,table:()=>et,tables:()=>Er});function vee(){return Ff||hs(),Er||{}}function hs(){if(Ff)return qe;Ff=!0,Sa=new Map;let e=(0,xt.getHdbBasePath)()&&(0,Fe.join)((0,xt.getHdbBasePath)(),Lr.DATABASES_DIR_NAME),t=(0,xt.get)(Lr.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,xt.get)(Lr.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,Cr.existsSync)(e)?e:(0,Fe.join)((0,xt.getHdbBasePath)(),Lr.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,Cr.existsSync)(e))for(let r of(0,Cr.readdirSync)(e,{withFileTypes:!0})){let s=(0,Fe.basename)(r.name,".mdb");r.isFile()&&(0,Fe.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&Du((0,Fe.join)(e,r.name),null,s)}if((0,Cr.existsSync)((0,pa.getBaseSchemaPath)())){for(let r of(0,Cr.readdirSync)((0,pa.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let s=(0,Fe.join)((0,pa.getBaseSchemaPath)(),r.name),n=(0,Fe.join)((0,pa.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,Cr.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,Fe.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Fe.join)(n,i.name);Du((0,Fe.join)(s,i.name),(0,Fe.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let s=t[r],n=s.path;if((0,Cr.existsSync)(n))for(let o of(0,Cr.readdirSync)(n,{withFileTypes:!0}))o.isFile()&&(0,Fe.extname)(o.name).toLowerCase()===".mdb"&&Du((0,Fe.join)(n,o.name),(0,Fe.basename)(o.name,".mdb"),r);let i=s.tables;if(i)for(let o in i){let c=i[o],u=(0,Fe.join)(c.path,(0,Fe.basename)(o+".mdb"));(0,Cr.existsSync)(u)&&Du(u,o,r,null,!0)}}for(let r in qe){let s=Sa.get(r);if(s){let n=qe[r];r.includes("delete")&&Zr.trace(`defined tables ${Array.from(s.keys())}`);for(let i in n)s.has(i)||(Zr.trace(`delete table class ${i}`),delete n[i])}else if(delete qe[r],r==="data"){for(let n in Er)delete Er[n];delete Er[Gf]}}return Sa=null,qe}}function Bee(){Ff=!1;for(let[,e]of ni)e.needsDeletion=!0;hs();for(let[e,t]of ni)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),ni.delete(e));return qe}function Du(e,t,r=DR,s,n){let i=new CR.default(e,!1);try{let o=ni.get(e);o?o.needsDeletion=!1:(o=(0,vf.open)(i),ni.set(e,o));let c=new zi.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(Pf.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(s?(0,Cr.existsSync)(s)&&(i.path=s,_=(0,vf.open)(i),_.isLegacy=!0):_=hl(o));let l=W0(r),d=l[Gf],f=new Map;for(let{key:E,value:h}of u.getRange({start:!1})){let[p,S]=E.toString().split("/");S===""?S=h.name:S||(S=p,p=t,h.name||(h.name=S,h.indexed=!h.is_hash_attribute)),d?.add(p);let A=f.get(p);A||f.set(p,A={attributes:[]}),(S==null||h.is_hash_attribute)&&(A.primary=h),S!=null&&A.attributes.push(h),Object.defineProperty(h,"key",{value:E,configurable:!0})}for(let[E,h]of f){let{attributes:p,primary:S}=h;if(!S){for(let x of p)if(x.is_hash_attribute||x.isPrimaryKey){S=x;break}if(!S){Zr.fatal(`Unable to find a primary key attribute on table ${E}, with attributes: ${JSON.stringify(p)}`);continue}}let A=l[E],I={},N=[],Y,Q,G=typeof S.audit=="boolean"?S.audit:(0,xt.get)(Lr.CONFIG_PARAMS.LOGGING_AUDITLOG),w=S.trackDeletes,K=S.expiration,B=S.eviction;if(A)I=A.indices,N=A.attributes,A.schemaVersion++;else{Y=S.tableId,Y?Y>=(u.get(ma)||0)&&u.putSync(ma,Y+1):(S.tableId=Y=u.get(ma),Y||(Y=1),u.putSync(ma,Y+1),u.putSync(S.key,S));let x=new zi.default(!S.is_hash_attribute,S.is_hash_attribute);Q=Rl(o.openDB(S.key,x)),Q.rootStore=o,Q.tableId=Y}for(let x of p){x.attribute=x.name;try{if(!x.is_hash_attribute&&(x.indexed||x.attribute&&!x.name)){if(!I[x.name]){let be=new zi.default(!x.is_hash_attribute,x.is_hash_attribute);I[x.name]=o.openDB(x.key,be)}let te=N.find(be=>be.name===x.name);te?N.splice(N.indexOf(te),1,x):N.push(x)}}catch(te){Zr.error("Error trying to update attribute",x,N,I,te)}}if(!A){A=Q0(l,E,Mf({primaryStore:Q,auditStore:_,audit:G,expirationMS:K&&K*1e3,evictionMS:B&&B*1e3,trackDeletes:w,tableName:E,tableId:Y,primaryKey:S.name,databasePath:n?r+"/"+E:r,databaseName:r,indices:I,attributes:p,schemaDefined:S.schemaDefined,dbisDB:u})),A.schemaVersion=1;for(let x of UR)x(A)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function W0(e){let t=qe[e];if(t||(e==="data"?t=qe[e]=Er:e==="system"?Object.defineProperty(qe,"system",{value:t=Object.create(null),configurable:!0}):t=qe[e]=Object.create(null)),Sa&&!Sa.has(e)){let r=new Set;t[Gf]=r,Sa.set(e,r)}return t}function Q0(e,t,r){return e[t]=r,r}function mc({database:e,table:t}){e||(e=DR),hs();let r=W0(e),s=(0,Fe.join)((0,xt.getHdbBasePath)(),Lr.DATABASES_DIR_NAME),n=(0,xt.get)(Lr.CONFIG_PARAMS.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(n.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&n[e]?.tables?.[t]?.path;s=i||n[e]?.path||process.env.STORAGE_PATH||(0,xt.get)(Lr.CONFIG_PARAMS.STORAGE_PATH)||((0,Cr.existsSync)(s)?s:(0,Fe.join)((0,xt.getHdbBasePath)(),Lr.LEGACY_DATABASES_DIR_NAME));let o=(0,Fe.join)(s,(i?t:e)+".mdb"),c=ni.get(o);if(!c){let u=new CR.default(o,!1);c=(0,vf.open)(u),ni.set(o,c)}return c}async function Wm(e){if(!qe[e])throw new Error("Schema does not exist");let t=qe[e];for(let r in t){let n=t[r].primaryStore.rootStore;ni.delete(n.path),n.status==="open"&&(await n.close(),await $0.remove(n.path))}if(e==="data"){for(let r in Er)delete Er[r];delete Er[Gf]}delete qe[e]}function et({table:e,database:t,expiration:r,eviction:s,scanInterval:n,attributes:i,audit:o,trackDeletes:c,schemaDefined:u,origin:_}){t||(t=DR);let l=mc({database:t,table:e}),d=qe[t],f=d?.[e];if(l.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let E,h,p,S;u==null&&(u=!0);let A=new zi.default(!1);for(let w of i)w.attribute?(w.name=w.attribute,w.indexed=!0):w.attribute=w.name,w.expiresAt&&(w.indexed=!0);let I,N;if(f){if(E=f.primaryKey,f.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${e} class`);f.attributes.splice(0,f.attributes.length,...i)}else{let w=l.auditStore;w||(w=hl(l)),h=i.find(te=>te.isPrimaryKey)||{},E=h.name,h.is_hash_attribute=!0,h.schemaDefined=u,c&&(h.trackDeletes=!0),o=h.audit=typeof o=="boolean"?o:(0,xt.get)(Lr.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(h.expiration=r),s&&(h.eviction=s),_&&(h.origins?h.origins.includes(_)||h.origins.push(_):h.origins=[_]),Zr.trace(`${e} table loading, opening primary store`);let K=new zi.default(!1,!0),B=e+"/",x=Rl(l.openDB(B,K));x.rootStore=l,S=l.dbisDb=l.openDB(Pf.INTERNAL_DBIS_NAME,A),x.tableId=S.get(ma),x.tableId||(x.tableId=1),S.putSync(ma,x.tableId+1),h.tableId=x.tableId,f=Q0(d,e,Mf({primaryStore:x,auditStore:w,audit:o,trackDeletes:c,expirationMS:r&&r*1e3,evictionMS:s&&s*1e3,primaryKey:E,tableName:e,tableId:x.tableId,databasePath:t,databaseName:t,indices:{},attributes:i,schemaDefined:u,dbisDB:S})),f.schemaVersion=1,I=!0,G(),S.put(B,h)}p=f.indices,S=S||(l.dbisDb=l.openDB(Pf.INTERNAL_DBIS_NAME,A)),f.dbisDB=S;let Y=[];for(let{key:w,value:K}of S.getRange({start:!0})){let[B,x]=w.toString().split("/");if(x===""&&(x=K.name),x){if(B!==e)continue}else x=B;if(!i.find(be=>be.name===x)?.indexed&&K.indexed&&!K.isPrimaryKey){G(),I=!0,S.remove(w);let be=f.indices[B];be&&Y.push(be)}}let Q=[];try{for(let w of i||[]){let K=e+"/"+(w.name||"");Object.defineProperty(w,"key",{value:K,configurable:!0});let B=S.get(K);if(w.isPrimaryKey){if(B=B||S.get(K=e+"/")||{},o!==f.audit||(+r||void 0)!==(+B.expiration||void 0)||(+s||void 0)!==(+B.eviction||void 0)){let te=Object.assign({},B);typeof o=="boolean"&&(o&&f.enableAuditing(o),te.audit=o),r&&(te.expiration=+r),s&&(te.eviction=+s),I=!0,G(),S.put(K,te)}continue}B?.attribute&&!B.name&&(B.indexed=!0);let x=!B||B.type!==w.type||B.indexed!==w.indexed||JSON.stringify(B.attributes)!==JSON.stringify(w.attributes)||JSON.stringify(B.elements)!==JSON.stringify(w.elements);if(w.indexed){let te=new zi.default(!0,!1),be=l.openDB(K,te);(x||B.indexingPID&&B.indexingPID!==process.pid||B.restartNumber<Uu.workerData?.restartNumber)&&(I=!0,G(),B=S.get(K),(x||B.indexingPID&&B.indexingPID!==process.pid||B.restartNumber<Uu.workerData?.restartNumber)&&(I=!0,w.lastIndexedKey=B?.lastIndexedKey||!1,w.indexingPID=process.pid,be.isIndexing=!0,Object.defineProperty(w,"dbi",{value:be}),Q.push(w)),S.put(K,w)),p[w.name]=be}else x&&(I=!0,G(),S.put(K,w))}}finally{N&&N()}if(I&&(f.schemaVersion++,f.updatedAttributes()),Zr.trace(`${e} table loading, running index`),Q.length>0||Y.length>0?f.indexingOperation=Gee(f,Q,Y):I&&Bf.signalSchemaChange(new Hf.SchemaEventMsg(process.pid,"schema-change",f.databaseName,f.tableName)),f.origin=_,I)for(let w of UR)w(f,_!=="cluster");return(r||s||n)&&f.setTTLExpiration({expiration:r,eviction:s,scanInterval:n}),Zr.trace(`${e} table loaded`),f;function G(){N||l.transactionSync(()=>({then(w){N=w}}))}a(G,"startTxn")}async function Gee(e,t,r){try{let s=e.schemaVersion;await Bf.signalSchemaChange(new Hf.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let n;for(let u of r)n=u.drop();let i,o=0,c=t.length;if(await new Promise(u=>setImmediate(u)),c>0){let u=0;for(let{key:_,value:l,version:d}of e.primaryStore.getRange({start:t[0].lastIndexedKey,lazy:c<4,versions:!0,snapshot:!1}))if(l){if(u++,n=e.primaryStore.ifVersion(_,d,()=>{for(let f=0;f<c;f++){let E=t[f],h=E.name,p=(0,Y0.getIndexedValues)(l[h]);if(p)for(let S=0,A=p.length;S<A;S++)E.dbi.put(p[S],_)}}),n.then(()=>u--,f=>{u--,Zr.error(f)}),Uu.workerData&&Uu.workerData.restartNumber!==K0.restartNumber&&(i=!0),++o%100===0||i){for(let f of t)f.lastIndexedKey=_,e.dbisDB.put(f.key,f);if(i)return}u>Hee?await n:u>Fee&&await new Promise(f=>setImmediate(f))}for(let _ of t)delete _.lastIndexedKey,delete _.indexingPID,_.dbi.isIndexing=!1,n=e.dbisDB.put(_.key,_)}await n,await Bf.signalSchemaChange(new Hf.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){Zr.error("Error in indexing",s)}}function qee({table:e,database:t}){let r=mc({database:t,table:e}),s=[],n=r.dbisDb;for(let i of n.getKeys({start:e+"/",end:e+"0"}))s.push(n.remove(i));return Promise.all(s)}function eR(e){UR.push(e)}var xt,Pf,vf,Fe,Cr,pa,zi,CR,Lr,$0,LR,Y0,Bf,Hf,Uu,Zr,K0,DR,Gf,Er,qe,ma,UR,Ff,ni,Sa,Hee,Fee,fe=Te(()=>{xt=D(X()),Pf=D(ze()),vf=require("lmdb"),Fe=require("path"),Cr=require("fs"),pa=D(ve());Xd();zi=D(gl()),CR=D(Ol()),Lr=D(b()),$0=D(require("fs-extra")),LR=require("../index"),Y0=D(fr()),Bf=D(nn()),Hf=D(ds()),Uu=require("worker_threads"),Zr=D(q()),K0=D(Ze());co();qa();DR="data",Gf=Symbol("defined-tables");(0,xt.initSync)();Er=Object.create(null),qe=Object.create(null);(0,LR._assignPackageExport)("databases",qe);(0,LR._assignPackageExport)("tables",Er);ma=Symbol.for("next-table-id"),UR=[],ni=new Map;a(vee,"getTables");a(hs,"getDatabases");a(Bee,"resetDatabases");a(Du,"readMetaDb");a(W0,"ensureDB");a(Q0,"setTable");a(mc,"database");a(Wm,"dropDatabase");a(et,"table");Hee=1e3,Fee=10;a(Gee,"runIndexing");a(qee,"dropTableMeta");a(eR,"onUpdatedTable")});var $=T((qfe,cB)=>{"use strict";var ii=require("path"),Z0=require("fs-extra"),cr=q(),z0=require("fs-extra"),qf=require("os"),xee=require("net"),kee=require("recursive-iterator"),We=b(),Vee=Dg(),J0=require("papaparse"),xf=require("moment"),{inspect:$ee}=require("util"),X0=require("is-number"),Gfe=require("lodash"),Yee=require("minimist"),Kee=require("https"),Wee=require("http"),{hdb_errors:kf}=j(),Qee=/^((\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z)))$/,eB=require("util").promisify(setTimeout),zee=100,Jee=5,Xee="",jee=4,j0={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};cB.exports={isEmpty:Dr,isEmptyOrZeroLength:zs,arrayHasEmptyValues:tte,arrayHasEmptyOrZeroLengthValues:rte,buildFolderPath:ste,isBoolean:tB,errorizeMessage:Zee,stripFileExtension:ite,autoCast:ote,autoCastJSON:rB,autoCastJSONDeep:PR,removeDir:ate,compareVersions:cte,isCompatibleDataVersion:ute,escapeRawValue:lte,unescapeValue:_te,stringifyProps:dte,timeoutPromise:Ete,isClusterOperation:mte,getClusterUser:Ste,checkGlobalSchemaTable:pte,getHomeDir:nB,getPropsFilePath:fte,promisifyPapaParse:Tte,removeBOM:iB,createEventPromise:Rte,checkProcessRunning:gte,checkSchemaTableExist:Ate,checkSchemaExists:oB,checkTableExists:aB,getStartOfTomorrowInSeconds:Ote,getLimitKey:Nte,isObject:nte,isNotEmptyAndHasValue:ete,autoCasterIsNumberCheck:sB,backtickASTSchemaItems:bte,isPortTaken:hte,createForkArgs:yte,autoCastBoolean:Ite,async_set_timeout:eB,getTableHashAttribute:wte,doesSchemaExist:Cte,doesTableExist:Lte,stringifyObj:Dte,ms_to_time:Ute,changeExtension:Mte,getEnvCliRootPath:vR,noBootFile:Pte,httpRequest:vte,transformReq:Bte,convertToMS:Hte,PACKAGE_ROOT:We.PACKAGE_ROOT};function Zee(e){return e instanceof Error?e:new Error(e)}a(Zee,"errorizeMessage");function Dr(e){return e==null}a(Dr,"isEmpty");function ete(e){return!Dr(e)&&(e||e===0||e===""||tB(e))}a(ete,"isNotEmptyAndHasValue");function zs(e){return Dr(e)||e.length===0||e.size===0}a(zs,"isEmptyOrZeroLength");function tte(e){if(Dr(e))return!0;for(let t=0;t<e.length;t++)if(Dr(e[t]))return!0;return!1}a(tte,"arrayHasEmptyValues");function rte(e){if(zs(e))return!0;for(let t=0;t<e.length;t++)if(zs(e[t]))return!0;return!1}a(rte,"arrayHasEmptyOrZeroLengthValues");function ste(...e){try{return e.join(ii.sep)}catch{console.error(e)}}a(ste,"buildFolderPath");function tB(e){return Dr(e)?!1:e===!0||e===!1}a(tB,"isBoolean");function nte(e){return Dr(e)?!1:typeof e=="object"}a(nte,"isObject");function ite(e){return zs(e)?Xee:e.slice(0,-jee)}a(ite,"stripFileExtension");function ote(e){return Dr(e)||e===""||typeof e!="string"?e:j0[e]!==void 0?j0[e]:sB(e)===!0?Number(e):Qee.test(e)?new Date(e):e}a(ote,"autoCast");function rB(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(rB,"autoCastJSON");function PR(e){if(e&&typeof e=="object"){if(Array.isArray(e))for(let t=0,r=e.length;t<r;t++){let s=e[t],n=PR(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=PR(r);s!==r&&(e[t]=s)}return e}else return rB(e)}a(PR,"autoCastJSONDeep");function sB(e){if(e.startsWith("0.")&&X0(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&X0(e))}a(sB,"autoCasterIsNumberCheck");async function ate(e){if(zs(e))throw new Error(`Directory path: ${e} does not exist`);try{await z0.emptyDir(e),await z0.remove(e)}catch(t){throw cr.error(`Error removing files in ${e} -- ${t}`),t}}a(ate,"removeDir");function cte(e,t){if(zs(e)){cr.info("Invalid current version sent as parameter.");return}if(zs(t)){cr.info("Invalid upgrade version sent as parameter.");return}let r,s=/(\.0+)+$/,n=e.version?e.version:e,i=t.version?t.version:t,o=n.replace(s,"").split("."),c=i.replace(s,"").split("."),u=Math.min(o.length,c.length);for(let _=0;_<u;_++)if(r=parseInt(o[_],10)-parseInt(c[_],10),r)return r;return o.length-c.length}a(cte,"compareVersions");function ute(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(ute,"isCompatibleDataVersion");function lte(e){if(Dr(e))return e;let t=String(e);return t==="."?We.UNICODE_PERIOD:t===".."?We.UNICODE_PERIOD+We.UNICODE_PERIOD:t.replace(We.FORWARD_SLASH_REGEX,We.UNICODE_FORWARD_SLASH)}a(lte,"escapeRawValue");function _te(e){if(Dr(e))return e;let t=String(e);return t===We.UNICODE_PERIOD?".":t===We.UNICODE_PERIOD+We.UNICODE_PERIOD?"..":String(e).replace(We.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(_te,"unescapeValue");function dte(e,t){if(Dr(e))return cr.info("Properties object is null"),"";let r="";return e.each(function(s,n){try{if(t&&t[s]){let i=t[s];for(let o of i)r+=";"+o+qf.EOL}!zs(s)&&s[0]===";"?r+=" "+s+n+qf.EOL:zs(s)||(r+=s+"="+n+qf.EOL)}catch{cr.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(dte,"stringifyProps");function nB(){let e;try{e=qf.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(nB,"getHomeDir");function fte(){let e=ii.join(nB(),We.HDB_HOME_DIR_NAME,We.BOOT_PROPS_FILE_NAME);return Z0.existsSync(e)||(e=ii.join(__dirname,"../","hdb_boot_properties.file")),e}a(fte,"getPropsFilePath");function Ete(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(Ete,"timeoutPromise");async function hte(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=xee.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(hte,"isPortTaken");function mte(e){try{return We.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){cr.error(`Error checking operation against cluster ops ${t}`)}return!1}a(mte,"isClusterOperation");function pte(e,t){let r=(fe(),Z(Ce)).getDatabases();if(!r[e])return kf.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return kf.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(pte,"checkGlobalSchemaTable");function Ste(e,t){if(Dr(t)){cr.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Dr(e)||zs(e)){cr.warn("No users to search.");return}let r;try{let s=e.get(t);s&&s.role.permission.cluster_user===!0&&s.active===!0&&(r=s)}catch(s){cr.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){cr.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(Ste,"getClusterUser");function Tte(){J0.parsePromise=function(e,t,r){return new Promise(function(s,n){J0.parse(e,{header:!0,transformHeader:iB,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}a(Tte,"promisifyPapaParse");function iB(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(iB,"removeBOM");function Rte(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;cr.info(`Got cluster status event response: ${$ee(n)}`);try{i.cancel()}catch{cr.error("Error trying to cancel timeout.")}s(n)})})}a(Rte,"createEventPromise");async function gte(e){let t=!0,r=0;do await eB(zee*r++),(await Vee.findPs(e)).length>0&&(t=!1);while(t&&r<Jee);if(t)throw new Error(`process ${e} was not started`)}a(gte,"checkProcessRunning");function Ate(e,t){let r=oB(e);if(r)return r;let s=aB(e,t);if(s)return s}a(Ate,"checkSchemaTableExist");function oB(e){let{getDatabases:t}=(fe(),Z(Ce));if(!t()[e])return kf.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(oB,"checkSchemaExists");function aB(e,t){let{getDatabases:r}=(fe(),Z(Ce));if(!r()[e][t])return kf.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(aB,"checkTableExists");function Ote(){let e=xf().utc().add(1,We.MOMENT_DAYS_TAG).startOf(We.MOMENT_DAYS_TAG).unix(),t=xf().utc().unix();return e-t}a(Ote,"getStartOfTomorrowInSeconds");function Nte(){return xf().utc().format("DD-MM-YYYY")}a(Nte,"getLimitKey");function bte(e){try{let t=new kee(e);for(let{node:r}of t)r&&(r.columnid&&typeof r.columnid!="string"&&(r.columnid=r.columnid.toString()),r.columnid&&!r.columnid.startsWith("`")&&(r.columnid_orig=r.columnid,r.columnid=`\`${r.columnid}\``),r.tableid&&!r.tableid.startsWith("`")&&(r.tableid_orig=r.tableid,r.tableid=`\`${r.tableid}\``),r.databaseid&&!r.databaseid.startsWith("`")&&(r.databaseid_orig=r.databaseid,r.databaseid=`\`${r.databaseid}\``),r.as&&typeof r.as=="string"&&!r.as.startsWith("[")&&(r.as_orig=r.as,r.as=`\`${r.as}\``))}catch(t){cr.error("Got an error back ticking items."),cr.error(t)}}a(bte,"backtickASTSchemaItems");function yte(e){return[e]}a(yte,"createForkArgs");function Ite(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(Ite,"autoCastBoolean");function wte(e,t){let{getDatabases:r}=(fe(),Z(Ce)),s=r()[e]?.[t];return s?.primaryKey||s?.hash_attribute}a(wte,"getTableHashAttribute");function Cte(e){let{getDatabases:t}=(fe(),Z(Ce));return t()[e]!==void 0}a(Cte,"doesSchemaExist");function Lte(e,t){let{getDatabases:r}=(fe(),Z(Ce));return r()[e]?.[t]!==void 0}a(Lte,"doesTableExist");function Dte(e){try{return JSON.stringify(e)}catch{return e}}a(Dte,"stringifyObj");function Ute(e){let t=xf.duration(e),r=t.seconds()>0?t.seconds()+"s":"",s=t.minutes()>0?t.minutes()+"m ":"",n=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+n+s+r}a(Ute,"ms_to_time");function Mte(e,t){let r=ii.basename(e,ii.extname(e));return ii.join(ii.dirname(e),r+t)}a(Mte,"changeExtension");function vR(){if(process.env[We.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[We.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=Yee(process.argv);if(e[We.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[We.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(vR,"getEnvCliRootPath");var MR;function Pte(){if(MR)return MR;let e=vR();vR()&&Z0.pathExistsSync(ii.join(e,We.HDB_CONFIG_FILE))&&(MR=!0)}a(Pte,"noBootFile");function vte(e,t){let r;return e.protocol==="http:"?r=Wee:r=Kee,new Promise((s,n)=>{let i=r.request(e,o=>{o.setEncoding("utf8");let c={body:"",headers:o.headers};o.on("data",u=>{c.body+=u}),o.on("end",()=>{s(c)})});i.on("error",o=>{n(o)}),i.write(JSON.stringify(t)),i.end()})}a(vte,"httpRequest");function Bte(e){if(!e.schema&&!e.database){e.schema=We.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(Bte,"transformReq");function Hte(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(Hte,"convertToMS")});var X=T((kfe,_B)=>{"use strict";var BR=require("fs-extra"),Ns=require("path"),uB=require("os"),Fte=require("properties-reader"),Mu=q(),Ji=$(),ee=b(),Vf=Tr(),Gte="Error initializing environment manager",$f="BOOT_PROPS_FILE_PATH",lB=!1,qte={[ee.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},yn={};_B.exports={BOOT_PROPS_FILE_PATH:$f,getHdbBasePath:xte,setHdbBasePath:kte,get:Vte,initSync:Yte,setProperty:he,initTestEnvironment:Kte};function xte(){return yn[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(xte,"getHdbBasePath");function kte(e){yn[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(kte,"setHdbBasePath");function Vte(e){let t=Vf.getConfigValue(e);return t===void 0?yn[e]:t}a(Vte,"get");function he(e,t){qte[e]&&(yn[e]=t),Vf.updateConfigObject(e,t)}a(he,"setProperty");function $te(){let e;try{e=Ji.getPropsFilePath(),BR.accessSync(e,BR.constants.F_OK|BR.constants.R_OK),lB=!0;let t=Fte(e);return yn[ee.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(ee.HDB_SETTINGS_NAMES.INSTALL_USER),yn[ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),yn[$f]=e,!0}catch{return Mu.trace(`Environment manager found no properties file at ${e}`),!1}}a($te,"doesPropFileExist");function Yte(e=!1){try{(lB||$te()||Ji.noBootFile())&&(Vf.initConfig(e),yn[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Vf.getConfigValue(ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Mu.error(Gte),Mu.error(t),console.error(t),process.exit(1)}}a(Yte,"initSync");function Kte(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,u=Ns.join(__dirname,"../../","unitTests");yn[$f]=Ns.join(u,"hdb_boot_properties.file"),he(ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Ns.join(u,"settings.test")),he(ee.HDB_SETTINGS_NAMES.INSTALL_USER,uB.userInfo()?uB.userInfo().username:void 0),he(ee.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,Ns.join(u,"envDir","utility","keys","privateKey.pem")),he(ee.HDB_SETTINGS_NAMES.CERT_KEY,Ns.join(u,"envDir","utility","keys","certificate.pem")),he(ee.CONFIG_PARAMS.TLS_PRIVATEKEY,Ns.join(u,"envDir","utility","keys","privateKey.pem")),he(ee.CONFIG_PARAMS.TLS_CERTIFICATE,Ns.join(u,"envDir","utility","keys","certificate.pem")),he(ee.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),he(ee.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Ns.join(u,"envDir","log")),he(ee.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),he(ee.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),he(ee.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),he(ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Ns.join(u,"envDir")),he(ee.CONFIG_PARAMS.STORAGE_PATH,Ns.join(u,"envDir")),he(ee.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,Ji.isEmpty(n)?!0:n),he(ee.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,Ji.isEmpty(n)?!0:n),he(ee.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),he(ee.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Ji.isEmpty(i)?!1:i),he(ee.CONFIG_PARAMS.HTTP_CORS,Ji.isEmpty(i)?!1:i),he(ee.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),he(ee.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),he(ee.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),he(ee.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),he(ee.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Ns.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),he(ee.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Ji.isEmpty(c)?!1:c),o&&(he("CORS_ACCESSLIST",o),he(ee.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),s&&(he(ee.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),he(ee.CONFIG_PARAMS.HTTP_TIMEOUT,s)),t&&(he(ee.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),he(ee.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(he(ee.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),he(ee.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${$f}. Please check your boot props and settings files`;Mu.fatal(r),Mu.error(t)}}a(Kte,"initTestEnvironment")});var dt=T((Qfe,DB)=>{"use strict";var Ut=X();Ut.initSync();var Wte=require("fs-extra"),Qte=require("semver"),Bu=require("path"),{monotonicFactory:zte}=require("ulidx"),fB=zte(),Jte=require("util"),EB=require("child_process"),Xte=Jte.promisify(EB.exec),jte=EB.spawn,ge=ke(),Oe=b(),qR=$(),Ur=q(),Yf=rn(),Zte=p_(),Pu=Tr(),{onMessageByType:ere}=Ze(),{isMainThread:tre}=require("worker_threads"),{Encoder:rre,decode:xR}=require("msgpackr"),hB=new rre,{isEmpty:eo}=qR,mB=kr(),sre=48*36e11,nre=5e9;tre&&ere(Oe.ITC_EVENT_TYPES.RESTART,()=>{es=void 0,Zi=void 0});var{connect:ire,StorageType:pB,RetentionPolicy:SB,AckPolicy:Kf,DeliverPolicy:Wf,DiscardPolicy:ore,NatsConnection:$fe,JetStreamManager:Yfe,JetStreamClient:Kfe,StringCodec:Wfe,JSONCodec:are,createInbox:kR,headers:cre,ErrorCode:dB}=require("nats"),{PACKAGE_ROOT:ure}=b(),lre=bc(),{recordAction:_re}=(ti(),Z(Hd)),TB=are(),dre="clustering",fre=lre.engines[ge.NATS_SERVER_NAME],Ere=Bu.join(ure,"dependencies"),GR=Bu.join(Ere,`${process.platform}-${process.arch}`,ge.NATS_BINARY_NAME),HR,FR,vu,Xi,ji;DB.exports={runCommand:RB,checkNATSServerInstalled:hre,createConnection:VR,getConnection:Qf,getJetStreamManager:Hu,getJetStream:AB,getNATSReferences:ur,getServerList:pre,createLocalStream:$R,listStreams:OB,deleteLocalStream:Sre,getServerConfig:Fu,listRemoteStreams:Tre,viewStream:Rre,viewStreamIterator:gre,publishToStream:Are,createWorkQueueStream:Ore,addSourceToWorkStream:bB,request:bre,removeSourceFromWorkStream:IB,reloadNATS:YR,reloadNATSHub:yre,reloadNATSLeaf:Ire,extractServerName:yB,requestErrorHandler:wre,updateWorkStream:Cre,createLocalTableStream:CB,createTableStreams:Lre,purgeTableStream:LB,purgeSchemaTableStreams:Dre,getStreamInfo:Ure,updateLocalStreams:Pre,closeConnection:mre,getJsmServerName:Gu,addNatsMsgHeader:NB,updateIngestStreamConsumer:Nre,clearClientCache:gB};async function RB(e,t=void 0){let{stdout:r,stderr:s}=await Xte(e,{cwd:t});if(s)throw new Error(s.replace(`
|
|
23
|
+
`},compressible:!1,q:.8});Vt.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()}});uP={type:"application/json",serializeStream:_c,serialize:vu,deserialize:K6,q:.8};Vt.set("*/*",uP);Vt.set("",uP);a(K6,"tryJSONParse");a(QT,"registerContentHandlers");W6=require("fastify-plugin"),Q6=W6(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=af(n.raw);s.type(c),s.serializer(o.serializeStream||o.serialize)}),r()},{name:"content-type-negotiation"});a(af,"findBestSerializer");iP=$T.default.get(YT.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(cf,"serialize");a(Ei,"serializeMessage");a(z6,"streamToBuffer");a(co,"getDeserializer");a(oP,"deserializerUnknownType");a(J6,"transformIterable")});var qu={};Ve(qu,{addAnalyticsListener:()=>Fu,recordAction:()=>kr,recordActionBinary:()=>ln,setAnalyticsEnabled:()=>X6});function X6(e){gP=e}function kr(e,t,r,n,s){if(!gP)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=_f.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},_f.set(i,o)}uf||j6()}function ln(e,t,r,n,s){kr(!!e,t,r,n,s)}function Fu(e){OP.push(e)}function j6(){uf=performance.now(),setTimeout(async()=>{let e=performance.now()-uf;uf=0;let t=[],r={time:Date.now(),period:e,threadId:uo.threadId,metrics:t};for(let[s,i]of _f){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 bP){let f=Math.floor(c*d),E=o[f-1];if(f>u){let h=f-u;if(E===l){let p=_[_.length-1];typeof p=="number"?_[_.length-1]={value:p,count:1+h}:p.count+=h}else _.push(h>1?{value:E,count:h}:E),l=E;u=f}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:_,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await NP()}let n=process.memoryUsage();t.push({metric:"memory",threadId:uo.threadId,byThread:!0,...n});for(let s of OP)s(t);_f=new Map,uo.parentPort?uo.parentPort.postMessage({type:AP,report:r}):wP({report:r})},RP).unref()}async function Z6(e,t=6e4){let r=XT(),n=yP(),s;for(let h of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(h.value?.time){s=h.value.time;break}if(Date.now()-t<s)return;let i,o=new Map,c=new Map,u=[],_;for(let{key:h,value:p}of r.primaryStore.getRange({start:s||!1,exclusiveStart:!0,end:1/0})){if(!p)continue;if(i){if(h>i+t)break}else i=h;_=h;let{metrics:S,threadId:A}=p;for(let I of S||[]){let{path:w,method:B,type:K,metric:F,count:P,total:Q,distribution:Y,threads:z,...re}=I;P||(P=1);let Ie=F+(w?"-"+w:"");B!==void 0&&(Ie+="-"+B),K!==void 0&&(Ie+="-"+K);let ne=o.get(Ie);if(ne){if(ne.threads){let de=ne.threads[A];if(de)ne=de;else{ne.threads[A]=Object.assign({},re);continue}}ne.count||(ne.count=1);let ct=ne.count;for(let de in re){let ut=re[de];typeof ut=="number"&&(ne[de]=(ne[de]*ct+ut*P)/(ct+P))}ne.count+=P,Q>=0&&(ne.total+=Q,ne.ratio=ne.total/ne.count)}else ne=Object.assign({period:t},I),delete ne.distribution,o.set(Ie,ne),ne.byThread&&(ne.threads=[],ne.threads[A]=Object.assign({},re),u.push(ne));if(Y){Y=Y.map(de=>typeof de=="number"?{value:de,count:1}:de);let ct=c.get(Ie);ct?ct.push(...Y):c.set(Ie,Y)}}await NP()}for(let h of u){let{path:p,method:S,type:A,metric:I,count:w,total:B,distribution:K,threads:F,...P}=h;F=F.filter(Q=>Q);for(let Q in P){if(typeof h[Q]!="number")continue;let Y=0;for(let z of F){let re=z[Q];typeof re=="number"&&(Y+=re)}h[Q]=Y}h.count=F.length,delete h.threads,delete h.byThread}for(let[h,p]of c){let S=o.get(h);p.sort((de,ut)=>de.value>ut.value?1:-1);let A=S.count-1,I=[],w=0,B=0,K;for(let de of bP){let ut=A*de;for(;w<ut;)K=p[B++],w+=K.count,B===1&&w--;let Tn=p[B>1?B-2:0];K||(K=p[0]),I.push(K.value-(K.value-Tn.value)*(w-ut)/K.count)}let[F,P,Q,Y,z,re,Ie,ne,ct]=I;Object.assign(S,{p1:F,p10:P,p25:Q,median:Y,p75:z,p90:re,p95:Ie,p99:ne,p999:ct})}let l;for(let[h,p]of o)p.id=(0,lf.getNextMonotonicTime)(),p.time=_,n.primaryStore.put(p.id,p,{append:!0}).then(S=>{S||n.primaryStore.put(p.id,p)}),l=!0;let d=Date.now(),{idle:f,active:E}=performance.eventLoopUtilization();if(l||E*10>f){let h=(0,lf.getNextMonotonicTime)(),p={id:h,metric:"main-thread-utilization",idle:f-_P,active:E-dP,time:d,...process.memoryUsage()};n.primaryStore.put(h,p,{append:!0}).then(S=>{S||n.primaryStore.put(h,p)})}_P=f,dP=E}async function fP(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function XT(){return EP||(EP=_t({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function yP(){return hP||(hP=_t({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function r9(){IP=!0;let e=(0,xu.get)(JT.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await Z6(RP,e),await fP(XT(),e9),await fP(yP(),t9)},Math.min(e/2,2147483647)).unref()}function wP(e,t){let r=e.report;r.threadId=t?.threadId||uo.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(mP+=n.mean*n.count);r.totalBytesProcessed=mP,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(pP.get(t))}),pP.set(t,t.performance.eventLoopUtilization())),r.id=(0,lf.getNextMonotonicTime)(),XT().primaryStore.put(r.id,r),IP||r9(),n9&&(CP=i9(r))}async function i9(e){if(await CP,!pi){let r=(0,Hu.dirname)((0,TP.getLogFilePath)());try{pi=await(0,zT.open)((0,Hu.join)(r,"analytics.log"),"r+")}catch{pi=await(0,zT.open)((0,Hu.join)(r,"analytics.log"),"w+")}}let t=(await pi.stat()).size;if(t>s9){let r=Buffer.alloc(t);await pi.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await pi.write(r,{position:0}),await pi.truncate(r.length),t=r.length}await pi.write(JSON.stringify(e)+`
|
|
24
|
+
`,t)}var uo,SP,TP,Hu,zT,lf,xu,JT,_f,gP,uf,RP,AP,OP,bP,_P,dP,NP,e9,t9,EP,hP,IP,mP,pP,n9,CP,pi,s9,Us=Ae(()=>{uo=require("worker_threads"),SP=v(et());ge();TP=v(V()),Hu=require("path"),zT=require("fs/promises"),lf=v(wr()),xu=v(j()),JT=v(M());nr();(0,xu.initSync)();_f=new Map,gP=(0,xu.get)(JT.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(X6,"setAnalyticsEnabled");a(kr,"recordAction");lt.recordAnalytics=kr;a(ln,"recordActionBinary");uf=0,RP=1e3,AP="analytics-report",OP=[];a(Fu,"addAnalyticsListener");bP=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(j6,"sendAnalytics");a(Z6,"aggregation");_P=0,dP=0,NP=a(()=>new Promise(setImmediate),"rest");a(fP,"cleanup");e9=36e5,t9=31536e6;a(XT,"getRawAnalyticsTable");a(yP,"getAnalyticsTable");(0,SP.setChildListenerByType)(AP,wP);a(r9,"startScheduledTasks");mP=0,pP=new Map,n9=!1;a(wP,"recordAnalytics");s9=1e6;a(i9,"logAnalytics")});function Vu(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 A=o[0],I=Ps(n.attributes,A);if(I.relationship){if(o.length<2)throw new lo.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let w=I.definition?.tableClass||I.elements?.definition?.tableClass,B=new Map,K=Vu({attribute:o.length>2?o.slice(1):o[1],value:c,comparator:u},t,r,w,s,B);if(I.relationship.to){i[o[0]]=B;let F=!!Ps(w.attributes,I.relationship.to)?.elements;K=u9(K,I,w.primaryStore,F,B)}if(I.relationship.from){let F=a(P=>Vu({attribute:I.relationship.from,value:P},t,r,n,s,B),"searchEntry");I.elements?(i[o[0]]=B,K=l9(K,I,w.primaryStore,B,F)):K=K.flatMap(F)}return K}else if(o.length===1)o=o[0];else throw new lo.ClientError("Unable to query by attribute "+JSON.stringify(o))}let _,l,d,f;c instanceof Date&&(c=c.getTime());let E;switch(DP[u]||u){case"lt":_=!0,l=c;break;case"le":_=!0,l=c,d=!0;break;case"gt":_=c,f=!0;break;case"ge":_=c;break;case"prefix":Array.isArray(c)?c[c.length-1]!=null&&(c=c.concat(null)):c=[c,null],_=c,l=c.slice(0),l[l.length-1]=as.MAXIMUM_KEY;break;case"starts_with":_=c.toString(),l=c+"\uFFFF";break;case"between":_=c[0],_ instanceof Date&&(_=_.getTime()),l=c[1],l instanceof Date&&(l=l.getTime()),d=!0;break;case ze.SEARCH_TYPES.EQUALS:case void 0:_=c,l=c,d=!0;break;case"ne":if(c===null){_=c,f=!0;break}case"contains":case"ends_with":E=!0;break;default:throw new lo.ClientError(`Unknown query comparator "${u}"`)}if(r){let A=_;_=l,l=A,A=!f,f=!d,d=A}let h=o===n.primaryKey||o==null,p=h?n.primaryStore:n.indices[o];if(!p||p.isIndexing||E||c===null&&!p.indexNulls){if(!s)throw new lo.ClientError(`"${o}" is not indexed${c===null&&!p.indexNulls?" for nulls, index needs to be rebuilt to search for nulls":p?.isIndexing?" yet":""}, can not search for this attribute`,404);let A=$u(e);if(!A)throw new lo.ClientError(`Unknown search operator ${e.comparator}`);return n.primaryStore.getRange({start:!0,transaction:t,reverse:r}).map(({key:I,value:w})=>new Promise((B,K)=>setImmediate(()=>{try{B(w&&A(w)?I:jT.SKIP)}catch(F){K(F)}})))}let S={start:_,end:l,inclusiveEnd:d,exclusiveStart:f,values:!0,versions:h,transaction:t,reverse:r};if(h){let A=p.getRange(S).map(I=>I.value==null?jT.SKIP:I);return A.hasEntries=!0,A}else return p.getRange(S).map(({value:A})=>A)}function Ps(e,t){if(Array.isArray(t))if(t.length>1){let r=Ps(e,t[0]),n=(r?.definition?.tableClass||r?.elements.definition?.tableClass)?.attributes;return n?Ps(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 u9(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i,o;return{next(){if(!i){let u=t.relationship.to;return(async()=>{let _=a((d,f)=>{let E=d;Array.isArray(d)&&(E=Ti(d),o=!0);let h=s.get(E);h?h.push(f):s.set(E,h=[f]),d!==E&&(h.key=d)},"add_entry"),l=0;for await(let d of e){let f=d.value??r.get(d.key??d),E=f?.[u];if(E!=null&&!s.filters?.some(h=>!h(f))){if(n)for(let h=0;h<E.length;h++)_(E[h],d);else _(E,d);l++>100&&(await new Promise(setImmediate),l=0)}}return i=(o?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 l9(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i,o;return{next(){let c;if(o&&(c=o.next(),!c.done))return c;if(!i)return(async()=>{let u=new Map;n.fromRecord=l=>l[t.relationship.from]?.filter?.(d=>u.has(Ti(d)));let _=0;for await(let l of e){if(n.filters){let d=r.get(l);if(n.filters.some(f=>!f(d)))continue}u.set(Ti(l),l),_++>100&&(await new Promise(setImmediate),_=0)}return i=u.values()[Symbol.iterator](),this.next()})();do{let u=i.next();return u.done?u:(o=s(u.value)[Symbol.iterator](),this.next())}while(!0)},return(){return o?.return?.()},throw(){return o?.throw?.()}}}})}function $u(e,t,r,n){if(e.conditions){let c=e.conditions.map($u);return e.operator==="or"?u=>c.some(_=>_(u)):u=>c.every(_=>_(u))}let s=e.comparator,i=e[0]??e.attribute,o=e[1]??e.value;if(Array.isArray(i)){if(i.length===0)return()=>!0;if(i.length===1)i=i[0];else if(i.length>1){let c=i[0],u=Ps(t.attributes,c),_=u.definition?.tableClass||u.elements.definition?.tableClass,l=n?.[c],d=$u({attribute:i.length>2?i.slice(1):i[1],value:o,comparator:s},t,r,l?.[c]?.joined);if(!d)return;if(l){l.filters||(l.filters=[]),l.filters.push(d);return}let f=t.propertyResolvers?.[c];return(E,h)=>{let p,S;return f?(S=f(E,r,h),p=S?.value):p=E[c],p?Array.isArray(p)?p.some(d):d(p,S):!1}}}switch(o instanceof Date&&(o=o.getTime()),DP[s]||s){case ze.SEARCH_TYPES.EQUALS:case void 0:return os(i,c=>c===o);case ze.SEARCH_TYPES.CONTAINS:return os(i,c=>c?.toString().includes(o));case ze.SEARCH_TYPES.ENDS_WITH:case ze.SEARCH_TYPES._ENDS_WITH:return os(i,c=>c?.toString().endsWith(o));case ze.SEARCH_TYPES.STARTS_WITH:case ze.SEARCH_TYPES._STARTS_WITH:return os(i,c=>typeof c=="string"&&c.startsWith(o));case ze.SEARCH_TYPES.BETWEEN:return o[0]instanceof Date&&(o[0]=o[0].getTime()),o[1]instanceof Date&&(o[1]=o[1].getTime()),os(i,c=>(0,as.compareKeys)(c,o[0])>=0&&(0,as.compareKeys)(c,o[1])<=0);case"gt":case ze.SEARCH_TYPES.GREATER_THAN:case ze.SEARCH_TYPES._GREATER_THAN:return os(i,c=>(0,as.compareKeys)(c,o)>0);case"ge":case ze.SEARCH_TYPES.GREATER_THAN_EQUAL:case ze.SEARCH_TYPES._GREATER_THAN_EQUAL:return os(i,c=>(0,as.compareKeys)(c,o)>=0);case ze.SEARCH_TYPES.LESS_THAN:case"lt":case ze.SEARCH_TYPES._LESS_THAN:return os(i,c=>(0,as.compareKeys)(c,o)<0);case"le":case ze.SEARCH_TYPES.LESS_THAN_EQUAL:case ze.SEARCH_TYPES._LESS_THAN_EQUAL:return os(i,c=>(0,as.compareKeys)(c,o)<=0);case"ne":return os(i,c=>(0,as.compareKeys)(c,o)!==0);default:throw new lo.ClientError(`Unknown query comparator "${s}"`)}}function os(e,t){return r=>{let n=r[e];return typeof n!="object"||!n?t(n):Array.isArray(n)?n.some(t):n instanceof Date?t(n.getTime()):!1}}function ZT(e){return t=>{if(t.estimated_count===void 0){if(t.conditions){let n;if(t.operator==="or"){n=0;for(let s of t.conditions)n+=s.estimated_count}else{n=1/0;for(let s of t.conditions)n=1/(1/n+1/s.estimated_count)}return t.estimated_count=n,t.estimated_count}let r=t.comparator||t.search_type;if(r===ze.SEARCH_TYPES.EQUALS){let n=t[0]??t.attribute;if(n==null||n===e.primaryKey)t.estimated_count=1;else if(Array.isArray(n)){let s=Ps(e.attributes,n[0]),i=s.definition?.tableClass||s.elements.definition?.tableClass,o=ZT(i)({value:t.value,attribute:n.length>2?n.slice(1):n[1],comparator:"equals"});t.estimated_count=o*4*(e.indices[s.relationship.from]||e.primaryStore).getStats().entryCount/(i.primaryStore.getStats().entryCount||1)}else{let s=e.indices[n];t.estimated_count=s?s.getValuesCount(t[1]??t.value):1/0}}else r===ze.SEARCH_TYPES.CONTAINS||r===ze.SEARCH_TYPES.ENDS_WITH||r==="ne"?t.value===null&&r==="ne"?t.estimated_count=LP:t.estimated_count=1/0:r===ze.SEARCH_TYPES.STARTS_WITH||r==="prefix"?t.estimated_count=LP:r===ze.SEARCH_TYPES.BETWEEN?t.estimated_count=a9:t.estimated_count=o9;typeof t.descending=="boolean"&&(t.estimated_count/=4)}return t.estimated_count}}function df(e){if(e)if(Si=e,ba.lastIndex=0,_9.test(e))try{let t=Gu(new Na,"");if(Tr!==Si.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 ${Tr} in '${Si}'`,t}else{let t=new URLSearchParams(e);return t.conditions=t,t}}function Gu(e,t){let r=ba,n,s,i,o,c;for(;n=r.exec(Si);){Tr=r.lastIndex;let[,u,_]=n;if(o){if(u)throw new SyntaxError(`expected operator, but encountered '${u}'`);o=!1,c=!1}else c=!0;let l;switch(_){case"=":if(s)if(u.length<=2)i=u;else throw new SyntaxError(`invalid FIQL operator ${u}`);else{if(i="equals",!u)throw new SyntaxError("attribute must be specified before equality comparator");s=ku(u)}break;case"!=":case"<":case"<=":case">":case">=":if(i=c9[_],!u)throw new SyntaxError(`attribute must be specified before comparator ${_}`);s=ku(u);break;case"|":e.operator="or";case"":case void 0:case"&":if(s==null){if(s===void 0)throw t?new SyntaxError(`expected '${t}', but encountered ${_[0]?"'"+_[0]+"'":"end of string"}}`):new SyntaxError(`no comparison specified before ${_?"'"+_+"'":"end of string"}`)}else{if(!e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");e.conditions.push({comparator:i,attribute:s,value:decodeURIComponent(u)})}s=void 0;break;case",":if(e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");e.push(ku(u)),s=void 0;break;case"(":ba.lastIndex=Tr;let d=Gu(u?[]:new Na,")");switch(u){case"":e.conditions.push(d);break;case"limit":switch(d.length){case 1:e.limit=+d[0];break;case 2:e.offset=+d[0],e.limit=d[1]-e.offset;break;default:throw new SyntaxError("limit must have 1 or 2 arguments")}break;case"select":Array.isArray(d[0])&&d.length===1&&!d[0].name?(e.select=d[0],e.select.asArray=!0):d.length===1?e.select=d[0]:d.length===2&&d[1]===""?e.select=d.slice(0,1):e.select=d;break;case"group-by":throw new SyntaxError("group by is not implemented yet");case"sort":e.sort=MP(d);break;default:throw new SyntaxError(`unknown query function call ${u}`)}Si[Tr]===","?r.lastIndex=++Tr:o=!0,s=null;break;case"{":if(e.conditions)throw new SyntaxError("property sets are not allowed in a queries");if(!u)throw new SyntaxError("property sets must have a defined parent property name");ba.lastIndex=Tr,l=Gu([],"}"),l.name=u,e.push(l),Si[Tr]===","?r.lastIndex=++Tr:o=!0;break;case"[":ba.lastIndex=Tr,u?(l=Gu(new Na,"]"),l.name=u):l=Gu(e.conditions?new Na:[],"]"),e.conditions?(e.conditions.push(l),s=null):e.push(l),Si[Tr]===","?r.lastIndex=++Tr:o=!0;break;case")":case"]":case"}":if(t===_[0]){if(e.conditions){if(s)e.conditions.push({comparator:i||"equals",attribute:s,value:decodeURIComponent(u)});else if(u)throw new SyntaxError("no attribute or comparison specified")}else(u||e.length>0&&c)&&e.push(ku(u));return e}else throw t?new SyntaxError(`expected '${t}', but encountered '${_[0]}'`):new SyntaxError(`unexpected token '${_[0]}'`);default:throw new SyntaxError(`unexpected operator '${_}'`)}if(t!==")"&&(r=s?d9:ba,r.lastIndex=Tr),Tr===Si.length)return e}if(t)throw new SyntaxError(`expected '${t}', but encountered end of string`)}function ku(e){return e.indexOf(".")>-1?e.split(".").map(ku):decodeURIComponent(e)}function MP(e){let t=UP(e[0]);return e.length>1&&(t.next=MP(e.slice(1))),t}function UP(e){if(Array.isArray(e)){let t=UP(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 Ti(e){return Array.isArray(e)?e.join("\0"):e}var lo,ze,as,jT,o9,a9,LP,c9,DP,_9,ba,d9,Tr,Si,Na,ff=Ae(()=>{lo=v(Z()),ze=v(ht()),as=require("ordered-binary"),jT=require("lmdb"),o9=1e8,a9=15e6,LP=1e7,c9={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne"};a(Vu,"searchByIndex");a(Ps,"findAttribute");a(u9,"joinTo");a(l9,"joinFrom");DP={greater_than:"gt",greater_than_equal:"ge",less_than:"lt",less_than_equal:"le",not_equal:"ne",equal:"equals",sw:"starts_with",ew:"ends_with",ct:"contains",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a($u,"filterByType");a(os,"attributeComparator");a(ZT,"estimateCondition");_9=/[()[\]|!<>.]|(=\w+=)/,ba=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,d9=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;a(df,"parseQuery");a(Gu,"parseBlock");a(ku,"decodeProperty");a(MP,"toSortObject");a(UP,"toSortEntry");Na=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(Ti,"flattenKey")});var Ef={};Ve(Ef,{start:()=>h9});async function E9(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&df(e);let s=new fi;try{e.responseHeaders=s;let i=e.url.slice(1),o=tg.getMatch(i);if(!o)return t(e);e.handlerPath=o.path;let c={url:o.relativeURL,async:!0},u=o.Resource,_=r["cache-control"];if(_){_=_.toLowerCase();let p=_.match(/max-age=(\d+)/)?.[1];p&&(e.expiresAt=p*1e3+Date.now()),_.includes("only-if-cached")&&(e.onlyIfCached=!0),_.includes("no-cache")&&(e.noCache=!0),_.includes("no-store")&&(e.noCacheStore=!0),_.includes("stale-if-error")&&(e.staleIfError=!0),_.includes("must-revalidate")&&(e.mustRevalidate=!0)}let l=await Qe(e,()=>{if(n==="POST"||n==="PUT"||n==="PATCH"||n==="QUERY")try{e.data=co(r["content-type"],!0)(e.body)}catch(p){throw new Ku.ClientError(p,400)}switch(e.authorize=!0,n){case"GET":case"HEAD":return u.get(c,e);case"POST":return u.post(c,e.data,e);case"PUT":return u.put(c,e.data,e);case"DELETE":return u.delete(c,e);case"PATCH":return u.patch(c,e.data,e);case"OPTIONS":s.setIfNone("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return u.connect(c,null,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return u.query(c,e.data,e);case"COPY":return u.copy(c,r.destination,e);case"MOVE":return u.move(c,r.destination,e);case"BREW":throw new Ku.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new Ku.ServerError(`Method ${n} is not recognized`,501)}}),d=200,f;if(l==null)d=n==="GET"||n==="HEAD"?404:204,eg.lastModified&&e.lastModified&&s.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(f=e.lastModified){f9[0]=f;let p=String.fromCharCode(34,($t[0]&63)+62,($t[0]>>6)+($t[1]<<2&63)+62,($t[1]>>4)+($t[2]<<4&63)+62,($t[2]>>2)+62,($t[3]&63)+62,($t[3]>>6)+($t[4]<<2&63)+62,($t[4]>>4)+($t[5]<<4&63)+62,($t[5]>>2)+62,($t[6]&63)+62,($t[6]>>6)+($t[7]<<2&63)+62,34),S=r["if-none-match"];S&&p==S?(l?.onDone&&l.onDone(),d=304,l=void 0):s.setIfNone("ETag",p),eg.lastModified&&s.setIfNone("Last-Modified",new Date(f).toUTCString())}e.createdResource&&(d=201),e.newLocation&&s.setIfNone("Location",e.newLocation);let E={status:d,headers:s,body:void 0},h=l?.wasLoadedFromSource?.();return h!==void 0&&(E.wasCacheMiss=h,!h&&f&&s.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||f))/1e3))),l!==void 0&&(E.body=cf(l,e,E),n==="HEAD"&&(E.body=void 0)),E}catch(i){i.statusCode?i.statusCode===500?_o.warn(i):_o.info(i):_o.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=cf(i.contentType?i:i.toString(),e,o),o}}function h9(e){eg=e,!PP&&(PP=!0,tg=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return E9(t,r)}),e.server.ws(async(t,r,n)=>{Yu++;let s=new On;vP||(vP=!0,Fu(l=>{Yu>0&&l.push({metric:"ws-connections",connections:Yu,byThread:!0})}));let i;t.on("error",l=>{i=!0,_o.warn(l)});let o;t.on("message",a(function(d){o||(o=co(r.headers.asObject["content-type"]));let f=o(d);s.push(f)},"message"));let c;t.on("close",()=>{Yu--,ln(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()}),await n;let u=r.url.slice(1),_=tg.getMatch(u);if(ln(!!_,"connection","ws","connect"),!_)t.send(Ei(`No resource was found to handle ${r.pathname}`,r));else{r.handlerPath=_.path,kr(h=>({count:h.count,total:Yu}),"connections",r.handlerPath,"connect","ws");let l={url:_.relativeURL,async:!0},d=_.Resource;c=(await Qe(r,()=>d.connect(l,s,r)))[Symbol.asyncIterator]();let E;for(;!(E=await c.next()).done;){let h=Ei(E.value,r);t.send(h),kr(h.length,"bytes-sent",r.handlerPath,"message","ws")}}t.close()}))}var _o,Ku,$t,f9,eg,PP,tg,vP,Yu,BP=Ae(()=>{pa();Us();_o=v(V()),Ku=v(Z());ff();uc();zi();Bd();$t=new Uint8Array(8),f9=new Float64Array($t.buffer,0,1),eg={};a(E9,"http");Yu=0;a(h9,"start")});var rg=T((Hfe,HP)=>{var{recordAction:hf,recordActionBinary:m9}=(Us(),ee(qu)),p9=require("fastify-plugin"),S9=200;HP.exports=p9(function(e,t,r){e.addHook("onResponse",async(n,s)=>{s.getResponseTime()}),e.addHook("onSend",async(n,s,i)=>{let o=s.getResponseTime(),c=performance.now(),u=s.request.routeOptions,_,l,d;u.config?.isOperation?(_=n.body?.operation,l="operation"):(_=u.url,l="fastify-route",d=u.method),hf(o,"duration",_,d,l),m9(s.raw.statusCode<400,"success",_,d,l);let f=S9;i?.pipe?(i.on("data",h=>{f+=h.length}),i.on("end",()=>{hf(performance.now()-c,"transfer",_,d,l),hf(f,"bytes-sent",_,d,l)})):(f+=i?.length||0,hf(f,"bytes-sent",_,d,l));let E=o.toFixed(3);s.header("Server-Timing",`db;dur=${E}`)}),r()},{name:"hdb-request-time"})});var og=T((xfe,kP)=>{var gf=require("clone"),Rf=rt(),T9=J(),Sf=M(),g9=V(),mf=require("fs"),ng=require("joi"),{string:Tf}=ng.types(),{hdb_errors:R9,handleHDBError:Wu}=Z(),{HDB_ERROR_MSGS:A9,HTTP_STATUS_CODES:pf}=R9,{common_validators:ya}=Yn(),xP=1e9,FP=" is required",O9=["insert","update","upsert"],sg={database:{presence:!1,format:ya.schema_format,length:ya.schema_length},schema:{presence:!1,format:ya.schema_format,length:ya.schema_length},table:{presence:!0,format:ya.schema_format,length:ya.schema_length},action:{inclusion:{within:O9,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},b9={schema:Tf.required(),table:Tf.required(),action:Tf.valid("insert","update","upsert")},{AWS_ACCESS_KEY:N9,AWS_SECRET:y9,AWS_BUCKET:I9,AWS_FILE_KEY:w9,REGION:C9}=Sf.S3_BUCKET_AUTH_KEYS,L9={s3:{presence:!0},[`s3.${N9}`]:{presence:!0,type:"String"},[`s3.${y9}`]:{presence:!0,type:"String"},[`s3.${I9}`]:{presence:!0,type:"String"},[`s3.${w9}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${C9}`]:{presence:!0,type:"String"}},qP=gf(sg);qP.data.presence={message:FP};var GP=gf(sg);GP.file_path.presence={message:FP};var D9=Object.assign(gf(sg),L9),ig=gf(b9);ig.csv_url=Tf.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();ig.passthrough_headers=ng.object();function M9(e){let t=Rf.validateObject(e,qP);return Af(e,t)}a(M9,"dataObject");function U9(e){let t=Rf.validateBySchema(e,ng.object(ig));return Af(e,t)}a(U9,"urlObject");function P9(e){let t=Rf.validateObject(e,GP);return Af(e,t)}a(P9,"fileObject");function v9(e){let t=Rf.validateObject(e,D9);return Af(e,t)}a(v9,"s3FileObject");function Af(e,t){if(!t){let r=T9.checkGlobalSchemaTable(e.schema,e.table);if(r)return Wu(new Error,r,pf.BAD_REQUEST);if(e.operation===Sf.OPERATIONS_ENUM.CSV_FILE_LOAD){try{mf.accessSync(e.file_path,mf.constants.R_OK|mf.constants.F_OK)}catch(n){return n.code===Sf.NODE_ERROR_CODES.ENOENT?Wu(n,`No such file or directory ${n.path}`,pf.BAD_REQUEST):n.code===Sf.NODE_ERROR_CODES.EACCES?Wu(n,`Permission denied ${n.path}`,pf.BAD_REQUEST):Wu(n)}try{let n=mf.statSync(e.file_path).size;if(n>xP)return Wu(new Error,A9.MAX_FILE_SIZE_ERR(n,xP),pf.BAD_REQUEST)}catch(n){g9.error(n),console.error(n)}}}return t}a(Af,"postValidateChecks");kP.exports={dataObject:M9,urlObject:U9,fileObject:P9,s3FileObject:v9}});var ag=T((qfe,VP)=>{"use strict";var Qu=V(),Of=M();async function B9(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===Of.OPERATIONS_ENUM.INSERT||t.operation===Of.OPERATIONS_ENUM.UPDATE||t.operation===Of.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===Of.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(Qu.info(i.message),i):i.http_resp_msg?(Qu.error(`Error calling operation: ${e.name}`),Qu.error(i.http_resp_msg),i):(Qu.error(`Error calling operation: ${e.name}`),Qu.error(i),i)}}a(B9,"callOperationFunctionAsAwait");VP.exports={callOperationFunctionAsAwait:B9}});var YP=T((kfe,$P)=>{"use strict";var cg=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}},ug=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};$P.exports={BulkLoadFileObject:cg,BulkLoadDataObject:ug}});var WP=T(($fe,KP)=>{"use strict";var lg=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};KP.exports=lg});var mg=T((Jfe,lv)=>{"use strict";var bf=en(),yf=og(),H9=require("needle"),Bn=M(),Kfe=nt(),Ia=J(),{handleHDBError:it,hdb_errors:rv}=Z(),{HTTP_STATUS_CODES:Yt,HDB_ERROR_MSGS:Lt,CHECK_LOGS_WRAPPER:Eo}=rv,wa=V(),_g=require("papaparse");Ia.promisifyPapaParse();var Hn=require("fs-extra"),x9=require("path"),{chain:QP}=require("stream-chain"),zP=require("stream-json/streamers/StreamArray"),JP=require("stream-json/utils/Batch"),XP=require("stream-chain/utils/comp"),{finished:jP}=require("stream"),F9=j(),nv=ag(),q9=qT(),{BulkLoadFileObject:fg,BulkLoadDataObject:G9}=YP(),Eg=LT(),{verifyBulkLoadAttributePerms:sv}=tf(),Wfe=WP(),Qfe=It(),zfe=Ts(),{databases:k9}=(ge(),ee(xe)),{coerceType:V9}=(If(),ee(pg)),ZP="No records parsed from csv file.",fo=`${F9.get("HDB_ROOT")}/tmp`,{schema_regex:$9}=Yn(),ev=1024*1024*2,tv=5e3,Y9={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};lv.exports={csvDataLoad:K9,csvURLLoad:W9,csvFileLoad:Q9,importFromS3:z9};async function K9(e,t){let r=yf.dataObject(e);if(r)throw it(r,r.message,Yt.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=av(e.schema,e.table),i=_g.parse(e.data,{header:!0,skipEmptyLines:!0,transform:dg.bind(null,s),dynamicTyping:!1}),o=new Eg;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&sv(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 it(new Error,c,Yt.BAD_REQUEST,void 0,void 0,!0);let u=new G9(e.action,e.schema,e.table,i.data);return n=await nv.callOperationFunctionAsAwait(cv,u,null),n.message===ZP?ZP:uv(n.records,n.number_written)}catch(s){throw ho(s)}}a(K9,"csvDataLoad");async function W9(e){let t=yf.urlObject(e);if(t)throw it(t,t.message,Yt.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${fo}/${r}`;try{await J9(e,r)}catch(s){throw wa.error(Lt.DOWNLOAD_FILE_ERR(r)+" - "+s),it(s,Eo(Lt.DOWNLOAD_FILE_ERR(r)))}try{let s=new fg(this.job_operation_function.name,e.action,e.schema,e.table,n,Bn.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await hg(s);return await Nf(n),i}catch(s){throw await Nf(n),ho(s)}}a(W9,"csvURLLoad");async function Q9(e){let t=yf.fileObject(e);if(t)throw it(t,t.message,Yt.BAD_REQUEST,void 0,void 0,!0);let r=new fg(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Bn.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await hg(r)}catch(n){throw ho(n)}}a(Q9,"csvFileLoad");async function z9(e){let t=yf.s3FileObject(e);if(t)throw it(t,t.message,Yt.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=x9.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${fo}/${s}`;let i=new fg(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user.role.permission);await X9(s,e);let o=await hg(i);return await Nf(r),o}catch(n){throw await Nf(r),ho(n)}}a(z9,"importFromS3");async function J9(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await H9("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 it(n,s,n.statusCode,Bn.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}Z9(r,e.csv_url),await j9(t,r.raw)}a(J9,"downloadCSVFile");async function X9(e,t){try{let r=`${fo}/${e}`;await Hn.mkdirp(fo),await Hn.writeFile(`${fo}/${e}`,"",{flag:"a+"});let n=await Hn.createWriteStream(r),s=await q9.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(){wa.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw wa.error(Lt.S3_DOWNLOAD_ERR+" - "+r),it(r,Eo(Lt.S3_DOWNLOAD_ERR))}}a(X9,"downloadFileFromS3");async function j9(e,t){try{await Hn.mkdirp(fo),await Hn.writeFile(`${fo}/${e}`,t)}catch(r){throw wa.error(Lt.WRITE_TEMP_FILE_ERR),it(r,Eo(Lt.DEFAULT_BULK_LOAD_ERR))}}a(j9,"writeFileToTempFolder");async function Nf(e){if(e)try{await Hn.access(e),await Hn.unlink(e)}catch{wa.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(Nf,"deleteTempFile");function Z9(e,t){if(e.statusCode!==rv.HTTP_STATUS_CODES.OK)throw it(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Yt.BAD_REQUEST);if(!Y9[e.headers["content-type"]])throw it(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Yt.BAD_REQUEST);if(!e.raw)throw it(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Yt.BAD_REQUEST)}a(Z9,"validateURLResponse");async function hg(e){try{let t;switch(e.file_type){case Bn.VALID_S3_FILE_TYPES.CSV:t=await e7(e);break;case Bn.VALID_S3_FILE_TYPES.JSON:t=await t7(e);break;default:throw it(new Error,Lt.DEFAULT_BULK_LOAD_ERR,Yt.BAD_REQUEST,Bn.LOG_LEVELS.ERROR,Lt.INVALID_FILE_EXT_ERR(e))}return uv(t.records,t.number_written)}catch(t){throw ho(t)}}a(hg,"fileLoad");async function iv(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 bf.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&sv(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let u=it(c);r(u)}}a(iv,"validateChunk");async function ov(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;Ia.autoCastJSONDeep(i),s&&s.pause();let o=n.meta?n.meta.fields:null;if(o)i.forEach(c=>{!Ia.isEmpty(c)&&!Ia.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 nv.callOperationFunctionAsAwait(cv,c,null);t.records+=u.records,t.number_written+=u.number_written,s&&s.resume()}catch(c){let u=it(c,Eo(Lt.INSERT_CSV_ERR),Yt.INTERNAL_SERVER_ERROR,Bn.LOG_LEVELS.ERROR,Lt.INSERT_CSV_ERR+" - "+c);r(u)}}a(ov,"insertChunk");async function e7(e){let t={records:0,number_written:0},r=av(e.schema,e.table);try{let n=new Eg,s=Hn.createReadStream(e.file_path,{highWaterMark:ev});s.setEncoding("utf8"),await _g.parsePromise(s,iv.bind(null,e,n),dg.bind(null,r));let i=n.getPermsResponse();if(i)throw it(new Error,i,Yt.BAD_REQUEST);return s=Hn.createReadStream(e.file_path,{highWaterMark:ev}),s.setEncoding("utf8"),await _g.parsePromise(s,ov.bind(null,e,t),dg.bind(null,r)),s.destroy(),t}catch(n){throw it(n,Eo(Lt.PAPA_PARSE_ERR),Yt.INTERNAL_SERVER_ERROR,Bn.LOG_LEVELS.ERROR,Lt.PAPA_PARSE_ERR+n)}}a(e7,"callPapaParse");function av(e,t){let r=k9[e][t].attributes,n=new Map;for(let s of r)s.type&&n.set(s.name,i=>V9(i,s));return n}a(av,"createTransformMap");function dg(e,t,r){let n=e.get(r);return n?n(t):Ia.autoCast(t)}a(dg,"typeFunction");async function t7(e){let t={records:0,number_written:0},r=a(n=>{throw n},"throwErr");try{let n=new Eg,s=QP([Hn.createReadStream(e.file_path,{encoding:"utf-8"}),zP.withParser(),c=>c.value,new JP({batchSize:tv}),XP(async c=>{await iv(e,n,r,c)})]);await new Promise((c,u)=>{jP(s,_=>{_?u(_):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw it(new Error,i,Yt.BAD_REQUEST);let o=QP([Hn.createReadStream(e.file_path,{encoding:"utf-8"}),zP.withParser(),c=>c.value,new JP({batchSize:tv}),XP(async c=>{await ov(e,t,r,c)})]);return await new Promise((c,u)=>{jP(o,_=>{_?u(_):c()}),o.resume()}),t}catch(n){throw it(n,Eo(Lt.INSERT_JSON_ERR),Yt.INTERNAL_SERVER_ERROR,Bn.LOG_LEVELS.ERROR,Lt.INSERT_JSON_ERR+n)}}a(t7,"insertJson");async function cv(e){let t={};try{e.data&&e.data.length>0&&r7(e.data[0])?t=await n7(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",wa.info(t.message))}catch(r){throw ho(r)}return t}a(cv,"callBulkFileLoad");function r7(e){let t=Object.keys(e);for(let r of t)if(!$9.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(r7,"validateColumnNames");async function n7(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=bf.insert;break;case"update":i=bf.update;break;case"upsert":i=bf.upsert;break;default:throw it(new Error,Lt.INVALID_ACTION_PARAM_ERR(n),Yt.BAD_REQUEST,Bn.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=Ia.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw ho(o)}}a(n7,"bulkFileLoad");function uv(e,t){return`successfully loaded ${t} of ${e} records`}a(uv,"buildResponseMsg");function ho(e){return it(e,Eo(Lt.DEFAULT_BULK_LOAD_ERR),Yt.INTERNAL_SERVER_ERROR,Bn.LOG_LEVELS.ERROR,Lt.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(ho,"buildTopLevelErrMsg")});var dv=T((jfe,_v)=>{"use strict";var Sg=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};_v.exports=Sg});var hv=T((eEe,Ev)=>{"use strict";var s7=M(),fv=require("moment"),i7=require("uuid").v4,Tg=class{static{a(this,"JobObject")}constructor(){this.id=i7(),this.type=void 0,this.start_datetime=fv().valueOf(),this.created_datetime=fv().valueOf(),this.end_datetime=void 0,this.status=s7.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};Ev.exports=Tg});var gg=T((rEe,Rv)=>{"use strict";var o7=require("uuid").v4,Sv=en(),Tv=Zr(),a7=Jn(),c7=jo(),u7=dv(),ot=M(),l7=hv(),_7=sS(),_n=V(),d7=bc(),Ca=J(),{promisify:f7}=require("util"),mo=require("moment"),E7=nf(),wf=og(),mv=_m(),{deleteTransactionLogsBeforeValidator:h7}=NT(),{handleHDBError:m7,hdb_errors:p7}=Z(),{HTTP_STATUS_CODES:S7}=p7,pv=Tv.searchByValue,T7=Tv.searchByHash,g7=Sv.insert,R7=f7(E7.evaluateSQL),A7=Sv.update;Rv.exports={addJob:N7,updateJob:I7,handleGetJob:O7,handleGetJobsByStartDate:b7,getJobById:gv};async function O7(e){try{let t=await gv(e.id);return Ca.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 _n.error("There was an error getting job",t),new Error(r)}}a(O7,"handleGetJob");async function b7(e){try{let t=await y7(e);if(_n.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=mo(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=mo(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 _n.error(r),new Error(r)}}a(b7,"handleGetJobsByStartDate");async function N7(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||Ca.isEmptyOrZeroLength(e.operation)){let l="job parameter is invalid";return _n.info(l),t.error=l,t}if(!ot.JOB_TYPE_ENUM[e.operation])return _n.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case ot.OPERATIONS_ENUM.CSV_FILE_LOAD:n=wf.fileObject(e);break;case ot.OPERATIONS_ENUM.CSV_URL_LOAD:n=wf.urlObject(e);break;case ot.OPERATIONS_ENUM.CSV_DATA_LOAD:n=wf.dataObject(e);break;case ot.OPERATIONS_ENUM.IMPORT_FROM_S3:n=wf.s3FileObject(e);break;case ot.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case ot.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=mv(e,"date");break;case ot.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=mv(e,"timestamp");break;case ot.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=h7(e);break;default:break}if(n)throw m7(n,n.message,S7.BAD_REQUEST,void 0,void 0,!0);let s=new l7;s.type=e.operation===ot.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?ot.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user.username;let i=new a7(ot.SYSTEM_SCHEMA_NAME,ot.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),o;try{o=Array.from(await pv(i))}catch(l){let d=`There was an error inserting a new job: ${l}`;return _n.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){s.id=o7();try{o=await pv(i)}catch(l){let d=`There was an error inserting a new job: ${l}`;return _n.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return _n.error("Error creating a job, could not find a unique job id."),t}s.request=e;let u=new d7(ot.SYSTEM_SCHEMA_NAME,ot.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),_;try{_=await g7(u)}catch(l){return _n.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,_n.trace(l)}return t}a(N7,"addJob");async function y7(e){let t=mo(e.from_date,mo.ISO_8601),r=mo(e.to_date,mo.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 u7(n,e.hdb_user);try{return await R7(s)}catch(i){throw _n.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(y7,"getJobsInDateRange");async function gv(e){if(Ca.isEmptyOrZeroLength(e))return Ca.errorizeMessage("Invalid job ID specified.");let t=new c7(ot.SYSTEM_SCHEMA_NAME,ot.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await T7(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return _n.error(n),Ca.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(gv,"getJobById");async function I7(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(Ca.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===ot.JOB_STATUS_ENUM.COMPLETE||e.status===ot.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=mo().valueOf());let t=new _7(ot.SYSTEM_SCHEMA_NAME,ot.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await A7(t),r}a(I7,"updateJob")});var Iv=T((sEe,yv)=>{"use strict";var Av=J(),gr=M(),w7=require("moment"),Cf=mg(),Lf=V(),Ov=gg(),bv=sf(),Nv=Fi(),C7=et(),L7=Xd(),Rg=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function D7(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(Av.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(Av.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case gr.JOB_TYPE_ENUM.csv_file_load:await vs(e,Cf.csvFileLoad);break;case gr.JOB_TYPE_ENUM.csv_url_load:await vs(e,Cf.csvURLLoad);break;case gr.JOB_TYPE_ENUM.csv_data_load:await vs(e,Cf.csvDataLoad);break;case gr.JOB_TYPE_ENUM.import_from_s3:await vs(e,Cf.importFromS3);break;case gr.JOB_TYPE_ENUM.empty_trash:break;case gr.JOB_TYPE_ENUM.export_local:await vs(e,bv.export_local);break;case gr.JOB_TYPE_ENUM.export_to_s3:await vs(e,bv.export_to_s3);break;case gr.JOB_TYPE_ENUM.delete_files_before:case gr.JOB_TYPE_ENUM.delete_records_before:await vs(e,Nv.deleteFilesBefore);break;case gr.JOB_TYPE_ENUM.delete_audit_logs_before:await vs(e,Nv.deleteAuditLogsBefore);break;case gr.JOB_TYPE_ENUM.delete_transaction_logs_before:await vs(e,L7.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(D7,"parseMessage");async function vs(e,t){try{e.job.status=gr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=w7().valueOf(),await Ov.updateJob(e.job),await M7(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):Lf.error(`There was an error running ${t.name} job with id ${e.job.id}`),Lf.error(n),e.job.message=n,e.job.status=gr.JOB_STATUS_ENUM.ERROR;try{await Ov.updateJob(e.job)}catch(s){throw Lf.error(`Unable to update job with id ${e.job.id}`),s}throw r}}a(vs,"runJob");async function M7(e){Lf.trace("launching job thread:",e),C7.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[gr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(M7,"launchJobThread");yv.exports={parseMessage:D7,RunnerMessage:Rg}});var Cv=T((oEe,wv)=>{"use strict";var Ag=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};wv.exports=Ag});var Kv=T((cEe,wg)=>{"use strict";var Pf=Zr(),Ng=nf(),Df=mg(),Bs=Z_(),Mf=Pi(),Ju=Fi(),U7=Vp(),zu=rn(),Uf=jp(),Kt=bT(),Dt=V(),P7=tS(),v7=hd(),Lv=xS(),B7=pd(),H7=FS(),x7=qS(),F7=VS(),q7=YS(),Og=QS(),Dv=sf(),G7=tf(),yg=gg(),H=M(),{hdb_errors:ju,handleHDBError:Xu}=Z(),{HTTP_STATUS_CODES:Mv}=ju,bg=ZS(),Uv=Pd(),kv=require("util"),La=en(),k7=Js(),V7=ua(),Pv=Iv(),vv=tu(),Bv=(qd(),ee(Au)),Hv=Ur(),xv=Xd(),Fv=Yd(),{setServerUtilities:$7}=(If(),ee(pg)),{CONTEXT:Y7}=(bn(),ee(op)),{_assignPackageExport:K7}=require("../index"),{transformReq:W7}=J(),{server:Q7}=(nr(),ee(Ii)),z7=ag(),qv=Pf.searchByHash,J7=Pf.searchByValue,X7=kv.promisify(Pf.search),j7=kv.promisify(Ng.evaluateSQL),Z7={[H.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[H.OPERATIONS_ENUM.CREATE_TABLE]:!0,[H.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[H.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[H.OPERATIONS_ENUM.DROP_TABLE]:!0,[H.OPERATIONS_ENUM.DROP_SCHEMA]:!0},G=Cv();async function Vv(e,t){try{if(e.body.operation!=="read_log"&&(Dt.log_level===H.LOG_LEVELS.INFO||Dt.log_level===H.LOG_LEVELS.DEBUG||Dt.log_level===H.LOG_LEVELS.TRACE)){let{hdb_user:n,hdb_auth_header:s,password:i,...o}=e.body;Dt.info(o)}}catch(n){Dt.error(n)}let r=await z7.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return Z7[e.body.operation]&&k7.setSchemaDataToGlobal(n=>{n&&Dt.error(n)}),r}a(Vv,"processLocalTransaction");var Gv=tee();wg.exports={chooseOperation:$v,getOperationFunction:Yv,operation:Ig,processLocalTransaction:Vv};$7(wg.exports);Q7.operation=Ig;function $v(e){let t;try{t=Yv(e)}catch(s){throw Dt.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=Ng.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let o=Ng.checkASTPermissions(e,i);if(o)throw Dt.error(`${Mv.FORBIDDEN} from operation ${e.operation}`),Dt.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),Xu(new Error,o,ju.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==H.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==H.OPERATIONS_ENUM.LOGIN&&e.operation!==H.OPERATIONS_ENUM.LOGOUT){let s=n===void 0?r:n,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=G7.verifyPerms(i,s);if(o)throw Dt.error(`${Mv.FORBIDDEN} from operation ${e.operation}`),Dt.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),Xu(new Error,o,ju.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw Xu(s,"There was an error when trying to choose an operation path")}return r}a($v,"chooseOperation");function Yv(e){if(Dt.trace(`getOperationFunction with operation: ${e.operation}`),Gv.has(e.operation))return Gv.get(e.operation);throw Xu(new Error,ju.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),ju.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(Yv,"getOperationFunction");K7("operation",Ig);function Ig(e,t){e.hdb_user=this[Y7]?.user,e.bypass_auth=!t;let r=$v(e);return Vv({body:e},r)}a(Ig,"operation");async function eee(e){Dt.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),n=r[0],s=r[1];for(let i of t.transactions)try{i.schema=n,i.table=s,i[H.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case H.OPERATIONS_ENUM.INSERT:o=await La.insert(i);break;case H.OPERATIONS_ENUM.UPDATE:o=await La.update(i);break;case H.OPERATIONS_ENUM.UPSERT:o=await La.upsert(i);break;case H.OPERATIONS_ENUM.DELETE:o=await Ju.deleteRecord(i);break;default:Dt.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){Dt.info("Invalid operation in transaction"),Dt.error(o)}}a(eee,"catchup");async function cs(e){W7(e);let t,r;try{r=await yg.addJob(e),t=r.createdJob,Dt.info("addJob result",r);let n=new Pv.RunnerMessage(t,e);return await Pv.parseMessage(n),{message:`Starting job with id ${t.id}`,job_id:t.id}}catch(n){let s=`There was an error executing job: ${n.http_resp_msg?n.http_resp_msg:n}`;throw Dt.error(s),Xu(n,s)}}a(cs,"executeJob");function tee(){let e=new Map;return e.set(H.OPERATIONS_ENUM.INSERT,new G(La.insert)),e.set(H.OPERATIONS_ENUM.UPDATE,new G(La.update)),e.set(H.OPERATIONS_ENUM.UPSERT,new G(La.upsert)),e.set(H.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new G(Pf.searchByConditions)),e.set(H.OPERATIONS_ENUM.SEARCH_BY_HASH,new G(qv)),e.set(H.OPERATIONS_ENUM.SEARCH_BY_ID,new G(qv)),e.set(H.OPERATIONS_ENUM.SEARCH_BY_VALUE,new G(J7)),e.set(H.OPERATIONS_ENUM.SEARCH,new G(X7)),e.set(H.OPERATIONS_ENUM.SQL,new G(j7)),e.set(H.OPERATIONS_ENUM.CSV_DATA_LOAD,new G(cs,Df.csvDataLoad)),e.set(H.OPERATIONS_ENUM.CSV_FILE_LOAD,new G(cs,Df.csvFileLoad)),e.set(H.OPERATIONS_ENUM.CSV_URL_LOAD,new G(cs,Df.csvURLLoad)),e.set(H.OPERATIONS_ENUM.IMPORT_FROM_S3,new G(cs,Df.importFromS3)),e.set(H.OPERATIONS_ENUM.CREATE_SCHEMA,new G(Bs.createSchema)),e.set(H.OPERATIONS_ENUM.CREATE_DATABASE,new G(Bs.createSchema)),e.set(H.OPERATIONS_ENUM.CREATE_TABLE,new G(Bs.createTable)),e.set(H.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new G(Bs.createAttribute)),e.set(H.OPERATIONS_ENUM.DROP_SCHEMA,new G(Bs.dropSchema)),e.set(H.OPERATIONS_ENUM.DROP_DATABASE,new G(Bs.dropSchema)),e.set(H.OPERATIONS_ENUM.DROP_TABLE,new G(Bs.dropTable)),e.set(H.OPERATIONS_ENUM.DROP_ATTRIBUTE,new G(Bs.dropAttribute)),e.set(H.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new G(Mf.describeSchema)),e.set(H.OPERATIONS_ENUM.DESCRIBE_DATABASE,new G(Mf.describeSchema)),e.set(H.OPERATIONS_ENUM.DESCRIBE_TABLE,new G(Mf.describeTable)),e.set(H.OPERATIONS_ENUM.DESCRIBE_ALL,new G(Mf.describeAll)),e.set(H.OPERATIONS_ENUM.DELETE,new G(Ju.deleteRecord)),e.set(H.OPERATIONS_ENUM.ADD_USER,new G(zu.addUser)),e.set(H.OPERATIONS_ENUM.ALTER_USER,new G(zu.alterUser)),e.set(H.OPERATIONS_ENUM.DROP_USER,new G(zu.dropUser)),e.set(H.OPERATIONS_ENUM.LIST_USERS,new G(zu.listUsersExternal)),e.set(H.OPERATIONS_ENUM.LIST_ROLES,new G(Uf.listRoles)),e.set(H.OPERATIONS_ENUM.ADD_ROLE,new G(Uf.addRole)),e.set(H.OPERATIONS_ENUM.ALTER_ROLE,new G(Uf.alterRole)),e.set(H.OPERATIONS_ENUM.DROP_ROLE,new G(Uf.dropRole)),e.set(H.OPERATIONS_ENUM.USER_INFO,new G(zu.userInfo)),e.set(H.OPERATIONS_ENUM.READ_LOG,new G(P7)),e.set(H.OPERATIONS_ENUM.ADD_NODE,new G(v7)),e.set(H.OPERATIONS_ENUM.UPDATE_NODE,new G(Lv)),e.set(H.OPERATIONS_ENUM.SET_NODE_REPLICATION,new G(Lv)),e.set(H.OPERATIONS_ENUM.REMOVE_NODE,new G(B7)),e.set(H.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new G(H7)),e.set(H.OPERATIONS_ENUM.PURGE_STREAM,new G(x7)),e.set(H.OPERATIONS_ENUM.SET_CONFIGURATION,new G(Hv.setConfiguration)),e.set(H.OPERATIONS_ENUM.CLUSTER_STATUS,new G(F7.clusterStatus)),e.set(H.OPERATIONS_ENUM.CLUSTER_NETWORK,new G(q7)),e.set(H.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new G(Og.setRoutes)),e.set(H.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new G(Og.getRoutes)),e.set(H.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new G(Og.deleteRoutes)),e.set(H.OPERATIONS_ENUM.EXPORT_TO_S3,new G(cs,Dv.export_to_s3)),e.set(H.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new G(cs,Ju.deleteFilesBefore)),e.set(H.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new G(cs,Ju.deleteFilesBefore)),e.set(H.OPERATIONS_ENUM.EXPORT_LOCAL,new G(cs,Dv.export_local)),e.set(H.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new G(yg.handleGetJobsByStartDate)),e.set(H.OPERATIONS_ENUM.GET_JOB,new G(yg.handleGetJob)),e.set(H.OPERATIONS_ENUM.GET_FINGERPRINT,new G(bg.getFingerprint)),e.set(H.OPERATIONS_ENUM.SET_LICENSE,new G(bg.setLicense)),e.set(H.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new G(bg.getRegistrationInfo)),e.set(H.OPERATIONS_ENUM.RESTART,new G(Uv.restart)),e.set(H.OPERATIONS_ENUM.RESTART_SERVICE,new G(Uv.restartService)),e.set(H.OPERATIONS_ENUM.CATCHUP,new G(eee)),e.set(H.OPERATIONS_ENUM.SYSTEM_INFORMATION,new G(V7.systemInformation)),e.set(H.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new G(cs,Ju.deleteAuditLogsBefore)),e.set(H.OPERATIONS_ENUM.READ_AUDIT_LOG,new G(U7)),e.set(H.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new G(vv.createTokens)),e.set(H.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new G(vv.refreshOperationToken)),e.set(H.OPERATIONS_ENUM.LOGIN,new G(Bv.login)),e.set(H.OPERATIONS_ENUM.LOGOUT,new G(Bv.logout)),e.set(H.OPERATIONS_ENUM.GET_CONFIGURATION,new G(Hv.getConfiguration)),e.set(H.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new G(Kt.customFunctionsStatus)),e.set(H.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new G(Kt.getCustomFunctions)),e.set(H.OPERATIONS_ENUM.GET_COMPONENT_FILE,new G(Kt.getComponentFile)),e.set(H.OPERATIONS_ENUM.GET_COMPONENTS,new G(Kt.getComponents)),e.set(H.OPERATIONS_ENUM.SET_COMPONENT_FILE,new G(Kt.setComponentFile)),e.set(H.OPERATIONS_ENUM.DROP_COMPONENT,new G(Kt.dropComponent)),e.set(H.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new G(Kt.getCustomFunction)),e.set(H.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new G(Kt.setCustomFunction)),e.set(H.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new G(Kt.dropCustomFunction)),e.set(H.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new G(Kt.addComponent)),e.set(H.OPERATIONS_ENUM.ADD_COMPONENT,new G(Kt.addComponent)),e.set(H.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new G(Kt.dropCustomFunctionProject)),e.set(H.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new G(Kt.packageComponent)),e.set(H.OPERATIONS_ENUM.PACKAGE_COMPONENT,new G(Kt.packageComponent)),e.set(H.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new G(Kt.deployComponent)),e.set(H.OPERATIONS_ENUM.DEPLOY_COMPONENT,new G(Kt.deployComponent)),e.set(H.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new G(xv.readTransactionLog)),e.set(H.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new G(cs,xv.deleteTransactionLogsBefore)),e.set(H.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new G(Fv.installModules)),e.set(H.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new G(Fv.auditModules)),e.set(H.OPERATIONS_ENUM.GET_BACKUP,new G(Bs.getBackup)),e}a(tee,"initializeOperationFunctionMap")});var Bf=T((lEe,zv)=>{"use strict";var Cg=M(),ree=J(),Zu=V(),{handleHDBError:Lg,hdb_errors:vf}=Z(),{isMainThread:nee}=require("worker_threads"),{Readable:see}=require("stream"),Wv=require("os"),iee=require("util"),oee=dS(),aee=iee.promisify(oee.authorize),Qv=Kv(),{createGzip:cee,constants:uee}=require("zlib");function lee(e){let t=`Found an uncaught exception with message: ${e.message}. ${Wv.EOL}Stack: ${e.stack} ${Wv.EOL}Terminating ${nee?"HDB":"thread"}.`;console.error(t),Zu.fatal(t),process.exit(1)}a(lee,"handleServerUncaughtException");function _ee(e,t,r){if(Zu[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:vf.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(_ee,"serverErrorHandler");function dee(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=Lg(new Error,"Invalid JSON.",vf.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(ree.isEmpty(e.body.operation)){let n=Lg(new Error,"Request body must include an 'operation' property.",vf.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}a(dee,"reqBodyValidationHandler");function fee(e,t,r){let n;e.body.operation!==Cg.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==Cg.OPERATIONS_ENUM.LOGIN&&e.body.operation!==Cg.OPERATIONS_ENUM.LOGOUT?aee(e,t).then(s=>{n=s,e.body.hdb_user=n,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(s=>{Zu.warn(s),Zu.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${s.stack}"`);let i=typeof s=="string"?{error:s}:{error:s.message};r(Lg(s,i,vf.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(fee,"authHandler");async function Eee(e,t,r=!1){let n;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),n=Qv.chooseOperation(e.body);let s=await Qv.processLocalTransaction(e,n);if(s instanceof see&&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(cee({level:uee.Z_BEST_SPEED})))}return s}catch(s){throw Zu.error(s),s}}a(Eee,"handlePostRequest");zv.exports={authHandler:fee,handlePostRequest:Eee,handleServerUncaughtException:lee,serverErrorHandler:_ee,reqBodyValidationHandler:dee}});var Zv=T((dEe,jv)=>{"use strict";var hee=require("fastify-plugin"),{handlePostRequest:Jv,authHandler:mee,reqBodyValidationHandler:pee}=Bf();async function See(e){e.decorate("hdbCore",{preValidation:[pee,mee],request:t=>Xv(Jv(t,response)),requestWithoutAuthentication:(t,r)=>Xv(Jv(t,r,!0))})}a(See,"hdbCore");async function Xv(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(Xv,"convertAsyncIterators");jv.exports=hee(See)});var r0=T((hEe,t0)=>{"use strict";var EEe=require("fs"),Dg=j();Dg.initSync();var{CONFIG_PARAMS:e0}=M(),Tee=1024*1024*1024;function gee(e){let t=Dg.get(e0.HTTP_TIMEOUT),r=Dg.get(e0.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:Tee,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,https:e}}a(gee,"getServerOptions");t0.exports=gee});var i0=T((pEe,s0)=>{"use strict";var Mg=j();Mg.initSync();var{CONFIG_PARAMS:n0}=M();function Ree(){let e=Mg.get(n0.HTTP_CORSACCESSLIST),t=Mg.get(n0.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(Ree,"getCORSOptions");s0.exports=Ree});var c0=T((TEe,a0)=>{"use strict";var o0=j();o0.initSync();var Aee=M();function Oee(){return o0.get(Aee.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(Oee,"getHeaderTimeoutConfig");a0.exports=Oee});var Pg={};Ve(Pg,{customFunctionsServer:()=>yee,ready:()=>O0,start:()=>Nee});function Nee(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){Hs||(Hs=A0(t),lt.http((await Hs).server));let o=await Hs,c=(0,Ug.dirname)(s),u=(0,Ug.dirname)(n);if(u.startsWith("/")&&(u=u.slice(1)),!u0.has(c)){u0.add(c);try{o.register(wee(c,u))}catch(_){if(_.message==="Root plugin has already booted")qe.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw _}}},ready:O0}}async function yee(){try{qe.info("In Custom Functions Fastify server"+process.cwd()),qe.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),qe.debug(`Custom Functions server process ${process.pid} starting up.`),await Iee();let e=h0.get(m0.CONFIG_PARAMS.HTTP_SECUREPORT)>0,t;try{t=Hs=await A0(e)}catch(r){throw qe.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw qe.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){qe.error(`Custom Functions ${process.pid} Error: ${e}`),qe.error(e),process.exit(1)}}async function Iee(){try{qe.info("Custom Functions starting configuration."),await p0.setUsersToGlobal(),qe.info("Custom Functions completed configuration.")}catch(e){qe.error(e)}}function wee(e,t){return async function(r){try{qe.info("Custom Functions starting buildRoutes"),qe.trace("Loading fastify routes folder "+e),(0,l0.existsSync)(e)&&r.register(E0.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:qe.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,o)=>{s?.message?qe.error(s.message):s&&qe.error(s),o()})}catch(n){qe.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function A0(e){qe.info("Custom Functions starting buildServer.");let t=(0,S0.default)(e),r=(0,_0.default)(t);r.server.headersTimeout=(0,g0.default)(),r.setErrorHandler(R0.serverErrorHandler);let n=(0,T0.default)();return n&&r.register(d0.default,n),r.register(function(s,i,o){s.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(f0.default),await r.register(bee),await r.after(),QT(r),qe.info("Custom Functions completed buildServer."),r}function O0(){if(Hs)return Hs.then?Hs.then(e=>e.ready()):Hs.ready()}var Ug,l0,_0,d0,f0,E0,h0,m0,qe,bee,p0,S0,T0,g0,R0,Hs,u0,b0=Ae(()=>{Ug=require("path"),l0=require("fs"),_0=v(require("fastify")),d0=v(require("@fastify/cors")),f0=v(rg()),E0=v(require("@fastify/autoload")),h0=v(j()),m0=v(M()),qe=v(V()),bee=v(Zv()),p0=v(rn()),S0=v(r0()),T0=v(i0()),g0=v(c0()),R0=v(Bf());pa();nr();u0=new Set;a(Nee,"start");a(yee,"customFunctionsServer");a(Iee,"setUp");a(wee,"buildRouteFolder");a(A0,"buildServer");a(O0,"ready")});var vg={};Ve(vg,{start:()=>Cee});function Cee(e){return{handleDirectory(t,r){if(t==="/"){let n=(0,C0.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){y0||(y0=!0,e.server.http(async(s,i)=>{if(!s.isWebSocket){let o=N0.get(s.pathname);if(o)return{handlesHeaders:!0,body:(0,I0.default)(s,(0,w0.realpathSync)(o))}}return i(s)},{runFirst:!0})),N0.set(r,n)}}}var I0,w0,C0,N0,y0,L0=Ae(()=>{I0=v(require("send")),w0=require("fs"),C0=v(require("serve-static")),N0=new Map;a(Cee,"start")});function Mee(e,t=1,r){if(Bg++,(0,po.startWorker)("server/threads/threadServer.js",{name:Ff.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((o,c)=>{function u(_){_.type===Ff.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(n.removeListener("message",u),o(n))}a(u,"onMessage"),n.on("message",u),n.on("error",c)});Dee.push(s),await s,Da.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",o=>{if(o.requestId){let c=xf.get(o.requestId);c&&c(o)}}),n.on("exit",i),n.on("shutdown",i);function i(){let o=Da.indexOf(n);o>-1&&Da.splice(o,1)}if(a(i,"removeWorker"),Ma){let o=Ma;Ma=[];for(let c of o)P0[c.localPort](null,c)}}}),r){let n=setInterval(()=>{Hg?Hg=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,po.shutdownWorkers)(),Bg=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function v0(e=0,t){if(typeof e=="string")try{(0,qf.existsSync)(e)&&(0,qf.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=Uee:r=Pee(t):r=Fg;let n=(0,Ua.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(n._handle){n._handle.onconnection=P0[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),Hg=!0,r(o,(c,u)=>{if(!c){if(D0){let l=o._socket||new Ua.Socket({handle:o,writable:!0,readable:!0});D0.deliverSocket(l,e,u),l.resume()}else Bg>0?(Ma.length===0&&setTimeout(()=>{Ma.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,Ma.push(o)):(console.log("start up a dynamic thread to handle request"),Mee(0));kr(!1,"socket-routed");return}c.requests++;let _=o.fd;if(_>=0)c.postMessage({port:e,fd:_,data:u});else{let l=o._socket||new Ua.Socket({handle:o,writable:!0,readable:!0});xee(l,c,e)}kr(!0,"socket-routed")})};let s=nu();xg.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 Fg(e,t){let r,n=0;for(let s of Da){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=Hf)return Hf=i,t(r);n=i}Hf=0,t(r)}function Uee(e,t){let r={};e.getpeername(r);let n=r.address,s=Pa.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);Fg(e,o=>{Pa.set(n,{worker:o,lastUsed:i}),t(o)})}function Pee(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new Ua.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",o=>{n.readStop();let u=o.toString("latin1").match(t)?.[1],_=Pa.get(u),l=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=l,s(_.worker);Fg(n,d=>{Pa.set(u,{worker:d,lastUsed:l}),s(d,o)})})}a(r,"findByHeaderAffinity")}function Bee(){Hf=0;for(let e of Da)e.expectedIdle=e.recentELU.idle+vee,e.requests=1;Da.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function xee(e,t,r){let n=Hee++;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(),xf.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")),xf.delete(n)),s.event=="destroy"&&(e.destroy(),xf.delete(n))})}var po,Ua,Ff,xg,qf,U0,Lee,Da,Ma,P0,D0,Bg,Dee,Hg,Hf,M0,Pa,vee,xf,Hee,B0=Ae(()=>{po=v(et()),Ua=require("net"),Ff=v(M()),xg=v(V()),qf=require("fs");Us();U0=require("worker_threads"),Lee=v(Vi()),Da=[],Ma=[],P0=[],Bg=0,Dee=[];U0.isMainThread&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});a(Mee,"startHTTPWorker");a(v0,"startSocketServer");Hf=0;a(Fg,"findMostIdleWorker");M0=36e5,Pa=new Map;a(Uee,"findByRemoteAddressAffinity");a(Pee,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Pa)r.lastUsed+M0<e&&Pa.delete(t)},M0).unref();vee=1e3;a(Bee,"updateWorkerIdleness");(0,po.setMonitorListener)(Bee);xf=new Map,Hee=1;a(xee,"proxySocket")});var Vg={};Ve(Vg,{Request:()=>qg,createReuseportFd:()=>Gf});var H0,qg,Gg,kg,Gf,kf=Ae(()=>{H0=require("os"),qg=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 kg(t.headers)}get absoluteURL(){return this.protocol+"://"+this.host+this.url}get pathname(){let t=this.url.indexOf("?");return t>-1?this.url.slice(0,t):this.url}set pathname(t){let r=this.url.indexOf("?");r>-1?this.url=t+this.url.slice(r):this.url=t}get protocol(){return this._nodeRequest.socket.encrypted?"https":"http"}get ip(){return this._nodeRequest.socket.remoteAddress}get body(){return this.#e||(this.#e=new Gg(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}},Gg=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}},kg=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,H0.platform)()!="win32"&&(Gf=require("node-unix-socket").createReuseportFd)});var G0=T((PEe,q0)=>{"use strict";var Fee=require("cluster"),So=j();So.initSync();var F0=M(),CEe=require("util"),xs=V(),LEe=require("fs"),qee=require("fastify"),DEe=nu(),Gee=require("@fastify/cors"),kee=require("@fastify/compress"),Vee=require("@fastify/static"),$ee=rg(),Yee=require("path"),{PACKAGE_ROOT:Kee}=M(),Wee=Js(),Qee=J(),zee=rn(),Jee=Vi(),{server:Xee}=(nr(),ee(Ii)),{node_request_key:MEe}=(kf(),ee(Vg)),{authHandler:jee,handlePostRequest:Zee,serverErrorHandler:ete,reqBodyValidationHandler:tte}=Bf(),UEe=require("net"),{registerContentHandlers:rte}=(pa(),ee(lP)),nte=6e4,ste=1024*1024*1024,ite="TRUE",{CONFIG_PARAMS:el}=F0,va;q0.exports={hdbServer:x0,start:x0};async function x0(e){try{xs.info("In Fastify server"+process.cwd()),xs.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),xs.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=Fee.isMaster,await ote();let t=e.securePort>0;va=ate(t),await va.ready(),e||(e={}),e.isOperationsServer=!0;try{Xee.http(va.server,e),va.server.closeIdleConnections||await va.listen({port:0,host:"::"})}catch(r){throw va.close(),xs.error(r),xs.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),xs.fatal(t),process.exit(1)}}a(x0,"operationsServer");async function ote(){xs.trace("Configuring HarperDB process."),Wee.setSchemaDataToGlobal(),await zee.setUsersToGlobal(),await Jee.getLicense()}a(ote,"setUp");function ate(e){xs.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=cte(e),r=qee(t);r.server.headersTimeout=lte(),r.setErrorHandler(ete);let n=ute();n&&r.register(Gee,n),r.register(function(i,o,c){i.setNotFoundHandler(function(u,_){r.server.emit("unhandled",u.raw,_.raw)}),c()}),r.register($ee),r.register(kee),r.register(Vee,{root:Yee.join(Kee,"studio/build-local")}),rte(r);let s=So.get(F0.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!Qee.isEmpty(s)&&s.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[tte,jee],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),Zee(i,o)}),r.get("/health",()=>"HarperDB is running."),xs.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(ate,"buildServer");function cte(e){let t=So.get(el.OPERATIONSAPI_NETWORK_TIMEOUT),r=So.get(el.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:ste,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}a(cte,"getServerOptions");function ute(){let e=So.get(el.OPERATIONSAPI_NETWORK_CORS),t=So.get(el.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===ite)&&(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(ute,"getCORSOpts");function lte(){return So.get(el.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??nte}a(lte,"getHeaderTimeoutConfig")});var zg={};Ve(zg,{disableNATS:()=>dte,publishToStream:()=>Wf,setNATSReplicator:()=>$g,setPublishToStream:()=>fte,setSubscription:()=>Qg,start:()=>_te});function _te(){$f.default.get(Yf.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&hte()}function dte(e=!0){K0=e}function fte(e,t){Wf=e,Qg=t}function hte(){if(K0||process.env._DISABLE_NATS)return;let e=Mn(),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];$g(s,r,i)}}Jg((r,n)=>{$g(r.tableName,r.databaseName,r),n&&Q0(r)}),!k0&&(k0=!0)}function $g(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 Ft{static{a(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[Le],record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[Le]})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[Le],record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this[Le],record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[Le]})}static defineSchema(i){Q0(i)}static subscribe(){let i=new On;return Qg(t,e,i),i}static subscribeOnThisThread(i){return i<Ete}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 Vf(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=W0;return i}a(n,"getNATSTransaction")}function Q0(e){let t=$f.default.get(Yf.default.CONFIG_PARAMS.CLUSTERING_NODENAME);Wf(`${Kg.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,Wg.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 V0,Kg,Wg,$0,Y0,$f,Yf,Kf,K0,Wf,Qg,Ete,W0,k0,Vf,Yg,z0=Ae(()=>{ge();bn();V0=v(It()),Kg=v(nt()),Wg=v(Ts());uc();$0=v(Xg()),Y0=v(wr()),$f=v(j()),Yf=v(M()),Kf=v(V());a(_te,"start");a(dte,"disableNATS");Wf=V0.publishToStream,Qg=$0.setSubscription;a(fte,"setPublishToStream");Ete=2;a(hte,"assignReplicationSource");a($g,"setNATSReplicator");a(Q0,"publishSchema");Vf=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=$f.default.get(Yf.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,f=l.operation=="put"?"upsert":l.operation;u||(Kf.trace(`Sending transaction event ${f}`),_=u={operation:f,schema:s,table:d,__origin:{user:this.user?.username,timestamp:t,node_name:r}},u.hash_values=c,f!=="delete"&&f!=="invalidate"&&(u.records=o)),u.table===d&&u.operation===f?(o.push(l.record),c.push(l.id)):_=_.next={operation:f,table:d,id:l.id,record:l.record},l.expiresAt&&(_.expiresAt=l.expiresAt)}u&&n.push(Wf(`${Kg.SUBJECT_PREFIXES.TXN}.${s}.${u.table}`,(0,Wg.createNatsTableStreamName)(s,u.table),void 0,u)?.catch(l=>{throw Kf.error("An error has occurred trying to replicate transaction",u,l),l.statusCode=504,l}))}return Promise.all(n)}},Yg=class extends Vf{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,Y0.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};W0=new Yg});var uB=T(go=>{"use strict";var{isMainThread:mte,parentPort:nl,threadId:tl}=require("worker_threads"),{Socket:pte,createServer:Ste}=require("net"),{createServer:Tte,IncomingMessage:gte}=require("http"),{createServer:Rte}=require("https"),{readFileSync:Ba,unlinkSync:J0,existsSync:Ate}=require("fs"),xn=V(),Ge=j(),Rr=M(),{server:Jf}=(nr(),ee(Ii)),{WebSocketServer:Ote}=require("ws"),{createServer:bte}=require("tls"),{getTicketKeys:Nte,restartNumber:yte,getWorkerIndex:X0}=et(),{Headers:rB}=(Bd(),ee(vM)),{recordAction:rl,recordActionBinary:Ite}=(Us(),ee(qu)),{Request:nB,createReuseportFd:j0}=(kf(),ee(Vg)),{checkMemoryLimit:wte}=Vi(),sB=require("tls"),Z0=sB.createSecureContext;sB.createSecureContext=function(e){if(!e.cert||!e.key)return Z0(e);let t={...e};delete t.key,delete t.cert;let r=Z0(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};if(process.env.DEV_MODE)try{require("inspector").open(9229)}catch(e){yte<=1&&xn.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:GEe,CONFIG_PARAMS:Cte}=Rr;Ge.initSync();var Lte=Ge.get(Cte.HTTP_SESSIONAFFINITY),us={};go.registerServer=rR;go.httpServer=nR;go.deliverSocket=tR;go.startServers=iB;go.when_components_loaded=null;Jf.http=nR;Jf.request=Pte;Jf.socket=vte;Jf.ws=Bte;var jg=[],Qf=[],Dte,To={},zf={},Mte=[],Zg=[];function iB(){return go.when_components_loaded=sR().loadRootComponents(!0).then(()=>{nl?.on("message",t=>{let{port:r,fd:n,data:s}=t;if(n)tR(n,r,s);else if(t.requestId)Ute(t);else if(t.type===Rr.ITC_EVENT_TYPES.SHUTDOWN){xn.trace("received shutdown request",tl);for(let i in us){let o=us[i],c;o.closeIdleConnections&&(setInterval(()=>{o.closeIdleConnections()},25).unref(),setTimeout(()=>{o.closeAllConnections(),xn.info("Closed all http connections",i,tl)},4e3).unref()),o.close?.(()=>{if(Ge.get(Rr.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&X0()==0)try{J0(Ge.get(Rr.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET))}catch{}clearInterval(c),setTimeout(()=>{console.log("forced close server",i,tl),o.cantCleanupProperly||xn.warn("Had to forcefully exit the thread",tl),process.exit(0)},5e3).unref()})}if(process.env.DEV_MODE)try{require("inspector").close()}catch(i){console.error("Could not close debugger",i)}}}).ref();let e=[];if(j0&&!Lte)for(let t in us){let r=us[t];if(isNaN(t)&&X0()==0){Ate(t)&&J0(t),e.push(new Promise((s,i)=>{r.listen({path:t},()=>{s(),xn.info("Domain socket listening on "+t)}).on("error",i)}));continue}let n;try{n=j0(+t,"::")}catch(s){console.error(`Unable to bind to port ${t}`,s);continue}e.push(new Promise((s,i)=>{r.listen({fd:n},()=>{s(),xn.trace("Listening on port "+t,tl)}).on("error",i)}))}Promise.all(e).then(()=>{nl?.postMessage({type:Rr.ITC_EVENT_TYPES.CHILD_STARTED})})})}a(iB,"startServers");mte||iB();function tR(e,t,r){let n=e?.read?e:new pte({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=us[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=us[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):o<5?i(o+1):(xn.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}a(tR,"deliverSocket");var eB=new Map;function Ute(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=eB.get(s),r){case"connection":i=tR(void 0,t),eB.set(s,i),i.write=(c,u,_)=>(nl.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),_&&_(),!0),i.end=(c,u,_)=>(nl.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),_&&_(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),nl.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(Ute,"proxyRequest");function rR(e,t,r=!0){!+t&&t!==Ge.get(Rr.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&(t=parseInt(Ge.get(Rr.CONFIG_PARAMS.HTTP_PORT),10));let n=us[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",tB),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else us[t]=e;e.on("unhandled",tB)}a(rR,"registerServer");function oB(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=[],Ge.get(Rr.CONFIG_PARAMS.HTTP_PORT)!=null&&t.push({port:Ge.get(Rr.CONFIG_PARAMS.HTTP_PORT),secure:Ge.get(Rr.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),Ge.get(Rr.CONFIG_PARAMS.HTTP_SECUREPORT)!=null&&t.push({port:Ge.get(Rr.CONFIG_PARAMS.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&Ge.get(Rr.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:Ge.get(Rr.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET),secure:!1}),t}a(oB,"getPorts");function nR(e,t){for(let{port:r,secure:n}of oB(t))aB(r,n,t?.isOperationsServer),typeof e=="function"?Zg[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||r}):(e.isSecure=n,rR(e,r,!1)),zf[r]=eR(Zg,r),Dte=eR(Mte,r)}a(nR,"httpServer");function aB(e,t,r){if(!To[e]){let n=r?"operationsApi_network":"http",s={keepAliveTimeout:Ge.get(n+"_keepAliveTimeout"),headersTimeout:Ge.get(n+"_headersTimeout"),requestTimeout:Ge.get(n+"_timeout")},i=Ge.get(n+"_mtls");if(t){n=r?"operationsApi_":"";let c=Ge.get(n+"tls_privateKey"),u=Ge.get(n+"tls_certificate"),_=Ge.get(n+"tls_certificateAuthority");Object.assign(s,{allowHTTP1:!0,key:Ba(c),ciphers:Ge.get("tls_ciphers"),cert:Ba(u),ca:_&&Ba(_),requestCert:!!i,ticketKeys:Nte()})}let o=wte();To[e]=(t?Rte:Tte)(s,async(c,u)=>{try{let l=performance.now(),d=new nB(c,u);r&&(d.isOperationsServer=!0);let f=await zf[e](d);if(!f){if(d._nodeResponse.statusCode)return;f=cB(d)}if(o?f.headers?.set?.("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"):f.headers?.set?.("Server","HarperDB"),f.status===-1){for(let B of f.headers||[])u.setHeader(B[0],B[1]);return c.baseRequest=d,u.baseResponse=f,To[e].emit("unhandled",c,u)}let E=f.status||200,h=performance.now(),p=h-l,S=f.body,A;if(!f.handlesHeaders){let B=f.headers||new rB;if(S?S.length>=0&&(typeof S=="string"?B.set("Content-Length",Buffer.byteLength(S)):B.set("Content-Length",S.length),A=!0):(B.set("Content-Length","0"),A=!0),B.append){let K=`hdb;dur=${p.toFixed(2)}`;f.wasCacheMiss&&(K+=", miss"),B.append("Server-Timing",K,!0)}u.writeHead(E,B&&(B[Symbol.iterator]?Array.from(B):B)),A&&u.end(S)}let I=d.handlerPath,w=d.method;if(rl(p,"duration",I,w,f.wasCacheMiss==null?void 0:f.wasCacheMiss?"cache-miss":"cache-hit"),Ite(E<400,"success",I,w),!A)if(S?.pipe){S.pipe(u),S.destroy&&u.on("close",()=>{S.destroy()});let B=0;S.on("data",K=>{B+=K.length}),S.on("end",()=>{rl(performance.now()-h,"transfer",I,w),rl(B,"bytes-sent",I,w)})}else S?.then?S.then(B=>{u.end(B)},_):u.end(S)}catch(l){_(l)}function _(l){let d=l.headers;u.writeHead(l.statusCode||500,d&&(d[Symbol.iterator]?Array.from(d):d)),u.end(l.toString()),l.statusCode?l.statusCode===500?xn.warn(l):xn.info(l):xn.error(l)}a(_,"onError")}),t&&(To[e].on("secureConnection",c=>{c._parent.startTime&&rl(performance.now()-c._parent.startTime,"tls-handshake",e),rl(c.isSessionReused(),"tls-reused",e)}),To[e].isSecure=!0),rR(To[e],e)}return To[e]}a(aB,"getHTTPServer");function eR(e,t){let r=cB;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(eR,"makeCallbackChain");function cB(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new rB}}a(cB,"unhandled");function Pte(e,t){nR(e,{requestOnly:!0,...t})}a(Pte,"onRequest");function vte(e,t){let r;if(t.securePort){let n=Ge.get("tls_privateKey"),s=Ge.get("tls_certificate"),i=t.mtls?.certificateAuthority||Ge.get("tls_certificateAuthority");r=bte({ciphers:Ge.get("tls_ciphers"),key:Ba(n),cert:Ba(s),ca:i&&Ba(i),requestCert:!!t.mtls},e),us[t.securePort]=r}return t.port&&(r=Ste(e),us[t.port]=r),r}a(vte,"onSocket");Object.defineProperty(gte.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 Bte(e,t){for(let{port:r,secure:n}of oB(t)){Qf[r]||(Qf[r]=new Ote({server:aB(r,n)}),Qf[r].on("connection",async(i,o)=>{try{let c=new nB(o);c.isWebSocket=!0;let u=zf[r](c),_=o.headers["sec-websocket-protocol"]||"";for(let l=0;l<jg.length;l++){let d=jg[l];if(d.protocol){if(d.protocol===_){d.listener(i,c,u);break}}else d.listener(i,c,u)}}catch(c){xn.warn("Error handling WebSocket connection",c)}}),Qf[r].on("error",i=>{console.log("Error in setting up WebSocket server",i)}));let s=t?.subProtocol||"";jg.push({listener:e,protocol:s}),zf[r]=eR(Zg,r)}}a(Bte,"onWebSocket");function tB(e,t){t.writeHead(404),t.end(`Not found
|
|
25
|
+
`)}a(tB,"defaultNotFound")});async function fB({clientId:e,user:t,clean:r,will:n}){let s;if(e&&!r){let i=await iR.getResource(e,{});s=new cR(e,t,i),i&&(s.sessionWasPresent=!0)}else{if(e){let i=await iR.get(e);i&&i.delete()}s=new jf(e,t)}return n&&(n.id=e,n.user={username:t?.username},sl.put(n)),s}function oR(){return Xf++,Xf>65500&&(Xf=1),Xf}function aR(e,t,r=e){let{topic:n,retain:s}=e;e.data=t,e.async=!0,e.authorize=!0;let i=di.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 Qe(r,()=>s?t===void 0?o.delete(e,r):o.put(e,e.data,r):o.publish(e,e.data,r))}var lB,Ro,_B,dB,iR,sl,Xf,jf,cR,EB=Ae(()=>{ge();Ru();lB=v(wr()),Ro=v(V());zi();_B=v(et()),dB=v(uB());nr();iR=_t({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"}]}}]}),sl=_t({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,_B.getWorkerIndex)()===0&&(async()=>{await dB.when_components_loaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of sl.search({})){let t=e.data,r=Object.assign({},e);r.user?.username&&(r.user=await lt.getUser(r.user.username)),Qe(r,()=>{try{aR(r,t)}finally{sl.delete(e.id,r)}})}})();a(fB,"getSession");Xf=1;a(oR,"getNextMessageId");jf=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;subscriptions=[];awaitingAcks;sessionWasPresent;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,n){let{topic:s,rh:i,startTime:o}=t,c=s.indexOf("?"),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(A=>A.topic===s),d;l?(d=i>0,l.end(),this.subscriptions.splice(this.subscriptions.indexOf(l),1)):d=i===2;let f={search:u,async:!0,authorize:!0,user:this.user,startTime:o,omitCurrent:d,url:""};o&&(0,Ro.trace)("Resuming subscription from",s,"from",o);let E=di.getMatch(_);if(!E){let A=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw A.statusCode=404,A}if(f.url=E.relativeURL,f.url.indexOf("+")>-1||f.url.indexOf("#")>-1){let A=f.url.slice(1);if(A.indexOf("#")>-1&&A.indexOf("#")!==A.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(f.isCollection=!0,A.indexOf("+")===A.length-1)f.onlyChildren=!0,f.url="/"+A.slice(0,A.length-1);else{let I=A.split("/"),w;for(let F=0;F<I.length;F++)if(I[F].indexOf("+")>-1)if(I[F]==="+")w=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&w)throw new Error("Filters can not be combined");let B=!0;I[I.length-1]==="#"&&(I.length--,B=!1),w&&(n=a(F=>{let P=F.id;if(!Array.isArray(P)||B&&P.length!==I.length)return!1;for(let Q=0;Q<I.length;Q++)if(I[Q]!=="+"&&I[Q]!==P[Q])return!1;return!0},"filter"));let K=I.indexOf("+");f.url="/"+(K>-1?I.slice(0,K):I).concat("").join("/")}}let h=E.path,p=E.Resource,S=await Qe(f,async()=>{let A=await p.subscribe(f);if(!A)throw new Error(`No subscription was returned from subscribe for topic ${s}`);if(!A[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);return(async()=>{for await(let I of A)try{let w;if(I.type&&I.type!=="put"&&I.type!=="delete"&&I.type!=="message"&&I.type!=="patch"||n&&!n(I))continue;r?(I.topic=s,w=this.needsAcknowledge(I)):(I.acknowledge?.(),w=oR());let B=I.id;Array.isArray(B)&&(B=ma(B)),B==null&&(B=""),this.listener(h+"/"+B,I.value,w,t)}catch(w){(0,Ro.warn)(w)}})(),A});return S.topic=s,S.qos=t.qos,this.subscriptions.push(S),S}resume(){}needsAcknowledge(t){let r=oR();return t.acknowledge&&(this.awaitingAcks||(this.awaitingAcks=new Map),this.awaitingAcks.set(r,t.acknowledge)),r}acknowledge(t){let r=this.awaitingAcks?.get(t);r&&(this.awaitingAcks.delete(t),r())}async removeSubscription(t){let r=this.subscriptions.find(n=>n.topic===t);if(r)return r.end(),!0}async publish(t,r){return t.user=this.user,aR(t,r)}setListener(t){this.listener=t}disconnect(t){let r={};Qe(r,async()=>{if(!t){let n=await sl.get(this.sessionId,r);n?.doesExist()&&await aR(n,n.data,r)}await sl.delete(this.sessionId,r)}).catch(n=>{(0,Ro.warn)(`Error publishing MQTT will for ${this.sessionId}`,n)});for(let n of this.subscriptions)n.end();this.subscriptions=[]}};a(aR,"publish");cR=class extends jf{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=oR(),n={topic:t.topic,timestamp:t.timestamp};return t.acknowledge&&(n.acknowledge=t.acknowledge),this.awaitingAcks.set(r,n),r}acknowledge(t){let r=this.awaitingAcks.get(t);this.awaitingAcks.delete(t),r.acknowledge?.();let n=r.topic;for(let[,s]of this.awaitingAcks)if(s.topic===n&&s.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===n){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,Ro.trace)("Received ack",n,r.timestamp),this.sessionRecord.update();return}}for(let s of this.sessionRecord.subscriptions)s.topic===n&&(s.startTime=r.timestamp);this.sessionRecord.update()}async addSubscription(t,r){await this.resumeSubscription(t,r);let{qos:n,startTime:s}=t;return n>0&&!s&&(this.sessionRecord.subscriptions=this.subscriptions.map(i=>{let o=i.startTime;return o||(o=i.startTime=(0,lB.getNextMonotonicTime)()),(0,Ro.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),iR.put(this.sessionRecord)),t.qos}}});var uR={};Ve(uR,{bypassAuth:()=>Hte,start:()=>xte});function Hte(){TB=!0}function xte({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){let o=e.mqtt={requireAuthentication:i},c,u=r?.mtls;return n&&(c=e.ws((_,l,d)=>{if(_.protocol==="mqtt"){let{onMessage:f,onClose:E}=pB(_,(h,p)=>{if(_.send(h),p&&_._socket.writableNeedDrain)return new Promise(S=>this._socket.once("drain",S))},l,Promise.resolve(d).then(()=>l?.user),o);_.on("message",f),_.on("close",E),_.on("error",h=>{(0,Ar.info)("WebSocket error",h)})}},{subProtocol:"mqtt"})),(t||s)&&(c=e.socket(async _=>{let l;if(u)if(_.authorized)try{let E=u.user;l!==null&&((E===void 0||E==="Common Name"||E==="CN")&&(E=_.getPeerCertificate().subject.CN),l=await e.getUser(E,null,null))}catch(E){(0,Ar.error)(E)}else return(0,Ar.info)(`Unauthorized connection attempt, no authorized client certificate provided, error: ${_.authorizationError}`),_.end();!l&&TB&&_.remoteAddress.includes("127.0.0.1")&&(l=await(0,SB.getSuperUser)());let{onMessage:d,onClose:f}=pB(_,E=>_.write(E),null,l,o);_.on("data",d),_.on("close",f),_.on("error",E=>{(0,Ar.info)("Socket error",E)})},{port:t,securePort:s,mtls:u})),c}function pB(e,t,r,n,s){mB||(mB=!0,Fu(d=>{Zf>0&&d.push({metric:"mqtt-connections",connections:Zf,byThread:!0})}));let i;Zf++;let o,c={protocolVersion:4},u=(0,tE.parser)({protocolVersion:5});function _(d){u.parse(d)}a(_,"onMessage");function l(){Zf--,i||(i=!0,o?.disconnect(),ln(!1,"connection","mqtt","disconnect"))}return a(l,"onClose"),u.on("packet",async d=>{n?.then&&(n=await n),o?.then&&await o;try{switch(d.cmd){case"connect":if(c.protocolVersion=d.protocolVersion,d.username)try{n=await lt.getUser(d.username,d.password.toString(),r),(0,eE.get)(ls.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&hB.notify({username:n.username,status:ls.AUTH_AUDIT_STATUS.SUCCESS,type:ls.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,eE.get)(ls.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&hB.error({username:n.username,status:ls.AUTH_AUDIT_STATUS.FAILURE,type:ls.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),f({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return ln(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(d,n),d.will){let w=e.deserialize||(e.deserialize=co(r?.headers.get?.("content-type")));d.will.data=d.will.payload?.length>0?w(d.will.payload):void 0,delete d.will.payload}o=fB({user:n,...d}),o=await o}catch(w){return(0,Ar.error)(w),ln(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:w.code||5,returnCode:w.code||128})}ln(!0,"connection","mqtt","connect"),f({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((w,B,K,F)=>{try{let P=w.indexOf("/",1),Q=P>0?w.slice(0,P):w;f({cmd:"publish",topic:w,payload:E(B),messageId:K||Math.floor(Math.random()*1e8),qos:F.qos},Q)}catch(P){(0,Ar.error)(P),o?.disconnect()}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let h=[];for(let w of d.subscriptions){let B;try{B=(await o.addSubscription(w,w.qos>=1)).qos||0}catch(K){(0,Ar.error)(K),B=c.protocolVersion<5?128:K.statusCode===403?135:K.statusCode===404?143:128}h.push(B)}await o.committed,f({cmd:"suback",granted:h,messageId:d.messageId});break;case"unsubscribe":{let w=[];for(let B of d.unsubscriptions)w.push(o.removeSubscription(B)?0:17);f({cmd:"unsuback",granted:w,messageId:d.messageId});break}case"pubrel":f({cmd:"pubcomp",messageId:d.messageId,reasonCode:0});return;case"publish":let p=d.qos===2?"pubrec":"puback",S=e.deserialize||(e.deserialize=co(r?.headers.get?.("content-type"))),A=d.payload?.length>0?S(d.payload):void 0,I;try{I=await o.publish(d,A)}catch(w){(0,Ar.warn)(w),d.qos>0&&f({cmd:p,messageId:d.messageId,reasonCode:128},d.topic);break}d.qos>0&&f({cmd:p,messageId:d.messageId,reasonCode:I===!1?144:0},d.topic);break;case"pubrec":f({cmd:"pubrel",messageId:d.messageId,reasonCode:0});break;case"pubcomp":case"puback":o.acknowledge(d.messageId);break;case"pingreq":f({cmd:"pingresp"});break;case"disconnect":i=!0,o?.disconnect(!0),ln(!0,"connection","mqtt","disconnect"),e.close?e.close():e.end();break}}catch(h){(0,Ar.error)(h),f({cmd:"disconnect"})}function f(h,p){let S=(0,tE.generate)(h,c);t(S),kr(S.length,"bytes-sent",p,h.cmd,"mqtt")}a(f,"sendPacket");function E(h){return Ei(h,r)}a(E,"serialize")}),{onMessage:_,onClose:l}}var tE,SB,eE,ls,Ar,hB,TB,mB,Zf,gB=Ae(()=>{tE=require("mqtt-packet");EB();SB=v(rn());pa();Us();nr();eE=v(j()),ls=v(M()),Ar=v(V()),hB=(0,Ar.loggerWithTag)("auth-event"),TB=(0,eE.get)(ls.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(Hte,"bypassAuth");a(xte,"start");Zf=0;a(pB,"onSocket")});var Qd={};Ve(Qd,{component_errors:()=>xa,loadComponent:()=>rE,loadComponentDirectories:()=>CB,setErrorReporter:()=>kte});function CB(e,t){t&&(_R=t),e&&(dR=e);let r=[];if((0,Fn.existsSync)(lR)){let s=(0,Fn.readdirSync)(lR,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,At.join)(lR,o);r.push(rE(c,_R,"hdb",!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(rE(n,_R,n,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{wB=!0})}function kte(e){ol=e}async function rE(e,t,r,n,s,i){if(!AB.has(e)){AB.set(e,!0),s&&(dR=s);try{let o;n&&(xa=new Map);let c=(0,At.join)(e,n?"harperdb-config.yaml":"config.yaml");(0,Fn.existsSync)(c)?o=n?(0,IB.getConfigObj)():(0,OB.parseDocument)((0,Fn.readFileSync)(c,"utf8"),{simpleKeys:!0}).toJSON():o=fR;let u=[],_=n;for(let l in o){let d=o[l];if(xa.set(n?l:(0,At.basename)(e),!1),!d)continue;let f,E=d.package;try{if(E){let I=e,w;for(;!(0,Fn.existsSync)(w=(0,At.join)(I,"node_modules",l));)if(I=(0,At.dirname)(I),I.length<(0,yB.getHdbBasePath)().length){w=null;break}if(w)f=await rE(w,t,r,!1),_=!0;else throw new Error(`Unable to find package ${l}:${E}`)}else f=Gte[l];if(!f)continue;u.push(f);let h=a(I=>(I.origin=r,_t(I)),"ensureTable"),p=d.network||(d.port||d.securePort)&&d,S=p?.securePort||p?.https&&p.port,A=!p?.https&&p?.port;if(Ha.isMainThread&&(f=await f.startOnMainThread?.({server:lt,ensureTable:h,port:A,securePort:S,resources:t,...d})||f,n&&p))for(let I of[A,S])try{if(+I&&!RB.includes(I)){let w=ER.get(hR.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);w&&il.default.warn("Session affinity is not recommended and may cause memory leaks"),(w||!Gf)&&(RB.push(I),v0(I,w))}}catch(w){console.error("Error listening on socket",I,w,l)}if(t.isWorker&&(f=await f.start?.({server:lt,ensureTable:h,port:A,securePort:S,resources:t,...d})||f),dR.set(f,!0),(f.handleFile||f.handleDirectory)&&d.files){if(d.files.includes(".."))throw(0,NB.handleHDBError)("Can not reference parent directories");let I=(0,At.join)(e,d.files).replace(/\\/g,"/"),w=I.indexOf("/*");if(w>-1&&d.files!==fR[l]?.files&&!(0,Fn.existsSync)(I.slice(0,w)))throw new Error(`The path '${I.slice(0,w)}' does not exist and cannot be used as the base of the resolved 'files' path value '${d.files}'`);let B=(0,At.basename)(e),K=d.path||"/";K=K.startsWith("/")?K:K.startsWith("./")?"/"+B+K.slice(2):K==="."?"/"+B:"/"+B+"/"+K;let F,P,Q;if(d.root){let z=d.root;z.startsWith("/")&&(z=z.slice(1)),z.endsWith("/")&&(z=z.slice(0,-1)),z+="/",P=(0,At.join)(e,z)}else(Q=I.indexOf("/*"))>-1&&(P=I.slice(0,Q+1),F=(0,At.relative)(e,P));let Y=!1;if(Ha.isMainThread&&f.setupDirectory&&(Y=await f.setupDirectory?.(K,P,t)),t.isWorker&&f.handleDirectory&&(Y=await f.handleDirectory?.(K,P,t)),Y)continue;for(let z of await(0,bB.default)(I,{onlyFiles:!1,objectMode:!0})){let{path:re,dirent:Ie}=z;_=!0;let ne=(0,At.relative)(e,re).replace(/\\/g,"/");if(F)if(ne.startsWith(F))ne=ne.slice(F.length+1);else throw new Error(`The root path '${d.root}' does not reference a valid part of the file path '${ne}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`);let ct=K+(K.endsWith("/")?"":"/")+ne;try{if(Ie.isFile()){let de=await qte(re);Ha.isMainThread&&await f.setupFile?.(de,ct,re,t),t.isWorker&&await f.handleFile?.(de,ct,re,t)}else Ha.isMainThread&&await f.setupDirectory?.(ct,re,t),t.isWorker&&await f.handleDirectory?.(ct,re,t)}catch(de){de.message=`Could not load ${Ie.isFile()?"file":"directory"} '${re}'${d.module?" using '"+d.module+"'":""} for application '${e}' due to: ${de.message}`,ol?.(de),((0,Fa.getWorkerIndex)()===0?console:il.default).error(de),t.set(d.path||"/",new al(de)),xa.set(n?l:(0,At.basename)(e),de.message)}}}}catch(h){h.message=`Could not load component '${l}' for application '${(0,At.basename)(e)}' due to: ${h.message}`,ol?.(h),((0,Fa.getWorkerIndex)()===0?console:il.default).error(h),t.set(d.path||"/",new al(h),null,!0),xa.set(n?l:(0,At.basename)(e),h.message)}}if(Ha.isMainThread&&!wB&&i&&(0,Fa.watchDir)(e,async()=>CB()),o.extensionModule)return await Yl((0,At.join)(e,o.extensionModule));if(!_&&t.isWorker){let l=`${e} did not load any modules, resources, or files, is this a valid component?`;ol?.(new Error(l)),((0,Fa.getWorkerIndex)()===0?console:il.default).error(l),xa.set((0,At.basename)(e),l)}}catch(o){console.error(`Could not load application directory ${e}`,o),o.message=`Could not load application due to ${o.message}`,ol?.(o),t.set("",new al(o))}}}var Fn,At,Ha,OB,ER,hR,bB,Fa,il,NB,yB,Fte,IB,qte,lR,dR,wB,_R,xa,Gte,fR,RB,AB,ol,al,zd=Ae(()=>{Fn=require("fs"),At=require("path"),Ha=require("worker_threads"),OB=require("yaml"),ER=v(j()),hR=v(M());TO();OO();bO();BP();b0();L0();bB=v(require("fast-glob")),Fa=v(et()),il=v(V());_h();nr();NB=v(Z());bn();ge();B0();yB=v(j()),Fte=v(G0());qd();z0();gB();IB=v(Ur());kf();({readFile:qte}=Fn.promises),lR=ER.get(hR.CONFIG_PARAMS.COMPONENTSROOT),dR=new Map,xa=new Map;a(CB,"loadComponentDirectories");Gte={REST:Ef,rest:Ef,graphqlSchema:lh,jsResource:fh,fastifyRoutes:Pg,login:hh,static:vg,operationsApi:Fte,customFunctions:{},http:{},clustering:zg,authentication:Au,mqtt:uR},fR={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(fR,"static",{value:{files:"web/**"}});RB=[],AB=new Map;a(kte,"setErrorReporter");a(rE,"loadComponent");al=class extends Ft{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 sR=T((fhe,DB)=>{var{isMainThread:LB}=require("worker_threads"),{getTables:Vte}=(ge(),ee(xe)),{loadComponentDirectories:$te,loadComponent:Yte}=(zd(),ee(Qd)),{resetResources:Kte}=(Ru(),ee(PM)),Wte=RT(),Qte=Ur(),{dirname:zte}=require("path"),{getConnection:Jte}=It(),Xte=j(),jte=M(),mR=new Map;async function Zte(e=!1){!LB&&Xte.get(jte.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Jte();try{LB&&await Wte()}catch(n){console.error(n)}let t=Kte();Vte(),t.isWorker=e,await Yte(zte(Qte.getConfigFilePath()),t,"hdb",!0,mR),await $te(mR,t);let r=[];for(let[n]of mR)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}a(Zte,"loadRootComponents");DB.exports.loadRootComponents=Zte});var et=T((hhe,Ri)=>{"use strict";var{Worker:ere,MessageChannel:tre,parentPort:_s,isMainThread:RR,threadId:rre,workerData:Fs}=require("worker_threads"),{PACKAGE_ROOT:nre}=M(),{join:vB,isAbsolute:sre,extname:ire}=require("path"),{server:BB}=(nr(),ee(Ii)),{watch:ore,readdir:are}=require("fs/promises"),{totalmem:MB}=require("os"),cl=M(),HB=j(),qs=V(),{randomBytes:cre}=require("crypto"),{_assignPackageExport:ure}=require("../index"),lre=M(),UB=1024*1024,gi=[],dn=[],_re=50,AR=1e4,dre="restart",xB="request_thread_info",FB="resource_report",qB="thread_info",GB="added-port",fre="ack",pR;ure("threads",dn);Ri.exports={startWorker:SR,restartWorkers:bR,shutdownWorkers:Sre,workers:gi,setMonitorListener:yre,onMessageFromWorkers:Tre,onMessageByType:WB,broadcast:Rre,broadcastWithAcknowledgement:Ore,setChildListenerByType:pre,getWorkerIndex:kB,getWorkerCount:VB,getTicketKeys:$B,setMainIsWorker:hre,setTerminateTimeout:Ere,restartNumber:Fs?.restartNumber||1};dn.onMessageByType=WB;dn.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=dn.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};var OR;function Ere(e){AR=e}a(Ere,"setTerminateTimeout");function kB(){return Fs?Fs.workerIndex:OR?0:void 0}a(kB,"getWorkerIndex");function VB(){return Fs?Fs.workerCount:OR?1:void 0}a(VB,"getWorkerCount");function hre(e){OR=e}a(hre,"setMainIsWorker");var nE;function $B(){return nE||(nE=RR?cre(48):Fs.ticketKeys,nE)}a($B,"getTicketKeys");Object.defineProperty(BB,"workerIndex",{get(){return kB()}});Object.defineProperty(BB,"workerCount",{get(){return VB()}});var YB={[xB](e,t){bre(t)},[FB](e,t){Nre(t,e)}};function SR(e,t={}){let r=process.constrainedMemory?.()||MB();r=Math.min(r,MB(),2e4*UB);let n=HB.get(cl.CONFIG_PARAMS.MAXHEAPMEMORY)??Math.max(Math.floor(r/UB/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],o=[];for(let u of dn){let _=new tre;_.existingPort=u,i.push(_),o.push(_.port2)}ire(e)||(e+=".js");let c=new ere(sre(e)?e:vB(nre,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:t.threadCount,name:t.name,restartNumber:Ri.exports.restartNumber,ticketKeys:$B()},transferList:o},t));for(let{port1:u,existingPort:_}of i)_.postMessage({type:GB,port:u,threadId:c.threadId},[u]);return iE(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>SR(e,t),c.on("error",u=>{console.error("Worker error:",u),qs.error("Worker error:",u)}),c.on("exit",u=>{gi.splice(gi.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<_re?(t.unexpectedRestarts=c.unexpectedRestarts+1,SR(e,t)):qs.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",u=>{YB[u.type]?.(u,c)}),gi.push(c),wre(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(SR,"startWorker");var mre=[cl.THREAD_TYPES.HTTP];async function bR(e=null,t=2,r=!0){if(RR){if(r){let{loadRootComponents:o}=sR();await o()}Ri.exports.restartNumber++,t<1&&(t=t*gi.length);let n=[],s=[];for(let o of gi.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;qs.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:Ri.exports.restartNumber,type:cl.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=mre.indexOf(o.name)>-1,u=new Promise(_=>{let l=setTimeout(()=>o.terminate(),AR*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 f=a(E=>{E.type===lre.ITC_EVENT_TYPES.CHILD_STARTED&&(qs.trace("Worker has started",_.threadId),d(),s.splice(s.indexOf(l)),_.off("message",f))},"startListener");qs.trace("Waiting for worker to start",_.threadId),_.on("message",f)});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}=Pd();r&&(e==="http"||!e)&&HB.get(cl.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else _s.postMessage({type:dre,workerType:e})}a(bR,"restartWorkers");function pre(e,t){YB[e]=t}a(pre,"setChildListenerByType");function Sre(e){return bR(e,1/0,!1)}a(Sre,"shutdownWorkers");var KB=[];function Tre(e){KB.push(e)}a(Tre,"onMessageFromWorkers");var TR=new Map;function WB(e,t){let r=TR.get(e);r||TR.set(e,r=[]),r.push(t)}a(WB,"onMessageByType");var gre=10;async function Rre(e){let t=0;for(let r of dn)try{r.postMessage(e),t++>gre&&(t=0,await new Promise(setImmediate))}catch(n){qs.error("Unable to send message to worker",n)}}a(Rre,"broadcast");var sE=new Map,Are=1;function Ore(e){return new Promise(t=>{let r=0;for(let n of dn)try{let s=Are++,i=a(()=>{sE.delete(s),--r===0&&t(),n!==_s&&--n.refCount===0&&n.unref()},"ack_handler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,sE.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,o]of sE)o.port===n&&o()})),n.postMessage(e),r++}catch(s){qs.error("Unable to send message to worker",s)}r===0&&t()})}a(Ore,"broadcastWithAcknowledgement");function bre(e){e.postMessage({type:qB,workers:QB()})}a(bre,"sendThreadInfo");function QB(){let e=Date.now();return gi.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(QB,"getChildWorkerInfo");function Nre(e,t){e.resources=t,e.resources.updated=Date.now()}a(Nre,"recordResourceReport");var gR;function yre(e){gR=e}a(yre,"setMonitorListener");var Ire=1e3,PB=!1;function wre(){PB||(PB=!0,setInterval(()=>{for(let e of gi){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}gR&&gR()},Ire).unref())}a(wre,"startMonitoring");var Cre=1e3;if(_s){iE(_s);for(let e=0,t=Fs.addPorts.length;e<t;e++){let r=Fs.addPorts[e];r.threadId=Fs.addThreadIds[e],iE(r)}setInterval(()=>{let e=process.memoryUsage();_s.postMessage({type:FB,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Cre).unref(),pR=a(()=>new Promise((e,t)=>{_s.on("message",r),_s.postMessage({type:xB});function r(n){n.type===qB&&(_s.off("message",r),e(n.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else pR=QB;Ri.exports.getThreadInfo=pR;function iE(e,t){dn.push(e),e.on("message",r=>{if(r.type===GB)r.port.threadId=r.threadId,iE(r.port);else if(r.type===fre){let n=sE.get(r.id);n&&n()}else{for(let s of KB)s(r,e);let n=TR.get(r.type);if(n)for(let s of n)try{s(r,e)}catch(i){qs.error(i)}}}).on("close",()=>{dn.splice(dn.indexOf(e),1)}).on("exit",()=>{dn.splice(dn.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(iE,"addPort");if(RR){let e,t,r=a(async(n,s)=>{s&&(e=s);for(let i of await are(n,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(vB(n,i.name));try{for await(let{filename:i}of ore(n,{persistent:!1}))t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await bR(),console.log("Reloaded HarperDB components")},100)}catch(i){console.warn("Error trying to watch component directory",n,i)}},"watch_dir");Ri.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else _s.on("message",async e=>{let{type:t}=e;t===cl.ITC_EVENT_TYPES.SHUTDOWN&&(Ri.exports.restartNumber=e.restartNumber,_s.unref(),setTimeout(()=>{qs.warn("Thread did not voluntarily terminate",rre),process.exit(0)},AR).unref())})});var Lw={};Ve(Lw,{AUDIT_STORE_OPTIONS:()=>sH,createAuditEntry:()=>Jl,openAuditStore:()=>uE,readAuditEntry:()=>Pt,setAuditRetention:()=>Dre,transactionKeyEncoder:()=>nH});function uE(e){let t=e.auditStore=e.openDB(eH.AUDIT_STORE_NAME,sH);t.rootStore=e;let r=[];t.addDeleteRemovalCallback=function(i,o){return r[i]=o,{remove(){delete r[i]}}};let n=null;function s(i=oE){clearTimeout(n),n=setTimeout(async()=>{if(t.rootStore.status==="closed")return;let o=0,c;try{for(let{key:u,value:_}of t.getRange({start:0,snapshot:!1,end:Date.now()-NR})){if((_[0]&15)===wR){let l=Pt(_),d=l.tableId;r[d]?.(l.recordId)}if(c=t.remove(u),await new Promise(setImmediate),++o>=Lre){i=10;break}}await c}finally{o===0&&(i=Math.min(i<<1,NR/10)),s(i)}},i).unref()}return a(s,"scheduleAuditCleanup"),t.scheduleAuditCleanup=s,(0,cE.getWorkerIndex)()===(0,cE.getWorkerCount)()-1&&s(oE),t}function Dre(e,t=oE){NR=e,oE=t}function Jl(e,t,r,n,s,i,o){let c=iH[i];if(!c)throw new Error(`Invalid audit entry type ${i}`);let u=1;n&&(n>1?qa.setFloat64(0,n):fn.set(Lh),u=9),f(0),f(t),d(r),qa.setFloat64(u,e),u+=8,s?d(s):fn[u++]=0,fn[n?8:0]=c;let l=fn.subarray(0,u);if(o)return Buffer.concat([l,o]);return l;function d(E){let h=u;u+=1,u=(0,Ga.writeKey)(E,fn,u);let p=u-h-1;p>127?p>16383?(LR.error("Key or username was too large for audit entry",E),u=h+1,fn[h]=0):(fn.copyWithin(h+2,h+1,u),qa.setUint16(h,p|32768),u++):fn[h]=p}function f(E){E<128?fn[u++]=E:E<16384?(qa.setUint16(u,E|32768),u+=2):E<1056964608?(qa.setUint32(u,E|3221225472),u+=4):(fn[u]=255,qa.setUint32(u+1,E),u+=5)}}function Pt(e){try{let t=e.dataView||(e.dataView=new CR(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:iH[n&7],tableId:i,get recordId(){return ZB(e,c,u)},version:_,previousLocalTime:r,get user(){return d>l?ZB(e,l,d):void 0},getValue(f,E,h){if(n&yR||n&IR&&!E)return f.decoder.decode(e.subarray(t.position));if(n&IR&&h)return DR(f.getEntry(this.recordId),h,f)}}}catch{return LR.error("Reading audit entry error",e),{}}}function ZB(e,t,r){let n=e.subarray(t,r);return(0,Ga.readKey)(n,0,r-t)}var Ga,aE,eH,tH,cE,rH,LR,fn,qa,nH,sH,NR,Lre,oE,yR,IR,zB,wR,JB,XB,jB,iH,CR,Li=Ae(()=>{Ga=require("ordered-binary"),aE=v(j()),eH=v(ht()),tH=v(M()),cE=v(et()),rH=v(J());mc();LR=v(V());lE();(0,aE.initSync)();fn=Buffer.alloc(1024),qa=new DataView(fn.buffer,fn.byteOffset,1024),nH={writeKey(e,t,r){return e===hc?(t.set(hc,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,Ga.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,Ga.readKey)(e,t,r)}},sH={encoding:"binary",keyEncoder:nH},NR=(0,rH.convertToMS)((0,aE.get)(tH.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,Lre=1e3,oE=1e4;a(uE,"openAuditStore");a(Dre,"setAuditRetention");yR=16,IR=32,zB=1,wR=2,JB=3,XB=4,jB=5,iH={put:zB|yR,[zB]:"put",delete:wR,[wR]:"delete",message:JB|yR,[JB]:"message",invalidate:XB,[XB]:"invalidate",patch:jB|IR,[jB]:"patch"};a(Jl,"createAuditEntry");a(Pt,"readAuditEntry");CR=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(ZB,"readKeySafely")});var MR={};Ve(MR,{add:()=>_E,applyReverse:()=>oH,getRecordAtTime:()=>DR,rebuildUpdateBefore:()=>dE});function _E(e,t,r){isNaN(e[t])?e[t]=r.value:e[t]+=r.value}function dE(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,_E(r,n,s)}}else r||(r={}),r[n]=e[n];return r}function oH(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=Mre[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=aH}}function DR(e,t,r){let n=r.rootStore.auditStore,s=Object.assign({},e.value),i=e.localTime;for(;i>t;){let u=n.get(i),_=Pt(u);switch(_.type){case"put":s=_.getValue(r);break;case"patch":oH(s,_.getValue(r));break;case"delete":s=null}i=_.previousLocalTime}let o={},c=0;for(let u in s)s[u]===aH&&(o[u]=!0,c++);for(;c>0&&i>0;){let u=n.get(i),_=Pt(u),l;switch(_.type){case"put":l=_.getValue(r);break;case"patch":l=_.getValue(r);break}for(let d in l)o[d]&&(s[d]=l[d],o[d]=!1,c--);i=_.previousLocalTime}if(c>0)for(let u in o)s[u]=null;return s}var Mre,aH,lE=Ae(()=>{Li();a(_E,"add");_E.reverse=function(e,t,r){isNaN(e[t])||(e[t]-=r.value)};Mre={add:_E};a(dE,"rebuildUpdateBefore");a(oH,"applyReverse");aH={};a(DR,"getRecordAtTime")});function Vr(e){return e[Mt]||(e[Mt]=Object.create(null))}function pE(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[Re])},set(l){return o.set(this,l)},configurable:!0};else{switch(o.type){case"String":u=a(function(l){if(!(typeof l=="string"||l==null&&o.nullable!==!1))throw new En.ClientError(`${c} must be a string, attempt to assign ${l}`);Vr(this)[c]=l},"set");break;case"ID":u=a(function(l){if(!(typeof l=="string"||l?.length>0&&l.every?.(d=>typeof d=="string")||l==null&&o.nullable!==!1))throw new En.ClientError(`${c} must be a string, attempt to assign ${l}`);Vr(this)[c]=l},"set");break;case"Float":case"Number":u=a(function(l){if(!(typeof l=="number"||l==null&&o.nullable!==!1))throw new En.ClientError(`${c} must be a number, attempt to assign ${l}`);Vr(this)[c]=l},"set");break;case"Int":u=a(function(l){if(!(l>>0===l||l==null&&o.nullable!==!1))if(typeof l=="number"&&Math.abs((l>>0)-l)<=1)l=Math.round(l);else throw new En.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${l}`);Vr(this)[c]=l},"set");break;case"Long":u=a(function(l){if(!(Math.round(l)===l&&Math.abs(l)<=9007199254740992||l==null&&o.nullable!==!1))if(typeof l=="number"&&Math.abs(l)<=9007199254740992)l=Math.round(l);else throw new En.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${l}`);Vr(this)[c]=l},"set");break;case"BigInt":u=a(function(l){if(!(typeof l=="bigint"||l==null&&o.nullable!==!1))if(typeof l=="string"||typeof l=="number")l=BigInt(l);else throw new En.ClientError(`${c} must be a number, attempt to assign ${l}`);Vr(this)[c]=l},"set");break;case"Boolean":u=a(function(l){if(!(typeof l=="boolean"||l==null&&o.nullable!==!1))throw new En.ClientError(`${c} must be a boolean, attempt to assign ${l}`);Vr(this)[c]=l},"set");break;case"Date":u=a(function(l){if(!(l instanceof Date||l==null&&o.nullable!==!1))if(typeof l=="string"||typeof l=="number")l=new Date(l);else throw new En.ClientError(`${c} must be a Date, attempt to assign ${l}`);Vr(this)[c]=l},"set");break;case"Bytes":u=a(function(l){if(!(l instanceof Uint8Array||l==null&&o.nullable!==!1))throw new En.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${l}`);Vr(this)[c]=l},"set");break;case"Any":case void 0:u=a(function(l){Vr(this)[c]=l},"set");break;default:u=a(function(l){if(!(typeof l=="object"||l==null&&o.nullable!==!1))throw new En.ClientError(`${c} must be an object, attempt to assign ${l}`);Vr(this)[c]=l},"set")}_={get(){let l=this[Mt];if(l&&c in l){let f=l[c];if(f?.__op__){let E=this[Ne]?.[c];return f.update(E)}return f}let d=this[Ne]?.[c];if(d&&typeof d=="object"){let f=cH(d,o);if(f)return l||(l=this[Mt]=Object.create(null)),l[c]=f}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[Mt];return u?.[o]!==void 0?u[o]:this[Ne]?.[o]}),i("set",function(o,c){let u=n[o];if(u)return u.set.call(this,c);if(t.sealed)throw new En.ClientError("Can not add a property to a sealed table schema");Vr(this)[o]=c}),i("deleteProperty",function(o){Vr(this)[o]=void 0}),i("toJSON",function(){let o=this[Mt],c;for(let _ in o){c||(c=Object.assign({},this[Ne]));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[Ne])),Object.assign(c,this)),c||this[Ne]}),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 cH(e,t){let r;switch(e.constructor){case Object:return t?((r=t.TrackedObject)||(t.TrackedObject=r=class{static{a(this,"TrackedObject")}constructor(s){this[Ne]=s}},pE(r,t)),new r(e)):new fE(e);case Array:let n=new hE(e.length);n[Ne]=e;for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=cH(o,t?.elements)),n[s]=o}return n;default:return e}}function $_(e){let t=e[Mt],r;for(let s in t){r||(r=Object.assign({},e[Ne]));let i=t[s];if(i&&typeof i=="object")if(i.__op__){let o=r[s];i=i.update(o)}else i=$_(i);r[s]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[Ne])),Object.assign(r,e)),r||e[Ne]}function Oo(e,t=e[Mt]){let r;if(e[Ne]&&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=Oo(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[Ne]));let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=MR[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=Oo(s);r[n]=s}return r?Object.freeze(r):e[Ne]||e}function EE(e){let t=e[Ne];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[Ao]||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?.[Ne]===s){if(EE(i))return!0}else return!0}}else{let r=e[Mt];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[Ne]===i){if(EE(s))return!0}else return!0}else return!0}}return!1}var En,Mt,fE,Ao,hE,mE,Y_=Ae(()=>{bn();En=v(Z());lE();Mt=Symbol("own-data");a(Vr,"getChanges");a(pE,"assignTrackedAccessors");a(cH,"trackObject");fE=class{static{a(this,"GenericTrackedObject")}constructor(t){this[Ne]=t}};pE(fE,{});a($_,"collapseData");a(Oo,"deepFreeze");a(EE,"hasChanges");Ao=Symbol.for("has-array-changes"),hE=class extends Array{static{a(this,"TrackedArray")}[Ao];constructor(t){super(t)}splice(...t){return this[Ao]=!0,super.splice(...t)}push(...t){return this[Ao]=!0,super.push(...t)}pop(){return this[Ao]=!0,super.pop()}unshift(...t){return this[Ao]=!0,super.unshift(...t)}shift(){return this[Ao]=!0,super.shift()}};hE.prototype.constructor=Array;mE=class{constructor(t){this.value=t}static{a(this,"Addition")}__op__="add";update(t){return(+t||0)+this.value}}});var op={};Ve(op,{CONTEXT:()=>Re,ID_PROPERTY:()=>Le,IS_COLLECTION:()=>hn,RECORD_PROPERTY:()=>Ne,Resource:()=>Ft,snake_case:()=>Pre,transformForSelect:()=>TE});function Pre(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function uH(e,t){if(ul=!1,e==="")return null;if(e=e.slice(1),e.indexOf("/")===-1)return e===""?(ul=!0,null):(e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e)));let r=e.split("/"),n=new PR;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){ul=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}function $r(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[Re]||o):i?typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(l=s,c=l[this.primaryKey]??null,o=i[Re]||i):l=i:(l=s,c=l[Le]??l[this.primaryKey]??null):i?o=i[Re]||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 E of s){if(typeof E=="object"&&E)break;c.push(E)}c.length===0?c=null:(c.length===1&&(c=c[0]),u.slice&&(u=u.slice(c.length,u.length),u.length===0&&(u=null,_=!1)))}else{if(typeof(c=s.url)=="string"){let E=c.indexOf("?");if(E>-1){let p=this.parseQuery(c.slice(E+1));u?u=Object.assign(p,u):u=p,c=c.slice(0,E)}let h=this.parsePath(c,o,u);h?.id!==void 0?(h.query&&(u?u=Object.assign(h.query,u):u=h.query),_=h.isCollection,c=h.id):c=h}c===void 0&&(c=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 E=this.getResource(c,o,d);return E.then?E.then(f):f(E)}else return d.resetTransaction=!0,Qe(o,()=>{let E=this.getResource(c,o,d);return E.then?E.then(f):f(E)},d);function f(E){if(o.authorize){o.authorize=!1;let h=t.type==="read"?E.allowRead(o.user,u,o):t.type==="update"?E.doesExist?.()===!1?E.allowCreate(o.user,l,o):E.allowUpdate(o.user,l,o):t.type==="create"?E.allowCreate(o.user,l,o):E.allowDelete(o.user,u,o);if(h?.then)return h.then(p=>{if(!p)throw new SE(o.user);return typeof l?.then=="function"?l.then(S=>e(E,u,o,S)):e(E,u,o,l)});if(!h)throw new SE(o.user)}return typeof l?.then=="function"?l.then(h=>e(E,u,o,h)):e(E,u,o,l)}a(f,"authorizeActionOnResource")}}function Yr(e,t){let r=new dH.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 UR(e,t,r){let n=e[Ne];if(n){let s=e[Mt];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 TE(e,t){let r=t?.propertyResolvers,n=t[Re],s;if(typeof e=="string")return a(function o(c){return c.then?c.then(o):Array.isArray(c)?c.map(o):UR(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(UR(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(f=>f&&typeof f=="object"?c(f):f);let _={},l=i(UR(u,r,n)),d;for(let f of e){let E=l(f);E===void 0&&o&&(E=null),E?.then?(d||(d=[]),d.push(E.then(h=>_[f.name||f]=h))):_[f.name||f]=E}return d?Promise.all(d).then(()=>_):_},"transform")}else throw new Error("Invalid select argument type "+typeof e);function i(o){return c=>{if(typeof c=="string")return o(c);if(typeof c=="object")if(c.name){s||(s={});let u=s[c.name];if(!u){let l=r[c.name]?.definition?.tableClass;u=s[c.name]=TE(c.select||c,l)}let _=o(c.name);return u(_)}else return o(c);else return c}}a(i,"handleProperty")}var lH,_H,dH,Re,Le,hn,Ne,Ure,Ft,SE,ul,PR,bn=Ae(()=>{lH=require("crypto");uc();_H=require("../index"),dH=v(Z());Y_();zi();ff();Re=Symbol.for("context"),Le=Symbol.for("primary-key"),hn=Symbol("is-collection"),Ne=Symbol("stored-record"),Ure={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Ft=class{static{a(this,"Resource")}static transactions;constructor(t,r){this[Le]=t;let n=r?.[Re];this[Re]=n!==void 0?n:r||null}static get=$r(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 _=TE(u,t.constructor);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",resetTransaction:!0,ensureLoaded:!0,async:!0});static put=$r(function(t,r,n,s){if(Array.isArray(s)&&t[hn]){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):Yr(t,"put")},{hasContent:!0,type:"update"});static patch=$r(function(t,r,n,s){return t.patch?t.patch(s,r):Yr(t,"patch")},{hasContent:!0,type:"update"});static delete=$r(function(t,r,n,s){return t.delete?t.delete(r):Yr(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,lH.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),Qe(n,()=>{let i=new this(s,n),o=i.update?i.update(r):Yr(i,"update");return n.newLocation=s,n.createdResource=!0,o?.then?o.then(()=>s):s})}static invalidate=$r(function(t,r,n,s){return t.invalidate?t.invalidate(r):Yr(t,"delete")},{hasContent:!1,type:"update"});static post=$r(function(t,r,n,s){return t[Le]!=null&&t.update?.(),t.post(s,r)},{hasContent:!0,type:"create"});static connect=$r(function(t,r,n,s){return t.connect?t.connect(s,r):Yr(t,"connect")},{hasContent:!0,type:"read"});static subscribe=$r(function(t,r,n,s){return t.subscribe?t.subscribe(r):Yr(t,"subscribe")},{type:"read"});static publish=$r(function(t,r,n,s){return t[Le]!=null&&t.update?.(),t.publish?t.publish(s,r):Yr(t,"publish")},{hasContent:!0,type:"create"});static search=$r(function(t,r,n,s){let i=t.search?t.search(r):Yr(t,"search"),o=n.select;if(o&&n.hasOwnProperty("select")&&i!=null&&!i.selectApplied){let c=TE(o,t.constructor);return i.map(c)}return i},{type:"read"});static query=$r(function(t,r,n,s){return t.search?t.search(s,r):Yr(t,"search")},{hasContent:!0,type:"read"});static copy=$r(function(t,r,n,s){return t.copy?t.copy(s,r):Yr(t,"copy")},{type:"create"});static move=$r(function(t,r,n,s){return t.move?t.move(s,r):Yr(t,"move")},{type:"delete"});post(t){if(this[hn])return this.constructor.create(this[Le],t,this[Re]);Yr(this,"post")}static isCollection(t){return t?.[hn]}static coerceId(t){return t}static parseQuery(t){return df(t)}static parsePath(t,r,n){let s=t.indexOf(".");if(s>-1){let o=t.slice(s+1);t=t.slice(0,s);let c=r?.headers&&Ure[o];if(c)r.headers.set("accept",c);else if(n)n.property=o;else return{query:{property:o},id:uH(t,this),isCollection:ul}}let i=uH(t,this);return ul?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r[Re],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(_=>_[Le]===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[Le],f=_.get(d);f?f.push(l):_.set(d,[l])}i.resourceCache.length=0,i.resourceCache.asMap=_}}}else s=new c(t,i);return o&&(s[hn]=!0),s}subscribe(t){return new On}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new On}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[Le]}getContext(){return this[Re]}};Ft.prototype[Re]=null;(0,_H._assignPackageExport)("Resource",Ft);a(Pre,"snake_case");SE=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(uH,"pathToId");PR=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a($r,"transactional");a(Yr,"missingMethod");a(UR,"selectFromObject");a(TE,"transformForSelect")});function EH(e,t,r,n){let s=e.primaryStore.env.path,i=e.primaryStore.tableId;ka||((0,gE.onMessageByType)(fH,l=>{hH(l.path)}),ka=Object.create(null));let o=ka[s]||(ka[s]=[]);o.auditStore=e.auditStore,o.lastTxnTime==null&&(o.lastTxnTime=Date.now());let c=o[i];c||(c=o[i]=new Map,c.envs=o,c.tableId=i,c.store=e.primaryStore),t=ma(t);let u=new BR(r);u.startTime=n;let _=c.get(t);return _?_.push(u):(c.set(t,_=[u]),_.tables=c,_.key=t),u.subscriptions=_,u}function hH(e,t){if(!ka)return;let r=ka[e];if(!r)return;try{r.auditStore.resetReadTxn()}catch(s){throw s.message+=" in "+e,s}let n;for(let{key:s,value:i}of r.auditStore.getRange({start:r.lastTxnTime,exclusiveStart:!0})){r.lastTxnTime=s;let o=Pt(i),c=r[o.tableId];if(!c)continue;let u=o.recordId,_,l=ma(o.recordId),d=0;do{let f=c.get(l);if(f){for(let h of f)if(!(d>0&&!(h.includeDescendants&&!(h.onlyChildren&&d>1)))){if(h.startTime>=s){(0,vR.info)("omitting",u,h.startTime,s);continue}try{if(h.crossThreads===!1&&!t)continue;let p;h.supportsTransactions&&h.txnInProgress!==o.version&&(p=!0,h.txnInProgress||(n?n.push(h):n=[h]),h.txnInProgress=o.version),h.listener(u,o,s,p)}catch(p){console.error(p),(0,vR.info)(p)}}}if(l==null)break;let E=l.lastIndexOf?.("/",l.length-2);E>-1?l=l.slice(0,E):l=null,d++}while(!0)}if(n)for(let s of n)s.txnInProgress=null,s.listener(null,{type:"end_txn"},r.lastTxnTime,!0)}function mH(e,t){let r=t||e,n=r.env;if(t&&!t.cache&&(t.cache=new Map),!n.hasBroadcastListener){n.hasBroadcastListener=!0;let s=n.path;r.on("aftercommit",()=>{(0,gE.broadcast)({type:fH,path:s}),hH(s,!0)})}}var vR,gE,fH,ka,Hhe,BR,pH=Ae(()=>{vR=v(V()),gE=v(et());uc();Ru();Li();fH="transaction",Hhe=Buffer.alloc(4096);a(EH,"addSubscription");BR=class extends On{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(hH,"notifyFromTransactionData");a(mH,"listenToCommits")});var pg={};Ve(pg,{coerceType:()=>RE,makeTable:()=>bE,setServerUtilities:()=>Vre,updateResource:()=>AE});function bE(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:o,databaseName:c,auditStore:u,schemaDefined:_,dbisDB:l}=e,{expirationMS:d,evictionMS:f,audit:E,trackDeletes:h}=e,{attributes:p}=e;p||(p=[]),mH(i,u);let S=Uh(i,n,u),A=0,I,w,B,K={},F=Promise.resolve(),P,Q,Y;for(let k of p)(k.assignCreatedTime||k.name==="__createdtime__")&&(P=k),(k.assignUpdatedTime||k.name==="__updatedtime__")&&(Q=k),k.expiresAt&&(Y=k),k.isPrimaryKey&&(K=k);let z,re=[],Ie=[],ne=1,ct=2,de={},ut={},Tn=864e5,oA,Cl,Vs,aA=!1,kE,Nx=i.getRange({start:!1,end:!1}).constructor,yx=10,Ix=6;E&&lA();class Ke extends Ft{static name=s;static primaryStore=i;static auditStore=u;static primaryKey=t;static tableName=s;static indices=r;static audit=E;static databasePath=o;static databaseName=c;static attributes=p;static expirationTimer;static createdTimeProperty=P;static updatedTimeProperty=Q;static propertyResolvers;static sources=[];static get expirationMS(){return d}static dbisDB=l;static schemaDefined=_;static sourcedFrom(m,g){g&&(this.sourceOptions=g,(g.expiration||g.eviction||g.scanInterval)&&this.setTTLExpiration(g)),g?.intermediateSource?(m.intermediateSource=!0,this.sources.unshift(m)):this.sources.push(m),w=m.get&&(!m.get.reliesOnPrototype||m.prototype.get);let N=a(b=>{let y=this.sources.slice(0,-1);if(y=y.filter(L=>L[b]&&(!L[b].reliesOnPrototype||L.prototype[b])),y.length>0)if(y.length===1){let L=y[0];return(D,U,x)=>{if(D?.source!==L)return L[b](U,x,D)}}else return(L,D,U)=>{let x=[];for(let W of y){if(L?.source===W)break;x.push(W[b](D,U,L))}return Promise.all(x)}},"getApplyToIntermediateSource"),R=this.sources[this.sources.length-1],O=a(b=>{if(R[b]&&(!R[b].reliesOnPrototype||R.prototype[b]))return(y,L,D)=>{if(!y?.source)return R[b](L,D,y)}},"getApplyToCanonicalSource");return de={put:O("put"),patch:O("patch"),delete:O("delete"),publish:O("publish")},ut={put:N("put"),patch:N("patch"),delete:N("delete"),publish:N("publish"),invalidate:N("invalidate")},(async()=>{let b=!1,y=a(async(L,D)=>{let U=L.value,x=L.table?tt[c][L.table]:Ke;if(c===qn.SYSTEM_SCHEMA_NAME&&(L.table===qn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||L.table===qn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(b=!0),L.id===void 0&&(L.id=U[x.primaryKey],L.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(L));L.source=m;let W=await x.getResource(L.id,D,Va);switch(L.type){case"put":return W._writeUpdate(U,!0,Va);case"patch":return W._writeUpdate(U,!1,Va);case"delete":return W._writeDelete(Va);case"publish":return W._writePublish(U,Va);case"invalidate":return W.invalidate(Va);default:Je.error("Unknown operation",L.type,L.id)}},"writeUpdate");try{let L=m.subscribe;L&&h==null&&(h=!0);let D=m.subscribeOnThisThread?m.subscribeOnThisThread((0,bo.getWorkerIndex)()):(0,bo.getWorkerIndex)()===0,U=L&&D&&await m.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(U){let x;for await(let W of U)try{if(!(W.type==="transaction"?W.writes[0]:W)){Je.error("Bad subscription event",W);continue}if(W.source=m,x)if(W.beginTxn)x.resolve();else{y(W,x);continue}if(W.type==="end_txn")continue;let le=Qe(W,()=>{if(W.type==="transaction"){let te=[];for(let se of W.writes)try{te.push(y(se,W))}catch(He){throw He.message+=" writing "+JSON.stringify(se)+" of event "+JSON.stringify(W),He}return Promise.all(te)}else if(W.type==="define_schema"){let te=this.attributes.slice(0),se;for(let He of W.attributes)te.find(ie=>ie.name===He.name)||(te.push(He),se=!0);se&&(_t({table:s,database:c,attributes:te,origin:"cluster"}),ml.signalSchemaChange(new pl.SchemaEventMsg(process.pid,qn.OPERATIONS_ENUM.CREATE_TABLE,c,s)))}else return W.beginTxn?(x=W,y(W,W),new Promise(te=>{x.resolve=te})):y(W,W)});b&&(await le,ml.signalUserChange(new pl.UserEventMsg(process.pid))),W.onCommit&&(le?.then?le.then(W.onCommit):W.onCommit())}catch(Se){Je.error("error in subscription handler",Se)}}}catch(L){Je.error(L)}})(),this}static getResource(m,g,N){let R=super.getResource(m,g,N);if(m!=null){Qa(m);try{if(R.hasOwnProperty(Ne))return R;if(typeof m=="object"&&m&&!Array.isArray(m))throw new Error(`Invalid id ${JSON.stringify(m)}`);let O=!N?.async||i.cache?.get(m),b=Nr(g),y=b.getReadTxn();if(y?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return VE(m,g,{transaction:y},O,L=>{if(L?AE(R,L):R[Ne]=null,g.onlyIfCached&&g.noCacheStore){if(!R.doesExist())throw new mn.ServerError("Entry is not cached",504)}else if(N?.ensureLoaded){let D=$E(m,L,g,R);if(D)return b?.disregardReadTxn(),R[HR]=!0,FR(D,U=>(AE(R,U),R))}return R})}catch(O){throw O.message.includes("Unable to serialize object")&&(O.message+=": "+JSON.stringify(m)),O}}return R}ensureLoaded(){let m=$E(this[Le],this[Kr],this[Re]);if(m)return this[HR]=!0,FR(m,g=>{this[Kr]=g,this[Ne]=g.value,this[El]=g.version})}static setTTLExpiration(m){if(typeof m=="number")d=m*1e3,f||(f=0);else if(m&&typeof m=="object")d=m.expiration*1e3,f=(m.eviction||0)*1e3,Tn=m.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(d<0)throw new Error("Expiration can not be negative");Tn=Tn||(d+f)/4,KE()}static enableAuditing(m=!0){E=m,m&&lA(),Ke.audit=m}static coerceId(m){return m===""?null:RE(m,K)}static async dropTable(){if(delete tt[c][s],c===o){for(let m of p)l.remove(Ke.tableName+"/"+m.name),r[m.name]?.drop();l.remove(Ke.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));ml.signalSchemaChange(new pl.SchemaEventMsg(process.pid,qn.OPERATIONS_ENUM.DROP_TABLE,c,s))}get(m){if(typeof m=="string")return this.getProperty(m);if(this[hn])return this.search(m);if(this[Le]===null){if(m?.conditions)return this.search(m);let g=Ke.getRecordCount();return{recordCount:g.recordCount,estimatedRecordRange:g.estimatedRange,records:"./",name:s,database:c,attributes:p}}if(m?.property)return this.getProperty(m.property);if(this.doesExist()||m?.ensureLoaded===!1||this[Re]?.returnNonexistent)return this}allowRead(m,g){let N=Dl(m);if(N?.read){if(N.isSuperUser)return!0;let R=N.attribute_permissions,O=g?.select;if(R?.length>0||aA&&O){if(g||(g={}),O){let b=R?.length>0&&xR(R,"read");g.select=O.map(y=>{let L=y.name||y;if(!b||b[L]){let D=Vs[L]?.definition?.tableClass;if(D){if(y.name||(y={name:y}),!D.prototype.allowRead.call(null,m,y))return!1;if(!y.select)return y.name}return y}}).filter(Boolean)}else g.select=R.filter(b=>b.read&&!Vs[b.attribute_name]).map(b=>b.attribute_name);return g}else return!0}}allowUpdate(m,g){let N=Dl(m);if(N?.update){let R=N.attribute_permissions;if(R?.length>0){let O=xR(R,"update");for(let b in g)if(!O[b])return!1;for(let b of R){let y=b.attribute_name;!b.update&&!(y in g)&&(g[y]=this.getProperty(y))}}return!0}}allowCreate(m,g){if(this[hn]){let N=Dl(m);if(N?.insert){let R=N.attribute_permissions;if(R?.length>0){let O=xR(R,"insert");for(let b in g)if(!O[b])return!1}else return!0}}else return this.allowUpdate(m,{})}allowDelete(m){return Dl(m)?.delete}update(m,g){if(!Nr(this[Re]))throw new Error("Can not update a table resource outside of a transaction");if(m===!1)return this;let R;return typeof m=="object"&&m&&(g?(Object.isFrozen(m)&&(m=Object.assign({},m)),this[Ne]={},this[Mt]=m):(R=this[Mt],R&&(m=Object.assign(R,m)),this[Mt]=R=m)),this._writeUpdate(this[Mt],g),this}addTo(m,g){if(typeof g=="number")this[ll]===TH?this.set(m,(+this.getProperty(m)||0)+g):(this[ll]||this.update(),this.set(m,new mE(g)));else throw new Error("Can not add a non-numeric value")}subtractFrom(m,g){if(typeof g=="number")return this.addTo(m,-g);throw new Error("Can not subtract a non-numeric value")}invalidate(m){let g=this[Re],N=this[Le];Qa(N),Nr(this[Re]).addWrite({key:N,store:i,invalidated:!0,entry:this[Kr],nodeName:this[Re]?.nodeName,before:de.invalidate?.bind(this,g,N),beforeIntermediate:ut.invalidate?.bind(this,g,N),commit:(O,b)=>{if(b?.version>O)return;let y=null;for(let L in r)y||(y={}),y[L]=this.getProperty(L);S(N,y,this[Kr],O,_l,E,this[Re],0,"invalidate")}})}static evict(m,g,N){let R=this.Source,O;if(!((w||E)&&(!g||(O=i.getEntry(m),!O||!g)||O.version!==N))){if(w){if(i.hasLock(m,O.version))return;let b;for(let y in r)b||(b={}),b[y]=g[y];if(b)return S(m,b,O,N,dl,null,null,0,null,!0)}return i.ifVersion(N,()=>{Ll(m,g,null)}),E?S(m,null,O,N,dl,null,null,0,null,!0):i.remove(m,N)}}lock(){throw new Error("Not yet implemented")}static operation(m,g){return m.table||=s,m.schema||=c,NH.operation(m,g)}put(m){this.update(m,!0)}patch(m){this.update(m,!1)}_writeUpdate(m,g,N){let R=this[Re],O=Nr(R),b=this[Le];Qa(b);let y=this[Kr];this[ll]=g?TH:qre;let L={key:b,store:i,entry:y,nodeName:R?.nodeName,validate:D=>{m||(m=this[Mt]),g||m&&EE(m)?(this.validate(m,!g),R?.source||(Q&&(m[Q.name]=Q.type==="Date"?new Date(D):Q.type==="String"?new Date(D).toISOString():D),g&&(t&&m[t]!==b&&(m[t]=b),P&&(y?.value?m[P.name]=y?.value[P.name]:m[P.name]=P.type==="Date"?new Date(D):P.type==="String"?new Date(D).toISOString():D),m=Oo(m)))):O.removeWrite(L)},before:g?de.put?()=>de.put(R,b,m):null:de.patch?()=>de.patch(R,b,m):de.put?()=>de.put(R,b,Oo(this)):null,beforeIntermediate:g?ut.put?()=>ut.put(R,b,m):null:ut.patch?()=>ut.patch(R,b,m):ut.put?()=>ut.put(R,b,Oo(this)):null,commit:(D,U,x)=>{x&&(R&&U?.version>(R.lastModified||0)&&(R.lastModified=U.version),this[Kr]=U,g||(this[Ne]=U?.value??null)),this[Mt]=m,this[El]=D;let W=U?.value,Se=m;if(this[ll]=0,U?.version>D)if(E){let He=U.localTime,ie=U.version;for(;Se&&(He>D||ie>D&&He>0);){let _e=u.get(He),ke=Pt(_e);if(ie=ke.version,ie>D)if(ke.type==="patch"){let Ue=ke.getValue(i);Se=dE(Se,Ue)}else(ke.type==="put"||ke.type==="delete")&&(Se=null);He=ke.previousLocalTime}}else g?Se=null:Se=dE(Se,W);let le=Oo(this,Se);this[Ne]=le;let te;g||(te=m),Ll(b,W,le);let se=g?"put":"patch";S(b,le,U,D,0,E,R,R.expiresAt||(d?d+Date.now():0),se,!1,te)}};O.addWrite(L)}async delete(m){if(typeof m=="string")return this.deleteProperty(m);if(this[hn]){for await(let g of this.search(m))(await Ke.getResource(g[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(m);return}return this[Ne]?this._writeDelete(m):!1}_writeDelete(m){let g=Nr(this[Re]),N=this[Le];Qa(N);let R=this[Re];return g.addWrite({key:N,store:i,resource:this,nodeName:R?.nodeName,before:de.delete?.bind(this,R,N),beforeIntermediate:ut.delete?.bind(this,R,N),commit:(O,b,y)=>{let L=b?.value;y&&(R&&b?.version>(R.lastModified||0)&&(R.lastModified=b.version),AE(this,b)),!(b?.version>O)&&(Ll(this[Le],L),Je.trace("Write delete entry",N,O),E||h?(S(N,null,this[Kr],O,0,E,this[Re],0,"delete"),E||KE()):i.remove(this[Le]))}}),!0}search(m){let g=this[Re],N=Nr(g);if(!m)throw new Error("No query provided");let R=m.conditions;R?R.length===void 0&&(R=R[Symbol.iterator]?Array.from(R):[R]):R=Array.isArray(m)?m:m[Symbol.iterator]?Array.from(m):[],this[Le]&&(R=[{attribute:null,comparator:"prefix",value:this[Le]}].concat(R));let O,b={};function y(oe,Ot){let je;switch(Ot){case"and":case void 0:if(oe.length<1)throw new Error('An "and" operator requires at least one condition');je=!0;break;case"or":if(oe.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+Ot)}let Ut=je&&{},gn;for(let Pe of oe){if(Pe.conditions){Pe.conditions=y(Pe.conditions,Pe.operator);continue}let Ze=Pe[0]??Pe.attribute,Rn=Ze==null?K:Ps(p,Ze);if(Rn){if(je){let Ni=Ti(Ze),Gn=Ut[Ni];Gn?(Gn.push(Pe),gn=!0):Ut[Ni]=[Pe]}Rn.type&&(Pe[1]===void 0?Pe.value=D(Pe.value,Rn):Pe[1]=D(Pe[1],Rn))}else if(Ze!=null)throw(0,mn.handleHDBError)(new Error,`${Ze} is not a defined attribute`,404)}if(m.enforceExecutionOrder)return oe;if(gn)for(let Pe in Ut){let Ze=Ut[Pe],Rn=Ze.length;if(Rn>1)for(let Ni=0;Ni<Rn;Ni++){let Gn=Ze[Ni];if(Gn.comparator==="ge"||Gn.comparator==="greater_than_equal")for(let $s=0;$s<Rn;$s++){let Mo=Ze[$s];(Mo.comparator==="le"||Mo.comparator==="less_than_equal")&&(Gn.comparator="between",Gn.value=[Gn.value,Mo.value],oe.splice(oe.indexOf(Mo),1))}if(Gn.comparator==="equals"||!Gn.comparator){for(let $s=0;$s<Rn;$s++)if($s!==Ni){let Mo=Ze[$s];oe.splice(oe.indexOf(Mo),1)}break}}}return oe}a(y,"prepareConditions");function L(oe,Ot){if(m.enforceExecutionOrder)return oe;for(let je of oe)je.conditions&&(je.conditions=L(je.conditions,je.operator));return oe.length>1&&Ot!=="or"?(0,bH.sortBy)(oe,ZT(Ke)):oe}a(L,"orderConditions");function D(oe,Ot){return Array.isArray(oe)?oe.map(je=>RE(je,Ot)):RE(oe,Ot)}a(D,"coerceTypedValues");let U=m.operator;(R.length>0||U)&&(R=y(R,U));let x=typeof m.sort=="object"&&m.sort,W;if(x&&U!=="or"){let oe=x.attribute;if(O=R.find(Ot=>Ti(Ot.attribute)===Ti(oe)),!O){if(!Ps(p,oe))throw(0,mn.handleHDBError)(new Error,`${Array.isArray(oe)?oe.join("."):oe} is not a defined attribute`,404);O={attribute:oe},R.push(O)}O.descending=!!x.descending}R=L(R,U),x&&(R[0]===O?x.next&&(W={dbOrderedAttribute:x.attribute,attribute:x.next.attribute,descending:x.next.descending,next:x.next.next}):(O&&R.splice(R.indexOf(O),1),W=x));function Se(oe,Ot){let je=oe[0];if(Ot==="or"){let Ut=te(je);for(let Pe=1;Pe<oe.length;Pe++){let Ze=oe[Pe],Rn=te(Ze);Ut=Ut.concat(Rn)}let gn=new Set;return Ut.filter(Pe=>{let Ze=Pe.key??Pe;return gn.has(Ze)?!1:(gn.add(Ze),!0)})}else{let Ut=te(je),gn=oe.slice(1).map(Pe=>$u(Pe,Ke,g,b)).filter(Boolean);return gn.length>0?cA(Ut,se,g,gn):Ut}}a(Se,"executeConditions");let le=m.reverse===!0;function te(oe){return oe.conditions?Se(oe.conditions,oe.operator):Vu(oe,N,oe.descending||le,Ke,m.allowFullScan,b)}a(te,"executeCondition");let se=m.select;if(R.length===0&&(R=[{attribute:t,comparator:"greater_than",value:!0}]),m.explain)return{conditions:R,operator:U,postOrdering:W,selectApplied:!!se};let He=N.useReadTxn(),ie=Se(R,U);(m.offset||m.limit!==void 0)&&(ie=ie.slice(m.offset,m.limit!==void 0?(m.offset||0)+m.limit:void 0));let _e=m.ensureLoaded!==!1,ke=Ke.transformEntryForSelect(se,g,b,_e,!0),Ue=Ke.transformToOrderedSelect(ie,se,W,g,ke);return Ue.onDone=()=>{Ue.results=null,N.doneReadTxn()},Ue.selectApplied=!0,Ue}static transformToOrderedSelect(m,g,N,R,O){let b=new Nx;if(N){m=cA(m,g,R,null);let y;b.iterate=function(){let D,U=m[Symbol.asyncIterator]?m[Symbol.asyncIterator]():m[Symbol.iterator](),x,W=N.dbOrderedAttribute,Se,le,te=!0;function se(ie){let _e=ie.next&&se(ie.next),ke=ie.descending;return(Ue,oe)=>{let Ot=YE(Ue,ie.attribute,R),je=YE(oe,ie.attribute,R),Ut=ke?(0,No.compareKeys)(je,Ot):(0,No.compareKeys)(Ot,je);return Ut===0?_e?.(Ue,oe)||0:Ut}}a(se,"createComparator");let He=se(N);return{async next(){let ie;if(D)if(ie=D.next(),ie.done){if(x)return b.onDone&&b.onDone(),ie}else return{value:await O(ie.value)};y=[],Se&&y.push(Se);do if(ie=await U.next(),ie.done){if(x=!0,y.length)break;return b.onDone&&b.onDone(),ie}else{let _e=ie.value;if(_e?.then&&(_e=await _e),W){let ke=YE(_e,W,R);if(te)te=!1,le=ke;else if(ke!==le){le=ke,Se=_e;break}}y.push(_e)}while(!0);return N.isGrouped,y.sort(He),D=y[Symbol.iterator](),ie=D.next(),ie.done?(b.onDone&&b.onDone(),ie):{value:await O(ie.value)}},return(){b.onDone&&b.onDone(),U.return()},throw(){b.onDone&&b.onDone(),U.throw()}}};let L=a(D=>{if(typeof g=="object"&&Array.isArray(D.attribute))for(let U=0;U<g.length;U++){let x=g[U],W;if(x.name===D.attribute[0]){for(W=x.sort||(x.sort={});W.next;)W=W.next;W.attribute=D.attribute.slice(1),W.descending=D.descending}else x===D.attribute[0]&&(g[U]=W={name:x,sort:{attribute:D.attribute.slice(1),descending:D.descending}})}D.next&&L(D.next)},"applySortingOnSelect");L(N)}else b.iterate=(m[Symbol.asyncIterator]||m[Symbol.iterator]).bind(m),b=b.map(O);return b}static transformEntryForSelect(m,g,N,R,O){if(m&&(m===t||m?.length===1&&m[0]===t)){let D=a(U=>U?.key??U,"transform");return m===t?D:m.asArray?U=>[D(U)]:U=>({[t]:D(U)})}let b;R&&w&&!m?.every(D=>{let U;return typeof D=="object"?U=D.name:U=D,r[U]||U===t})&&(b=!0);let y,L=a(D=>{let U;if(D){if(kE=D,U=D.value||D.deref?.(),!U&&(D.key===void 0||D.deref)){if(D=VE(D.key??D,g,{transaction:Nr(g).getReadTxn(),lazy:m?.length<4},!1,x=>x),D?.then)return D.then(L);U=D?.value}if(b&&(D.metadataFlags&(_l|dl)||D.expiresAt&&D.expiresAt<Date.now())){let x=$E(D.key??D,D,g);if(x?.then)return x.then(L)}}if(U==null)return O?$a.SKIP:U;if(m&&!(m[0]==="*"&&m.length===1)){let x,W=a((le,te)=>{let se;typeof le=="object"?se=le.name:se=le;let He=Vs?.[se],ie;if(He){let _e=N?.[se];if(_e)if(_e.fromRecord)ie=_e.fromRecord(U);else{let Ue=Ti(D.key);ie=_e.get(Ue),ie||(ie=[])}else ie=He(U,g,D);let ke=a(Ue=>{if(Ue&&typeof Ue=="object"){let oe=He.definition?.tableClass||Ke;y||(y={});let Ot=y[se]||(y[se]=oe.transformEntryForSelect(se===le?null:le.select||(Array.isArray(le)?le:null),g,_e,R));if(Array.isArray(Ue)){let je=[],Ut=oe.transformToOrderedSelect(Ue,le.select,typeof le.sort=="object"&&le.sort,g,Ot)[Symbol.asyncIterator](),gn=a(Ze=>{for(;!Ze.done;){if(Ze?.then)return Ze.then(gn);je.push(Ze.value),Ze=Ut.next()}te(je,se)},"nextValue"),Pe=gn(Ut.next());Pe&&(x||(x=[]),x.push(Pe));return}else if(Ue=Ot(Ue),Ue?.then){x||(x=[]),x.push(Ue.then(je=>te(je,se)));return}}te(Ue,se)},"handleResolvedValue");ie?.then?(x||(x=[]),x.push(ie.then(ke))):ke(ie);return}else ie=U[se],ie&&typeof ie=="object"&&se!==le&&(ie=this.transformEntryForSelect(le.select||le,g,null)({value:ie}));te(ie,se)},"selectAttribute"),Se;if(typeof m=="string")W(m,le=>{Se=le});else if(Array.isArray(m))if(m.asArray)Se=[],m.forEach((le,te)=>{le==="*"?m[te]=U:W(le,se=>Se[te]=se)});else{Se={};let le=m.forceNulls;for(let te of m)if(te==="*")for(let se in U)Se[se]=U[se];else W(te,(se,He)=>{se===void 0&&le&&(se=null),Se[He]=se})}else throw new mn.ClientError("Invalid select"+m);return x?Promise.all(x).then(()=>Se):Se}return U},"transform");return L}async subscribe(m){if(!u)throw new Error("Can not subscribe to a table without an audit log");E||_t({table:s,database:c,schemaDefined:_,attributes:p,audit:!0}),m||(m={});let g=!m.rawEvents,N=EH(Ke,this[Le]??null,function(y,L,D,U){try{let x=L.getValue?.(i,g);if(!x&&L.type==="patch"&&g){let W=i.getEntry(y);W?.version===L.version?x=W.value:x=L.getValue?.(i,!0,D)}this.send({id:y,timestamp:D,value:x,version:L.version,type:L.type,beginTxn:U})}catch(x){Je.error(x)}},m.startTime||0,this[hn]);this[hn]&&(N.includeDescendants=!0,m.onlyChildren&&(N.onlyChildren=!0)),m.crossThreads===!1&&(N.crossThreads=!1),m.supportsTransactions&&(N.supportsTransactions=!0);let R=this[Le],O=m.previousCount;O>1e3&&(O=1e3);let b=m.startTime;if(this[hn]){if(b){if(O)throw new mn.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:y,value:L}of u.getRange({start:b,exclusiveStart:!0})){let D=Pt(L);if(D.tableId!==n)continue;let U=D.recordId;(R==null||AH(R,U))&&N.send({id:U,timestamp:y,...D}),N.startTime=y}}else if(O){let y=[];for(let{key:L,value:D}of u.getRange({start:"z",end:!1,reverse:!0}))try{let U=Pt(D);if(U.tableId!==n)continue;let x=U.recordId;if(R==null||AH(R,x)){let W=U.getValue(i,g,L);if(y.push({id:x,timestamp:L,value:W,version:U.version,type:U.type}),--O<=0)break}}catch(U){Je.error("Error getting history entry",L,U)}for(let L=y.length;L>0;)N.send(y[--L]);y[0]&&(N.startTime=y[0].timestamp)}else if(!m.omitCurrent)for(let{key:y,value:L,version:D,localTime:U}of i.getRange({start:R??!1,end:R==null?void 0:[R,No.MAXIMUM_KEY],versions:!0}))L&&N.send({id:y,version:D,timestamp:U,value:L})}else{O&&!b&&(b=0);let y=this[Kr]?.localTime;if(y===Mh&&(i.cache?.delete(R),this[Kr]=i.getEntry(R),Je.warn("re-retrieved record",y,this[Kr]?.localTime),y=this[Kr]?.localTime),Je.trace("Subscription from",b,"from",R,y),b<y){let L=[],D=y;do{let U=u.get(D);if(U){m.omitCurrent=!0;let x=Pt(U),W=x.getValue(i,g,D);L.push({id:R,value:W,timestamp:D,...x}),D=x.previousLocalTime}else break;O&&O--}while(D>b&&O!==0);for(let U=L.length;U>0;)N.send(L[--U]);N.startTime=y}!m.omitCurrent&&this.doesExist()&&N.send({id:R,version:this[El],timestamp:y,value:this})}return m.listener&&N.on("data",m.listener),N}doesExist(){return!!(this[Ne]||this[ll])}publish(m,g){this._writePublish(m,g)}_writePublish(m,g){let N=Nr(this[Re]),R=this[Le]||null;Qa(R);let O=this[Re];N.addWrite({key:R,store:i,entry:this[Kr],nodeName:O?.nodeName,validate:()=>{this.validate(m)},before:de.publish?.bind(this,O,R,m),beforeIntermediate:ut.publish?.bind(this,O,R,m),commit:(b,y,L)=>{y===void 0&&h&&!E&&KE(),S(R,y?.value??null,y,y?.version||b,0,!0,O,y?.expiresAt,"message",!1,m)}})}validate(m,g){let N,R=a((O,b,y)=>{if(b.type&&O!=null)if(g&&O.__op__&&(O=O.value),b.properties){typeof O!="object"&&(N||(N=[])).push(`Property ${y} must be an object${b.type?" ("+b.type+")":""}`);let L=b.properties;for(let D=0,U=L.length;D<U;D++){let x=L[D],W=R(O[x.name],x,y+"."+x.name);W&&(O[x.name]=W)}}else switch(b.type){case"Int":(typeof O!="number"||O>>0!==O)&&(N||(N=[])).push(`Property ${y} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof O!="number"||!(Math.floor(O)===O&&Math.abs(O)<=9007199254740992))&&(N||(N=[])).push(`Property ${y} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof O!="number"&&(N||(N=[])).push(`Property ${y} must be a number`);break;case"ID":typeof O=="string"||O?.length>0&&O.every?.(L=>typeof L=="string")||(N||(N=[])).push(`Property ${y} must be a string, or an array of strings`);break;case"String":typeof O!="string"&&(N||(N=[])).push(`Property ${y} must be a string`);break;case"Boolean":typeof O!="boolean"&&(N||(N=[])).push(`Property ${y} must be a boolean`);break;case"Date":if(!(O instanceof Date)){if(typeof O=="string"||typeof O=="number")return new Date(O);(N||(N=[])).push(`Property ${y} must be a Date`)}break;case"BigInt":if(typeof O!="bigint"){if(typeof O=="string"||typeof O=="number")return BigInt(O);(N||(N=[])).push(`Property ${y} must be a bigint`)}break;case"Bytes":O instanceof Uint8Array||(N||(N=[])).push(`Property ${y} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(O)){if(b.elements)for(let L=0,D=O.length;L<D;L++){let U=O[L],x=R(U,b.elements,y+"[*]");x&&(O[L]=x)}}else(N||(N=[])).push(`Property ${y} must be a Buffer or Uint8Array`);break}b.nullable===!1&&O==null&&(N||(N=[])).push(`Property ${y} is required (and not does not allow null values)`)},"validateValue");for(let O=0,b=p.length;O<b;O++){let y=p[O];if(!y.relationship&&(!g||y.name in m)){let L=R(m[y.name],y,y.name);L&&(m[y.name]=L)}}if(N)throw new mn.ClientError(N.join(". "))}getUpdatedTime(){return this[El]}wasLoadedFromSource(){return w?!!this[HR]:void 0}static async addAttributes(m){let g=p.slice(0);for(let N of m){if(!N.name)throw new mn.ClientError("Attribute name is required");if(N.name.match(/[`/]/))throw new mn.ClientError("Attribute names cannot include backticks or forward slashes");g.push(N)}return _t({table:s,database:c,schemaDefined:_,attributes:g}),Ke.indexingOperation}static async removeAttributes(m){let g=p.filter(N=>!m.includes(N.name));return _t({table:s,database:c,schemaDefined:_,attributes:g}),Ke.indexingOperation}static getRecordCount(m){let g=i.getStats().entryCount,N=5e3,R=1e3,O;g>N&&!m?.exactCount&&(O=R);let b=0;for(let{value:y}of i.getRange({start:!0,lazy:!0,limit:O}))y!=null&&b++;if(O){let y=b;b=0;for(let{value:se}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:O}))se!=null&&b++;let L=O*2,D=(b+y)/L,U=Math.pow((b-y+1)/O/2,2)+D*(1-D)/L,x=Math.max(Math.sqrt(U)*g,1),W=Math.round(D*g),Se=Math.max(W-1.96*x,0),le=Math.min(W+1.96*x,g),te=Math.pow(10,Math.round(Math.log10(x)));return te>W&&(te=te/10),b=Math.round(W/te)*te,{recordCount:b,estimatedRange:[Math.round(Se),Math.round(le)]}}return{recordCount:b}}static updatedAttributes(){Vs=this.propertyResolvers={$id:(m,g,N)=>({value:N.key}),$updatedtime:(m,g,N)=>N.version,$record:(m,g,N)=>N?{value:m}:m};for(let m of this.attributes){m.resolve=null;let g=m.relationship;if(g)if(aA=!0,g.to)m.elements?.definition?(Vs[m.name]=m.resolve=(N,R,O)=>{let b=N[g.from?g.from:t],y=m.elements.definition.tableClass;return O?Vu({attribute:g.to,value:b},Nr(R).getReadTxn(),!1,y).asArray:y.search([{attribute:g.to,value:b}],R).asArray},m.set=()=>{throw new Error("Setting a one-to-many relationship property is not supported")},m.resolve.definition=m.elements.definition):console.error(`The one-to-many/many-to-many relationship property "${m.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(g.from){let N=m.definition||m.elements?.definition;N?(Vs[m.name]=m.resolve=(R,O,b)=>{let y=R[g.from];if(y!==void 0){if(m.elements){let L,D=y.map(U=>{let x=b?N.tableClass.primaryStore.getEntry(U,{transaction:Nr(O).getReadTxn()}):N.tableClass.get(U,O);return x?.then&&(L=!0),x});return g.filterMissing?L?Promise.all(D).then(U=>U.filter(OH)):D.filter(OH):L?Promise.all(D):D}return b?N.tableClass.primaryStore.getEntry(y,{transaction:Nr(O).getReadTxn()}):N.tableClass.get(y,O)}},m.set=(R,O)=>{if(Array.isArray(O)){let b=O.map(y=>y[Le]||y[N.tableClass.primaryKey]);R[g.from]=b}else{let b=O[Le]||O[N.tableClass.primaryKey];R[g.from]=b}},m.resolve.definition=m.definition||m.elements?.definition):console.error(`The relationship property "${m.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${m.name}" in table "${s}" must use either "from" or "to" arguments`)}pE(this,this)}static async deleteHistory(m=0){let g;for(let{key:N,value:R}of u.getRange({start:0,end:m}))await fl(),Pt(R).tableId===n&&(g=u.remove(N));await g}static async*getHistory(m=0,g=1/0){for(let{key:N,value:R}of u.getRange({start:m,end:g})){await fl();let O=Pt(R);O.tableId===n&&(yield{id:O.recordId,localTime:N,version:O.version,type:O.type,value:O.getValue(i,!0,N),user:O.user})}}static async getHistoryOfRecord(m){let g=[];if(m==null)throw new Error("An id is required");let N=i.getEntry(m);if(!N)return g;let R=N.localTime;if(!R)throw new Error("The entry does not have a local audit time");let O=0;do{await fl();let b=u.get(R);if(b){let y=Pt(b);g.push({id:y.recordId,localTime:R,version:y.version,type:y.type,value:y.getValue(i,!0,R),user:y.user}),R=y.previousLocalTime}else break}while(O<1e3&&R);return g.reverse()}static cleanup(){z?.remove()}}Ke.updatedAttributes();let wx=Ke.prototype;return wx[Fre]=!0,d&&Ke.setTTLExpiration(d/1e3),Y&&Cx(),Ke;function Ll(k,m,g){let N;for(let R in r){let O=r[R],b=O.isIndexing,y=g?.[R],L=m?.[R];if(y===L&&!b)continue;N=!0;let D=O.indexNulls,U=(0,hl.getIndexedValues)(L,D);if(U){SH&&O.prefetch(U.map(x=>({key:x,value:k})),RH);for(let x=0,W=U.length;x<W;x++)O.remove(U[x],k)}if(U=(0,hl.getIndexedValues)(y,D),U){SH&&O.prefetch(U.map(x=>({key:x,value:k})),RH);for(let x=0,W=U.length;x<W;x++)O.put(U[x],k)}}return N}a(Ll,"updateIndices");function Qa(k){switch(typeof k){case"number":return!0;case"string":if(k.length<659)return!0;if(k.length>gH)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,No.writeKey)(k,Gre,0)>gH)throw new Error("Primary key size is too large: "+k.length);return!0}a(Qa,"checkValidId");function VE(k,m,g,N,R){let O=a(()=>{if(m?.transaction?.stale&&(m.transaction.stale=!1),g.transaction?.isDone)return R(null,k);let b=i.getEntry(k,g);return b&&m&&(b?.version>(m.lastModified||0)&&(m.lastModified=b.version),b?.localTime&&!m.lastRefreshed&&(m.lastRefreshed=b.localTime)),R(b,k)},"whenPrefetched");return N?O():ne>0?(ne--,O()):new Promise((b,y)=>{ne===0?(ne--,i.prefetch([k],()=>{L(),D()})):(re.push(k),Ie.push(D),re.length>Ix&&(ne--,L()));function L(){if(re.length>0){let U=Ie;i.prefetch(re,()=>{ne===-1?L():ne++;for(let x of U)x()}),re=[],Ie=[],ct>2&&ct--}else ne=ct,ct<yx&&ct++}a(L,"prefetch");function D(){try{b(O())}catch(U){y(U)}}a(D,"load")})}a(VE,"loadLocalRecord");function Dl(k){if(!k?.role)return;let m=k.role.permission;if(m.super_user)return kre;let g=m[c],N,R=g?.tables;if(R)return R[s];if(c==="data"&&(N=m[s])&&!N.tables)return N}a(Dl,"getTablePermissions");function $E(k,m,g,N){if(w){let R;if(g.noCache?R=!0:(m?(!m.value||m.metadataFlags&(_l|dl)||m.expiresAt&&m.expiresAt<Date.now())&&(R=!0):R=!0,ln(!R,"cache-hit",s)),R){let O=uA(k,m,g).then(b=>(b?.value?.[Ne]&&Je.error("Can not assign a record with a record property"),g&&(b?.version>(g.lastModified||0)&&(g.lastModified=b.version),g.lastRefreshed=Date.now()),b));if(g?.onlyIfCached||m?.value&&N?.allowStaleWhileRevalidate?.(m,k)){if(O.catch(b=>Je.warn(b)),g?.onlyIfCached&&!N.doesExist())throw new mn.ServerError("Entry is not cached",504);return}else return O}}}a($E,"ensureLoadedFromSource");function Nr(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 g=m.next;if(!g)return m=m.next=new Qi,m.lmdbDb=i,m;m=g}while(!0)}else return new k_}a(Nr,"txnForContext");function YE(k,m,g){if(!k)return;kE=k;let N=k.value||k.deref?.()||(kE=i.getEntry(k.key))?.value;if(typeof m=="object"){let O=Vs,b=N;for(let y=0,L=m.length;y<L;y++){let D=m[y],U=O?.[D];b=U&&b?U(b,g,!0)?.value:b?.[D],O=U?.definition?.tableClass?.propertyResolvers}return b}let R=Vs[m];return R?R(N,g):N[m]}a(YE,"getAttributeValue");function cA(k,m,g,N){let R=Nr(g).getReadTxn(),O=N?.length,b={transaction:R,lazy:O>0||typeof m=="string"||m?.length<4,alwaysPrefetch:!0};function y(L,D){let U=L?.value;if(!U)return $a.SKIP;for(let x=0;x<O;x++)if(!N[x](U,L))return $a.SKIP;return D!==void 0&&(L.key=D),L}if(a(y,"processEntry"),O>0||!k.hasEntries){let L=k.map(D=>typeof D=="object"&&D.key!==void 0?O>0?y(D):D:D==null?$a.SKIP:VE(D,g,b,!1,y));return Array.isArray(k)&&(L=L.filter(D=>D!==$a.SKIP)),L.hasEntries=!0,L}return k}a(cA,"transformToEntries");async function uA(k,m,g){let N=m?.metadataFlags,R=m?.version,O,b;if(!i.attemptLock(k,R,()=>{clearTimeout(b);let U=i.getEntry(k);!U||!U.value||U.metadataFlags&(_l|dl)?O(uA(k,i.getEntry(k),g)):O(U)}))return new Promise(U=>{O=U,b=setTimeout(()=>{i.unlock(k,R)},xre)});let y=m?.value,L={requestContext:g,replacingRecord:y,replacingVersion:R,source:null,resourceCache:g?.resourceCache},D=g?.responseHeaders;return new Promise((U,x)=>{let W;FR(Qe(L,async Se=>{let le=performance.now(),te,se,He;try{for(let Ue of Ke.sources)if(Ue.get&&(!Ue.get.reliesOnPrototype||Ue.prototype.get)&&(L.source=Ue,te=await Ue.get(k,L),te))break;He=N&_l;let _e=L.lastModified||He&&R;se=He||_e>R||!y,_e||(_e=(0,hl.getNextMonotonicTime)());let ke=performance.now()-le;if(kr(ke,"cache-resolution",s),D&&D.append("Server-Timing",`cache-resolve;dur=${ke.toFixed(2)}`),Se.timestamp=_e,d&&!L.expiresAt&&(L.expiresAt=Date.now()+d),te){if(typeof te!="object")throw new Error("Only objects can be cached and stored in tables");typeof te.toJSON=="function"&&(te=te.toJSON()),t&&te[t]!==k&&(te[t]=k)}W=!0,U({version:_e,value:te})}catch(_e){_e.message+=` while resolving record ${k} for ${s}`,y&&((_e.code==="ECONNRESET"||_e.code==="ECONNREFUSED"||_e.code==="EAI_AGAIN")&&!g?.mustRevalidate||g?.staleIfError&&(_e.statusCode===500||_e.statusCode===502||_e.statusCode===503||_e.statusCode===504))?(U({version:R,value:y}),Je.trace(_e.message,"(returned stale record)")):x(_e),L.transaction.abort();return}if(g?.noCacheStore){L.transaction.abort();return}Nr(L).addWrite({key:k,store:i,entry:m,nodeName:"source",commit:(_e,ke)=>{if(ke?.version!==R)return;let Ue=Ll(k,y,te);te?(ut.put?.(L,k,te),S(k,te,ke,_e,0,E&&se||null,L,L.expiresAt,"put",!!He)):(ut.delete?.(L,k),E||h?S(k,null,ke,_e,0,E&&se||null,L,0,"delete",!!He):i.remove(k,R))}})}),()=>{i.unlock(k,R)},Se=>{i.unlock(k,R),W&&Je.error("Error committing cache update",Se)})})}a(uA,"getFromSource");function KE(){if(Tn!==oA&&(oA=Tn,(0,bo.getWorkerIndex)()===(0,bo.getWorkerCount)()-1)){if(Cl&&clearTimeout(Cl),!Tn)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())/Tn)*Tn+k.getTime(),g=a(N=>{Je.trace(`Scheduled next cleanup scan at ${new Date(N)}ms`),Cl=setTimeout(()=>F=F.then(async()=>{if(g(Math.max(N+Tn,Date.now())),i.rootStore.status!=="open"){clearTimeout(Cl);return}let R=50,O=new Array(R),b=0;Je.trace(`Starting cleanup scan for ${s}`);try{let y=0;for(let{key:L,value:D,version:U,expiresAt:x}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let W;D===null&&!E&&U+Hre<Date.now()?W=i.remove(L,U):x&&x+f<Date.now()&&(W=Ke.evict(L,D,U),y++),W&&(await O[b],O[b]=W.catch(Se=>{Je.error("Cleanup error",Se)}),++b>=R&&(b=0)),await fl()}Je.trace(`Finished cleanup scan for ${s}, evicted ${y} entries`)}catch(y){Je.trace(`Error in cleanup scan for ${s}:`,y)}}),Math.min(N-Date.now(),2147483647)).unref()},"startNextTimer");g(m)}}a(KE,"scheduleCleanup");function lA(){z=u?.addDeleteRemovalCallback(n,k=>{let m=i.getEntry(k);m?.value===null&&i.remove(k,m.version)})}a(lA,"addDeleteRemoval");function Cx(){(0,bo.getWorkerIndex)()===0&&setInterval(async()=>{try{let k=Y.name,m=r[k];if(!m)throw new Error(`expiresAt attribute ${Y} must be indexed`);for(let{value:g}of m.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let N=i.getEntry(g);N?.value?.[k]<Date.now()&&Ke.evict(g,N.value,N.version),await fl()}}catch(k){Je.error("Error in evicting old records",k)}},Bre).unref()}a(Cx,"runRecordExpirationEviction")}function xR(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 RH(){}function Vre(e){NH=e}function RE(e,t){let r=t?.type;return e===null?e:r==="Int"||r==="Long"?e==="null"?null:parseInt(e):r==="Float"?e==="null"?null:parseFloat(e):r==="BigInt"?e==="null"?null:BigInt(e):r==="Date"?(typeof e!="number"&&!$re.test(e)&&(e+="Z"),e==="null"?null:new Date(e)):!r||r==="Any"?(0,OE.autoCast)(e):e}function AH(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 FR(e,t,r){return e?.then?e.then(t,r):t(e)}function AE(e,t){e[Kr]=t,e[Ne]=t?.value??null,e[El]=t?.version}function OH(e){return e!=null}var qn,$a,hl,bH,Sl,mn,ml,pl,Je,No,bo,OE,vre,NH,Bre,Hre,SH,xre,El,Fre,Kr,ll,TH,qre,HR,Va,_l,dl,Gre,gH,kre,jhe,$re,fl,If=Ae(()=>{qn=v(M()),$a=require("lmdb"),hl=v(wr()),bH=require("lodash");bn();wp();Sl=v(j());pH();mn=v(Z()),ml=v(gs()),pl=v(Ln());ge();ff();Je=v(V());Y_();zi();No=require("ordered-binary"),bo=v(et());Li();OE=v(J());mc();Us();lE();vre=new Uint8Array(9);vre[8]=192;Bre=6e4,Hre=864e5;Sl.initSync();SH=Sl.get(qn.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),xre=1e4,El=Symbol.for("version"),Fre=Symbol.for("incremental-update"),Kr=Symbol("entry"),ll=Symbol("is-saving"),TH=1,qre=2,HR=Symbol("loaded-from-source"),Va={isNotification:!0,ensureLoaded:!1},_l=1,dl=8,Gre=Buffer.allocUnsafeSlow(8192),gH=1978,kre={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},jhe=(0,OE.convertToMS)(Sl.get(qn.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(bE,"makeTable");a(xR,"attributesAsObject");a(RH,"noop");a(Vre,"setServerUtilities");$re=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(RE,"coerceType");a(AH,"isDescendantId");fl=a(()=>new Promise(setImmediate),"rest");a(FR,"when");a(AE,"updateResource");a(OH,"exists")});var xe={};Ve(xe,{database:()=>Kc,databases:()=>tt,dropDatabase:()=>Up,dropTableMeta:()=>Jre,getDatabases:()=>Mn,getTables:()=>Yre,onUpdatedTable:()=>Jg,readMetaDb:()=>Tl,resetDatabases:()=>Kre,table:()=>_t,tables:()=>Cr});function Yre(){return CE||Mn(),Cr||{}}function Mn(){if(CE)return tt;CE=!0,Wa=new Map;let e=(0,Zt.getHdbBasePath)()&&(0,Xe.join)((0,Zt.getHdbBasePath)(),Qr.DATABASES_DIR_NAME),t=(0,Zt.get)(Qr.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,Zt.get)(Qr.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,Wr.existsSync)(e)?e:(0,Xe.join)((0,Zt.getHdbBasePath)(),Qr.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,Wr.existsSync)(e))for(let r of(0,Wr.readdirSync)(e,{withFileTypes:!0})){let n=(0,Xe.basename)(r.name,".mdb");r.isFile()&&(0,Xe.extname)(r.name).toLowerCase()===".mdb"&&!t[n]?.path&&Tl((0,Xe.join)(e,r.name),null,n)}if((0,Wr.existsSync)((0,Ka.getBaseSchemaPath)())){for(let r of(0,Wr.readdirSync)((0,Ka.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,Xe.join)((0,Ka.getBaseSchemaPath)(),r.name),s=(0,Xe.join)((0,Ka.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,Wr.readdirSync)(n,{withFileTypes:!0}))if(i.isFile()&&(0,Xe.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Xe.join)(s,i.name);Tl((0,Xe.join)(n,i.name),(0,Xe.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let n=t[r],s=n.path;if((0,Wr.existsSync)(s))for(let o of(0,Wr.readdirSync)(s,{withFileTypes:!0}))o.isFile()&&(0,Xe.extname)(o.name).toLowerCase()===".mdb"&&Tl((0,Xe.join)(s,o.name),(0,Xe.basename)(o.name,".mdb"),r);let i=n.tables;if(i)for(let o in i){let c=i[o],u=(0,Xe.join)(c.path,(0,Xe.basename)(o+".mdb"));(0,Wr.existsSync)(u)&&Tl(u,o,r,null,!0)}}for(let r in tt){let n=Wa.get(r);if(n){let s=tt[r];r.includes("delete")&&pn.trace(`defined tables ${Array.from(n.keys())}`);for(let i in s)n.has(i)||(pn.trace(`delete table class ${i}`),delete s[i])}else if(delete tt[r],r==="data"){for(let s in Cr)delete Cr[s];delete Cr[LE]}}return Wa=null,tt}}function Kre(){CE=!1;for(let[,e]of Ai)e.needsDeletion=!0;Mn();for(let[e,t]of Ai)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),Ai.delete(e));return tt}function Tl(e,t,r=kR,n,s){let i=new qR.default(e,!1);try{let o=Ai.get(e);o?o.needsDeletion=!1:(o=(0,yE.open)(i),Ai.set(e,o));let c=new yo.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(NE.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(n?(0,Wr.existsSync)(n)&&(i.path=n,_=(0,yE.open)(i),_.isLegacy=!0):_=uE(o));let l=CH(r),d=l[LE],f=new Map;for(let{key:E,value:h}of u.getRange({start:!1})){let[p,S]=E.toString().split("/");S===""?S=h.name:S||(S=p,p=t,h.name||(h.name=S,h.indexed=!h.is_hash_attribute)),d?.add(p);let A=f.get(p);A||f.set(p,A={attributes:[]}),(S==null||h.is_hash_attribute)&&(A.primary=h),S!=null&&A.attributes.push(h),Object.defineProperty(h,"key",{value:E,configurable:!0})}for(let[E,h]of f){let{attributes:p,primary:S}=h;if(!S){for(let z of p)if(z.is_hash_attribute||z.isPrimaryKey){S=z;break}if(!S){pn.fatal(`Unable to find a primary key attribute on table ${E}, with attributes: ${JSON.stringify(p)}`);continue}}let A=l[E],I={},w=[],B,K,F=typeof S.audit=="boolean"?S.audit:(0,Zt.get)(Qr.CONFIG_PARAMS.LOGGING_AUDITLOG),P=S.trackDeletes,Q=S.expiration,Y=S.eviction;if(A)I=A.indices,w=A.attributes,A.schemaVersion++;else{B=S.tableId,B?B>=(u.get(Ya)||0)&&u.putSync(Ya,B+1):(S.tableId=B=u.get(Ya),B||(B=1),u.putSync(Ya,B+1),u.putSync(S.key,S));let z=new yo.default(!S.is_hash_attribute,S.is_hash_attribute);K=Xl(o.openDB(S.key,z)),K.rootStore=o,K.tableId=B}for(let z of p){z.attribute=z.name;try{if(!z.is_hash_attribute&&(z.indexed||z.attribute&&!z.name)){if(!I[z.name]){let Ie=new yo.default(!z.is_hash_attribute,z.is_hash_attribute);I[z.name]=o.openDB(z.key,Ie),I[z.name].indexNulls=z.indexNulls}let re=w.find(Ie=>Ie.name===z.name);re?w.splice(w.indexOf(re),1,z):w.push(z)}}catch(re){pn.error("Error trying to update attribute",z,w,I,re)}}if(!A){A=LH(l,E,bE({primaryStore:K,auditStore:_,audit:F,expirationMS:Q&&Q*1e3,evictionMS:Y&&Y*1e3,trackDeletes:P,tableName:E,tableId:B,primaryKey:S.name,databasePath:s?r+"/"+E:r,databaseName:r,indices:I,attributes:p,schemaDefined:S.schemaDefined,dbisDB:u})),A.schemaVersion=1;for(let z of VR)z(A)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function CH(e){let t=tt[e];if(t||(e==="data"?t=tt[e]=Cr:e==="system"?Object.defineProperty(tt,"system",{value:t=Object.create(null),configurable:!0}):t=tt[e]=Object.create(null)),Wa&&!Wa.has(e)){let r=new Set;t[LE]=r,Wa.set(e,r)}return t}function LH(e,t,r){return e[t]=r,r}function Kc({database:e,table:t}){e||(e=kR),Mn();let r=CH(e),n=(0,Xe.join)((0,Zt.getHdbBasePath)(),Qr.DATABASES_DIR_NAME),s=(0,Zt.get)(Qr.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,Zt.get)(Qr.CONFIG_PARAMS.STORAGE_PATH)||((0,Wr.existsSync)(n)?n:(0,Xe.join)((0,Zt.getHdbBasePath)(),Qr.LEGACY_DATABASES_DIR_NAME));let o=(0,Xe.join)(n,(i?t:e)+".mdb"),c=Ai.get(o);if(!c){let u=new qR.default(o,!1);c=(0,yE.open)(u),Ai.set(o,c)}return c}async function Up(e){if(!tt[e])throw new Error("Schema does not exist");let t=tt[e];for(let r in t){let s=t[r].primaryStore.rootStore;Ai.delete(s.path),s.status==="open"&&(await s.close(),await yH.remove(s.path))}if(e==="data"){for(let r in Cr)delete Cr[r];delete Cr[LE]}delete tt[e]}function _t({table:e,database:t,expiration:r,eviction:n,scanInterval:s,attributes:i,audit:o,trackDeletes:c,schemaDefined:u,origin:_}){t||(t=kR);let l=Kc({database:t,table:e}),d=tt[t],f=d?.[e];if(l.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let E,h,p,S;u==null&&(u=!0);let A=new yo.default(!1);for(let P of i)P.attribute?(P.name=P.attribute,P.indexed=!0):P.attribute=P.name,P.expiresAt&&(P.indexed=!0);let I,w;if(f){if(E=f.primaryKey,f.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${e} class`);f.attributes.splice(0,f.attributes.length,...i)}else{let P=l.auditStore;P||(P=uE(l)),h=i.find(re=>re.isPrimaryKey)||{},E=h.name,h.is_hash_attribute=!0,h.schemaDefined=u,c&&(h.trackDeletes=!0),o=h.audit=typeof o=="boolean"?o:(0,Zt.get)(Qr.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(h.expiration=r),n&&(h.eviction=n),_&&(h.origins?h.origins.includes(_)||h.origins.push(_):h.origins=[_]),pn.trace(`${e} table loading, opening primary store`);let Q=new yo.default(!1,!0),Y=e+"/",z=Xl(l.openDB(Y,Q));z.rootStore=l,S=l.dbisDb=l.openDB(NE.INTERNAL_DBIS_NAME,A),z.tableId=S.get(Ya),z.tableId||(z.tableId=1),S.putSync(Ya,z.tableId+1),h.tableId=z.tableId,f=LH(d,e,bE({primaryStore:z,auditStore:P,audit:o,trackDeletes:c,expirationMS:r&&r*1e3,evictionMS:n&&n*1e3,primaryKey:E,tableName:e,tableId:z.tableId,databasePath:t,databaseName:t,indices:{},attributes:i,schemaDefined:u,dbisDB:S})),f.schemaVersion=1,I=!0,F(),S.put(Y,h)}p=f.indices,S=S||(l.dbisDb=l.openDB(NE.INTERNAL_DBIS_NAME,A)),f.dbisDB=S;let B=[];for(let{key:P,value:Q}of S.getRange({start:!0})){let[Y,z]=P.toString().split("/");if(z===""&&(z=Q.name),z){if(Y!==e)continue}else z=Y;if(!i.find(Ie=>Ie.name===z)?.indexed&&Q.indexed&&!Q.isPrimaryKey){F(),I=!0,S.remove(P);let Ie=f.indices[Y];Ie&&B.push(Ie)}}let K=[];try{for(let P of i||[]){if(P.relationship)continue;let Q=e+"/"+(P.name||"");Object.defineProperty(P,"key",{value:Q,configurable:!0});let Y=S.get(Q);if(P.isPrimaryKey){if(Y=Y||S.get(Q=e+"/")||{},o!==f.audit||(+r||void 0)!==(+Y.expiration||void 0)||(+n||void 0)!==(+Y.eviction||void 0)){let re=Object.assign({},Y);typeof o=="boolean"&&(o&&f.enableAuditing(o),re.audit=o),r&&(re.expiration=+r),n&&(re.eviction=+n),I=!0,F(),S.put(Q,re)}continue}Y?.attribute&&!Y.name&&(Y.indexed=!0);let z=!Y||Y.type!==P.type||Y.indexed!==P.indexed||JSON.stringify(Y.attributes)!==JSON.stringify(P.attributes)||JSON.stringify(Y.elements)!==JSON.stringify(P.elements);if(P.indexed){let re=new yo.default(!0,!1),Ie=l.openDB(Q,re);(z||Y.indexingPID&&Y.indexingPID!==process.pid||Y.restartNumber<gl.workerData?.restartNumber)&&(I=!0,F(),Y=S.get(Q),(z||Y.indexingPID&&Y.indexingPID!==process.pid||Y.restartNumber<gl.workerData?.restartNumber)&&(I=!0,P.lastIndexedKey=Y?.lastIndexedKey||!1,P.indexingPID=process.pid,Ie.isIndexing=!0,Object.defineProperty(P,"dbi",{value:Ie}),P.indexNulls===void 0&&(P.indexNulls=!0),K.push(P)),S.put(Q,P)),Y?.indexNulls&&P.indexNulls===void 0&&(P.indexNulls=!0),Ie.indexNulls=P.indexNulls,p[P.name]=Ie}else z&&(I=!0,F(),S.put(Q,P))}}finally{w&&w()}if(I&&(f.schemaVersion++,f.updatedAttributes()),pn.trace(`${e} table loading, running index`),K.length>0||B.length>0?f.indexingOperation=zre(f,K,B):I&&IE.signalSchemaChange(new wE.SchemaEventMsg(process.pid,"schema-change",f.databaseName,f.tableName)),f.origin=_,I)for(let P of VR)P(f,_!=="cluster");return(r||n||s)&&f.setTTLExpiration({expiration:r,eviction:n,scanInterval:s}),pn.trace(`${e} table loaded`),f;function F(){w||l.transactionSync(()=>({then(P){w=P}}))}a(F,"startTxn")}async function zre(e,t,r){try{let n=e.schemaVersion;await IE.signalSchemaChange(new wE.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 f=0;f<c;f++){let E=t[f],h=E.name,p=(0,IH.getIndexedValues)(l[h]);if(p)for(let S=0,A=p.length;S<A;S++)E.dbi.put(p[S],_)}}),s.then(()=>u--,f=>{u--,pn.error(f)}),gl.workerData&&gl.workerData.restartNumber!==wH.restartNumber&&(i=!0),++o%100===0||i){for(let f of t)f.lastIndexedKey=_,e.dbisDB.put(f.key,f);if(i)return}u>Wre?await s:u>Qre&&await new Promise(f=>setImmediate(f))}for(let _ of t)delete _.lastIndexedKey,delete _.indexingPID,_.dbi.isIndexing=!1,s=e.dbisDB.put(_.key,_)}await s,await IE.signalSchemaChange(new wE.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(n){pn.error("Error in indexing",n)}}function Jre({table:e,database:t}){let r=Kc({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 Jg(e){VR.push(e)}var Zt,NE,yE,Xe,Wr,Ka,yo,qR,Qr,yH,GR,IH,IE,wE,gl,pn,wH,kR,LE,Cr,tt,Ya,VR,CE,Ai,Wa,Wre,Qre,ge=Ae(()=>{Zt=v(j()),NE=v(ht()),yE=require("lmdb"),Xe=require("path"),Wr=require("fs"),Ka=v(We());If();yo=v(jl()),qR=v(e_()),Qr=v(M()),yH=v(require("fs-extra")),GR=require("../index"),IH=v(wr()),IE=v(gs()),wE=v(Ln()),gl=require("worker_threads"),pn=v(V()),wH=v(et());Li();mc();kR="data",LE=Symbol("defined-tables");(0,Zt.initSync)();Cr=Object.create(null),tt=Object.create(null);(0,GR._assignPackageExport)("databases",tt);(0,GR._assignPackageExport)("tables",Cr);Ya=Symbol.for("next-table-id"),VR=[],Ai=new Map;a(Yre,"getTables");a(Mn,"getDatabases");a(Kre,"resetDatabases");a(Tl,"readMetaDb");a(CH,"ensureDB");a(LH,"setTable");a(Kc,"database");a(Up,"dropDatabase");a(_t,"table");Wre=1e3,Qre=10;a(zre,"runIndexing");a(Jre,"dropTableMeta");a(Jg,"onUpdatedTable")});var J=T((ame,$H)=>{"use strict";var Oi=require("path"),vH=require("fs-extra"),Or=V(),DH=require("fs-extra"),DE=require("os"),Xre=require("net"),jre=require("recursive-iterator"),at=M(),Zre=VA(),MH=require("papaparse"),ME=require("moment"),{inspect:ene}=require("util"),UH=require("is-number"),ome=require("lodash"),tne=require("minimist"),rne=require("https"),nne=require("http"),{hdb_errors:UE}=Z(),sne=/^((\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)))$/,BH=require("util").promisify(setTimeout),ine=100,one=5,ane="",cne=4,PH={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};$H.exports={isEmpty:zr,isEmptyOrZeroLength:ds,arrayHasEmptyValues:_ne,arrayHasEmptyOrZeroLengthValues:dne,buildFolderPath:fne,isBoolean:HH,errorizeMessage:une,stripFileExtension:hne,autoCast:mne,autoCastJSON:xH,autoCastJSONDeep:YR,removeDir:pne,compareVersions:Sne,isCompatibleDataVersion:Tne,escapeRawValue:gne,unescapeValue:Rne,stringifyProps:Ane,timeoutPromise:bne,isClusterOperation:yne,getClusterUser:wne,checkGlobalSchemaTable:Ine,getHomeDir:qH,getPropsFilePath:One,promisifyPapaParse:Cne,removeBOM:GH,createEventPromise:Lne,checkProcessRunning:Dne,checkSchemaTableExist:Mne,checkSchemaExists:kH,checkTableExists:VH,getStartOfTomorrowInSeconds:Une,getLimitKey:Pne,isObject:Ene,isNotEmptyAndHasValue:lne,autoCasterIsNumberCheck:FH,backtickASTSchemaItems:vne,isPortTaken:Nne,createForkArgs:Bne,autoCastBoolean:Hne,async_set_timeout:BH,getTableHashAttribute:xne,doesSchemaExist:Fne,doesTableExist:qne,stringifyObj:Gne,ms_to_time:kne,changeExtension:Vne,getEnvCliRootPath:KR,noBootFile:$ne,httpRequest:Yne,transformReq:Kne,convertToMS:Wne,PACKAGE_ROOT:at.PACKAGE_ROOT};function une(e){return e instanceof Error?e:new Error(e)}a(une,"errorizeMessage");function zr(e){return e==null}a(zr,"isEmpty");function lne(e){return!zr(e)&&(e||e===0||e===""||HH(e))}a(lne,"isNotEmptyAndHasValue");function ds(e){return zr(e)||e.length===0||e.size===0}a(ds,"isEmptyOrZeroLength");function _ne(e){if(zr(e))return!0;for(let t=0;t<e.length;t++)if(zr(e[t]))return!0;return!1}a(_ne,"arrayHasEmptyValues");function dne(e){if(ds(e))return!0;for(let t=0;t<e.length;t++)if(ds(e[t]))return!0;return!1}a(dne,"arrayHasEmptyOrZeroLengthValues");function fne(...e){try{return e.join(Oi.sep)}catch{console.error(e)}}a(fne,"buildFolderPath");function HH(e){return zr(e)?!1:e===!0||e===!1}a(HH,"isBoolean");function Ene(e){return zr(e)?!1:typeof e=="object"}a(Ene,"isObject");function hne(e){return ds(e)?ane:e.slice(0,-cne)}a(hne,"stripFileExtension");function mne(e){return zr(e)||e===""||typeof e!="string"?e:PH[e]!==void 0?PH[e]:FH(e)===!0?Number(e):sne.test(e)?new Date(e):e}a(mne,"autoCast");function xH(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(xH,"autoCastJSON");function YR(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=YR(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=YR(r);n!==r&&(e[t]=n)}return e}else return xH(e)}a(YR,"autoCastJSONDeep");function FH(e){if(e.startsWith("0.")&&UH(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&UH(e))}a(FH,"autoCasterIsNumberCheck");async function pne(e){if(ds(e))throw new Error(`Directory path: ${e} does not exist`);try{await DH.emptyDir(e),await DH.remove(e)}catch(t){throw Or.error(`Error removing files in ${e} -- ${t}`),t}}a(pne,"removeDir");function Sne(e,t){if(ds(e)){Or.info("Invalid current version sent as parameter.");return}if(ds(t)){Or.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(Sne,"compareVersions");function Tne(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(Tne,"isCompatibleDataVersion");function gne(e){if(zr(e))return e;let t=String(e);return t==="."?at.UNICODE_PERIOD:t===".."?at.UNICODE_PERIOD+at.UNICODE_PERIOD:t.replace(at.FORWARD_SLASH_REGEX,at.UNICODE_FORWARD_SLASH)}a(gne,"escapeRawValue");function Rne(e){if(zr(e))return e;let t=String(e);return t===at.UNICODE_PERIOD?".":t===at.UNICODE_PERIOD+at.UNICODE_PERIOD?"..":String(e).replace(at.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(Rne,"unescapeValue");function Ane(e,t){if(zr(e))return Or.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+DE.EOL}!ds(n)&&n[0]===";"?r+=" "+n+s+DE.EOL:ds(n)||(r+=n+"="+s+DE.EOL)}catch{Or.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(Ane,"stringifyProps");function qH(){let e;try{e=DE.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(qH,"getHomeDir");function One(){let e=Oi.join(qH(),at.HDB_HOME_DIR_NAME,at.BOOT_PROPS_FILE_NAME);return vH.existsSync(e)||(e=Oi.join(__dirname,"../","hdb_boot_properties.file")),e}a(One,"getPropsFilePath");function bne(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:function(){clearTimeout(r)}}}a(bne,"timeoutPromise");async function Nne(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=Xre.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a(Nne,"isPortTaken");function yne(e){try{return at.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){Or.error(`Error checking operation against cluster ops ${t}`)}return!1}a(yne,"isClusterOperation");function Ine(e,t){let r=(ge(),ee(xe)).getDatabases();if(!r[e])return UE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return UE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Ine,"checkGlobalSchemaTable");function wne(e,t){if(zr(t)){Or.warn("No CLUSTERING_USER defined, clustering disabled");return}if(zr(e)||ds(e)){Or.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){Or.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){Or.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(wne,"getClusterUser");function Cne(){MH.parsePromise=function(e,t,r){return new Promise(function(n,s){MH.parse(e,{header:!0,transformHeader:GH,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(Cne,"promisifyPapaParse");function GH(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(GH,"removeBOM");function Lne(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;Or.info(`Got cluster status event response: ${ene(s)}`);try{i.cancel()}catch{Or.error("Error trying to cancel timeout.")}n(s)})})}a(Lne,"createEventPromise");async function Dne(e){let t=!0,r=0;do await BH(ine*r++),(await Zre.findPs(e)).length>0&&(t=!1);while(t&&r<one);if(t)throw new Error(`process ${e} was not started`)}a(Dne,"checkProcessRunning");function Mne(e,t){let r=kH(e);if(r)return r;let n=VH(e,t);if(n)return n}a(Mne,"checkSchemaTableExist");function kH(e){let{getDatabases:t}=(ge(),ee(xe));if(!t()[e])return UE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(kH,"checkSchemaExists");function VH(e,t){let{getDatabases:r}=(ge(),ee(xe));if(!r()[e][t])return UE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(VH,"checkTableExists");function Une(){let e=ME().utc().add(1,at.MOMENT_DAYS_TAG).startOf(at.MOMENT_DAYS_TAG).unix(),t=ME().utc().unix();return e-t}a(Une,"getStartOfTomorrowInSeconds");function Pne(){return ME().utc().format("DD-MM-YYYY")}a(Pne,"getLimitKey");function vne(e){try{let t=new jre(e);for(let{node:r}of t)r&&(r.columnid&&typeof r.columnid!="string"&&(r.columnid=r.columnid.toString()),r.columnid&&!r.columnid.startsWith("`")&&(r.columnid_orig=r.columnid,r.columnid=`\`${r.columnid}\``),r.tableid&&!r.tableid.startsWith("`")&&(r.tableid_orig=r.tableid,r.tableid=`\`${r.tableid}\``),r.databaseid&&!r.databaseid.startsWith("`")&&(r.databaseid_orig=r.databaseid,r.databaseid=`\`${r.databaseid}\``),r.as&&typeof r.as=="string"&&!r.as.startsWith("[")&&(r.as_orig=r.as,r.as=`\`${r.as}\``))}catch(t){Or.error("Got an error back ticking items."),Or.error(t)}}a(vne,"backtickASTSchemaItems");function Bne(e){return[e]}a(Bne,"createForkArgs");function Hne(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(Hne,"autoCastBoolean");function xne(e,t){let{getDatabases:r}=(ge(),ee(xe)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(xne,"getTableHashAttribute");function Fne(e){let{getDatabases:t}=(ge(),ee(xe));return t()[e]!==void 0}a(Fne,"doesSchemaExist");function qne(e,t){let{getDatabases:r}=(ge(),ee(xe));return r()[e]?.[t]!==void 0}a(qne,"doesTableExist");function Gne(e){try{return JSON.stringify(e)}catch{return e}}a(Gne,"stringifyObj");function kne(e){let t=ME.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(kne,"ms_to_time");function Vne(e,t){let r=Oi.basename(e,Oi.extname(e));return Oi.join(Oi.dirname(e),r+t)}a(Vne,"changeExtension");function KR(){if(process.env[at.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[at.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=tne(process.argv);if(e[at.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[at.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(KR,"getEnvCliRootPath");var $R;function $ne(){if($R)return $R;let e=KR();KR()&&vH.pathExistsSync(Oi.join(e,at.HDB_CONFIG_FILE))&&($R=!0)}a($ne,"noBootFile");function Yne(e,t){let r;return e.protocol==="http:"?r=nne:r=rne,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(Yne,"httpRequest");function Kne(e){if(!e.schema&&!e.database){e.schema=at.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(Kne,"transformReq");function Wne(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(Wne,"convertToMS")});var j=T((ume,QH)=>{"use strict";var WR=require("fs-extra"),Io=require("path"),YH=require("os"),Qne=require("properties-reader"),Al=V(),Rl=J(),ae=M(),PE=Ur(),zne="Error initializing environment manager",vE="BOOT_PROPS_FILE_PATH",KH=!1,Jne={[ae.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[ae.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[ae.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Gs={};QH.exports={BOOT_PROPS_FILE_PATH:vE,getHdbBasePath:Xne,setHdbBasePath:jne,get:WH,initSync:ese,setProperty:De,initTestEnvironment:tse};function Xne(){return Gs[ae.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(Xne,"getHdbBasePath");function jne(e){Gs[ae.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(jne,"setHdbBasePath");function WH(e){let t=PE.getConfigValue(e);return t===void 0?Gs[e]:t}a(WH,"get");function De(e,t){Jne[e]&&(Gs[e]=t),PE.updateConfigObject(e,t)}a(De,"setProperty");function Zne(){let e;try{e=Rl.getPropsFilePath(),WR.accessSync(e,WR.constants.F_OK|WR.constants.R_OK),KH=!0;let t=Qne(e);return Gs[ae.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(ae.HDB_SETTINGS_NAMES.INSTALL_USER),Gs[ae.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(ae.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Gs[vE]=e,!0}catch{return Al.trace(`Environment manager found no properties file at ${e}`),!1}}a(Zne,"doesPropFileExist");function ese(e=!1){try{(KH||Zne()||Rl.noBootFile())&&(PE.initConfig(e),Gs[ae.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=PE.getConfigValue(ae.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Al.error(zne),Al.error(t),console.error(t),process.exit(1)}}a(ese,"initSync");function tse(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=Io.join(__dirname,"../../","unitTests");Gs[vE]=Io.join(u,"hdb_boot_properties.file"),De(ae.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Io.join(u,"settings.test")),De(ae.HDB_SETTINGS_NAMES.INSTALL_USER,YH.userInfo()?YH.userInfo().username:void 0),De(ae.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),De(ae.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Io.join(u,"envDir","log")),De(ae.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),De(ae.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),De(ae.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),De(ae.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Io.join(u,"envDir")),De(ae.CONFIG_PARAMS.STORAGE_PATH,Io.join(u,"envDir")),s&&(De(ae.CONFIG_PARAMS.HTTP_SECUREPORT,WH(ae.CONFIG_PARAMS.HTTP_PORT)),De(ae.CONFIG_PARAMS.HTTP_PORT,null)),De(ae.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),De(ae.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),De(ae.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Rl.isEmpty(i)?!1:i),De(ae.CONFIG_PARAMS.HTTP_CORS,Rl.isEmpty(i)?!1:i),De(ae.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),De(ae.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),De(ae.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),De(ae.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),De(ae.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Io.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),De(ae.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Rl.isEmpty(c)?!1:c),o&&(De("CORS_ACCESSLIST",o),De(ae.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(De(ae.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),De(ae.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(De(ae.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),De(ae.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(De(ae.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),De(ae.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${vE}. Please check your boot props and settings files`;Al.fatal(r),Al.error(t)}}a(tse,"initTestEnvironment")});var It=T((hme,Ex)=>{"use strict";var Wt=j();Wt.initSync();var rse=require("fs-extra"),nse=require("semver"),Nl=require("path"),{monotonicFactory:sse}=require("ulidx"),JH=sse(),ise=require("util"),XH=require("child_process"),ose=ise.promisify(XH.exec),ase=XH.spawn,ye=nt(),Me=M(),XR=J(),Jr=V(),BE=Ts(),cse=z_(),Ol=Ur(),{onMessageByType:use}=et(),{isMainThread:lse}=require("worker_threads"),{Encoder:_se,decode:jR}=require("msgpackr"),jH=new _se,{isEmpty:Do}=XR,ZH=rn(),dse=48*36e11,fse=5e9;lse&&use(Me.ITC_EVENT_TYPES.RESTART,()=>{Sn=void 0,Lo=void 0});var{connect:Ese,StorageType:ex,RetentionPolicy:tx,AckPolicy:HE,DeliverPolicy:xE,DiscardPolicy:hse,NatsConnection:_me,JetStreamManager:dme,JetStreamClient:fme,StringCodec:Eme,JSONCodec:mse,createInbox:ZR,headers:pse,ErrorCode:zH}=require("nats"),{PACKAGE_ROOT:Sse}=M(),Tse=nu(),{recordAction:gse}=(Us(),ee(qu)),rx=mse(),Rse="clustering",Ase=Tse.engines[ye.NATS_SERVER_NAME],Ose=Nl.join(Sse,"dependencies"),JR=Nl.join(Ose,`${process.platform}-${process.arch}`,ye.NATS_BINARY_NAME),QR,zR,bl,wo,Co;Ex.exports={runCommand:nx,checkNATSServerInstalled:bse,createConnection:eA,getConnection:FE,getJetStreamManager:yl,getJetStream:ix,getNATSReferences:br,getServerList:yse,createLocalStream:tA,listStreams:ox,deleteLocalStream:Ise,getServerConfig:Il,listRemoteStreams:wse,viewStream:Cse,viewStreamIterator:Lse,publishToStream:Dse,createWorkQueueStream:Mse,addSourceToWorkStream:cx,request:Pse,removeSourceFromWorkStream:lx,reloadNATS:rA,reloadNATSHub:vse,reloadNATSLeaf:Bse,extractServerName:ux,requestErrorHandler:Hse,updateWorkStream:xse,createLocalTableStream:dx,createTableStreams:Fse,purgeTableStream:fx,purgeSchemaTableStreams:qse,getStreamInfo:Gse,updateLocalStreams:Vse,closeConnection:Nse,getJsmServerName:wl,addNatsMsgHeader:ax,updateIngestStreamConsumer:Use,clearClientCache:sx};async function nx(e,t=void 0){let{stdout:r,stderr:n}=await ose(e,{cwd:t});if(n)throw new Error(n.replace(`
|
|
29
26
|
`,""));return r.replace(`
|
|
30
|
-
`,"")}a(RB,"runCommand");async function hre(){try{await Wte.access(GR)}catch{return!1}let e=await RB(`${GR} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return Qte.eq(t,fre)}a(hre,"checkNATSServerInstalled");async function VR(e,t,r,s=!0,n="127.0.0.1"){if(!t&&!r){let o=await mB.getClusterUser();if(eo(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}Ur.trace("create nats connection called");let i=await ire({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,timeout:2e5,tls:{keyFile:Ut.get(Oe.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Ut.get(Oe.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Ut.get(Oe.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),Ur.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&Ur.error("Error with Nats client connection, connection closed",o),gB()}),i}a(VR,"createConnection");function gB(){es=void 0,Xi=void 0,ji=void 0,Zi=void 0}a(gB,"clearClientCache");async function mre(){es&&(await es.drain(),es=void 0,Xi=void 0,ji=void 0,Zi=void 0)}a(mre,"closeConnection");var es,Zi;async function Qf(){return Zi||(Zi=VR(Ut.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),es=await Zi),es||Zi}a(Qf,"getConnection");async function Hu(){if(Xi)return Xi;eo(es)&&await Qf();let{domain:e}=Fu(Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(eo(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Xi=await es.jetstreamManager({domain:e,timeout:6e4}),Xi}a(Hu,"getJetStreamManager");async function AB(){if(ji)return ji;eo(es)&&await Qf();let{domain:e}=Fu(Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(eo(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return ji=es.jetstream({domain:e,timeout:6e4}),ji}a(AB,"getJetStream");async function ur(){let e=es||await Qf(),t=Xi||await Hu(),r=ji||await AB();return{connection:e,jsm:t,js:r}}a(ur,"getNATSReferences");async function pre(e){let t=Ut.get(Oe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await mB.getClusterUser(),n=await VR(t,r,s),i=kR(),o=n.subscribe(i),c=[],u,_=(async()=>{for await(let l of o){let d=TB.decode(l.data);d.response_time=Date.now()-u,c.push(d)}})();return u=Date.now(),await n.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await n.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await n.flush(),await qR.async_set_timeout(e),await o.drain(),await n.close(),await _,c}a(pre,"getServerList");async function $R(e,t){let{jsm:r}=await ur(),s=Ut.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=Ut.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=Ut.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:pB.File,retention:SB.Limits,subjects:t,discard:ore.Old,max_msgs:n,max_bytes:i,max_age:s})}a($R,"createLocalStream");async function OB(){let{jsm:e}=await ur(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(OB,"listStreams");async function Sre(e){let{jsm:t}=await ur();await t.streams.delete(e)}a(Sre,"deleteLocalStream");async function Tre(e){let{connection:t}=await ur(),r=[],s=kR(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(TB.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:s}),await t.flush(),await n.drain(),await i,r}a(Tre,"listRemoteStreams");async function Rre(e,t=void 0,r=void 0){let{jsm:s,js:n}=await ur(),i=fB(),o={durable_name:i,ack_policy:Kf.Explicit};t&&(o.deliver_policy=Wf.StartTime,o.opt_start_time=new Date(t).toISOString()),await s.consumers.add(e,o);let c=await n.consumers.get(e,i),u=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let _=[];for await(let l of u){let d=xR(l.data),f={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};if(l.headers&&(f.origin=l.headers.get(ge.MSG_HEADERS.ORIGIN)),_.push(f),l.ack(),l.info.pending===0)break}return await c.delete(),_}a(Rre,"viewStream");async function*gre(e,t=void 0,r=void 0){let{jsm:s,js:n}=await ur(),i=fB(),o={durable_name:i,ack_policy:Kf.Explicit};t&&(o.deliver_policy=Wf.StartTime,o.opt_start_time=new Date(t).toISOString()),await s.consumers.add(e,o);let c=await n.consumers.get(e,i),u=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let _ of u){let l=xR(_.data);l[0]||(l=[l]);for(let d of l){let f={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};_.headers&&(f.origin=_.headers.get(ge.MSG_HEADERS.ORIGIN)),yield f}if(_.ack(),_.info.pending===0)break}await c.delete()}a(gre,"viewStreamIterator");async function Are(e,t,r,s){Ur.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s.operation),r=NB(s,r);let{js:n}=await ur(),i=await Gu(),o=`${e}.${i}`,c=s instanceof Uint8Array?s:hB.encode(s);try{Ur.trace(`publishToStream publishing to subject: ${o}`),_re(c.length,"bytes-sent",e,s.operation,"replication"),await n.publish(o,c,{headers:r})}catch(u){if(u.code&&u.code.toString()==="503")return wB(async()=>{try{await n.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){Ur.trace(`publishToStream creating stream: ${t}`);let l=o.split(".");l[2]="*",await $R(t,[o]),await n.publish(o,c,{headers:r})}else throw u}});throw u}}a(Are,"publishToStream");function NB(e,t){t===void 0&&(t=cre());let r=Ut.get(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(ge.MSG_HEADERS.ORIGIN)&&r&&t.append(ge.MSG_HEADERS.ORIGIN,r),t}a(NB,"addNatsMsgHeader");function Fu(e){e=e.toLowerCase();let t=Bu.join(Ut.get(Oe.CONFIG_PARAMS.ROOTPATH),dre);if(e===Oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return eo(FR)&&(FR={port:Pu.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Pu.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME)+ge.SERVER_SUFFIX.HUB,config_file:ge.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Bu.join(t,ge.PID_FILES.HUB),hdb_nats_path:t}),FR;if(e===Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return eo(HR)&&(HR={port:Pu.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Pu.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME)+ge.SERVER_SUFFIX.LEAF,config_file:ge.NATS_CONFIG_FILES.LEAF_SERVER,domain:Pu.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME)+ge.SERVER_SUFFIX.LEAF,pid_file_path:Bu.join(t,ge.PID_FILES.LEAF),hdb_nats_path:t}),HR;Ur.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Fu,"getServerConfig");async function Ore(e){let{jsm:t}=await ur(),r=await Gu();try{await t.streams.add({name:e.stream_name,storage:pB.File,retention:SB.Limits,max_age:sre,max_bytes:nre,subjects:[`${ge.SUBJECT_PREFIXES.TXN}.${e.stream_name}.${r}`]})}catch(s){if(s.code!=="400")throw s}try{await t.consumers.info(e.stream_name,e.durable_name)}catch(s){if(s.code.toString()==="404")await t.consumers.add(e.stream_name,{ack_policy:Kf.Explicit,durable_name:e.durable_name,deliver_policy:Wf.All,max_ack_pending:1e4});else throw s}}a(Ore,"createWorkQueueStream");async function Nre(){let{jsm:e}=await ur();(await e.consumers.info(ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,ge.WORK_QUEUE_CONSUMER_NAMES.durable_name)).config.deliver_subject&&(Ur.info("Removing old nats push consumer from ingest stream"),await e.consumers.delete(ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,ge.WORK_QUEUE_CONSUMER_NAMES.durable_name),Ur.info("Adding pull consumer to ingest stream"),await e.consumers.add(ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,{ack_policy:Kf.Explicit,durable_name:ge.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:Wf.All,max_ack_pending:1e4}))}a(Nre,"updateIngestStreamConsumer");async function bB(e,t,r){let{jsm:s}=await ur(),n=await s.streams.info(t),i=yB(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:u}=r,_=Yf.createNatsTableStreamName(c,u),l=i===e,d,f,E=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let p=0,S=n.config.sources.length;p<S;p++)if(d=n.config.sources[p],f=p,l&&d.name===_||!l&&d.name===_&&d.external&&d.external.api===`$JS.${e}.API`){E=!0;break}if(E===!0){if(d.opt_start_time===o)return;let p=`txn.${c}.${u}.${e}`;await s.streams.purge(t,{filter:p}),n.config.sources.splice(f,1),await s.streams.update(t,n.config)}let h={name:_,opt_start_time:o,filter_subject:`${ge.SUBJECT_PREFIXES.TXN}.>`};l||(h.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(h),await s.streams.update(t,n.config)}a(bB,"addSourceToWorkStream");function yB(e){return e.split(".")[1]}a(yB,"extractServerName");async function IB(e,t,r){let{jsm:s}=await ur(),{schema:n,table:i}=r,o=`txn.${n}.${i}.${e}`;await s.streams.purge(t,{filter:o});let c=Yf.createNatsTableStreamName(n,i),u=await s.streams.info(t);if(!Array.isArray(u.config.sources)||u.config.sources.length===0)return;let _=u.config.sources.length,l;for(;_--;)if(l=u.config.sources[_],l.name===c&&l.external.api===`$JS.${e}.API`){u.config.sources.splice(_,1);break}await s.streams.update(t,u.config)}a(IB,"removeSourceFromWorkStream");async function bre(e,t,r=6e4,s=kR()){if(!qR.isObject(t))throw new Error("data param must be an object");let n=hB.encode(t),{connection:i}=await ur(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let c=await i.request(e,n,o);return xR(c.data)}a(bre,"request");function YR(e){return new Promise(async(t,r)=>{let s=jte(GR,["--signal",`reload=${e}`],{cwd:__dirname}),n,i;s.on("error",o=>{r(o)}),s.stdout.on("data",o=>{i+=o.toString()}),s.stderr.on("data",o=>{n+=o.toString()}),s.stderr.on("close",o=>{n&&r(n),t(i)})})}a(YR,"reloadNATS");async function yre(){let{pid_file_path:e}=Fu(Oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await YR(e)}a(yre,"reloadNATSHub");async function Ire(){let{pid_file_path:e}=Fu(Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await YR(e)}a(Ire,"reloadNATSLeaf");function wre(e,t,r){let s;switch(e.code){case dB.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case dB.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(wre,"requestErrorHandler");async function Cre(e,t){let r=t+ge.SERVER_SUFFIX.LEAF;await wB(async()=>{e.subscribe===!0?await bB(r,ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await IB(r,ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(Cre,"updateWorkStream");function wB(e){return Zte.writeTransaction(Oe.SYSTEM_SCHEMA_NAME,Oe.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(wB,"exclusiveLock");async function CB(e,t){let r=Yf.createNatsTableStreamName(e,t),s=await Gu(),n=Mre(e,t,s);await $R(r,[n])}a(CB,"createLocalTableStream");async function Lre(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await CB(s,n)}}a(Lre,"createTableStreams");async function LB(e,t){if(Ut.get(Oe.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=Yf.createNatsTableStreamName(e,t),{jsm:s}=await ur();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")Ur.warn(r);else throw r}}a(LB,"purgeTableStream");async function Dre(e,t){if(Ut.get(Oe.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await LB(e,t[r])}a(Dre,"purgeSchemaTableStreams");async function Ure(e){return(await Hu()).streams.info(e)}a(Ure,"getStreamInfo");function Mre(e,t,r){return`${ge.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(Mre,"createSubjectName");async function Gu(){if(vu)return vu;if(vu=(await Hu())?.nc?.info?.server_name,vu===void 0)throw new Error("Unable to get jetstream manager server name");return vu}a(Gu,"getJsmServerName");async function Pre(){let e=await Hu(),t=await Gu(),r=await OB();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=vre(s),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(n.name===ge.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let _=`${ge.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;Ur.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}else if(n.name===ge.WORK_QUEUE_CONSUMER_NAMES.stream_name){let _=`${ge.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;Ur.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}else{let _=i.split(".");_[_.length-1]=t;let l=_.join(".");Ur.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}await e.streams.update(n.name,n)}}}a(Pre,"updateLocalStreams");function vre(e){let{config:t}=e,r=!1;if(t.name===ge.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===ge.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let s=Ut.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=Ut.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=Ut.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,s!==t.max_age&&(t.max_age=s,r=!0),n!==t.max_bytes&&(t.max_bytes=n,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(vre,"updateStreamLimits")});var tR=T((Zfe,qB)=>{"use strict";var{decode:Bre}=require("msgpackr"),{isMainThread:Jfe,parentPort:Hre,threadId:Xfe}=require("worker_threads"),WR=dt(),In=ke(),Fre=b(),oi=q(),UB=X(),PB=b();Ze();var Gre=rn(),{recordAction:qre,recordActionBinary:xre}=(ti(),Z(Hd)),{publishToStream:kre}=WR,{ConsumerEvents:Vre}=require("nats"),jfe={durable:In.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:In.WORK_QUEUE_CONSUMER_NAMES.deliver_group},$re,Yre,Kre,vB,BB;qB.exports={initialize:QR,workQueueListener:GB,setSubscription:Wre,setIgnoreOrigin:zre,getDatabaseSubscriptions:Qre};async function QR(){BB=!0,oi.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await WR.getNATSReferences();$re=e,Yre=e.info.server_name,Kre=t,vB=r}a(QR,"initialize");var Jf=new Map;function Wre(e,t,r){let s=Jf.get(e);s||Jf.set(e,s=new Map),s.set(t,r),BB||QR().then(GB)}a(Wre,"setSubscription");function Qre(){return Jf}a(Qre,"getDatabaseSubscriptions");var HB;function zre(e){HB=e}a(zre,"setIgnoreOrigin");var FB=100,MB=new Array(FB),zf=0;async function GB(){let e=await vB.consumers.get(In.WORK_QUEUE_CONSUMER_NAMES.stream_name,In.WORK_QUEUE_CONSUMER_NAMES.durable_name),t=!1,r;for(Hre?.on("message",async s=>{let{type:n}=s;n===PB.ITC_EVENT_TYPES.SHUTDOWN&&(t=!0,r&&r.close?.()&&r.close())});!t;){r=await e.consume(),(async()=>{for await(let s of await r.status())if(s.type===Vre.HeartbeatsMissed){let n=s.data;oi.trace(`${n} clustering ingest consumer heartbeats missed`),n===2&&(oi.warn("Restarting clustering ingest consumer due to missed heartbeat threshold being met"),r.stop())}})();try{for await(let s of r)await MB[zf],MB[zf]=Jre(s).catch(n=>{oi.error(n)}),++zf>=FB&&(zf=0)}catch(s){oi.error("Error consuming clustering ingest, restarting consumer",s)}WR.clearClientCache(),await QR()}}a(GB,"workQueueListener");async function Jre(e){let t=Bre(e.data);qre(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let r=e.headers,s=!1,n=UB.get(Fre.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(In.MSG_HEADERS.TRANSACTED_NODES)&&r.values(In.MSG_HEADERS.TRANSACTED_NODES).indexOf(n)>-1&&(s=!0);let i=r.get(In.MSG_HEADERS.ORIGIN);if(s||(s=i===n&&!HB),xre(s,"echo",e.subject,t.operation,"ingest"),s){e.ack();return}r.append(In.MSG_HEADERS.TRANSACTED_NODES,n);try{let{operation:o,schema:c,next:u,table:_,records:l,hash_values:d,__origin:f,expiresAt:E}=t;oi.trace("processing message:",o,c,_,(l?"records: "+l.map(N=>N?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),oi.trace(`messageProcessor nats msg id: ${e.headers.get(In.MSG_HEADERS.NATS_MSG_ID)}`);let h;l||(l=d);let{timestamp:p,user:S,node_name:A}=f||{},I=Jf.get(c)?.get(_);if(!I)throw new Error("Missing table for replication message",_);if(o==="define_schema")t.type=o,I.send(t);else if(l.length===1&&!u)I.send({type:KR(o),value:l[0],id:d?.[0],expiresAt:E,timestamp:p,table:_,onCommit:h,user:S,nodeName:A});else{let N=l.map((Y,Q)=>({type:KR(o),value:Y,expiresAt:E,id:d?.[Q],table:_}));for(;u;)N.push({type:KR(u.operation),value:u.record,expiresAt:u.expiresAt,id:u.id,table:u.table}),u=u.next;I.send({type:"transaction",writes:N,table:_,timestamp:p,onCommit:h,user:S,nodeName:A})}UB.get(PB.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&kre(e.subject.split(".").slice(0,-1).join("."),Gre.createNatsTableStreamName(c,_),e.headers,e.data)}catch(o){oi.error(o)}e.ack()}a(Jre,"messageProcessor");function KR(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(KR,"convertOperation")});var xB=tR();(async()=>{try{await xB.initialize(),await xB.workQueueListener()}catch(e){console.error("Error launching Nats ingest service."),console.error(e)}})();
|
|
27
|
+
`,"")}a(nx,"runCommand");async function bse(){try{await rse.access(JR)}catch{return!1}let e=await nx(`${JR} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return nse.eq(t,Ase)}a(bse,"checkNATSServerInstalled");async function eA(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await ZH.getClusterUser();if(Do(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}Jr.trace("create nats connection called");let i=await Ese({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:Wt.get(Me.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Wt.get(Me.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Wt.get(Me.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),Jr.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&Jr.error("Error with Nats client connection, connection closed",o),sx()}),i}a(eA,"createConnection");function sx(){Sn=void 0,wo=void 0,Co=void 0,Lo=void 0}a(sx,"clearClientCache");async function Nse(){Sn&&(await Sn.drain(),Sn=void 0,wo=void 0,Co=void 0,Lo=void 0)}a(Nse,"closeConnection");var Sn,Lo;async function FE(){return Lo||(Lo=eA(Wt.get(Me.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),Sn=await Lo),Sn||Lo}a(FE,"getConnection");async function yl(){if(wo)return wo;Do(Sn)&&await FE();let{domain:e}=Il(Me.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Do(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return wo=await Sn.jetstreamManager({domain:e,timeout:6e4}),wo}a(yl,"getJetStreamManager");async function ix(){if(Co)return Co;Do(Sn)&&await FE();let{domain:e}=Il(Me.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Do(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Co=Sn.jetstream({domain:e,timeout:6e4}),Co}a(ix,"getJetStream");async function br(){let e=Sn||await FE(),t=wo||await yl(),r=Co||await ix();return{connection:e,jsm:t,js:r}}a(br,"getNATSReferences");async function yse(e){let t=Wt.get(Me.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await ZH.getClusterUser(),s=await eA(t,r,n),i=ZR(),o=s.subscribe(i),c=[],u,_=(async()=>{for await(let l of o){let d=rx.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 XR.async_set_timeout(e),await o.drain(),await s.close(),await _,c}a(yse,"getServerList");async function tA(e,t){let{jsm:r}=await br(),n=Wt.get(Me.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Wt.get(Me.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=Wt.get(Me.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:ex.File,retention:tx.Limits,subjects:t,discard:hse.Old,max_msgs:s,max_bytes:i,max_age:n})}a(tA,"createLocalStream");async function ox(){let{jsm:e}=await br(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(ox,"listStreams");async function Ise(e){let{jsm:t}=await br();await t.streams.delete(e)}a(Ise,"deleteLocalStream");async function wse(e){let{connection:t}=await br(),r=[],n=ZR(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(rx.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(wse,"listRemoteStreams");async function Cse(e,t=void 0,r=void 0){let{jsm:n,js:s}=await br(),i=JH(),o={durable_name:i,ack_policy:HE.Explicit};t&&(o.deliver_policy=xE.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=jR(l.data),f={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};if(l.headers&&(f.origin=l.headers.get(ye.MSG_HEADERS.ORIGIN)),_.push(f),l.ack(),l.info.pending===0)break}return await c.delete(),_}a(Cse,"viewStream");async function*Lse(e,t=void 0,r=void 0){let{jsm:n,js:s}=await br(),i=JH(),o={durable_name:i,ack_policy:HE.Explicit};t&&(o.deliver_policy=xE.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=jR(_.data);l[0]||(l=[l]);for(let d of l){let f={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};_.headers&&(f.origin=_.headers.get(ye.MSG_HEADERS.ORIGIN)),yield f}if(_.ack(),_.info.pending===0)break}await c.delete()}a(Lse,"viewStreamIterator");async function Dse(e,t,r,n){Jr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=ax(n,r);let{js:s}=await br(),i=await wl(),o=`${e}.${i}`,c=n instanceof Uint8Array?n:jH.encode(n);try{Jr.trace(`publishToStream publishing to subject: ${o}`),gse(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 _x(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){Jr.trace(`publishToStream creating stream: ${t}`);let l=o.split(".");l[2]="*",await tA(t,[o]),await s.publish(o,c,{headers:r})}else throw u}});throw u}}a(Dse,"publishToStream");function ax(e,t){t===void 0&&(t=pse());let r=Wt.get(Me.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(ye.MSG_HEADERS.ORIGIN)&&r&&t.append(ye.MSG_HEADERS.ORIGIN,r),t}a(ax,"addNatsMsgHeader");function Il(e){e=e.toLowerCase();let t=Nl.join(Wt.get(Me.CONFIG_PARAMS.ROOTPATH),Rse);if(e===Me.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Do(zR)&&(zR={port:Ol.getConfigFromFile(Me.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Ol.getConfigFromFile(Me.CONFIG_PARAMS.CLUSTERING_NODENAME)+ye.SERVER_SUFFIX.HUB,config_file:ye.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Nl.join(t,ye.PID_FILES.HUB),hdb_nats_path:t}),zR;if(e===Me.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Do(QR)&&(QR={port:Ol.getConfigFromFile(Me.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Ol.getConfigFromFile(Me.CONFIG_PARAMS.CLUSTERING_NODENAME)+ye.SERVER_SUFFIX.LEAF,config_file:ye.NATS_CONFIG_FILES.LEAF_SERVER,domain:Ol.getConfigFromFile(Me.CONFIG_PARAMS.CLUSTERING_NODENAME)+ye.SERVER_SUFFIX.LEAF,pid_file_path:Nl.join(t,ye.PID_FILES.LEAF),hdb_nats_path:t}),QR;Jr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Il,"getServerConfig");async function Mse(e){let{jsm:t}=await br(),r=await wl();try{await t.streams.add({name:e.stream_name,storage:ex.File,retention:tx.Limits,max_age:dse,max_bytes:fse,subjects:[`${ye.SUBJECT_PREFIXES.TXN}.${e.stream_name}.${r}`]})}catch(n){if(n.code!=="400")throw n}try{await t.consumers.info(e.stream_name,e.durable_name)}catch(n){if(n.code.toString()==="404")await t.consumers.add(e.stream_name,{ack_policy:HE.Explicit,durable_name:e.durable_name,deliver_policy:xE.All,max_ack_pending:1e4});else throw n}}a(Mse,"createWorkQueueStream");async function Use(){let{jsm:e}=await br();(await e.consumers.info(ye.WORK_QUEUE_CONSUMER_NAMES.stream_name,ye.WORK_QUEUE_CONSUMER_NAMES.durable_name)).config.deliver_subject&&(Jr.info("Removing old nats push consumer from ingest stream"),await e.consumers.delete(ye.WORK_QUEUE_CONSUMER_NAMES.stream_name,ye.WORK_QUEUE_CONSUMER_NAMES.durable_name),Jr.info("Adding pull consumer to ingest stream"),await e.consumers.add(ye.WORK_QUEUE_CONSUMER_NAMES.stream_name,{ack_policy:HE.Explicit,durable_name:ye.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:xE.All,max_ack_pending:1e4}))}a(Use,"updateIngestStreamConsumer");async function cx(e,t,r){let{jsm:n}=await br(),s=await n.streams.info(t),i=ux(n.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:u}=r,_=BE.createNatsTableStreamName(c,u),l=i===e,d,f,E=!1;if(!Array.isArray(s.config.sources)||s.config.sources.length===0)s.config.sources=[];else for(let p=0,S=s.config.sources.length;p<S;p++)if(d=s.config.sources[p],f=p,l&&d.name===_||!l&&d.name===_&&d.external&&d.external.api===`$JS.${e}.API`){E=!0;break}if(E===!0){if(d.opt_start_time===o)return;let p=`txn.${c}.${u}.${e}`;await n.streams.purge(t,{filter:p}),s.config.sources.splice(f,1),await n.streams.update(t,s.config)}let h={name:_,opt_start_time:o,filter_subject:`${ye.SUBJECT_PREFIXES.TXN}.>`};l||(h.external={api:`$JS.${e}.API`,deliver:""}),s.config.sources.push(h),await n.streams.update(t,s.config)}a(cx,"addSourceToWorkStream");function ux(e){return e.split(".")[1]}a(ux,"extractServerName");async function lx(e,t,r){let{jsm:n}=await br(),{schema:s,table:i}=r,o=`txn.${s}.${i}.${e}`;await n.streams.purge(t,{filter:o});let c=BE.createNatsTableStreamName(s,i),u=await n.streams.info(t);if(!Array.isArray(u.config.sources)||u.config.sources.length===0)return;let _=u.config.sources.length,l;for(;_--;)if(l=u.config.sources[_],l.name===c&&l.external.api===`$JS.${e}.API`){u.config.sources.splice(_,1);break}await n.streams.update(t,u.config)}a(lx,"removeSourceFromWorkStream");async function Pse(e,t,r=6e4,n=ZR()){if(!XR.isObject(t))throw new Error("data param must be an object");let s=jH.encode(t),{connection:i}=await br(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return jR(c.data)}a(Pse,"request");function rA(e){return new Promise(async(t,r)=>{let n=ase(JR,["--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(rA,"reloadNATS");async function vse(){let{pid_file_path:e}=Il(Me.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await rA(e)}a(vse,"reloadNATSHub");async function Bse(){let{pid_file_path:e}=Il(Me.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await rA(e)}a(Bse,"reloadNATSLeaf");function Hse(e,t,r){let n;switch(e.code){case zH.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case zH.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(Hse,"requestErrorHandler");async function xse(e,t){let r=t+ye.SERVER_SUFFIX.LEAF;await _x(async()=>{e.subscribe===!0?await cx(r,ye.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await lx(r,ye.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(xse,"updateWorkStream");function _x(e){return cse.writeTransaction(Me.SYSTEM_SCHEMA_NAME,Me.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(_x,"exclusiveLock");async function dx(e,t){let r=BE.createNatsTableStreamName(e,t),n=await wl(),s=kse(e,t,n);await tA(r,[s])}a(dx,"createLocalTableStream");async function Fse(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await dx(n,s)}}a(Fse,"createTableStreams");async function fx(e,t,r=!1){if(Wt.get(Me.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=BE.createNatsTableStreamName(e,t),{jsm:s}=await br();r?await s.streams.purge(ye.WORK_QUEUE_CONSUMER_NAMES.stream_name):await s.streams.purge(n)}catch(n){if(n.message==="stream not found")Jr.warn(n);else throw n}}a(fx,"purgeTableStream");async function qse(e,t){if(Wt.get(Me.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await fx(e,t[r])}a(qse,"purgeSchemaTableStreams");async function Gse(e){return(await yl()).streams.info(e)}a(Gse,"getStreamInfo");function kse(e,t,r){return`${ye.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(kse,"createSubjectName");async function wl(){if(bl)return bl;if(bl=(await yl())?.nc?.info?.server_name,bl===void 0)throw new Error("Unable to get jetstream manager server name");return bl}a(wl,"getJsmServerName");async function Vse(){let e=await yl(),t=await wl(),r=await ox();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=$se(n),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(s.name===ye.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let _=`${ye.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;Jr.trace(`Updating stream subject name from: ${i} to: ${_}`),s.subjects[0]=_}else if(s.name===ye.WORK_QUEUE_CONSUMER_NAMES.stream_name){let _=`${ye.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;Jr.trace(`Updating stream subject name from: ${i} to: ${_}`),s.subjects[0]=_}else{let _=i.split(".");_[_.length-1]=t;let l=_.join(".");Jr.trace(`Updating stream subject name from: ${i} to: ${l}`),s.subjects[0]=l}await e.streams.update(s.name,s)}}}a(Vse,"updateLocalStreams");function $se(e){let{config:t}=e,r=!1;if(t.name===ye.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===ye.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let n=Wt.get(Me.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Wt.get(Me.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=Wt.get(Me.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($se,"updateStreamLimits")});var Xg=T((gme,Ox)=>{"use strict";var{decode:Yse}=require("msgpackr"),{isMainThread:pme,parentPort:Kse,threadId:Sme}=require("worker_threads"),sA=It(),ks=nt(),Wse=M(),bi=V(),hx=j(),px=M();et();var Qse=Ts(),{recordAction:zse,recordActionBinary:Jse}=(Us(),ee(qu)),{publishToStream:Xse}=sA,{ConsumerEvents:jse}=require("nats"),Tme={durable:ks.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:ks.WORK_QUEUE_CONSUMER_NAMES.deliver_group},Zse,eie,tie,Sx,Tx;Ox.exports={initialize:iA,workQueueListener:Ax,setSubscription:rie,setIgnoreOrigin:sie,getDatabaseSubscriptions:nie};async function iA(){Tx=!0,bi.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await sA.getNATSReferences();Zse=e,eie=e.info.server_name,tie=t,Sx=r}a(iA,"initialize");var GE=new Map;function rie(e,t,r){let n=GE.get(e);n||GE.set(e,n=new Map),n.set(t,r),Tx||iA().then(Ax)}a(rie,"setSubscription");function nie(){return GE}a(nie,"getDatabaseSubscriptions");var gx;function sie(e){gx=e}a(sie,"setIgnoreOrigin");var Rx=100,mx=new Array(Rx),qE=0;async function Ax(){let e=await Sx.consumers.get(ks.WORK_QUEUE_CONSUMER_NAMES.stream_name,ks.WORK_QUEUE_CONSUMER_NAMES.durable_name),t=!1,r;for(Kse?.on("message",async n=>{let{type:s}=n;s===px.ITC_EVENT_TYPES.SHUTDOWN&&(t=!0,r&&r.close?.()&&r.close())});!t;){r=await e.consume(),(async()=>{for await(let n of await r.status())if(n.type===jse.HeartbeatsMissed){let s=n.data;bi.trace(`${s} clustering ingest consumer heartbeats missed`),s===2&&(bi.warn("Restarting clustering ingest consumer due to missed heartbeat threshold being met"),r.stop())}})();try{for await(let n of r)await mx[qE],mx[qE]=iie(n).catch(s=>{bi.error(s)}),++qE>=Rx&&(qE=0)}catch(n){bi.error("Error consuming clustering ingest, restarting consumer",n)}sA.clearClientCache(),await iA()}}a(Ax,"workQueueListener");async function iie(e){let t=Yse(e.data);zse(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let r=e.headers,n=!1,s=hx.get(Wse.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(ks.MSG_HEADERS.TRANSACTED_NODES)&&r.values(ks.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(ks.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!gx),Jse(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(ks.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:u,table:_,records:l,hash_values:d,__origin:f,expiresAt:E}=t;bi.trace("processing message:",o,c,_,(l?"records: "+l.map(w=>w?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),bi.trace(`messageProcessor nats msg id: ${e.headers.get(ks.MSG_HEADERS.NATS_MSG_ID)}`);let h;l||(l=d);let{timestamp:p,user:S,node_name:A}=f||{},I=GE.get(c)?.get(_);if(!I)throw new Error("Missing table for replication message",_);if(o==="define_schema")t.type=o,I.send(t);else if(l.length===1&&!u)I.send({type:nA(o),value:l[0],id:d?.[0],expiresAt:E,timestamp:p,table:_,onCommit:h,user:S,nodeName:A});else{let w=l.map((B,K)=>({type:nA(o),value:B,expiresAt:E,id:d?.[K],table:_}));for(;u;)w.push({type:nA(u.operation),value:u.record,expiresAt:u.expiresAt,id:u.id,table:u.table}),u=u.next;I.send({type:"transaction",writes:w,table:_,timestamp:p,onCommit:h,user:S,nodeName:A})}hx.get(px.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&Xse(e.subject.split(".").slice(0,-1).join("."),Qse.createNatsTableStreamName(c,_),e.headers,e.data)}catch(o){bi.error(o)}e.ack()}a(iie,"messageProcessor");function nA(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(nA,"convertOperation")});var bx=Xg();(async()=>{try{await bx.initialize(),await bx.workQueueListener()}catch(e){console.error("Error launching Nats ingest service."),console.error(e)}})();
|