harperdb 4.5.0-beta.1 → 4.5.0-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/README.md +1 -1
  2. package/bin/harperdb.js +78 -78
  3. package/bin/lite.js +75 -75
  4. package/config/yaml/defaultConfig.yaml +2 -2
  5. package/json/systemSchema.json +6 -0
  6. package/launchServiceScripts/launchNatsIngestService.js +74 -74
  7. package/launchServiceScripts/launchNatsReplyService.js +75 -75
  8. package/launchServiceScripts/launchUpdateNodes4-0-0.js +74 -74
  9. package/npm-shrinkwrap.json +219 -49
  10. package/package.json +3 -1
  11. package/resources/RecordEncoder.d.ts +5 -1
  12. package/resources/Resource.d.ts +1 -0
  13. package/resources/Resources.d.ts +11 -3
  14. package/resources/Table.d.ts +12 -9
  15. package/resources/blob.d.ts +1 -0
  16. package/resources/databases.d.ts +11 -9
  17. package/server/Server.d.ts +4 -0
  18. package/server/jobs/jobProcess.js +74 -74
  19. package/server/serverHelpers/contentTypes.d.ts +1 -0
  20. package/server/storageReclamation.d.ts +18 -0
  21. package/server/threads/threadServer.js +74 -74
  22. package/studio/build-local/asset-manifest.json +37 -37
  23. package/studio/build-local/index.html +1 -1
  24. package/studio/build-local/running.html +86 -88
  25. package/studio/build-local/static/css/{main.60857e29.css → main.34b26890.css} +1 -1
  26. package/studio/build-local/static/js/{164.3490f18f.chunk.js → 164.05df362d.chunk.js} +1 -1
  27. package/studio/build-local/static/js/833.22ea9ecd.chunk.js +1 -0
  28. package/studio/build-local/static/js/{122.830d4399.chunk.js → 873.55a21fe5.chunk.js} +2 -2
  29. package/studio/build-local/static/js/{browse-csvupload.cdc5e843.chunk.js → browse-csvupload.1345356f.chunk.js} +1 -1
  30. package/studio/build-local/static/js/{browse-datatable.3f426683.chunk.js → browse-datatable.8d180288.chunk.js} +1 -1
  31. package/studio/build-local/static/js/{browse-entitymanager.e9b890eb.chunk.js → browse-entitymanager.3f0871ba.chunk.js} +1 -1
  32. package/studio/build-local/static/js/{browse-jsonviewer.d19731db.chunk.js → browse-jsonviewer.7ef3cb49.chunk.js} +1 -1
  33. package/studio/build-local/static/js/custom-functions.d7869749.chunk.js +1 -0
  34. package/studio/build-local/static/js/instance-cluster.ded77459.chunk.js +1 -0
  35. package/studio/build-local/static/js/instance-config.f3087710.chunk.js +1 -0
  36. package/studio/build-local/static/js/{instance-logs.1aaf5d15.chunk.js → instance-logs.fb150c6f.chunk.js} +1 -1
  37. package/studio/build-local/static/js/{instance-roles.7ac001d5.chunk.js → instance-roles.32b7be24.chunk.js} +1 -1
  38. package/studio/build-local/static/js/{instance-status.99235f8a.chunk.js → instance-status.d7ddf38a.chunk.js} +1 -1
  39. package/studio/build-local/static/js/{instance-users-datatable.30e06140.chunk.js → instance-users-datatable.68cb8e34.chunk.js} +1 -1
  40. package/studio/build-local/static/js/{instance-users-edit.d860ecc3.chunk.js → instance-users-edit.8de84af8.chunk.js} +1 -1
  41. package/studio/build-local/static/js/{instance-users.dc880abe.chunk.js → instance-users.ff289f79.chunk.js} +1 -1
  42. package/studio/build-local/static/js/instance.127e14b8.chunk.js +1 -0
  43. package/studio/build-local/static/js/instances.1dd2b960.chunk.js +1 -0
  44. package/studio/build-local/static/js/{main.9140b0ac.js → main.95c6282e.js} +2 -2
  45. package/studio/build-local/static/js/{offline-app.5bab91f6.chunk.js → offline-app.029491be.chunk.js} +1 -1
  46. package/studio/build-local/static/js/online-app.80d24598.chunk.js +1 -0
  47. package/studio/build-local/static/js/{organization-billing.75660563.chunk.js → organization-billing.586a6019.chunk.js} +1 -1
  48. package/studio/build-local/static/js/{organization-users.d913dc35.chunk.js → organization-users.0facdb34.chunk.js} +1 -1
  49. package/studio/build-local/static/js/{organization.2cbb1871.chunk.js → organization.4e2c7ae6.chunk.js} +1 -1
  50. package/studio/build-local/static/js/{organizations.b7abb2b5.chunk.js → organizations.c8c00251.chunk.js} +1 -1
  51. package/studio/build-local/static/js/{profile.cd02eab8.chunk.js → profile.a5fbf515.chunk.js} +1 -1
  52. package/studio/build-local/static/js/{resetPassword.f56c6a03.chunk.js → resetPassword.9ad8cde1.chunk.js} +1 -1
  53. package/studio/build-local/static/js/{roles-jsonviewer.891faeff.chunk.js → roles-jsonviewer.ad6e2622.chunk.js} +1 -1
  54. package/studio/build-local/static/js/signIn.3d65d81a.chunk.js +1 -0
  55. package/studio/build-local/static/js/signUp.eaa5b3f0.chunk.js +1 -0
  56. package/studio/build-local/static/js/{structure-reloader.4a977969.chunk.js → structure-reloader.8c8f5e18.chunk.js} +1 -1
  57. package/studio/build-local/static/js/topnav.73def1f2.chunk.js +1 -0
  58. package/studio/build-local/static/js/{updatePassword.f282bf0b.chunk.js → updatePassword.e0a672ee.chunk.js} +1 -1
  59. package/studio/build-local/static/media/logo_harper_db_studio.81490e70fa4af6879c2e.png +0 -0
  60. package/utility/hdbTerms.d.ts +5 -0
  61. package/utility/scripts/restartHdb.js +74 -74
  62. package/studio/build-local/static/js/833.3aff61e3.chunk.js +0 -1
  63. package/studio/build-local/static/js/custom-functions.d0e98d37.chunk.js +0 -1
  64. package/studio/build-local/static/js/instance-cluster.d5a2a397.chunk.js +0 -1
  65. package/studio/build-local/static/js/instance-config.347093bf.chunk.js +0 -1
  66. package/studio/build-local/static/js/instance.92e42f60.chunk.js +0 -1
  67. package/studio/build-local/static/js/instances.5ca66253.chunk.js +0 -1
  68. package/studio/build-local/static/js/online-app.38675097.chunk.js +0 -1
  69. package/studio/build-local/static/js/signIn.426c63a1.chunk.js +0 -1
  70. package/studio/build-local/static/js/signUp.2caeeae2.chunk.js +0 -1
  71. package/studio/build-local/static/js/topnav.d2fd9b1a.chunk.js +0 -1
  72. package/studio/build-local/static/media/logo_harper_db_studio.856391ec8a20ac3a6bee.png +0 -0
  73. /package/studio/build-local/static/js/{122.830d4399.chunk.js.LICENSE.txt → 873.55a21fe5.chunk.js.LICENSE.txt} +0 -0
  74. /package/studio/build-local/static/js/{main.9140b0ac.js.LICENSE.txt → main.95c6282e.js.LICENSE.txt} +0 -0
@@ -1,133 +1,133 @@
1
- "use strict";var $z=Object.create;var qd=Object.defineProperty;var Vz=Object.getOwnPropertyDescriptor;var Kz=Object.getOwnPropertyNames;var Yz=Object.getPrototypeOf,Wz=Object.prototype.hasOwnProperty;var a=(e,t)=>qd(e,"name",{value:t,configurable:!0});var be=(e,t)=>()=>(e&&(t=e(e=0)),t);var P=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Be=(e,t)=>{for(var r in t)qd(e,r,{get:t[r],enumerable:!0})},PC=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of Kz(t))!Wz.call(e,s)&&s!==r&&qd(e,s,{get:()=>t[s],enumerable:!(n=Vz(t,s))||n.enumerable});return e};var U=(e,t,r)=>(r=e!=null?$z(Yz(e)):{},PC(t||!e||!e.__esModule?qd(r,"default",{value:e,enumerable:!0}):r,e)),D=e=>PC(qd({},"__esModule",{value:!0}),e);var _t=P((NTe,MC)=>{var{join:zz,dirname:DC}=require("node:path"),{existsSync:Qz,readFileSync:jz}=require("node:fs");function Jz(){let t=__dirname,r,n=0;for(;!Qz(r=zz(t,"package.json"));)if(t===(t=DC(t))||n++>10)throw new Error("Could not find package root");return r}a(Jz,"findPackageJson");var LC=Jz(),Xz=JSON.parse(jz(LC,"utf8")),Zz=DC(LC);MC.exports={packageJson:Xz,PACKAGE_ROOT:Zz}});var PT=P((ITe,vC)=>{if(__filename.endsWith("dev.js")){let e=require("fast-glob"),{tmpdir:t}=require("node:os"),{relative:r,join:n}=require("node:path"),{existsSync:s,statSync:i,readFileSync:o,writeFileSync:c}=require("node:fs"),{isMainThread:l}=require("node:worker_threads"),{spawnSync:u,spawn:f}=require("node:child_process"),{PACKAGE_ROOT:d}=_t(),h=["bin","components","dataLayer","resources","server","sqlTranslator","upgrade","utility","validation"],_="ts-build";if(l){let g=!1,T=!1;if((T=s(n(d,_)))?g=e.sync(h.map(m=>`${m}/**/*.ts`),{cwd:d}).some(m=>{let A=0,w=0;try{A=i(n(d,m)).mtimeMs-5e3,w=i(n(d,_,m.replace(/.ts$/,".js"))).mtimeMs}catch{}return A>w}):g=!0,g){console.log("Compiling TypeScript...");let m=u("npx",["tsc"],{cwd:d});if(m.stdout?.length&&console.log(m.stdout.toString()),m.stderr?.length&&console.log(m.stderr.toString()),T){let A=n(t(),"harperdb-tsc.pid"),w=!1;if(s(A))try{process.kill(+o(A,"utf8"),0),w=!0}catch{}if(!w){console.log("Starting background TypeScript compilation...");let M=f("npx",["tsc","--watch"],{detached:!0,cwd:d,stdio:"ignore"});c(A,M.pid.toString()),M.unref()}}}}let p=vC.constructor,S=p._findPath;p._findPath=function(g,T,m){if(g.startsWith(".")&&!m&&T.length===1&&T[0].startsWith(d)&&!T[0].includes("node_modules")){let A=r(d,T[0]),w;A.startsWith(_)?w=n(d,r(_,A)):w=n(d,_,A);let M=n(w,g),F=M+".js";if(s(F))return F;if(M.includes(".")&&s(M))return M}return S(g,T,m)}}});var q={};Be(q,{AUTH_AUDIT_STATUS:()=>Us,AUTH_AUDIT_TYPES:()=>zo,BOOT_PROPS_FILE_NAME:()=>OQ,BOOT_PROP_PARAMS:()=>BC,CLUSTERING_FLAG:()=>XQ,CLUSTERING_PROCESSES:()=>lQ,CLUSTER_MESSAGE_TYPE_ENUM:()=>xT,CLUSTER_OPERATIONS:()=>GQ,CONFIG_PARAMS:()=>B,CONFIG_PARAM_MAP:()=>HC,DATABASES_DIR_NAME:()=>Za,DATABASES_PARAM_CONFIG:()=>YQ,DEFAULT_DATABASE_NAME:()=>dQ,ESCAPED_FORWARD_SLASH_REGEX:()=>AQ,FORWARD_SLASH_REGEX:()=>SQ,FUNC_VAL:()=>s2,GEO_CONVERSION_ENUM:()=>$Q,HDB_COMPONENT_CONFIG_FILE:()=>rQ,HDB_CONFIG_FILE:()=>eQ,HDB_DEFAULT_CONFIG_FILE:()=>tQ,HDB_FILE_PERMISSIONS:()=>wQ,HDB_HOME_DIR_NAME:()=>yQ,HDB_PID_FILE:()=>uQ,HDB_PROCESS_SERVICES:()=>cQ,HDB_PROC_NAME:()=>nQ,HDB_RESTART_SCRIPT:()=>sQ,HDB_ROOT_DIR_NAME:()=>LT,HDB_SETTINGS_NAMES:()=>VQ,HDB_SUPPORT_ADDRESS:()=>xC,INFO_TABLE_HASH_ATTRIBUTE:()=>MQ,INSERT_MAX_CHARACTER_SIZE:()=>DQ,INSTALL_PROMPTS:()=>PQ,ITC_EVENT_TYPES:()=>HT,JOB_STATUS_ENUM:()=>BQ,JOB_TYPE_ENUM:()=>WQ,JWT_ENUM:()=>i2,LAUNCH_SERVICE_SCRIPTS:()=>hQ,LEGACY_CONFIG_PARAMS:()=>KQ,LEGACY_DATABASES_DIR_NAME:()=>up,LICENSE_FILE_NAME:()=>xQ,LICENSE_KEY_DIR_NAME:()=>bQ,LICENSE_VALUES:()=>zQ,LOG_LEVELS:()=>_Q,LOG_NAMES:()=>fQ,MEM_SETTING_KEY:()=>RQ,METADATA_PROPERTY:()=>JQ,NODE_ERROR_CODES:()=>jQ,OPERATIONS_ENUM:()=>$t,PERMS_CRUD_ENUM:()=>r2,PERMS_UPDATE_RELEASE_TIMESTAMP:()=>t2,PRE_4_0_0_VERSION:()=>o2,PROCESS_DESCRIPTORS:()=>aQ,PROCESS_NAME_ENV_PROP:()=>CQ,RAM_ALLOCATION_ENUM:()=>QQ,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:()=>_p,REG_KEY_FILE_NAME:()=>UQ,RESTART_TIMEOUT_MS:()=>NQ,ROLE_TYPES_ENUM:()=>pQ,S3_BUCKET_AUTH_KEYS:()=>kQ,SEARCH_NOT_FOUND_MESSAGE:()=>mQ,SEARCH_WILDCARDS:()=>n2,SERVICE_ACTIONS_ENUM:()=>qQ,SUPPORT_HELP_MSG:()=>EQ,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:()=>vQ,SYSTEM_SCHEMA_NAME:()=>UT,SYSTEM_TABLE_NAMES:()=>dp,THREAD_TYPES:()=>kT,TIME_STAMP_NAMES:()=>e2,TIME_STAMP_NAMES_ENUM:()=>ZQ,TRANSACTIONS_DIR_NAME:()=>IQ,UNICODE_FORWARD_SLASH:()=>TQ,UNICODE_PERIOD:()=>gQ,UPGRADE_JSON_FIELD_NAMES_ENUM:()=>LQ,VALID_S3_FILE_TYPES:()=>HQ,VALID_SQL_OPS_ENUM:()=>FQ,VALUE_SEARCH_COMPARATORS:()=>fp,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:()=>BT});var cp,lp,eQ,tQ,LT,rQ,nQ,sQ,UC,DT,MT,vT,iQ,oQ,aQ,cQ,lQ,uQ,dQ,fQ,_Q,hQ,pQ,xC,EQ,mQ,gQ,SQ,TQ,AQ,RQ,UT,yQ,bQ,OQ,NQ,wQ,Za,up,IQ,CQ,BC,PQ,DQ,LQ,dp,MQ,vQ,UQ,xQ,BQ,$t,HQ,kQ,FQ,GQ,qQ,$Q,VQ,KQ,B,HC,YQ,WQ,xT,zQ,QQ,jQ,JQ,XQ,kC,FC,ZQ,e2,t2,fp,BT,r2,n2,s2,_p,i2,HT,kT,o2,Us,zo,H=be(()=>{cp=require("node:path"),lp=U(_t()),eQ="harperdb-config.yaml",tQ="defaultConfig.yaml",LT="hdb",rQ="config.yaml",nQ="harperdb.js",sQ="restartHdb.js",UC="HarperDB",DT="Custom Functions",MT="Clustering Hub",vT="Clustering Leaf",iQ="Clustering Ingest Service",oQ="Clustering Reply Service",aQ={HDB:UC,CLUSTERING_HUB:MT,CLUSTERING_LEAF:vT,CLUSTERING_INGEST_SERVICE:iQ,CLUSTERING_REPLY_SERVICE:oQ,CUSTOM_FUNCTIONS:DT,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"},cQ={harperdb:UC,"clustering hub":MT,"clustering leaf":vT,"custom functions":DT,custom_functions:DT,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers",http:"http"},lQ={CLUSTERING_HUB_PROC_DESCRIPTOR:MT,CLUSTERING_LEAF_PROC_DESCRIPTOR:vT},uQ="hdb.pid",dQ="data",fQ={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},_Q={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},hQ={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:(0,cp.join)(lp.PACKAGE_ROOT,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:(0,cp.join)(lp.PACKAGE_ROOT,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:(0,cp.join)(lp.PACKAGE_ROOT,"launchServiceScripts/launchUpdateNodes4-0-0.js")},pQ={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},xC="support@harperdb.io",EQ=`For support, please submit a request at https://harperdbhelp.zendesk.com/hc/en-us/requests/new or contact ${xC}`,mQ="None of the specified records were found.",gQ="U+002E",SQ=/\//g,TQ="U+002F",AQ=/U\+002F/g,RQ="--max-old-space-size=",UT="system",yQ=".harperdb",bQ="keys",OQ="hdb_boot_properties.file",NQ=6e4,wQ=448,Za="database",up="schema",IQ="transactions",CQ="PROCESS_NAME",BC={SETTINGS_PATH_KEY:"settings_path"},PQ={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",CLUSTERING_NODENAME:"CLUSTERING_NODENAME",CLUSTERING_ENABLED:"CLUSTERING_ENABLED",HDB_CONFIG:"HDB_CONFIG",DEFAULTS_MODE:"DEFAULTS_MODE",REPLICATION_HOSTNAME:"REPLICATION_HOSTNAME",CLUSTERING_PORT:"CLUSTERING_PORT",HDB_ROOT:"HDB_ROOT",SERVER_PORT:"SERVER_PORT",NODE_NAME:"NODE_NAME",CLUSTERING:"CLUSTERING"},DQ=250,LQ={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},dp={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"},MQ="info_id",vQ={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"},UQ="060493.ks",xQ=".license",BQ={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},$t={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",SIGN_CERTIFICATE:"sign_certificate",CREATE_CSR:"create_csr",LIST_CERTIFICATES:"list_certificates",ADD_CERTIFICATES:"add_certificate",REMOVE_CERTIFICATE:"remove_certificate",ADD_NODE_BACK:"add_node_back",REMOVE_NODE_BACK:"remove_node_back",ADD_SSH_KEY:"add_ssh_key",UPDATE_SSH_KEY:"update_ssh_key",DELETE_SSH_KEY:"delete_ssh_key",LIST_SSH_KEYS:"list_ssh_keys",SET_SSH_KNOWN_HOSTS:"set_ssh_known_hosts",GET_SSH_KNOWN_HOSTS:"get_ssh_known_hosts",GET_KEY:"get_key"},HQ={CSV:".csv",JSON:".json"},kQ={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},FQ={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},GQ={[$t.INSERT]:$t.INSERT,[$t.UPDATE]:$t.UPDATE,[$t.UPSERT]:$t.UPSERT,[$t.DELETE]:$t.DELETE},qQ={DEV:"dev",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status",OPERATION:"operation",RENEWCERTS:"renew-certs",COPYDB:"copy-db"},$Q={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},VQ={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"},KQ={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"},B={ANALYTICS_AGGREGATEPERIOD:"analytics_aggregatePeriod",AUTHENTICATION_AUTHORIZELOCAL:"authentication_authorizeLocal",AUTHENTICATION_CACHETTL:"authentication_cacheTTL",AUTHENTICATION_ENABLESESSIONS:"authentication_enableSessions",AUTHENTICATION_OPERATIONTOKENTIMEOUT:"authentication_operationTokenTimeout",AUTHENTICATION_REFRESHTOKENTIMEOUT:"authentication_refreshTokenTimeout",AUTHENTICATION_HASHFUNCTION:"authentication_hashFunction",CLUSTERING_USER:"clustering_user",CLUSTERING_ENABLED:"clustering_enabled",CLUSTERING_HUBSERVER_CLUSTER_NAME:"clustering_hubServer_cluster_name",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT:"clustering_hubServer_cluster_network_port",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES:"clustering_hubServer_cluster_network_routes",CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT:"clustering_hubServer_leafNodes_network_port",CLUSTERING_HUBSERVER_NETWORK_PORT:"clustering_hubServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_PORT:"clustering_leafServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_ROUTES:"clustering_leafServer_network_routes",CLUSTERING_LEAFSERVER_STREAMS_MAXAGE:"clustering_leafServer_streams_maxAge",CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES:"clustering_leafServer_streams_maxBytes",CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS:"clustering_leafServer_streams_maxMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS:"clustering_leafServer_streams_maxConsumeMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS:"clustering_leafServer_streams_maxIngestThreads",CLUSTERING_LEAFSERVER_STREAMS_PATH:"clustering_leafServer_streams_path",CLUSTERING_NODENAME:"clustering_nodeName",CLUSTERING_TLS_CERTIFICATE:"clustering_tls_certificate",CLUSTERING_TLS_PRIVATEKEY:"clustering_tls_privateKey",CLUSTERING_TLS_CERT_AUTH:"clustering_tls_certificateAuthority",CLUSTERING_TLS_INSECURE:"clustering_tls_insecure",CLUSTERING_TLS_VERIFY:"clustering_tls_verify",CLUSTERING_LOGLEVEL:"clustering_logLevel",CLUSTERING_REPUBLISHMESSAGES:"clustering_republishMessages",CLUSTERING_DATABASELEVEL:"clustering_databaseLevel",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",THREADS:"threads",THREADS_COUNT:"threads_count",THREADS_DEBUG:"threads_debug",THREADS_DEBUG_STARTINGPORT:"threads_debug_startingPort",THREADS_DEBUG_PORT:"threads_debug_port",THREADS_DEBUG_HOST:"threads_debug_host",THREADS_DEBUG_WAITFORDEBUGGER:"threads_debug_waitForDebugger",THREADS_MAXHEAPMEMORY:"threads_maxHeapMemory",HTTP_SESSIONAFFINITY:"http_sessionAffinity",HTTP_COMPRESSIONTHRESHOLD:"http_compressionThreshold",HTTP_CORS:"http_cors",HTTP_CORSACCESSLIST:"http_corsAccessList",HTTP_HEADERSTIMEOUT:"http_headersTimeout",HTTP_KEEPALIVETIMEOUT:"http_keepAliveTimeout",HTTP_MAXPARAMLENGTH:"http_maxParamLength",HTTP_TIMEOUT:"http_timeout",HTTP_PORT:"http_port",HTTP_SECUREPORT:"http_securePort",HTTP_MTLS:"http_mtls",HTTP_MTLS_REQUIRED:"http_mtls_required",HTTP_MTLS_USER:"http_mtls_user",HTTP_MAXHEADERSIZE:"http_maxHeaderSize",HTTP_THREADRANGE:"http_threadRange",HTTP_HTTP2:"http_http2",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_CONSOLE:"logging_console",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_NETWORK_HTTP2:"operationsApi_network_http2",OPERATIONSAPI_TLS:"operationsApi_tls",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",OPERATIONSAPI_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",OPERATIONSAPI_SYSINFO_NETWORK:"operationsApi_sysInfo_network",OPERATIONSAPI_SYSINFO_DISK:"operationsApi_sysInfo_disk",REPLICATION:"replication",REPLICATION_HOSTNAME:"replication_hostname",REPLICATION_URL:"replication_url",REPLICATION_PORT:"replication_port",REPLICATION_SECUREPORT:"replication_securePort",REPLICATION_ROUTES:"replication_routes",REPLICATION_DATABASES:"replication_databases",REPLICATION_ENABLEROOTCAS:"replication_enableRootCAs",REPLICATION_COPYTABLESTOCATCHUP:"replication_copyTablesToCatchUp",ROOTPATH:"rootPath",SERIALIZATION_BIGINT:"serialization_bigInt",STORAGE_WRITEASYNC:"storage_writeAsync",STORAGE_OVERLAPPINGSYNC:"storage_overlappingSync",STORAGE_CACHING:"storage_caching",STORAGE_COMPRESSION:"storage_compression",STORAGE_NOREADAHEAD:"storage_noReadAhead",STORAGE_PREFETCHWRITES:"storage_prefetchWrites",STORAGE_ENCRYPTION:"storage_encryption",STORAGE_MAXTRANSACTIONQUEUETIME:"storage_maxTransactionQueueTime",STORAGE_PATH:"storage_path",STORAGE_BLOBPATHS:"storage_blobPaths",STORAGE_AUDIT_PATH:"storage_audit_path",STORAGE_MAXFREESPACETOLOAD:"storage_maxFreeSpaceToLoad",STORAGE_MAXFREESPACETORETAIN:"storage_maxFreeSpaceToRetain",STORAGE_PAGESIZE:"storage_pageSize",STORAGE_COMPRESSION_DICTIONARY:"storage_compression_dictionary",STORAGE_COMPRESSION_THRESHOLD:"storage_compression_threshold",STORAGE_COMPACTONSTART:"storage_compactOnStart",STORAGE_COMPACTONSTARTKEEPBACKUP:"storage_compactOnStartKeepBackup",DATABASES:"databases",IGNORE_SCRIPTS:"ignoreScripts",MQTT_NETWORK_PORT:"mqtt_network_port",MQTT_WEBSOCKET:"mqtt_webSocket",MQTT_NETWORK_SECUREPORT:"mqtt_network_securePort",MQTT_NETWORK_MTLS:"mqtt_network_mtls",MQTT_NETWORK_MTLS_REQUIRED:"mqtt_network_mtls_required",MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY:"mqtt_network_mtls_certificateAuthority",MQTT_NETWORK_MTLS_USER:"mqtt_network_mtls_user",MQTT_REQUIREAUTHENTICATION:"mqtt_requireAuthentication",COMPONENTSROOT:"componentsRoot",TLS_CERTIFICATE:"tls_certificate",TLS_PRIVATEKEY:"tls_privateKey",TLS_CERTIFICATEAUTHORITY:"tls_certificateAuthority",TLS_CIPHERS:"tls_ciphers",TLS:"tls",CLONED:"cloned"},HC={settings_path:BC.SETTINGS_PATH_KEY,hdb_root_key:B.ROOTPATH,hdb_root:B.ROOTPATH,rootpath:B.ROOTPATH,server_port_key:B.OPERATIONSAPI_NETWORK_PORT,server_port:B.OPERATIONSAPI_NETWORK_PORT,cert_key:B.TLS_CERTIFICATE,certificate:B.TLS_CERTIFICATE,private_key_key:B.TLS_PRIVATEKEY,private_key:B.TLS_PRIVATEKEY,http_secure_enabled_key:B.OPERATIONSAPI_NETWORK_HTTPS,https_on:B.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:B.OPERATIONSAPI_NETWORK_CORS,cors_on:B.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:B.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:B.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:B.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:B.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:B.LOGGING_LEVEL,log_level:B.LOGGING_LEVEL,log_path_key:B.LOGGING_ROOT,log_path:B.LOGGING_ROOT,clustering_node_name_key:B.CLUSTERING_NODENAME,node_name:B.CLUSTERING_NODENAME,clustering_enabled_key:B.CLUSTERING_ENABLED,clustering:B.CLUSTERING_ENABLED,max_http_threads:B.THREADS_COUNT,max_hdb_processes:B.THREADS_COUNT,server_timeout_key:B.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:B.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:B.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:B.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:B.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:B.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:B.LOGGING_AUDITLOG,disable_transaction_log:B.LOGGING_AUDITLOG,operation_token_timeout_key:B.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:B.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:B.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:B.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:B.HTTP_PORT,custom_functions_port:B.HTTP_PORT,custom_functions_directory_key:B.COMPONENTSROOT,custom_functions_directory:B.COMPONENTSROOT,max_custom_function_processes:B.THREADS_COUNT,logging_console:B.LOGGING_CONSOLE,log_to_file:B.LOGGING_FILE,log_to_stdstreams:B.LOGGING_STDSTREAMS,local_studio_on:B.LOCALSTUDIO_ENABLED,clustering_port:B.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:B.CLUSTERING_USER,customfunctions_network_port:B.HTTP_PORT,customfunctions_tls_certificate:B.TLS_CERTIFICATE,customfunctions_network_cors:B.HTTP_CORS,customfunctions_network_corsaccesslist:B.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:B.HTTP_HEADERSTIMEOUT,customfunctions_network_https:B.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:B.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:B.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:B.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:B.HTTP_TIMEOUT,customfunctions_tls:B.TLS,http_threads:B.THREADS_COUNT,threads:B.THREADS_COUNT,threads_count:B.THREADS_COUNT,customfunctions_processes:B.THREADS_COUNT,customfunctions_root:B.COMPONENTSROOT,operationsapi_root:B.ROOTPATH};for(let e in B){let t=B[e];HC[t.toLowerCase()]=t}YQ={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},WQ={csv_file_load:"csv_file_load",csv_data_load:$t.CSV_DATA_LOAD,csv_url_load:$t.CSV_URL_LOAD,delete_files_before:"delete_files_before",delete_records_before:"delete_records_before",delete_audit_logs_before:"delete_audit_logs_before",delete_transaction_logs_before:"delete_transaction_logs_before",empty_trash:"empty_trash",export_local:"export_local",export_to_s3:"export_to_s3",import_from_s3:"import_from_s3",restart_service:"restart_service"},xT={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"},zQ={VERSION_DEFAULT:"2.2.0"},QQ={DEVELOPMENT:8192,DEFAULT:512},jQ={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST",ERR_INVALID_ARG_TYPE:"ERR_INVALID_ARG_TYPE"},JQ=Symbol("metadata"),XQ="__clustering__",kC="__createdtime__",FC="__updatedtime__",ZQ={CREATED_TIME:kC,UPDATED_TIME:FC},e2=[kC,FC],t2=15984864e5,fp={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},BT={"<":"LESS","<=":"LESS_OR_EQ",">":"GREATER",">=":"GREATER_OR_EQ","...":"BETWEEN"},r2={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},n2=["*","%"],s2="func_val",_p={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},i2={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},HT={SHUTDOWN:"shutdown",CHILD_STARTED:"child_started",CHILD_STOPPED:"child_stopped",SCHEMA:"schema",USER:"user",CLUSTER_STATUS_RESPONSE:"cluster_status_response",CLUSTER_STATUS_REQUEST:"cluster_status_request",METRICS:"metrics",GET_METRICS:"get_metrics",RESTART:"restart",START_JOB:"start_job",NATS_CONSUMER_UPDATE:"nats_consumer_update"},kT={HTTP:"http"},o2="3.x.x",Us={SUCCESS:"success",FAILURE:"failure"},zo={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"}});var ec=P((CTe,$C)=>{"use strict";var GC=require("minimist");$C.exports=a2;function a2(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=qC(process.env),n=qC(GC(process.argv))):(r=process.env,n=GC(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(a2,"assignCMDENVVariables");function qC(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}a(qC,"objKeysToLowerCase")});var ui=P(li=>{"use strict";global.Resource=li.Resource=void 0;global.tables=li.tables={};global.databases=li.databases={};global.getUser=li.getUser=void 0;global.server=li.server={};global.contentTypes=li.contentTypes=null;global.threads=li.threads=[];global.logger={};li._assignPackageExport=(e,t)=>{global[e]=li[e]=t}});var j=P((sP,iP)=>{"use strict";var Wi=require("fs-extra"),{workerData:c2,threadId:l2,isMainThread:u2}=require("worker_threads"),fi=require("path"),WC=require("yaml"),zC=require("properties-reader"),Vt=(H(),D(q)),VC=ec(),d2=require("os"),{PACKAGE_ROOT:$T}=_t(),{_assignPackageExport:f2}=ui(),KC=process.stdout.nativeWrite||(process.stdout.nativeWrite=process.stdout.write),hr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},QC={STDOUT:"stdOut",STDERR:"stdErr"},_2=fi.join($T,"logs"),h2=fi.join($T,"config/yaml/",Vt.HDB_DEFAULT_CONFIG_FILE),p2=1e4,FT,di,is,Pr,hp,$d,pp,Qo,Vd;Vd===void 0&&jC();Object.assign(sP,{notify:tP,fatal:rP,error:Ep,warn:nP,info:XC,debug:eP,trace:ZC,setLogLevel:y2,log_level:Pr,loggerWithTag:g2,suppressLogging:S2,initLogSettings:jC,logCustomLevel:A2,closeLogFile:VT,logsAtLevel:E2,getLogFilePath:a(()=>pp,"getLogFilePath"),OUTPUTS:QC,AuthAuditLog:N2});f2("logger",iP.exports);var GT;function E2(e){return hr[Pr]<=hr[e]}a(E2,"logsAtLevel");function jC(e=!1){try{if(Vd===void 0||e){VT();let t=R2(),r=VC(["ROOTPATH"]);try{Vd=zC(t)}catch(n){if(!r.ROOTPATH||r.ROOTPATH&&!Wi.pathExistsSync(fi.join(r.ROOTPATH,Vt.HDB_CONFIG_FILE)))throw n}if({level:Pr,config_log_path:$d,to_file:di,to_stream:is}=b2(r.ROOTPATH?fi.join(r.ROOTPATH,Vt.HDB_CONFIG_FILE):Vd.get("settings_path")),hp=Vt.LOG_NAMES.HDB,pp=fi.join($d,hp),u2)try{require("segfault-handler").registerHandler(fi.join($d,"crash.log"))}catch{}}}catch(t){if(Vd=void 0,t.code===Vt.NODE_ERROR_CODES.ENOENT||t.code===Vt.NODE_ERROR_CODES.ERR_INVALID_ARG_TYPE){let r=VC(Object.keys(Vt.CONFIG_PARAM_MAP),!0);for(let o in r){let c=Vt.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let l=r[o];if(c===Vt.CONFIG_PARAMS.LOGGING_LEVEL){Pr=l;continue}if(c===Vt.CONFIG_PARAMS.LOGGING_STDSTREAMS){is=l;continue}c===Vt.CONFIG_PARAMS.LOGGING_FILE&&(di=c),c===Vt.CONFIG_PARAMS.LOGGING_CONSOLE&&(FT=c)}let{default_level:n,default_to_file:s,default_to_stream:i}=O2();di=di===void 0?s:di,di=YC(di),is=is===void 0?i:is,is=YC(is),Pr=Pr===void 0?n:Pr,$d=_2,hp=Vt.LOG_NAMES.INSTALL,pp=fi.join($d,hp);return}throw Ep("Error initializing log settings"),Ep(t),t}process.env.DEV_MODE&&(is=!0),m2()}a(jC,"initLogSettings");var jo=!0;function m2(){di&&(process.stdout.write=function(e){return typeof e=="string"&&jo&&FT!==!1&&(qT(),e=e.toString(),e[e.length-1]===`
2
- `&&(e=e.slice(0,-1)),Wi.appendFileSync(Qo,xs("stdout",[e]))),KC.apply(process.stdout,arguments)},process.stderr.write=function(e){return typeof e=="string"&&jo&&FT!==!1&&(qT(),e[e.length-1]===`
3
- `&&(e=e.slice(0,-1)),Wi.appendFileSync(Qo,xs("stderr",[e]))),KC.apply(process.stderr,arguments)})}a(m2,"stdioLogging");function g2(e,t){let r={tagName:e.replace(/ /g,"-")};return{notify:n(tP,"notify"),fatal:n(rP,"fatal"),error:n(Ep,"error"),warn:n(nP,"warn"),info:n(XC,"info"),debug:n(eP,"debug"),trace:n(ZC,"trace")};function n(s,i){return!t||hr[Pr]<=hr[i]?function(...o){return s(r,...o)}:null}}a(g2,"loggerWithTag");function S2(e){try{jo=!1,e()}finally{jo=!0}}a(S2,"suppressLogging");var T2=c2?.name?.replace(/ /g,"-")||"main";function xs(e,t){let r=new Date(Date.now()).toISOString(),n="",s=t.length,i=s-1,o=[e],c=0,l;for(typeof t[0]=="object"&&(t[0]?.tagName?(o.push(t[0]?.tagName),c++):t[0]?.serviceName&&(l=t[0]?.serviceName,c++)),o.unshift(l||T2+"/"+l2);c<s;c++){let u=t[c];if(u instanceof Error&&u.stack)n+=u.stack,Object.keys(u).length>0&&(n+=`
1
+ "use strict";var wQ=Object.create;var Vd=Object.defineProperty;var IQ=Object.getOwnPropertyDescriptor;var CQ=Object.getOwnPropertyNames;var PQ=Object.getPrototypeOf,DQ=Object.prototype.hasOwnProperty;var a=(e,t)=>Vd(e,"name",{value:t,configurable:!0});var be=(e,t)=>()=>(e&&(t=e(e=0)),t);var I=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),ve=(e,t)=>{for(var r in t)Vd(e,r,{get:t[r],enumerable:!0})},QC=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of CQ(t))!DQ.call(e,s)&&s!==r&&Vd(e,s,{get:()=>t[s],enumerable:!(n=IQ(t,s))||n.enumerable});return e};var M=(e,t,r)=>(r=e!=null?wQ(PQ(e)):{},QC(t||!e||!e.__esModule?Vd(r,"default",{value:e,enumerable:!0}):r,e)),D=e=>QC(Vd({},"__esModule",{value:!0}),e);var Et=I((xTe,XC)=>{var{join:LQ,dirname:jC}=require("node:path"),{existsSync:MQ,readFileSync:vQ}=require("node:fs");function UQ(){let t=__dirname,r,n=0;for(;!MQ(r=LQ(t,"package.json"));)if(t===(t=jC(t))||n++>10)throw new Error("Could not find package root");return r}a(UQ,"findPackageJson");var JC=UQ(),xQ=JSON.parse(vQ(JC,"utf8")),BQ=jC(JC);XC.exports={packageJson:xQ,PACKAGE_ROOT:BQ}});var KT=I((HTe,ZC)=>{if(__filename.endsWith("dev.js")){let e=require("fast-glob"),{tmpdir:t}=require("node:os"),{relative:r,join:n}=require("node:path"),{existsSync:s,statSync:i,readFileSync:o,writeFileSync:c}=require("node:fs"),{isMainThread:l}=require("node:worker_threads"),{spawnSync:u,spawn:f}=require("node:child_process"),{PACKAGE_ROOT:d}=Et(),h=["bin","components","dataLayer","resources","server","sqlTranslator","upgrade","utility","validation"],_="ts-build";if(l){let g=!1,R=!1;if((R=s(n(d,_)))?g=e.sync(h.map(E=>`${E}/**/*.ts`),{cwd:d}).some(E=>{let A=0,O=0;try{A=i(n(d,E)).mtimeMs-5e3,O=i(n(d,_,E.replace(/.ts$/,".js"))).mtimeMs}catch{}return A>O}):g=!0,g){console.log("Compiling TypeScript...");let E=u("npx",["tsc"],{cwd:d});if(E.stdout?.length&&console.log(E.stdout.toString()),E.stderr?.length&&console.log(E.stderr.toString()),R){let A=n(t(),"harperdb-tsc.pid"),O=!1;if(s(A))try{process.kill(+o(A,"utf8"),0),O=!0}catch{}if(!O){console.log("Starting background TypeScript compilation...");let v=f("npx",["tsc","--watch"],{detached:!0,cwd:d,stdio:"ignore"});c(A,v.pid.toString()),v.unref()}}}}let p=ZC.constructor,S=p._findPath;p._findPath=function(g,R,E){if(g.startsWith(".")&&!E&&R.length===1&&R[0].startsWith(d)&&!R[0].includes("node_modules")){let A=r(d,R[0]),O;A.startsWith(_)?O=n(d,r(_,A)):O=n(d,_,A);let v=n(O,g),F=v+".js";if(s(F))return F;if(v.includes(".")&&s(v))return v}return S(g,R,E)}}});var q={};ve(q,{AUTH_AUDIT_STATUS:()=>Ls,AUTH_AUDIT_TYPES:()=>Vo,BOOT_PROPS_FILE_NAME:()=>c2,BOOT_PROP_PARAMS:()=>rP,CLUSTERING_FLAG:()=>v2,CLUSTERING_PROCESSES:()=>WQ,CLUSTER_MESSAGE_TYPE_ENUM:()=>XT,CLUSTER_OPERATIONS:()=>b2,CONFIG_PARAMS:()=>B,CONFIG_PARAM_MAP:()=>nP,DATABASES_DIR_NAME:()=>Za,DATABASES_PARAM_CONFIG:()=>I2,DEFAULT_DATABASE_NAME:()=>QQ,ESCAPED_FORWARD_SLASH_REGEX:()=>i2,FORWARD_SLASH_REGEX:()=>n2,FUNC_VAL:()=>F2,GEO_CONVERSION_ENUM:()=>N2,HDB_COMPONENT_CONFIG_FILE:()=>FQ,HDB_CONFIG_FILE:()=>HQ,HDB_DEFAULT_CONFIG_FILE:()=>kQ,HDB_FILE_PERMISSIONS:()=>u2,HDB_HOME_DIR_NAME:()=>a2,HDB_PID_FILE:()=>zQ,HDB_PROCESS_SERVICES:()=>YQ,HDB_PROC_NAME:()=>GQ,HDB_RESTART_SCRIPT:()=>qQ,HDB_ROOT_DIR_NAME:()=>WT,HDB_SETTINGS_NAMES:()=>JT,HDB_SUPPORT_ADDRESS:()=>tP,INFO_TABLE_HASH_ATTRIBUTE:()=>m2,INSERT_MAX_CHARACTER_SIZE:()=>h2,INSTALL_PROMPTS:()=>_2,ITC_EVENT_TYPES:()=>eA,JOB_STATUS_ENUM:()=>T2,JOB_TYPE_ENUM:()=>C2,JWT_ENUM:()=>Yd,LAUNCH_SERVICE_SCRIPTS:()=>XQ,LEGACY_CONFIG_PARAMS:()=>w2,LEGACY_DATABASES_DIR_NAME:()=>Ap,LICENSE_FILE_NAME:()=>S2,LICENSE_KEY_DIR_NAME:()=>jT,LICENSE_VALUES:()=>P2,LOG_LEVELS:()=>JQ,LOG_NAMES:()=>jQ,MEM_SETTING_KEY:()=>o2,METADATA_PROPERTY:()=>M2,NODE_ERROR_CODES:()=>L2,OPERATIONS_ENUM:()=>$t,PERMS_CRUD_ENUM:()=>H2,PERMS_UPDATE_RELEASE_TIMESTAMP:()=>B2,PRE_4_0_0_VERSION:()=>G2,PROCESS_DESCRIPTORS:()=>KQ,PROCESS_NAME_ENV_PROP:()=>f2,RAM_ALLOCATION_ENUM:()=>D2,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:()=>yp,REG_KEY_FILE_NAME:()=>g2,RESTART_TIMEOUT_MS:()=>l2,ROLE_TYPES_ENUM:()=>ZQ,S3_BUCKET_AUTH_KEYS:()=>R2,SEARCH_NOT_FOUND_MESSAGE:()=>t2,SEARCH_WILDCARDS:()=>k2,SERVICE_ACTIONS_ENUM:()=>O2,SUPPORT_HELP_MSG:()=>e2,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:()=>E2,SYSTEM_SCHEMA_NAME:()=>Kd,SYSTEM_TABLE_NAMES:()=>Hl,THREAD_TYPES:()=>tA,TIME_STAMP_NAMES:()=>x2,TIME_STAMP_NAMES_ENUM:()=>U2,TRANSACTIONS_DIR_NAME:()=>d2,UNICODE_FORWARD_SLASH:()=>s2,UNICODE_PERIOD:()=>r2,UPGRADE_JSON_FIELD_NAMES_ENUM:()=>p2,VALID_S3_FILE_TYPES:()=>A2,VALID_SQL_OPS_ENUM:()=>y2,VALUE_SEARCH_COMPARATORS:()=>Rp,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:()=>ZT});var Sp,Tp,HQ,kQ,WT,FQ,GQ,qQ,eP,YT,zT,QT,$Q,VQ,KQ,YQ,WQ,zQ,QQ,jQ,JQ,XQ,ZQ,tP,e2,t2,r2,n2,s2,i2,o2,Kd,a2,jT,c2,l2,u2,Za,Ap,d2,f2,rP,_2,h2,p2,Hl,m2,E2,g2,S2,T2,$t,A2,R2,y2,b2,O2,N2,JT,w2,B,nP,I2,C2,XT,P2,D2,L2,M2,v2,sP,iP,U2,x2,B2,Rp,ZT,H2,k2,F2,yp,Yd,eA,tA,G2,Ls,Vo,H=be(()=>{Sp=require("node:path"),Tp=M(Et()),HQ="harperdb-config.yaml",kQ="defaultConfig.yaml",WT="hdb",FQ="config.yaml",GQ="harperdb.js",qQ="restartHdb.js",eP="HarperDB",YT="Custom Functions",zT="Clustering Hub",QT="Clustering Leaf",$Q="Clustering Ingest Service",VQ="Clustering Reply Service",KQ={HDB:eP,CLUSTERING_HUB:zT,CLUSTERING_LEAF:QT,CLUSTERING_INGEST_SERVICE:$Q,CLUSTERING_REPLY_SERVICE:VQ,CUSTOM_FUNCTIONS:YT,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"},YQ={harperdb:eP,"clustering hub":zT,"clustering leaf":QT,"custom functions":YT,custom_functions:YT,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers",http:"http"},WQ={CLUSTERING_HUB_PROC_DESCRIPTOR:zT,CLUSTERING_LEAF_PROC_DESCRIPTOR:QT},zQ="hdb.pid",QQ="data",jQ={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},JQ={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},XQ={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:(0,Sp.join)(Tp.PACKAGE_ROOT,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:(0,Sp.join)(Tp.PACKAGE_ROOT,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:(0,Sp.join)(Tp.PACKAGE_ROOT,"launchServiceScripts/launchUpdateNodes4-0-0.js")},ZQ={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},tP="support@harperdb.io",e2=`For support, please submit a request at https://harperdbhelp.zendesk.com/hc/en-us/requests/new or contact ${tP}`,t2="None of the specified records were found.",r2="U+002E",n2=/\//g,s2="U+002F",i2=/U\+002F/g,o2="--max-old-space-size=",Kd="system",a2=".harperdb",jT="keys",c2="hdb_boot_properties.file",l2=6e4,u2=448,Za="database",Ap="schema",d2="transactions",f2="PROCESS_NAME",rP={SETTINGS_PATH_KEY:"settings_path"},_2={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",CLUSTERING_NODENAME:"CLUSTERING_NODENAME",CLUSTERING_ENABLED:"CLUSTERING_ENABLED",HDB_CONFIG:"HDB_CONFIG",DEFAULTS_MODE:"DEFAULTS_MODE",REPLICATION_HOSTNAME:"REPLICATION_HOSTNAME",CLUSTERING_PORT:"CLUSTERING_PORT",HDB_ROOT:"HDB_ROOT",SERVER_PORT:"SERVER_PORT",NODE_NAME:"NODE_NAME",CLUSTERING:"CLUSTERING"},h2=250,p2={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},Hl={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"},m2="info_id",E2={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"},g2="060493.ks",S2=".license",T2={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},$t={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",SIGN_CERTIFICATE:"sign_certificate",CREATE_CSR:"create_csr",LIST_CERTIFICATES:"list_certificates",ADD_CERTIFICATES:"add_certificate",REMOVE_CERTIFICATE:"remove_certificate",ADD_NODE_BACK:"add_node_back",REMOVE_NODE_BACK:"remove_node_back",ADD_SSH_KEY:"add_ssh_key",UPDATE_SSH_KEY:"update_ssh_key",DELETE_SSH_KEY:"delete_ssh_key",LIST_SSH_KEYS:"list_ssh_keys",SET_SSH_KNOWN_HOSTS:"set_ssh_known_hosts",GET_SSH_KNOWN_HOSTS:"get_ssh_known_hosts",GET_KEY:"get_key"},A2={CSV:".csv",JSON:".json"},R2={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},y2={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},b2={[$t.INSERT]:$t.INSERT,[$t.UPDATE]:$t.UPDATE,[$t.UPSERT]:$t.UPSERT,[$t.DELETE]:$t.DELETE},O2={DEV:"dev",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status",OPERATION:"operation",RENEWCERTS:"renew-certs",COPYDB:"copy-db"},N2={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},JT={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"},w2={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"},B={ANALYTICS_AGGREGATEPERIOD:"analytics_aggregatePeriod",AUTHENTICATION_AUTHORIZELOCAL:"authentication_authorizeLocal",AUTHENTICATION_CACHETTL:"authentication_cacheTTL",AUTHENTICATION_ENABLESESSIONS:"authentication_enableSessions",AUTHENTICATION_OPERATIONTOKENTIMEOUT:"authentication_operationTokenTimeout",AUTHENTICATION_REFRESHTOKENTIMEOUT:"authentication_refreshTokenTimeout",AUTHENTICATION_HASHFUNCTION:"authentication_hashFunction",CLUSTERING_USER:"clustering_user",CLUSTERING_ENABLED:"clustering_enabled",CLUSTERING_HUBSERVER_CLUSTER_NAME:"clustering_hubServer_cluster_name",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT:"clustering_hubServer_cluster_network_port",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES:"clustering_hubServer_cluster_network_routes",CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT:"clustering_hubServer_leafNodes_network_port",CLUSTERING_HUBSERVER_NETWORK_PORT:"clustering_hubServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_PORT:"clustering_leafServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_ROUTES:"clustering_leafServer_network_routes",CLUSTERING_LEAFSERVER_STREAMS_MAXAGE:"clustering_leafServer_streams_maxAge",CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES:"clustering_leafServer_streams_maxBytes",CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS:"clustering_leafServer_streams_maxMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS:"clustering_leafServer_streams_maxConsumeMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS:"clustering_leafServer_streams_maxIngestThreads",CLUSTERING_LEAFSERVER_STREAMS_PATH:"clustering_leafServer_streams_path",CLUSTERING_NODENAME:"clustering_nodeName",CLUSTERING_TLS_CERTIFICATE:"clustering_tls_certificate",CLUSTERING_TLS_PRIVATEKEY:"clustering_tls_privateKey",CLUSTERING_TLS_CERT_AUTH:"clustering_tls_certificateAuthority",CLUSTERING_TLS_INSECURE:"clustering_tls_insecure",CLUSTERING_TLS_VERIFY:"clustering_tls_verify",CLUSTERING_LOGLEVEL:"clustering_logLevel",CLUSTERING_REPUBLISHMESSAGES:"clustering_republishMessages",CLUSTERING_DATABASELEVEL:"clustering_databaseLevel",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",THREADS:"threads",THREADS_COUNT:"threads_count",THREADS_DEBUG:"threads_debug",THREADS_DEBUG_STARTINGPORT:"threads_debug_startingPort",THREADS_DEBUG_PORT:"threads_debug_port",THREADS_DEBUG_HOST:"threads_debug_host",THREADS_DEBUG_WAITFORDEBUGGER:"threads_debug_waitForDebugger",THREADS_MAXHEAPMEMORY:"threads_maxHeapMemory",HTTP_SESSIONAFFINITY:"http_sessionAffinity",HTTP_COMPRESSIONTHRESHOLD:"http_compressionThreshold",HTTP_CORS:"http_cors",HTTP_CORSACCESSLIST:"http_corsAccessList",HTTP_CORSACCESSCONTROLALLOWHEADERS:"http_corsAccessControlAllowHeaders",HTTP_HEADERSTIMEOUT:"http_headersTimeout",HTTP_KEEPALIVETIMEOUT:"http_keepAliveTimeout",HTTP_MAXPARAMLENGTH:"http_maxParamLength",HTTP_TIMEOUT:"http_timeout",HTTP_PORT:"http_port",HTTP_SECUREPORT:"http_securePort",HTTP_MTLS:"http_mtls",HTTP_MTLS_REQUIRED:"http_mtls_required",HTTP_MTLS_USER:"http_mtls_user",HTTP_MAXHEADERSIZE:"http_maxHeaderSize",HTTP_THREADRANGE:"http_threadRange",HTTP_HTTP2:"http_http2",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_CONSOLE:"logging_console",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_ROTATION_RETENTION:"logging_rotation_retention",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_NETWORK_HTTP2:"operationsApi_network_http2",OPERATIONSAPI_TLS:"operationsApi_tls",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",OPERATIONSAPI_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",OPERATIONSAPI_SYSINFO_NETWORK:"operationsApi_sysInfo_network",OPERATIONSAPI_SYSINFO_DISK:"operationsApi_sysInfo_disk",REPLICATION:"replication",REPLICATION_HOSTNAME:"replication_hostname",REPLICATION_URL:"replication_url",REPLICATION_PORT:"replication_port",REPLICATION_SECUREPORT:"replication_securePort",REPLICATION_ROUTES:"replication_routes",REPLICATION_DATABASES:"replication_databases",REPLICATION_ENABLEROOTCAS:"replication_enableRootCAs",REPLICATION_COPYTABLESTOCATCHUP:"replication_copyTablesToCatchUp",ROOTPATH:"rootPath",SERIALIZATION_BIGINT:"serialization_bigInt",STORAGE_WRITEASYNC:"storage_writeAsync",STORAGE_OVERLAPPINGSYNC:"storage_overlappingSync",STORAGE_CACHING:"storage_caching",STORAGE_COMPRESSION:"storage_compression",STORAGE_NOREADAHEAD:"storage_noReadAhead",STORAGE_PREFETCHWRITES:"storage_prefetchWrites",STORAGE_ENCRYPTION:"storage_encryption",STORAGE_MAXTRANSACTIONQUEUETIME:"storage_maxTransactionQueueTime",STORAGE_PATH:"storage_path",STORAGE_BLOBPATHS:"storage_blobPaths",STORAGE_AUDIT_PATH:"storage_audit_path",STORAGE_MAXFREESPACETOLOAD:"storage_maxFreeSpaceToLoad",STORAGE_MAXFREESPACETORETAIN:"storage_maxFreeSpaceToRetain",STORAGE_PAGESIZE:"storage_pageSize",STORAGE_COMPRESSION_DICTIONARY:"storage_compression_dictionary",STORAGE_COMPRESSION_THRESHOLD:"storage_compression_threshold",STORAGE_COMPACTONSTART:"storage_compactOnStart",STORAGE_COMPACTONSTARTKEEPBACKUP:"storage_compactOnStartKeepBackup",STORAGE_RECLAMATION_THRESHOLD:"storage_reclamation_threshold",STORAGE_RECLAMATION_INTERVAL:"storage_reclamation_interval",STORAGE_RECLAMATION_EVICTIONFACTOR:"storage_reclamation_evictionFactor",DATABASES:"databases",IGNORE_SCRIPTS:"ignoreScripts",MQTT_NETWORK_PORT:"mqtt_network_port",MQTT_WEBSOCKET:"mqtt_webSocket",MQTT_NETWORK_SECUREPORT:"mqtt_network_securePort",MQTT_NETWORK_MTLS:"mqtt_network_mtls",MQTT_NETWORK_MTLS_REQUIRED:"mqtt_network_mtls_required",MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY:"mqtt_network_mtls_certificateAuthority",MQTT_NETWORK_MTLS_USER:"mqtt_network_mtls_user",MQTT_REQUIREAUTHENTICATION:"mqtt_requireAuthentication",COMPONENTSROOT:"componentsRoot",TLS_CERTIFICATE:"tls_certificate",TLS_PRIVATEKEY:"tls_privateKey",TLS_CERTIFICATEAUTHORITY:"tls_certificateAuthority",TLS_CIPHERS:"tls_ciphers",TLS:"tls",CLONED:"cloned"},nP={settings_path:rP.SETTINGS_PATH_KEY,hdb_root_key:B.ROOTPATH,hdb_root:B.ROOTPATH,rootpath:B.ROOTPATH,server_port_key:B.OPERATIONSAPI_NETWORK_PORT,server_port:B.OPERATIONSAPI_NETWORK_PORT,cert_key:B.TLS_CERTIFICATE,certificate:B.TLS_CERTIFICATE,private_key_key:B.TLS_PRIVATEKEY,private_key:B.TLS_PRIVATEKEY,http_secure_enabled_key:B.OPERATIONSAPI_NETWORK_HTTPS,https_on:B.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:B.OPERATIONSAPI_NETWORK_CORS,cors_on:B.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:B.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:B.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:B.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:B.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:B.LOGGING_LEVEL,log_level:B.LOGGING_LEVEL,log_path_key:B.LOGGING_ROOT,log_path:B.LOGGING_ROOT,clustering_node_name_key:B.CLUSTERING_NODENAME,node_name:B.CLUSTERING_NODENAME,clustering_enabled_key:B.CLUSTERING_ENABLED,clustering:B.CLUSTERING_ENABLED,max_http_threads:B.THREADS_COUNT,max_hdb_processes:B.THREADS_COUNT,server_timeout_key:B.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:B.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:B.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:B.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:B.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:B.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:B.LOGGING_AUDITLOG,disable_transaction_log:B.LOGGING_AUDITLOG,operation_token_timeout_key:B.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:B.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:B.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:B.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:B.HTTP_PORT,custom_functions_port:B.HTTP_PORT,custom_functions_directory_key:B.COMPONENTSROOT,custom_functions_directory:B.COMPONENTSROOT,max_custom_function_processes:B.THREADS_COUNT,logging_console:B.LOGGING_CONSOLE,log_to_file:B.LOGGING_FILE,log_to_stdstreams:B.LOGGING_STDSTREAMS,local_studio_on:B.LOCALSTUDIO_ENABLED,clustering_port:B.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:B.CLUSTERING_USER,customfunctions_network_port:B.HTTP_PORT,customfunctions_tls_certificate:B.TLS_CERTIFICATE,customfunctions_network_cors:B.HTTP_CORS,customfunctions_network_corsaccesslist:B.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:B.HTTP_HEADERSTIMEOUT,customfunctions_network_https:B.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:B.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:B.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:B.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:B.HTTP_TIMEOUT,customfunctions_tls:B.TLS,http_threads:B.THREADS_COUNT,threads:B.THREADS_COUNT,threads_count:B.THREADS_COUNT,customfunctions_processes:B.THREADS_COUNT,customfunctions_root:B.COMPONENTSROOT,operationsapi_root:B.ROOTPATH};for(let e in B){let t=B[e];nP[t.toLowerCase()]=t}I2={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},C2={csv_file_load:"csv_file_load",csv_data_load:$t.CSV_DATA_LOAD,csv_url_load:$t.CSV_URL_LOAD,delete_files_before:"delete_files_before",delete_records_before:"delete_records_before",delete_audit_logs_before:"delete_audit_logs_before",delete_transaction_logs_before:"delete_transaction_logs_before",empty_trash:"empty_trash",export_local:"export_local",export_to_s3:"export_to_s3",import_from_s3:"import_from_s3",restart_service:"restart_service"},XT={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"},P2={VERSION_DEFAULT:"2.2.0"},D2={DEVELOPMENT:8192,DEFAULT:512},L2={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST",ERR_INVALID_ARG_TYPE:"ERR_INVALID_ARG_TYPE"},M2=Symbol("metadata"),v2="__clustering__",sP="__createdtime__",iP="__updatedtime__",U2={CREATED_TIME:sP,UPDATED_TIME:iP},x2=[sP,iP],B2=15984864e5,Rp={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},ZT={"<":"LESS","<=":"LESS_OR_EQ",">":"GREATER",">=":"GREATER_OR_EQ","...":"BETWEEN"},H2={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},k2=["*","%"],F2="func_val",yp={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},Yd={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},eA={SHUTDOWN:"shutdown",CHILD_STARTED:"child_started",CHILD_STOPPED:"child_stopped",SCHEMA:"schema",USER:"user",CLUSTER_STATUS_RESPONSE:"cluster_status_response",CLUSTER_STATUS_REQUEST:"cluster_status_request",METRICS:"metrics",GET_METRICS:"get_metrics",RESTART:"restart",START_JOB:"start_job",NATS_CONSUMER_UPDATE:"nats_consumer_update"},tA={HTTP:"http"},G2="3.x.x",Ls={SUCCESS:"success",FAILURE:"failure"},Vo={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"}});var ec=I((kTe,cP)=>{"use strict";var oP=require("minimist");cP.exports=q2;function q2(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=aP(process.env),n=aP(oP(process.argv))):(r=process.env,n=oP(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(q2,"assignCMDENVVariables");function aP(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}a(aP,"objKeysToLowerCase")});var ci=I(Ms=>{"use strict";global.Resource=Ms.Resource=void 0;global.tables=Ms.tables={};global.databases=Ms.databases={};global.getUser=Ms.getUser=void 0;global.authenticateUser=Ms.authenticateUser=void 0;global.server=Ms.server={};global.contentTypes=Ms.contentTypes=null;global.threads=Ms.threads=[];global.logger={};Ms._assignPackageExport=(e,t)=>{global[e]=Ms[e]=t}});var j=I((yP,bP)=>{"use strict";var Ki=require("fs-extra"),{workerData:$2,threadId:V2,isMainThread:K2}=require("worker_threads"),ui=require("path"),fP=require("yaml"),_P=require("properties-reader"),Vt=(H(),D(q)),lP=ec(),Y2=require("os"),{PACKAGE_ROOT:iA}=Et(),{_assignPackageExport:W2}=ci(),uP=process.stdout.nativeWrite||(process.stdout.nativeWrite=process.stdout.write),_r={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},hP={STDOUT:"stdOut",STDERR:"stdErr"},z2=ui.join(iA,"logs"),Q2=ui.join(iA,"config/yaml/",Vt.HDB_DEFAULT_CONFIG_FILE),j2=1e4,rA,li,os,wr,bp,Wd,Op,Ko,zd;zd===void 0&&pP();Object.assign(yP,{notify:TP,fatal:AP,error:Np,warn:RP,info:EP,debug:SP,trace:gP,setLogLevel:sj,log_level:wr,loggerWithTag:Z2,suppressLogging:ej,initLogSettings:pP,logCustomLevel:rj,closeLogFile:oA,logsAtLevel:J2,getLogFilePath:a(()=>Op,"getLogFilePath"),OUTPUTS:hP,AuthAuditLog:aj});W2("logger",bP.exports);var nA;function J2(e){return _r[wr]<=_r[e]}a(J2,"logsAtLevel");function pP(e=!1){try{if(zd===void 0||e){oA();let t=nj(),r=lP(["ROOTPATH"]);try{zd=_P(t)}catch(n){if(!r.ROOTPATH||r.ROOTPATH&&!Ki.pathExistsSync(ui.join(r.ROOTPATH,Vt.HDB_CONFIG_FILE)))throw n}if({level:wr,config_log_path:Wd,to_file:li,to_stream:os}=ij(r.ROOTPATH?ui.join(r.ROOTPATH,Vt.HDB_CONFIG_FILE):zd.get("settings_path")),bp=Vt.LOG_NAMES.HDB,Op=ui.join(Wd,bp),K2)try{require("segfault-handler").registerHandler(ui.join(Wd,"crash.log"))}catch{}}}catch(t){if(zd=void 0,t.code===Vt.NODE_ERROR_CODES.ENOENT||t.code===Vt.NODE_ERROR_CODES.ERR_INVALID_ARG_TYPE){let r=lP(Object.keys(Vt.CONFIG_PARAM_MAP),!0);for(let o in r){let c=Vt.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let l=r[o];if(c===Vt.CONFIG_PARAMS.LOGGING_LEVEL){wr=l;continue}if(c===Vt.CONFIG_PARAMS.LOGGING_STDSTREAMS){os=l;continue}c===Vt.CONFIG_PARAMS.LOGGING_FILE&&(li=c),c===Vt.CONFIG_PARAMS.LOGGING_CONSOLE&&(rA=c)}let{default_level:n,default_to_file:s,default_to_stream:i}=oj();li=li===void 0?s:li,li=dP(li),os=os===void 0?i:os,os=dP(os),wr=wr===void 0?n:wr,Wd=z2,bp=Vt.LOG_NAMES.INSTALL,Op=ui.join(Wd,bp);return}throw Np("Error initializing log settings"),Np(t),t}process.env.DEV_MODE&&(os=!0),X2()}a(pP,"initLogSettings");var Yo=!0;function X2(){li&&(process.stdout.write=function(e){return typeof e=="string"&&Yo&&rA!==!1&&(sA(),e=e.toString(),e[e.length-1]===`
2
+ `&&(e=e.slice(0,-1)),Ki.appendFileSync(Ko,vs("stdout",[e]))),uP.apply(process.stdout,arguments)},process.stderr.write=function(e){return typeof e=="string"&&Yo&&rA!==!1&&(sA(),e[e.length-1]===`
3
+ `&&(e=e.slice(0,-1)),Ki.appendFileSync(Ko,vs("stderr",[e]))),uP.apply(process.stderr,arguments)})}a(X2,"stdioLogging");function Z2(e,t){let r={tagName:e.replace(/ /g,"-")};return{notify:n(TP,"notify"),fatal:n(AP,"fatal"),error:n(Np,"error"),warn:n(RP,"warn"),info:n(EP,"info"),debug:n(SP,"debug"),trace:n(gP,"trace")};function n(s,i){return!t||_r[wr]<=_r[i]?function(...o){return s(r,...o)}:null}}a(Z2,"loggerWithTag");function ej(e){try{Yo=!1,e()}finally{Yo=!0}}a(ej,"suppressLogging");var tj=$2?.name?.replace(/ /g,"-")||"main";function vs(e,t){let r=new Date(Date.now()).toISOString(),n="",s=t.length,i=s-1,o=[e],c=0,l;for(typeof t[0]=="object"&&(t[0]?.tagName?(o.push(t[0]?.tagName),c++):t[0]?.serviceName&&(l=t[0]?.serviceName,c++)),o.unshift(l||tj+"/"+V2);c<s;c++){let u=t[c];if(u instanceof Error&&u.stack)n+=u.stack,Object.keys(u).length>0&&(n+=`
4
4
  `+JSON.stringify(u)),u.cause&&(t[c--]=u.cause,u&&(n+=`
5
5
  Caused by:`));else if(typeof u=="object")try{n+=JSON.stringify(u)}catch{n+="Object ["+Object.keys(u)+"]"}else n+=u;c<i&&(n+=" ")}return`${r} [${o.join("] [")}]: ${n}
6
- `}a(xs,"createLogRecord");function Kd(e){if(di){if(JC(e),is){jo=!1;try{process.stdout.write(e)}finally{jo=!0}}}else is&&process.stdout.write(e)}a(Kd,"logStdOut");function mp(e){if(di){if(JC(e),is){jo=!1;try{process.stderr.write(e)}finally{jo=!0}}}else is&&process.stderr.write(e)}a(mp,"logStdErr");function JC(e){qT(),Qo?Wi.appendFileSync(Qo,e):GT||console.log(e)}a(JC,"logToFile");function VT(){try{Wi.closeSync(Qo)}catch{}Qo=null}a(VT,"closeLogFile");function qT(){if(!Qo){try{Qo=Wi.openSync(pp,"a")}catch(e){GT||(GT=!0,console.error(e))}setTimeout(()=>{VT()},p2).unref()}}a(qT,"openLogFile");function XC(...e){hr[Pr]<=hr.info&&Kd(xs("info",e))}a(XC,"info");function ZC(...e){hr[Pr]<=hr.trace&&Kd(xs("trace",e))}a(ZC,"trace");function Ep(...e){hr[Pr]<=hr.error&&mp(xs("error",e))}a(Ep,"error");function eP(...e){hr[Pr]<=hr.debug&&Kd(xs("debug",e))}a(eP,"debug");function tP(...e){hr[Pr]<=hr.notify&&Kd(xs("notify",e))}a(tP,"notify");function rP(...e){hr[Pr]<=hr.fatal&&mp(xs("fatal",e))}a(rP,"fatal");function nP(...e){hr[Pr]<=hr.warn&&mp(xs("warn",e))}a(nP,"warn");function A2(e,t,...r){t===QC.STDERR?mp(xs(e,r)):Kd(xs(e,r))}a(A2,"logCustomLevel");function R2(){let e;try{e=d2.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=fi.join(e,Vt.HDB_HOME_DIR_NAME,Vt.BOOT_PROPS_FILE_NAME);return Wi.existsSync(t)||(t=fi.join($T,"utility/hdb_boot_properties.file")),t}a(R2,"getPropsFilePath");function y2(e){Pr=e}a(y2,"setLogLevel");function YC(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(YC,"autoCastBoolean");function b2(e){try{if(e.includes("config/settings.js")){let o=zC(e);return{level:o.get(Vt.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:fi.dirname(o.get(Vt.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(Vt.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(Vt.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=WC.parseDocument(Wi.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===Vt.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(b2,"getLogConfig");function O2(){try{let e=WC.parseDocument(Wi.readFileSync(h2,"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(O2,"getDefaultConfig");function N2(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(N2,"AuthAuditLog")});var KT=P((MTe,oP)=>{"use strict";var w2=require("util"),I2=require("path"),C2=require("child_process"),P2=w2.promisify(C2.execFile),D2=1e3*1e3*10;oP.exports={findPs:L2};async function L2(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:n}=await P2("ps",["wwxo",`pid,${r}`],{maxBuffer:D2});for(let s of n.trim().split(`
7
- `).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:I2.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(L2,"findPs")});var Mt=P((UTe,cP)=>{"use strict";var M2="__dbis__",v2="__txns__",U2="__environment_name__",x2="__dbi_defintion__",B2={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"},H2=["__createdtime__","__updatedtime__"],k2="\uFFFF",aP={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},F2=Object.values(aP);cP.exports={AUDIT_STORE_NAME:v2,INTERNAL_DBIS_NAME:M2,DBI_DEFINITION_NAME:x2,SEARCH_TYPES:B2,TIMESTAMP_NAMES:H2,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:U2,TRANSACTIONS_DBI_NAMES_ENUM:aP,TRANSACTIONS_DBIS:F2,OVERFLOW_MARKER:k2}});var Ln=P((xTe,mP)=>{"use strict";var lP=(H(),D(q)),uP=Mt(),dP={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},fP=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),_P={500:fP("There was an error processing your request."),400:"Invalid request"},G2=_P[dP.INTERNAL_SERVER_ERROR],q2={OP_NOT_SUPPORTED_FOR_FS:a(e=>`${e} is not available for this instance because it uses the File System data store.`,"OP_NOT_SUPPORTED_FOR_FS"),MISSING_VALUE:a(e=>`${e} is missing.`,"MISSING_VALUE"),INVALID_VALUE:a(e=>`${e} is invalid.`,"INVALID_VALUE"),NOT_FOUND:a(e=>`${e} not found.`,"NOT_FOUND")},$2={CONFIG_VALIDATION:a(e=>`HarperDB config file validation error: ${e}`,"CONFIG_VALIDATION")},V2={DEFAULT_BULK_LOAD_ERR:"There was an error during your bulk load into HarperDB.",DOWNLOAD_FILE_ERR:a(e=>`There was an error downloading '${e}'.`,"DOWNLOAD_FILE_ERR"),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:a(e=>`Bulk load operation failed - ${e} is not a valid 'action' parameter`,"INVALID_ACTION_PARAM_ERR"),INVALID_FILE_EXT_ERR:a(e=>`Error selecting correct parser - valid file type not found in json - ${e}`,"INVALID_FILE_EXT_ERR"),MAX_FILE_SIZE_ERR:a((e,t)=>`File size is ${e} bytes, which exceeded the maximum size allowed of: ${t} bytes`,"MAX_FILE_SIZE_ERR"),PAPA_PARSE_ERR:"There was an error parsing the downloaded CSV data.",S3_DOWNLOAD_ERR:a(e=>`There was an error downloading '${e}' from AWS.`,"S3_DOWNLOAD_ERR"),WRITE_TEMP_FILE_ERR:"Error writing temporary file to storage"},K2={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 ${uP.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${uP.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"},Y2={ATTR_NAME_LENGTH_ERR:a(e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${lP.INSERT_MAX_CHARACTER_SIZE} bytes.`,"ATTR_NAME_LENGTH_ERR"),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 ${lP.INSERT_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"},hP={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"},W2={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:a(e=>`Operation '${e}' is restricted to 'super_user' roles`,"OP_IS_SU_ONLY"),OP_NOT_FOUND:a(e=>`Operation '${e}' not found`,"OP_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:a((e,t,r)=>`There was an error authorizing ${e} op on table '${t}.${r}'`,"UNKNOWN_OP_AUTH_ERROR"),USER_HAS_NO_PERMS:a(e=>`User ${e} has no role or permissions. Please assign the user a valid role.`,"USER_HAS_NO_PERMS"),DROP_SYSTEM:"The 'system' database, tables and records are used internally by HarperDB and cannot be updated or removed."},z2={ATTR_PERM_MISSING:a((e,t)=>`${e.toUpperCase()} attribute permission missing for '${t}'`,"ATTR_PERM_MISSING"),ATTR_PERM_MISSING_NAME:"Permission object in 'attribute_permission' missing an 'attribute_name'",ATTR_PERM_NOT_BOOLEAN:a((e,t)=>`${e.toUpperCase()} attribute permission for '${t}' must be a boolean`,"ATTR_PERM_NOT_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:a(e=>`Invalid attribute '${e}' in 'attribute_permissions'`,"INVALID_ATTRIBUTE_IN_PERMS"),INVALID_PERM_KEY:a(e=>`Invalid table permission key value '${e}'`,"INVALID_PERM_KEY"),INVALID_ATTR_PERM_KEY:a(e=>`Invalid attribute permission key value '${e}'`,"INVALID_ATTR_PERM_KEY"),INVALID_ROLE_JSON_KEYS:a(e=>`Invalid ${e.length>1?"keys":"key"} in JSON body - '${e.join("', '")}'`,"INVALID_ROLE_JSON_KEYS"),MISMATCHED_TABLE_ATTR_PERMS:a(e=>`You have a conflict with TABLE permissions for '${e}' being false and ATTRIBUTE permissions being true`,"MISMATCHED_TABLE_ATTR_PERMS"),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:a(e=>`A role with name '${e}' already exists`,"ROLE_ALREADY_EXISTS"),ROLE_NOT_FOUND:"Role not found",ROLE_PERMS_ERROR:"Errors in the role permissions JSON provided",SCHEMA_PERM_ERROR:a(e=>`Your role does not have permission to view database metadata for '${e}'`,"SCHEMA_PERM_ERROR"),SCHEMA_TABLE_PERM_ERROR:a((e,t)=>`Your role does not have permission to view database.table metadata for '${e}.${t}'`,"SCHEMA_TABLE_PERM_ERROR"),SU_ROLE_MISSING_ERROR:"Missing 'super_user' key/value in permission set",SU_CU_ROLE_BOOLEAN_ERROR:a(e=>`Value for '${e}' permission must be a boolean`,"SU_CU_ROLE_BOOLEAN_ERROR"),STRUCTURE_USER_ROLE_TYPE_ERROR:a(e=>`Value for '${e}' permission must be a boolean or Array`,"STRUCTURE_USER_ROLE_TYPE_ERROR"),SU_CU_ROLE_NO_PERMS_ALLOWED:a(e=>`Roles with '${e}' set to true cannot have other permissions set.`,"SU_CU_ROLE_NO_PERMS_ALLOWED"),SU_CU_ROLE_COMBINED_ERROR:"Roles cannot have both 'super_user' and 'cluster_user' values included in their permissions set.",TABLE_PERM_MISSING:a(e=>`Missing table ${e.toUpperCase()} permission`,"TABLE_PERM_MISSING"),TABLE_PERM_NOT_BOOLEAN:a(e=>`Table ${e.toUpperCase()} permission must be a boolean`,"TABLE_PERM_NOT_BOOLEAN")},Q2={ATTR_NOT_FOUND:a((e,t,r)=>`Attribute '${r}' does not exist on '${e}.${t}'`,"ATTR_NOT_FOUND"),ATTR_EXISTS_ERR:a((e,t,r)=>`Attribute '${r}' already exists in ${e}.${t}'`,"ATTR_EXISTS_ERR"),DESCRIBE_ALL_ERR:"There was an error during describeAll. Please check the logs and try again.",INVALID_TABLE_ERR:a(e=>`Invalid table ${JSON.stringify(e)}`,"INVALID_TABLE_ERR"),SCHEMA_NOT_FOUND:a(e=>`database '${e}' does not exist`,"SCHEMA_NOT_FOUND"),SCHEMA_EXISTS_ERR:a(e=>`database '${e}' already exists`,"SCHEMA_EXISTS_ERR"),TABLE_EXISTS_ERR:a((e,t)=>`Table '${t}' already exists in '${e}'`,"TABLE_EXISTS_ERR"),SCHEMA_REQUIRED_ERR:"database is required",TABLE_NOT_FOUND:a((e,t)=>`Table '${e}.${t}' does not exist`,"TABLE_NOT_FOUND"),TABLE_REQUIRED_ERR:"table is required"},j2={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},J2={ALTER_USER_DUP_ROLES:a(e=>`Update failed. There are duplicates for the '${e}' role which is not allowed. Update your roles and try again.`,"ALTER_USER_DUP_ROLES"),ALTER_USER_ROLE_NOT_FOUND:a(e=>`Update failed. Requested '${e}' role not found.`,"ALTER_USER_ROLE_NOT_FOUND"),DUP_ROLES_FOUND:a(e=>`Multiple ${e} roles found. Roles must have unique 'role' value. Please update and try again.`,"DUP_ROLES_FOUND"),ROLE_NAME_NOT_FOUND:a(e=>`${e} role not found`,"ROLE_NAME_NOT_FOUND"),USER_ALREADY_EXISTS:a(e=>`User ${e} already exists`,"USER_ALREADY_EXISTS"),USER_NOT_EXIST:a(e=>`User ${e} does not exist`,"USER_NOT_EXIST")},pP={INVALID_DATE:"Invalid date, must be in ISO-8601 format (YYYY-MM-DD).",SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE:a(e=>`invalid sort attribute '${e}', the attribute must either be the table's hash attribute or an attribute used in conditions.`,"SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE")},EP={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:a(e=>`ITC server received invalid event type: ${e}`,"INVALID_EVENT")},X2={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.",BAD_SSH_KEY_NAME:"SSH key name can only contain alphanumeric, dash and underscore characters"},Z2={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},ej={...hP,...V2,...q2,...W2,...z2,...Q2,...j2,...J2,...Y2,...pP,...EP,...X2,...Z2,...$2};mP.exports={CHECK_LOGS_WRAPPER:fP,HDB_ERROR_MSGS:ej,DEFAULT_ERROR_MSGS:_P,DEFAULT_ERROR_RESP:G2,HTTP_STATUS_CODES:dP,LMDB_ERRORS_ENUM:K2,AUTHENTICATION_ERROR_MSGS:hP,VALIDATION_ERROR_MSGS:pP,ITC_ERRORS:EP}});var _e=P((HTe,TP)=>{"use strict";var vl=Ln(),tj=j(),rj=(H(),D(q)),gp=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,gP),this.statusCode=n||vl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(vl.DEFAULT_ERROR_MSGS[n]?vl.DEFAULT_ERROR_MSGS[n]:vl.DEFAULT_ERROR_MSGS[vl.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&&tj[s](i)}},YT=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}},WT=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function gP(e,t,r,n=rj.LOG_LEVELS.ERROR,s=null,i=!1){if(SP(e))return e;let o=new gp(e,t,r,n,s);return i&&delete o.stack,o}a(gP,"handleHDBError");function SP(e){return e.__proto__.constructor.name===gp.name}a(SP,"isHDBError");TP.exports={isHDBError:SP,handleHDBError:gP,ClientError:YT,ServerError:WT,hdb_errors:vl}});var ht=P((FTe,wP)=>{"use strict";var jd=(H(),D(q)),nj=ae(),on=ce(),Jd=require("path"),sj=require("minimist"),AP=require("fs-extra"),RP=require("lodash");on.initSync();var{CONFIG_PARAMS:Jo,DATABASES_PARAM_CONFIG:Yd,SYSTEM_SCHEMA_NAME:Sp}=jd,Wd,zd,Qd;function yP(){if(Wd!==void 0)return Wd;if(on.getHdbBasePath()!==void 0)return Wd=on.get(Jo.STORAGE_PATH)||Jd.join(on.getHdbBasePath(),jd.DATABASES_DIR_NAME),Wd}a(yP,"getBaseSchemaPath");function bP(){if(zd!==void 0)return zd;if(on.getHdbBasePath()!==void 0)return zd=NP(Sp),zd}a(bP,"getSystemSchemaPath");function OP(){if(Qd!==void 0)return Qd;if(on.getHdbBasePath()!==void 0)return Qd=on.get(jd.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||Jd.join(on.getHdbBasePath(),jd.TRANSACTIONS_DIR_NAME),Qd}a(OP,"getTransactionAuditStoreBasePath");function ij(e,t){let r=on.get(Jo.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||Jd.join(OP(),e.toString())}a(ij,"getTransactionAuditStorePath");function NP(e,t){e=e.toString(),t=t&&t.toString();let r=on.get(jd.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||Jd.join(yP(),e)}a(NP,"getSchemaPath");function oj(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,sj(process.argv));let n=r[Jo.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!nj.isObject(n))throw o;i=n}for(let o of i){let c=o[Sp];if(!c)continue;let l=on.get(Jo.DATABASES);l=l??{};let u=c?.tables?.[t]?.[Yd.PATH];if(u)return RP.set(l,[Sp,Yd.TABLES,t,Yd.PATH],u),on.setProperty(Jo.DATABASES,l),u;let f=c?.[Yd.PATH];if(f)return RP.set(l,[Sp,Yd.PATH],f),on.setProperty(Jo.DATABASES,l),f}}let s=r[Jo.STORAGE_PATH.toUpperCase()];if(s){if(!AP.pathExistsSync(s))throw new Error(s+" does not exist");let i=Jd.join(s,e);return AP.mkdirsSync(i),on.setProperty(Jo.STORAGE_PATH,s),i}return bP()}a(oj,"initSystemSchemaPaths");function aj(){Wd=void 0,zd=void 0,Qd=void 0}a(aj,"resetPaths");wP.exports={getBaseSchemaPath:yP,getSystemSchemaPath:bP,getTransactionAuditStorePath:ij,getTransactionAuditStoreBasePath:OP,getSchemaPath:NP,initSystemSchemaPaths:oj,resetPaths:aj}});var an=P((VTe,LP)=>{"use strict";var cj=Ln().LMDB_ERRORS_ENUM,qTe=require("lmdb"),lj=Mt(),$Te=require("buffer").Buffer,{OVERFLOW_MARKER:IP,MAX_SEARCH_KEY_LENGTH:Tp}=lj,CP=["number","string","symbol","boolean","bigint"];function uj(e){if(e=e?.primaryStore||e,!e)throw new Error(cj.ENV_REQUIRED)}a(uj,"validateEnv");function dj(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(dj,"stringifyData");function fj(e){return e instanceof Date?e.valueOf():e}a(fj,"convertKeyValueToWrite");function _j(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(CP.includes(typeof e))return e.length>Tp?[e.slice(0,Tp)+IP]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(CP.includes(typeof i))i.length>Tp?r.push(i.slice(0,Tp)+IP):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(_j,"getIndexedValues");var Ap=0,PP=0;function DP(){PP=Date.now()-performance.now()}a(DP,"adjustStartTime");DP();var hj=6e4;setInterval(DP,hj).unref();function pj(){let e=performance.now()+PP;return e>Ap?(Ap=e,e):(Ap+=488e-6,Ap)}a(pj,"getNextMonotonicTime");LP.exports={validateEnv:uj,stringifyData:dj,convertKeyValueToWrite:fj,getNextMonotonicTime:pj,getIndexedValues:_j}});var Xd=P((YTe,MP)=>{"use strict";var Ej=(H(),D(q)).OPERATIONS_ENUM,zT=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=Ej.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};MP.exports=zT});var Zd=P((QTe,BP)=>{"use strict";var zTe=Xd(),Rp=(H(),D(q)),QT=ae(),vP=j(),mj=require("uuid"),{handleHDBError:yp,hdb_errors:gj}=_e(),{HDB_ERROR_MSGS:bp,HTTP_STATUS_CODES:Op}=gj;BP.exports=UP;function UP(e,t,r){for(let s=0;s<t.length;s++)xP(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];Sj(i,r,e.operation)}}a(UP,"processRows");UP.validateAttribute=xP;function xP(e){if(Buffer.byteLength(String(e))>Rp.INSERT_MAX_CHARACTER_SIZE)throw yp(new Error,bp.ATTR_NAME_LENGTH_ERR(e),Op.BAD_REQUEST,void 0,void 0,!0);if(QT.isEmptyOrZeroLength(e)||QT.isEmpty(e.trim()))throw yp(new Error,bp.ATTR_NAME_NULLISH_ERR,Op.BAD_REQUEST,void 0,void 0,!0)}a(xP,"validateAttribute");function Sj(e,t,r){if(!e.hasOwnProperty(t)||QT.isEmptyOrZeroLength(e[t])){if(r===Rp.OPERATIONS_ENUM.INSERT||r===Rp.OPERATIONS_ENUM.UPSERT){e[t]=mj.v4();return}throw vP.error("Update transaction aborted due to record with no hash value:",e),yp(new Error,bp.RECORD_MISSING_HASH_ERR,Op.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Rp.INSERT_MAX_CHARACTER_SIZE)throw vP.error(e),yp(new Error,bp.HASH_VAL_LENGTH_ERR,Op.BAD_REQUEST,void 0,void 0,!0)}a(Sj,"validateHash")});var HP,Mn,jT,Ul=be(()=>{HP=require("events"),Mn=class extends HP.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;drainCloseListener;currentDrainResolver;[Symbol.asyncIterator](){let t=new jT;return t.queue=this,t}push(t){this.send(t)}send(t){this.resolveNext?(this.resolveNext({value:t}),this.resolveNext=null):this.hasDataListeners?this.emit("data",t):(this.queue||(this.queue=[]),this.queue.push(t))}getNextMessage(){let t=this.queue?.shift();return t||this.emit("drained"),t}waitForDrain(){return new Promise(t=>{!this.queue||this.queue.length===0?t(!0):(this.once("drained",()=>t(!0)),this.currentDrainResolver=t,this.drainCloseListener||(this.drainCloseListener=!0,this.on("close",()=>{this.currentDrainResolver?.(!1)})))})}on(t,r){if(t==="data"&&!this.hasDataListeners)for(this.hasDataListeners=!0;this.queue?.length>0;)r(this.queue.shift());return super.on(t,r)}},jT=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 KP(e){XT=e}function yj(){Rj=setInterval(function(){for(let e of JT)if(e.stale){let t=e.getContext()?.url;qP.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},Aj).unref()}var ZT,GP,qP,$P,VP,kP,JT,Tj,ef,FP,XT,tc,Np,Aj,Rj,wp=be(()=>{ZT=U(an()),GP=U(_e()),qP=U(j()),$P=U(ce());H();VP=U(ae()),kP=100,JT=new Set,Tj=(0,VP.convertToMS)($P.get(B.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3;a(KP,"replicationConfirmation");tc=class e{static{a(this,"DatabaseTransaction")}#e;writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;overloadChecked;open=1;getReadTxn(){if(this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn)return this.readTxn.openTimer&&(this.readTxn.openTimer=0),this.readTxn;if(this.open===1)return this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxnsUsed=1,this.readTxn.openTimer&&(this.readTxn.openTimer=0),JT.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(JT.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(ef&&!this.overloadChecked&&performance.now()-FP>Tj)throw new GP.ServerError("Outstanding write transactions have too long of queue, please try again later",503);this.overloadChecked=!0}addWrite(t){if(this.open===0)throw new Error("Can not use a transaction that is no longer open");if(this.open===2){let r=new e;return r.addWrite(t),r.commit({})}else this.writes.push(t)}removeWrite(t){let r=this.writes.indexOf(t);r>-1&&(this.writes[r]=null)}commit(t={}){let r=this.timestamp;r||(r=this.timestamp=t.timestamp||(0,ZT.getNextMonotonicTime)()),t.timestamp||(t.timestamp=r);let n=t.retries||0;if(this.validated<this.writes.length)try{let d=this.validated;this.validated=this.writes.length;for(let _=d;_<this.validated;_++)this.writes[_]?.validate?.(this.timestamp);let h;for(let _=d;_<this.validated;_++){let p=this.writes[_];p&&(p.before||p.beforeIntermediate)&&(h=!0)}if(h)return(async()=>{try{for(let _=0;_<2;_++){let p;for(let S=d;S<this.validated;S++){let g=this.writes[S];if(!g)continue;let T=g[_===0?"before":"beforeIntermediate"];if(T){let m=T();p?p.push?p.push(m):p=[p,m]:p=m}}p&&await(p.push?Promise.all(p):p)}}catch(_){throw this.abort(),_}return this.commit(t)})()}catch(d){throw this.abort(),d}n||this.doneReadTxn(),this.open=t?.letItLinger?2:0;let s,i=[],o=0;this.writes=this.writes.filter(d=>d);let c=a(d=>{d.commit(r,d.entry,n)},"doWrite"),l=a(()=>{let d=this.writes[o++];if(d)if(d.key){n>0&&(d.entry=d.store.getEntry(d.key));let h=d.store.ifVersion(d.key,d.entry?.version??null,l);s=s||h}else l();else for(let h of this.writes)c(h)},"nextCondition"),u=this.lmdbDb;if(this.writes.length>0&&(u?.retryRisk&&(u.retryRisk*=.99),this.writes.length+(u?.retryRisk||0)<kP>>n?l():s=this.writes[0].store.transaction(()=>{for(let d of this.writes)d.entry=d.store.getEntry(d.key),c(d);return!0})),s)return ef||(ef=s,FP=performance.now(),ef.then(()=>{ef=null})),s.then(d=>{if(d){if(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.replicatedConfirmation){let h=this.writes[0].store.rootStore.databaseName,_=this.writes[this.writes.length-1];XT&&_&&i.push(XT(h,_.store.getEntry(_.key).localTime,this.replicatedConfirmation))}return this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))}else return u&&(u.retryRisk=(u.retryRisk||0)+kP/2),t?t.retries=n+1:t={retries:1},this.commit(t)});let f={txnTime:r};if(this.next){let d=this.next?.commit(t);if(d?.then)return d?.then(h=>({txnTime:r,next:h}));f.next=d}return f}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=0,this.writes=[]}getContext(){return this.#e}setContext(t){this.#e=t}},Np=class extends tc{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,ZT.getNextMonotonicTime)())}getReadTxn(){}},Aj=3e4;a(yj,"startMonitoringTxns");yj()});function yt(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===1&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let n=e.transaction=new tc;e.timestamp&&(n.timestamp=e.timestamp),e.replicatedConfirmation&&(n.replicatedConfirmation=e.replicatedConfirmation),n.setContext(e),e.resourceCache||(e.resourceCache=[]);let s;try{if(s=t(n),s?.then)return s.then(i,o)}catch(c){o(c)}return i(s);function i(c){let l=n.commit({letItLinger:r?.letItLinger});return l.then?l.then(()=>c):c}function o(c){throw n.abort({}),c}}var YP,rc=be(()=>{YP=U(ui());wp();a(yt,"transaction");(0,YP._assignPackageExport)("transaction",yt);yt.commit=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};yt.abort=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});function tA(e,t,r,n,s,i,o,c){let l=e[0];if(t==="or"){let d=u(l);for(let _=1;_<e.length;_++){let p=e[_],S=u(p);d=d.concat(S)}let h=new Set;return d.filter(_=>{let p=_.key??_;return h.has(p)?!1:(h.add(p),!0)})}else{let d=u(l),h=f(e.slice(1),!0,l.estimated_count);return h.length>0?o(d,h):d}function u(d){return d.conditions?tA(d.conditions,d.operator,r,n,s,i,o,c):Hl(d,n,d.descending||s.reverse===!0,r,s.allowFullScan,c)}a(u,"executeCondition");function f(d,h,_){return d.map((p,S)=>{if(p.conditions){let m=p.operator==="or",A=f(p.conditions,!m,_);return m?(w,M)=>A.some(F=>F(w,M)):(w,M)=>A.every(F=>F(w,M))}let g=(p.attribute||p[0])===r.primaryKey,T=nf(p,r,i,c,g,_);return h&&S<d.length-1&&_&&(_=Lj(r.primaryStore,p.estimated_count,_)),T}).filter(Boolean)}a(f,"mapConditionsToFilters")}function Hl(e,t,r,n,s,i){let o=e[0]??e.attribute,c=e[1]??e.value,l=e.comparator;if(c===void 0&&l!=="sort")throw new ln.ClientError(`Search condition for ${o} must have a value`);if(Array.isArray(o)){let m=o[0],A=hi(n.attributes,m);if(A.relationship){if(o.length<2)throw new ln.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let w=A.definition?.tableClass||A.elements?.definition?.tableClass,M=new Map,F=Hl({attribute:o.length>2?o.slice(1):o[1],value:c,comparator:l},t,r,w,s,M);if(A.relationship.to){i[o[0]]=M;let G=!!hi(w.attributes,A.relationship.to)?.elements;F=Ij(F,A,w.primaryStore,G,M)}if(A.relationship.from){let G=a(K=>(K?.key!==void 0&&(K=K.key),Hl({attribute:A.relationship.from,value:K},t,r,n,s,M)),"searchEntry");A.elements?(i[o[0]]=M,F=Cj(F,A,w.primaryStore,M,G)):F=F.flatMap(G)}return F}else if(o.length===1)o=o[0];else throw new ln.ClientError("Unable to query by attribute "+JSON.stringify(o))}let u,f,d,h;c instanceof Date&&(c=c.getTime());let _;switch(rA[l]||l){case"lt":u=!0,f=c;break;case"le":u=!0,f=c,d=!0;break;case"gt":u=c,h=!0;break;case"ge":u=c;break;case"prefix":Array.isArray(c)?c[c.length-1]!=null&&(c=c.concat(null)):c=[c,null],u=c,f=c.slice(0),f[f.length-1]=_i.MAXIMUM_KEY;break;case"starts_with":u=c.toString(),f=c+"\uFFFF";break;case"between":case"gele":case"gelt":case"gtlt":case"gtle":u=c[0],u instanceof Date&&(u=u.getTime()),f=c[1],f instanceof Date&&(f=f.getTime()),d=l==="gele"||l==="gtle"||l==="between",h=l==="gtlt"||l==="gtle";break;case"equals":case void 0:u=c,f=c,d=!0;break;case"ne":if(c===null){u=c,h=!0;break}case"sort":case"contains":case"ends_with":u=!0,_=!0;break;default:throw new ln.ClientError(`Unknown query comparator "${l}"`)}let p,S=o===n.primaryKey||o==null;if(typeof u=="string"&&u.length>os.MAX_SEARCH_KEY_LENGTH&&(u=u.slice(0,os.MAX_SEARCH_KEY_LENGTH)+os.OVERFLOW_MARKER,h=!1,p=nf(e,n,null,i,S)),typeof f=="string"&&f.length>os.MAX_SEARCH_KEY_LENGTH&&(f=f.slice(0,os.MAX_SEARCH_KEY_LENGTH)+os.OVERFLOW_MARKER,d=!0,p=p??nf(e,n,null,i,S)),r){let m=u;u=f,f=m,m=!h,h=!d,d=m}let g=S?n.primaryStore:n.indices[o];if(!g||g.isIndexing||_||c===null&&!g.indexNulls){if(s===!1&&!g)throw new ln.ClientError(`"${o}" is not indexed, can not search for this attribute`,404);if(s===!1&&_)throw new ln.ClientError(`Can not use ${l||"equal"} operator without combining with a condition that uses an index, can not search for attribute ${o}`,403);if(g?.isIndexing)throw new ln.ServerError(`"${o}" is not indexed yet, can not search for this attribute`,503);if(c===null&&g&&!g.indexNulls)throw new ln.ClientError(`"${o}" is not indexed for nulls, index needs to be rebuilt to search for nulls, can not search for this attribute`,400);if(p=p??nf(e,n,null,i,S),!p)throw new ln.ClientError(`Unknown search operator ${e.comparator}`)}let T={start:u,end:f,inclusiveEnd:d,exclusiveStart:h,values:!0,versions:S,transaction:t,reverse:r};if(S){let m=g.getRange(T).map(p?function({key:A,value:w}){return this?.isSync?w&&p(w)?A:Xo.SKIP:new Promise((M,F)=>setImmediate(()=>{try{M(w&&p(w)?A:Xo.SKIP)}catch(G){F(G)}}))}:A=>A.value==null&&!(A.metadataFlags&(as|ea))?Xo.SKIP:A);return m.hasEntries=!0,m}else return g?g.getRange(T).map(p?function({key:m,value:A}){let w;return typeof m=="string"&&m.length>os.MAX_SEARCH_KEY_LENGTH?w=n.primaryStore.get(A):w={[o]:m},this.isSync?p(w)?A:Xo.SKIP:new Promise((M,F)=>setImmediate(()=>{try{M(p(w)?A:Xo.SKIP)}catch(G){F(G)}}))}:({value:m})=>m):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:m,value:A}){return this.isSync?A&&p(A)?m:Xo.SKIP:new Promise((w,M)=>setImmediate(()=>{try{w(A&&p(A)?m:Xo.SKIP)}catch(F){M(F)}}))})}function hi(e,t){if(Array.isArray(t))if(t.length>1){let r=hi(e,t[0]),n=(r?.definition?.tableClass||r?.elements?.definition?.tableClass)?.attributes??r?.properties;return n?hi(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 Ij(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i;return s.hasMappings=!0,{next(){if(!i){let c=t.relationship.to,l=a((u,f)=>{let d=s.get(u);d?d.push(f):s.set(u,d=[f])},"add_entry");for(let u of e){let f=u.value??r.get(u.key??u),d=f?.[c];if(d!=null&&!s.filters?.some(h=>!h(f)))if(n)for(let h=0;h<d.length;h++)l(d[h],u);else l(d,u)}return i=s.keys()[Symbol.iterator](),this.next()}let o=i.next();return o.done?o:{value:o.value}},return(){if(i?.return)return i.return()}}}})}function Cj(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i,o,c=new Set;return{next(){let l;if(o)for(;l=o.next(),!l.done;){let u=l.value;if(!c.has(u))return c.add(u),l}if(!i){let u=new Set;n.fromRecord=f=>f[t.relationship.from]?.filter?.(d=>u.has(d));for(let f of e){if(n.filters){let d=r.get(f);if(n.filters.some(h=>!h(d)))continue}u.add(f)}return i=u[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 nf(e,t,r,n,s,i){let o=e.comparator,c=e[0]??e.attribute,l=e[1]??e.value;if(Array.isArray(c)){if(c.length===0)return()=>!0;if(c.length===1)c=c[0];else if(c.length>1){let f=c[0],d=hi(t.attributes,f),h=d.definition?.tableClass||d.elements.definition?.tableClass,_=n?.[f],p=nf({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:o},h,r,_?.[f]?.joined,c[1]===h.primaryKey,i);if(!p)return;if(_){_.filters||(_.filters=[]),_.filters.push(p);return}let S=t.propertyResolvers?.[f],g,T=a((m,A)=>{let w,M;if(S){if(S.from&&p.idFilter){if(!g)if(p.idFilter.idSet?.size===1){for(let G of p.idFilter.idSet)e={attribute:S.from,value:G};g=u(S.from,p.idFilter,!0,!0)}else g=u(S.from,p.idFilter,!1,!0);let F=g(m);return g.idFilter&&(T.idFilter=g.idFilter),F}M=S(m,r,A),w=M?.value}else w=m[f];return w?Array.isArray(w)?w.some(p):p(w,M):!1},"recordFilter");return T}}switch(l instanceof Date&&(l=l.getTime()),rA[o]||o){case os.SEARCH_TYPES.EQUALS:case void 0:return u(c,f=>f===l,!0);case"contains":return u(c,f=>f?.toString().includes(l));case"ends_with":return u(c,f=>f?.toString().endsWith(l));case"starts_with":return u(c,f=>typeof f=="string"&&f.startsWith(l),!0);case"prefix":return Array.isArray(l)?l[l.length-1]==null&&(l=l.slice(0,-1)):l=[l],u(c,f=>{if(!Array.isArray(f))return!1;for(let d=0,h=l.length;d<h;d++)if(f[d]!==l[d])return!1;return!0},!0);case"between":return l[0]instanceof Date&&(l[0]=l[0].getTime()),l[1]instanceof Date&&(l[1]=l[1].getTime()),u(c,f=>(0,_i.compareKeys)(f,l[0])>=0&&(0,_i.compareKeys)(f,l[1])<=0,!0);case"gt":return u(c,f=>(0,_i.compareKeys)(f,l)>0);case"ge":return u(c,f=>(0,_i.compareKeys)(f,l)>=0);case"lt":return u(c,f=>(0,_i.compareKeys)(f,l)<0);case"le":return u(c,f=>(0,_i.compareKeys)(f,l)<=0);case"ne":return u(c,f=>(0,_i.compareKeys)(f,l)!==0,!1,!0);case"sort":return()=>!0;default:throw new ln.ClientError(`Unknown query comparator "${o}"`)}function u(f,d,h,_){let p;h=h&&!s&&t?.indices[f]&&i>3,h&&(e.estimated_count==null&&Cp(t)(e),p=e.estimated_count>>4,(isNaN(p)||p>=i)&&(h=!1));let S=0,g=3;function T(m){let A=m[f],w;if(typeof A!="object"||!A||_?w=d(A):Array.isArray(A)?w=A.some(d):A instanceof Date&&(w=d(A.getTime())),h&&(g++,!w&&!T.idFilter&&++S/g*(i-g)>p)){let M=Hl(e,r.transaction.getReadTxn(),!1,t).map(kl),F=new Set(M);T.idFilter=G=>F.has(kl(G)),T.idFilter.idSet=F}return w}return a(T,"recordFilter"),s&&(T.idFilter=d),T}a(u,"attributeComparator")}function Cp(e){function t(r){if(r.estimated_count===void 0){if(r.conditions){let s;if(r.operator==="or"){s=0;for(let i of r.conditions)t(i),s+=i.estimated_count}else{s=1/0;for(let i of r.conditions)t(i),s=isFinite(s)?s*i.estimated_count/zi(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=rA[n]||n,n===os.SEARCH_TYPES.EQUALS||!n){let s=r[0]??r.attribute;if(s==null||s===e.primaryKey)r.estimated_count=1;else if(Array.isArray(s)&&s.length>1){let i=hi(e.attributes,s[0]),o=i.definition?.tableClass||i.elements.definition?.tableClass,c=Cp(o)({value:r.value,attribute:s.length>2?s.slice(1):s[1],comparator:"equals"}),l=e.indices[i.relationship.from];r.estimated_count=c+(l?c*zi(e.indices[i.relationship.from])/(zi(o.primaryStore)||1):c)}else{let i=e.indices[s];r.estimated_count=i?i.getValuesCount(r[1]??r.value):1/0}}else if(n==="contains"||n==="ends_with"||n==="ne"){let s=r[0]??r.attribute,i=e.indices[s];r.value===null&&n==="ne"?r.estimated_count=zi(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else n==="starts_with"||n==="prefix"?r.estimated_count=Nj*zi(e.primaryStore)+1:n==="between"?r.estimated_count=Oj*zi(e.primaryStore)+1:n==="sort"?r.estimated_count=zi(e.primaryStore)+1:r.estimated_count=bj*zi(e.primaryStore)+1;typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return a(t,"estimateConditionForTable"),t}function Pp(e){if(e)if(Zo=e,xl.lastIndex=0,Pj.test(e))try{let t=tf(new Bl,"");if(cn!==Zo.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 ${cn} in '${Zo}'`,t}else return new URLSearchParams(e)}function tf(e,t){let r=xl,n,s,i,o,c,l=decodeURIComponent,u;for(;n=r.exec(Zo);){cn=r.lastIndex;let[,f,d]=n;if(o){if(f)throw new SyntaxError(`expected operator, but encountered '${f}'`);o=!1,c=!1}else c=!0;let h;switch(d){case"=":if(s!=null){if(f.length<=2)i=f;else throw new SyntaxError(`invalid FIQL operator ${f}`);l=WP}else{if(l=decodeURIComponent,i="equals",!f)throw new SyntaxError("attribute must be specified before equality comparator");s=rf(f)}break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":if(i=wj[d],l=eA[i]?WP:decodeURIComponent,!f)throw new SyntaxError(`attribute must be specified before comparator ${d}`);s=rf(f);break;case"&=":case"|=":case"|":case"&":case"":case void 0:if(s==null){if(s===void 0)throw t?new SyntaxError(`expected '${t}', but encountered ${d[0]?"'"+d[0]+"'":"end of string"}}`):new SyntaxError(`no comparison specified before ${d?"'"+d+"'":"end of string"}`)}else{if(!e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");let p={comparator:i,attribute:s||null,value:l(f)};if(i==="eq"&&zP(p,f),s===""){let S=e.conditions[e.conditions.length-1];S.chainedConditions=S.chainedConditions||[],S.chainedConditions.push(p),S.operator=u}else Ip(e,u),e.conditions.push(p)}d==="&"?(u="and",s=void 0):d==="|"?(u="or",s=void 0):d==="&="?(u="and",s=""):d==="|="&&(u="or",s="");break;case",":if(e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");e.push(rf(f)),s=void 0;break;case"(":xl.lastIndex=cn;let _=tf(f?[]:new Bl,")");switch(f){case"":Ip(e,u),e.conditions.push(_);break;case"limit":switch(_.length){case 1:e.limit=+_[0];break;case 2:e.offset=+_[0],e.limit=_[1]-e.offset;break;default:throw new SyntaxError("limit must have 1 or 2 arguments")}break;case"select":Array.isArray(_[0])&&_.length===1&&!_[0].name?(e.select=_[0],e.select.asArray=!0):_.length===1?e.select=_[0]:_.length===2&&_[1]===""?e.select=_.slice(0,1):e.select=_;break;case"group-by":throw new SyntaxError("group by is not implemented yet");case"sort":e.sort=QP(_);break;default:throw new SyntaxError(`unknown query function call ${f}`)}Zo[cn]===","?r.lastIndex=++cn:o=!0,s=null;break;case"{":if(e.conditions)throw new SyntaxError("property sets are not allowed in a queries");if(!f)throw new SyntaxError("property sets must have a defined parent property name");xl.lastIndex=cn,h=tf([],"}"),h.name=f,e.push(h),Zo[cn]===","?r.lastIndex=++cn:o=!0;break;case"[":xl.lastIndex=cn,f?(h=tf(new Bl,"]"),h.name=f):h=tf(e.conditions?new Bl:[],"]"),e.conditions?(Ip(e,u),e.conditions.push(h),s=null):e.push(h),Zo[cn]===","?r.lastIndex=++cn:o=!0;break;case")":case"]":case"}":if(t===d[0]){if(e.conditions){if(s){let p={comparator:i||"equals",attribute:s,value:l(f)};i==="eq"&&zP(p,f),Ip(e,u),e.conditions.push(p)}else if(f)throw new SyntaxError("no attribute or comparison specified")}else(f||e.length>0&&c)&&e.push(rf(f));return e}else throw t?new SyntaxError(`expected '${t}', but encountered '${d[0]}'`):new SyntaxError(`unexpected token '${d[0]}'`);default:throw new SyntaxError(`unexpected operator '${d}'`)}if(t!==")"&&(r=s?Dj:xl,r.lastIndex=cn),cn===Zo.length)return e}if(t)throw new SyntaxError(`expected '${t}', but encountered end of string`)}function Ip(e,t){if(e.conditions.length>0)if(e.operator){if(e.operator!==t)throw new SyntaxError("Can not mix operators within a condition grouping")}else e.operator=t}function rf(e){return e.indexOf(".")>-1?e.split(".").map(rf):decodeURIComponent(e)}function WP(e){if(e==="null")return null;if(e.indexOf(":")>-1){let[t,r]=e.split(":");if(t==="number")return r[0]==="$"?parseInt(r.slice(1),36):+r;if(t==="boolean")return r==="true";if(t==="date")return new Date(isNaN(r)?decodeURIComponent(r):+r);if(t==="string")return decodeURIComponent(r);throw new ln.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function zP(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new ln.ClientError("wildcard can only be used at the end of a string")}function QP(e){let t=jP(e[0]);return e.length>1&&(t.next=QP(e.slice(1))),t}function jP(e){if(Array.isArray(e)){let t=jP(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 kl(e){return Array.isArray(e)?e.join("\0"):e}function zi(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function Lj(e,t,r){return t*r/zi(e)}var ln,os,_i,Xo,bj,Oj,Nj,wj,eA,rA,Pj,xl,Dj,cn,Zo,Bl,nc,sf=be(()=>{ln=U(_e()),os=U(Mt()),_i=require("ordered-binary"),Xo=require("lmdb");of();bj=.3,Oj=.1,Nj=.05,wj={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},eA={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};a(tA,"executeConditions");a(Hl,"searchByIndex");a(hi,"findAttribute");a(Ij,"joinTo");a(Cj,"joinFrom");rA={eq:"equals",greater_than:"gt",greaterThan:"gt",greater_than_equal:"ge",greaterThanEqual:"ge",less_than:"lt",lessThan:"lt",less_than_equal:"le",lessThanEqual:"le",not_equal:"ne",notEqual:"ne",equal:"equals",sw:"starts_with",startsWith:"starts_with",ew:"ends_with",endsWith:"ends_with",ct:"contains",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(nf,"filterByType");a(Cp,"estimateCondition");Pj=/[()[\]|!<>.]|(=\w*=)/,xl=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,Dj=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;a(Pp,"parseQuery");a(tf,"parseBlock");a(Ip,"assignOperator");a(rf,"decodeProperty");a(WP,"typedDecoding");a(zP,"wildcardDecoding");a(QP,"toSortObject");a(jP,"toSortEntry");Bl=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(kl,"flattenKey");a(zi,"estimatedEntryCount");a(Lj,"intersectionEstimate");nc=class{constructor(t){this.url=t}static{a(this,"SimpleURLQuery")}get(){}[Symbol.iterator](){return[][Symbol.iterator]()}}});var sA={};Be(sA,{MultiPartId:()=>Lp,Resource:()=>qr,snake_case:()=>vj,transformForSelect:()=>Mp});function vj(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function JP(e,t){if(sc=!1,e==="")return null;if(e=e.slice(1),t.splitSegments){if(e.indexOf("/")===-1)return e===""?(sc=!0,null):t.coerceId(decodeURIComponent(e));let r=e.split("/"),n=new Lp;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){sc=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}else{if(e==="")return sc=!0,null;e[e.length-1]==="/"&&(sc=!0)}return t.coerceId(decodeURIComponent(e))}function vn(e,t){n.reliesOnPrototype=!0;let r=t.hasContent;return n;function n(s,i,o){let c,l,u,f;if(r?(o?(f=i,o=o.getContext?.()||o):i?typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(f=s,c=f[this.primaryKey]??null,o=i.getContext?.()||i):f=i:(f=s,s=void 0,c=f.getId?.()??f[this.primaryKey]),c===null&&(u=!0)):i?o=i.getContext?.()||i:s&&typeof s=="object"&&!Array.isArray(s)&&(o=s),c===void 0)if(typeof s=="object"&&s){if(l=s,typeof(c=s.url)=="string"){let _=c.indexOf("?");if(_>-1){let S=this.parseQuery(c.slice(_+1));l?S&&(l=Object.assign(S,l)):l=S,c=c.slice(0,_)}let p=this.parsePath(c,o,l);p?.id!==void 0?(p.query&&(l?l=Object.assign(p.query,l):l=p.query),u=p.isCollection,c=p.id):c=p}else if(s[Symbol.iterator]){c=[],u=!0;for(let _ of s){if(typeof _=="object"&&_)break;c.push(_)}c.length===0?c=null:(c.length===1&&(c=c[0]),l.slice&&(l=l.slice(c.length,l.length),l.length===0&&(l=null,u=!1)))}c===void 0&&(c=s.id??null,c==null&&(u=!0))}else c=s,l=new nc(c),c==null&&(u=!0);o||(o={});let d;if(l?.ensureLoaded!=null||l?.async||u?(d={...t},l?.ensureLoaded!=null&&(d.ensureLoaded=l.ensureLoaded),l?.async&&(d.async=l.async),u&&(d.isCollection=!0)):d=t,o.transaction){let _=this.getResource(c,o,d);return _.then?_.then(h):h(_)}else return yt(o,()=>{let _=this.getResource(c,o,d);return _.then?_.then(h):h(_)},d);function h(_){if(o.authorize){o.authorize=!1;let p=t.type==="read"?_.allowRead(o.user,l,o):t.type==="update"?_.doesExist?.()===!1?_.allowCreate(o.user,f,o):_.allowUpdate(o.user,f,o):t.type==="create"?_.allowCreate(o.user,f,o):_.allowDelete(o.user,l,o);if(p?.then)return p.then(S=>{if(!S)throw new Dp(o.user);return typeof f?.then=="function"?f.then(g=>e(_,l,o,g)):e(_,l,o,f)});if(!p)throw new Dp(o.user)}return typeof f?.then=="function"?f.then(p=>e(_,l,o,p)):e(_,l,o,f)}a(h,"authorizeActionOnResource")}}function Un(e,t){let r=new eD.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 nA(e,t,r){let n=e.getRecord?.();if(n){let s=e.getChanges?.();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 Mp(e,t){let r=t.propertyResolvers,n=t.getContext?.(),s;if(typeof e=="string")return a(function o(c){return c.then?c.then(o):Array.isArray(c)?c.map(o):nA(c,r,n)(e)},"transform");if(typeof e=="object"){if(e.asArray)return a(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(c);let u=[],f=i(nA(l,r,n));for(let d of e)u.push(f(d));return u},"transform");let o=e.forceNulls;return a(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(h=>h&&typeof h=="object"?c(h):h);let u={},f=i(nA(l,r,n)),d;for(let h of e){let _=f(h);_===void 0&&o&&(_=null),_?.then?(d||(d=[]),d.push(_.then(p=>u[h.name||h]=p))):u[h.name||h]=_}return d?Promise.all(d).then(()=>u):u},"transform")}else throw new Error("Invalid select argument type "+typeof e);function i(o){return c=>{if(typeof c=="string")return o(c);if(typeof c=="object")if(c.name){s||(s={});let l=s[c.name];if(!l){let f=r[c.name]?.definition?.tableClass;l=s[c.name]=Mp(c.select||c,f)}let u=o(c.name);return l(u)}else return o(c);else return c}}a(i,"handleProperty")}var XP,ZP,eD,Mj,qr,Dp,sc,Lp,ta=be(()=>{XP=require("crypto");Ul();ZP=U(ui()),eD=U(_e());rc();sf();Mj={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},qr=class{static{a(this,"Resource")}#e;#t;#n;static transactions;constructor(t,r){this.#e=t;let n=r?.getContext?r.getContext()??null:void 0;this.#t=n!==void 0?n:r||null}static get=vn(function(t,r,n,s){let i=t.get?.(r);if(i?.then)return i.then(o);return o(i);function o(c){let l;if((l=r?.select)&&c!=null&&!c.selectApplied){let u=Mp(l,t.constructor);return typeof c?.map=="function"?c.map(u):u(c)}return c}},{type:"read",letItLinger:!0,ensureLoaded:!0,async:!0});static put=vn(function(t,r,n,s){if(Array.isArray(s)&&t.#n){let i=[],o=n.authorize;for(let c of s){let l=t.constructor,u=l.getResource(c[l.primaryKey],n,{async:!0});u.then?i.push(u.then(f=>f.put(c,n))):i.push(u.put(c,n))}return Promise.all(i)}return t.put?t.put(s,r):Un(t,"put")},{hasContent:!0,type:"update"});static patch=vn(function(t,r,n,s){return t.patch?t.patch(s,r):Un(t,"patch")},{hasContent:!0,type:"update"});static delete=vn(function(t,r,n,s){return t.delete?t.delete(r):Un(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,XP.randomUUID)()}static create(t,r,n){let s;return t==null?s=r?.[this.primaryKey]??this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?s=r?.[this.primaryKey]??[...t,this.getNewId()]:typeof t!="object"?s=r?.[this.primaryKey]??[t,this.getNewId()]:(s=t?.[this.primaryKey]??this.getNewId(),n=r||{},r=t),n||(n={}),yt(n,()=>{let i=new this(s,n),o=i.update?i.update(r,!0):Un(i,"update");return n.newLocation=s,n.createdResource=!0,o?.then?o.then(()=>i):i})}static invalidate=vn(function(t,r,n,s){return t.invalidate?t.invalidate(r):Un(t,"delete")},{hasContent:!1,type:"update"});static post=vn(function(t,r,n,s){return t.#e!=null&&t.update?.(),t.post(s,r)},{hasContent:!0,type:"create"});static connect=vn(function(t,r,n,s){return t.connect?t.connect(s,r):Un(t,"connect")},{hasContent:!0,type:"read"});static subscribe=vn(function(t,r,n,s){return t.subscribe?t.subscribe(r):Un(t,"subscribe")},{type:"read"});static publish=vn(function(t,r,n,s){return t.#e!=null&&t.update?.(),t.publish?t.publish(s,r):Un(t,"publish")},{hasContent:!0,type:"create"});static search=vn(function(t,r,n,s){let i=t.search?t.search(r):Un(t,"search"),o=n.select;if(o&&n.hasOwnProperty("select")&&i!=null&&!i.selectApplied){let c=Mp(o,t.constructor);return i.map(c)}return i},{type:"read"});static query=vn(function(t,r,n,s){return t.search?t.search(s,r):Un(t,"search")},{hasContent:!0,type:"read"});static copy=vn(function(t,r,n,s){return t.copy?t.copy(s,r):Un(t,"copy")},{hasContent:!0,type:"create"});static move=vn(function(t,r,n,s){return t.move?t.move(s,r):Un(t,"move")},{hasContent:!0,type:"delete"});async post(t){if(this.#n)return(await this.constructor.create(this.#e,t,this.#t)).#e;Un(this,"post")}static isCollection(t){return t&&t.#n}get isCollection(){return this.#n}static coerceId(t){return t}static parseQuery(t){return Pp(t)}static parsePath(t,r,n){let s=t.indexOf(".");if(s>-1){let o=t.slice(s+1),c=r?.headers&&Mj[o];if(c)r.requestedContentType=c,t=t.slice(0,s);else if(this.attributes?.find(l=>l.name===o))if(t=t.slice(0,s),n)n.property=o;else return{query:{property:o},id:JP(t,this),isCollection:sc}}let i=JP(t,this);return sc?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r.getContext?.(),o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=n?.isCollection;let c=o&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let l;if(i.resourceCache?l=i.resourceCache:l=i.resourceCache=[],l.asMap){let u=l.asMap.get(t);if(s=u?.find(f=>f.constructor===c),s)return s;u||l.asMap.set(t,u=[]),u.push(s=new c(t,i))}else{if(s=l.find(u=>u.#e===t&&u.constructor===c),s)return s;if(l.push(s=new c(t,i)),l.length>10){let u=new Map;for(let f of l){let d=f.#e,h=u.get(d);h?h.push(f):u.set(d,[f])}i.resourceCache.length=0,i.resourceCache.asMap=u}}}else s=new c(t,i);return o&&(s.#n=!0),s}subscribe(t){return new Mn}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new Mn}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.#e}getContext(){return this.#t}};(0,ZP._assignPackageExport)("Resource",qr);a(vj,"snake_case");Dp=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(JP,"pathToId");Lp=class extends Array{static{a(this,"MultiPartId")}toString(){return this.join("/")}};a(vn,"transactional");a(Un,"missingMethod");a(nA,"selectFromObject");a(Mp,"transformForSelect")});var ra,iA=be(()=>{ra=class{constructor(t){this.error=t}static{a(this,"ErrorResource")}isError=!0;allowRead(){throw this.error}allowUpdate(){throw this.error}allowCreate(){throw this.error}allowDelete(){throw this.error}getId(){throw this.error}getContext(){throw this.error}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 nD={};Be(nD,{Resources:()=>vp,keyArrayToString:()=>Fl,resetResources:()=>Uj,resources:()=>pi});function Uj(){return pi=new vp}function Fl(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var tD,rD,vp,pi,Gl=be(()=>{rc();iA();tD=U(j()),rD=U(_e()),vp=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,exportTypes:n,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!s){let c=new rD.ServerError(`Conflicting paths for ${t}`);tD.default.error(c),i.Resource=new ra(c)}super.set(t,i);for(let[c,l]of this){let u=2;for(;(u=c.indexOf("/",u))>-1;){let f=this.get(c.slice(0,u));f&&(f.hasSubPaths=!0),u+=2}}}getMatch(t,r){let n=2,s;for(;(n=t.indexOf("/",n))>-1;){let c=t.slice(0,n),l=this.get(c);if(!l&&c.indexOf(".")>-1){let u=c.split(".");l=this.get(u[0])}if(l&&(!r||l.exportTypes?.[r]!==!1)){if(l.relativeURL=t.slice(n),!l.hasSubPaths)return l;s=l}n+=2}if(s)return s;let i=t.indexOf("?"),o=i>-1?t.slice(0,i):t;return s=this.get(o),!s&&o.indexOf(".")>-1&&(s=this.get(o.split(".")[0])),s&&(!r||s.exportTypes?.[r]!==!1)?s.relativeURL=i>-1?t.slice(i):"":s||(s=this.get(""),s&&(!r||s.exportTypes?.[r]!==!1)&&(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 yt(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};a(Uj,"resetResources");a(Fl,"keyArrayToString")});var ic={};Be(ic,{server:()=>je});var sD,je,$r=be(()=>{sD=U(ui()),je={};(0,sD._assignPackageExport)("server",je)});var cA={};Be(cA,{loadGQLSchema:()=>Hj,start:()=>aA,startOnMainThread:()=>Bj});function aA({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:l,NamedTypeNode:u,StringValueNode:f}=await import("graphql"),d=o(new c(r.toString(),s)),h=new Map,_=[],p;for(let T of d.definitions)switch(T.kind){case l.OBJECT_TYPE_DEFINITION:let F=function(K){if(K.kind==="NonNullType"){let X=F(K.type);return X.nullable=!1,X}if(K.kind==="ListType")return{type:"array",elements:F(K.type)};let ie={type:K.name?.value};return Object.defineProperty(ie,"location",{value:K.loc.startToken}),ie};a(F,"getProperty");let m=T.name.value,A=[],w={table:null,database:null,properties:A};h.set(m,w);for(let K of T.directives){if(K.name.value==="table"){for(let ie of K.arguments)w[ie.name.value]=ie.value.value;w.schema&&(w.database=w.schema),w.table||(w.table=m),w.audit&&(w.audit=w.audit!=="false"),w.attributes=w.properties,_.push(w)}if(K.name.value==="sealed"&&(w.sealed=!0),K.name.value==="splitSegments"&&(w.splitSegments=!0),K.name.value==="replicate"&&(w.replicate=!0),K.name.value==="export"){w.export=!0;for(let ie of K.arguments)typeof w.export!="object"&&(w.export={}),w.export[ie.name.value]=ie.value.value}}let M=!1,G={};for(let K of T.fields){let ee=F(K.type);ee.name=K.name.value,A.push(ee),G[ee.name]=void 0;for(let ie of K.directives){let X=ie.name.value;if(X==="primaryKey")M?console.warn("Can not define two attributes as a primary key at",ie.loc):(ee.isPrimaryKey=!0,M=!0);else if(X==="indexed")ee.indexed=!0;else if(X==="computed"){for(let re of ie.arguments||[])if(re.name.value==="from"){let z=re.value.value;ee.computed={from:g(z,re,G)},ee.version==null&&(ee.version=z)}else re.name.value==="version"&&(ee.version=re.value.value);ee.computed=ee.computed||!0}else if(X==="relationship"){let re={};for(let z of ie.arguments)re[z.name.value]=z.value.value;ee.relationship=re}else if(X==="createdTime")ee.assignCreatedTime=!0;else if(X==="updatedTime")ee.assignUpdatedTime=!0;else if(X==="expiresAt")ee.expiresAt=!0;else if(X==="allow"){let re=ee.authorizedRoles=[];for(let z of ie.arguments)z.name.value==="role"&&re.push(z.value.value)}else server.knownGraphQLDirectives.includes(X)&&console.warn(`@${X} is an unknown directive, at`,ie.loc)}}w.type=m,m==="Query"&&(p=w)}function S(T){let m=h.get(T.type);m?(Object.defineProperty(T,"properties",{value:m.properties}),Object.defineProperty(T,"definition",{value:m})):T.type==="array"?S(T.elements):xj.includes(T.type)||(0,oD.getWorkerIndex)()===0&&console.error(`The type ${T.type} is unknown at line ${T.location.line}, column ${T.location.column}, in ${s}`)}a(S,"connectPropertyType");for(let T of h.values())for(let m of T.properties)S(m);for(let T of _)T.tableClass=e(T),T.export&&(T.export.name===""?i.set((0,oA.dirname)(n),T.tableClass):i.set((0,oA.dirname)(n)+"/"+(T.export.name||T.type),T.tableClass,T.export));function g(T,m,A){return new iD.Script(`function computed(attributes) { return function(record) { with(attributes) { with (record) { return ${T}; } } } } computed;`,{filename:s,lineOffset:m.loc.startToken.line-1,columnOffset:m.loc.startToken.column}).runInThisContext()(A)}a(g,"createComputedFrom")}}var oA,iD,oD,xj,Bj,Hj,aD=be(()=>{oA=require("path"),iD=require("node:vm");De();oD=U(rt()),xj=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt","Blob"];server.knownGraphQLDirectives&&(server.knownGraphQLDirectives=["table","sealed","export","primaryKey","indexed","computed","relationship","createdTime","updatedTime","expiresAt","allow"]);a(aA,"start");Bj=aA,Hj=aA({ensureTable:ot}).handleFile});var hD={};Be(hD,{parse:()=>uA,streamAsJSON:()=>af,stringify:()=>oc});function af(e){return new lA({value:e})}function cD(e){return console.error(e),JSON.stringify(e.toString())}function lD(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function oc(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===fD)return _D(e);if(t.resolution)return t.resolution.then(()=>oc(e));throw t}}function _D(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+=_D(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+oc(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function uA(e){return e?.length>0?(typeof e!="string"&&(e=e.toString()),Gj.test(e)?kj.parse(e):JSON.parse(e)):null}var uD,dD,kj,Fj,fD,lA,Gj,dA=be(()=>{uD=require("stream"),dD=U(require("json-bigint-fixes")),kj=(0,dD.default)({useNativeBigInt:!0}),Fj=1e4,fD={message:"Cannot serialize BigInt to JSON"};BigInt.prototype.toJSON=function(){throw fD};a(af,"streamAsJSON");lA=class extends uD.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(;;){try{o=i.next(),o.then&&(yield o.then(c=>(o=c,""),c=>(o={done:!1,value:{error:c.toString()}},i={next:a(()=>({done:!0}),"next")},"")))}catch(c){o={done:!1,value:{error:c.toString()}},i={next:a(()=>({done:!0}),"next")}}if(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),cD)}catch(s){yield cD(s)}else yield oc(t)}else yield oc(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);lD(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>Fj?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 lD(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(cD,"handleError");a(lD,"when");a(oc,"stringify");a(_D,"jsStringify");Gj=/[[,:]\s*-?\d{16,}/;a(uA,"parse")});var Qi=P(xp=>{var Up=j();for(let e of["trace","debug","info","warn","error","fatal","notify"])Up.logsAtLevel(e)&&(xp[e]=Up[e]);xp.loggerWithTag=e=>Up.loggerWithTag(e,!0);xp.setLogLevel=Up.setLogLevel});var gA={};Be(gA,{asyncSerialization:()=>mA,contentTypes:()=>pA,findBestSerializer:()=>Hp,getDeserializer:()=>Ji,registerContentHandlers:()=>EA,serialize:()=>uf,serializeMessage:()=>sa,toCsvStream:()=>Bp});function $j(e){try{return e?.[0]===123?hA(e):e}catch{return e}}function EA(e){e.register(Kj,{serializers:[{regex:/^application\/json$/,serializer:af},{regex:/^application\/cbor$/,serializer:a(function(t){return new ac.EncoderStream(lf).end(t)},"serializer")},{regex:/^application\/(x-)?msgpack$/,serializer:a(function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?cc.Readable.from((0,Ei.encodeIter)(t,lf)):(0,Ei.pack)(t)},"serializer")},{regex:/^text\/csv$/,serializer:a(function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),Bp(t)},"serializer")}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Ei.unpack)(r))}catch(s){s.statusCode=400,n(s)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,ac.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function Hp(e){let t=e.headers.asObject||e.headers,r=e.requestedContentType??t.accept,n,s=0,i,o,c=r?r.toLowerCase().split(/\s*,\s*/):[];for(let l of c){let[u,...f]=l.split(/\s*;\s*/),d=1,h={q:1};for(let p of f){let S=p.indexOf("=");h[p.substring(0,S)]=p.substring(S+1)}d=+h.q;let _=Vr.get(u);if(_){let p=(_.q||1)*d;p>s&&(n=_,i=_.type||u,s=p,o=h)}}if(!n){if(r)throw new mD.ClientError("No supported content types found in Accept header, supported types include: "+Array.from(Vr.keys()).join(", "),406);n=Vr.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:o}}function uf(e,t,r){let n=ED&&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||e instanceof mi)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),s=e;else{let i=Hp(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&&(e[Symbol.iterator]||e[Symbol.asyncIterator])&&i.serializer.serializeStream){if(e.mapError){let c=e.getColumns;e=e.mapError(l=>(l.toJSON=()=>({error:l.name,message:l.message,...l.partialObject}),_A.default.warn?.(`Error serializing error ${t?.url||t}: ${l}`),l)),e.getColumns=c}let o=i.serializer.serializeStream(e,r);return n&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,ji.createBrotliCompress)({params:{[ji.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?ji.constants.BROTLI_MODE_TEXT:ji.constants.BROTLI_MODE_GENERIC,[ji.constants.BROTLI_PARAM_QUALITY]:2}}))),o}s=i.serializer.serialize(e,r)}return n&&s?.length>ED?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,ji.brotliCompress)(s,(c,l)=>{c?o(c):i(l)}))):s}function sa(e,t,r){if(e?.contentType!=null&&e.data!=null)return e.data;na=r?void 0:[];try{let n;if(t){let s=t.serialize;if(s)n=s(e);else{let i=Hp(t);s=t.serialize=i.serializer.serialize,n=s(e)}}else n=cf(e);return na?.length>0?(na.length===1?na[0]:Promise.all(na)).then(()=>sa(e,t,!0)):n}finally{na=void 0}}function mA(e){if(na)na.push(e);else throw new Error("Unable to serialize asynchronously")}function Yj(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 zj(e){return Wj.includes(e)}function Qj(e){let t=e.indexOf(";"),r;if(t>-1){r={};let n=e.slice(t+1).split(";");for(let s of n){let[i,o]=s.split("=");r[i.trim()]=o.trim()}e=e.slice(0,t)}return{type:e,parameters:r}}function Ji(e="",t=!1){let r=Qj(e),n=r.type&&Vr.get(r.type)?.deserialize||jj(r);return t?s=>Yj(s).then(n):n}function jj(e){return e.type.startsWith("text/")?(e.parameters?.charset&&!zj(e.parameters.charset)&&_A.default.info(`Unknown Buffer encoding ${e.parameters.charset} in content-type. Proceeding anyways.`),t=>({contentType:e.type,data:t.toString(e.parameters?.charset||"utf-8")})):e.type==="application/octet-stream"?t=>t:t=>{if(e.type==="")try{if(t?.[0]===123)return hA(t)}catch{}return{contentType:e.type||"application/octet-stream",data:t}}}function Jj(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)}}}}}function Bp(e,t){let r=cc.default.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),n={};t&&(n.fields=t.map(o=>({label:o,value:o})));let s={objectMode:!0},i=new qj(n,s);return r.pipe(i)}var Ei,ac,ji,mD,cc,gD,fA,SD,_A,qj,TD,cf,hA,lf,Vr,pA,pD,AD,Vj,Kj,ED,na,Wj,Xi=be(()=>{dA();Ei=require("msgpackr"),ac=require("cbor-x"),ji=require("zlib"),mD=U(_e()),cc=U(require("stream"));$r();gD=U(ui()),fA=U(ce());H();SD=U(require("yaml")),_A=U(Qi());cs();({Transform:qj}=require("json2csv")),TD=fA.default.get(B.SERIALIZATION_BIGINT)!==!1,cf=TD?oc:JSON.stringify,hA=TD?uA:JSON.parse,lf={useRecords:!1,useToJSON:!0},Vr=new Map,pA=Vr;je.contentTypes=pA;(0,gD._assignPackageExport)("contentTypes",pA);Vr.set("application/json",{serializeStream:af,serialize:cf,deserialize(e){return hA(e)},q:.8});pD=new ac.Encoder(lf);Vr.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new ac.EncoderStream(lf).end(e)},serialize:pD.encode,deserialize:pD.decode,q:1});Vr.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?cc.Readable.from((0,Ei.encodeIter)(e,lf)):(0,Ei.pack)(e)},serialize:Ei.pack,deserialize:Ei.unpack,q:.9});Vr.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),Bp(e,e?.getColumns?.())},serialize(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),e&&!e[Symbol.iterator]&&(e=[e.toJSON?e.toJSON():e]),Bp(e,e?.getColumns?.())},q:.1});Vr.set("text/plain",{serialize(e){return e.toString()},serializeStream(e){return cc.Readable.from(e.map?e.map(t=>t.toString()):e)},deserialize(e){return e.toString()},q:.2});Vr.set("text/yaml",{serialize(e){return SD.stringify(e,{aliasDuplicateObjects:!1})},q:.7});Vr.set("text/event-stream",{serializeStream:a(function(e){return cc.Readable.from(Jj(e,this.serialize))},"serializeStream"),serialize:a(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+`
8
- `),e.data){let r=e.data;typeof r=="object"&&(r=cf(r)),t+="data: "+r+`
6
+ `}a(vs,"createLogRecord");function Qd(e){if(li){if(mP(e),os){Yo=!1;try{process.stdout.write(e)}finally{Yo=!0}}}else os&&process.stdout.write(e)}a(Qd,"logStdOut");function wp(e){if(li){if(mP(e),os){Yo=!1;try{process.stderr.write(e)}finally{Yo=!0}}}else os&&process.stderr.write(e)}a(wp,"logStdErr");function mP(e){sA(),Ko?Ki.appendFileSync(Ko,e):nA||console.log(e)}a(mP,"logToFile");function oA(){try{Ki.closeSync(Ko)}catch{}Ko=null}a(oA,"closeLogFile");function sA(){if(!Ko){try{Ko=Ki.openSync(Op,"a")}catch(e){nA||(nA=!0,console.error(e))}setTimeout(()=>{oA()},j2).unref()}}a(sA,"openLogFile");function EP(...e){_r[wr]<=_r.info&&Qd(vs("info",e))}a(EP,"info");function gP(...e){_r[wr]<=_r.trace&&Qd(vs("trace",e))}a(gP,"trace");function Np(...e){_r[wr]<=_r.error&&wp(vs("error",e))}a(Np,"error");function SP(...e){_r[wr]<=_r.debug&&Qd(vs("debug",e))}a(SP,"debug");function TP(...e){_r[wr]<=_r.notify&&Qd(vs("notify",e))}a(TP,"notify");function AP(...e){_r[wr]<=_r.fatal&&wp(vs("fatal",e))}a(AP,"fatal");function RP(...e){_r[wr]<=_r.warn&&wp(vs("warn",e))}a(RP,"warn");function rj(e,t,...r){t===hP.STDERR?wp(vs(e,r)):Qd(vs(e,r))}a(rj,"logCustomLevel");function nj(){let e;try{e=Y2.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=ui.join(e,Vt.HDB_HOME_DIR_NAME,Vt.BOOT_PROPS_FILE_NAME);return Ki.existsSync(t)||(t=ui.join(iA,"utility/hdb_boot_properties.file")),t}a(nj,"getPropsFilePath");function sj(e){wr=e}a(sj,"setLogLevel");function dP(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(dP,"autoCastBoolean");function ij(e){try{if(e.includes("config/settings.js")){let o=_P(e);return{level:o.get(Vt.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:ui.dirname(o.get(Vt.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(Vt.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(Vt.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=fP.parseDocument(Ki.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===Vt.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(ij,"getLogConfig");function oj(){try{let e=fP.parseDocument(Ki.readFileSync(Q2,"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(oj,"getDefaultConfig");function aj(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(aj,"AuthAuditLog")});var aA=I(($Te,OP)=>{"use strict";var cj=require("util"),lj=require("path"),uj=require("child_process"),dj=cj.promisify(uj.execFile),fj=1e3*1e3*10;OP.exports={findPs:_j};async function _j(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:n}=await dj("ps",["wwxo",`pid,${r}`],{maxBuffer:fj});for(let s of n.trim().split(`
7
+ `).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:lj.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(_j,"findPs")});var vt=I((KTe,wP)=>{"use strict";var hj="__dbis__",pj="__txns__",mj="__environment_name__",Ej="__dbi_defintion__",gj={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"},Sj=["__createdtime__","__updatedtime__"],Tj="\uFFFF",NP={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},Aj=Object.values(NP);wP.exports={AUDIT_STORE_NAME:pj,INTERNAL_DBIS_NAME:hj,DBI_DEFINITION_NAME:Ej,SEARCH_TYPES:gj,TIMESTAMP_NAMES:Sj,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:mj,TRANSACTIONS_DBI_NAMES_ENUM:NP,TRANSACTIONS_DBIS:Aj,OVERFLOW_MARKER:Tj}});var Cn=I((YTe,xP)=>{"use strict";var IP=(H(),D(q)),CP=vt(),PP={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},DP=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),LP={500:DP("There was an error processing your request."),400:"Invalid request"},Rj=LP[PP.INTERNAL_SERVER_ERROR],yj={OP_NOT_SUPPORTED_FOR_FS:a(e=>`${e} is not available for this instance because it uses the File System data store.`,"OP_NOT_SUPPORTED_FOR_FS"),MISSING_VALUE:a(e=>`${e} is missing.`,"MISSING_VALUE"),INVALID_VALUE:a(e=>`${e} is invalid.`,"INVALID_VALUE"),NOT_FOUND:a(e=>`${e} not found.`,"NOT_FOUND")},bj={CONFIG_VALIDATION:a(e=>`HarperDB config file validation error: ${e}`,"CONFIG_VALIDATION")},Oj={DEFAULT_BULK_LOAD_ERR:"There was an error during your bulk load into HarperDB.",DOWNLOAD_FILE_ERR:a(e=>`There was an error downloading '${e}'.`,"DOWNLOAD_FILE_ERR"),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:a(e=>`Bulk load operation failed - ${e} is not a valid 'action' parameter`,"INVALID_ACTION_PARAM_ERR"),INVALID_FILE_EXT_ERR:a(e=>`Error selecting correct parser - valid file type not found in json - ${e}`,"INVALID_FILE_EXT_ERR"),MAX_FILE_SIZE_ERR:a((e,t)=>`File size is ${e} bytes, which exceeded the maximum size allowed of: ${t} bytes`,"MAX_FILE_SIZE_ERR"),PAPA_PARSE_ERR:"There was an error parsing the downloaded CSV data.",S3_DOWNLOAD_ERR:a(e=>`There was an error downloading '${e}' from AWS.`,"S3_DOWNLOAD_ERR"),WRITE_TEMP_FILE_ERR:"Error writing temporary file to storage"},Nj={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 ${CP.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${CP.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"},wj={ATTR_NAME_LENGTH_ERR:a(e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${IP.INSERT_MAX_CHARACTER_SIZE} bytes.`,"ATTR_NAME_LENGTH_ERR"),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 ${IP.INSERT_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"},MP={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"},Ij={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:a(e=>`Operation '${e}' is restricted to 'super_user' roles`,"OP_IS_SU_ONLY"),OP_NOT_FOUND:a(e=>`Operation '${e}' not found`,"OP_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:a((e,t,r)=>`There was an error authorizing ${e} op on table '${t}.${r}'`,"UNKNOWN_OP_AUTH_ERROR"),USER_HAS_NO_PERMS:a(e=>`User ${e} has no role or permissions. Please assign the user a valid role.`,"USER_HAS_NO_PERMS"),DROP_SYSTEM:"The 'system' database, tables and records are used internally by HarperDB and cannot be updated or removed."},Cj={ATTR_PERM_MISSING:a((e,t)=>`${e.toUpperCase()} attribute permission missing for '${t}'`,"ATTR_PERM_MISSING"),ATTR_PERM_MISSING_NAME:"Permission object in 'attribute_permission' missing an 'attribute_name'",ATTR_PERM_NOT_BOOLEAN:a((e,t)=>`${e.toUpperCase()} attribute permission for '${t}' must be a boolean`,"ATTR_PERM_NOT_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:a(e=>`Invalid attribute '${e}' in 'attribute_permissions'`,"INVALID_ATTRIBUTE_IN_PERMS"),INVALID_PERM_KEY:a(e=>`Invalid table permission key value '${e}'`,"INVALID_PERM_KEY"),INVALID_ATTR_PERM_KEY:a(e=>`Invalid attribute permission key value '${e}'`,"INVALID_ATTR_PERM_KEY"),INVALID_ROLE_JSON_KEYS:a(e=>`Invalid ${e.length>1?"keys":"key"} in JSON body - '${e.join("', '")}'`,"INVALID_ROLE_JSON_KEYS"),MISMATCHED_TABLE_ATTR_PERMS:a(e=>`You have a conflict with TABLE permissions for '${e}' being false and ATTRIBUTE permissions being true`,"MISMATCHED_TABLE_ATTR_PERMS"),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:a(e=>`A role with name '${e}' already exists`,"ROLE_ALREADY_EXISTS"),ROLE_NOT_FOUND:"Role not found",ROLE_PERMS_ERROR:"Errors in the role permissions JSON provided",SCHEMA_PERM_ERROR:a(e=>`Your role does not have permission to view database metadata for '${e}'`,"SCHEMA_PERM_ERROR"),SCHEMA_TABLE_PERM_ERROR:a((e,t)=>`Your role does not have permission to view database.table metadata for '${e}.${t}'`,"SCHEMA_TABLE_PERM_ERROR"),SU_ROLE_MISSING_ERROR:"Missing 'super_user' key/value in permission set",SU_CU_ROLE_BOOLEAN_ERROR:a(e=>`Value for '${e}' permission must be a boolean`,"SU_CU_ROLE_BOOLEAN_ERROR"),STRUCTURE_USER_ROLE_TYPE_ERROR:a(e=>`Value for '${e}' permission must be a boolean or Array`,"STRUCTURE_USER_ROLE_TYPE_ERROR"),SU_CU_ROLE_NO_PERMS_ALLOWED:a(e=>`Roles with '${e}' set to true cannot have other permissions set.`,"SU_CU_ROLE_NO_PERMS_ALLOWED"),SU_CU_ROLE_COMBINED_ERROR:"Roles cannot have both 'super_user' and 'cluster_user' values included in their permissions set.",TABLE_PERM_MISSING:a(e=>`Missing table ${e.toUpperCase()} permission`,"TABLE_PERM_MISSING"),TABLE_PERM_NOT_BOOLEAN:a(e=>`Table ${e.toUpperCase()} permission must be a boolean`,"TABLE_PERM_NOT_BOOLEAN")},Pj={ATTR_NOT_FOUND:a((e,t,r)=>`Attribute '${r}' does not exist on '${e}.${t}'`,"ATTR_NOT_FOUND"),ATTR_EXISTS_ERR:a((e,t,r)=>`Attribute '${r}' already exists in ${e}.${t}'`,"ATTR_EXISTS_ERR"),DESCRIBE_ALL_ERR:"There was an error during describeAll. Please check the logs and try again.",INVALID_TABLE_ERR:a(e=>`Invalid table ${JSON.stringify(e)}`,"INVALID_TABLE_ERR"),SCHEMA_NOT_FOUND:a(e=>`database '${e}' does not exist`,"SCHEMA_NOT_FOUND"),SCHEMA_EXISTS_ERR:a(e=>`database '${e}' already exists`,"SCHEMA_EXISTS_ERR"),TABLE_EXISTS_ERR:a((e,t)=>`Table '${t}' already exists in '${e}'`,"TABLE_EXISTS_ERR"),SCHEMA_REQUIRED_ERR:"database is required",TABLE_NOT_FOUND:a((e,t)=>`Table '${e}.${t}' does not exist`,"TABLE_NOT_FOUND"),TABLE_REQUIRED_ERR:"table is required"},Dj={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},Lj={ALTER_USER_DUP_ROLES:a(e=>`Update failed. There are duplicates for the '${e}' role which is not allowed. Update your roles and try again.`,"ALTER_USER_DUP_ROLES"),ALTER_USER_ROLE_NOT_FOUND:a(e=>`Update failed. Requested '${e}' role not found.`,"ALTER_USER_ROLE_NOT_FOUND"),DUP_ROLES_FOUND:a(e=>`Multiple ${e} roles found. Roles must have unique 'role' value. Please update and try again.`,"DUP_ROLES_FOUND"),ROLE_NAME_NOT_FOUND:a(e=>`${e} role not found`,"ROLE_NAME_NOT_FOUND"),USER_ALREADY_EXISTS:a(e=>`User ${e} already exists`,"USER_ALREADY_EXISTS"),USER_NOT_EXIST:a(e=>`User ${e} does not exist`,"USER_NOT_EXIST")},vP={INVALID_DATE:"Invalid date, must be in ISO-8601 format (YYYY-MM-DD).",SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE:a(e=>`invalid sort attribute '${e}', the attribute must either be the table's hash attribute or an attribute used in conditions.`,"SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE")},UP={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:a(e=>`ITC server received invalid event type: ${e}`,"INVALID_EVENT")},Mj={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.",BAD_SSH_KEY_NAME:"SSH key name can only contain alphanumeric, dash and underscore characters"},vj={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},Uj={...MP,...Oj,...yj,...Ij,...Cj,...Pj,...Dj,...Lj,...wj,...vP,...UP,...Mj,...vj,...bj};xP.exports={CHECK_LOGS_WRAPPER:DP,HDB_ERROR_MSGS:Uj,DEFAULT_ERROR_MSGS:LP,DEFAULT_ERROR_RESP:Rj,HTTP_STATUS_CODES:PP,LMDB_ERRORS_ENUM:Nj,AUTHENTICATION_ERROR_MSGS:MP,VALIDATION_ERROR_MSGS:vP,ITC_ERRORS:UP}});var he=I((zTe,kP)=>{"use strict";var kl=Cn(),xj=j(),Bj=(H(),D(q)),Ip=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,BP),this.statusCode=n||kl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(kl.DEFAULT_ERROR_MSGS[n]?kl.DEFAULT_ERROR_MSGS[n]:kl.DEFAULT_ERROR_MSGS[kl.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&&xj[s](i)}},cA=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}},lA=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function BP(e,t,r,n=Bj.LOG_LEVELS.ERROR,s=null,i=!1){if(HP(e))return e;let o=new Ip(e,t,r,n,s);return i&&delete o.stack,o}a(BP,"handleHDBError");function HP(e){return e.__proto__.constructor.name===Ip.name}a(HP,"isHDBError");kP.exports={isHDBError:HP,handleHDBError:BP,ClientError:cA,ServerError:lA,hdb_errors:kl}});var gt=I((jTe,YP)=>{"use strict";var ef=(H(),D(q)),Hj=oe(),on=ce(),tf=require("path"),kj=require("minimist"),FP=require("fs-extra"),GP=require("lodash");on.initSync();var{CONFIG_PARAMS:Wo,DATABASES_PARAM_CONFIG:jd,SYSTEM_SCHEMA_NAME:Cp}=ef,Jd,Xd,Zd;function qP(){if(Jd!==void 0)return Jd;if(on.getHdbBasePath()!==void 0)return Jd=on.get(Wo.STORAGE_PATH)||tf.join(on.getHdbBasePath(),ef.DATABASES_DIR_NAME),Jd}a(qP,"getBaseSchemaPath");function $P(){if(Xd!==void 0)return Xd;if(on.getHdbBasePath()!==void 0)return Xd=KP(Cp),Xd}a($P,"getSystemSchemaPath");function VP(){if(Zd!==void 0)return Zd;if(on.getHdbBasePath()!==void 0)return Zd=on.get(ef.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||tf.join(on.getHdbBasePath(),ef.TRANSACTIONS_DIR_NAME),Zd}a(VP,"getTransactionAuditStoreBasePath");function Fj(e,t){let r=on.get(Wo.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||tf.join(VP(),e.toString())}a(Fj,"getTransactionAuditStorePath");function KP(e,t){e=e.toString(),t=t&&t.toString();let r=on.get(ef.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||tf.join(qP(),e)}a(KP,"getSchemaPath");function Gj(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,kj(process.argv));let n=r[Wo.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!Hj.isObject(n))throw o;i=n}for(let o of i){let c=o[Cp];if(!c)continue;let l=on.get(Wo.DATABASES);l=l??{};let u=c?.tables?.[t]?.[jd.PATH];if(u)return GP.set(l,[Cp,jd.TABLES,t,jd.PATH],u),on.setProperty(Wo.DATABASES,l),u;let f=c?.[jd.PATH];if(f)return GP.set(l,[Cp,jd.PATH],f),on.setProperty(Wo.DATABASES,l),f}}let s=r[Wo.STORAGE_PATH.toUpperCase()];if(s){if(!FP.pathExistsSync(s))throw new Error(s+" does not exist");let i=tf.join(s,e);return FP.mkdirsSync(i),on.setProperty(Wo.STORAGE_PATH,s),i}return $P()}a(Gj,"initSystemSchemaPaths");function qj(){Jd=void 0,Xd=void 0,Zd=void 0}a(qj,"resetPaths");YP.exports={getBaseSchemaPath:qP,getSystemSchemaPath:$P,getTransactionAuditStorePath:Fj,getTransactionAuditStoreBasePath:VP,getSchemaPath:KP,initSystemSchemaPaths:Gj,resetPaths:qj}});var an=I((eAe,JP)=>{"use strict";var $j=Cn().LMDB_ERRORS_ENUM,XTe=require("lmdb"),Vj=vt(),ZTe=require("buffer").Buffer,{OVERFLOW_MARKER:WP,MAX_SEARCH_KEY_LENGTH:Pp}=Vj,zP=["number","string","symbol","boolean","bigint"];function Kj(e){if(e=e?.primaryStore||e,!e)throw new Error($j.ENV_REQUIRED)}a(Kj,"validateEnv");function Yj(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(Yj,"stringifyData");function Wj(e){return e instanceof Date?e.valueOf():e}a(Wj,"convertKeyValueToWrite");function zj(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(zP.includes(typeof e))return e.length>Pp?[e.slice(0,Pp)+WP]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(zP.includes(typeof i))i.length>Pp?r.push(i.slice(0,Pp)+WP):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(zj,"getIndexedValues");var Dp=0,QP=0;function jP(){QP=Date.now()-performance.now()}a(jP,"adjustStartTime");jP();var Qj=6e4;setInterval(jP,Qj).unref();function jj(){let e=performance.now()+QP;return e>Dp?(Dp=e,e):(Dp+=488e-6,Dp)}a(jj,"getNextMonotonicTime");JP.exports={validateEnv:Kj,stringifyData:Yj,convertKeyValueToWrite:Wj,getNextMonotonicTime:jj,getIndexedValues:zj}});var rf=I((rAe,XP)=>{"use strict";var Jj=(H(),D(q)).OPERATIONS_ENUM,uA=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=Jj.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};XP.exports=uA});var nf=I((iAe,rD)=>{"use strict";var sAe=rf(),Lp=(H(),D(q)),dA=oe(),ZP=j(),Xj=require("uuid"),{handleHDBError:Mp,hdb_errors:Zj}=he(),{HDB_ERROR_MSGS:vp,HTTP_STATUS_CODES:Up}=Zj;rD.exports=eD;function eD(e,t,r){for(let s=0;s<t.length;s++)tD(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];eJ(i,r,e.operation)}}a(eD,"processRows");eD.validateAttribute=tD;function tD(e){if(Buffer.byteLength(String(e))>Lp.INSERT_MAX_CHARACTER_SIZE)throw Mp(new Error,vp.ATTR_NAME_LENGTH_ERR(e),Up.BAD_REQUEST,void 0,void 0,!0);if(dA.isEmptyOrZeroLength(e)||dA.isEmpty(e.trim()))throw Mp(new Error,vp.ATTR_NAME_NULLISH_ERR,Up.BAD_REQUEST,void 0,void 0,!0)}a(tD,"validateAttribute");function eJ(e,t,r){if(!e.hasOwnProperty(t)||dA.isEmptyOrZeroLength(e[t])){if(r===Lp.OPERATIONS_ENUM.INSERT||r===Lp.OPERATIONS_ENUM.UPSERT){e[t]=Xj.v4();return}throw ZP.error("Update transaction aborted due to record with no hash value:",e),Mp(new Error,vp.RECORD_MISSING_HASH_ERR,Up.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Lp.INSERT_MAX_CHARACTER_SIZE)throw ZP.error(e),Mp(new Error,vp.HASH_VAL_LENGTH_ERR,Up.BAD_REQUEST,void 0,void 0,!0)}a(eJ,"validateHash")});var nD,Pn,fA,Fl=be(()=>{nD=require("events"),Pn=class extends nD.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;drainCloseListener;currentDrainResolver;[Symbol.asyncIterator](){let t=new fA;return t.queue=this,t}push(t){this.send(t)}send(t){this.resolveNext?(this.resolveNext({value:t}),this.resolveNext=null):this.hasDataListeners?this.emit("data",t):(this.queue||(this.queue=[]),this.queue.push(t))}getNextMessage(){let t=this.queue?.shift();return t||this.emit("drained"),t}waitForDrain(){return new Promise(t=>{!this.queue||this.queue.length===0?t(!0):(this.once("drained",()=>t(!0)),this.currentDrainResolver=t,this.drainCloseListener||(this.drainCloseListener=!0,this.on("close",()=>{this.currentDrainResolver?.(!1)})))})}on(t,r){if(t==="data"&&!this.hasDataListeners)for(this.hasDataListeners=!0;this.queue?.length>0;)r(this.queue.shift());return super.on(t,r)}},fA=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 uD(e){hA=e}function sJ(){nJ=setInterval(function(){for(let e of _A)if(e.stale){let t=e.getContext()?.url;aD.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},rJ).unref()}var pA,oD,aD,cD,lD,sD,_A,tJ,sf,iD,hA,tc,xp,rJ,nJ,Bp=be(()=>{pA=M(an()),oD=M(he()),aD=M(j()),cD=M(ce());H();lD=M(oe()),sD=100,_A=new Set,tJ=(0,lD.convertToMS)(cD.get(B.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3;a(uD,"replicationConfirmation");tc=class e{static{a(this,"DatabaseTransaction")}#e;writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;overloadChecked;open=1;getReadTxn(){if(this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn)return this.readTxn.openTimer&&(this.readTxn.openTimer=0),this.readTxn;if(this.open===1)return this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxnsUsed=1,this.readTxn.openTimer&&(this.readTxn.openTimer=0),_A.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(_A.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(sf&&!this.overloadChecked&&performance.now()-iD>tJ)throw new oD.ServerError("Outstanding write transactions have too long of queue, please try again later",503);this.overloadChecked=!0}addWrite(t){if(this.open===0)throw new Error("Can not use a transaction that is no longer open");if(this.open===2){let r=new e;return r.addWrite(t),r.commit({})}else this.writes.push(t)}removeWrite(t){let r=this.writes.indexOf(t);r>-1&&(this.writes[r]=null)}commit(t={}){let r=this.timestamp;r||(r=this.timestamp=t.timestamp||(0,pA.getNextMonotonicTime)()),t.timestamp||(t.timestamp=r);let n=t.retries||0;if(this.validated<this.writes.length)try{let d=this.validated;this.validated=this.writes.length;for(let _=d;_<this.validated;_++)this.writes[_]?.validate?.(this.timestamp);let h;for(let _=d;_<this.validated;_++){let p=this.writes[_];p&&(p.before||p.beforeIntermediate)&&(h=!0)}if(h)return(async()=>{try{for(let _=0;_<2;_++){let p;for(let S=d;S<this.validated;S++){let g=this.writes[S];if(!g)continue;let R=g[_===0?"before":"beforeIntermediate"];if(R){let E=R();p?p.push?p.push(E):p=[p,E]:p=E}}p&&await(p.push?Promise.all(p):p)}}catch(_){throw this.abort(),_}return this.commit(t)})()}catch(d){throw this.abort(),d}n||this.doneReadTxn(),this.open=t?.letItLinger?2:0;let s,i=[],o=0;this.writes=this.writes.filter(d=>d);let c=a(d=>{d.commit(r,d.entry,n)},"doWrite"),l=a(()=>{let d=this.writes[o++];if(d)if(d.key){n>0&&(d.entry=d.store.getEntry(d.key));let h=d.store.ifVersion(d.key,d.entry?.version??null,l);s=s||h}else l();else for(let h of this.writes)c(h)},"nextCondition"),u=this.lmdbDb;if(this.writes.length>0&&(u?.retryRisk&&(u.retryRisk*=.99),this.writes.length+(u?.retryRisk||0)<sD>>n?l():s=this.writes[0].store.transaction(()=>{for(let d of this.writes)d.entry=d.store.getEntry(d.key),c(d);return!0})),s)return sf||(sf=s,iD=performance.now(),sf.then(()=>{sf=null})),s.then(d=>{if(d){if(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.replicatedConfirmation){let h=this.writes[0].store.rootStore.databaseName,_=this.writes[this.writes.length-1];hA&&_&&i.push(hA(h,_.store.getEntry(_.key).localTime,this.replicatedConfirmation))}return this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))}else return u&&(u.retryRisk=(u.retryRisk||0)+sD/2),t?t.retries=n+1:t={retries:1},this.commit(t)});let f={txnTime:r};if(this.next){let d=this.next?.commit(t);if(d?.then)return d?.then(h=>({txnTime:r,next:h}));f.next=d}return f}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=0,this.writes=[]}getContext(){return this.#e}setContext(t){this.#e=t}},xp=class extends tc{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,pA.getNextMonotonicTime)())}getReadTxn(){}},rJ=3e4;a(sJ,"startMonitoringTxns");sJ()});function bt(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===1&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let n=e.transaction=new tc;e.timestamp&&(n.timestamp=e.timestamp),e.replicatedConfirmation&&(n.replicatedConfirmation=e.replicatedConfirmation),n.setContext(e),e.resourceCache||(e.resourceCache=[]);let s;try{if(s=t(n),s?.then)return s.then(i,o)}catch(c){o(c)}return i(s);function i(c){let l=n.commit({letItLinger:r?.letItLinger});return l.then?l.then(()=>c):c}function o(c){throw n.abort({}),c}}var dD,rc=be(()=>{dD=M(ci());Bp();a(bt,"transaction");(0,dD._assignPackageExport)("transaction",bt);bt.commit=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};bt.abort=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});function EA(e,t,r,n,s,i,o,c){let l=e[0];if(t==="or"){let d=u(l);for(let _=1;_<e.length;_++){let p=e[_],S=u(p);d=d.concat(S)}let h=new Set;return d.filter(_=>{let p=_.key??_;return h.has(p)?!1:(h.add(p),!0)})}else{let d=u(l),h=f(e.slice(1),!0,l.estimated_count);return h.length>0?o(d,h):d}function u(d){return d.conditions?EA(d.conditions,d.operator,r,n,s,i,o,c):$l(d,n,d.descending||s.reverse===!0,r,s.allowFullScan,c)}a(u,"executeCondition");function f(d,h,_){return d.map((p,S)=>{if(p.conditions){let E=p.operator==="or",A=f(p.conditions,!E,_);return E?(O,v)=>A.some(F=>F(O,v)):(O,v)=>A.every(F=>F(O,v))}let g=(p.attribute||p[0])===r.primaryKey,R=cf(p,r,i,c,g,_);return h&&S<d.length-1&&_&&(_=_J(r.primaryStore,p.estimated_count,_)),R}).filter(Boolean)}a(f,"mapConditionsToFilters")}function $l(e,t,r,n,s,i){let o=e[0]??e.attribute,c=e[1]??e.value,l=e.comparator;if(c===void 0&&l!=="sort")throw new ln.ClientError(`Search condition for ${o} must have a value`);if(Array.isArray(o)){let E=o[0],A=fi(n.attributes,E);if(A.relationship){if(o.length<2)throw new ln.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let O=A.definition?.tableClass||A.elements?.definition?.tableClass,v=new Map,F=$l({attribute:o.length>2?o.slice(1):o[1],value:c,comparator:l},t,r,O,s,v);if(A.relationship.to){i[o[0]]=v;let G=!!fi(O.attributes,A.relationship.to)?.elements;F=lJ(F,A,O.primaryStore,G,v)}if(A.relationship.from){let G=a(Y=>(Y?.key!==void 0&&(Y=Y.key),$l({attribute:A.relationship.from,value:Y},t,r,n,s,v)),"searchEntry");A.elements?(i[o[0]]=v,F=uJ(F,A,O.primaryStore,v,G)):F=F.flatMap(G)}return F}else if(o.length===1)o=o[0];else throw new ln.ClientError("Unable to query by attribute "+JSON.stringify(o))}let u,f,d,h;c instanceof Date&&(c=c.getTime());let _;switch(gA[l]||l){case"lt":u=!0,f=c;break;case"le":u=!0,f=c,d=!0;break;case"gt":u=c,h=!0;break;case"ge":u=c;break;case"prefix":Array.isArray(c)?c[c.length-1]!=null&&(c=c.concat(null)):c=[c,null],u=c,f=c.slice(0),f[f.length-1]=di.MAXIMUM_KEY;break;case"starts_with":u=c.toString(),f=c+"\uFFFF";break;case"between":case"gele":case"gelt":case"gtlt":case"gtle":u=c[0],u instanceof Date&&(u=u.getTime()),f=c[1],f instanceof Date&&(f=f.getTime()),d=l==="gele"||l==="gtle"||l==="between",h=l==="gtlt"||l==="gtle";break;case"equals":case void 0:u=c,f=c,d=!0;break;case"ne":if(c===null){u=c,h=!0;break}case"sort":case"contains":case"ends_with":u=!0,_=!0;break;default:throw new ln.ClientError(`Unknown query comparator "${l}"`)}let p,S=o===n.primaryKey||o==null;if(typeof u=="string"&&u.length>as.MAX_SEARCH_KEY_LENGTH&&(u=u.slice(0,as.MAX_SEARCH_KEY_LENGTH)+as.OVERFLOW_MARKER,h=!1,p=cf(e,n,null,i,S)),typeof f=="string"&&f.length>as.MAX_SEARCH_KEY_LENGTH&&(f=f.slice(0,as.MAX_SEARCH_KEY_LENGTH)+as.OVERFLOW_MARKER,d=!0,p=p??cf(e,n,null,i,S)),r){let E=u;u=f,f=E,E=!h,h=!d,d=E}let g=S?n.primaryStore:n.indices[o];if(!g||g.isIndexing||_||c===null&&!g.indexNulls){if(s===!1&&!g)throw new ln.ClientError(`"${o}" is not indexed, can not search for this attribute`,404);if(s===!1&&_)throw new ln.ClientError(`Can not use ${l||"equal"} operator without combining with a condition that uses an index, can not search for attribute ${o}`,403);if(g?.isIndexing)throw new ln.ServerError(`"${o}" is not indexed yet, can not search for this attribute`,503);if(c===null&&g&&!g.indexNulls)throw new ln.ClientError(`"${o}" is not indexed for nulls, index needs to be rebuilt to search for nulls, can not search for this attribute`,400);if(p=p??cf(e,n,null,i,S),!p)throw new ln.ClientError(`Unknown search operator ${e.comparator}`)}let R={start:u,end:f,inclusiveEnd:d,exclusiveStart:h,values:!0,versions:S,transaction:t,reverse:r};if(S){let E=g.getRange(R).map(p?function({key:A,value:O}){return this?.isSync?O&&p(O)?A:zo.SKIP:new Promise((v,F)=>setImmediate(()=>{try{v(O&&p(O)?A:zo.SKIP)}catch(G){F(G)}}))}:A=>A.value==null&&!(A.metadataFlags&(Dn|jo))?zo.SKIP:A);return E.hasEntries=!0,E}else return g?g.getRange(R).map(p?function({key:E,value:A}){let O;return typeof E=="string"&&E.length>as.MAX_SEARCH_KEY_LENGTH?O=n.primaryStore.get(A):O={[o]:E},this.isSync?p(O)?A:zo.SKIP:new Promise((v,F)=>setImmediate(()=>{try{v(p(O)?A:zo.SKIP)}catch(G){F(G)}}))}:({value:E})=>E):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:E,value:A}){return this.isSync?A&&p(A)?E:zo.SKIP:new Promise((O,v)=>setImmediate(()=>{try{O(A&&p(A)?E:zo.SKIP)}catch(F){v(F)}}))})}function fi(e,t){if(Array.isArray(t))if(t.length>1){let r=fi(e,t[0]),n=(r?.definition?.tableClass||r?.elements?.definition?.tableClass)?.attributes??r?.properties;return n?fi(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 lJ(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i;return s.hasMappings=!0,{next(){if(!i){let c=t.relationship.to,l=a((u,f)=>{let d=s.get(u);d?d.push(f):s.set(u,d=[f])},"add_entry");for(let u of e){let f=u.value??r.get(u.key??u),d=f?.[c];if(d!=null&&!s.filters?.some(h=>!h(f)))if(n)for(let h=0;h<d.length;h++)l(d[h],u);else l(d,u)}return i=s.keys()[Symbol.iterator](),this.next()}let o=i.next();return o.done?o:{value:o.value}},return(){if(i?.return)return i.return()}}}})}function uJ(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i,o,c=new Set;return{next(){let l;if(o)for(;l=o.next(),!l.done;){let u=l.value;if(!c.has(u))return c.add(u),l}if(!i){let u=new Set;n.fromRecord=f=>f[t.relationship.from]?.filter?.(d=>u.has(d));for(let f of e){if(n.filters){let d=r.get(f);if(n.filters.some(h=>!h(d)))continue}u.add(f)}return i=u[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 cf(e,t,r,n,s,i){let o=e.comparator,c=e[0]??e.attribute,l=e[1]??e.value;if(Array.isArray(c)){if(c.length===0)return()=>!0;if(c.length===1)c=c[0];else if(c.length>1){let f=c[0],d=fi(t.attributes,f),h=d.definition?.tableClass||d.elements.definition?.tableClass,_=n?.[f],p=cf({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:o},h,r,_?.[f]?.joined,c[1]===h.primaryKey,i);if(!p)return;if(_){_.filters||(_.filters=[]),_.filters.push(p);return}let S=t.propertyResolvers?.[f],g,R=a((E,A)=>{let O,v;if(S){if(S.from&&p.idFilter){if(!g)if(p.idFilter.idSet?.size===1){for(let G of p.idFilter.idSet)e={attribute:S.from,value:G};g=u(S.from,p.idFilter,!0,!0)}else g=u(S.from,p.idFilter,!1,!0);let F=g(E);return g.idFilter&&(R.idFilter=g.idFilter),F}v=S(E,r,A),O=v?.value}else O=E[f];return O?Array.isArray(O)?O.some(p):p(O,v):!1},"recordFilter");return R}}switch(l instanceof Date&&(l=l.getTime()),gA[o]||o){case as.SEARCH_TYPES.EQUALS:case void 0:return u(c,f=>f===l,!0);case"contains":return u(c,f=>f?.toString().includes(l));case"ends_with":return u(c,f=>f?.toString().endsWith(l));case"starts_with":return u(c,f=>typeof f=="string"&&f.startsWith(l),!0);case"prefix":return Array.isArray(l)?l[l.length-1]==null&&(l=l.slice(0,-1)):l=[l],u(c,f=>{if(!Array.isArray(f))return!1;for(let d=0,h=l.length;d<h;d++)if(f[d]!==l[d])return!1;return!0},!0);case"between":return l[0]instanceof Date&&(l[0]=l[0].getTime()),l[1]instanceof Date&&(l[1]=l[1].getTime()),u(c,f=>(0,di.compareKeys)(f,l[0])>=0&&(0,di.compareKeys)(f,l[1])<=0,!0);case"gt":return u(c,f=>(0,di.compareKeys)(f,l)>0);case"ge":return u(c,f=>(0,di.compareKeys)(f,l)>=0);case"lt":return u(c,f=>(0,di.compareKeys)(f,l)<0);case"le":return u(c,f=>(0,di.compareKeys)(f,l)<=0);case"ne":return u(c,f=>(0,di.compareKeys)(f,l)!==0,!1,!0);case"sort":return()=>!0;default:throw new ln.ClientError(`Unknown query comparator "${o}"`)}function u(f,d,h,_){let p;h=h&&!s&&t?.indices[f]&&i>3,h&&(e.estimated_count==null&&kp(t)(e),p=e.estimated_count>>4,(isNaN(p)||p>=i)&&(h=!1));let S=0,g=3;function R(E){let A=E[f],O;if(typeof A!="object"||!A||_?O=d(A):Array.isArray(A)?O=A.some(d):A instanceof Date&&(O=d(A.getTime())),h&&(g++,!O&&!R.idFilter&&++S/g*(i-g)>p)){let v=$l(e,r.transaction.getReadTxn(),!1,t).map(Vl),F=new Set(v);R.idFilter=G=>F.has(Vl(G)),R.idFilter.idSet=F}return O}return a(R,"recordFilter"),s&&(R.idFilter=d),R}a(u,"attributeComparator")}function kp(e){function t(r){if(r.estimated_count===void 0){if(r.conditions){let s;if(r.operator==="or"){s=0;for(let i of r.conditions)t(i),s+=i.estimated_count}else{s=1/0;for(let i of r.conditions)t(i),s=isFinite(s)?s*i.estimated_count/Yi(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=gA[n]||n,n===as.SEARCH_TYPES.EQUALS||!n){let s=r[0]??r.attribute;if(s==null||s===e.primaryKey)r.estimated_count=1;else if(Array.isArray(s)&&s.length>1){let i=fi(e.attributes,s[0]),o=i.definition?.tableClass||i.elements.definition?.tableClass,c=kp(o)({value:r.value,attribute:s.length>2?s.slice(1):s[1],comparator:"equals"}),l=e.indices[i.relationship.from];r.estimated_count=c+(l?c*Yi(e.indices[i.relationship.from])/(Yi(o.primaryStore)||1):c)}else{let i=e.indices[s];r.estimated_count=i?i.getValuesCount(r[1]??r.value):1/0}}else if(n==="contains"||n==="ends_with"||n==="ne"){let s=r[0]??r.attribute,i=e.indices[s];r.value===null&&n==="ne"?r.estimated_count=Yi(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else n==="starts_with"||n==="prefix"?r.estimated_count=aJ*Yi(e.primaryStore)+1:n==="between"?r.estimated_count=oJ*Yi(e.primaryStore)+1:n==="sort"?r.estimated_count=Yi(e.primaryStore)+1:r.estimated_count=iJ*Yi(e.primaryStore)+1;typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return a(t,"estimateConditionForTable"),t}function Fp(e){if(e)if(Qo=e,Gl.lastIndex=0,dJ.test(e))try{let t=of(new ql,"");if(cn!==Qo.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 ${cn} in '${Qo}'`,t}else return new URLSearchParams(e)}function of(e,t){let r=Gl,n,s,i,o,c,l=decodeURIComponent,u;for(;n=r.exec(Qo);){cn=r.lastIndex;let[,f,d]=n;if(o){if(f)throw new SyntaxError(`expected operator, but encountered '${f}'`);o=!1,c=!1}else c=!0;let h;switch(d){case"=":if(s!=null){if(f.length<=2)i=f;else throw new SyntaxError(`invalid FIQL operator ${f}`);l=fD}else{if(l=decodeURIComponent,i="equals",!f)throw new SyntaxError("attribute must be specified before equality comparator");s=af(f)}break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":if(i=cJ[d],l=mA[i]?fD:decodeURIComponent,!f)throw new SyntaxError(`attribute must be specified before comparator ${d}`);s=af(f);break;case"&=":case"|=":case"|":case"&":case"":case void 0:if(s==null){if(s===void 0)throw t?new SyntaxError(`expected '${t}', but encountered ${d[0]?"'"+d[0]+"'":"end of string"}}`):new SyntaxError(`no comparison specified before ${d?"'"+d+"'":"end of string"}`)}else{if(!e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");let p={comparator:i,attribute:s||null,value:l(f)};if(i==="eq"&&_D(p,f),s===""){let S=e.conditions[e.conditions.length-1];S.chainedConditions=S.chainedConditions||[],S.chainedConditions.push(p),S.operator=u}else Hp(e,u),e.conditions.push(p)}d==="&"?(u="and",s=void 0):d==="|"?(u="or",s=void 0):d==="&="?(u="and",s=""):d==="|="&&(u="or",s="");break;case",":if(e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");e.push(af(f)),s=void 0;break;case"(":Gl.lastIndex=cn;let _=of(f?[]:new ql,")");switch(f){case"":Hp(e,u),e.conditions.push(_);break;case"limit":switch(_.length){case 1:e.limit=+_[0];break;case 2:e.offset=+_[0],e.limit=_[1]-e.offset;break;default:throw new SyntaxError("limit must have 1 or 2 arguments")}break;case"select":Array.isArray(_[0])&&_.length===1&&!_[0].name?(e.select=_[0],e.select.asArray=!0):_.length===1?e.select=_[0]:_.length===2&&_[1]===""?e.select=_.slice(0,1):e.select=_;break;case"group-by":throw new SyntaxError("group by is not implemented yet");case"sort":e.sort=hD(_);break;default:throw new SyntaxError(`unknown query function call ${f}`)}Qo[cn]===","?r.lastIndex=++cn:o=!0,s=null;break;case"{":if(e.conditions)throw new SyntaxError("property sets are not allowed in a queries");if(!f)throw new SyntaxError("property sets must have a defined parent property name");Gl.lastIndex=cn,h=of([],"}"),h.name=f,e.push(h),Qo[cn]===","?r.lastIndex=++cn:o=!0;break;case"[":Gl.lastIndex=cn,f?(h=of(new ql,"]"),h.name=f):h=of(e.conditions?new ql:[],"]"),e.conditions?(Hp(e,u),e.conditions.push(h),s=null):e.push(h),Qo[cn]===","?r.lastIndex=++cn:o=!0;break;case")":case"]":case"}":if(t===d[0]){if(e.conditions){if(s){let p={comparator:i||"equals",attribute:s,value:l(f)};i==="eq"&&_D(p,f),Hp(e,u),e.conditions.push(p)}else if(f)throw new SyntaxError("no attribute or comparison specified")}else(f||e.length>0&&c)&&e.push(af(f));return e}else throw t?new SyntaxError(`expected '${t}', but encountered '${d[0]}'`):new SyntaxError(`unexpected token '${d[0]}'`);default:throw new SyntaxError(`unexpected operator '${d}'`)}if(t!==")"&&(r=s?fJ:Gl,r.lastIndex=cn),cn===Qo.length)return e}if(t)throw new SyntaxError(`expected '${t}', but encountered end of string`)}function Hp(e,t){if(e.conditions.length>0)if(e.operator){if(e.operator!==t)throw new SyntaxError("Can not mix operators within a condition grouping")}else e.operator=t}function af(e){return e.indexOf(".")>-1?e.split(".").map(af):decodeURIComponent(e)}function fD(e){if(e==="null")return null;if(e.indexOf(":")>-1){let[t,r]=e.split(":");if(t==="number")return r[0]==="$"?parseInt(r.slice(1),36):+r;if(t==="boolean")return r==="true";if(t==="date")return new Date(isNaN(r)?decodeURIComponent(r):+r);if(t==="string")return decodeURIComponent(r);throw new ln.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function _D(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new ln.ClientError("wildcard can only be used at the end of a string")}function hD(e){let t=pD(e[0]);return e.length>1&&(t.next=hD(e.slice(1))),t}function pD(e){if(Array.isArray(e)){let t=pD(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 Vl(e){return Array.isArray(e)?e.join("\0"):e}function Yi(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function _J(e,t,r){return t*r/Yi(e)}var ln,as,di,zo,iJ,oJ,aJ,cJ,mA,gA,dJ,Gl,fJ,cn,Qo,ql,nc,lf=be(()=>{ln=M(he()),as=M(vt()),di=require("ordered-binary"),zo=require("lmdb");uf();iJ=.3,oJ=.1,aJ=.05,cJ={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},mA={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};a(EA,"executeConditions");a($l,"searchByIndex");a(fi,"findAttribute");a(lJ,"joinTo");a(uJ,"joinFrom");gA={eq:"equals",greater_than:"gt",greaterThan:"gt",greater_than_equal:"ge",greaterThanEqual:"ge",less_than:"lt",lessThan:"lt",less_than_equal:"le",lessThanEqual:"le",not_equal:"ne",notEqual:"ne",equal:"equals",sw:"starts_with",startsWith:"starts_with",ew:"ends_with",endsWith:"ends_with",ct:"contains",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(cf,"filterByType");a(kp,"estimateCondition");dJ=/[()[\]|!<>.]|(=\w*=)/,Gl=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,fJ=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;a(Fp,"parseQuery");a(of,"parseBlock");a(Hp,"assignOperator");a(af,"decodeProperty");a(fD,"typedDecoding");a(_D,"wildcardDecoding");a(hD,"toSortObject");a(pD,"toSortEntry");ql=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(Vl,"flattenKey");a(Yi,"estimatedEntryCount");a(_J,"intersectionEstimate");nc=class{constructor(t){this.url=t}static{a(this,"SimpleURLQuery")}get(){}[Symbol.iterator](){return[][Symbol.iterator]()}}});var TA={};ve(TA,{MultiPartId:()=>qp,Resource:()=>Fr,snake_case:()=>pJ,transformForSelect:()=>$p});function pJ(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function mD(e,t){if(sc=!1,e==="")return null;if(e=e.slice(1),t.splitSegments){if(e.indexOf("/")===-1)return e===""?(sc=!0,null):t.coerceId(decodeURIComponent(e));let r=e.split("/"),n=new qp;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){sc=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}else{if(e==="")return sc=!0,null;e[e.length-1]==="/"&&(sc=!0)}return t.coerceId(decodeURIComponent(e))}function Ln(e,t){n.reliesOnPrototype=!0;let r=t.hasContent;return n;function n(s,i,o){let c,l,u,f;if(r?(o?(f=i,o=o.getContext?.()||o):i?typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(f=s,c=f[this.primaryKey]??null,o=i.getContext?.()||i):f=i:(f=s,s=void 0,c=f.getId?.()??f[this.primaryKey]),c===null&&(u=!0)):i?o=i.getContext?.()||i:s&&typeof s=="object"&&!Array.isArray(s)&&(o=s),c===void 0)if(typeof s=="object"&&s){if(l=s,typeof(c=s.url)=="string")if(this.directURLMapping)c=c.slice(1);else{let _=c.indexOf("?");if(_>-1){let S=this.parseQuery(c.slice(_+1));l?S&&(l=Object.assign(S,l)):l=S,c=c.slice(0,_)}let p=this.parsePath(c,o,l);p?.id!==void 0?(p.query&&(l?l=Object.assign(p.query,l):l=p.query),u=p.isCollection,c=p.id):c=p}else if(s[Symbol.iterator]){c=[],u=!0;for(let _ of s){if(typeof _=="object"&&_)break;c.push(_)}c.length===0?c=null:(c.length===1&&(c=c[0]),l.slice&&(l=l.slice(c.length,l.length),l.length===0&&(l=null,u=!1)))}c===void 0&&(c=s.id??null,c==null&&(u=!0))}else c=s,l=new nc(c),c==null&&(u=!0);o||(o={});let d;if(l?.ensureLoaded!=null||l?.async||u?(d={...t},l?.ensureLoaded!=null&&(d.ensureLoaded=l.ensureLoaded),l?.async&&(d.async=l.async),u&&(d.isCollection=!0)):d=t,o.transaction){let _=this.getResource(c,o,d);return _.then?_.then(h):h(_)}else return bt(o,()=>{let _=this.getResource(c,o,d);return _.then?_.then(h):h(_)},d);function h(_){if(o.authorize){o.authorize=!1;let p=t.type==="read"?_.allowRead(o.user,l,o):t.type==="update"?_.doesExist?.()===!1?_.allowCreate(o.user,f,o):_.allowUpdate(o.user,f,o):t.type==="create"?_.allowCreate(o.user,f,o):_.allowDelete(o.user,l,o);if(p?.then)return p.then(S=>{if(!S)throw new Gp(o.user);return typeof f?.then=="function"?f.then(g=>e(_,l,o,g)):e(_,l,o,f)});if(!p)throw new Gp(o.user)}return typeof f?.then=="function"?f.then(p=>e(_,l,o,p)):e(_,l,o,f)}a(h,"authorizeActionOnResource")}}function Mn(e,t){let r=new SD.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 SA(e,t,r){let n=e.getRecord?.();if(n){let s=e.getChanges?.();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 $p(e,t){let r=t.propertyResolvers,n=t.getContext?.(),s;if(typeof e=="string")return a(function o(c){return c.then?c.then(o):Array.isArray(c)?c.map(o):SA(c,r,n)(e)},"transform");if(typeof e=="object"){if(e.asArray)return a(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(c);let u=[],f=i(SA(l,r,n));for(let d of e)u.push(f(d));return u},"transform");let o=e.forceNulls;return a(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(h=>h&&typeof h=="object"?c(h):h);let u={},f=i(SA(l,r,n)),d;for(let h of e){let _=f(h);_===void 0&&o&&(_=null),_?.then?(d||(d=[]),d.push(_.then(p=>u[h.name||h]=p))):u[h.name||h]=_}return d?Promise.all(d).then(()=>u):u},"transform")}else throw new Error("Invalid select argument type "+typeof e);function i(o){return c=>{if(typeof c=="string")return o(c);if(typeof c=="object")if(c.name){s||(s={});let l=s[c.name];if(!l){let f=r[c.name]?.definition?.tableClass;l=s[c.name]=$p(c.select||c,f)}let u=o(c.name);return l(u)}else return o(c);else return c}}a(i,"handleProperty")}var ED,gD,SD,hJ,Fr,Gp,sc,qp,Jo=be(()=>{ED=require("crypto");Fl();gD=M(ci()),SD=M(he());rc();lf();hJ={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Fr=class{static{a(this,"Resource")}#e;#t;#n;static transactions;static directURLMapping=!1;constructor(t,r){this.#e=t;let n=r?.getContext?r.getContext()??null:void 0;this.#t=n!==void 0?n:r||null}static get=Ln(function(t,r,n,s){let i=t.get?.(r);if(i?.then)return i.then(o);return o(i);function o(c){let l;if((l=r?.select)&&c!=null&&!c.selectApplied){let u=$p(l,t.constructor);return typeof c?.map=="function"?c.map(u):u(c)}return c}},{type:"read",letItLinger:!0,ensureLoaded:!0,async:!0});static put=Ln(function(t,r,n,s){if(Array.isArray(s)&&t.#n){let i=[],o=n.authorize;for(let c of s){let l=t.constructor,u=l.getResource(c[l.primaryKey],n,{async:!0});u.then?i.push(u.then(f=>f.put(c,n))):i.push(u.put(c,n))}return Promise.all(i)}return t.put?t.put(s,r):Mn(t,"put")},{hasContent:!0,type:"update"});static patch=Ln(function(t,r,n,s){return t.patch?t.patch(s,r):Mn(t,"patch")},{hasContent:!0,type:"update"});static delete=Ln(function(t,r,n,s){return t.delete?t.delete(r):Mn(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,ED.randomUUID)()}static create(t,r,n){let s;return t==null?s=r?.[this.primaryKey]??this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?s=r?.[this.primaryKey]??[...t,this.getNewId()]:typeof t!="object"?s=r?.[this.primaryKey]??[t,this.getNewId()]:(s=t?.[this.primaryKey]??this.getNewId(),n=r||{},r=t),n||(n={}),bt(n,()=>{let i=new this(s,n),o=i.update?i.update(r,!0):Mn(i,"update");return n.newLocation=s,n.createdResource=!0,o?.then?o.then(()=>i):i})}static invalidate=Ln(function(t,r,n,s){return t.invalidate?t.invalidate(r):Mn(t,"delete")},{hasContent:!1,type:"update"});static post=Ln(function(t,r,n,s){return t.#e!=null&&t.update?.(),t.post(s,r)},{hasContent:!0,type:"create"});static connect=Ln(function(t,r,n,s){return t.connect?t.connect(s,r):Mn(t,"connect")},{hasContent:!0,type:"read"});static subscribe=Ln(function(t,r,n,s){return t.subscribe?t.subscribe(r):Mn(t,"subscribe")},{type:"read"});static publish=Ln(function(t,r,n,s){return t.#e!=null&&t.update?.(),t.publish?t.publish(s,r):Mn(t,"publish")},{hasContent:!0,type:"create"});static search=Ln(function(t,r,n,s){let i=t.search?t.search(r):Mn(t,"search"),o=n.select;if(o&&n.hasOwnProperty("select")&&i!=null&&!i.selectApplied){let c=$p(o,t.constructor);return i.map(c)}return i},{type:"read"});static query=Ln(function(t,r,n,s){return t.search?t.search(s,r):Mn(t,"search")},{hasContent:!0,type:"read"});static copy=Ln(function(t,r,n,s){return t.copy?t.copy(s,r):Mn(t,"copy")},{hasContent:!0,type:"create"});static move=Ln(function(t,r,n,s){return t.move?t.move(s,r):Mn(t,"move")},{hasContent:!0,type:"delete"});async post(t){if(this.#n)return(await this.constructor.create(this.#e,t,this.#t)).#e;Mn(this,"post")}static isCollection(t){return t&&t.#n}get isCollection(){return this.#n}static coerceId(t){return t}static parseQuery(t){return Fp(t)}static parsePath(t,r,n){let s=t.indexOf(".");if(s>-1){let o=t.slice(s+1),c=r?.headers&&hJ[o];if(c)r.requestedContentType=c,t=t.slice(0,s);else if(this.attributes?.find(l=>l.name===o))if(t=t.slice(0,s),n)n.property=o;else return{query:{property:o},id:mD(t,this),isCollection:sc}}let i=mD(t,this);return sc?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r.getContext?.(),o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=n?.isCollection;let c=o&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let l;if(i.resourceCache?l=i.resourceCache:l=i.resourceCache=[],l.asMap){let u=l.asMap.get(t);if(s=u?.find(f=>f.constructor===c),s)return s;u||l.asMap.set(t,u=[]),u.push(s=new c(t,i))}else{if(s=l.find(u=>u.#e===t&&u.constructor===c),s)return s;if(l.push(s=new c(t,i)),l.length>10){let u=new Map;for(let f of l){let d=f.#e,h=u.get(d);h?h.push(f):u.set(d,[f])}i.resourceCache.length=0,i.resourceCache.asMap=u}}}else s=new c(t,i);return o&&(s.#n=!0),s}subscribe(t){return new Pn}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new Pn}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.#e}getContext(){return this.#t}};(0,gD._assignPackageExport)("Resource",Fr);a(pJ,"snake_case");Gp=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(mD,"pathToId");qp=class extends Array{static{a(this,"MultiPartId")}toString(){return this.join("/")}};a(Ln,"transactional");a(Mn,"missingMethod");a(SA,"selectFromObject");a($p,"transformForSelect")});var Xo,AA=be(()=>{Xo=class{constructor(t){this.error=t}static{a(this,"ErrorResource")}isError=!0;allowRead(){throw this.error}allowUpdate(){throw this.error}allowCreate(){throw this.error}allowDelete(){throw this.error}getId(){throw this.error}getContext(){throw this.error}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 RD={};ve(RD,{Resources:()=>Vp,keyArrayToString:()=>Kl,resetResources:()=>mJ,resources:()=>_i});function mJ(){return _i=new Vp}function Kl(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var TD,AD,Vp,_i,Yl=be(()=>{rc();AA();TD=M(j()),AD=M(he()),Vp=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,exportTypes:n,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!s){let c=new AD.ServerError(`Conflicting paths for ${t}`);TD.default.error(c),i.Resource=new Xo(c)}super.set(t,i);for(let[c,l]of this){let u=2;for(;(u=c.indexOf("/",u))>-1;){let f=this.get(c.slice(0,u));f&&(f.hasSubPaths=!0),u+=2}}}getMatch(t,r){let n=2,s=0,i,o=t.length;for(;n<o;){s=n,n=t.indexOf("/",n),n===-1&&(n=o);let u=n===o?t:t.slice(0,n),f=this.get(u),d=-1;if(!f&&n===o&&(d=u.indexOf("?",s),d!==-1)){let h=u.slice(0,d);f=this.get(h)}if(f&&(!r||f.exportTypes?.[r]!==!1)){if(f.relativeURL=t.slice(d!==-1?d:n),!f.hasSubPaths)return f;i=f}n+=2}if(i)return i;let c=t.indexOf("?"),l=c>-1?t.slice(0,c):t;return i=this.get(l),!i&&l.indexOf(".")>-1&&(i=this.get(l.split(".")[0])),i&&(!r||i.exportTypes?.[r]!==!1)?i.relativeURL=c>-1?t.slice(c):"":i||(i=this.get(""),i&&(!r||i.exportTypes?.[r]!==!1)&&(t.charAt(0)!=="/"&&(t="/"+t),i.relativeURL=t)),i}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 bt(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};a(mJ,"resetResources");a(Kl,"keyArrayToString")});var Wl={};ve(Wl,{server:()=>Ye});var yD,Ye,Gr=be(()=>{yD=M(ci()),Ye={};(0,yD._assignPackageExport)("server",Ye)});var bA={};ve(bA,{loadGQLSchema:()=>SJ,start:()=>yA,startOnMainThread:()=>gJ});function yA({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:l,NamedTypeNode:u,StringValueNode:f}=await import("graphql"),d=o(new c(r.toString(),s)),h=new Map,_=[],p;for(let R of d.definitions)switch(R.kind){case l.OBJECT_TYPE_DEFINITION:let F=function(Y){if(Y.kind==="NonNullType"){let X=F(Y.type);return X.nullable=!1,X}if(Y.kind==="ListType")return{type:"array",elements:F(Y.type)};let se={type:Y.name?.value};return Object.defineProperty(se,"location",{value:Y.loc.startToken}),se};a(F,"getProperty");let E=R.name.value,A=[],O={table:null,database:null,properties:A};h.set(E,O);for(let Y of R.directives){if(Y.name.value==="table"){for(let se of Y.arguments)O[se.name.value]=se.value.value;O.schema&&(O.database=O.schema),O.table||(O.table=E),O.audit&&(O.audit=O.audit!=="false"),O.attributes=O.properties,_.push(O)}if(Y.name.value==="sealed"&&(O.sealed=!0),Y.name.value==="splitSegments"&&(O.splitSegments=!0),Y.name.value==="replicate"&&(O.replicate=!0),Y.name.value==="export"){O.export=!0;for(let se of Y.arguments)typeof O.export!="object"&&(O.export={}),O.export[se.name.value]=se.value.value}}let v=!1,G={};for(let Y of R.fields){let te=F(Y.type);te.name=Y.name.value,A.push(te),G[te.name]=void 0;for(let se of Y.directives){let X=se.name.value;if(X==="primaryKey")v?console.warn("Can not define two attributes as a primary key at",se.loc):(te.isPrimaryKey=!0,v=!0);else if(X==="indexed")te.indexed=!0;else if(X==="computed"){for(let ne of se.arguments||[])if(ne.name.value==="from"){let Q=ne.value.value;te.computed={from:g(Q,ne,G)},te.version==null&&(te.version=Q)}else ne.name.value==="version"&&(te.version=ne.value.value);te.computed=te.computed||!0}else if(X==="relationship"){let ne={};for(let Q of se.arguments)ne[Q.name.value]=Q.value.value;te.relationship=ne}else if(X==="createdTime")te.assignCreatedTime=!0;else if(X==="updatedTime")te.assignUpdatedTime=!0;else if(X==="expiresAt")te.expiresAt=!0;else if(X==="allow"){let ne=te.authorizedRoles=[];for(let Q of se.arguments)Q.name.value==="role"&&ne.push(Q.value.value)}else server.knownGraphQLDirectives.includes(X)&&console.warn(`@${X} is an unknown directive, at`,se.loc)}}O.type=E,E==="Query"&&(p=O)}function S(R){let E=h.get(R.type);E?(Object.defineProperty(R,"properties",{value:E.properties}),Object.defineProperty(R,"definition",{value:E})):R.type==="array"?S(R.elements):EJ.includes(R.type)||(0,OD.getWorkerIndex)()===0&&console.error(`The type ${R.type} is unknown at line ${R.location.line}, column ${R.location.column}, in ${s}`)}a(S,"connectPropertyType");for(let R of h.values())for(let E of R.properties)S(E);for(let R of _)R.tableClass=e(R),R.export&&(R.export.name===""?i.set((0,RA.dirname)(n),R.tableClass):i.set((0,RA.dirname)(n)+"/"+(R.export.name||R.type),R.tableClass,R.export));function g(R,E,A){return new bD.Script(`function computed(attributes) { return function(record) { with(attributes) { with (record) { return ${R}; } } } } computed;`,{filename:s,lineOffset:E.loc.startToken.line-1,columnOffset:E.loc.startToken.column}).runInThisContext()(A)}a(g,"createComputedFrom")}}var RA,bD,OD,EJ,gJ,SJ,ND=be(()=>{RA=require("path"),bD=require("node:vm");Me();OD=M(rt()),EJ=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt","Blob"];server.knownGraphQLDirectives&&(server.knownGraphQLDirectives=["table","sealed","export","primaryKey","indexed","computed","relationship","createdTime","updatedTime","expiresAt","allow"]);a(yA,"start");gJ=yA,SJ=yA({ensureTable:ut}).handleFile});var MD={};ve(MD,{parse:()=>NA,streamAsJSON:()=>df,stringify:()=>ic});function df(e){return new OA({value:e})}function wD(e){return console.error(e),JSON.stringify(e.toString())}function ID(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function ic(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===DD)return LD(e);if(t.resolution)return t.resolution.then(()=>ic(e));throw t}}function LD(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+=LD(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+ic(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function NA(e){return e?.length>0?(typeof e!="string"&&(e=e.toString()),RJ.test(e)?TJ.parse(e):JSON.parse(e)):null}var CD,PD,TJ,AJ,DD,OA,RJ,wA=be(()=>{CD=require("stream"),PD=M(require("json-bigint-fixes")),TJ=(0,PD.default)({useNativeBigInt:!0}),AJ=1e4,DD={message:"Cannot serialize BigInt to JSON"};BigInt.prototype.toJSON=function(){throw DD};a(df,"streamAsJSON");OA=class extends CD.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(;;){try{o=i.next(),o.then&&(yield o.then(c=>(o=c,""),c=>(o={done:!1,value:{error:c.toString()}},i={next:a(()=>({done:!0}),"next")},"")))}catch(c){o={done:!1,value:{error:c.toString()}},i={next:a(()=>({done:!0}),"next")}}if(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),wD)}catch(s){yield wD(s)}else yield ic(t)}else yield ic(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);ID(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>AJ?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 ID(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(wD,"handleError");a(ID,"when");a(ic,"stringify");a(LD,"jsStringify");RJ=/[[,:]\s*-?\d{16,}/;a(NA,"parse")});var hi=I(Yp=>{var Kp=j();for(let e of["trace","debug","info","warn","error","fatal","notify"])Kp.logsAtLevel(e)&&(Yp[e]=Kp[e]);Yp.loggerWithTag=e=>Kp.loggerWithTag(e,!0);Yp.setLogLevel=Kp.setLogLevel});var GD={};ve(GD,{asyncSerialization:()=>LA,contentTypes:()=>DA,findBestSerializer:()=>zp,getDeserializer:()=>Qi,hasAsyncSerialization:()=>MA,registerContentHandlers:()=>hf,serialize:()=>pf,serializeMessage:()=>Zo,toCsvStream:()=>Wp});function bJ(e){try{return e?.[0]===123?PA(e):e}catch{return e}}function hf(e){e.register(NJ,{serializers:[{regex:/^application\/json$/,serializer:df},{regex:/^application\/cbor$/,serializer:a(function(t){return new oc.EncoderStream(_f).end(t)},"serializer")},{regex:/^application\/(x-)?msgpack$/,serializer:a(function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?ac.Readable.from((0,pi.encodeIter)(t,_f)):(0,pi.pack)(t)},"serializer")},{regex:/^text\/csv$/,serializer:a(function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),Wp(t)},"serializer")}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,pi.unpack)(r))}catch(s){s.statusCode=400,n(s)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,oc.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function zp(e){let t=e.headers.asObject||e.headers,r=e.requestedContentType??t.accept,n,s=0,i,o,c=r?r.toLowerCase().split(/\s*,\s*/):[];for(let l of c){let[u,...f]=l.split(/\s*;\s*/),d=1,h={q:1};for(let p of f){let S=p.indexOf("=");h[p.substring(0,S)]=p.substring(S+1)}d=+h.q;let _=qr.get(u);if(_){let p=(_.q||1)*d;p>s&&(n=_,i=_.type||u,s=p,o=h)}}if(!n){if(r)throw new xD.ClientError("No supported content types found in Accept header, supported types include: "+Array.from(qr.keys()).join(", "),406);n=qr.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:o}}function pf(e,t,r){let n=UD&&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||e instanceof mi)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),s=e;else{let i=zp(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&&(e[Symbol.iterator]||e[Symbol.asyncIterator])&&i.serializer.serializeStream){if(e.mapError){let c=e.getColumns;e=e.mapError(l=>(l.toJSON=()=>({error:l.name,message:l.message,...l.partialObject}),CA.default.warn?.(`Error serializing error ${t?.url||t}: ${l}`),l)),e.getColumns=c}let o=i.serializer.serializeStream(e,r);return n&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,zi.createBrotliCompress)({params:{[zi.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?zi.constants.BROTLI_MODE_TEXT:zi.constants.BROTLI_MODE_GENERIC,[zi.constants.BROTLI_PARAM_QUALITY]:2}}))),o}s=i.serializer.serialize(e,r)}return n&&s?.length>UD?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,zi.brotliCompress)(s,(c,l)=>{c?o(c):i(l)}))):s}function Zo(e,t,r){if(e?.contentType!=null&&e.data!=null)return e.data;Wi=r?void 0:[];try{let n;if(t){let s=t.serialize;if(s)n=s(e);else{let i=zp(t);s=t.serialize=i.serializer.serialize,n=s(e)}}else n=ff(e);return Wi?.length>0?(Wi.length===1?Wi[0]:Promise.all(Wi)).then(()=>Zo(e,t,!0)):n}finally{Wi=void 0}}function LA(e){if(Wi)Wi.push(e);else throw new Error("Unable to serialize asynchronously")}function MA(){return!!Wi}function wJ(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 CJ(e){return IJ.includes(e)}function PJ(e){let t=e.indexOf(";"),r;if(t>-1){r={};let n=e.slice(t+1).split(";");for(let s of n){let[i,o]=s.split("=");r[i.trim()]=o.trim()}e=e.slice(0,t)}return{type:e,parameters:r}}function Qi(e="",t=!1){let r=PJ(e),n=r.type&&qr.get(r.type)?.deserialize||DJ(r);return t?s=>wJ(s).then(n):n}function DJ(e){return e.type.startsWith("text/")?(e.parameters?.charset&&!CJ(e.parameters.charset)&&CA.default.info(`Unknown Buffer encoding ${e.parameters.charset} in content-type. Proceeding anyways.`),t=>({contentType:e.type,data:t.toString(e.parameters?.charset||"utf-8")})):e.type==="application/octet-stream"?t=>t:t=>{if(e.type==="")try{if(t?.[0]===123)return PA(t)}catch{}return{contentType:e.type||"application/octet-stream",data:t}}}function LJ(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)}}}}}function Wp(e,t){let r=ac.default.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),n={};t&&(n.fields=t.map(o=>({label:o,value:o})));let s={objectMode:!0},i=new yJ(n,s);return r.pipe(i)}var pi,oc,zi,xD,ac,BD,IA,HD,CA,yJ,kD,ff,PA,_f,qr,DA,vD,FD,OJ,NJ,UD,Wi,IJ,ji=be(()=>{wA();pi=require("msgpackr"),oc=require("cbor-x"),zi=require("zlib"),xD=M(he()),ac=M(require("stream"));Gr();BD=M(ci()),IA=M(ce());H();HD=M(require("yaml")),CA=M(hi());cs();({Transform:yJ}=require("json2csv")),kD=IA.default.get(B.SERIALIZATION_BIGINT)!==!1,ff=kD?ic:JSON.stringify,PA=kD?NA:JSON.parse,_f={useRecords:!1,useToJSON:!0},qr=new Map,DA=qr;Ye.contentTypes=DA;(0,BD._assignPackageExport)("contentTypes",DA);qr.set("application/json",{serializeStream:df,serialize:ff,deserialize(e){return PA(e)},q:.8});vD=new oc.Encoder(_f);qr.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new oc.EncoderStream(_f).end(e)},serialize:vD.encode,deserialize:vD.decode,q:1});qr.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?ac.Readable.from((0,pi.encodeIter)(e,_f)):(0,pi.pack)(e)},serialize:pi.pack,deserialize:pi.unpack,q:.9});qr.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),Wp(e,e?.getColumns?.())},serialize(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),e&&!e[Symbol.iterator]&&(e=[e.toJSON?e.toJSON():e]),Wp(e,e?.getColumns?.())},q:.1});qr.set("text/plain",{serialize(e){return e.toString()},serializeStream(e){return ac.Readable.from(e.map?e.map(t=>t.toString()):e)},deserialize(e){return e.toString()},q:.2});qr.set("text/yaml",{serialize(e){return HD.stringify(e,{aliasDuplicateObjects:!1})},q:.7});qr.set("text/event-stream",{serializeStream:a(function(e){return ac.Readable.from(LJ(e,this.serialize))},"serializeStream"),serialize:a(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+`
8
+ `),e.data){let r=e.data;typeof r=="object"&&(r=ff(r)),t+="data: "+r+`
9
9
  `}return e.id&&(t+="id: "+e.id+`
10
10
  `),e.retry&&(t+="retry: "+e.retry+`
11
11
  `),t+`
12
- `}else return typeof e=="object"?`data: ${cf(e)}
12
+ `}else return typeof e=="object"?`data: ${ff(e)}
13
13
 
14
14
  `:`data: ${e}
15
15
 
16
- `},"serialize"),compressible:!1,q:.8});Vr.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()}});AD={type:"application/json",serializeStream:af,serialize:cf,deserialize:$j,q:.5};Vr.set("*/*",AD);Vr.set("",AD);a($j,"tryJSONParse");a(EA,"registerContentHandlers");Vj=require("fastify-plugin"),Kj=Vj(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=Hp(n.raw);s.type(c),s.serializer(function(l){let u;if(typeof l=="object"&&l&&(l[Symbol.iterator]||l[Symbol.asyncIterator])&&o.serializeStream){if(l.mapError){let f=l.getColumns;l=l.mapError(d=>(d.toJSON=()=>({error:d.name,message:d.message,...d.partialObject}),d)),l.getColumns=f}u=o.serializeStream}else u=o.serialize;return u(l,{headers:{set:a((f,d)=>{s.header(f,d)},"set")}})})}),r()},{name:"content-type-negotiation"});a(Hp,"findBestSerializer");ED=fA.default.get(B.HTTP_COMPRESSIONTHRESHOLD);a(uf,"serialize");a(sa,"serializeMessage");a(mA,"asyncSerialization");a(Yj,"streamToBuffer");Wj=["ascii","utf8","utf-8","utf16le","utf-16le","ucs2","ucs-2","base64","base64url","latin1","binary","hex"];a(zj,"isBufferEncoding");a(Qj,"parseContentType");a(Ji,"getDeserializer");a(jj,"deserializerUnknownType");a(Jj,"transformIterable");a(Bp,"toCsvStream")});var TA={};Be(TA,{start:()=>oJ});function Xj(e){if(e.kind!==Ce.Kind.OPERATION_DEFINITION&&e.kind!==Ce.Kind.FRAGMENT_DEFINITION)throw new br(`Unexpected non-executable definition type ${e.kind}.`)}function RD(e){if(typeof e!="object"||e===null)throw new gi("Request body must be an object.");if(!("query"in e))throw new gi("Request body must contain a `query` field.");if(typeof e.query!="string")throw new gi("Request body `query` field must be a string.");if("variables"in e&&(typeof e.variables!="object"||e.variables===null))throw new gi("Request body `variables` field must be an object.");if("operationName"in e&&typeof e.operationName!="string")throw new gi("Request body `operationName` field must be a string.")}function SA(e){return parseInt(e.value,10)}function bD(e){return parseFloat(e.value)}function OD(e,t,r){let n=r.get(e.name.value);return ND(n)?wD(n,t):{attribute:t,value:n}}function ND(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function wD(e,t){return t=typeof t=="string"?[t]:t,Object.entries(e).flatMap(([r,n])=>(t=[...t,r],ND(n)?wD(n,t):{attribute:t,value:n}))}function Zj(e,t,r){switch(t=[...t,e.name.value],e.value.kind){case Ce.Kind.NULL:return{attribute:t,value:null};case Ce.Kind.INT:return{attribute:t,value:SA(e.value)};case Ce.Kind.FLOAT:return{attribute:t,value:bD(e.value)};case Ce.Kind.BOOLEAN:case Ce.Kind.STRING:return{attribute:t,value:e.value.value};case Ce.Kind.VARIABLE:return OD(e.value,t,r);case Ce.Kind.OBJECT:return ID(e.value,t,r);case Ce.Kind.LIST:case Ce.Kind.ENUM:default:throw new br(`Value type, ${e.value.kind}, is not supported.`)}}function ID(e,t,r){return e.fields.flatMap(n=>Zj(n,t,r))}function eJ(e,t){switch(e.value.kind){case Ce.Kind.NULL:return{attribute:e.name.value,value:null};case Ce.Kind.INT:return{attribute:e.name.value,value:SA(e.value)};case Ce.Kind.FLOAT:return{attribute:e.name.value,value:bD(e.value)};case Ce.Kind.BOOLEAN:case Ce.Kind.STRING:return{attribute:e.name.value,value:e.value.value};case Ce.Kind.VARIABLE:return OD(e.value,e.name.value,t);case Ce.Kind.OBJECT:return ID(e.value,[e.name.value],t);case Ce.Kind.LIST:case Ce.Kind.ENUM:default:throw new br(`Argument type, ${e.value.kind}, is not supported.`)}}function tJ(e,t){return e.flatMap(r=>eJ(r,t))}function kp(e,t){return e.selections.flatMap(r=>{switch(r.kind){case Ce.Kind.FIELD:return r;case Ce.Kind.FRAGMENT_SPREAD:{let n=r.name.value,s=t.get(n);if(s==null)throw new br(`Fragment \`${n}\` not found.`);return kp(s.selectionSet,t)}case Ce.Kind.INLINE_FRAGMENT:return kp(r.selectionSet,t)}})}function CD(e,t){return kp(e,t).map(r=>r.selectionSet?.selections.length>0?{name:r.name.value,select:CD(r.selectionSet,t)}:r.name.value)}async function rJ(e,t,r,n){let s=pi.getMatch(e.name.value,"graphql");if(s===void 0)throw new br(`Resource \`${e.name.value}\` not found.`);let i=s.Resource,o={select:CD(e.selectionSet,r),conditions:tJ(e.arguments,t)},c=[];n.authorize=!0;for await(let l of i.search(o,n))c.push(l);return[e.name.value,c]}function PD(e){switch(e.kind){case Ce.Kind.NULL:return null;case Ce.Kind.INT:return SA(e);case Ce.Kind.FLOAT:return parseFloat(e.value);case Ce.Kind.STRING:case Ce.Kind.BOOLEAN:return e.value;case Ce.Kind.OBJECT:return e.fields.reduce((t,r)=>({[r.name.value]:PD(r.value),...t}),{});case Ce.Kind.LIST:case Ce.Kind.ENUM:default:throw new br(`Value type, ${e.kind}, is not supported.`)}}function nJ(e,t){let r=new Map;for(let n of e){let s=n.variable.name.value,i=t?.[s];if(i===void 0&&n.defaultValue!==void 0&&(i=PD(n.defaultValue)),n.type.kind===Ce.Kind.NON_NULL_TYPE&&!(s in t)&&i===void 0)throw new br(`Variable $${s} is required, but not provided.`);r.set(n.variable.name.value,i??null)}return r}async function sJ(e,t,r,n){if(e.operation===Ce.OperationTypeNode.SUBSCRIPTION)throw new br("Subscriptions are not supported.");if(e.operation===Ce.OperationTypeNode.MUTATION)throw new br("Mutations are not supported yet.");let s=nJ(e.variableDefinitions,t),i=await Promise.all(kp(e.selectionSet,r).map(c=>rJ(c,s,r,n))),o={data:{}};for(let[c,l]of i)o.data[c]=l;return o}async function yD({query:e,variables:t={},operationName:r},n){let s=Ce.parse(e),i=new Map,o=new Map;for(let u of s.definitions)if(Xj(u),u.kind===Ce.Kind.FRAGMENT_DEFINITION)o.set(u.name.value,u);else{if(u.name===void 0&&s.definitions.length>1)throw new br("Unnamed operations are only allowed when there is a single operation in the document.");let f=u.name?.value??"Unnamed Query";if(i.has(f))throw new br(`Duplicate operation definition: ${f}`);i.set(f,u)}let c;if(r==null)if(i.size===1)c=i.entries().next().value[1];else throw new br("Operation name is required when there are multiple operations in the document.");else if(c=i.get(r),c==null)throw new br(`Operation \`${r}\` not found.`);let l=await sJ(c,t,o,n);return{status:200,headers:{"Content-Type":"application/graphql-response+json; charset=utf-8"},body:JSON.stringify(l)}}async function iJ(e){switch(e.method){case"GET":{let t=new URLSearchParams(e.url.split("?")[1]),r={};for(let[n,s]of t)r[n]=n==="variables"||n==="extensions"?JSON.parse(s):s;return RD(r),yD(r,e)}case"POST":{let r=await Ji(e.headers.get("content-type"),!0)(e._nodeRequest);return RD(r),yD(r,e)}default:throw new gi("Method Not Allowed",405,{Allow:"GET, POST"})}}function oJ(e){e.server.http(async(t,r)=>{if(!t.url.startsWith("/graphql"))return r(t);try{return await iJ(t)}catch(n){logger.error(n);let s=t.headers.get("accept")??"application/graphql-response+json";switch(s){case"application/json":{if(n instanceof gi)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json",...n.headers}};if(n instanceof Ce.GraphQLError)return{status:200,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/json"}};if(n instanceof br)return{status:200,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json"}};if(n instanceof Error)return{status:500,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json"}};break}default:logger.info(`Unsupported accept header, ${s}, defaulting to application/graphql-response+json`);case"application/graphql-response+json":{if(n instanceof gi)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json",...n.headers}};if(n instanceof Ce.GraphQLError)return{status:400,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof br)return{status:400,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof Error)return{status:500,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json"}};break}}throw n}})}var Ce,br,gi,DD=be(()=>{Ce=U(require("graphql"));Xi();Gl();a(Xj,"assertExecutableDefinitionNode");a(RD,"assertRequestParams");a(SA,"processIntValueNode");a(bD,"processFloatValueNode");a(OD,"processVariableNode");a(ND,"isObject");a(wD,"transformObjectIntoQueryCondition");a(Zj,"processObjectFieldNode");a(ID,"processObjectValueNode");a(eJ,"processArgumentNode");a(tJ,"buildConditionsQuery");a(kp,"fillInFragments");a(CD,"buildSelectQuery");a(rJ,"processFieldNode");a(PD,"processConstValueNode");a(nJ,"resolveVariables");a(sJ,"executeOperation");a(yD,"resolver");br=class extends Error{static{a(this,"GraphQLQueryingError")}},gi=class extends Error{static{a(this,"HTTPError")}statusCode;headers;constructor(t,r=400,n={}){super(t),this.statusCode=r,this.headers=n}};a(iJ,"graphqlQueryingHandler");a(oJ,"start")});var Ti=P((DAe,vD)=>{"use strict";var MD=ae(),LD=(H(),D(q)),ql=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Si=require("joi"),ia={schema_format:{pattern:ql,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},aJ=Si.alternatives(Si.string().min(1).max(ia.schema_length.maximum).pattern(ql).messages({"string.pattern.base":"{:#label} "+ia.schema_format.message}),Si.number(),Si.array()).required(),cJ=Si.alternatives(Si.string().min(1).max(ia.schema_length.maximum).pattern(ql).messages({"string.pattern.base":"{:#label} "+ia.schema_format.message}),Si.number()),lJ=Si.alternatives(Si.string().min(1).max(ia.schema_length.maximum).pattern(ql).messages({"string.pattern.base":"{:#label} "+ia.schema_format.message}),Si.number()).required();function uJ(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>ia.schema_length.maximum?`'${e}' maximum of 250 characters`:ql.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(uJ,"checkValidTable");function dJ(e,t){return MD.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(dJ,"validateSchemaExists");function fJ(e,t){let r=t.state.ancestors[0].schema;return MD.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(fJ,"validateTableExists");function _J(e,t){return e.toLowerCase()===LD.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${LD.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(_J,"validateSchemaName");vD.exports={common_validators:ia,schema_regex:ql,hdb_schema_table:aJ,validateSchemaExists:dJ,validateTableExists:fJ,validateSchemaName:_J,checkValidTable:uJ,hdb_database:cJ,hdb_table:lJ}});var pt=P((MAe,UD)=>{"use strict";var un=require("validate.js");un.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||un.validators.type.checks[t](e)?null:` must be a '${t}' value`};un.validators.type.checks={Object:a(function(e){return un.isObject(e)&&!un.isArray(e)},"Object"),Array:un.isArray,Integer:un.isInteger,Number:un.isNumber,String:un.isString,Date:un.isDate,Boolean:a(function(e){return typeof e=="boolean"},"Boolean")};un.validators.hasValidFileExt=function(e,t){return un.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};UD.exports={validateObject:hJ,validateObjectAsync:pJ,validateBySchema:EJ};function hJ(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=un(e,t,{format:"flat"});return r?new Error(r):null}a(hJ,"validateObject");async function pJ(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await un.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(pJ,"validateObjectAsync");function EJ(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(EJ,"validateBySchema")});var RA=P((UAe,BD)=>{var{hdb_table:mJ,hdb_database:xD}=Ti(),gJ=pt(),AA=require("joi"),SJ={undefined:"undefined",null:"null"},TJ=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||SJ[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"),AJ=AA.object({database:xD,schema:xD,table:mJ,records:AA.array().items(AA.object().custom(TJ)).required()});BD.exports=function(e){return gJ.validateBySchema(e,AJ)}});var kD=P((BAe,HD)=>{"use strict";var yA=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")}};HD.exports=yA});var GD=P((kAe,FD)=>{"use strict";var bA=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};FD.exports=bA});var KD={};Be(KD,{HAS_EXPIRATION:()=>$p,HAS_RESIDENCY_ID:()=>DA,HAS_STRUCTURE_UPDATE:()=>Yp,LAST_TIMESTAMP_PLACEHOLDER:()=>hf,LOCAL_TIMESTAMP:()=>RJ,METADATA:()=>df,NO_TIMESTAMP:()=>OA,PENDING_LOCAL_TIME:()=>LA,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>PA,RecordEncoder:()=>CA,TIMESTAMP_ASSIGN_LAST:()=>bJ,TIMESTAMP_ASSIGN_NEW:()=>$D,TIMESTAMP_ASSIGN_PREVIOUS:()=>VD,TIMESTAMP_PLACEHOLDER:()=>Fp,TIMESTAMP_RECORD_PREVIOUS:()=>NA,handleLocalTimeForGets:()=>Wp,recordUpdater:()=>MA,removeEntry:()=>dc});function NJ(){return _f[0]=_f[0]^64,yJ.getFloat64(0)}function Wp(e,t){let r=e.getEntry;e.readCount=0,e.cachePuts=!1,e.rootStore=t,e.encoder.rootStore=t,e.getEntry=function(o,c){e.readCount++;let l=r.call(this,o,c),u=l?.value,f=u?.[df];return f>=0&&(l.metadataFlags=f,l.localTime=u.localTime,l.value=u.value,l.residencyId=u.residencyId,u.expiresAt>=0&&(l.expiresAt=u.expiresAt)),l&&(l.key=o),l};let n=e.get;e.get=function(o,c){let l=n.call(this,o,c);return l?.[df]>=0?l.value:l};let s=e.getRange;e.getRange=function(o){let c=s.call(this,o);return o.valuesForKey?c.map(l=>l?.value):o.values===!1||o.onlyCount?c:c.map(l=>{let u=l.value,f=u[df];return f>=0&&(l.metadataFlags=f,l.localTime=u.localTime,l.value=u.value,l.residencyId=u.residencyId,u.expiresAt>=0&&(l.expiresAt=u.expiresAt)),l})};let i=e.useReadTransaction();if(i.done(),!i.done.isTracked){let o=i.constructor,c=i.use,l=i.done;o.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,lc.push(new WeakRef(this))),c.call(this)},o.prototype.done=function(){if(l.call(this),this.isDone)for(let u=0;u<lc.length;u++){let f=lc[u].deref();(!f||f.isDone||f.isCommitted)&&lc.splice(u--,1)}},o.prototype.done.isTracked=!0}return e}function MA(e,t,r){return function(n,s,i,o,c=-1,l,u,f="put",d,h){d||l==null?$l=i?.localTime?NA|VD:OA:$l=l?i?.localTime?NA|16384:$D|16384:OA;let _=u?.expiresAt;if(_>=0&&(c|=$p),ff=c,wA=_,i?.version===o&&l===!1)throw new Error("Must retain local time if version is not changed");let p={version:o,instructedWrite:$l>0},S,g=0;try{let T=i?.residencyId,m=u?.residencyId;m&&(IA=m,ff|=DA,g|=fc),T!==m&&(g|=_c,T||(T=0)),c&$p&&(g|=Ef),u?.originatingOperation&&(g|=pf),d&&(p.ifVersion=S=i?.version??null),i&&i.value&&i.metadataFlags&Bs&&(r.getBinaryFast(i.localTime)||eo(i.value));let A=Kp(()=>e.put(n,s,p),n,e.rootStore);if(Yl&&(g|=Bs),l){let w=u?.user?.username;if(h&&(Gp=Kp(()=>e.encoder.encode(h),n,e.rootStore)),e.encoder.hasStructureUpdate&&(g|=Yp,e.encoder.hasStructureUpdate=!1),d&&i?.localTime){let M=i?.localTime,F=r.get(M);if(F){let G=bt(F).previousLocalTime;return r.put(M,Vl(o,t,n,G,u?.nodeId??server.replication.getThisNodeId(r)??0,w,f,Gp,g,m,T,_),{ifVersion:S}),A}}r.put(hf,Vl(o,t,n,i?.localTime?1:0,u?.nodeId??server.replication?.getThisNodeId(r)??0,w,f,Gp,g,m,T,_,u?.originatingOperation),{append:f!=="invalidate",instructedWrite:!0,ifVersion:S})}return A}catch(T){throw T.message+=" id: "+n+" options: "+p,T}}}function dc(e,t,r){if(t)return t.value&&t.metadataFlags&Bs&&!e.auditStore.getBinaryFast(t.localTime)&&eo(t.value),e.remove(t.key,r)}var qD,qp,Fp,hf,PA,RJ,df,_f,yJ,OA,$D,bJ,VD,NA,$p,DA,LA,Yp,OJ,Gp,$l,ff,wA,IA,CA,lc,Kl=be(()=>{qD=require("msgpackr");Zi();qp=U(j());cs();cs();Fp=new Uint8Array([1,1,1,1,4,64,0,0]),hf=new Uint8Array([1,1,1,1,1,0,0,0]),PA=new Uint8Array([1,1,1,1,3,64,0,0]),RJ=Symbol("local-timestamp"),df=Symbol("metadata"),_f=new Uint8Array(8),yJ=new DataView(_f.buffer,0,8),OA=0,$D=0,bJ=1,VD=3,NA=4,$p=16,DA=32,LA=1,Yp=256,$l=0,ff=-1,wA=-1,IA=0,CA=class extends qD.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(s,i){if($l||ff>=0){let o=0,c=$l;c&&(o+=8,$l=0);let l=ff,u=wA,f=IA;l>=0&&(o+=4,ff=-1,u>=0&&(o+=8,wA=-1),f&&(o+=4,IA=0));let d=OJ=r.call(this,s,i|2048|o);Gp=d.subarray((d.start||0)+o,d.end);let h=d.start||0;return c&&(Fp[4]=c,Fp[5]=c>>8,d.set(Fp,h),h+=8),Yl&&(l|=Bs),l>=0&&((d.dataView||(d.dataView=new DataView(d.buffer,d.byteOffset,d.byteLength))).setUint32(h,l|Vp<<24),h+=4,u>=0&&((d.dataView||(d.dataView=new DataView(d.buffer,d.byteOffset,d.byteLength))).setFloat64(h,u),h+=8),f&&(d.dataView||(d.dataView=new DataView(d.buffer,d.byteOffset,d.byteLength))).setUint32(h,f)),d}else return r.call(this,s,i)};let n=this.saveStructures;this.saveStructures=function(s,i){let o=n.call(this,s,i);return this.hasStructureUpdate=!0,o}}decode(t,r){let n=r?.start||0,s=r>-1?r:r?.end||t.length,i=t[n],o=0;try{if(i<32&&s>2){let c=n,l;if(i===2){if(t.copy)t.copy(_f,0,c),c+=8;else for(let h=0;h<8;h++)_f[h]=t[c++];l=NJ(),i=t[c]}let u,f;i<32&&(i===Vp?(o=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4):(o=i|t[c+1]<<5,c+=2),o&$p&&(u=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8),o&DA&&(f=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4));let d=uc(()=>r?.valueAsBuffer?t.subarray(c,s):super.decode(t.subarray(c,s),s-c),this.rootStore);return{localTime:l,value:d,[df]:o,expiresAt:u,residencyId:f}}return r?.valueAsBuffer?t:uc(()=>super.decode(t,r),this.rootStore)}catch(c){return qp.error("Error decoding record",c,"data: "+t.slice(0,40).toString("hex")),null}}};a(NJ,"getTimestamp");a(Wp,"handleLocalTimeForGets");lc=[];setInterval(()=>{for(let e=0;e<lc.length;e++){let t=lc[e].deref();!t||t.isDone||t.isCommitted?lc.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(qp.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):qp.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(MA,"recordUpdater");a(dc,"removeEntry")});var mf=P((KAe,WD)=>{"use strict";var YD=ce(),wJ=(H(),D(q)),{RecordEncoder:IJ}=(Kl(),D(KD));YD.initSync();var CJ=YD.get(wJ.CONFIG_PARAMS.STORAGE_CACHING)!==!1,vA=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=CJ&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:IJ})}};WD.exports=vA});var gf=P((WAe,zD)=>{"use strict";var xn=ce(),ls=(H(),D(q));xn.initSync();var zp=class{static{a(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=2048,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.eventTurnBatching=!1,this.noSync=xn.get(ls.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||xn.get(ls.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||xn.get(ls.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",xn.get(ls.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=xn.get(ls.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),xn.get(ls.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=xn.get(ls.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),xn.get(ls.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=xn.get(ls.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),xn.get(ls.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=xn.get(ls.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=xn.get(ls.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};zD.exports=zp;zp.MAX_DBS=1e4});var at=P((QAe,sL)=>{"use strict";var xA=require("lmdb"),Hs=require("fs-extra"),Bn=require("path"),Qp=an(),JD=j(),dn=Ln().LMDB_ERRORS_ENUM,jp=GD(),BA=mf(),XD=gf(),oa=Mt(),QD=(H(),D(q)),{table:PJ,resetDatabases:DJ}=(De(),D(nt)),jD=ce(),ks=oa.INTERNAL_DBIS_NAME,ZD=oa.DBI_DEFINITION_NAME,LJ="data.mdb",MJ="lock.mdb",Sf=".mdb",vJ="-lock",UA=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=us(t,r),this.key_type=this.dbi[oa.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[oa.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new xA.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Jp(e,t){if(e===void 0)throw new Error(dn.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(dn.ENV_NAME_REQUIRED)}a(Jp,"pathEnvNameValidation");async function HA(e,t,r=!0){try{await Hs.access(e)}catch(n){throw n.code==="ENOENT"?new Error(dn.INVALID_BASE_PATH):n}try{let n=Bn.join(e,t+Sf);return await Hs.access(n,Hs.constants.R_OK|Hs.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await Hs.access(Bn.join(e,t,LJ),Hs.constants.R_OK|Hs.constants.F_OK),Bn.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(dn.INVALID_ENVIRONMENT)}else throw new Error(dn.INVALID_ENVIRONMENT);throw n}}a(HA,"validateEnvironmentPath");function Xp(e,t){if(Qp.validateEnv(e),t===void 0)throw new Error(dn.DBI_NAME_REQUIRED)}a(Xp,"validateEnvDBIName");async function UJ(e,t,r=!1,n=!1){Jp(e,t);let s=Bn.basename(e);t=t.toString();let i=jD.get(QD.CONFIG_PARAMS.DATABASES);i||jD.setProperty(QD.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await HA(e,t,n),eL(e,t,r)}catch(o){if(o.message===dn.INVALID_ENVIRONMENT){let c=Bn.join(e,t);await Hs.mkdirp(n?c:e);let l=new XD(n?c:c+Sf,!1),u=xA.open(l);u.dbis=Object.create(null);let f=new BA(!1);u.openDB(ks,f),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=kA(e,t,r);return u[oa.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=u,u}throw o}}a(UJ,"createEnvironment");async function xJ(e,t,r,n=!0){Jp(e,t),t=t.toString();let s=Bn.join(e,t);return PJ({table:t,database:Bn.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(xJ,"copyEnvironment");async function eL(e,t,r=!1){Jp(e,t),t=t.toString();let n=kA(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 HA(e,t),i=Bn.join(e,t+Sf),o=s!=i,c=new XD(s,o),l=xA.open(c);l.dbis=Object.create(null);let u=rL(l);for(let f=0;f<u.length;f++)us(l,u[f]);return l[oa.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}a(eL,"openEnvironment");async function BJ(e,t,r=!1){Jp(e,t),t=t.toString();let n=Bn.join(e,t+Sf),s=await HA(e,t);if(global.lmdb_map!==void 0){let i=kA(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await tL(o),delete global.lmdb_map[i]}}await Hs.remove(s),await Hs.remove(s===n?s+vJ:Bn.join(Bn.dirname(s),MJ))}a(BJ,"deleteEnvironment");async function tL(e){Qp.validateEnv(e);let t=e[oa.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(tL,"closeEnvironment");function kA(e,t,r=!1){let s=`${Bn.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(kA,"getCachedEnvironmentName");function HJ(e){Qp.validateEnv(e);let t=Object.create(null),r=us(e,ks);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==ks)try{t[n]=Object.assign(new jp,s)}catch{JD.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(HJ,"listDBIDefinitions");function rL(e){Qp.validateEnv(e);let t=[],r=us(e,ks);for(let{key:n}of r.getRange({start:!1}))n!==ks&&t.push(n);return t}a(rL,"listDBIs");function kJ(e,t){let n=us(e,ks).getEntry(t),s=new jp;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{JD.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(kJ,"getDBIDefinition");function nL(e,t,r,n=!r){if(Xp(e,t),t=t.toString(),t===ks)throw new Error(dn.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return us(e,t)}catch(s){if(s.message===dn.DBI_DOES_NOT_EXIST){let i=new BA(r,n===!0),o=e.openDB(t,i),c=new jp(r===!0,n);return o[ZD]=c,us(e,ks).putSync(t,c),e.dbis[t]=o,o}throw s}}a(nL,"createDBI");function us(e,t){if(Xp(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==ks?r=kJ(e,t):r=new jp,r===void 0)throw new Error(dn.DBI_DOES_NOT_EXIST);let n;try{let s=new BA(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(dn.DBI_DOES_NOT_EXIST):s}return n[ZD]=r,e.dbis[t]=n,n}a(us,"openDBI");function FJ(e,t){Xp(e,t),t=t.toString();let r=us(e,t),n=r.getStats();return r[oa.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(FJ,"statDBI");async function GJ(e,t){try{let r=Bn.join(e,t+Sf);return(await Hs.stat(r)).size}catch{throw new Error(dn.INVALID_ENVIRONMENT)}}a(GJ,"environmentDataSize");function qJ(e,t){if(Xp(e,t),t=t.toString(),t===ks)throw new Error(dn.CANNOT_DROP_INTERNAL_DBIS_NAME);us(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],us(e,ks).removeSync(t)}a(qJ,"dropDBI");function $J(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{us(e,i)}catch(o){if(o.message===dn.DBI_DOES_NOT_EXIST)nL(e,i,i!==t,i===t),n=!0;else throw o}}n&&DJ()}a($J,"initializeDBIs");sL.exports={openDBI:us,openEnvironment:eL,createEnvironment:UJ,listDBIs:rL,listDBIDefinitions:HJ,createDBI:nL,dropDBI:qJ,statDBI:FJ,deleteEnvironment:BJ,initializeDBIs:$J,TransactionCursor:UA,environmentDataSize:GJ,copyEnvironment:xJ,closeEnvironment:tL}});var oL=P((JAe,iL)=>{"use strict";var FA=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};iL.exports=FA});var cL=P((ZAe,aL)=>{"use strict";var GA=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}};aL.exports=GA});var uL=P((tRe,lL)=>{"use strict";var qA=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};lL.exports=qA});var pc=P((oRe,_L)=>{"use strict";var VJ=at(),KJ=oL(),YJ=cL(),WJ=uL(),Ai=an(),Tf=Ln().LMDB_ERRORS_ENUM,zJ=Mt(),to=(H(),D(q)),QJ=ae(),jJ=require("uuid"),nRe=require("lmdb"),{handleHDBError:JJ,hdb_errors:XJ}=_e(),{OVERFLOW_MARKER:sRe,MAX_SEARCH_KEY_LENGTH:iRe}=zJ,dL=ce();dL.initSync();var Zp=dL.get(to.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),$A=to.TIME_STAMP_NAMES_ENUM.CREATED_TIME,hc=to.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function ZJ(e,t,r,n,s=Ai.getNextMonotonicTime()){WA(e,t,r,n),VA(e,t,r);let i=new KJ,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l];fL(u,!0,s);let f=e4(e,t,r,u),d=u[t];o.push(f),c.push(d)}return KA(o,c,n,i,s)}a(ZJ,"insertRecords");function e4(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 f=c([[{}]]);Array.isArray(f)&&(c=f[0][to.FUNC_VAL],n[o]=c)}let l=Ai.getIndexedValues(c),u=e.dbis[o];if(l){Zp&&u.prefetch(l.map(f=>({key:f,value:s})),eE);for(let f=0,d=l.length;f<d;f++)u.put(l[f],s)}}Zp&&e.dbis[t].prefetch([s],eE),e.dbis[t].put(s,n,n[hc])})}a(e4,"insertRecord");function t4(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(t4,"removeSkippedRecords");function fL(e,t,r){let n=r>0;(n||!Number.isInteger(e[hc]))&&(e[hc]=r||(r=Ai.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[$A]))&&(e[$A]=r||Ai.getNextMonotonicTime()):delete e[$A]}a(fL,"setTimestamps");function VA(e,t,r){r.indexOf(to.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(to.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(to.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(to.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),VJ.initializeDBIs(e,t,r)}a(VA,"initializeTransaction");async function r4(e,t,r,n,s=Ai.getNextMonotonicTime()){WA(e,t,r,n),VA(e,t,r);let i=new YJ,o=[],c=[],l=[];for(let u=0;u<n.length;u++){let f=n[u],d=f[t],h;try{h=YA(e,t,f,d,i,!0,s)}catch{i.skipped_hashes.push(d),o.push(u);continue}c.push(h),l.push(d)}return KA(c,l,n,i,s,o)}a(r4,"updateRecords");async function n4(e,t,r,n,s=Ai.getNextMonotonicTime()){try{WA(e,t,r,n)}catch(l){throw JJ(l,l.message,XJ.HTTP_STATUS_CODES.BAD_REQUEST)}VA(e,t,r);let i=new WJ,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l],f;QJ.isEmpty(u[t])?(f=jJ.v4(),u[t]=f):f=u[t];let d=YA(e,t,u,f,i,!1,s);o.push(d),c.push(f)}return KA(o,c,n,i,s)}a(n4,"upsertRecords");async function KA(e,t,r,n,s,i=[]){let o=await Promise.all(e);for(let c=0,l=o.length;c<l;c++)o[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||Ai.getNextMonotonicTime(),t4(r,i),n}a(KA,"finalizeWrite");function YA(e,t,r,n,s,i=!1,o){let c=e.dbis[t],l=c.getEntry(n),u=l?.value,f=u;if(!u){if(i)return!1;u={}}if(fL(r,!f,o),Number.isInteger(r[hc])&&u[hc]>r[hc])return!1;f&&s.original_records.push(u);let d,h=a(()=>{for(let p in r){if(!r.hasOwnProperty(p)||p===t)continue;let S=r[p],g=e.dbis[p];if(g===void 0)continue;let T=u[p];if(typeof S=="function"){let A=S([[u]]);Array.isArray(A)&&(S=A[0][to.FUNC_VAL],r[p]=S)}if(S===T)continue;let m=Ai.getIndexedValues(T);if(m){Zp&&g.prefetch(m.map(A=>({key:A,value:n})),eE);for(let A=0,w=m.length;A<w;A++)g.remove(m[A],n)}if(m=Ai.getIndexedValues(S),m){Zp&&g.prefetch(m.map(A=>({key:A,value:n})),eE);for(let A=0,w=m.length;A<w;A++)g.put(m[A],n)}}let _={...u,...r};c.put(n,_,_[hc])},"do_put");return l?d=c.ifVersion(n,l.version,h):d=c.ifNoExists(n,h),d.then(_=>_?!0:YA(e,t,r,n,s,i,o))}a(YA,"updateUpsertRecord");function s4(e,t,r){if(Ai.validateEnv(e),t===void 0)throw new Error(Tf.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Tf.WRITE_ATTRIBUTES_REQUIRED):new Error(Tf.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(s4,"validateBasic");function WA(e,t,r,n){if(s4(e,t,r),!Array.isArray(n))throw n===void 0?new Error(Tf.RECORDS_REQUIRED):new Error(Tf.RECORDS_MUST_BE_ARRAY)}a(WA,"validateWrite");function eE(){}a(eE,"noop");_L.exports={insertRecords:ZJ,updateRecords:r4,upsertRecords:n4}});var ro=P((cRe,i4)=>{i4.exports={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:"hash_function"},{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:"url"},{attribute:"routes"}]},hdb_certificate:{hash_attribute:"name",name:"hdb_certificate",schema:"system",attributes:[{attribute:"name"},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]},hdb_durable_session:{hash_attribute:"id",name:"hdb_durable_session",schema:"system",attributes:[{attribute:"id"}]},hdb_session_will:{hash_attribute:"id",name:"hdb_session_will",schema:"system",attributes:[{attribute:"id"}]}}});var tE=P((lRe,hL)=>{var{common_validators:Ri}=Ti(),Rf=pt(),Af="is required",Zt={database:{presence:!1,format:Ri.schema_format,length:Ri.schema_length},schema:{presence:!1,format:Ri.schema_format,length:Ri.schema_length},table:{presence:!0,format:Ri.schema_format,length:Ri.schema_length},attribute:{presence:!0,format:Ri.schema_format,length:Ri.schema_length},hash_attribute:{presence:!0,format:Ri.schema_format,length:Ri.schema_length}};function yf(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(yf,"makeAttributesStrings");function o4(e){return e=yf(e),Zt.table.presence=!1,Zt.attribute.presence=!1,Zt.hash_attribute.presence=!1,Rf.validateObject(e,Zt)}a(o4,"schema_object");function a4(e){return e=yf(e),Zt.table.presence={message:Af},Zt.attribute.presence=!1,Zt.hash_attribute.presence=!1,Rf.validateObject(e,Zt)}a(a4,"table_object");function c4(e){return e=yf(e),Zt.table.presence={message:Af},Zt.attribute.presence=!1,Rf.validateObject(e,Zt)}a(c4,"create_table_object");function l4(e){return e=yf(e),Zt.table.presence={message:Af},Zt.attribute.presence={message:Af},Zt.hash_attribute.presence=!1,Rf.validateObject(e,Zt)}a(l4,"attribute_object");function u4(e){return e=yf(e),Zt.table.presence={message:Af},Zt.attribute.presence=!1,Zt.hash_attribute.presence=!1,Rf.validateObject(e,Zt)}a(u4,"describe_table");function d4(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(d4,"validateTableResidence");hL.exports={schema_object:o4,create_table_object:c4,table_object:a4,attribute_object:l4,describe_table:u4,validateTableResidence:d4}});var EL=P((dRe,pL)=>{"use strict";var f4=require("uuid"),zA=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||f4.v4(),this.schema_table=`${this.schema}.${this.table}`}};pL.exports=zA});var rE=P((_Re,mL)=>{"use strict";var _4=EL(),QA=class extends _4{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}};mL.exports=QA});var SL=P((pRe,gL)=>{"use strict";gL.exports=p4;var h4="inserted";function p4(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===h4?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(p4,"returnObject")});var nE=P((gRe,yL)=>{"use strict";var E4=(H(),D(q)),jA=at(),m4=pc(),{getSystemSchemaPath:g4,getSchemaPath:S4}=ht(),mRe=ro(),T4=tE(),A4=rE(),R4=SL(),{handleHDBError:TL,hdb_errors:RL}=_e(),AL=ae(),{HTTP_STATUS_CODES:y4}=RL,b4="inserted";yL.exports=O4;async function O4(e){let t=T4.attribute_object(e);if(t)throw TL(new Error,t.message,RL.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&AL.checkGlobalSchemaTable(e.schema,e.table);if(r)throw TL(new Error,r,y4.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=AL.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 A4(e.schema,e.table,e.attribute,e.id);try{let i=await jA.openEnvironment(S4(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}`);jA.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await jA.openEnvironment(g4(),E4.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await m4.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdb_attribute_attributes,[s]);return R4(b4,c,{records:[s]},l)}catch(i){throw i}}a(O4,"lmdbCreateAttribute")});var bf=P((ARe,OL)=>{"use strict";var no=ae(),bL=j(),TRe=RA(),{getDatabases:N4}=(De(),D(nt)),{ClientError:Ec}=_e();OL.exports=w4;function w4(e){if(no.isEmpty(e))throw new Ec("invalid update parameters defined.");if(no.isEmptyOrZeroLength(e.schema))throw new Ec("invalid schema specified.");if(no.isEmptyOrZeroLength(e.table))throw new Ec("invalid table specified.");if(!Array.isArray(e.records))throw new Ec("records must be an array");let t=N4()[e.schema]?.[e.table];if(no.isEmpty(t))throw new Ec(`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&&no.isEmptyOrZeroLength(o[r]))throw bL.error("a valid hash attribute must be provided with update record:",o),new Ec("a valid hash attribute must be provided with update record, check log for more info");if(!no.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw bL.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Ec(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!no.isEmpty(o[r])&&o[r]!==""&&n.has(no.autoCast(o[r]))&&(o.skip=!0),n.add(no.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(w4,"insertUpdateValidate")});var wL=P((yRe,NL)=>{"use strict";var JA=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};NL.exports=JA});var PL=P((ORe,CL)=>{"use strict";var XA=at(),I4=j(),IL=Ln().LMDB_ERRORS_ENUM;CL.exports=C4;async function C4(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 XA.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==IL.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await XA.closeEnvironment(global.lmdb_map[n]),await XA.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==IL.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){I4.error(t)}}a(C4,"cleanLMDBMap")});var $L=P((IRe,qL)=>{"use strict";var ZA=require("recursive-iterator"),P4=require("alasql"),eR=require("clone"),DL=ae(),{handleHDBError:LL,hdb_errors:D4}=_e(),{HDB_ERROR_MSGS:ML,HTTP_STATUS_CODES:vL}=D4,{getDatabases:L4}=(De(),D(nt)),M4=["DISTINCT_ARRAY"],UL=Symbol("validateTables"),tR=Symbol("validateTable"),wRe=Symbol("getAllColumns"),xL=Symbol("validateAllColumns"),sE=Symbol("findColumn"),BL=Symbol("validateOrderBy"),Of=Symbol("validateSegment"),rR=Symbol("validateColumn"),HL=Symbol("setColumnsForTable"),kL=Symbol("checkColumnsForAsterisk"),FL=Symbol("validateGroupBy"),GL=Symbol("hasColumns"),nR=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[UL](),this[kL](),this[xL]()}[UL](){if(this[GL]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[tR](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[tR](t.table)})}}[GL](){let t=!1,r=new ZA(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[tR](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=L4();if(!r[t.databaseid])throw LL(new Error,ML.SCHEMA_NOT_FOUND(t.databaseid),vL.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw LL(new Error,ML.TABLE_NOT_FOUND(t.databaseid,t.tableid),vL.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=eR(s);i.table=eR(t),this.attributes.push(i)})}[sE](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)}[kL](){let t=new ZA(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[HL](r.tableid)}[HL](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new P4.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[xL](){this[Of](this.statement.columns,!1),this[Of](this.statement.joins,!1),this[Of](this.statement.where,!1),this[FL](this.statement.group,!1),this[Of](this.statement.order,!0)}[Of](t,r){if(!t)return;let n=new ZA(t),s=[];for(let{node:i,path:o}of n)!DL.isEmpty(i)&&!DL.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[BL](i):s.push(this[rR](i)));return s}[FL](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&M4.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=eR(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[sE](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[sE](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`}[BL](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[rR](t)}[rR](t){let r=this[sE](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]}};qL.exports=nR});var WL=P((PRe,YL)=>{"use strict";var VL=require("lodash"),Nf=require("mathjs"),v4=require("jsonata"),KL=ae();YL.exports={distinct_array:a(e=>Array.isArray(e)&&e.length>1?VL.uniqWith(e,VL.isEqual):e,"distinct_array"),searchJSON:U4,mad:wf.bind(null,Nf.mad),mean:wf.bind(null,Nf.mean),mode:wf.bind(null,Nf.mode),prod:wf.bind(null,Nf.prod),median:wf.bind(null,Nf.median)};function wf(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(wf,"aggregateFunction");function U4(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(KL.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),KL.isEmpty(this.__ala__.res[r])){let n=v4(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(U4,"searchJSON")});var QL=P((LRe,zL)=>{"use strict";var er=require("moment"),sR="YYYY-MM-DDTHH:mm:ss.SSSZZ";er.suppressDeprecationWarnings=!0;zL.exports={current_date:a(()=>er().utc().format("YYYY-MM-DD"),"current_date"),current_time:a(()=>er().utc().format("HH:mm:ss.SSS"),"current_time"),extract:a((e,t)=>{switch(t.toLowerCase()){case"year":return er(e).utc().format("YYYY");case"month":return er(e).utc().format("MM");case"day":return er(e).utc().format("DD");case"hour":return er(e).utc().format("HH");case"minute":return er(e).utc().format("mm");case"second":return er(e).utc().format("ss");case"millisecond":return er(e).utc().format("SSS");default:break}},"extract"),date:a(e=>er(e).utc().format(sR),"date"),date_format:a((e,t)=>er(e).utc().format(t),"date_format"),date_add:a((e,t,r)=>er(e).utc().add(t,r).valueOf(),"date_add"),date_sub:a((e,t,r)=>er(e).utc().subtract(t,r).valueOf(),"date_sub"),date_diff:a((e,t,r)=>{let n=er(e).utc(),s=er(t).utc();return r?n.diff(s,r,!0):n.diff(s)},"date_diff"),now:a(()=>er().utc().valueOf(),"now"),get_server_time:a(()=>er().format(sR),"get_server_time"),offset_utc:a((e,t)=>er(e).utc().utcOffset(t).format(sR),"offset_utc")}});var ZL=P((vRe,XL)=>{"use strict";var x4=require("@turf/area"),B4=require("@turf/length"),H4=require("@turf/circle"),k4=require("@turf/difference"),F4=require("@turf/distance"),G4=require("@turf/boolean-contains"),q4=require("@turf/boolean-equal"),$4=require("@turf/boolean-disjoint"),V4=require("@turf/helpers"),jL=(H(),D(q)),qe=ae(),so=j();XL.exports={geoArea:K4,geoLength:Y4,geoCircle:W4,geoDifference:z4,geoDistance:JL,geoNear:Q4,geoContains:j4,geoEqual:J4,geoCrosses:X4,geoConvert:Z4};function K4(e){if(qe.isEmpty(e))return NaN;typeof e=="string"&&(e=qe.autoCastJSON(e));try{return x4.default(e)}catch(t){return so.trace(t,e),NaN}}a(K4,"geoArea");function Y4(e,t){if(qe.isEmpty(e))return NaN;typeof e=="string"&&(e=qe.autoCastJSON(e));try{return B4.default(e,{units:t||"kilometers"})}catch(r){return so.trace(r,e),NaN}}a(Y4,"geoLength");function W4(e,t,r){if(qe.isEmpty(e))return NaN;if(qe.isEmpty(t))return NaN;typeof e=="string"&&(e=qe.autoCastJSON(e));try{return H4.default(e,t,{units:r||"kilometers"})}catch(n){return so.trace(n,e,t),NaN}}a(W4,"geoCircle");function z4(e,t){if(qe.isEmpty(e))return NaN;if(qe.isEmpty(t))return NaN;typeof e=="string"&&(e=qe.autoCastJSON(e)),typeof t=="string"&&(t=qe.autoCastJSON(t));try{return k4(e,t)}catch(r){return so.trace(r,e,t),NaN}}a(z4,"geoDifference");function JL(e,t,r){if(qe.isEmpty(e))return NaN;if(qe.isEmpty(t))return NaN;typeof e=="string"&&(e=qe.autoCastJSON(e)),typeof t=="string"&&(t=qe.autoCastJSON(t));try{return F4.default(e,t,{units:r||"kilometers"})}catch(n){return so.trace(n,e,t),NaN}}a(JL,"geoDistance");function Q4(e,t,r,n){if(qe.isEmpty(e)||qe.isEmpty(t))return!1;if(qe.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=qe.autoCastJSON(e)),typeof t=="string"&&(t=qe.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return JL(e,t,n)<=r}catch(s){return so.trace(s,e,t),!1}}a(Q4,"geoNear");function j4(e,t){if(qe.isEmpty(e)||qe.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=qe.autoCastJSON(e)),typeof t=="string"&&(t=qe.autoCastJSON(t));try{return G4.default(e,t)}catch(r){return so.trace(r,e,t),!1}}a(j4,"geoContains");function J4(e,t){if(qe.isEmpty(e)||qe.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=qe.autoCastJSON(e)),typeof t=="string"&&(t=qe.autoCastJSON(t));try{return q4.default(e,t)}catch(r){return so.trace(r,e,t),!1}}a(J4,"geoEqual");function X4(e,t){if(qe.isEmpty(e)||qe.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=qe.autoCastJSON(e)),typeof t=="string"&&(t=qe.autoCastJSON(t));try{return!$4.default(e,t)}catch(r){return so.trace(r,e,t),!1}}a(X4,"geoCrosses");function Z4(e,t,r){if(qe.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(qe.isEmpty(t))throw new Error("geo_type is required");if(qe.isEmpty(jL.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(jL.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=qe.autoCastJSON(e)),V4[t](e,r)}a(Z4,"geoConvert")});var iE=P((xRe,eM)=>{var mc=WL(),Hn=QL(),yi=ZL();eM.exports=e=>{e.aggr.mad=e.aggr.MAD=mc.mad,e.aggr.mean=e.aggr.MEAN=mc.mean,e.aggr.mode=e.aggr.MODE=mc.mode,e.aggr.prod=e.aggr.PROD=mc.prod,e.aggr.median=e.aggr.MEDIAN=mc.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=mc.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=mc.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Hn.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Hn.current_time,e.fn.extract=e.fn.EXTRACT=Hn.extract,e.fn.date=e.fn.DATE=Hn.date,e.fn.date_format=e.fn.DATE_FORMAT=Hn.date_format,e.fn.date_add=e.fn.DATE_ADD=Hn.date_add,e.fn.date_sub=e.fn.DATE_SUB=Hn.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Hn.date_diff,e.fn.now=e.fn.NOW=Hn.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Hn.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Hn.get_server_time,e.fn.getdate=e.fn.GETDATE=Hn.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Hn.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=yi.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=yi.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=yi.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=yi.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=yi.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=yi.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=yi.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=yi.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=yi.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=yi.geoNear}});var sM=P((BRe,nM)=>{"use strict";var If=require("lodash"),fn=require("alasql");fn.options.cache=!1;var e3=iE(),tM=require("clone"),oE=require("recursive-iterator"),Ue=j(),We=ae(),Wl=kn(),t3=(H(),D(q)),{hdb_errors:r3}=_e(),{getDatabases:rM}=(De(),D(nt)),n3="IS NULL",Fs="There was a problem performing this search. Please check the logs and try again.";e3(fn);var iR=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(Fs)}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(Fs)}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(Fs)}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(Fs)}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(Fs)}}_getColumns(){let t=new oE(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(tM(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=If.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=rM()[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 oE(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 fn.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 fn.yy.LogicValue({value:i}):n instanceof fn.yy.StringValue&&We.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new fn.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 oE(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(t3.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 l=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<l.length;u++)if(l[u].value)n.add(l[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&&If.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 fn.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(tM(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(n3)>-1&&this.tables.forEach(s=>{let i={columnid:rM()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=If.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return s[o]||(s[o]=[],s[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(s[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,o=this.data[i].__hash_name,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},l=!1,u=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(l=!0),!We.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!We.isEmptyOrZeroLength(this.exact_search_values[u].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[u].values);let f=await Wl.getDataByHash(c);for(let d of c.hash_values)f.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d))}catch(f){throw Ue.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),Ue.error(f),new Error(Fs)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async f=>{let d={...c};d.search_value=f;let h=await Wl.getDataByValue(d);for(let[_,p]of h)this.data[i].__merged_data[_]?this._updateMergedAttribute(i,_,s.attribute,p[s.attribute]):(this.data[i].__merged_data[_]=[...n[i]],this._updateMergedAttribute(i,_,s.attribute,p[s.attribute]),this._setMergedHashAttribute(i,_))}))}catch(f){throw Ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),Ue.error(f),new Error(Fs)}else if(!We.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!We.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let f=this.comparator_search_values[u].comparators;for(let d=0,h=f.length;d<h;d++){let _=f[d];c.search_attribute=_.attribute,c.search_value=_.search_value;let p=await Wl.getDataByValue(c,_.operation);if(l)for(let[S]of p)this.data[i].__merged_data[S]||(this.data[i].__merged_data[S]=[...n[i]],this._setMergedHashAttribute(i,S));else for(let[S,g]of p)this.data[i].__merged_data[S]?this._updateMergedAttribute(i,S,s.attribute,g[s.attribute]):(this.data[i].__merged_data[S]=[...n[i]],this._updateMergedAttribute(i,S,s.attribute,g[s.attribute]),this._setMergedHashAttribute(i,S))}}catch(f){throw Ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),Ue.error(f),new Error(Fs)}else try{c.search_attribute=s.attribute,c.search_value="*";let f=await Wl.getDataByValue(c);if(l)for(let[d]of f)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d));else for(let[d,h]of f)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,s.attribute,h[s.attribute]):(this.data[i].__merged_data[d]=[...n[i]],this._updateMergedAttribute(i,d,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,d))}catch(f){throw Ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),Ue.error(f),new Error(Fs)}}}_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 fn.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 fn.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new fn.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 fn.yy.FuncValue:new fn.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(_=>{_.joinmode&&_.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(_.table);let p=_.joinmode+" JOIN ? AS "+(_.as?_.as:_.table.tableid);_.on&&(p+=" ON "+_.on.toString()),i.push(p),t.push(Object.values(this.data[`${_.table.databaseid_orig}_${_.table.as?_.table.as_orig:_.table.tableid_orig}`].__merged_data))});let o=[],c={};s.forEach(_=>{let p=this.data[`${_.databaseid_orig}_${_.as?_.as_orig:_.tableid_orig}`].__hash_name,S=_.as?_.as_orig:_.tableid_orig;o.push({key:`'${S}.${p}'`,schema:_.databaseid_orig,table:_.as?_.as_orig:_.tableid_orig,keys:new Set}),r.push(`${_.as?_.as:_.tableid}.\`${p}\` AS "${S}.${p}"`),c[_.as?_.as_orig:_.tableid_orig]=this.data[`${_.databaseid_orig}_${_.as?_.as_orig:_.tableid_orig}`].__merged_attributes});let l=this.statement.where?"WHERE "+this.statement.where:"";l=l.replace(/NOT\(NULL\)/g,"NOT NULL");let u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(_=>{_.is_func?r.push(_.initial_select_column.toString()):_.initial_select_column.tableid?r.push(`${_.initial_select_column.tableid}.${_.initial_select_column.columnid} AS ${_.expression.columnid}`):r.push(`${_.initial_select_column.columnid} AS ${_.expression.columnid}`)}));let f="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(f=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let h=[];try{let _=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${l} ${u} ${f} ${d}`,p=this._convertColumnsToIndexes(_,s);h=await fn.promise(p,t),t=null}catch(_){throw Ue.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),Ue.error(_),new Error("There was a problem processing the data.")}if(h&&h.length>0){for(let _=0,p=h.length;_<p;_++){let S=h[_];o.forEach(g=>{S[g.key]!==null&&S[g.key]!==void 0&&g.keys.add(S[g.key])})}o.forEach(_=>{let p=Object.keys(this.data[`${_.schema}_${_.table}`].__merged_data),S=If.difference(p,[..._.keys].map(g=>g.toString()));for(let g=0,T=S.length;g<T;g++){let m=S[g];delete this.data[`${_.schema}_${_.table}`].__merged_data[m]}})}return{existing_attributes:c,joined_length:h?h.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new oE(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=If.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(Fs)}}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 f in i)o.push(i[f][0]);this.data[n].__merged_attributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:o,get_attributes:s.columns},l=await Wl.getDataByHash(c),u=s.columns.length;for(let f=0,d=o.length;f<d;f++){let h=o[f],_=l.get(h);for(let p=0;p<u;p++){let S=s.columns[p],g=_[S]===void 0?null:_[S];this.data[n].__merged_data[h].push(g)}}}}catch(r){throw Ue.error("Error thrown from getDataByHash function in SQLSearch class method getData."),Ue.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(s=>{s.as=s.as?s.as:s.table.tableid,t.push(Object.values(this.data[`${s.table.databaseid_orig}_${s.table.as?s.table.as_orig:s.table.tableid_orig}`].__merged_data)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,l=o.aggregatorid?o.as_orig:c.as_orig;return s.expression.tableid?c.columnid_orig===s.expression.columnid_orig&&c.tableid_orig===s.expression.tableid_orig:c.columnid_orig===s.expression.columnid_orig||s.expression.columnid_orig===l}).length===0&&(s.expression.columnid=s.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let n;try{let s=this._buildSQL();Ue.trace(`Final SQL: ${s}`),n=await fn.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(r3.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),Ue.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return r=r.replace(/NOT\(NULL\)/g,"NOT NULL"),this.statement.columns.forEach(n=>{if(n.funcid&&n.as){let s=n.toString().replace(" AS "+n.as,"");r=r.replace(n.toString(),s)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let n=t,s={};r.forEach(i=>{i.databaseid_orig?s[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:s[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=s[i],u=new RegExp(`${l}.\`${o}\``,"g"),f=`${l}.[${c}]`;n=n.replace(u,f)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=new RegExp(`\`${o}\``,"g"),u=`[${c}]`;n=n.replace(l,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 Wl.getDataByValue(i);for(let[c,l]of o)this.data[s].__merged_data[c]||(l[n.attribute]===void 0&&(l[n.attribute]=null),this.data[s].__merged_data[c]={...r[s]}),this.data[s].__merged_data[c][t[n.attribute]]=l[n.attribute]??null}catch(o){throw Ue.error("There was an error when processing this SQL operation. Check your logs"),Ue.error(o),new Error(Fs)}}return Object.values(Object.values(this.data)[0].__merged_data)}};nM.exports=iR});var Kr=P((kRe,iM)=>{"use strict";var s3=$L();iM.exports={searchByConditions:o3,searchByHash:a3,searchByValue:c3,search:l3};var oR=kn(),{transformReq:aR}=ae(),i3=sM();async function o3(e){return aR(e),oR.searchByConditions(e)}a(o3,"searchByConditions");async function a3(e){aR(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of oR.searchByHash(e))r&&t.push(r);return t}a(a3,"searchByHash");async function c3(e){aR(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of oR.searchByValue(e))t.push(r);return t}a(c3,"searchByValue");function l3(e,t){try{let r=new s3(e);r.validate(),new i3(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(l3,"search")});var io=P((GRe,lM)=>{"use strict";var Cf=require("crypto"),u3=ce(),{CONFIG_PARAMS:d3}=(H(),D(q)),aM="aes-256-cbc",f3=32,_3=16,cR=64,cM=32,h3=cR+cM,oM=new Map;lM.exports={encrypt:p3,decrypt:E3,createNatsTableStreamName:m3};function p3(e){let t=Cf.randomBytes(f3),r=Cf.randomBytes(_3),n=Cf.createCipheriv(aM,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(p3,"encrypt");function E3(e){let t=e.substr(0,cR),r=e.substr(cR,cM),n=e.substr(h3,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Cf.createDecipheriv(aM,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(E3,"decrypt");function m3(e,t){let r=u3.get(d3.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=oM.get(r);return n||(n=Cf.createHash("md5").update(r).digest("hex"),oM.set(r,n)),n}a(m3,"createNatsTableStreamName")});var oo=P((VRe,fM)=>{"use strict";var $Re=Kr(),Pf=j(),uM=tE(),g3=io(),aE=ae(),{handleHDBError:cE,hdb_errors:S3}=_e(),{HDB_ERROR_MSGS:lE,HTTP_STATUS_CODES:lR}=S3,dM=ce();dM.initSync();var{getDatabases:uR}=(De(),D(nt)),T3=require("fs-extra"),A3=(H(),D(q));fM.exports={describeAll:R3,describeTable:uE,describeSchema:y3};async function R3(e={}){try{let t=aE.isEmptyOrZeroLength(e),r=!!e.bypass_auth,n,s;!t&&!r&&(n=e.hdb_user?.role?.permission,s=n?.super_user||n?.cluster_user);let i=uR(),o={},c={},l=[],u=e?.exact_count;for(let d in i){o[d]=!0,!t&&!s&&!r&&(c[d]=e.hdb_user?.role?.permission[d]?.describe);let h=i[d];for(let _ in h)try{let p;if(t||s||r)p=await uE({schema:d,table:_,exact_count:u});else if(n&&n[d].describe&&n[d].tables[_].describe){let S=n[d].tables[_].attribute_permissions;p=await uE({schema:d,table:_,exact_count:u},S)}p&&l.push(p)}catch(p){Pf.error(p)}}let f={};for(let d in l)t||s||r?(f[l[d].schema]==null&&(f[l[d].schema]={}),f[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]):c[l[d].schema]&&(f[l[d].schema]==null&&(f[l[d].schema]={}),f[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]);for(let d in o)t||s||r?f[d]={}:c[d]&&(f[d]={});return f}catch(t){return Pf.error("Got an error in describeAll"),Pf.error(t),cE(new Error,lE.DESCRIBE_ALL_ERR)}}a(R3,"describeAll");async function uE(e,t){aE.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=uM.describe_table(e);if(i)throw i;let c=uR()[r];if(!c)throw cE(new Error,lE.SCHEMA_NOT_FOUND(e.schema),lR.NOT_FOUND);let l=c[n];if(!l)throw cE(new Error,lE.TABLE_NOT_FOUND(e.schema,e.table),lR.NOT_FOUND);function u(_){f.push({attribute:_.attribute,type:_.type,elements:_.elements?.type,indexed:_.indexed,is_primary_key:_.isPrimaryKey,assigned_created_time:_.assignCreatedTime,assigned_updated_time:_.assignUpdatedTime,nullable:_.nullable,properties:_.properties?_.properties.map(p=>({type:p.type,name:p.name})):void 0})}a(u,"pushAtt");let f=[];if(s){let _={};s.forEach(p=>{p.describe&&(_[p.attribute_name]=!0)}),l.attributes.forEach(p=>{_[p.name]&&u(p)})}else l.attributes?.forEach(_=>u(_));let d;try{d=(await T3.stat(l.primaryStore.env.path)).size}catch(_){Pf.warn("unable to get database size",_)}let h={schema:r,name:l.tableName,hash_attribute:l.attributes.find(_=>_.isPrimaryKey||_.is_hash_attribute)?.name,audit:l.audit,schema_defined:l.schemaDefined,attributes:f,db_size:d};l.replicate!==void 0&&(h.replicate=l.replicate),l.expirationMS!==void 0&&(h.expiration=l.expirationMS/1e3+"s"),l.sealed!==void 0&&(h.sealed=l.sealed),l.sources?.length>0&&(h.sources=l.sources.map(_=>_.name).filter(_=>_&&_!=="NATSReplicator"&&_!=="Replicator")),dM.get(A3.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(h.clustering_stream_name=g3.createNatsTableStreamName(h.schema,h.name));try{let _=l.getRecordCount({exactCount:e.exact_count==="true"});h.record_count=_.recordCount,h.table_size=l.getSize(),h.db_audit_size=l.getAuditSize(),h.estimated_record_range=_.estimatedRange;let p=l.auditStore;if(p)for(let S of p.getKeys({reverse:!0,limit:1}))h.last_updated_record=S[0];if(!h.last_updated_record&&l.indices.__updatedtime__)for(let S of l.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))h.last_updated_record=S}catch(_){Pf.warn(`unable to stat table dbi due to ${_}`)}return h}a(uE,"descTable");async function y3(e){aE.transformReq(e);let t=uM.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=uR()[n];if(!i)throw cE(new Error,lE.SCHEMA_NOT_FOUND(e.schema),lR.NOT_FOUND);let o={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),aE.isEmpty(l)||l.describe){let u=await uE({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);u&&(o[u.name]=u)}}return o}a(y3,"describeSchema")});var Gs=P((zRe,mM)=>{var b3=ro(),{callbackify:hM,promisify:O3}=require("util"),{getDatabases:pM}=(De(),D(nt));mM.exports={setSchemaDataToGlobal:_M,getTableSchema:N3,getSystemSchema:w3,setSchemaDataToGlobalAsync:O3(_M)};var EM=oo(),YRe=hM(EM.describeAll),WRe=hM(EM.describeTable);function _M(e){global.hdb_schema=pM(),e&&e()}a(_M,"setSchemaDataToGlobal");function N3(e,t,r){let n=pM()[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(N3,"getTableSchema");function w3(){return b3}a(w3,"getSystemSchema")});var fR=P((jRe,TM)=>{var I3=pt(),dR=require("joi"),{hdb_table:C3,hdb_database:gM}=Ti(),SM={schema:gM,database:gM,table:C3},P3={date:dR.date().iso().required()},D3={timestamp:dR.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};TM.exports=function(e,t){let r=t==="timestamp"?{...SM,...D3}:{...SM,...P3},n=dR.object(r);return I3.validateBySchema(e,n)}});var yM=P((JRe,RM)=>{var L3=pt(),_R=require("joi"),{hdb_table:M3,hdb_database:AM}=Ti(),v3=_R.object({schema:AM,database:AM,table:M3,hash_values:_R.array().required(),ids:_R.array()});RM.exports=function(e){return L3.validateBySchema(e,v3)}});var mR=P((XRe,bM)=>{"use strict";var hR=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}},pR=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}},ER=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};bM.exports={InsertObject:hR,NoSQLSeachObject:pR,DeleteResponseObject:ER}});var Tc=P((eye,CM)=>{"use strict";var NM=fR(),U3=yM(),gc=ae(),OM=require("moment"),wM=j(),{promisify:x3,callbackify:B3}=require("util"),Sc=(H(),D(q)),H3=Gs(),gR=x3(H3.getTableSchema),SR=kn(),{DeleteResponseObject:k3}=mR(),{handleHDBError:aa,hdb_errors:F3}=_e(),{HDB_ERROR_MSGS:dE,HTTP_STATUS_CODES:ca}=F3,G3="records successfully deleted",q3=B3(IM);CM.exports={delete:q3,deleteRecord:IM,deleteFilesBefore:$3,deleteAuditLogsBefore:V3};async function $3(e){let t=NM(e,"date");if(t)throw aa(t,t.message,ca.BAD_REQUEST,void 0,void 0,!0);if(gc.transformReq(e),!OM(e.date,OM.ISO_8601).isValid())throw aa(new Error,dE.INVALID_DATE,ca.BAD_REQUEST,Sc.LOG_LEVELS.ERROR,dE.INVALID_DATE,!0);let n=gc.checkSchemaTableExist(e.schema,e.table);if(n)throw aa(new Error,n,ca.NOT_FOUND,Sc.LOG_LEVELS.ERROR,n,!0);let s=await SR.deleteRecordsBefore(e);if(await gR(e.schema,e.table),wM.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a($3,"deleteFilesBefore");async function V3(e){let t=NM(e,"timestamp");if(t)throw aa(t,t.message,ca.BAD_REQUEST,void 0,void 0,!0);if(gc.transformReq(e),isNaN(e.timestamp))throw aa(new Error,dE.INVALID_VALUE("Timestamp"),ca.BAD_REQUEST,Sc.LOG_LEVELS.ERROR,dE.INVALID_VALUE("Timestamp"),!0);let r=gc.checkSchemaTableExist(e.schema,e.table);if(r)throw aa(new Error,r,ca.NOT_FOUND,Sc.LOG_LEVELS.ERROR,r,!0);let n=await SR.deleteAuditLogsBefore(e);return await gR(e.schema,e.table),wM.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(V3,"deleteAuditLogsBefore");async function IM(e){e.ids&&(e.hash_values=e.ids);let t=U3(e);if(t)throw aa(t,t.message,ca.BAD_REQUEST,void 0,void 0,!0);gc.transformReq(e);let r=gc.checkSchemaTableExist(e.schema,e.table);if(r)throw aa(new Error,r,ca.NOT_FOUND,Sc.LOG_LEVELS.ERROR,r,!0);try{await gR(e.schema,e.table);let n=await SR.deleteRecords(e);return gc.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${G3}`),n}catch(n){if(n.message===Sc.SEARCH_NOT_FOUND_MESSAGE){let s=new k3;return s.message=Sc.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(IM,"deleteRecord")});var _E={};Be(_E,{HASH_FUNCTION:()=>fE,hash:()=>Y3,validate:()=>W3});function TR(e=Lf){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ";return Array.from(Df.randomBytes(e)).map(r=>t[r%t.length]).join("")}function Y3(e,t=fE[DM?.toUpperCase()]??"sha256"){return AR[t](e)}function W3(e,t,r=fE[DM?.toUpperCase()]??"sha256"){return e?K3[r](e,t):!1}var Df,zl,PM,DM,Lf,LM,fE,AR,K3,hE=be(()=>{Df=U(require("node:crypto")),zl=U(require("argon2")),PM=U(ce());H();DM=(0,PM.get)(B.AUTHENTICATION_HASHFUNCTION)?.toLowerCase(),Lf=16,LM=9,fE=(n=>(n.MD5="md5",n.SHA256="sha256",n.ARGON2ID="argon2id",n))(fE||{});a(TR,"generateSalt");AR={md5:a((e,t=void 0)=>{t=t??TR(LM);let r=Df.createHash("md5").update(e+t).digest("hex");return t+r},"md5"),sha256:a((e,t=void 0)=>{t=t??TR(Lf);let r=Df.createHash("sha256").update(e+t).digest("hex");return t+r},"sha256"),argon2id:a(async e=>{let t=TR(Lf),r=await zl.hash(e,{type:zl.argon2id,salt:Buffer.from(t)});return t+r},"argon2id")},K3={md5:a((e,t)=>{let r=e.slice(0,LM);return e===AR.md5(t,r)},"md5"),sha256:a((e,t)=>{let r=e.slice(0,Lf);return e===AR.sha256(t,r)},"sha256"),argon2id:a(async(e,t)=>await zl.verify(e.slice(Lf),t),"argon2id")};a(Y3,"hash");a(W3,"validate")});var vM=P((sye,MM)=>{var RR=pt(),Yr={username:{presence:!0,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 z3(e){return Yr.password.presence=!0,Yr.username.presence=!0,Yr.role.presence=!0,Yr.active.presence=!0,RR.validateObject(e,Yr)}a(z3,"addUserValidation");function Q3(e){return Yr.password.presence=!1,Yr.username.presence=!0,Yr.role.presence=!1,Yr.active.presence=!1,RR.validateObject(e,Yr)}a(Q3,"alterUserValidation");function j3(e){return Yr.password.presence=!1,Yr.username.presence=!0,Yr.role.presence=!1,Yr.active.presence=!1,RR.validateObject(e,Yr)}a(j3,"dropUserValidation");MM.exports={addUserValidation:z3,alterUserValidation:Q3,dropUserValidation:j3}});var Ot=P((aye,xM)=>{"use strict";var{platform:oye}=require("os"),J3="nats-server.zip",yR="nats-server",X3=process.platform==="win32"?`${yR}.exe`:yR,Z3=/^[^\s.,*>]+$/,UM="__request__",eX=a(e=>`${e}.${UM}`,"REQUEST_SUBJECT"),tX={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},rX={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},nX={HUB:"hub.pid",LEAF:"leaf.pid"},sX={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},iX={SUCCESS:"success",ERROR:"error"},oX={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},aX={TXN:"txn",MSGID:"msgid"},Ql={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},cX={[Ql.ERR]:1,[Ql.WRN]:2,[Ql.INF]:3,[Ql.DBG]:4,[Ql.TRC]:5},lX={debug:"-D",trace:"-DVV"};xM.exports={NATS_SERVER_ZIP:J3,NATS_SERVER_NAME:yR,NATS_BINARY_NAME:X3,PID_FILES:nX,NATS_CONFIG_FILES:rX,SERVER_SUFFIX:sX,NATS_TERM_CONSTRAINTS_RX:Z3,REQUEST_SUFFIX:UM,UPDATE_REMOTE_RESPONSE_STATUSES:iX,CLUSTER_STATUS_STATUSES:oX,REQUEST_SUBJECT:eX,SUBJECT_PREFIXES:aX,MSG_HEADERS:tX,LOG_LEVELS:Ql,LOG_LEVEL_FLAGS:lX,LOG_LEVEL_HIERARCHY:cX}});var bR=P(BM=>{"use strict";var uX={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
16
+ `},"serialize"),compressible:!1,q:.8});qr.set("application/x-www-form-urlencoded",{deserialize(e){let t=Buffer.isBuffer(e)?e.toString("utf8"):e,r={};for(let[n,s]of new URLSearchParams(t))if(r.hasOwnProperty(n)){let i=r[n];Array.isArray(i)?i.push(s):r.key=[i,s]}else r[n]=s;return r},serialize(e){let t=new URLSearchParams;for(let r in e)t.set(r,e);return t.toString()}});FD={type:"application/json",serializeStream:df,serialize:ff,deserialize:bJ,q:.5};qr.set("*/*",FD);qr.set("",FD);a(bJ,"tryJSONParse");a(hf,"registerContentHandlers");OJ=require("fastify-plugin"),NJ=OJ(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=zp(n.raw);s.type(c),s.serializer(function(l){let u;if(typeof l=="object"&&l&&(l[Symbol.iterator]||l[Symbol.asyncIterator])&&o.serializeStream){if(l.mapError){let f=l.getColumns;l=l.mapError(d=>(d.toJSON=()=>({error:d.name,message:d.message,...d.partialObject}),d)),l.getColumns=f}u=o.serializeStream}else u=o.serialize;return u(l,{headers:{set:a((f,d)=>{s.header(f,d)},"set")}})})}),r()},{name:"content-type-negotiation"});a(zp,"findBestSerializer");UD=IA.default.get(B.HTTP_COMPRESSIONTHRESHOLD);a(pf,"serialize");a(Zo,"serializeMessage");a(LA,"asyncSerialization");a(MA,"hasAsyncSerialization");a(wJ,"streamToBuffer");IJ=["ascii","utf8","utf-8","utf16le","utf-16le","ucs2","ucs-2","base64","base64url","latin1","binary","hex"];a(CJ,"isBufferEncoding");a(PJ,"parseContentType");a(Qi,"getDeserializer");a(DJ,"deserializerUnknownType");a(LJ,"transformIterable");a(Wp,"toCsvStream")});var UA={};ve(UA,{start:()=>GJ});function MJ(e){if(e.kind!==De.Kind.OPERATION_DEFINITION&&e.kind!==De.Kind.FRAGMENT_DEFINITION)throw new Rr(`Unexpected non-executable definition type ${e.kind}.`)}function qD(e){if(typeof e!="object"||e===null)throw new Ei("Request body must be an object.");if(!("query"in e))throw new Ei("Request body must contain a `query` field.");if(typeof e.query!="string")throw new Ei("Request body `query` field must be a string.");if("variables"in e&&(typeof e.variables!="object"||e.variables===null))throw new Ei("Request body `variables` field must be an object.");if("operationName"in e&&typeof e.operationName!="string")throw new Ei("Request body `operationName` field must be a string.")}function vA(e){return parseInt(e.value,10)}function VD(e){return parseFloat(e.value)}function KD(e,t,r){let n=r.get(e.name.value);return YD(n)?WD(n,t):{attribute:t,value:n}}function YD(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function WD(e,t){return t=typeof t=="string"?[t]:t,Object.entries(e).flatMap(([r,n])=>(t=[...t,r],YD(n)?WD(n,t):{attribute:t,value:n}))}function vJ(e,t,r){switch(t=[...t,e.name.value],e.value.kind){case De.Kind.NULL:return{attribute:t,value:null};case De.Kind.INT:return{attribute:t,value:vA(e.value)};case De.Kind.FLOAT:return{attribute:t,value:VD(e.value)};case De.Kind.BOOLEAN:case De.Kind.STRING:return{attribute:t,value:e.value.value};case De.Kind.VARIABLE:return KD(e.value,t,r);case De.Kind.OBJECT:return zD(e.value,t,r);case De.Kind.LIST:case De.Kind.ENUM:default:throw new Rr(`Value type, ${e.value.kind}, is not supported.`)}}function zD(e,t,r){return e.fields.flatMap(n=>vJ(n,t,r))}function UJ(e,t){switch(e.value.kind){case De.Kind.NULL:return{attribute:e.name.value,value:null};case De.Kind.INT:return{attribute:e.name.value,value:vA(e.value)};case De.Kind.FLOAT:return{attribute:e.name.value,value:VD(e.value)};case De.Kind.BOOLEAN:case De.Kind.STRING:return{attribute:e.name.value,value:e.value.value};case De.Kind.VARIABLE:return KD(e.value,e.name.value,t);case De.Kind.OBJECT:return zD(e.value,[e.name.value],t);case De.Kind.LIST:case De.Kind.ENUM:default:throw new Rr(`Argument type, ${e.value.kind}, is not supported.`)}}function xJ(e,t){return e.flatMap(r=>UJ(r,t))}function Qp(e,t){return e.selections.flatMap(r=>{switch(r.kind){case De.Kind.FIELD:return r;case De.Kind.FRAGMENT_SPREAD:{let n=r.name.value,s=t.get(n);if(s==null)throw new Rr(`Fragment \`${n}\` not found.`);return Qp(s.selectionSet,t)}case De.Kind.INLINE_FRAGMENT:return Qp(r.selectionSet,t)}})}function QD(e,t){return Qp(e,t).map(r=>r.selectionSet?.selections.length>0?{name:r.name.value,select:QD(r.selectionSet,t)}:r.name.value)}async function BJ(e,t,r,n){let s=_i.getMatch(e.name.value,"graphql");if(s===void 0)throw new Rr(`Resource \`${e.name.value}\` not found.`);let i=s.Resource,o={select:QD(e.selectionSet,r),conditions:xJ(e.arguments,t)},c=[];n.authorize=!0;for await(let l of i.search(o,n))c.push(l);return[e.name.value,c]}function jD(e){switch(e.kind){case De.Kind.NULL:return null;case De.Kind.INT:return vA(e);case De.Kind.FLOAT:return parseFloat(e.value);case De.Kind.STRING:case De.Kind.BOOLEAN:return e.value;case De.Kind.OBJECT:return e.fields.reduce((t,r)=>({[r.name.value]:jD(r.value),...t}),{});case De.Kind.LIST:case De.Kind.ENUM:default:throw new Rr(`Value type, ${e.kind}, is not supported.`)}}function HJ(e,t){let r=new Map;for(let n of e){let s=n.variable.name.value,i=t?.[s];if(i===void 0&&n.defaultValue!==void 0&&(i=jD(n.defaultValue)),n.type.kind===De.Kind.NON_NULL_TYPE&&!(s in t)&&i===void 0)throw new Rr(`Variable $${s} is required, but not provided.`);r.set(n.variable.name.value,i??null)}return r}async function kJ(e,t,r,n){if(e.operation===De.OperationTypeNode.SUBSCRIPTION)throw new Rr("Subscriptions are not supported.");if(e.operation===De.OperationTypeNode.MUTATION)throw new Rr("Mutations are not supported yet.");let s=HJ(e.variableDefinitions,t),i=await Promise.all(Qp(e.selectionSet,r).map(c=>BJ(c,s,r,n))),o={data:{}};for(let[c,l]of i)o.data[c]=l;return o}async function $D({query:e,variables:t={},operationName:r},n){let s=De.parse(e),i=new Map,o=new Map;for(let u of s.definitions)if(MJ(u),u.kind===De.Kind.FRAGMENT_DEFINITION)o.set(u.name.value,u);else{if(u.name===void 0&&s.definitions.length>1)throw new Rr("Unnamed operations are only allowed when there is a single operation in the document.");let f=u.name?.value??"Unnamed Query";if(i.has(f))throw new Rr(`Duplicate operation definition: ${f}`);i.set(f,u)}let c;if(r==null)if(i.size===1)c=i.entries().next().value[1];else throw new Rr("Operation name is required when there are multiple operations in the document.");else if(c=i.get(r),c==null)throw new Rr(`Operation \`${r}\` not found.`);let l=await kJ(c,t,o,n);return{status:200,headers:{"Content-Type":"application/graphql-response+json; charset=utf-8"},body:JSON.stringify(l)}}async function FJ(e){switch(e.method){case"GET":{let t=new URLSearchParams(e.url.split("?")[1]),r={};for(let[n,s]of t)r[n]=n==="variables"||n==="extensions"?JSON.parse(s):s;return qD(r),$D(r,e)}case"POST":{let r=await Qi(e.headers.get("content-type"),!0)(e._nodeRequest);return qD(r),$D(r,e)}default:throw new Ei("Method Not Allowed",405,{Allow:"GET, POST"})}}function GJ(e){e.server.http(async(t,r)=>{if(!t.url.startsWith("/graphql"))return r(t);try{return await FJ(t)}catch(n){logger.error(n);let s=t.headers.get("accept")??"application/graphql-response+json";switch(s){case"application/json":{if(n instanceof Ei)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json",...n.headers}};if(n instanceof De.GraphQLError)return{status:200,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/json"}};if(n instanceof Rr)return{status:200,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json"}};if(n instanceof Error)return{status:500,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json"}};break}default:logger.info(`Unsupported accept header, ${s}, defaulting to application/graphql-response+json`);case"application/graphql-response+json":{if(n instanceof Ei)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json",...n.headers}};if(n instanceof De.GraphQLError)return{status:400,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof Rr)return{status:400,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof Error)return{status:500,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json"}};break}}throw n}},{port:e.port,securePort:e.securePort})}var De,Rr,Ei,JD=be(()=>{De=M(require("graphql"));ji();Yl();a(MJ,"assertExecutableDefinitionNode");a(qD,"assertRequestParams");a(vA,"processIntValueNode");a(VD,"processFloatValueNode");a(KD,"processVariableNode");a(YD,"isObject");a(WD,"transformObjectIntoQueryCondition");a(vJ,"processObjectFieldNode");a(zD,"processObjectValueNode");a(UJ,"processArgumentNode");a(xJ,"buildConditionsQuery");a(Qp,"fillInFragments");a(QD,"buildSelectQuery");a(BJ,"processFieldNode");a(jD,"processConstValueNode");a(HJ,"resolveVariables");a(kJ,"executeOperation");a($D,"resolver");Rr=class extends Error{static{a(this,"GraphQLQueryingError")}},Ei=class extends Error{static{a(this,"HTTPError")}statusCode;headers;constructor(t,r=400,n={}){super(t),this.statusCode=r,this.headers=n}};a(FJ,"graphqlQueryingHandler");a(GJ,"start")});var Si=I((GAe,eL)=>{"use strict";var ZD=oe(),XD=(H(),D(q)),zl=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,gi=require("joi"),ea={schema_format:{pattern:zl,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},qJ=gi.alternatives(gi.string().min(1).max(ea.schema_length.maximum).pattern(zl).messages({"string.pattern.base":"{:#label} "+ea.schema_format.message}),gi.number(),gi.array()).required(),$J=gi.alternatives(gi.string().min(1).max(ea.schema_length.maximum).pattern(zl).messages({"string.pattern.base":"{:#label} "+ea.schema_format.message}),gi.number()),VJ=gi.alternatives(gi.string().min(1).max(ea.schema_length.maximum).pattern(zl).messages({"string.pattern.base":"{:#label} "+ea.schema_format.message}),gi.number()).required();function KJ(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>ea.schema_length.maximum?`'${e}' maximum of 250 characters`:zl.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(KJ,"checkValidTable");function YJ(e,t){return ZD.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(YJ,"validateSchemaExists");function WJ(e,t){let r=t.state.ancestors[0].schema;return ZD.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(WJ,"validateTableExists");function zJ(e,t){return e.toLowerCase()===XD.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${XD.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(zJ,"validateSchemaName");eL.exports={common_validators:ea,schema_regex:zl,hdb_schema_table:qJ,validateSchemaExists:YJ,validateTableExists:WJ,validateSchemaName:zJ,checkValidTable:KJ,hdb_database:$J,hdb_table:VJ}});var dt=I(($Ae,tL)=>{"use strict";var un=require("validate.js");un.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||un.validators.type.checks[t](e)?null:` must be a '${t}' value`};un.validators.type.checks={Object:a(function(e){return un.isObject(e)&&!un.isArray(e)},"Object"),Array:un.isArray,Integer:un.isInteger,Number:un.isNumber,String:un.isString,Date:un.isDate,Boolean:a(function(e){return typeof e=="boolean"},"Boolean")};un.validators.hasValidFileExt=function(e,t){return un.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};tL.exports={validateObject:QJ,validateObjectAsync:jJ,validateBySchema:JJ};function QJ(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=un(e,t,{format:"flat"});return r?new Error(r):null}a(QJ,"validateObject");async function jJ(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await un.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(jJ,"validateObjectAsync");function JJ(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(JJ,"validateBySchema")});var BA=I((KAe,nL)=>{var{hdb_table:XJ,hdb_database:rL}=Si(),ZJ=dt(),xA=require("joi"),e4={undefined:"undefined",null:"null"},t4=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||e4[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"),r4=xA.object({database:rL,schema:rL,table:XJ,records:xA.array().items(xA.object().custom(t4)).required()});nL.exports=function(e){return ZJ.validateBySchema(e,r4)}});var iL=I((WAe,sL)=>{"use strict";var HA=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")}};sL.exports=HA});var aL=I((QAe,oL)=>{"use strict";var kA=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};oL.exports=kA});var fL={};ve(fL,{HAS_EXPIRATION:()=>Xp,HAS_RESIDENCY_ID:()=>YA,HAS_STRUCTURE_UPDATE:()=>tm,LAST_TIMESTAMP_PLACEHOLDER:()=>Tf,LOCAL_TIMESTAMP:()=>n4,METADATA:()=>mf,NEW_TIMESTAMP_PLACEHOLDER:()=>lL,NO_TIMESTAMP:()=>FA,PENDING_LOCAL_TIME:()=>WA,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>KA,RecordEncoder:()=>VA,TIMESTAMP_ASSIGN_LAST:()=>i4,TIMESTAMP_ASSIGN_NEW:()=>uL,TIMESTAMP_ASSIGN_PREVIOUS:()=>dL,TIMESTAMP_PLACEHOLDER:()=>jp,TIMESTAMP_RECORD_PREVIOUS:()=>GA,handleLocalTimeForGets:()=>rm,recordUpdater:()=>zA,removeEntry:()=>dc});function a4(){return Sf[0]=Sf[0]^64,s4.getFloat64(0)}function rm(e,t){let r=e.getEntry;e.readCount=0,e.cachePuts=!1,e.rootStore=t,e.encoder.rootStore=t,e.getEntry=function(o,c){e.readCount++;let l=r.call(this,o,c),u=l?.value,f=u?.[mf];return f>=0&&(l.metadataFlags=f,l.localTime=u.localTime,l.value=u.value,l.residencyId=u.residencyId,u.expiresAt>=0&&(l.expiresAt=u.expiresAt)),l&&(l.key=o),l};let n=e.get;e.get=function(o,c){let l=n.call(this,o,c);return l?.[mf]>=0?l.value:l};let s=e.getRange;e.getRange=function(o){let c=s.call(this,o);return o.valuesForKey?c.map(l=>l?.value):o.values===!1||o.onlyCount?c:c.map(l=>{let u=l.value,f=u[mf];return f>=0&&(l.metadataFlags=f,l.localTime=u.localTime,l.value=u.value,l.residencyId=u.residencyId,u.expiresAt>=0&&(l.expiresAt=u.expiresAt)),l})};let i=e.useReadTransaction();if(i.done(),!i.done.isTracked){let o=i.constructor,c=i.use,l=i.done;o.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,cc.push(new WeakRef(this))),c.call(this)},o.prototype.done=function(){if(l.call(this),this.isDone)for(let u=0;u<cc.length;u++){let f=cc[u].deref();(!f||f.isDone||f.isCommitted)&&cc.splice(u--,1)}},o.prototype.done.isTracked=!0}return e}function zA(e,t,r){return function(n,s,i,o,c=-1,l,u,f="put",d,h){d||l==null?Ql=i?.localTime?GA|dL:FA:Ql=l?i?.localTime?GA|16384:uL|16384:FA;let _=u?.expiresAt;if(_>=0&&(c|=Xp),gf=c,qA=_,i?.version===o&&l===!1)throw new Error("Must retain local time if version is not changed");let p={version:o,instructedWrite:Ql>0},S,g=0;try{let R=i?.residencyId,E=u?.residencyId;E&&($A=E,gf|=YA,g|=fc),R!==E&&(g|=_c,R||(R=0)),c&Xp&&(g|=Rf),u?.originatingOperation&&(g|=Af),d&&(p.ifVersion=S=i?.version??null),i&&i.value&&i.metadataFlags&vn&&(r.getBinaryFast(i.localTime)||ta(i.value));let A;if(s!==void 0&&(A=em(()=>e.put(n,s,p),n,e.rootStore),lc&&(g|=vn)),l){let O=u?.user?.username;if(h&&(em(()=>e.encoder.encode(h),n,e.rootStore),lc&&(g|=vn)),e.encoder.hasStructureUpdate&&(g|=tm,e.encoder.hasStructureUpdate=!1),d&&i?.localTime){let v=i?.localTime,F=r.get(v);if(F){let G=Ot(F).previousLocalTime;return A=r.put(v,jl(o,t,n,G,u?.nodeId??server.replication.getThisNodeId(r)??0,O,f,Ef,g,E,R,_),{ifVersion:S}),A}}A=r.put(s===void 0?lL:Tf,jl(o,t,n,i?.localTime?1:0,u?.nodeId??server.replication?.getThisNodeId(r)??0,O,f,Ef,g,E,R,_,u?.originatingOperation),{append:f!=="invalidate",instructedWrite:!0,ifVersion:S})}return A}catch(R){throw R.message+=" id: "+n+" options: "+p,R}}}function dc(e,t,r){if(t)return t.value&&t.metadataFlags&vn&&!e.auditStore.getBinaryFast(t.localTime)&&ta(t.value),e.remove(t.key,r)}var cL,Jp,jp,Tf,KA,lL,n4,mf,Sf,s4,FA,uL,i4,dL,GA,Xp,YA,WA,tm,o4,Ef,Ql,gf,qA,$A,VA,cc,Jl=be(()=>{cL=require("msgpackr");Ji();Jp=M(j());cs();cs();jp=new Uint8Array([1,1,1,1,4,64,0,0]),Tf=new Uint8Array([1,1,1,1,1,0,0,0]),KA=new Uint8Array([1,1,1,1,3,64,0,0]),lL=new Uint8Array([1,1,1,1,0,64,0,0]),n4=Symbol("local-timestamp"),mf=Symbol("metadata"),Sf=new Uint8Array(8),s4=new DataView(Sf.buffer,0,8),FA=0,uL=0,i4=1,dL=3,GA=4,Xp=16,YA=32,WA=1,tm=256,Ql=0,gf=-1,qA=-1,$A=0,VA=class extends cL.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(s,i){if(Ql||gf>=0){let o=0,c=Ql;c&&(o+=8,Ql=0);let l=gf,u=qA,f=$A;l>=0&&(o+=4,gf=-1,u>=0&&(o+=8,qA=-1),f&&(o+=4,$A=0));let d=o4=r.call(this,s,i|2048|o);Ef=d.subarray((d.start||0)+o,d.end);let h=d.start||0;return c&&(jp[4]=c,jp[5]=c>>8,d.set(jp,h),h+=8),lc&&(l|=vn),l>=0&&((d.dataView||(d.dataView=new DataView(d.buffer,d.byteOffset,d.byteLength))).setUint32(h,l|Zp<<24),h+=4,u>=0&&((d.dataView||(d.dataView=new DataView(d.buffer,d.byteOffset,d.byteLength))).setFloat64(h,u),h+=8),f&&(d.dataView||(d.dataView=new DataView(d.buffer,d.byteOffset,d.byteLength))).setUint32(h,f)),d}else return Ef=r.call(this,s,i),Ef};let n=this.saveStructures;this.saveStructures=function(s,i){let o=n.call(this,s,i);return this.hasStructureUpdate=!0,o}}decode(t,r){let n=r?.start||0,s=r>-1?r:r?.end||t.length,i=t[n],o=0;try{if(i<32&&s>2){let c=n,l;if(i===2){if(t.copy)t.copy(Sf,0,c),c+=8;else for(let h=0;h<8;h++)Sf[h]=t[c++];l=a4(),i=t[c]}let u,f;i<32&&(i===Zp?(o=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4):(o=i|t[c+1]<<5,c+=2),o&Xp&&(u=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8),o&YA&&(f=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4));let d=uc(()=>r?.valueAsBuffer?t.subarray(c,s):super.decode(t.subarray(c,s),s-c),this.rootStore);return{localTime:l,value:d,[mf]:o,expiresAt:u,residencyId:f}}return r?.valueAsBuffer?t:uc(()=>super.decode(t,r),this.rootStore)}catch(c){return Jp.error("Error decoding record",c,"data: "+t.slice(0,40).toString("hex")),null}}};a(a4,"getTimestamp");a(rm,"handleLocalTimeForGets");cc=[];setInterval(()=>{for(let e=0;e<cc.length;e++){let t=cc[e].deref();!t||t.isDone||t.isCommitted?cc.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(Jp.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):Jp.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(zA,"recordUpdater");a(dc,"removeEntry")});var yf=I((tRe,hL)=>{"use strict";var _L=ce(),c4=(H(),D(q)),{RecordEncoder:l4}=(Jl(),D(fL));_L.initSync();var u4=_L.get(c4.CONFIG_PARAMS.STORAGE_CACHING)!==!1,QA=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=u4&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:l4})}};hL.exports=QA});var bf=I((nRe,pL)=>{"use strict";var Un=ce(),ls=(H(),D(q));Un.initSync();var nm=class{static{a(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=2048,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.eventTurnBatching=!1,this.noSync=Un.get(ls.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Un.get(ls.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Un.get(ls.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",Un.get(ls.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=Un.get(ls.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),Un.get(ls.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=Un.get(ls.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),Un.get(ls.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=Un.get(ls.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),Un.get(ls.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=Un.get(ls.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=Un.get(ls.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};pL.exports=nm;nm.MAX_DBS=1e4});var ft=I((iRe,OL)=>{"use strict";var JA=require("lmdb"),Us=require("fs-extra"),xn=require("path"),sm=an(),gL=j(),dn=Cn().LMDB_ERRORS_ENUM,im=aL(),XA=yf(),SL=bf(),ra=vt(),mL=(H(),D(q)),{table:d4,resetDatabases:f4}=(Me(),D(st)),EL=ce(),xs=ra.INTERNAL_DBIS_NAME,TL=ra.DBI_DEFINITION_NAME,_4="data.mdb",h4="lock.mdb",Of=".mdb",p4="-lock",jA=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=us(t,r),this.key_type=this.dbi[ra.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[ra.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new JA.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function om(e,t){if(e===void 0)throw new Error(dn.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(dn.ENV_NAME_REQUIRED)}a(om,"pathEnvNameValidation");async function ZA(e,t,r=!0){try{await Us.access(e)}catch(n){throw n.code==="ENOENT"?new Error(dn.INVALID_BASE_PATH):n}try{let n=xn.join(e,t+Of);return await Us.access(n,Us.constants.R_OK|Us.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await Us.access(xn.join(e,t,_4),Us.constants.R_OK|Us.constants.F_OK),xn.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(dn.INVALID_ENVIRONMENT)}else throw new Error(dn.INVALID_ENVIRONMENT);throw n}}a(ZA,"validateEnvironmentPath");function am(e,t){if(sm.validateEnv(e),t===void 0)throw new Error(dn.DBI_NAME_REQUIRED)}a(am,"validateEnvDBIName");async function m4(e,t,r=!1,n=!1){om(e,t);let s=xn.basename(e);t=t.toString();let i=EL.get(mL.CONFIG_PARAMS.DATABASES);i||EL.setProperty(mL.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await ZA(e,t,n),AL(e,t,r)}catch(o){if(o.message===dn.INVALID_ENVIRONMENT){let c=xn.join(e,t);await Us.mkdirp(n?c:e);let l=new SL(n?c:c+Of,!1),u=JA.open(l);u.dbis=Object.create(null);let f=new XA(!1);u.openDB(xs,f),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=eR(e,t,r);return u[ra.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=u,u}throw o}}a(m4,"createEnvironment");async function E4(e,t,r,n=!0){om(e,t),t=t.toString();let s=xn.join(e,t);return d4({table:t,database:xn.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(E4,"copyEnvironment");async function AL(e,t,r=!1){om(e,t),t=t.toString();let n=eR(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 ZA(e,t),i=xn.join(e,t+Of),o=s!=i,c=new SL(s,o),l=JA.open(c);l.dbis=Object.create(null);let u=yL(l);for(let f=0;f<u.length;f++)us(l,u[f]);return l[ra.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}a(AL,"openEnvironment");async function g4(e,t,r=!1){om(e,t),t=t.toString();let n=xn.join(e,t+Of),s=await ZA(e,t);if(global.lmdb_map!==void 0){let i=eR(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await RL(o),delete global.lmdb_map[i]}}await Us.remove(s),await Us.remove(s===n?s+p4:xn.join(xn.dirname(s),h4))}a(g4,"deleteEnvironment");async function RL(e){sm.validateEnv(e);let t=e[ra.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(RL,"closeEnvironment");function eR(e,t,r=!1){let s=`${xn.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(eR,"getCachedEnvironmentName");function S4(e){sm.validateEnv(e);let t=Object.create(null),r=us(e,xs);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==xs)try{t[n]=Object.assign(new im,s)}catch{gL.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(S4,"listDBIDefinitions");function yL(e){sm.validateEnv(e);let t=[],r=us(e,xs);for(let{key:n}of r.getRange({start:!1}))n!==xs&&t.push(n);return t}a(yL,"listDBIs");function T4(e,t){let n=us(e,xs).getEntry(t),s=new im;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{gL.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(T4,"getDBIDefinition");function bL(e,t,r,n=!r){if(am(e,t),t=t.toString(),t===xs)throw new Error(dn.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return us(e,t)}catch(s){if(s.message===dn.DBI_DOES_NOT_EXIST){let i=new XA(r,n===!0),o=e.openDB(t,i),c=new im(r===!0,n);return o[TL]=c,us(e,xs).putSync(t,c),e.dbis[t]=o,o}throw s}}a(bL,"createDBI");function us(e,t){if(am(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==xs?r=T4(e,t):r=new im,r===void 0)throw new Error(dn.DBI_DOES_NOT_EXIST);let n;try{let s=new XA(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(dn.DBI_DOES_NOT_EXIST):s}return n[TL]=r,e.dbis[t]=n,n}a(us,"openDBI");function A4(e,t){am(e,t),t=t.toString();let r=us(e,t),n=r.getStats();return r[ra.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(A4,"statDBI");async function R4(e,t){try{let r=xn.join(e,t+Of);return(await Us.stat(r)).size}catch{throw new Error(dn.INVALID_ENVIRONMENT)}}a(R4,"environmentDataSize");function y4(e,t){if(am(e,t),t=t.toString(),t===xs)throw new Error(dn.CANNOT_DROP_INTERNAL_DBIS_NAME);us(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],us(e,xs).removeSync(t)}a(y4,"dropDBI");function b4(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{us(e,i)}catch(o){if(o.message===dn.DBI_DOES_NOT_EXIST)bL(e,i,i!==t,i===t),n=!0;else throw o}}n&&f4()}a(b4,"initializeDBIs");OL.exports={openDBI:us,openEnvironment:AL,createEnvironment:m4,listDBIs:yL,listDBIDefinitions:S4,createDBI:bL,dropDBI:y4,statDBI:A4,deleteEnvironment:g4,initializeDBIs:b4,TransactionCursor:jA,environmentDataSize:R4,copyEnvironment:E4,closeEnvironment:RL}});var wL=I((aRe,NL)=>{"use strict";var tR=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};NL.exports=tR});var CL=I((lRe,IL)=>{"use strict";var rR=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}};IL.exports=rR});var DL=I((dRe,PL)=>{"use strict";var nR=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};PL.exports=nR});var pc=I((mRe,vL)=>{"use strict";var O4=ft(),N4=wL(),w4=CL(),I4=DL(),Ti=an(),Nf=Cn().LMDB_ERRORS_ENUM,C4=vt(),Xi=(H(),D(q)),P4=oe(),D4=require("uuid"),_Re=require("lmdb"),{handleHDBError:L4,hdb_errors:M4}=he(),{OVERFLOW_MARKER:hRe,MAX_SEARCH_KEY_LENGTH:pRe}=C4,LL=ce();LL.initSync();var cm=LL.get(Xi.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),sR=Xi.TIME_STAMP_NAMES_ENUM.CREATED_TIME,hc=Xi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function v4(e,t,r,n,s=Ti.getNextMonotonicTime()){cR(e,t,r,n),iR(e,t,r);let i=new N4,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l];ML(u,!0,s);let f=U4(e,t,r,u),d=u[t];o.push(f),c.push(d)}return oR(o,c,n,i,s)}a(v4,"insertRecords");function U4(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 f=c([[{}]]);Array.isArray(f)&&(c=f[0][Xi.FUNC_VAL],n[o]=c)}let l=Ti.getIndexedValues(c),u=e.dbis[o];if(l){cm&&u.prefetch(l.map(f=>({key:f,value:s})),lm);for(let f=0,d=l.length;f<d;f++)u.put(l[f],s)}}cm&&e.dbis[t].prefetch([s],lm),e.dbis[t].put(s,n,n[hc])})}a(U4,"insertRecord");function x4(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(x4,"removeSkippedRecords");function ML(e,t,r){let n=r>0;(n||!Number.isInteger(e[hc]))&&(e[hc]=r||(r=Ti.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[sR]))&&(e[sR]=r||Ti.getNextMonotonicTime()):delete e[sR]}a(ML,"setTimestamps");function iR(e,t,r){r.indexOf(Xi.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Xi.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Xi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Xi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),O4.initializeDBIs(e,t,r)}a(iR,"initializeTransaction");async function B4(e,t,r,n,s=Ti.getNextMonotonicTime()){cR(e,t,r,n),iR(e,t,r);let i=new w4,o=[],c=[],l=[];for(let u=0;u<n.length;u++){let f=n[u],d=f[t],h;try{h=aR(e,t,f,d,i,!0,s)}catch{i.skipped_hashes.push(d),o.push(u);continue}c.push(h),l.push(d)}return oR(c,l,n,i,s,o)}a(B4,"updateRecords");async function H4(e,t,r,n,s=Ti.getNextMonotonicTime()){try{cR(e,t,r,n)}catch(l){throw L4(l,l.message,M4.HTTP_STATUS_CODES.BAD_REQUEST)}iR(e,t,r);let i=new I4,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l],f;P4.isEmpty(u[t])?(f=D4.v4(),u[t]=f):f=u[t];let d=aR(e,t,u,f,i,!1,s);o.push(d),c.push(f)}return oR(o,c,n,i,s)}a(H4,"upsertRecords");async function oR(e,t,r,n,s,i=[]){let o=await Promise.all(e);for(let c=0,l=o.length;c<l;c++)o[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||Ti.getNextMonotonicTime(),x4(r,i),n}a(oR,"finalizeWrite");function aR(e,t,r,n,s,i=!1,o){let c=e.dbis[t],l=c.getEntry(n),u=l?.value,f=u;if(!u){if(i)return!1;u={}}if(ML(r,!f,o),Number.isInteger(r[hc])&&u[hc]>r[hc])return!1;f&&s.original_records.push(u);let d,h=a(()=>{for(let p in r){if(!r.hasOwnProperty(p)||p===t)continue;let S=r[p],g=e.dbis[p];if(g===void 0)continue;let R=u[p];if(typeof S=="function"){let A=S([[u]]);Array.isArray(A)&&(S=A[0][Xi.FUNC_VAL],r[p]=S)}if(S===R)continue;let E=Ti.getIndexedValues(R);if(E){cm&&g.prefetch(E.map(A=>({key:A,value:n})),lm);for(let A=0,O=E.length;A<O;A++)g.remove(E[A],n)}if(E=Ti.getIndexedValues(S),E){cm&&g.prefetch(E.map(A=>({key:A,value:n})),lm);for(let A=0,O=E.length;A<O;A++)g.put(E[A],n)}}let _={...u,...r};c.put(n,_,_[hc])},"do_put");return l?d=c.ifVersion(n,l.version,h):d=c.ifNoExists(n,h),d.then(_=>_?!0:aR(e,t,r,n,s,i,o))}a(aR,"updateUpsertRecord");function k4(e,t,r){if(Ti.validateEnv(e),t===void 0)throw new Error(Nf.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Nf.WRITE_ATTRIBUTES_REQUIRED):new Error(Nf.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(k4,"validateBasic");function cR(e,t,r,n){if(k4(e,t,r),!Array.isArray(n))throw n===void 0?new Error(Nf.RECORDS_REQUIRED):new Error(Nf.RECORDS_MUST_BE_ARRAY)}a(cR,"validateWrite");function lm(){}a(lm,"noop");vL.exports={insertRecords:v4,updateRecords:B4,upsertRecords:H4}});var Zi=I((gRe,F4)=>{F4.exports={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:"hash_function"},{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:"url"},{attribute:"routes"},{attribute:"revoked_certificates"},{attribute:"shard"}]},hdb_certificate:{hash_attribute:"name",name:"hdb_certificate",schema:"system",attributes:[{attribute:"name"},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]},hdb_durable_session:{hash_attribute:"id",name:"hdb_durable_session",schema:"system",attributes:[{attribute:"id"}]},hdb_session_will:{hash_attribute:"id",name:"hdb_session_will",schema:"system",attributes:[{attribute:"id"}]}}});var um=I((SRe,UL)=>{var{common_validators:Ai}=Si(),If=dt(),wf="is required",Xt={database:{presence:!1,format:Ai.schema_format,length:Ai.schema_length},schema:{presence:!1,format:Ai.schema_format,length:Ai.schema_length},table:{presence:!0,format:Ai.schema_format,length:Ai.schema_length},attribute:{presence:!0,format:Ai.schema_format,length:Ai.schema_length},hash_attribute:{presence:!0,format:Ai.schema_format,length:Ai.schema_length}};function Cf(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(Cf,"makeAttributesStrings");function G4(e){return e=Cf(e),Xt.table.presence=!1,Xt.attribute.presence=!1,Xt.hash_attribute.presence=!1,If.validateObject(e,Xt)}a(G4,"schema_object");function q4(e){return e=Cf(e),Xt.table.presence={message:wf},Xt.attribute.presence=!1,Xt.hash_attribute.presence=!1,If.validateObject(e,Xt)}a(q4,"table_object");function $4(e){return e=Cf(e),Xt.table.presence={message:wf},Xt.attribute.presence=!1,If.validateObject(e,Xt)}a($4,"create_table_object");function V4(e){return e=Cf(e),Xt.table.presence={message:wf},Xt.attribute.presence={message:wf},Xt.hash_attribute.presence=!1,If.validateObject(e,Xt)}a(V4,"attribute_object");function K4(e){return e=Cf(e),Xt.table.presence={message:wf},Xt.attribute.presence=!1,Xt.hash_attribute.presence=!1,If.validateObject(e,Xt)}a(K4,"describe_table");function Y4(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(Y4,"validateTableResidence");UL.exports={schema_object:G4,create_table_object:$4,table_object:q4,attribute_object:V4,describe_table:K4,validateTableResidence:Y4}});var BL=I((ARe,xL)=>{"use strict";var W4=require("uuid"),lR=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||W4.v4(),this.schema_table=`${this.schema}.${this.table}`}};xL.exports=lR});var dm=I((yRe,HL)=>{"use strict";var z4=BL(),uR=class extends z4{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}};HL.exports=uR});var FL=I((ORe,kL)=>{"use strict";kL.exports=j4;var Q4="inserted";function j4(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===Q4?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(j4,"returnObject")});var fm=I((IRe,VL)=>{"use strict";var J4=(H(),D(q)),dR=ft(),X4=pc(),{getSystemSchemaPath:Z4,getSchemaPath:e3}=gt(),wRe=Zi(),t3=um(),r3=dm(),n3=FL(),{handleHDBError:GL,hdb_errors:$L}=he(),qL=oe(),{HTTP_STATUS_CODES:s3}=$L,i3="inserted";VL.exports=o3;async function o3(e){let t=t3.attribute_object(e);if(t)throw GL(new Error,t.message,$L.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&qL.checkGlobalSchemaTable(e.schema,e.table);if(r)throw GL(new Error,r,s3.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=qL.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 r3(e.schema,e.table,e.attribute,e.id);try{let i=await dR.openEnvironment(e3(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}`);dR.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await dR.openEnvironment(Z4(),J4.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await X4.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdb_attribute_attributes,[s]);return n3(i3,c,{records:[s]},l)}catch(i){throw i}}a(o3,"lmdbCreateAttribute")});var Pf=I((DRe,YL)=>{"use strict";var eo=oe(),KL=j(),PRe=BA(),{getDatabases:a3}=(Me(),D(st)),{ClientError:mc}=he();YL.exports=c3;function c3(e){if(eo.isEmpty(e))throw new mc("invalid update parameters defined.");if(eo.isEmptyOrZeroLength(e.schema))throw new mc("invalid schema specified.");if(eo.isEmptyOrZeroLength(e.table))throw new mc("invalid table specified.");if(!Array.isArray(e.records))throw new mc("records must be an array");let t=a3()[e.schema]?.[e.table];if(eo.isEmpty(t))throw new mc(`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&&eo.isEmptyOrZeroLength(o[r]))throw KL.error("a valid hash attribute must be provided with update record:",o),new mc("a valid hash attribute must be provided with update record, check log for more info");if(!eo.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw KL.error(`a valid hash value must be provided with ${e.operation} record:`,o),new mc(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!eo.isEmpty(o[r])&&o[r]!==""&&n.has(eo.autoCast(o[r]))&&(o.skip=!0),n.add(eo.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(c3,"insertUpdateValidate")});var zL=I((MRe,WL)=>{"use strict";var fR=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};WL.exports=fR});var JL=I((URe,jL)=>{"use strict";var _R=ft(),l3=j(),QL=Cn().LMDB_ERRORS_ENUM;jL.exports=u3;async function u3(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 _R.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==QL.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await _R.closeEnvironment(global.lmdb_map[n]),await _R.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==QL.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){l3.error(t)}}a(u3,"cleanLMDBMap")});var uM=I((HRe,lM)=>{"use strict";var hR=require("recursive-iterator"),d3=require("alasql"),pR=require("clone"),XL=oe(),{handleHDBError:ZL,hdb_errors:f3}=he(),{HDB_ERROR_MSGS:eM,HTTP_STATUS_CODES:tM}=f3,{getDatabases:_3}=(Me(),D(st)),h3=["DISTINCT_ARRAY"],rM=Symbol("validateTables"),mR=Symbol("validateTable"),BRe=Symbol("getAllColumns"),nM=Symbol("validateAllColumns"),_m=Symbol("findColumn"),sM=Symbol("validateOrderBy"),Df=Symbol("validateSegment"),ER=Symbol("validateColumn"),iM=Symbol("setColumnsForTable"),oM=Symbol("checkColumnsForAsterisk"),aM=Symbol("validateGroupBy"),cM=Symbol("hasColumns"),gR=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[rM](),this[oM](),this[nM]()}[rM](){if(this[cM]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[mR](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[mR](t.table)})}}[cM](){let t=!1,r=new hR(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[mR](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=_3();if(!r[t.databaseid])throw ZL(new Error,eM.SCHEMA_NOT_FOUND(t.databaseid),tM.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw ZL(new Error,eM.TABLE_NOT_FOUND(t.databaseid,t.tableid),tM.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=pR(s);i.table=pR(t),this.attributes.push(i)})}[_m](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)}[oM](){let t=new hR(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[iM](r.tableid)}[iM](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new d3.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[nM](){this[Df](this.statement.columns,!1),this[Df](this.statement.joins,!1),this[Df](this.statement.where,!1),this[aM](this.statement.group,!1),this[Df](this.statement.order,!0)}[Df](t,r){if(!t)return;let n=new hR(t),s=[];for(let{node:i,path:o}of n)!XL.isEmpty(i)&&!XL.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[sM](i):s.push(this[ER](i)));return s}[aM](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&h3.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=pR(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[_m](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[_m](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`}[sM](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[ER](t)}[ER](t){let r=this[_m](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]}};lM.exports=gR});var hM=I((FRe,_M)=>{"use strict";var dM=require("lodash"),Lf=require("mathjs"),p3=require("jsonata"),fM=oe();_M.exports={distinct_array:a(e=>Array.isArray(e)&&e.length>1?dM.uniqWith(e,dM.isEqual):e,"distinct_array"),searchJSON:m3,mad:Mf.bind(null,Lf.mad),mean:Mf.bind(null,Lf.mean),mode:Mf.bind(null,Lf.mode),prod:Mf.bind(null,Lf.prod),median:Mf.bind(null,Lf.median)};function Mf(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(Mf,"aggregateFunction");function m3(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(fM.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),fM.isEmpty(this.__ala__.res[r])){let n=p3(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(m3,"searchJSON")});var mM=I((qRe,pM)=>{"use strict";var Zt=require("moment"),SR="YYYY-MM-DDTHH:mm:ss.SSSZZ";Zt.suppressDeprecationWarnings=!0;pM.exports={current_date:a(()=>Zt().utc().format("YYYY-MM-DD"),"current_date"),current_time:a(()=>Zt().utc().format("HH:mm:ss.SSS"),"current_time"),extract:a((e,t)=>{switch(t.toLowerCase()){case"year":return Zt(e).utc().format("YYYY");case"month":return Zt(e).utc().format("MM");case"day":return Zt(e).utc().format("DD");case"hour":return Zt(e).utc().format("HH");case"minute":return Zt(e).utc().format("mm");case"second":return Zt(e).utc().format("ss");case"millisecond":return Zt(e).utc().format("SSS");default:break}},"extract"),date:a(e=>Zt(e).utc().format(SR),"date"),date_format:a((e,t)=>Zt(e).utc().format(t),"date_format"),date_add:a((e,t,r)=>Zt(e).utc().add(t,r).valueOf(),"date_add"),date_sub:a((e,t,r)=>Zt(e).utc().subtract(t,r).valueOf(),"date_sub"),date_diff:a((e,t,r)=>{let n=Zt(e).utc(),s=Zt(t).utc();return r?n.diff(s,r,!0):n.diff(s)},"date_diff"),now:a(()=>Zt().utc().valueOf(),"now"),get_server_time:a(()=>Zt().format(SR),"get_server_time"),offset_utc:a((e,t)=>Zt(e).utc().utcOffset(t).format(SR),"offset_utc")}});var TM=I((VRe,SM)=>{"use strict";var E3=require("@turf/area"),g3=require("@turf/length"),S3=require("@turf/circle"),T3=require("@turf/difference"),A3=require("@turf/distance"),R3=require("@turf/boolean-contains"),y3=require("@turf/boolean-equal"),b3=require("@turf/boolean-disjoint"),O3=require("@turf/helpers"),EM=(H(),D(q)),Ge=oe(),to=j();SM.exports={geoArea:N3,geoLength:w3,geoCircle:I3,geoDifference:C3,geoDistance:gM,geoNear:P3,geoContains:D3,geoEqual:L3,geoCrosses:M3,geoConvert:v3};function N3(e){if(Ge.isEmpty(e))return NaN;typeof e=="string"&&(e=Ge.autoCastJSON(e));try{return E3.default(e)}catch(t){return to.trace(t,e),NaN}}a(N3,"geoArea");function w3(e,t){if(Ge.isEmpty(e))return NaN;typeof e=="string"&&(e=Ge.autoCastJSON(e));try{return g3.default(e,{units:t||"kilometers"})}catch(r){return to.trace(r,e),NaN}}a(w3,"geoLength");function I3(e,t,r){if(Ge.isEmpty(e))return NaN;if(Ge.isEmpty(t))return NaN;typeof e=="string"&&(e=Ge.autoCastJSON(e));try{return S3.default(e,t,{units:r||"kilometers"})}catch(n){return to.trace(n,e,t),NaN}}a(I3,"geoCircle");function C3(e,t){if(Ge.isEmpty(e))return NaN;if(Ge.isEmpty(t))return NaN;typeof e=="string"&&(e=Ge.autoCastJSON(e)),typeof t=="string"&&(t=Ge.autoCastJSON(t));try{return T3(e,t)}catch(r){return to.trace(r,e,t),NaN}}a(C3,"geoDifference");function gM(e,t,r){if(Ge.isEmpty(e))return NaN;if(Ge.isEmpty(t))return NaN;typeof e=="string"&&(e=Ge.autoCastJSON(e)),typeof t=="string"&&(t=Ge.autoCastJSON(t));try{return A3.default(e,t,{units:r||"kilometers"})}catch(n){return to.trace(n,e,t),NaN}}a(gM,"geoDistance");function P3(e,t,r,n){if(Ge.isEmpty(e)||Ge.isEmpty(t))return!1;if(Ge.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=Ge.autoCastJSON(e)),typeof t=="string"&&(t=Ge.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return gM(e,t,n)<=r}catch(s){return to.trace(s,e,t),!1}}a(P3,"geoNear");function D3(e,t){if(Ge.isEmpty(e)||Ge.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ge.autoCastJSON(e)),typeof t=="string"&&(t=Ge.autoCastJSON(t));try{return R3.default(e,t)}catch(r){return to.trace(r,e,t),!1}}a(D3,"geoContains");function L3(e,t){if(Ge.isEmpty(e)||Ge.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ge.autoCastJSON(e)),typeof t=="string"&&(t=Ge.autoCastJSON(t));try{return y3.default(e,t)}catch(r){return to.trace(r,e,t),!1}}a(L3,"geoEqual");function M3(e,t){if(Ge.isEmpty(e)||Ge.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ge.autoCastJSON(e)),typeof t=="string"&&(t=Ge.autoCastJSON(t));try{return!b3.default(e,t)}catch(r){return to.trace(r,e,t),!1}}a(M3,"geoCrosses");function v3(e,t,r){if(Ge.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(Ge.isEmpty(t))throw new Error("geo_type is required");if(Ge.isEmpty(EM.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(EM.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Ge.autoCastJSON(e)),O3[t](e,r)}a(v3,"geoConvert")});var hm=I((YRe,AM)=>{var Ec=hM(),Bn=mM(),Ri=TM();AM.exports=e=>{e.aggr.mad=e.aggr.MAD=Ec.mad,e.aggr.mean=e.aggr.MEAN=Ec.mean,e.aggr.mode=e.aggr.MODE=Ec.mode,e.aggr.prod=e.aggr.PROD=Ec.prod,e.aggr.median=e.aggr.MEDIAN=Ec.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Ec.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Ec.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Bn.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Bn.current_time,e.fn.extract=e.fn.EXTRACT=Bn.extract,e.fn.date=e.fn.DATE=Bn.date,e.fn.date_format=e.fn.DATE_FORMAT=Bn.date_format,e.fn.date_add=e.fn.DATE_ADD=Bn.date_add,e.fn.date_sub=e.fn.DATE_SUB=Bn.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Bn.date_diff,e.fn.now=e.fn.NOW=Bn.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Bn.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Bn.get_server_time,e.fn.getdate=e.fn.GETDATE=Bn.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Bn.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Ri.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Ri.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Ri.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Ri.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Ri.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Ri.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Ri.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Ri.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Ri.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Ri.geoNear}});var OM=I((WRe,bM)=>{"use strict";var vf=require("lodash"),fn=require("alasql");fn.options.cache=!1;var U3=hm(),RM=require("clone"),pm=require("recursive-iterator"),Ue=j(),We=oe(),Xl=Hn(),x3=(H(),D(q)),{hdb_errors:B3}=he(),{getDatabases:yM}=(Me(),D(st)),H3="IS NULL",Bs="There was a problem performing this search. Please check the logs and try again.";U3(fn);var TR=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(Bs)}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(Bs)}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(Bs)}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(Bs)}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(Bs)}}_getColumns(){let t=new pm(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(RM(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=vf.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=yM()[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 pm(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 fn.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 fn.yy.LogicValue({value:i}):n instanceof fn.yy.StringValue&&We.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new fn.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 pm(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(x3.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 l=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<l.length;u++)if(l[u].value)n.add(l[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&&vf.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 fn.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(RM(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(H3)>-1&&this.tables.forEach(s=>{let i={columnid:yM()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=vf.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return s[o]||(s[o]=[],s[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(s[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,o=this.data[i].__hash_name,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},l=!1,u=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(l=!0),!We.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!We.isEmptyOrZeroLength(this.exact_search_values[u].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[u].values);let f=await Xl.getDataByHash(c);for(let d of c.hash_values)f.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d))}catch(f){throw Ue.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),Ue.error(f),new Error(Bs)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async f=>{let d={...c};d.search_value=f;let h=await Xl.getDataByValue(d);for(let[_,p]of h)this.data[i].__merged_data[_]?this._updateMergedAttribute(i,_,s.attribute,p[s.attribute]):(this.data[i].__merged_data[_]=[...n[i]],this._updateMergedAttribute(i,_,s.attribute,p[s.attribute]),this._setMergedHashAttribute(i,_))}))}catch(f){throw Ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),Ue.error(f),new Error(Bs)}else if(!We.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!We.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let f=this.comparator_search_values[u].comparators;for(let d=0,h=f.length;d<h;d++){let _=f[d];c.search_attribute=_.attribute,c.search_value=_.search_value;let p=await Xl.getDataByValue(c,_.operation);if(l)for(let[S]of p)this.data[i].__merged_data[S]||(this.data[i].__merged_data[S]=[...n[i]],this._setMergedHashAttribute(i,S));else for(let[S,g]of p)this.data[i].__merged_data[S]?this._updateMergedAttribute(i,S,s.attribute,g[s.attribute]):(this.data[i].__merged_data[S]=[...n[i]],this._updateMergedAttribute(i,S,s.attribute,g[s.attribute]),this._setMergedHashAttribute(i,S))}}catch(f){throw Ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),Ue.error(f),new Error(Bs)}else try{c.search_attribute=s.attribute,c.search_value="*";let f=await Xl.getDataByValue(c);if(l)for(let[d]of f)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d));else for(let[d,h]of f)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,s.attribute,h[s.attribute]):(this.data[i].__merged_data[d]=[...n[i]],this._updateMergedAttribute(i,d,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,d))}catch(f){throw Ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),Ue.error(f),new Error(Bs)}}}_isSimpleSelect(){let t=!0;return Object.keys(this.statement).length!==2||!this.statement.columns||!this.statement.from||this.statement.from.length!==1?(t=!1,t):(this.statement.columns.forEach(r=>{r instanceof fn.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 fn.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new fn.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 fn.yy.FuncValue:new fn.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(_=>{_.joinmode&&_.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(_.table);let p=_.joinmode+" JOIN ? AS "+(_.as?_.as:_.table.tableid);_.on&&(p+=" ON "+_.on.toString()),i.push(p),t.push(Object.values(this.data[`${_.table.databaseid_orig}_${_.table.as?_.table.as_orig:_.table.tableid_orig}`].__merged_data))});let o=[],c={};s.forEach(_=>{let p=this.data[`${_.databaseid_orig}_${_.as?_.as_orig:_.tableid_orig}`].__hash_name,S=_.as?_.as_orig:_.tableid_orig;o.push({key:`'${S}.${p}'`,schema:_.databaseid_orig,table:_.as?_.as_orig:_.tableid_orig,keys:new Set}),r.push(`${_.as?_.as:_.tableid}.\`${p}\` AS "${S}.${p}"`),c[_.as?_.as_orig:_.tableid_orig]=this.data[`${_.databaseid_orig}_${_.as?_.as_orig:_.tableid_orig}`].__merged_attributes});let l=this.statement.where?"WHERE "+this.statement.where:"";l=l.replace(/NOT\(NULL\)/g,"NOT NULL");let u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(_=>{_.is_func?r.push(_.initial_select_column.toString()):_.initial_select_column.tableid?r.push(`${_.initial_select_column.tableid}.${_.initial_select_column.columnid} AS ${_.expression.columnid}`):r.push(`${_.initial_select_column.columnid} AS ${_.expression.columnid}`)}));let f="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(f=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let h=[];try{let _=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${l} ${u} ${f} ${d}`,p=this._convertColumnsToIndexes(_,s);h=await fn.promise(p,t),t=null}catch(_){throw Ue.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),Ue.error(_),new Error("There was a problem processing the data.")}if(h&&h.length>0){for(let _=0,p=h.length;_<p;_++){let S=h[_];o.forEach(g=>{S[g.key]!==null&&S[g.key]!==void 0&&g.keys.add(S[g.key])})}o.forEach(_=>{let p=Object.keys(this.data[`${_.schema}_${_.table}`].__merged_data),S=vf.difference(p,[..._.keys].map(g=>g.toString()));for(let g=0,R=S.length;g<R;g++){let E=S[g];delete this.data[`${_.schema}_${_.table}`].__merged_data[E]}})}return{existing_attributes:c,joined_length:h?h.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new pm(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=vf.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(Bs)}}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 f in i)o.push(i[f][0]);this.data[n].__merged_attributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:o,get_attributes:s.columns},l=await Xl.getDataByHash(c),u=s.columns.length;for(let f=0,d=o.length;f<d;f++){let h=o[f],_=l.get(h);for(let p=0;p<u;p++){let S=s.columns[p],g=_[S]===void 0?null:_[S];this.data[n].__merged_data[h].push(g)}}}}catch(r){throw Ue.error("Error thrown from getDataByHash function in SQLSearch class method getData."),Ue.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(s=>{s.as=s.as?s.as:s.table.tableid,t.push(Object.values(this.data[`${s.table.databaseid_orig}_${s.table.as?s.table.as_orig:s.table.tableid_orig}`].__merged_data)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,l=o.aggregatorid?o.as_orig:c.as_orig;return s.expression.tableid?c.columnid_orig===s.expression.columnid_orig&&c.tableid_orig===s.expression.tableid_orig:c.columnid_orig===s.expression.columnid_orig||s.expression.columnid_orig===l}).length===0&&(s.expression.columnid=s.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let n;try{let s=this._buildSQL();Ue.trace(`Final SQL: ${s}`),n=await fn.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(B3.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),Ue.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return r=r.replace(/NOT\(NULL\)/g,"NOT NULL"),this.statement.columns.forEach(n=>{if(n.funcid&&n.as){let s=n.toString().replace(" AS "+n.as,"");r=r.replace(n.toString(),s)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let n=t,s={};r.forEach(i=>{i.databaseid_orig?s[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:s[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=s[i],u=new RegExp(`${l}.\`${o}\``,"g"),f=`${l}.[${c}]`;n=n.replace(u,f)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=new RegExp(`\`${o}\``,"g"),u=`[${c}]`;n=n.replace(l,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 Xl.getDataByValue(i);for(let[c,l]of o)this.data[s].__merged_data[c]||(l[n.attribute]===void 0&&(l[n.attribute]=null),this.data[s].__merged_data[c]={...r[s]}),this.data[s].__merged_data[c][t[n.attribute]]=l[n.attribute]??null}catch(o){throw Ue.error("There was an error when processing this SQL operation. Check your logs"),Ue.error(o),new Error(Bs)}}return Object.values(Object.values(this.data)[0].__merged_data)}};bM.exports=TR});var $r=I((QRe,NM)=>{"use strict";var k3=uM();NM.exports={searchByConditions:G3,searchByHash:q3,searchByValue:$3,search:V3};var AR=Hn(),{transformReq:RR}=oe(),F3=OM();async function G3(e){return RR(e),AR.searchByConditions(e)}a(G3,"searchByConditions");async function q3(e){RR(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of AR.searchByHash(e))r&&t.push(r);return t}a(q3,"searchByHash");async function $3(e){RR(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of AR.searchByValue(e))t.push(r);return t}a($3,"searchByValue");function V3(e,t){try{let r=new k3(e);r.validate(),new F3(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(V3,"search")});var ro=I((JRe,PM)=>{"use strict";var Uf=require("crypto"),K3=ce(),{CONFIG_PARAMS:Y3}=(H(),D(q)),IM="aes-256-cbc",W3=32,z3=16,yR=64,CM=32,Q3=yR+CM,wM=new Map;PM.exports={encrypt:j3,decrypt:J3,createNatsTableStreamName:X3};function j3(e){let t=Uf.randomBytes(W3),r=Uf.randomBytes(z3),n=Uf.createCipheriv(IM,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(j3,"encrypt");function J3(e){let t=e.substr(0,yR),r=e.substr(yR,CM),n=e.substr(Q3,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Uf.createDecipheriv(IM,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(J3,"decrypt");function X3(e,t){let r=K3.get(Y3.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=wM.get(r);return n||(n=Uf.createHash("md5").update(r).digest("hex"),wM.set(r,n)),n}a(X3,"createNatsTableStreamName")});var no=I((eye,MM)=>{"use strict";var ZRe=$r(),xf=j(),DM=um(),Z3=ro(),mm=oe(),{handleHDBError:Em,hdb_errors:eX}=he(),{HDB_ERROR_MSGS:gm,HTTP_STATUS_CODES:bR}=eX,LM=ce();LM.initSync();var{getDatabases:OR}=(Me(),D(st)),tX=require("fs-extra"),rX=(H(),D(q));MM.exports={describeAll:nX,describeTable:Sm,describeSchema:sX};async function nX(e={}){try{let t=mm.isEmptyOrZeroLength(e),r=!!e.bypass_auth,n,s;!t&&!r&&(n=e.hdb_user?.role?.permission,s=n?.super_user||n?.cluster_user);let i=OR(),o={},c={},l=[],u=e?.exact_count;for(let d in i){o[d]=!0,!t&&!s&&!r&&(c[d]=e.hdb_user?.role?.permission[d]?.describe);let h=i[d];for(let _ in h)try{let p;if(t||s||r)p=await Sm({schema:d,table:_,exact_count:u});else if(n&&n[d].describe&&n[d].tables[_].describe){let S=n[d].tables[_].attribute_permissions;p=await Sm({schema:d,table:_,exact_count:u},S)}p&&l.push(p)}catch(p){xf.error(p)}}let f={};for(let d in l)t||s||r?(f[l[d].schema]==null&&(f[l[d].schema]={}),f[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]):c[l[d].schema]&&(f[l[d].schema]==null&&(f[l[d].schema]={}),f[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]);for(let d in o)t||s||r?f[d]={}:c[d]&&(f[d]={});return f}catch(t){return xf.error("Got an error in describeAll"),xf.error(t),Em(new Error,gm.DESCRIBE_ALL_ERR)}}a(nX,"describeAll");async function Sm(e,t){mm.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=DM.describe_table(e);if(i)throw i;let c=OR()[r];if(!c)throw Em(new Error,gm.SCHEMA_NOT_FOUND(e.schema),bR.NOT_FOUND);let l=c[n];if(!l)throw Em(new Error,gm.TABLE_NOT_FOUND(e.schema,e.table),bR.NOT_FOUND);function u(_){f.push({attribute:_.attribute,type:_.type,elements:_.elements?.type,indexed:_.indexed,is_primary_key:_.isPrimaryKey,assigned_created_time:_.assignCreatedTime,assigned_updated_time:_.assignUpdatedTime,nullable:_.nullable,properties:_.properties?_.properties.map(p=>({type:p.type,name:p.name})):void 0})}a(u,"pushAtt");let f=[];if(s){let _={};s.forEach(p=>{p.describe&&(_[p.attribute_name]=!0)}),l.attributes.forEach(p=>{_[p.name]&&u(p)})}else l.attributes?.forEach(_=>u(_));let d;try{d=(await tX.stat(l.primaryStore.env.path)).size}catch(_){xf.warn("unable to get database size",_)}let h={schema:r,name:l.tableName,hash_attribute:l.attributes.find(_=>_.isPrimaryKey||_.is_hash_attribute)?.name,audit:l.audit,schema_defined:l.schemaDefined,attributes:f,db_size:d};l.replicate!==void 0&&(h.replicate=l.replicate),l.expirationMS!==void 0&&(h.expiration=l.expirationMS/1e3+"s"),l.sealed!==void 0&&(h.sealed=l.sealed),l.sources?.length>0&&(h.sources=l.sources.map(_=>_.name).filter(_=>_&&_!=="NATSReplicator"&&_!=="Replicator")),LM.get(rX.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(h.clustering_stream_name=Z3.createNatsTableStreamName(h.schema,h.name));try{let _=await l.getRecordCount({exactCount:e.exact_count==="true"});h.record_count=_.recordCount,h.table_size=l.getSize(),h.db_audit_size=l.getAuditSize(),h.estimated_record_range=_.estimatedRange;let p=l.auditStore;if(p)for(let S of p.getKeys({reverse:!0,limit:1}))h.last_updated_record=S[0];if(!h.last_updated_record&&l.indices.__updatedtime__)for(let S of l.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))h.last_updated_record=S}catch(_){xf.warn(`unable to stat table dbi due to ${_}`)}return h}a(Sm,"descTable");async function sX(e){mm.transformReq(e);let t=DM.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=OR()[n];if(!i)throw Em(new Error,gm.SCHEMA_NOT_FOUND(e.schema),bR.NOT_FOUND);let o={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),mm.isEmpty(l)||l.describe){let u=await Sm({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);u&&(o[u.name]=u)}}return o}a(sX,"describeSchema")});var Hs=I((sye,HM)=>{var iX=Zi(),{callbackify:UM,promisify:oX}=require("util"),{getDatabases:xM}=(Me(),D(st));HM.exports={setSchemaDataToGlobal:vM,getTableSchema:aX,getSystemSchema:cX,setSchemaDataToGlobalAsync:oX(vM)};var BM=no(),rye=UM(BM.describeAll),nye=UM(BM.describeTable);function vM(e){global.hdb_schema=xM(),e&&e()}a(vM,"setSchemaDataToGlobal");function aX(e,t,r){let n=xM()[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(aX,"getTableSchema");function cX(){return iX}a(cX,"getSystemSchema")});var wR=I((oye,GM)=>{var lX=dt(),NR=require("joi"),{hdb_table:uX,hdb_database:kM}=Si(),FM={schema:kM,database:kM,table:uX},dX={date:NR.date().iso().required()},fX={timestamp:NR.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};GM.exports=function(e,t){let r=t==="timestamp"?{...FM,...fX}:{...FM,...dX},n=NR.object(r);return lX.validateBySchema(e,n)}});var VM=I((aye,$M)=>{var _X=dt(),IR=require("joi"),{hdb_table:hX,hdb_database:qM}=Si(),pX=IR.object({schema:qM,database:qM,table:hX,hash_values:IR.array().required(),ids:IR.array()});$M.exports=function(e){return _X.validateBySchema(e,pX)}});var LR=I((cye,KM)=>{"use strict";var CR=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}},PR=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}},DR=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};KM.exports={InsertObject:CR,NoSQLSeachObject:PR,DeleteResponseObject:DR}});var Tc=I((uye,jM)=>{"use strict";var WM=wR(),mX=VM(),gc=oe(),YM=require("moment"),zM=j(),{promisify:EX,callbackify:gX}=require("util"),Sc=(H(),D(q)),SX=Hs(),MR=EX(SX.getTableSchema),vR=Hn(),{DeleteResponseObject:TX}=LR(),{handleHDBError:na,hdb_errors:AX}=he(),{HDB_ERROR_MSGS:Tm,HTTP_STATUS_CODES:sa}=AX,RX="records successfully deleted",yX=gX(QM);jM.exports={delete:yX,deleteRecord:QM,deleteFilesBefore:bX,deleteAuditLogsBefore:OX};async function bX(e){let t=WM(e,"date");if(t)throw na(t,t.message,sa.BAD_REQUEST,void 0,void 0,!0);if(gc.transformReq(e),!YM(e.date,YM.ISO_8601).isValid())throw na(new Error,Tm.INVALID_DATE,sa.BAD_REQUEST,Sc.LOG_LEVELS.ERROR,Tm.INVALID_DATE,!0);let n=gc.checkSchemaTableExist(e.schema,e.table);if(n)throw na(new Error,n,sa.NOT_FOUND,Sc.LOG_LEVELS.ERROR,n,!0);let s=await vR.deleteRecordsBefore(e);if(await MR(e.schema,e.table),zM.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(bX,"deleteFilesBefore");async function OX(e){let t=WM(e,"timestamp");if(t)throw na(t,t.message,sa.BAD_REQUEST,void 0,void 0,!0);if(gc.transformReq(e),isNaN(e.timestamp))throw na(new Error,Tm.INVALID_VALUE("Timestamp"),sa.BAD_REQUEST,Sc.LOG_LEVELS.ERROR,Tm.INVALID_VALUE("Timestamp"),!0);let r=gc.checkSchemaTableExist(e.schema,e.table);if(r)throw na(new Error,r,sa.NOT_FOUND,Sc.LOG_LEVELS.ERROR,r,!0);let n=await vR.deleteAuditLogsBefore(e);return await MR(e.schema,e.table),zM.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(OX,"deleteAuditLogsBefore");async function QM(e){e.ids&&(e.hash_values=e.ids);let t=mX(e);if(t)throw na(t,t.message,sa.BAD_REQUEST,void 0,void 0,!0);gc.transformReq(e);let r=gc.checkSchemaTableExist(e.schema,e.table);if(r)throw na(new Error,r,sa.NOT_FOUND,Sc.LOG_LEVELS.ERROR,r,!0);try{await MR(e.schema,e.table);let n=await vR.deleteRecords(e);return gc.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${RX}`),n}catch(n){if(n.message===Sc.SEARCH_NOT_FOUND_MESSAGE){let s=new TX;return s.message=Sc.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(QM,"deleteRecord")});var Am={};ve(Am,{HASH_FUNCTION:()=>kf,hash:()=>BR,validate:()=>HR});function UR(e=Hf){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ";return Array.from(Bf.randomBytes(e)).map(r=>t[r%t.length]).join("")}function BR(e,t=kf[XM?.toUpperCase()]??"sha256"){return xR[t](e)}function HR(e,t,r=kf[XM?.toUpperCase()]??"sha256"){return e?NX[r](e,t):!1}var Bf,Zl,JM,XM,Hf,ZM,kf,xR,NX,Rm=be(()=>{Bf=M(require("node:crypto")),Zl=M(require("argon2")),JM=M(ce());H();XM=(0,JM.get)(B.AUTHENTICATION_HASHFUNCTION)?.toLowerCase(),Hf=16,ZM=9,kf=(n=>(n.MD5="md5",n.SHA256="sha256",n.ARGON2ID="argon2id",n))(kf||{});a(UR,"generateSalt");xR={md5:a((e,t=void 0)=>{t=t??UR(ZM);let r=Bf.createHash("md5").update(e+t).digest("hex");return t+r},"md5"),sha256:a((e,t=void 0)=>{t=t??UR(Hf);let r=Bf.createHash("sha256").update(e+t).digest("hex");return t+r},"sha256"),argon2id:a(async e=>{let t=UR(Hf),r=await Zl.hash(e,{type:Zl.argon2id,salt:Buffer.from(t)});return t+r},"argon2id")},NX={md5:a((e,t)=>{let r=e.slice(0,ZM);return e===xR.md5(t,r)},"md5"),sha256:a((e,t)=>{let r=e.slice(0,Hf);return e===xR.sha256(t,r)},"sha256"),argon2id:a(async(e,t)=>await Zl.verify(e.slice(Hf),t),"argon2id")};a(BR,"hash");a(HR,"validate")});var tv=I((hye,ev)=>{var kR=dt(),Vr={username:{presence:!0,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 wX(e){return Vr.password.presence=!0,Vr.username.presence=!0,Vr.role.presence=!0,Vr.active.presence=!0,kR.validateObject(e,Vr)}a(wX,"addUserValidation");function IX(e){return Vr.password.presence=!1,Vr.username.presence=!0,Vr.role.presence=!1,Vr.active.presence=!1,kR.validateObject(e,Vr)}a(IX,"alterUserValidation");function CX(e){return Vr.password.presence=!1,Vr.username.presence=!0,Vr.role.presence=!1,Vr.active.presence=!1,kR.validateObject(e,Vr)}a(CX,"dropUserValidation");ev.exports={addUserValidation:wX,alterUserValidation:IX,dropUserValidation:CX}});var Nt=I((Eye,nv)=>{"use strict";var{platform:mye}=require("os"),PX="nats-server.zip",FR="nats-server",DX=process.platform==="win32"?`${FR}.exe`:FR,LX=/^[^\s.,*>]+$/,rv="__request__",MX=a(e=>`${e}.${rv}`,"REQUEST_SUBJECT"),vX={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},UX={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},xX={HUB:"hub.pid",LEAF:"leaf.pid"},BX={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},HX={SUCCESS:"success",ERROR:"error"},kX={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},FX={TXN:"txn",MSGID:"msgid"},eu={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},GX={[eu.ERR]:1,[eu.WRN]:2,[eu.INF]:3,[eu.DBG]:4,[eu.TRC]:5},qX={debug:"-D",trace:"-DVV"};nv.exports={NATS_SERVER_ZIP:PX,NATS_SERVER_NAME:FR,NATS_BINARY_NAME:DX,PID_FILES:xX,NATS_CONFIG_FILES:UX,SERVER_SUFFIX:BX,NATS_TERM_CONSTRAINTS_RX:LX,REQUEST_SUFFIX:rv,UPDATE_REMOTE_RESPONSE_STATUSES:HX,CLUSTER_STATUS_STATUSES:kX,REQUEST_SUBJECT:MX,SUBJECT_PREFIXES:FX,MSG_HEADERS:vX,LOG_LEVELS:eu,LOG_LEVEL_FLAGS:qX,LOG_LEVEL_HIERARCHY:GX}});var GR=I(sv=>{"use strict";var $X={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
17
17
  `),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
18
- `)},dX="certificate.pem",fX="privateKey.pem",_X="caCertificate.pem",hX="natsCertificate.pem",pX="natsCaCertificate.pem",gt={DEFAULT:"default","DEFAULT-CA":"default-ca",SERVER:"server",CA:"ca","OPERATIONS-API":"operations-api","OPERATIONS-CA":"operations-ca"},EX={tls_certificate:gt.SERVER,tls_certificateAuthority:gt.CA,customFunctions_tls_certificate:gt.SERVER,customFunctions_tls_certificateAuthority:gt.CA,operationsApi_tls_certificate:gt["OPERATIONS-API"],operationsApi_tls_certificateAuthority:gt["OPERATIONS-CA"]},mX={[gt.SERVER]:2,[gt.DEFAULT]:1},gX={[gt["OPERATIONS-API"]]:3,[gt.SERVER]:2,[gt.DEFAULT]:1},SX={[gt["OPERATIONS-API"]]:3,[gt.SERVER]:2,[gt.DEFAULT]:1},TX={[gt["OPERATIONS-CA"]]:3,[gt.CA]:2,[gt["DEFAULT-CA"]]:1},AX={[gt["OPERATIONS-CA"]]:3,[gt.CA]:2,[gt["DEFAULT-CA"]]:1},RX={[gt.CA]:2,[gt["DEFAULT-CA"]]:1};Object.assign(BM,{CERTIFICATE_PEM_NAME:dX,PRIVATEKEY_PEM_NAME:fX,CA_PEM_NAME:_X,CERT_NAME:gt,CERT_CONFIG_NAME_MAP:EX,CERT_PREFERENCE_APP:mX,CERT_PREFERENCE_OPS:gX,CERT_PREFERENCE_REP:SX,CA_CERT_PREFERENCE_REP:TX,CA_CERT_PREFERENCE_OPS:AX,CA_CERT_PREFERENCE_APP:RX,CERTIFICATE_VALUES:uX,NATS_CERTIFICATE_PEM_NAME:hX,NATS_CA_PEM_NAME:pX})});var NR=P((dye,$M)=>{"use strict";var GM=require("fs-extra"),Se=require("joi"),yX=require("os"),{boolean:He,string:St,number:tr,array:Rc}=Se.types(),{totalmem:HM}=require("os"),Ac=require("path"),bX=j(),OR=ae(),uye=bR(),kM=(H(),D(q)),OX=pt(),FM="log",NX="components",wX="Invalid logging.rotation.maxSize unit. Available units are G, M or K",IX="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",CX="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",PX="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",DX="rootPath config parameter is undefined",_n=Se.alternatives([tr.min(0),St]).optional().empty(null),pE=Se.alternatives([Rc.items(St,{host:St.required(),port:_n},{hostname:St.required(),port:_n}).empty(null),Rc.items(St)]),bi,qM=!1;$M.exports={configValidator:LX,routesValidator:HX,route_constraints:pE};function LX(e,t=!1){if(qM=t,bi=e.rootPath,OR.isEmpty(bi))throw DX;let r=He.optional(),n=tr.min(0).max(1e3).empty(null).default(BX),s=St.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Mf),i=St.optional().empty(null),o=St.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=Se.string().empty(null).default(Mf),l=Se.custom(vX).empty(null).default(Mf),u=e.clustering?.enabled,f=Se.object({certificate:i,certificateAuthority:i,privateKey:i}),d;return u===!0?d=Se.object({enabled:r,hubServer:Se.object({cluster:Se.object({name:Se.required().empty(null),network:Se.object({port:_n,routes:pE}).required()}).required(),leafNodes:Se.object({network:Se.object({port:_n}).required()}).required(),network:Se.object({port:_n}).required()}).required(),leafServer:Se.object({network:Se.object({port:_n,routes:pE}).required(),streams:Se.object({maxAge:tr.min(120).allow(null).optional(),maxBytes:tr.min(1).allow(null).optional(),maxMsgs:tr.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:Se.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:He.optional(),databaseLevel:He.optional(),tls:Se.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:He.required(),verify:He.optional()}),user:St.optional().empty(null)}).optional():d=Se.object({enabled:r,tls:Se.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:He.optional()})}).optional(),Se.object({authentication:Se.alternatives(Se.object({authorizeLocal:He,cacheTTL:tr.required(),enableSessions:He,hashFunction:St.valid("md5","sha256","argon2id").optional().empty(null)}),He).optional(),analytics:Se.object({aggregatePeriod:tr}),replication:Se.object({hostname:Se.alternatives(St,tr).optional().empty(null),url:St.optional().empty(null),port:_n,securePort:_n,routes:Rc.optional().empty(null),databases:Se.alternatives(St,Rc),enableRootCAs:He.optional(),copyTablesToCatchUp:He.optional()}).optional(),componentsRoot:s.optional(),clustering:d,localStudio:Se.object({enabled:r}).required(),logging:Se.object({auditAuthEvents:Se.object({logFailed:He,logSuccessful:He}),file:He.required(),level:Se.valid("notify","fatal","error","warn","info","debug","trace"),rotation:Se.object({enabled:He.optional(),compress:He.optional(),interval:St.custom(xX).optional().empty(null),maxSize:St.custom(UX).optional().empty(null),path:St.optional().empty(null).default(Mf)}).required(),root:s,stdStreams:He.required(),auditLog:He.required()}).required(),operationsApi:Se.object({network:Se.object({cors:He.optional(),corsAccessList:Rc.optional(),headersTimeout:tr.min(1).optional(),keepAliveTimeout:tr.min(1).optional(),port:_n,domainSocket:Se.optional().empty("hdb/operations-server").default(Mf),securePort:_n,timeout:tr.min(1).optional()}).optional(),tls:Se.alternatives([Se.array().items(f),f])}).required(),rootPath:St.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:Se.object({network:Se.object({port:_n,securePort:_n,mtls:Se.alternatives([He.optional(),Se.object({user:St.optional(),certificateAuthority:i,required:He.optional()})])}).required(),webSocket:He.optional(),requireAuthentication:He.optional()}),http:Se.object({compressionThreshold:tr.optional(),cors:He.optional(),corsAccessList:Rc.optional(),headersTimeout:tr.min(1).optional(),port:_n,securePort:_n,maxHeaderSize:tr.optional(),mtls:Se.alternatives([He.optional(),Se.object({user:St.optional(),certificateAuthority:i,required:He.optional()})]),threadRange:Se.alternatives([Rc.optional(),St.optional()])}).required(),threads:Se.alternatives(n.optional(),Se.object({count:n.optional(),debug:Se.alternatives(He.optional(),Se.object({startingPort:tr.min(1).optional(),host:St.optional(),waitForDebugger:He.optional()})),maxHeapMemory:tr.min(0).optional()})),storage:Se.object({writeAsync:He.required(),overlappingSync:He.optional(),caching:He.optional(),compression:Se.alternatives([He.optional(),Se.object({dictionary:St.optional(),threshold:tr.optional()})]),compactOnStart:He.optional(),compactOnStartKeepBackup:He.optional(),noReadAhead:He.optional(),path:l,prefetchWrites:He.optional(),maxFreeSpaceToLoad:tr.optional(),maxFreeSpaceToRetain:tr.optional()}).required(),ignoreScripts:He.optional(),tls:Se.alternatives([Se.array().items(f),f])}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(LX,"configValidator");function MX(e){return qM||GM.existsSync(e)?null:`Specified path ${e} does not exist.`}a(MX,"doesPathExist");function vX(e,t){Se.assert(e,St.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=MX(e);if(r)return t.message(r)}a(vX,"validatePath");function UX(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(wX);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(CX):e}a(UX,"validateRotationMaxSize");function xX(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(IX);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(PX):e}a(xX,"validateRotationInterval");function BX(e,t){let r=t.state.path.join("."),n=yX.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||HM();return i=Math.round(Math.min(i,HM())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),bX.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(BX,"setDefaultThreads");function Mf(e,t){let r=t.state.path.join(".");if(!OR.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(OR.isEmpty(bi))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return Ac.join(bi,NX);case"logging.root":return Ac.join(bi,FM);case"clustering.leafServer.streams.path":return Ac.join(bi,"clustering","leaf");case"storage.path":let n=Ac.join(bi,kM.LEGACY_DATABASES_DIR_NAME);return GM.existsSync(n)?n:Ac.join(bi,kM.DATABASES_DIR_NAME);case"logging.rotation.path":return Ac.join(bi,FM);case"operationsApi.network.domainSocket":return r==null?null:Ac.join(bi,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Mf,"setDefaultRoot");function HX(e){let t=Se.object({routes:pE});return OX.validateBySchema({routes:e},t)}a(HX,"routesValidator")});var wt=P(ev=>{"use strict";var ds=(H(),D(q)),pr=ae(),rr=j(),{configValidator:kX,routesValidator:VM}=NR(),Wr=require("fs-extra"),YM=require("yaml"),Gn=require("path"),FX=require("is-number"),WM=require("properties-reader"),GX=require("lodash"),{handleHDBError:qX}=_e(),{HTTP_STATUS_CODES:$X,HDB_ERROR_MSGS:jl}=Ln(),{server:VX}=($r(),D(ic)),{PACKAGE_ROOT:zM}=_t(),{DATABASES_PARAM_CONFIG:vf,CONFIG_PARAMS:Fn,CONFIG_PARAM_MAP:qs}=ds,KX="Unable to get config value because config is uninitialized",YX="Config successfully initialized",WX="Error backing up config file",zX="Empty parameter sent to getConfigValue",QM=Gn.join(zM,"config","yaml",ds.HDB_DEFAULT_CONFIG_FILE),QX=Gn.join(zM,"config","yaml","defaultNatsConfig.yaml"),jX="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",KM={logging_rotation_retain:"logging.rotation.retain",logging_rotation_rotate:"logging.rotation.rotate",logging_rotation_rotateinterval:"logging.rotation.rotateInterval",logging_rotation_rotatemodule:"logging.rotation.rotateModule",logging_rotation_timezone:"logging.rotation.timezone",logging_rotation_workerinterval:"logging.rotation.workerInterval"},EE,Nt,mE;Object.assign(ev,{createConfigFile:JX,getDefaultConfig:XX,getConfigValue:JM,initConfig:gE,flattenConfig:Jl,updateConfigValue:XM,updateConfigObject:eZ,getConfiguration:nZ,setConfiguration:sZ,readConfigFile:PR,getClusteringRoutes:iZ,initOldConfig:ZM,getConfigFromFile:oZ,getConfigFilePath:yc,addConfig:aZ,deleteConfigFromFile:cZ,getConfigObj:lZ,resolvePath:wR,getFlatConfigObj:uZ});function wR(e){if(e?.startsWith("~/"))return Gn.join(pr.getHomeDir(),e.slice(1));let t=ce();return Gn.resolve(t.getHdbBasePath(),e)}a(wR,"resolvePath");function JX(e,t=!1){let r=la(QM);if(e.clustering_enabled||e.CLUSTERING_ENABLED||e.clustering){let c=YM.parseDocument(Wr.readFileSync(QX,"utf8"),{simpleKeys:!0});r.addIn(["clustering"],c.toJSON().clustering)}EE=Jl(r.toJSON());let n;for(let c in e){let l=qs[c.toLowerCase()];if(l===Fn.DATABASES){Array.isArray(e[c])?n=e[c]:n=Object.keys(e[c]).map(u=>({[u]:e[c][u]}));continue}if(!l&&(c.endsWith("_package")||c.endsWith("_port"))&&(l=c),l!==void 0){let u=l.split("_"),f=IR(l,e[c]);l==="rootPath"&&f?.endsWith("/")&&(f=f.slice(0,-1));try{r.setIn([...u],f)}catch(d){rr.error(d)}}}n&&jM(r,n),CR(r,t);let s=r.toJSON();Nt=Jl(s);let i=r.getIn(["rootPath"]),o=Gn.join(i,ds.HDB_CONFIG_FILE);if(Wr.createFileSync(o),r.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${r.errors}`);Wr.writeFileSync(o,String(r)),rr.trace(`Config file written to ${o}`)}a(JX,"createConfigFile");function jM(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!pr.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(vf.TABLES))for(let i in n[s][vf.TABLES])for(let o in n[s][vf.TABLES][i]){let c=n[s][vf.TABLES][i][o],l=[Fn.DATABASES,s,vf.TABLES,i,o];e.hasIn(l)?e.setIn(l,c):e.addIn(l,c)}else for(let i in n[s]){let o=n[s][i],c=[Fn.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){rr.error("Error parsing schemas CLI/env config arguments",n)}}a(jM,"setSchemasConfig");function XX(e){if(EE===void 0){let r=la(QM);EE=Jl(r.toJSON())}let t=qs[e.toLowerCase()];if(t!==void 0)return EE[t.toLowerCase()]}a(XX,"getDefaultConfig");function JM(e){if(e==null){rr.info(zX);return}if(Nt===void 0){rr.trace(KX);return}let t=qs[e.toLowerCase()];if(t!==void 0)return Nt[t.toLowerCase()]}a(JM,"getConfigValue");function yc(e=pr.getPropsFilePath()){let t=pr.getEnvCliRootPath();if(t)return wR(Gn.join(t,ds.HDB_CONFIG_FILE));let r=WM(e);return wR(r.get(ds.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}a(yc,"getConfigFilePath");function gE(e=!1){if(Nt===void 0||e){let t;if(!pr.noBootFile()){t=pr.getPropsFilePath();try{Wr.accessSync(t,Wr.constants.F_OK|Wr.constants.R_OK)}catch(i){throw rr.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=yc(t),n;if(r.includes("config/settings.js"))try{ZM(r);return}catch(i){if(i.code!==ds.NODE_ERROR_CODES.ENOENT)throw i}try{n=la(r)}catch(i){if(i.code===ds.NODE_ERROR_CODES.ENOENT){rr.trace(`HarperDB config file not found at ${r}.
19
- This can occur during early stages of install where the config file has not yet been created`);return}else throw rr.error(i),new Error(`Error reading HarperDB config file at ${r}`)}ZX(n,r),CR(n);let s=n.toJSON();if(VX.config=s,Nt=Jl(s),Nt.logging_rotation_rotate)for(let i in KM)Nt[i]&&rr.error(`Config ${KM[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);rr.trace(YX)}}a(gE,"initConfig");function ZX(e,t){let r=e.getIn(["rootPath"]),n=!1;if(e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Gn.join(r,"database")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Gn.join(r,"log")),n=!0),e.hasIn(["authentication"])||(e.addIn(["authentication"],{cacheTTL:3e4,enableSessions:!0,operationTokenTimeout:e.getIn(["operationsApi","authentication","operationTokenTimeout"])??"1d",refreshTokenTimeout:e.getIn(["operationsApi","authentication","refreshTokenTimeout"])??"30d"}),n=!0),e.hasIn(["analytics"])||(e.addIn(["analytics"],{aggregatePeriod:60}),n=!0),n){if(rr.trace("Updating config file with missing config params"),e.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${e.errors}`);Wr.writeFileSync(t,String(e))}}a(ZX,"checkForUpdatedConfig");function CR(e,t=!1){let r=e.toJSON();if(r.componentsRoot=r.componentsRoot??r?.customFunctions?.root,r?.http?.threads&&(r.threads=r?.http?.threads),r.http?.port&&r.http?.port===r.http?.securePort)throw jl.CONFIG_VALIDATION("http.port and http.securePort cannot be the same value");if(r.operationsApi?.network?.port&&r.operationsApi?.network?.port===r.operationsApi?.network?.securePort)throw jl.CONFIG_VALIDATION("operationsApi.network.port and operationsApi.network.securePort cannot be the same value");let n=kX(r,t);if(n.error)throw jl.CONFIG_VALIDATION(n.error.message);typeof n.value.threads=="object"?e.setIn(["threads","count"],n.value.threads.count):e.setIn(["threads"],n.value.threads),e.setIn(["componentsRoot"],n.value.componentsRoot),e.setIn(["logging","root"],n.value.logging.root),e.setIn(["storage","path"],n.value.storage.path),e.setIn(["logging","rotation","path"],n.value.logging.rotation.path),e.setIn(["operationsApi","network","domainSocket"],n.value?.operationsApi?.network?.domainSocket),r?.clustering?.enabled&&e.setIn(["clustering","leafServer","streams","path"],n.value.clustering.leafServer.streams?.path)}a(CR,"validateConfig");function eZ(e,t){Nt===void 0&&(Nt={});let r=qs[e.toLowerCase()];if(r===void 0){rr.trace(`Unable to update config object because config param '${e}' does not exist`);return}Nt[r.toLowerCase()]=t}a(eZ,"updateConfigObject");function XM(e,t,r=void 0,n=!1,s=!1,i=!1){Nt===void 0&&gE();let o=JM(qs.hdb_root),c=Gn.join(o,ds.HDB_CONFIG_FILE),l=la(c),u;if(r&&Nt){let h=!1;for(let _ in r)if(r[_]!=Nt[_.toLowerCase()]){h=!0;break}if(!h){rr.trace("No changes detected in config parameters, skipping update");return}}if(r===void 0&&e.toLowerCase()===Fn.DATABASES)u=t;else if(r===void 0){let h;if(i)h=e;else if(h=qs[e.toLowerCase()],h===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let _=h.split("_"),p=IR(h,t);l.setIn([..._],p)}else for(let h in r){let _=qs[h.toLowerCase()];if(_===Fn.HTTP_SECUREPORT&&r[h]===Nt[Fn.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),_===Fn.OPERATIONSAPI_NETWORK_SECUREPORT&&r[h]===Nt[Fn.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),_===Fn.DATABASES){u=r[h];continue}if(_?.startsWith("threads_")){let p=l.getIn(["threads"]);p>=0&&(l.deleteIn(["threads"]),l.setIn(["threads","count"],p))}if(!_&&(h.endsWith("_package")||h.endsWith("_port"))&&(_=h),_!==void 0){let p=_.split("_"),S=ds.LEGACY_CONFIG_PARAMS[h.toUpperCase()];S&&S.startsWith("customFunctions")&&l.hasIn(S.split("_"))&&(_=S,p=S.split("_"));let g=IR(_,r[h]);_==="rootPath"&&g?.endsWith("/")&&(g=g.slice(0,-1));try{p.length>1&&typeof l.getIn(p.slice(0,-1))=="boolean"&&l.deleteIn(p.slice(0,-1)),l.setIn([...p],g)}catch(T){rr.error(T)}}}u&&jM(l,u),CR(l);let f=l.getIn(["rootPath"]),d=Gn.join(f,ds.HDB_CONFIG_FILE);if(n===!0&&tZ(c,f),l.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${l.errors}`);Wr.writeFileSync(d,String(l)),s&&(Nt=Jl(l.toJSON())),rr.trace(`Config parameter: ${e} updated with value: ${t}`)}a(XM,"updateConfigValue");function tZ(e,t){try{let r=Gn.join(t,"backup",`${new Date(Date.now()).toISOString().replaceAll(":","-")}-${ds.HDB_CONFIG_FILE}.bak`);Wr.copySync(e,r),rr.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){rr.error(WX),rr.error(r)}}a(tZ,"backupConfigFile");var rZ=["databases"];function Jl(e){return e.http&&Object.assign(e.http,e?.customFunctions?.network),e?.operationsApi?.network&&(e.operationsApi.network={...e.http,...e.operationsApi.network}),e?.operationsApi&&(e.operationsApi.tls={...e.tls,...e.operationsApi.tls}),mE=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])&&!rZ.includes(i)){let o=r(n[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let l=i+"_"+c;!Fn[l.toUpperCase()]&&qs[l]&&(s[qs[l].toLowerCase()]=o[c]),s[l]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(Jl,"flattenConfig");function IR(e,t){if(e===Fn.CLUSTERING_NODENAME||e===Fn.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(FX(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||pr.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 pr.autoCast(t)}a(IR,"castConfigValue");function nZ(){let e=pr.getPropsFilePath(),t=yc(e);return la(t).toJSON()}a(nZ,"getConfiguration");async function sZ(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return XM(void 0,void 0,s,!0),jX}catch(i){throw typeof i=="string"||i instanceof String?qX(i,i,$X.BAD_REQUEST,void 0,void 0,!0):i}}a(sZ,"setConfiguration");function PR(){let e=pr.getPropsFilePath();try{Wr.accessSync(e,Wr.constants.F_OK|Wr.constants.R_OK)}catch(n){if(!pr.noBootFile())throw rr.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=yc(e);return la(t).toJSON()}a(PR,"readConfigFile");function la(e){return YM.parseDocument(Wr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(la,"parseYamlDoc");function iZ(){let e=PR(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=pr.isEmptyOrZeroLength(t)?[]:t;let r=VM(t);if(r)throw jl.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=pr.isEmptyOrZeroLength(n)?[]:n;let s=VM(n);if(s)throw jl.CONFIG_VALIDATION(s.message);if(!pr.isEmptyOrZeroLength(n)&&!pr.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!pr.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw jl.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(iZ,"getClusteringRoutes");function ZM(e){let t=WM(e);Nt={};for(let r in qs){let n=t.get(r.toUpperCase());if(pr.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=qs[r].toLowerCase();s===Fn.LOGGING_ROOT?Nt[s]=Gn.dirname(n):Nt[s]=n}return Nt}a(ZM,"initOldConfig");function oZ(e){let t=PR();return GX.get(t,e.replaceAll("_","."))}a(oZ,"getConfigFromFile");async function aZ(e,t){let r=la(yc());if(r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),r.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${r.errors}`);await Wr.writeFile(yc(),String(r))}a(aZ,"addConfig");function cZ(e){let t=yc(pr.getPropsFilePath()),r=la(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=Gn.join(n,ds.HDB_CONFIG_FILE);Wr.writeFileSync(s,String(r))}a(cZ,"deleteConfigFromFile");function lZ(){return mE||(gE(),mE)}a(lZ,"getConfigObj");function uZ(){return Nt||gE(),Nt}a(uZ,"getFlatConfigObj")});var qn=P((pye,Or)=>{"use strict";var nv="username is required",sv="nothing to update, must supply active, role or password to update",iv="password cannot be an empty string",ov="If role is specified, it cannot be empty.",av="active must be true or false";Or.exports.addUser=SZ;Or.exports.alterUser=TZ;Or.exports.dropUser=RZ;Or.exports.getSuperUser=wZ;Or.exports.userInfo=yZ;Or.exports.listUsers=SE;Or.exports.listUsersExternal=bZ;Or.exports.setUsersWithRolesCache=bc;Or.exports.findAndValidateUser=fv;Or.exports.getClusterUser=IZ;Or.exports.getUsersWithRolesCache=NZ;Or.exports.USERNAME_REQUIRED=nv;Or.exports.ALTERUSER_NOTHING_TO_UPDATE=sv;Or.exports.EMPTY_PASSWORD=iv;Or.exports.EMPTY_ROLE=ov;Or.exports.ACTIVE_BOOLEAN=av;var cv=hn(),dZ=Tc(),Uf=(hE(),D(_E)),lv=vM(),xf=Kr(),UR=co(),Oi=ae(),uv=require("validate.js"),xR=j(),{promisify:fZ}=require("util"),BR=io(),LR=(H(),D(q)),tv=Ot(),_Z=wt(),hZ=ce(),pZ=ro(),{hdb_errors:EZ,ClientError:$s}=_e(),{HTTP_STATUS_CODES:ao,AUTHENTICATION_ERROR_MSGS:DR,HDB_ERROR_MSGS:Xl}=EZ,{UserEventMsg:HR}=Vs(),MR=require("lodash"),{server:kR}=($r(),D(ic)),mZ=j();kR.getUser=(e,t)=>fv(e,t,t!=null);var dv={username:!0,active:!0,role:!0,password:!0},rv=new Map,gZ=fZ(dZ.delete),vR=hZ.get(LR.CONFIG_PARAMS.AUTHENTICATION_HASHFUNCTION)??Uf.HASH_FUNCTION.SHA256,Ni;async function SZ(e){let t=uv.cleanAttributes(e,dv),r=lv.addUserValidation(t);if(r)throw new $s(r.message);let n=await xf.searchByValue({schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]});if(!n||n.length<1)throw new $s(Xl.ROLE_NAME_NOT_FOUND(t.role),ao.NOT_FOUND);if(n.length>1)throw new $s(Xl.DUP_ROLES_FOUND(t.role),ao.CONFLICT);n[0].permission.cluster_user===!0&&(t.hash=BR.encrypt(t.password)),t.password=await Uf.hash(t.password,vR),t.hash_function=vR,t.role=n[0].id;let s=await cv.insert({operation:"insert",schema:"system",table:"hdb_user",records:[t]});if(xR.debug(s),await bc(),s.skipped_hashes.length===1)throw new $s(Xl.USER_ALREADY_EXISTS(t.username),ao.CONFLICT);return UR.signalUserChange(new HR(process.pid)),`${t.username} successfully added`}a(SZ,"addUser");async function TZ(e){let t=uv.cleanAttributes(e,dv);if(Oi.isEmptyOrZeroLength(t.username))throw new Error(nv);if(Oi.isEmptyOrZeroLength(t.password)&&Oi.isEmptyOrZeroLength(t.role)&&Oi.isEmptyOrZeroLength(t.active))throw new Error(sv);if(!Oi.isEmpty(t.password)&&Oi.isEmptyOrZeroLength(t.password.trim()))throw new Error(iv);if(!Oi.isEmpty(t.active)&&!Oi.isBoolean(t.active))throw new Error(av);if(!Oi.isEmpty(t.password)&&!Oi.isEmptyOrZeroLength(t.password.trim())&&(AZ(t.username)&&(t.hash=BR.encrypt(t.password)),t.password=await Uf.hash(t.password,vR)),t.role==="")throw new Error(ov);if(t.role){let n=await xf.searchByValue({schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]});if(!n||n.length===0)throw new $s(Xl.ALTER_USER_ROLE_NOT_FOUND(t.role),ao.NOT_FOUND);if(n.length>1)throw new $s(Xl.DUP_ROLES_FOUND(t.role),ao.CONFLICT);t.role=n[0].id}let r=await cv.update({operation:"update",schema:"system",table:"hdb_user",records:[t]});return await bc(),UR.signalUserChange(new HR(process.pid)),r}a(TZ,"alterUser");function AZ(e){let t=!1,r=Ni.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(AZ,"isClusterUser");async function RZ(e){let t=lv.dropUserValidation(e);if(t)throw new $s(t.message);if(Ni.get(e.username)===void 0)throw new $s(Xl.USER_NOT_EXIST(e.username),ao.NOT_FOUND);let r=await gZ({table:"hdb_user",schema:"system",hash_values:[e.username]});return xR.debug(r),await bc(),UR.signalUserChange(new HR(process.pid)),`${e.username} successfully deleted`}a(RZ,"dropUser");async function yZ(e){let t={};if(!e||!e.hdb_user)return"There was no user info in the body";t=MR.cloneDeep(e.hdb_user);let r=await xf.searchByHash({schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]});return t.role=r[0],delete t.password,delete t.refresh_token,delete t.hash,delete t.hash_function,t}a(yZ,"userInfo");async function bZ(){let e=await SE();return e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token,delete t.hash_function}),[...e.values()]}a(bZ,"listUsersExternal");async function SE(){let e=await xf.searchByValue({schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]}),t={};for(let s of e)t[s.id]=MR.cloneDeep(s);if(Object.keys(t).length===0)return null;let r=await xf.searchByValue({schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]}),n=new Map;for(let s of r)s=MR.cloneDeep(s),s.role=t[s.role],OZ(s.role),n.set(s.username,s);return n}a(SE,"listUsers");function OZ(e){if(!e){xR.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(pZ)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}a(OZ,"appendSystemTablesToRole");async function bc(e=void 0){e?Ni=e:Ni=await SE()}a(bc,"setUsersWithRolesCache");async function NZ(){return Ni||await bc(),Ni}a(NZ,"getUsersWithRolesCache");async function fv(e,t,r=!0){Ni||await bc();let n=Ni.get(e);if(!n){if(!r)return{username:e};throw new $s(DR.GENERIC_AUTH_FAIL,ao.UNAUTHORIZED)}if(n&&!n.active)throw new $s(DR.USER_INACTIVE,ao.UNAUTHORIZED);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(rv.get(t)===n.password)return s;{let i=Uf.validate(n.password,t,n.hash_function||Uf.HASH_FUNCTION.MD5);if(i?.then&&(i=await i),i===!0)rv.set(t,n.password);else throw new $s(DR.GENERIC_AUTH_FAIL,ao.UNAUTHORIZED)}}return s}a(fv,"findAndValidateUser");async function wZ(){Ni||await bc();for(let[,e]of Ni)if(e.role.role==="super_user")return e}a(wZ,"getSuperUser");async function IZ(){let e=await SE(),t=_Z.getConfigFromFile(LR.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!(r==null||r?.role?.role!==LR.ROLE_TYPES_ENUM.CLUSTER_USER))return r.decrypt_hash=BR.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+tv.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+tv.SERVER_SUFFIX.ADMIN,r}a(IZ,"getClusterUser");var _v=[];kR.invalidateUser=function(e){for(let t of _v)try{t(e)}catch(r){mZ.error("Error invalidating user",r)}};kR.onInvalidatedUser=function(e){_v.push(e)}});var Hf=P((Sye,mv)=>{"use strict";var Oc=j(),$n=(H(),D(q)),CZ=PL(),mye=Gs(),gye=oo(),PZ=qn(),{validateEvent:hv}=Vs(),Bf=kn(),DZ=require("process"),{resetDatabases:LZ}=(De(),D(nt)),MZ={[$n.ITC_EVENT_TYPES.SCHEMA]:vZ,[$n.ITC_EVENT_TYPES.USER]:Ev};async function vZ(e){let t=hv(e);if(t){Oc.error(t);return}Oc.trace("ITC schemaHandler received schema event:",e),await CZ(e.message),await UZ(e.message)}a(vZ,"schemaHandler");async function UZ(e){try{Bf.resetReadTxn($n.SYSTEM_SCHEMA_NAME,$n.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Bf.resetReadTxn($n.SYSTEM_SCHEMA_NAME,$n.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Bf.resetReadTxn($n.SYSTEM_SCHEMA_NAME,$n.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=LZ();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Oc.error(t)}}a(UZ,"syncSchemaMetadata");var pv=[];async function Ev(e){try{try{Bf.resetReadTxn($n.SYSTEM_SCHEMA_NAME,$n.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Bf.resetReadTxn($n.SYSTEM_SCHEMA_NAME,$n.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Oc.warn(r)}let t=hv(e);if(t){Oc.error(t);return}Oc.trace(`ITC userHandler ${$n.HDB_ITC_CLIENT_PREFIX}${DZ.pid} received user event:`,e),await PZ.setUsersWithRolesCache();for(let r of pv)r()}catch(t){Oc.error(t)}}a(Ev,"userHandler");Ev.addListener=function(e){pv.push(e)};mv.exports=MZ});var Vs=P((Oye,Sv)=>{"use strict";var Aye=j(),FR=ae(),xZ=(H(),D(q)),{ITC_ERRORS:kf}=Ln(),{parentPort:Rye,threadId:BZ,isMainThread:HZ,workerData:yye}=require("worker_threads"),{onMessageFromWorkers:kZ,broadcast:bye,broadcastWithAcknowledgement:FZ}=rt();Sv.exports={sendItcEvent:GZ,validateEvent:gv,SchemaEventMsg:qZ,UserEventMsg:$Z};var TE;kZ(async(e,t)=>{TE=TE||Hf(),gv(e),TE[e.type]&&await TE[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function GZ(e){return!HZ&&e.message&&(e.message.originator=BZ),FZ(e)}a(GZ,"sendItcEvent");function gv(e){if(typeof e!="object")return kf.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||FR.isEmpty(e.type))return kf.MISSING_TYPE;if(!e.hasOwnProperty("message")||FR.isEmpty(e.message))return kf.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||FR.isEmpty(e.message.originator))return kf.MISSING_ORIGIN;if(xZ.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return kf.INVALID_EVENT(e.type)}a(gv,"validateEvent");function qZ(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(qZ,"SchemaEventMsg");function $Z(e){this.originator=e}a($Z,"UserEventMsg")});var co=P((Iye,yv)=>{"use strict";var Tv=(H(),D(q)),wye=ae(),AE=j(),Av=wL(),Zl,{sendItcEvent:Rv}=Vs();function VZ(e){try{AE.info("signalSchemaChange called with message:",e),Zl=Zl||Hf();let t=new Av(Tv.ITC_EVENT_TYPES.SCHEMA,e);return Zl.schema(t),Rv(t)}catch(t){AE.error(t)}}a(VZ,"signalSchemaChange");function KZ(e){try{AE.trace("signalUserChange called with message:",e),Zl=Zl||Hf();let t=new Av(Tv.ITC_EVENT_TYPES.USER,e);return Zl.user(t),Rv(t)}catch(t){AE.error(t)}}a(KZ,"signalUserChange");yv.exports={signalSchemaChange:VZ,signalUserChange:KZ}});var RE=P((Pye,Ov)=>{"use strict";var bv=ae(),YZ=(H(),D(q)),WZ=j(),zZ=nE(),QZ=rE(),jZ=co(),{SchemaEventMsg:JZ}=Vs(),XZ="already exists in";Ov.exports=ZZ;async function ZZ(e,t,r){if(bv.isEmptyOrZeroLength(r))return r;let n=[];bv.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 e6(e,t.schema,t.name,i)})),s}a(ZZ,"lmdbCheckForNewAttributes");async function e6(e,t,r,n){let s=new QZ(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await t6(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(XZ))WZ.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(e6,"createNewAttribute");async function t6(e){let t;return t=await zZ(e),jZ.signalSchemaChange(new JZ(process.pid,YZ.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(t6,"createAttribute")});var eu=P((Lye,Nv)=>{"use strict";var GR=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}};Nv.exports=GR});var Iv=P((vye,wv)=>{"use strict";var r6=eu(),n6=(H(),D(q)).OPERATIONS_ENUM,qR=class extends r6{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(n6.INSERT,r,n,s,i),this.records=t}};wv.exports=qR});var Pv=P((xye,Cv)=>{"use strict";var s6=eu(),i6=(H(),D(q)).OPERATIONS_ENUM,$R=class extends s6{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(i6.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};Cv.exports=$R});var Lv=P((Hye,Dv)=>{"use strict";var o6=eu(),a6=(H(),D(q)).OPERATIONS_ENUM,VR=class extends o6{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(a6.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};Dv.exports=VR});var vv=P((Fye,Mv)=>{"use strict";var c6=eu(),l6=(H(),D(q)).OPERATIONS_ENUM,KR=class extends c6{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(l6.DELETE,n,s,t,i),this.original_records=r}};Mv.exports=KR});var Ff=P(($ye,Hv)=>{"use strict";var qye=require("path"),Uv=at(),u6=Iv(),d6=Pv(),f6=Lv(),_6=vv(),tu=Mt(),xv=ae(),{CONFIG_PARAMS:h6}=(H(),D(q)),Bv=ce();Bv.initSync();var yE=(H(),D(q)).OPERATIONS_ENUM,{getTransactionAuditStorePath:p6}=ht();Hv.exports=E6;async function E6(e,t){if(Bv.get(h6.LOGGING_AUDITLOG)===!1)return;let r=p6(e.schema,e.table),n=await Uv.openEnvironment(r,e.table,!0),s=m6(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){Uv.initializeDBIs(n,tu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,tu.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[tu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[tu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),xv.isEmpty(s.user_name)||n.dbis[tu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[tu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(E6,"writeTransaction");function m6(e,t){let r=xv.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===yE.INSERT)return new u6(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===yE.UPDATE)return new d6(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===yE.UPSERT)return new f6(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===yE.DELETE)return new _6(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(m6,"createTransactionObject")});var YR=P((Yye,kv)=>{"use strict";var g6=bf(),Kye=Xd(),Gf=(H(),D(q)),S6=Zd(),T6=pc().insertRecords,A6=at(),R6=j(),y6=RE(),{getSchemaPath:b6}=ht(),O6=Ff();kv.exports=N6;async function N6(e){try{let{schema_table:t,attributes:r}=g6(e);S6(e,r,t.hash_attribute),e.schema!==Gf.SYSTEM_SCHEMA_NAME&&(r.includes(Gf.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Gf.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Gf.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Gf.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await y6(e.hdb_auth_header,t,r),s=b6(e.schema,e.table),i=await A6.openEnvironment(s,e.table),o=await T6(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await O6(e,o)}catch(c){R6.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(N6,"lmdbCreateRecords")});var qv=P((zye,Gv)=>{"use strict";var Fv=(H(),D(q)),w6=YR(),I6=Xd(),C6=require("fs-extra"),{getSchemaPath:P6}=ht();Gv.exports=D6;async function D6(e){let t=[{name:e.schema,createddate:Date.now()}],r=new I6(Fv.SYSTEM_SCHEMA_NAME,Fv.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await w6(r),await C6.mkdirp(P6(e.schema))}a(D6,"lmdbCreateSchema")});var Vv=P((jye,$v)=>{"use strict";var WR=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}};$v.exports=WR});var zv=P((tbe,Wv)=>{"use strict";var Kv=at(),zR=an(),QR=Ln().LMDB_ERRORS_ENUM,L6=Mt(),Yv=j(),Xye=ae(),M6=require("lmdb"),v6=Vv(),U6=(H(),D(q)),{OVERFLOW_MARKER:Zye,MAX_SEARCH_KEY_LENGTH:ebe}=L6,x6=U6.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function B6(e,t,r,n){if(zR.validateEnv(e),t===void 0)throw new Error(QR.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(QR.IDS_REQUIRED):new Error(QR.IDS_MUST_BE_ITERABLE);try{let s=Kv.listDBIs(e);Kv.initializeDBIs(e,t,s);let i=new v6,o,c=[],l=[];for(let h=0,_=r.length;h<_;h++)try{o=r[h];let p=e.dbis[t].get(o);if(!p||n&&p[x6]>n){i.skipped.push(o);continue}let S=e.dbis[t].ifVersion(o,M6.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let g=0;g<s.length;g++){let T=s[g];if(!p.hasOwnProperty(T)||T===t)continue;let m=e.dbis[T],A=p[T];if(A!=null)try{let w=zR.getIndexedValues(A);if(w)for(let M=0,F=w.length;M<F;M++)m.remove(w[M],o)}catch{Yv.warn(`cannot delete from attribute: ${T}, ${A}:${o}`)}}});c.push(S),l.push(o),i.original_records.push(p)}catch(p){Yv.warn(p),i.skipped.push(o)}let u=[],f=await Promise.all(c);for(let h=0,_=f.length;h<_;h++)f[h]===!0?i.deleted.push(l[h]):(i.skipped.push(l[h]),u.push(h));let d=0;for(let h=0;h<u.length;h++){let _=u[h];i.original_records.splice(_-d,1),d++}return i.txn_time=zR.getNextMonotonicTime(),i}catch(s){throw s}}a(B6,"deleteRecords");Wv.exports={deleteRecords:B6}});var qf=P((nbe,jv)=>{"use strict";var ru=ae(),H6=zv(),k6=at(),{getSchemaPath:F6}=ht(),G6=Ff(),q6=j();jv.exports=$6;async function $6(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(ru.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(ru.isEmptyOrZeroLength(e.hash_values)&&!ru.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];ru.isEmpty(l)||e.hash_values.push(l)}}if(ru.isEmptyOrZeroLength(e.hash_values))return Qv([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(ru.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=F6(e.schema,e.table),i=await k6.openEnvironment(s,e.table),o=await H6.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await G6(e,o)}catch(c){q6.error(`unable to write transaction due to ${c.message}`)}return Qv(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a($6,"lmdbDeleteRecords");function Qv(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(Qv,"createDeleteResponse")});var JR=P((obe,Jv)=>{"use strict";var V6=(H(),D(q)),ibe=an();function jR(e,t){let r=Object.create(null);if(t.length===1&&V6.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(jR,"parseRow");function K6(e,t,r,n){let s=jR(r,e);n.push(s)}a(K6,"searchAll");function Y6(e,t,r,n){let s=jR(r,e);n[t]=s}a(Y6,"searchAllToMap");function W6(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(W6,"iterateDBI");function Nc(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(Nc,"pushResults");function z6(e,t,r,n,s,i){t.toString().endsWith(e)&&Nc(t,r,n,s,i)}a(z6,"endsWith");function Q6(e,t,r,n,s,i){t.toString().includes(e)&&Nc(t,r,n,s,i)}a(Q6,"contains");function j6(e,t,r,n,s,i){t>e&&Nc(t,r,n,s,i)}a(j6,"greaterThanCompare");function J6(e,t,r,n,s,i){t>=e&&Nc(t,r,n,s,i)}a(J6,"greaterThanEqualCompare");function X6(e,t,r,n,s,i){t<e&&Nc(t,r,n,s,i)}a(X6,"lessThanCompare");function Z6(e,t,r,n,s,i){t<=e&&Nc(t,r,n,s,i)}a(Z6,"lessThanEqualCompare");Jv.exports={parseRow:jR,searchAll:K6,searchAllToMap:Y6,iterateDBI:W6,endsWith:z6,contains:Q6,greaterThanCompare:j6,greaterThanEqualCompare:J6,lessThanCompare:X6,lessThanEqualCompare:Z6,pushResults:Nc}});var nu=P((dbe,sU)=>{"use strict";var ua=at(),cbe=j(),Vn=an(),bE=Mt(),Kt=Ln().LMDB_ERRORS_ENUM,lbe=ae(),e8=(H(),D(q)),OE=JR(),{parseRow:t8}=OE,ube=require("lmdb"),{OVERFLOW_MARKER:Xv,MAX_SEARCH_KEY_LENGTH:r8}=bE;function Zv(e,t,r,n=!1,s=void 0,i=void 0){return wc(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(Zv,"iterateFullIndex");function $f(e,t,r,n,s,i=!1,o=void 0,c=void 0,l=!1,u=!1){return wc(e,t,r,(f,d,h,_)=>{let m={transaction:f,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!l:!u,exclusiveStart:i===!0?u:l};return _===r?(m.values=!1,d.getRange(m).map(A=>({value:A}))):d.getRange(m)})}a($f,"iterateRangeBetween");function wc(e,t,r,n){let s=e.database||e,i=ua.openDBI(s,r);i[bE.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&ua.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(wc,"setupTransaction");function eU(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(Xv)){if(!s)if(r)s=ua.openDBI(e,r);else{let l=ua.listDBIs(e);for(let u=0,f=l.length;u<f&&(s=ua.openDBI(e,l[u]),!s[bE.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(eU,"getOverflowCheck");function n8(e,t,r,n=!1,s=void 0,i=void 0){if(Vn.validateEnv(e),t===void 0)throw new Error(Kt.HASH_ATTRIBUTE_REQUIRED);return wc(e,t,t,(o,c,l)=>(NE(r),r=Vf(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(u=>t8(u.value,r))))}a(n8,"searchAll");function s8(e,t,r,n=!1,s=void 0,i=void 0){if(Vn.validateEnv(e),t===void 0)throw new Error(Kt.HASH_ATTRIBUTE_REQUIRED);NE(r),r=Vf(e.database||e,r);let o=new Map;for(let{key:c,value:l}of Zv(e,t,t,n,s,i))o.set(c,OE.parseRow(l,r));return o}a(s8,"searchAllToMap");function i8(e,t,r=!1,n=void 0,s=void 0){if(Vn.validateEnv(e),t===void 0)throw new Error(Kt.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=Zv(e,void 0,t,r,n,s),c=o.transaction,l=eU(c.database,c,void 0,t);for(let{key:u,value:f}of o){let d=l(u,f);i[d]===void 0&&(i[d]=[]),i[d].push(f)}return i}a(i8,"iterateDBI");function o8(e,t){if(Vn.validateEnv(e),t===void 0)throw new Error(Kt.HASH_ATTRIBUTE_REQUIRED);return ua.statDBI(e,t).entryCount}a(o8,"countAll");function a8(e,t,r,n,s=!1,i=void 0,o=void 0){return da(e,r,n),wc(e,t,r,(c,l,u,f)=>(n=Vn.convertKeyValueToWrite(n),f===r?l.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:l.getValues(n,{transaction:c,reverse:s,limit:i,offset:o}).map(d=>({key:n,value:d}))))}a(a8,"equals");function c8(e,t,r){return da(e,t,r),ua.openDBI(e,t).getValuesCount(r)}a(c8,"count");function l8(e,t,r,n,s=!1,i=void 0,o=void 0){return da(e,r,n),wc(e,null,r,(c,l)=>{n=Vn.convertKeyValueToWrite(n);let u=!0;typeof n=="number"&&(u=!1);let f;if(s===!0){let d;for(let h of l.getKeys({transaction:c,start:n}))if(!h.startsWith(n)){d=h;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),f=l.getRange({transaction:c,start:d,end:void 0,reverse:s,limit:i,offset:o}).map(h=>{let{key:_}=h;if(_!==d){if(_.toString().startsWith(n))return h;if(u===!0)return f.DONE}}),f.filter(h=>h)}else return f=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(n))return d;if(u===!0)return f.DONE}),u?f:f.filter(d=>d)})}a(l8,"startsWith");function u8(e,t,r,n,s=!1,i=void 0,o=void 0){return tU(e,t,r,n,s,i,o,!0)}a(u8,"endsWith");function tU(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return da(e,r,n),wc(e,null,r,(l,u,f,d)=>{let h=eU(f,l,d,r);return o=Number.isInteger(o)?o:0,u.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(_=>{let p=_.toString();return p.endsWith(Xv)?u.getValues(_,{transaction:l}).map(S=>{let g=h(_,S);if(c?g.endsWith(n):g.includes(n))return{key:g,value:S}}).filter(S=>S):(c?p.endsWith(n):p.includes(n))?u[bE.DBI_DEFINITION_NAME].is_hash_attribute?{key:_,value:_}:u.getValues(_,{transaction:l}).map(S=>({key:_,value:S})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(tU,"contains");function d8(e,t,r,n,s=!1,i=void 0,o=void 0){da(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),$f(e,t,r,n,l,s,i,o,!0,!1)}a(d8,"greaterThan");function f8(e,t,r,n,s=!1,i=void 0,o=void 0){da(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),$f(e,t,r,n,l,s,i,o,!1,!1)}a(f8,"greaterThanEqual");function _8(e,t,r,n,s=!1,i=void 0,o=void 0){da(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),$f(e,t,r,l,n,s,i,o,!1,!0)}a(_8,"lessThan");function h8(e,t,r,n,s=!1,i=void 0,o=void 0){da(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),$f(e,t,r,l,n,s,i,o,!1,!1)}a(h8,"lessThanEqual");function p8(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(Vn.validateEnv(e),r===void 0)throw new Error(Kt.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(Kt.START_VALUE_REQUIRED);if(s===void 0)throw new Error(Kt.END_VALUE_REQUIRED);if(n=Vn.convertKeyValueToWrite(n),s=Vn.convertKeyValueToWrite(s),n>s)throw new Error(Kt.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return $f(e,t,r,n,s,i,o,c)}a(p8,"between");function E8(e,t,r,n){Vn.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(Kt.HASH_ATTRIBUTE_REQUIRED);if(NE(r),r=Vf(s,r),n===void 0)throw new Error(Kt.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=OE.parseRow(c,r)),o}a(E8,"searchByHash");function m8(e,t,r){Vn.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(Kt.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Kt.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(m8,"checkHashExists");function g8(e,t,r,n,s=[]){return nU(e,t,r,n,s),rU(e,t,r,n,s).map(i=>i[1])}a(g8,"batchSearchByHash");function S8(e,t,r,n,s=[]){nU(e,t,r,n,s);let i=new Map;for(let[o,c]of rU(e,t,r,n,s))i.set(o,c);return i}a(S8,"batchSearchByHashToMap");function rU(e,t,r,n,s=[]){return wc(e,t,t,(i,o,c)=>{r=Vf(c,r);let l=r.length<3;return n.map(u=>{let f=c.dbis[t].get(u,{transaction:i,lazy:l});if(f)return[u,OE.parseRow(f,r)];s.push(u)}).filter(u=>u)})}a(rU,"batchHashSearch");function nU(e,t,r,n,s){if(Vn.validateEnv(e),t===void 0)throw new Error(Kt.HASH_ATTRIBUTE_REQUIRED);if(NE(r),n==null)throw new Error(Kt.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(Kt.IDS_MUST_BE_ITERABLE)}a(nU,"initializeBatchSearchByHash");function NE(e){if(!Array.isArray(e))throw e===void 0?new Error(Kt.FETCH_ATTRIBUTES_REQUIRED):new Error(Kt.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(NE,"validateFetchAttributes");function da(e,t,r){if(Vn.validateEnv(e),t===void 0)throw new Error(Kt.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Kt.SEARCH_VALUE_REQUIRED);if(r?.length>r8)throw new Error(Kt.SEARCH_VALUE_TOO_LARGE)}a(da,"validateComparisonFunctions");function Vf(e,t){return t.length===1&&e8.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=ua.listDBIs(e)),t}a(Vf,"setGetWholeRowAttributes");sU.exports={searchAll:n8,searchAllToMap:s8,count:c8,countAll:o8,equals:a8,startsWith:l8,endsWith:u8,contains:tU,searchByHash:E8,setGetWholeRowAttributes:Vf,batchSearchByHash:g8,batchSearchByHashToMap:S8,checkHashExists:m8,iterateDBI:i8,greaterThan:d8,greaterThanEqual:f8,lessThan:_8,lessThanEqual:h8,between:p8}});var su=P((_be,lU)=>{var iU=require("lodash"),oU=pt(),ke=require("joi"),T8=ae(),{hdb_schema_table:Kf,checkValidTable:aU,hdb_table:cU,hdb_database:wE}=Ti(),{handleHDBError:A8,hdb_errors:R8}=_e(),{getDatabases:y8}=(De(),D(nt)),{HTTP_STATUS_CODES:b8}=R8,O8=ke.object({database:wE,schema:wE,table:cU,search_attribute:Kf,search_value:ke.any().required(),get_attributes:ke.array().min(1).items(ke.alternatives(Kf,ke.object())).optional(),desc:ke.bool(),limit:ke.number().integer().min(1),offset:ke.number().integer().min(0)}),N8=ke.object({database:wE,schema:wE,table:cU,operator:ke.string().valid("and","or").default("and").lowercase(),offset:ke.number().integer().min(0),limit:ke.number().integer().min(1),get_attributes:ke.array().min(1).items(ke.alternatives(Kf,ke.object())).optional(),sort:ke.object({attribute:ke.alternatives(Kf,ke.array().min(1)),descending:ke.bool().optional()}).optional(),conditions:ke.array().min(1).items(ke.alternatives(ke.object({operator:ke.string().valid("and","or").default("and").lowercase(),conditions:ke.array()}),ke.object({search_attribute:ke.alternatives(Kf,ke.array().min(1)),search_type:ke.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:ke.when("search_type",{switch:[{is:"equals",then:ke.any()},{is:"between",then:ke.array().items(ke.alternatives([ke.string(),ke.number()])).length(2)}],otherwise:ke.alternatives(ke.string(),ke.number())}).required()}))).required()});lU.exports=function(e,t){let r=null;switch(t){case"value":r=oU.validateBySchema(e,O8);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(aU("database",e.schema)),i(aU("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=oU.validateBySchema(e,N8);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=T8.checkGlobalSchemaTable(e.schema,e.table);if(s)return A8(new Error,s,b8.NOT_FOUND);let o=y8()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let l=a(f=>{for(let d=0,h=f.conditions.length;d<h;d++){let _=f.conditions[d];_.conditions?l(_):c.push(_.search_attribute)}},"addConditions");t==="conditions"&&l(e);let u=iU.filter(c,f=>f!=="*"&&!f.startsWith?.("$")&&f.attribute!=="*"&&!Array.isArray(f)&&!f.name&&!iU.some(o,d=>d===f||d.attribute===f||d.attribute===f.attribute));if(u&&u.length>0){let f=u.join(", ");return f=f.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${f}'`)}}return r}});var XR=P((pbe,uU)=>{"use strict";var w8=at(),I8=su(),{getSchemaPath:C8}=ht();uU.exports=P8;function P8(e){let t=I8(e,"hashes");if(t)throw t;let r=C8(e.schema,e.table);return w8.openEnvironment(r,e.table)}a(P8,"initialize")});var ZR=P((mbe,dU)=>{"use strict";var D8=nu(),L8=XR();dU.exports=M8;async function M8(e){let t=await L8(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return D8.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(M8,"lmdbGetDataByHash")});var iu=P((Sbe,fU)=>{"use strict";var ey=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};fU.exports=ey});var hU=P((Rbe,_U)=>{"use strict";var Abe=iu(),v8=nu(),U8=XR();_U.exports=x8;async function x8(e){let t=await U8(e),r=global.hdb_schema[e.schema][e.table];return v8.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(x8,"lmdbSearchByHash")});var Ks=P((bbe,pU)=>{"use strict";var ty=class{static{a(this,"SearchObject")}constructor(t,r,n,s,i,o,c,l=!1,u=void 0,f=void 0){this.schema=t,this.table=r,this.search_attribute=n,this.search_value=s,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=l,this.limit=u,this.offset=f}};pU.exports=ty});var IE=P((Nbe,AU)=>{"use strict";var zr=nu(),B8=at(),H8=ae(),Fe=Mt(),Ic=(H(),D(q)),k8=ro(),EU=Ln().LMDB_ERRORS_ENUM,{getSchemaPath:F8}=ht(),lo=Ic.SEARCH_WILDCARDS;async function G8(e,t,r){let n;e.schema===Ic.SYSTEM_SCHEMA_NAME?n=k8[e.table]:n=global.hdb_schema[e.schema][e.table];let s=TU(e,n.hash_attribute,r,t);return gU(e,s,n.hash_attribute,r)}a(G8,"prepSearch");async function gU(e,t,r,n){let s=F8(e.schema,e.table),i=await B8.openEnvironment(s,e.table),o=SU(i,e,t,r),c=o.transaction||i;if([Fe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,Fe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,Fe.SEARCH_TYPES.SEARCH_ALL,Fe.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(q8(e,r)===!1){let f=e.search_attribute;if(f===r)return n?mU(o,()=>!0):o.map(h=>({[r]:h.key}));let d=a(h=>({[r]:h.value,[f]:h.key}),"toObject");return n?mU(o,d):o.map(d)}let u=e.search_attribute===r?o.map(f=>f.key):o.map(f=>f.value);return n===!0?zr.batchSearchByHashToMap(c,r,e.get_attributes,u):zr.batchSearchByHash(c,r,e.get_attributes,u)}a(gU,"executeSearch");function SU(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:o,limit:c,offset:l}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,l=Number.isInteger(l)?l:void 0,r){case Fe.SEARCH_TYPES.EQUALS:s=zr.equals(e,i,t.search_attribute,t.search_value,o,c,l);break;case Fe.SEARCH_TYPES.CONTAINS:s=zr.contains(e,i,t.search_attribute,t.search_value,o,c,l);break;case Fe.SEARCH_TYPES.ENDS_WITH:case Fe.SEARCH_TYPES._ENDS_WITH:s=zr.endsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case Fe.SEARCH_TYPES.STARTS_WITH:case Fe.SEARCH_TYPES._STARTS_WITH:s=zr.startsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case Fe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return zr.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case Fe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return zr.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case Fe.SEARCH_TYPES.SEARCH_ALL:return zr.searchAll(e,n,t.get_attributes,o,c,l);case Fe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return zr.searchAllToMap(e,n,t.get_attributes,o,c,l);case Fe.SEARCH_TYPES.BETWEEN:s=zr.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,l);break;case Fe.SEARCH_TYPES.GREATER_THAN:case Fe.SEARCH_TYPES._GREATER_THAN:s=zr.greaterThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case Fe.SEARCH_TYPES.GREATER_THAN_EQUAL:case Fe.SEARCH_TYPES._GREATER_THAN_EQUAL:s=zr.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;case Fe.SEARCH_TYPES.LESS_THAN:case Fe.SEARCH_TYPES._LESS_THAN:s=zr.lessThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case Fe.SEARCH_TYPES.LESS_THAN_EQUAL:case Fe.SEARCH_TYPES._LESS_THAN_EQUAL:s=zr.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;default:return Object.create(null)}return s}a(SU,"searchByType");function mU(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(mU,"createMapFromIterable");function q8(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(q8,"checkToFetchMore");function TU(e,t,r,n){if(H8.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),lo.indexOf(s)>-1)return r===!0?Fe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:Fe.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(lo[0])<0&&s.indexOf(lo[1])<0)return c===!0?r===!0?Fe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:Fe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:Fe.SEARCH_TYPES.EQUALS;if(lo.indexOf(i)>=0&&lo.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),Fe.SEARCH_TYPES.CONTAINS;if(lo.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),Fe.SEARCH_TYPES.ENDS_WITH;if(lo.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),Fe.SEARCH_TYPES.STARTS_WITH;if(s.includes(lo[0])||s.includes(lo[1]))return Fe.SEARCH_TYPES.EQUALS;throw new Error(EU.UNKNOWN_SEARCH_TYPE)}else switch(n){case Ic.VALUE_SEARCH_COMPARATORS.BETWEEN:return Fe.SEARCH_TYPES.BETWEEN;case Ic.VALUE_SEARCH_COMPARATORS.GREATER:return Fe.SEARCH_TYPES.GREATER_THAN;case Ic.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return Fe.SEARCH_TYPES.GREATER_THAN_EQUAL;case Ic.VALUE_SEARCH_COMPARATORS.LESS:return Fe.SEARCH_TYPES.LESS_THAN;case Ic.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return Fe.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(EU.UNKNOWN_SEARCH_TYPE)}}a(TU,"createSearchTypeFromSearchObject");AU.exports={executeSearch:gU,createSearchTypeFromSearchObject:TU,prepSearch:G8,searchByType:SU}});var yU=P((Cbe,RU)=>{"use strict";var Ibe=Ks(),$8=su(),V8=ae(),K8=(H(),D(q)),Y8=IE();RU.exports=W8;function W8(e,t){if(!V8.isEmpty(t)&&K8.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=$8(e,"value");if(n)throw n;return Y8.prepSearch(e,t,!0)}a(W8,"lmdbGetDataByValue")});var Yf=P((Lbe,bU)=>{"use strict";var Dbe=Ks(),z8=su(),Q8=ae(),j8=(H(),D(q)),J8=IE();bU.exports=X8;async function X8(e,t){if(!Q8.isEmpty(t)&&j8.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=z8(e,"value");if(n)throw n;return J8.prepSearch(e,t,!1)}a(X8,"lmdbSearchByValue")});var NU=P((Ube,OU)=>{"use strict";var vbe=Mt(),ry=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}},ny=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},sy=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};OU.exports={SearchByConditionsObject:ry,SearchCondition:ny,SortAttribute:sy}});var DU=P((kbe,PU)=>{"use strict";var Bbe=NU().SearchByConditionsObject,Z8=Ks(),e5=su(),iy=nu(),CE=Mt(),{Resource:Hbe}=(ta(),D(sA)),CU=IE(),t5=JR(),r5=require("lodash"),{getSchemaPath:n5}=ht(),wU=at(),{handleHDBError:s5,hdb_errors:i5}=_e(),{HTTP_STATUS_CODES:o5}=i5,a5=1e8;PU.exports=c5;async function c5(e){let t=e5(e,"conditions");if(t)throw s5(t,t.message,o5.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=n5(e.schema,e.table),n=await wU.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)wU.openDBI(n,u.search_attribute);let i=r5.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let f=u.search_type;f===CE.SEARCH_TYPES.EQUALS?u.estimated_count=iy.count(n,u.search_attribute,u.search_value):f===CE.SEARCH_TYPES.CONTAINS||f===CE.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=a5}return u.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await IU(o,e,i[0],s.hash_attribute),l;if(!e.operator||e.operator.toLowerCase()==="and"){let u=n.dbis[s.hash_attribute],f=i.slice(1).map(CU.filterByType),d=f.length,h=iy.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(_=>u.get(_,{transaction:o,lazy:!0})),d>0&&(l=l.filter(_=>{for(let p=0;p<d;p++)if(!f[p](_))return!1;return!0})),(e.offset||e.limit!==void 0)&&(l=l.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),l=l.map(_=>t5.parseRow(_,h))}else{for(let d=1;d<i.length;d++){let h=i[d],_=await IU(o,e,h,s.hash_attribute);c=c.concat(_)}let u=new Set,f=e.offset||0;c=c.filter(d=>u.has(d)?!1:(u.add(d),!0)).slice(f,e.limit&&e.limit+f),l=iy.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(c5,"lmdbSearchByConditions");async function IU(e,t,r,n){let s=new Z8(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===CE.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,CU.searchByType(e,s,i,n).map(o=>o.value)}a(IU,"executeConditionSearch")});var Wf=P((Gbe,LU)=>{"use strict";var l5=(H(),D(q)).OPERATIONS_ENUM,oy=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=l5.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};LU.exports=oy});var ay=P(($be,FU)=>{"use strict";var xU=Ks(),BU=Wf(),HU=Yf(),kU=qf(),pn=(H(),D(q)),MU=ae(),vU=at(),{getTransactionAuditStorePath:u5,getSchemaPath:d5}=ht(),UU=j();FU.exports=f5;async function f5(e){try{if(MU.isEmpty(global.hdb_schema[e.schema])||MU.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await _5(e),await h5(e);let t=d5(e.schema,e.table);try{await vU.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")UU.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=u5(e.schema,e.table);await vU.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")UU.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(f5,"lmdbDropTable");async function _5(e){let t=new xU(pn.SYSTEM_SCHEMA_NAME,pn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,pn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[pn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await HU(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 BU(pn.SYSTEM_SCHEMA_NAME,pn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await kU(s)}a(_5,"deleteAttributesFromSystem");async function h5(e){let t=new xU(pn.SYSTEM_SCHEMA_NAME,pn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,pn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[pn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,pn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,pn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await HU(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 BU(pn.SYSTEM_SCHEMA_NAME,pn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await kU(s)}catch(i){throw i}}a(h5,"dropTableFromSystem")});var qU=P((Kbe,GU)=>{"use strict";var p5=require("fs-extra"),E5=Ks(),m5=iu(),g5=Wf(),S5=ay(),T5=qf(),A5=ZR(),R5=Yf(),uo=(H(),D(q)),{getSchemaPath:y5}=ht(),{handleHDBError:b5,hdb_errors:O5}=_e(),{HDB_ERROR_MSGS:N5,HTTP_STATUS_CODES:w5}=O5;GU.exports=I5;async function I5(e){let t;try{t=await C5(e.schema);let r=new E5(uo.SYSTEM_SCHEMA_NAME,uo.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,uo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[uo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await R5(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await S5(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new g5(uo.SYSTEM_SCHEMA_NAME,uo.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await T5(s);let i=y5(t);await p5.remove(i)}catch(r){throw r}}a(I5,"lmdbDropSchema");async function C5(e){let t=new m5(uo.SYSTEM_SCHEMA_NAME,uo.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[uo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await A5(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw b5(new Error,N5.SCHEMA_NOT_FOUND(e),w5.NOT_FOUND,void 0,void 0,!0);return n}a(C5,"validateDropSchema")});var zf=P((Wbe,$U)=>{"use strict";var cy=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};$U.exports=cy});var uy=P((jbe,VU)=>{"use strict";var P5=require("fs-extra"),PE=at(),{getTransactionAuditStorePath:D5}=ht(),ly=Mt(),Qbe=zf();VU.exports=L5;async function L5(e){let t;try{let r=D5(e.schema,e.table);await P5.mkdirp(r),t=await PE.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{PE.createDBI(t,ly.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),PE.createDBI(t,ly.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),PE.createDBI(t,ly.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(L5,"createTransactionsAuditEnvironment")});var WU=P((Zbe,YU)=>{"use strict";var dy=(H(),D(q)),KU=at(),M5=pc(),{getSystemSchemaPath:v5,getSchemaPath:U5}=ht(),Xbe=ro(),x5=nE(),fy=rE(),B5=j(),H5=uy();YU.exports=k5;async function k5(e,t){let r=U5(t.schema,t.table),n=new fy(t.schema,t.table,dy.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new fy(t.schema,t.table,dy.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new fy(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await KU.createEnvironment(r,t.table),e!==void 0){let o=await KU.openEnvironment(v5(),dy.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await M5.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdb_table_attributes,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await _y(n),await _y(s),await _y(i)}await H5(t)}catch(o){throw o}}a(k5,"lmdbCreateTable");async function _y(e){try{await x5(e)}catch(t){B5.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(_y,"createAttribute")});var QU=P((tOe,zU)=>{"use strict";var F5=bf(),G5=Zd(),q5=RE(),Qf=(H(),D(q)),$5=pc().updateRecords,V5=at(),{getSchemaPath:K5}=ht(),Y5=Ff(),W5=j();zU.exports=z5;async function z5(e){try{let{schema_table:t,attributes:r}=F5(e);G5(e,r,t.hash_attribute),e.schema!==Qf.SYSTEM_SCHEMA_NAME&&(r.includes(Qf.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Qf.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Qf.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Qf.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await q5(e.hdb_auth_header,t,r),s=K5(e.schema,e.table),i=await V5.openEnvironment(s,e.table),o=await $5(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await Y5(e,o)}catch(c){W5.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(z5,"lmdbUpdateRecords")});var JU=P((nOe,jU)=>{"use strict";var Q5=(H(),D(q)).OPERATIONS_ENUM,hy=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=Q5.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};jU.exports=hy});var ZU=P((oOe,XU)=>{"use strict";var iOe=JU(),j5=bf(),J5=Zd(),X5=RE(),jf=(H(),D(q)),Z5=pc().upsertRecords,e9=at(),{getSchemaPath:t9}=ht(),r9=Ff(),n9=j(),{handleHDBError:s9,hdb_errors:i9}=_e();XU.exports=o9;async function o9(e){let t;try{t=j5(e)}catch(l){throw s9(l,l.message,i9.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;J5(e,n,r.hash_attribute),e.schema!==jf.SYSTEM_SCHEMA_NAME&&(n.includes(jf.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(jf.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(jf.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(jf.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await X5(e.hdb_auth_header,r,n),i=t9(e.schema,e.table),o=await e9.openEnvironment(i,e.table),c=await Z5(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await r9(e,c)}catch(l){n9.error(`unable to write transaction due to ${l.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:s,txn_time:c.txn_time}}a(o9,"lmdbUpsertRecords")});var t0=P((cOe,e0)=>{"use strict";var py=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};e0.exports=py});var n0=P((uOe,r0)=>{"use strict";var Ey=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}};r0.exports=Ey});var o0=P((_Oe,i0)=>{"use strict";var my=at(),{getTransactionAuditStorePath:a9}=ht(),fOe=t0(),Jf=Mt(),c9=ae(),s0=n0(),l9=require("util").promisify,u9=l9(setTimeout),d9=1e4,f9=100;i0.exports=_9;async function _9(e){let t=a9(e.schema,e.table),r=await my.openEnvironment(t,e.table,!0),n=my.listDBIs(r);my.initializeDBIs(r,Jf.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new s0;do s=await h9(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 u9(f9);while(s.transactions_deleted>0);return i}a(_9,"deleteAuditLogsBefore");async function h9(e,t){let r=new s0;try{let n=e.dbis[Jf.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[Jf.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];c9.isEmpty(c)||(s=e.dbis[Jf.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[Jf.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>d9)break}return await s,r}catch(n){throw n}}a(h9,"deleteTransactions")});var c0=P((pOe,a0)=>{"use strict";var gy=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};a0.exports=gy});var u0=P((gOe,l0)=>{"use strict";var p9=Ks(),E9=Wf(),mOe=c0(),wi=(H(),D(q)),m9=ae(),Sy=at(),g9=ro(),S9=Yf(),T9=qf(),{getSchemaPath:A9}=ht();l0.exports=R9;async function R9(e,t=!0){let r;e.schema===wi.SYSTEM_SCHEMA_NAME?r=g9[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await b9(e),s=A9(e.schema,e.table),i=await Sy.openEnvironment(s,e.table);return t===!0&&await y9(e,i,r.hash_attribute),Sy.dropDBI(i,e.attribute),n}a(R9,"lmdbDropAttribute");async function y9(e,t,r){let n=Sy.openDBI(t,r),s,i=e.attribute;for(let{key:o,value:c,version:l}of n.getRange({start:!1,versions:!0})){let u={};for(let f in c)f!==i&&(u[f]=c[f]);s=t.dbis[r].put(o,u,l)}await s}a(y9,"removeAttributeFromAllObjects");async function b9(e){let t=new p9(wi.SYSTEM_SCHEMA_NAME,wi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,wi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[wi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,wi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await S9(t)).filter(o=>o[wi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(m9.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[wi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new E9(wi.SYSTEM_SCHEMA_NAME,wi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return T9(i)}a(b9,"dropAttributeFromSystem")});var E0=P((AOe,p0)=>{"use strict";var Ty=at(),ou=Mt(),TOe=an(),Ay=(H(),D(q)),d0=ae(),{getTransactionAuditStorePath:O9}=ht(),N9=nu(),DE=eu(),w9=j();p0.exports=I9;async function I9(e){let t=O9(e.schema,e.table),r=await Ty.openEnvironment(t,e.table,!0),n=Ty.listDBIs(r);Ty.initializeDBIs(r,ou.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case Ay.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return f0(r,e.search_values);case Ay.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,P9(r,e.search_values,s);case Ay.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return C9(r,e.search_values);default:return f0(r)}}a(I9,"readAuditLog");function f0(e,t=[0,Date.now()]){d0.isEmpty(t[0])&&(t[0]=0),d0.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[ou.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 DE,s))}a(f0,"searchTransactionsByTimestamp");function C9(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[ou.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,h0(e,i))}return Object.fromEntries(r)}a(C9,"searchTransactionsByUsername");function P9(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let u=t[c],f=N9.equals(e,ou.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,ou.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let{value:d}of f){let h=Number(d);n.has(h)?n.get(h).push(u.toString()):n.set(h,[u.toString()])}}let s=Array.from(n.keys()),i=h0(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],u=l.timestamp,f=n.get(u);_0(l,"records",r,f,o),_0(l,"original_records",r,f,o)}return Object.fromEntries(o)}a(P9,"searchTransactionsByHashValues");function _0(e,t,r,n,s){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],l=c[r].toString();if(n.indexOf(l)>=0)if(s.has(l)){let u=s.get(l),f=u[u.length-1];if(f.timestamp===i)f[t]=[c];else{let d=new DE(e.operation,e.user_name,i,void 0);d[t]=[c],u.push(d)}}else{let u=new DE(e.operation,e.user_name,i,void 0);u[t]=[c],s.set(l,[u])}}}a(_0,"loopRecords");function h0(e,t){let r=[];try{let n=e.dbis[ou.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 DE,i);r.push(o)}}catch(i){w9.warn(i)}return r}catch(n){throw n}}a(h0,"batchSearchTransactions")});var g0=P((OOe,m0)=>{"use strict";var{getSchemaPath:yOe}=ht(),bOe=at(),{database:D9}=(De(),D(nt));m0.exports={writeTransaction:L9};async function L9(e,t,r){return D9({database:e,table:t}).transaction(r)}a(L9,"writeTransaction")});var R0=P((wOe,A0)=>{"use strict";var{getSchemaPath:S0}=ht(),T0=at();A0.exports={flush:M9,resetReadTxn:v9};async function M9(e,t){return(await T0.openEnvironment(S0(e,t),t.toString())).flushed}a(M9,"flush");async function v9(e,t){try{(await T0.openEnvironment(S0(e,t),t.toString())).resetReadTxn()}catch{}}a(v9,"resetReadTxn")});var N0=P((COe,O0)=>{"use strict";var{Readable:U9}=require("stream"),{getDatabases:x9}=(De(),D(nt)),{readSync:B9,openSync:H9,createReadStream:y0}=require("fs"),{open:k9}=require("lmdb"),b0=mf(),F9=gf(),{AUDIT_STORE_OPTIONS:G9}=(Zi(),D(w0)),{INTERNAL_DBIS_NAME:q9,AUDIT_STORE_NAME:$9}=Mt();O0.exports=K9;var Ry=32768,V9=100;async function K9(e){let t=e.database||e.schema||"data",r=x9()[t],n=new Date().toISOString(),s=e.tables||e.table&&[e.table];if(s){let u=r[s[0]];if(!u)throw new Error(`Can not find table ${s[0]}`);let f=u.dbisDB,d=k9({noSync:!0,maxDbs:F9.MAX_DBS}),h,_=d.openDB(q9,new b0(!1)),p=f.useReadTransaction(),S=0,g=a(async function(m,A){A.encoding="binary",A.encoder=void 0;let w=d.openDB(m,A),M=f.openDB(m,A);for(let{key:F,version:G,value:K}of M.getRange({start:null,transaction:p,versions:M.useVersions}))h=w.put(F,K,G),S++%V9===0&&(await new Promise(ee=>setTimeout(ee,20)),p.openTimer&&(p.openTimer=0))},"copyDatabase");for(let{key:m,value:A}of f.getRange({transaction:p,start:!1}))if(s.some(w=>m.startsWith?.(w+"/"))){_.put(m,A);let[,w]=m.split("/"),M=!w,F=new b0(!M,M);await g(m,F)}e.include_audit&&await g($9,{...G9}),await h;let T=y0(d.path);return T.headers=l(),T.on("close",()=>{p.done(),d.close()}),T}let o=r[Object.keys(r)[0]].primaryStore,c=H9(o.path);return o.transaction(()=>{let u=Buffer.alloc(Ry);B9(c,u,0,Ry),o.resetReadTxn();let f=o.useReadTransaction();f.renew();let d=y0(null,{fd:c,start:Ry}),h=new U9.from(async function*(){yield u;for await(let _ of d)f.openTimer&&(f.openTimer=0),yield _;f.done()}());return h.headers=l(),h});function l(){let u=new Map;return u.set("content-type","application/octet-stream"),u.set("content-disposition",`attachment; filename="${t}"`),u.set("date",n),u}}a(K9,"getBackup")});var P0=P((DOe,C0)=>{"use strict";var Y9=j(),{handleHDBError:W9}=_e(),z9=kD(),Q9=nE(),j9=YR(),J9=qv(),X9=qf(),Z9=ZR(),e7=hU(),t7=yU(),r7=Yf(),n7=DU(),s7=qU(),i7=WU(),o7=QU(),a7=ZU(),c7=o0(),l7=ay(),u7=u0(),d7=E0(),f7=g0(),I0=R0(),_7=N0(),yy=class extends z9{static{a(this,"LMDBBridge")}async searchByConditions(t){return n7(t)}async getDataByHash(t){return await Z9(t)}async searchByHash(t){return await e7(t)}async getDataByValue(t,r){return await t7(t,r)}async searchByValue(t){return await r7(t)}async createSchema(t){return await J9(t)}async dropSchema(t){return await s7(t)}async createTable(t,r){return await i7(t,r)}async dropTable(t){return await l7(t)}async createAttribute(t){return await Q9(t)}async createRecords(t){return await j9(t)}async updateRecords(t){return await o7(t)}async upsertRecords(t){try{return await a7(t)}catch(r){throw W9(r,null,null,Y9.ERR,r)}}async deleteRecords(t){return await X9(t)}async dropAttribute(t){return await u7(t)}async deleteAuditLogsBefore(t){return await c7(t)}async readAuditLog(t){return await d7(t)}writeTransaction(t,r,n){return f7.writeTransaction(t,r,n)}flush(t,r){return I0.flush(t,r)}resetReadTxn(t,r){return I0.resetReadTxn(t,r)}getBackup(t){return _7(t)}};C0.exports=yy});var Oy={};Be(Oy,{add:()=>LE,applyReverse:()=>D0,getRecordAtTime:()=>by,rebuildUpdateBefore:()=>ME});function LE(e,t,r){let n=e[t];typeof n=="bigint"?e[t]=n+BigInt(r.value):isNaN(e[t])?e[t]=r.value:e[t]=n+r.value}function ME(e,t,r){let n=null;for(let s in e)if(s in t){let i=t[s];if(i?.__op__){let o=e[s];if(o?.__op__)if(o.__op__===i.__op__)n||(n={}),n[s]=o;else throw new Error("Can not merge updates with different operations");else n||(n={}),n[s]=o,LE(n,s,i)}else r&&(n||(n={}),n[s]=i)}else n||(n={}),n[s]=e[s];return n}function D0(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=h7[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=L0}}function by(e,t,r){let n=r.rootStore.auditStore,s={...e.value},i=e.localTime;for(;i>t;){let l=n.get(i),u=bt(l);switch(u.type){case"put":s=u.getValue(r);break;case"patch":D0(s,u.getValue(r));break;case"delete":s=null}i=u.previousLocalTime}let o={},c=0;for(let l in s)s[l]===L0&&(o[l]=!0,c++);for(;c>0&&i>0;){let l=n.get(i),u=bt(l),f;switch(u.type){case"put":f=u.getValue(r);break;case"patch":f=u.getValue(r);break}for(let d in f)o[d]&&(s[d]=f[d],o[d]=!1,c--);i=u.previousLocalTime}if(c>0)for(let l in o)s[l]=null;return s}var h7,L0,vE=be(()=>{Zi();a(LE,"add");LE.reverse=function(e,t,r){let n=e[t];typeof n=="bigint"?e[t]=n-BigInt(r.value):isNaN(e[t])||(e[t]=n-r.value)};h7={add:LE};a(ME,"rebuildUpdateBefore");a(D0,"applyReverse");L0={};a(by,"getRecordAtTime")});function En(e){let t=e.getChanges();return t||(t=Object.create(null),e._setChanges(t)),t}function HE(e,t){let r=e.prototype,n={},s=t.attributes||t.properties||[];for(let c of s){let l=c.name,u,f;if(c.resolve)f={get(){return c.resolve(this,this.getContext?.())},set(d){return c.set(this,d)},configurable:!0};else{switch(c.type){case"String":u=a(function(d){if(!(typeof d=="string"||d==null&&c.nullable!==!1))throw new Kn.ClientError(`${l} must be a string, attempt to assign ${d}`);En(this)[l]=d},"set");break;case"ID":u=a(function(d){if(!(typeof d=="string"||d?.length>0&&d.every?.(h=>typeof h=="string")||d==null&&c.nullable!==!1))throw new Kn.ClientError(`${l} must be a string, attempt to assign ${d}`);En(this)[l]=d},"set");break;case"Float":case"Number":u=a(function(d){let h=d?.__op__?d.value:d;if(!(typeof h=="number"||d==null&&c.nullable!==!1))throw new Kn.ClientError(`${l} must be a number, attempt to assign ${h}`);En(this)[l]=d},"set");break;case"Int":u=a(function(d){let h=d?.__op__?d.value:d;if(!(h>>0===h||d==null&&c.nullable!==!1))if(typeof h=="number"&&Math.abs((h>>0)-h)<=1)h=Math.round(h),d?.__op__?d.value=h:d=h;else throw new Kn.ClientError(`${l} must be an integer between -2147483648 and 2147483647, attempt to assign ${d}`);En(this)[l]=d},"set");break;case"Long":u=a(function(d){let h=d?.__op__?d.value:d;if(!(Math.round(h)===d&&Math.abs(h)<=9007199254740992||d==null&&c.nullable!==!1))if(typeof h=="number"&&Math.abs(h)<=9007199254740992)h=Math.round(h),d?.__op__?d.value=h:d=h;else throw new Kn.ClientError(`${l} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${d}`);En(this)[l]=d},"set");break;case"BigInt":u=a(function(d){let h=d?.__op__?d.value:d;if(!(typeof h=="bigint"||d==null&&c.nullable!==!1))if(typeof h=="string"||typeof h=="number")h=BigInt(h),d?.__op__?d.value=h:d=h;else throw new Kn.ClientError(`${l} must be a number, attempt to assign ${d}`);En(this)[l]=d},"set");break;case"Boolean":u=a(function(d){if(!(typeof d=="boolean"||d==null&&c.nullable!==!1))throw new Kn.ClientError(`${l} must be a boolean, attempt to assign ${d}`);En(this)[l]=d},"set");break;case"Date":u=a(function(d){if(!(d instanceof Date||d==null&&c.nullable!==!1))if(typeof d=="string"||typeof d=="number")d=new Date(d);else throw new Kn.ClientError(`${l} must be a Date, attempt to assign ${d}`);En(this)[l]=d},"set");break;case"Bytes":u=a(function(d){if(!(d instanceof Uint8Array||d==null&&c.nullable!==!1))throw new Kn.ClientError(`${l} must be a Buffer or Uint8Array, attempt to assign ${d}`);En(this)[l]=d},"set");break;case"Blob":u=a(function(d){if(!(d instanceof mi||d==null&&c.nullable!==!1))throw new Kn.ClientError(`${l} must be a Blob, attempt to assign ${d}`);En(this)[l]=d},"set");break;case"Any":case void 0:u=a(function(d){En(this)[l]=d},"set");break;default:u=a(function(d){if(!(typeof d=="object"||d==null&&c.nullable!==!1))throw new Kn.ClientError(`${l} must be an object, attempt to assign ${d}`);En(this)[l]=d},"set")}f={get(){let d=this.getChanges?.();if(d&&l in d){let _=d[l];if(_?.__op__){let p=this.getRecord()?.[l];return _.update(p)}return _}let h=this.getRecord()?.[l];if(h&&typeof h=="object"){let _=Ny(h,c);if(_)return d||this._setChanges(d=Object.create(null)),d[l]=_}return h},set:u,enumerable:!0,configurable:!0}}f.get.isAttribute=!0,n[l]=f,(!(l in r)||Object.getOwnPropertyDescriptor(r,l)?.get?.isAttribute)&&Object.defineProperty(r,l,f)}i("getProperty",function(c){let l=n[c];if(l)return l.get.call(this);let u=this.getChanges();return u?.[c]!==void 0?u[c]:this.getRecord()?.[c]}),i("set",function(c,l){let u=n[c];if(u)return u.set.call(this,l);if(t.sealed)throw new Kn.ClientError("Can not add a property to a sealed table schema");En(this)[c]=l}),i("deleteProperty",function(c){En(this)[c]=void 0}),i("toJSON",function(){let c=this.getChanges?.(),l;for(let f in c){l||(l={...this.getRecord()});let d=c[f];if(d?.__op__){let h=l[f];d=d.update(h)}l[f]=d}return Object.keys(this).length>0&&(l||(l={...this.getRecord()}),Object.assign(l,this)),l||this.getRecord()}),r.get||i("get",r.getProperty),r.delete||i("delete",r.deleteProperty),r.then||i("then",null);function i(c,l){Object.defineProperty(r,c,{value:l,configurable:!0})}a(i,"setMethod");let o=r;do{let c=Object.getPrototypeOf(o);if(c===Object.prototype){Object.setPrototypeOf(o,v0);break}o=c}while(o&&o!==v0)}function Ny(e,t){let r;switch(e.constructor){case Object:return t?(r=t.TrackedObject,r||(t.TrackedObject=r=class extends Xf{static{a(this,"TrackedObject")}},HE(r,t)),new r(e)):new Xf(e);case Array:let n=new xE(e.length,e);for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=Ny(o,t?.elements)),n[s]=o}return n;default:return e}}function kE(e){let t=e.getChanges?.(),r;for(let s in t){r||(r=e.getRecord?{...e.getRecord()}:{});let i=t[s];if(i&&typeof i=="object")if(i.__op__){let o=r[s];i=i.update(o)}else i=kE(i);r[s]=i}return Object.keys(e).length>0&&(r||(r=e.getRecord?{...e.getRecord()}:{}),Object.assign(r,e)),r||e.getRecord?.()||e}function Pc(e,t=e.getChanges?.()){let r;if(e.getRecord&&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=Pc(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={...e.getRecord?.()});let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=Oy[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=Pc(s);r[n]=s}if(!Array.isArray(e))for(let n in e)p7.call(e,n)&&(r||(r={...e.getRecord?.()}),r[n]=e[n]);return r?Object.freeze(r):e.getRecord?.()??e}function UE(e){let t=e.getRecord?.();if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[Cc]||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?.getRecord?.()===s){if(UE(i))return!0}else return!0}}else{let r=e.getChanges?.();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.getRecord?.()===i){if(UE(s))return!0}else return!0}else return!0}}return!1}var Kn,M0,v0,Xf,p7,Cc,xE,BE,wy=be(()=>{Kn=U(_e());vE();cs();a(En,"getChanges");a(HE,"assignTrackedAccessors");M0=Object.prototype,v0=new Proxy({},{get(e,t,r){if(typeof t=="string"){if(t==="then"||t==="getRecord"||t==="getChanges")return;if(M0[t])return M0[t];let n=r.getChanges?.();if(n&&t in n)return n[t];let s=r.getRecord?.()[t];if(s&&typeof s=="object"){let i=Ny(s);if(i)return n||(n=Object.create(null),r._setChanges(n)),n[t]=i,i}return s}}});a(Ny,"trackObject");Xf=class{static{a(this,"GenericTrackedObject")}#e;#t;constructor(t){if(t?.getRecord)throw new Error("Can not track an already tracked object, check for circular references");this.#e=t}getRecord(){return this.#e}setRecord(t){this.#e=t}getChanges(){return this.#t}_setChanges(t){this.#t=t}};HE(Xf,{});a(kE,"collapseData");p7=Object.prototype.hasOwnProperty;a(Pc,"updateAndFreeze");a(UE,"hasChanges");Cc=Symbol.for("has-array-changes"),xE=class extends Array{static{a(this,"TrackedArray")}#e;[Cc];constructor(t,r){super(t),this.#e=r}getRecord(){return this.#e}splice(...t){return this[Cc]=!0,super.splice(...t)}push(...t){return this[Cc]=!0,super.push(...t)}pop(){return this[Cc]=!0,super.pop()}unshift(...t){return this[Cc]=!0,super.unshift(...t)}shift(){return this[Cc]=!0,super.shift()}};xE.prototype.constructor=Array;BE=class{constructor(t){this.value=t}static{a(this,"Addition")}__op__="add";update(t){return(+t||0)+this.value}}});var q0={};Be(q0,{ResourceBridge:()=>Py});function Dy({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 x0(e,t){let r=Ii(e),n=Dy(e,r);if(!r)throw new Ys.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,onlyIfCached:e.onlyIfCached,noCacheStore:e.noCacheStore,noCache:e.noCache,replicateFrom:e.replicateFrom},o;yt(i,()=>new Promise(u=>o=u));let c=e.ids||e.hash_values,l=0;return{[Symbol.asyncIterator](){return{async next(){if(l<c.length){let u=c[l++],f;try{f=await r.get({id:u,lazy:s,select:n},i),f=f&&kE(f)}catch(d){f={message:d.toString()}}return t?{value:{key:u,value:f}}:{value:f}}else return o(),{done:!0}},return(u){return o(),{value:u,done:!0}},throw(u){return o(),{done:!0}}}}}}function Ii(e){let t=e.database||e.schema||m7,r=Je()[t];if(!r)throw(0,Ys.handleHDBError)(new Error,E7.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function B0(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*H0(e,t,r,n){let s,i=0;for await(let o of e.getHistory(t,r)){let c=o.operation??o.type;c==="put"&&(c="upsert");let{id:l,version:u,value:f}=o;if(s?.timestamp===u)s.hash_values.push(l),s.records.push(f);else{if(s&&(yield s,i++,n&&n<=i)){s=void 0;break}s={operation:c,user_name:o.user,timestamp:u,hash_values:[l],records:[f]}}}s&&(yield s)}var k0,FE,Ys,F0,Iy,Cy,G0,E7,m7,g7,S7,U0,Py,$0=be(()=>{"use strict";k0=U(P0()),FE=U(su()),Ys=U(_e());De();F0=U(bf());H();Iy=U(co()),Cy=U(Vs()),G0=U(ae());rc();wy();({HDB_ERROR_MSGS:E7}=Ys.hdb_errors),m7="data",g7=1e4,S7=10,Py=class extends k0.default{static{a(this,"ResourceBridge")}constructor(t){super(t),U0=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,FE.default)(t,"conditions");if(r)throw(0,Ys.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=Ii(t);if(!n)throw new Ys.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:Dy(t,n),sort:t.sort,allowFullScan:!0},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}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 Ys.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}]}ot({database:r.database??r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration,audit:r.audit})}async createAttribute(t){return await Ii(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Ii(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=a((o,c,l)=>(c={...c},delete c[n],r.primaryStore.ifVersion(o,l,()=>r.primaryStore.put(o,c,l)).then(u=>{if(!u){let{value:f,version:d}=r.primaryStore.getEntry(o);return i(o,f,d)}})),"deleteRecord");for(let{key:o,value:c,version:l}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(o,c,l),await new Promise(u=>setImmediate(u));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){Ii(t).dropTable()}createSchema(t){return au({database:t.schema,table:null}),Iy.signalSchemaChange(new Cy.SchemaEventMsg(process.pid,$t.CREATE_SCHEMA,t.schema))}async dropSchema(t){await Ly(t.schema),Iy.signalSchemaChange(new Cy.SchemaEventMsg(process.pid,$t.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,U0.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,F0.default)(t),s,i=Je()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt,originatingOperation:t.operation};return t.replicateTo&&(o.replicateTo=t.replicateTo),t.replicatedConfirmation&&(o.replicatedConfirmation=t.replicatedConfirmation),yt(o,async c=>{if(!i.schemaDefined){s=[];for(let f of n)i.attributes.find(h=>h.name==f)||s.push(f);s.length>0&&await i.addAttributes(s.map(f=>({name:f,indexed:!0})))}let l=[],u=[];for(let f of t.records){let d=f[i.primaryKey],h=d!=null&&await i.get(d,o);if(t.requires_existing&&!h||t.requires_no_existing&&h){u.push(f[i.primaryKey]);continue}h&&(h=kE(h));for(let _ in f)if(Object.prototype.hasOwnProperty.call(f,_)){let p=f[_];if(typeof p=="function")try{let S=p([[h]]);Array.isArray(S)&&(p=S[0].func_val,f[_]=p)}catch(S){throw S.message+="Trying to set key "+_+" on object"+JSON.stringify(f),S}}if(h)for(let _ in h)Object.prototype.hasOwnProperty.call(f,_)||(f[_]=h[_]);await(d==null?i.create(f,o):i.put(f,o)),l.push(f[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:l,new_attributes:s,skipped_hashes:u}})}async deleteRecords(t){let r=Je()[t.schema][t.table],n={user:t.hdb_user};return t.replicateTo&&(n.replicateTo=t.replicateTo),t.replicatedConfirmation&&(n.replicatedConfirmation=t.replicatedConfirmation),yt(n,async s=>{let i=t.hash_values||t.records.map(l=>l[r.primaryKey]),o=[],c=[];for(let l of i)await r.delete(l,n)?o.push(l):c.push(l);return B0(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=Je()[t.schema][t.table];if(!r.createdTimeProperty)throw new Ys.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:fp.LESS}]}),s=!1,i=[],o=[],c=0,l=[],u=a(async()=>{let f=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:l});i.push(...f.deleted_hashes),o.push(...f.skipped_hashes),await(0,G0.async_set_timeout)(S7),l=[],s=!0},"chunkDelete");for await(let f of n)l.push(f[r.primaryKey]),c++,c%g7===0&&await u();return l.length>0&&await u(),s?B0(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,FE.default)(t,"hashes");if(r)throw r;return x0(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of x0(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&BT[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,FE.default)(t,"value");if(n)throw n;let s=Ii(t);if(!s)throw new Ys.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===fp.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,sort:t.sort,select:Dy(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=Ii(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){Ii({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Ii(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=Ii(t),n={};switch(t.search_type){case _p.HASH_VALUE:for(let i of t.search_values)n[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.operation??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 _p.USERNAME:let s=t.search_values;for await(let i of H0(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return H0(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};a(Dy,"getSelect");a(x0,"getRecords");a(Ii,"getTable");a(B0,"createDeleteResponse");a(H0,"groupRecordsInHistory")});var kn=P((VOe,V0)=>{"use strict";var{ResourceBridge:T7}=($0(),D(q0)),A7=ce();A7.initSync();var GE;function R7(){return GE||(GE=new T7,GE)}a(R7,"getBridge");V0.exports=R7()});var hn=P((YOe,z0)=>{"use strict";var $E=RA(),Dr=ae(),y7=require("util"),VE=kn(),b7=Gs(),K0=j(),{handleHDBError:Dc,hdb_errors:O7}=_e(),{HTTP_STATUS_CODES:Lc}=O7,N7=y7.promisify(b7.getTableSchema),w7="updated",Y0="inserted",W0="upserted";z0.exports={insert:C7,update:P7,upsert:D7,validation:I7,flush:L7};async function I7(e){if(Dr.isEmpty(e))throw new Error("invalid update parameters defined.");if(Dr.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Dr.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await N7(e.schema,e.table),r=$E(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&&Dr.isEmptyOrZeroLength(c[n]))throw K0.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(!Dr.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw K0.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!Dr.isEmpty(c[n])&&c[n]!==""&&s.has(Dr.autoCast(c[n]))&&(c.skip=!0),s.add(Dr.autoCast(c[n]));for(let l in c)i[l]=1}),i[n]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(i)}}a(I7,"validation");async function C7(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=$E(e);if(t)throw Dc(new Error,t.message,Lc.BAD_REQUEST);Dr.transformReq(e);let r=Dr.checkSchemaTableExist(e.schema,e.table);if(r)throw Dc(new Error,r,Lc.BAD_REQUEST);let n=await VE.createRecords(e);return qE(Y0,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(C7,"insertData");async function P7(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=$E(e);if(t)throw Dc(new Error,t.message,Lc.BAD_REQUEST);Dr.transformReq(e);let r=Dr.checkSchemaTableExist(e.schema,e.table);if(r)throw Dc(new Error,r,Lc.BAD_REQUEST);let n=await VE.updateRecords(e);return Dr.isEmpty(n.existing_rows)?qE(w7,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):qE(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(P7,"updateData");async function D7(e){if(e.operation!=="upsert")throw Dc(new Error,"invalid operation, must be upsert",Lc.INTERNAL_SERVER_ERROR);let t=$E(e);if(t)throw Dc(new Error,t.message,Lc.BAD_REQUEST);Dr.transformReq(e);let r=Dr.checkSchemaTableExist(e.schema,e.table);if(r)throw Dc(new Error,r,Lc.BAD_REQUEST);let n=await VE.upsertRecords(e);return qE(W0,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(D7,"upsertData");function qE(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===Y0?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===W0?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(qE,"returnObject");function L7(e){return Dr.transformReq(e),VE.flush(e.schema,e.table)}a(L7,"flush")});var ex=P((zOe,Z0)=>{var cu=require("validate.js"),j0=pt(),lu=(H(),D(q)),{handleHDBError:M7,hdb_errors:v7}=_e(),{HDB_ERROR_MSGS:Yt,HTTP_STATUS_CODES:U7}=v7,My=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),x7={STRUCTURE_USER:"structure_user"},Q0=Object.values(lu.ROLE_TYPES_ENUM),B7="attribute_permissions",H7="attribute_name",{PERMS_CRUD_ENUM:uu}=lu,k7=[B7,...Object.values(uu)],J0=[uu.READ,uu.INSERT,uu.UPDATE],F7=[H7,...J0];function G7(e){let t=My();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,X0(e,t)}a(G7,"addRoleValidation");function q7(e){let t=My();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,X0(e,t)}a(q7,"alterRoleValidation");function $7(e){let t=My();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,j0.validateObject(e,t)}a($7,"dropRoleValidation");var V7=["operation","role","id","permission","hdb_user","hdb_auth_header","access"];function X0(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)V7.includes(n[o])||s.push(n[o]);s.length>0&&nr(Yt.INVALID_ROLE_JSON_KEYS(s),r);let i=j0.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{nr(o,r)}),e.permission){let o=K7(e);o&&nr(o,r),Q0.forEach(c=>{e.permission[c]&&!cu.isBoolean(e.permission[c])&&nr(Yt.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(Q0.indexOf(o)<0){if(o===x7.STRUCTURE_USER){let l=e.permission[o];if(typeof l=="boolean")continue;if(Array.isArray(l)){for(let u=0,f=l.length;u<f;u++){let d=l[u];global.hdb_schema[d]||nr(Yt.SCHEMA_NOT_FOUND(d),r)}continue}nr(Yt.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){nr(Yt.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let l in c.tables){let u=c.tables[l];if(!l||!global.hdb_schema[o][l]){nr(Yt.TABLE_NOT_FOUND(o,l),r);continue}if(Object.keys(u).forEach(f=>{k7.includes(f)||nr(Yt.INVALID_PERM_KEY(f),r,o,l)}),Object.values(uu).forEach(f=>{cu.isDefined(u[f])?cu.isBoolean(u[f])||nr(Yt.TABLE_PERM_NOT_BOOLEAN(f),r,o,l):nr(Yt.TABLE_PERM_MISSING(f),r,o,l)}),u.attribute_permissions===void 0){nr(Yt.ATTR_PERMS_ARRAY_MISSING,r,o,l);continue}else if(!(Array.isArray(u.attribute_permissions)||u.attribute_permissions===null)){nr(Yt.ATTR_PERMS_NOT_ARRAY,r,o,l);continue}if(u.attribute_permissions){let f=global.hdb_schema[o][l].attributes.map(({attribute:h})=>h),d={read:!1,insert:!1,update:!1};for(let h in u.attribute_permissions){let _=u.attribute_permissions[h];if(Object.keys(_).forEach(S=>{!F7.includes(S)&&S!==uu.DELETE&&nr(Yt.INVALID_ATTR_PERM_KEY(S),r,o,l)}),!cu.isDefined(_.attribute_name)){nr(Yt.ATTR_PERM_MISSING_NAME,r,o,l);continue}let p=_.attribute_name;if(!f.includes(p)){nr(Yt.INVALID_ATTRIBUTE_IN_PERMS(p),r,o,l);continue}J0.forEach(S=>{cu.isDefined(_[S])?cu.isBoolean(_[S])||nr(Yt.ATTR_PERM_NOT_BOOLEAN(S,p),r,o,l):nr(Yt.ATTR_PERM_MISSING(S,p),r,o,l)}),!d.read&&_.read===!0&&(d.read=!0),!d.insert&&_.insert===!0&&(d.insert=!0),!d.update&&_.update===!0&&(d.update=!0)}if(u.read===!1&&d.read===!0||u.insert===!1&&d.insert===!0||u.update===!1&&d.update===!0){let h=`${o}.${l}`;nr(Yt.MISMATCHED_TABLE_ATTR_PERMS(h),r,o,l)}}}}return Y7(r)}a(X0,"customValidate");Z0.exports={addRoleValidation:G7,alterRoleValidation:q7,dropRoleValidation:$7};function K7(e){let{operation:t,permission:r}=e;if(t===lu.OPERATIONS_ENUM.ADD_ROLE||t===lu.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 Yt.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?lu.ROLE_TYPES_ENUM.SUPER_USER:lu.ROLE_TYPES_ENUM.CLUSTER_USER;return Yt.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(K7,"validateNoSUPerms");function Y7(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:Yt.ROLE_PERMS_ERROR,...e};return M7(new Error,n,U7.BAD_REQUEST)}else return null}a(Y7,"generateRolePermResponse");function nr(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(nr,"addPermError")});var e_=P((JOe,sx)=>{"use strict";var tx=hn(),rx=Kr(),W7=Tc(),Uy=ex(),xy=co(),jOe=require("uuid").v4,z7=require("util"),KE=(H(),D(q)),Q7=ae(),By=rx.searchByValue,j7=rx.searchByHash,J7=z7.promisify(W7.delete),X7=Ks(),Z7=iu(),{hdb_errors:eee,handleHDBError:Mc}=_e(),{HDB_ERROR_MSGS:nx,HTTP_STATUS_CODES:Zf}=eee,{UserEventMsg:Hy}=Vs();sx.exports={addRole:tee,alterRole:ree,dropRole:nee,listRoles:see};function vy(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(vy,"scrubRoleDetails");async function tee(e){let t=Uy.addRoleValidation(e);if(t)throw t;e=vy(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 By(r)||[])}catch(i){throw Mc(i)}if(n&&n.length>0)throw Mc(new Error,nx.ROLE_ALREADY_EXISTS(e.role),Zf.CONFLICT,void 0,void 0,!0);e.id||(e.id=e.role);let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await tx.insert(s),xy.signalUserChange(new Hy(process.pid)),e=vy(e),e}a(tee,"addRole");async function ree(e){let t=Uy.alterRoleValidation(e);if(t)throw t;e=vy(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await tx.update(r)}catch(s){throw Mc(s)}if(n&&n?.message==="updated 0 of 1 records")throw Mc(new Error,"Invalid role id",Zf.BAD_REQUEST,void 0,void 0,!0);return await xy.signalUserChange(new Hy(process.pid)),e}a(ree,"alterRole");async function nee(e){let t=Uy.dropRoleValidation(e);if(t)throw Mc(new Error,t,Zf.BAD_REQUEST,void 0,void 0,!0);let r=new Z7(KE.SYSTEM_SCHEMA_NAME,KE.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await j7(r));if(n.length===0)throw Mc(new Error,nx.ROLE_NOT_FOUND,Zf.NOT_FOUND,void 0,void 0,!0);let s=new X7(KE.SYSTEM_SCHEMA_NAME,KE.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await By(s)),o=!1;if(Q7.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){o=!0;break}}if(o===!0)throw Mc(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,Zf.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await J7(c),xy.signalUserChange(new Hy(process.pid)),`${n[0].role} successfully deleted`}a(nee,"dropRole");async function see(){return By({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(see,"listRoles")});var ky={};Be(ky,{start:()=>ax,startOnMainThread:()=>aee});function ax({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r){let n=(0,ix.parseDocument)(r.toString(),{simpleKeys:!0}).toJSON();for(let s in n){let i=n[s];i.permission||(i={permission:i},i.permission.access&&(i.access=i.permission.access,delete i.permission.access));for(let o in i.permission){if(iee.includes(o))continue;let c=i.permission[o];c.tables||(i.permission[o]=c={tables:c});for(let l in c.tables){let u=c.tables[l];if(u.read=!!u.read,u.insert=!!u.insert,u.update=!!u.update,u.delete=!!u.delete,u.attributes){let f=[];for(let d in u.attributes){let h=u.attributes[d];h.attribute_name=d,f.push(h)}u.attribute_permissions=f,delete u.attributes}if(u.attribute_permissions){if(!Array.isArray(u.attribute_permissions))throw new Error("attribute_permissions must be an array if defined");for(let f of u.attribute_permissions)f.read=!!f.read,f.insert=!!f.insert,f.update=!!f.update}else u.attribute_permissions=null}}i.role=i.id=s,await oee(i)}}}async function oee(e){let t=Je().system.hdb_role;for await(let r of t.search([{attribute:"role",value:e.role}])){let{__createdtime__:n,__updatedtime__:s,...i}=r;return(0,ox.isEqual)(i,e)?void 0:(e.id=r.id,(0,YE.alterRole)(e))}return(0,YE.addRole)(e)}var YE,ix,ox,iee,aee,cx=be(()=>{De();YE=U(e_()),ix=require("yaml"),ox=require("lodash"),iee=["super_user","cluster_user","structure_user"];a(ax,"start");a(oee,"ensureRole");aee=ax});async function WE(e){let t=(0,dx.pathToFileURL)(e).toString();return cee?(t_||(t_=lee(dee)),(await(await t_).import(t)).namespace):import(t)}async function lee(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),t_=new Compartment({console,Math,Date,fetch:uee,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,ux.extname)(r)||(r+=".js"),r)},importHook:a(async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){Object.assign(s,{Resource:qr,tables:Yn,databases:$e})}};let n=await(0,lx.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)},"importHook")}),t_}function uee(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 dee(){return{Resource:qr,tables:Yn}}var lx,ux,dx,cee,t_,Fy=be(()=>{ta();De();lx=require("fs/promises"),ux=require("path"),dx=require("url"),cee=!1;a(WE,"secureImport");a(lee,"getCompartment");a(uee,"secureOnlyFetch");a(dee,"getGlobalVars")});var qy={};Be(qy,{handleFile:()=>fee});async function fee(e,t,r,n){let s=new Map,i=await WE(r);c(i.default)&&n.set((0,Gy.dirname)(t),i.default),o(i,(0,Gy.dirname)(t));function o(l,u){for(let f in l){let d=l[f];c(d)?n.set(u+"/"+f,d):typeof d=="object"&&o(d,u+"/"+f)}}a(o,"recurseForResources");function c(l){return typeof l=="function"&&(l.get||l.put||l.post||l.delete)}return a(c,"isResource"),s}var Gy,fx=be(()=>{Fy();Gy=require("path");a(fee,"handleFile")});var Vy={};Be(Vy,{start:()=>_ee});function _ee({resources:e}){e.set("login",$y),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var $y,_x=be(()=>{ta();a(_ee,"start");$y=class extends qr{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 a_={};Be(a_,{addAnalyticsListener:()=>o_,calculateCPUUtilization:()=>Lx,diffResourceUsage:()=>Mx,recordAction:()=>sr,recordActionBinary:()=>Wn,setAnalyticsEnabled:()=>hee});function hee(e){wx=e}function pee(e,t){if(typeof e=="number"){let r=t.values,n=r.index++;if(n>=r.length){let s=r;t.values=r=new Float32Array(n*2),r.set(s),r.index=n+1}r[n]=e,t.total+=e}else if(typeof e=="boolean")e&&t.total++,t.count++;else if(typeof e=="function")t.count++;else throw new TypeError("Invalid metric value type "+typeof e)}function Eee(e,t,r,n,s,i){let o={};if(typeof t=="number")o.total=t,o.values=new Float32Array(4),o.values.index=1,o.values[0]=t,o.total=t;else if(typeof t=="boolean")o.total=t?1:0,o.count=1;else if(typeof t=="function")o.count=1,o.callback=t;else throw new TypeError("Invalid metric value type "+typeof t);o.description={metric:r,path:n,method:s,type:i},QE.set(e,o)}function sr(e,t,r,n,s){if(!wx)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=QE.get(i);o?pee(e,o):Eee(i,e,t,r,n,s),zE||mee()}function Wn(e,t,r,n,s){sr(!!e,t,r,n,s)}function o_(e){Px.push(e)}function mee(){zE=performance.now(),setTimeout(async()=>{let e=performance.now()-zE;zE=0;let t=[],r={time:Date.now(),period:e,threadId:vc.threadId,metrics:t};for(let[s,i]of QE){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,l=0,u=[],f;for(let d of Dx){let h=Math.floor(c*d),_=o[h-1];if(h>l){let p=h-l;if(_===f){let S=u[u.length-1];typeof S=="number"?u[u.length-1]={value:S,count:1+p}:S.count+=p}else u.push(p>1?{value:_,count:p}:_),f=_;l=h}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:u,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 vx()}let n=process.memoryUsage();t.push({metric:"memory",threadId:vc.threadId,byThread:!0,...n});for(let s of Px)s(t);QE=new Map,vc.parentPort?vc.parentPort.postMessage({type:Cx,report:r}):Bx({report:r})},Ix).unref()}function jE(e,t,r){let n={id:(0,s_.getNextMonotonicTime)(),metric:t,...r};e.primaryStore.put(n.id,n,{append:!0}).then(s=>{s||e.primaryStore.put(n.id,n)})}function Lx(e,t){let r=e.userCPUTime+e.systemCPUTime;return Math.round(r/t*100)/100}function Mx(e,t){return{userCPUTime:t.userCPUTime/1e3-(e?.userCPUTime??0),systemCPUTime:t.systemCPUTime/1e3-(e?.systemCPUTime??0),minorPageFault:t.minorPageFault-(e?.minorPageFault??0),majorPageFault:t.majorPageFault-(e?.majorPageFault??0),fsRead:t.fsRead-(e?.fsRead??0),fsWrite:t.fsWrite-(e?.fsWrite??0),voluntaryContextSwitches:t.voluntaryContextSwitches-(e?.voluntaryContextSwitches??0),involuntaryContextSwitches:t.involuntaryContextSwitches-(e?.involuntaryContextSwitches??0)}}function gee(e,t,r){let n=0;for(let[s,i]of Object.entries(r)){let o=`${t}.${s}`,c=i.getSize(),l={database:t,table:s,size:c};jE(e,"table-size",l),Uc.trace?.(`table ${o} size metric: ${JSON.stringify(l)}`),n+=c}return n}function hx(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s.getAuditSize(),o=Nx.default.statSync(s.primaryStore.env.path).size,c=gee(e,r,n),l=o-c,u={database:r,size:o,used:c,free:l,audit:i};jE(e,"database-size",u),Uc.trace?.(`database ${r} size metric: ${JSON.stringify(u)}`)}catch(s){Uc.warn?.("Error getting DB size metrics",s)}}function px(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s.getStorageStats(),o={database:r,...i};jE(e,"storage-volume",o),Uc.trace?.(`db ${r} storage volume metrics: ${JSON.stringify(o)}`)}catch(s){Uc.warn?.("Error getting DB volumne metrics",s)}}async function See(e,t=6e4){let r=Yy(),n=Ux(),s=new Promise(m=>{let A=performance.now();setImmediate(()=>{let w=performance.now();w-A>5e3&&Uc.warn?.("Unusually high event queue latency on the main thread of "+Math.round(w-A)+"ms"),A=performance.now()}),n.primaryStore.prefetch([1],()=>{let w=performance.now();w-A>5e3&&Uc.warn?.("Unusually high task queue latency on the main thread of "+Math.round(w-A)+"ms"),m(w-A)})}),i;for(let m of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(m.value?.time){i=m.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,l=new Map,u=[],f;for(let{key:m,value:A}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!A)continue;if(o){if(m>o+t)break}else o=m;f=m;let{metrics:w,threadId:M}=A;for(let F of w||[]){let{path:G,method:K,type:ee,metric:ie,count:X,total:re,distribution:z,threads:he,...Te}=F;X||(X=1);let Ie=ie+(G?"-"+G:"");K!==void 0&&(Ie+="-"+K),ee!==void 0&&(Ie+="-"+ee);let pe=c.get(Ie);if(pe){if(pe.threads){let Gt=pe.threads[M];if(Gt)pe=Gt;else{pe.threads[M]={...Te};continue}}pe.count||(pe.count=1);let Ft=pe.count;for(let Gt in Te){let Jt=Te[Gt];typeof Jt=="number"&&(pe[Gt]=(pe[Gt]*Ft+Jt*X)/(Ft+X))}pe.count+=X,re>=0&&(pe.total+=re,pe.ratio=pe.total/pe.count)}else pe={period:t,...F},delete pe.distribution,c.set(Ie,pe),pe.byThread&&(pe.threads=[],pe.threads[M]={...Te},u.push(pe));if(z){z=z.map(Gt=>typeof Gt=="number"?{value:Gt,count:1}:Gt);let Ft=l.get(Ie);Ft?Ft.push(...z):l.set(Ie,z)}}await vx()}for(let m of u){let{path:A,method:w,type:M,metric:F,count:G,total:K,distribution:ee,threads:ie,...X}=m;ie=ie.filter(re=>re);for(let re in X){if(typeof m[re]!="number")continue;let z=0;for(let he of ie){let Te=he[re];typeof Te=="number"&&(z+=Te)}m[re]=z}m.count=ie.length,delete m.threads,delete m.byThread}for(let[m,A]of l){let w=c.get(m);A.sort((Gt,Jt)=>Gt.value>Jt.value?1:-1);let M=w.count-1,F=[],G=0,K=0,ee;for(let Gt of Dx){let Jt=M*Gt;for(;G<Jt;)ee=A[K++],G+=ee.count,K===1&&G--;let fr=A[K>1?K-2:0];ee||(ee=A[0]),F.push(ee.value-(ee.value-fr.value)*(G-Jt)/ee.count)}let[ie,X,re,z,he,Te,Ie,pe,Ft]=F;Object.assign(w,{p1:ie,p10:X,p25:re,median:z,p75:he,p90:Te,p95:Ie,p99:pe,p999:Ft})}let d;for(let[m,A]of c)A.id=(0,s_.getNextMonotonicTime)(),A.time=f,n.primaryStore.put(A.id,A,{append:!0}).then(w=>{w||n.primaryStore.put(A.id,A)}),d=!0;let h=Date.now(),{idle:_,active:p}=performance.eventLoopUtilization();if(d||p*10>_){let m=(0,s_.getNextMonotonicTime)(),A={id:m,metric:"main-thread-utilization",idle:_-Ex,active:p-mx,taskQueueLatency:await s,time:h,...process.memoryUsage()};n.primaryStore.put(m,A,{append:!0}).then(w=>{w||n.primaryStore.put(m,A)})}Ex=_,mx=p;let S=process.resourceUsage(),g=Mx(r_,S);g.time=h,g.period=r_.time?h-r_.time:t,g.cpuUtilization=Lx(r_,g.period),jE(n,"resource-usage",g),r_=g;let T=Je();hx(n,T),hx(n,{system:T.system}),px(n,T),px(n,{system:T.system})}async function gx(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function Yy(){return Sx||(Sx=ot({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function Ux(){return Tx||(Tx=ot({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function Ree(){xx=!0;let e=(0,i_.get)(B.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await See(Ix,e),await gx(Yy(),Tee),await gx(Ux(),Aee)},Math.min(e/2,2147483647)).unref()}function Bx(e,t){let r=e.report;r.threadId=t?.threadId||vc.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(Ax+=n.mean*n.count);r.totalBytesProcessed=Ax,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(Rx.get(t))}),Rx.set(t,t.performance.eventLoopUtilization())),r.id=(0,s_.getNextMonotonicTime)(),Yy().primaryStore.put(r.id,r),xx||Ree(),yee&&(Hx=Oee(r))}async function Oee(e){if(await Hx,!fa){let r=(0,n_.dirname)((0,bx.getLogFilePath)());try{fa=await(0,Ky.open)((0,n_.join)(r,"analytics.log"),"r+")}catch{fa=await(0,Ky.open)((0,n_.join)(r,"analytics.log"),"w+")}}let t=(await fa.stat()).size;if(t>bee){let r=Buffer.alloc(t);await fa.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await fa.write(r,{position:0}),await fa.truncate(r.length),t=r.length}await fa.write(JSON.stringify(e)+`
20
- `,t)}var vc,yx,bx,Ox,n_,Ky,s_,i_,Nx,Uc,QE,wx,zE,Ix,Cx,Px,Dx,Ex,mx,r_,vx,Tee,Aee,Sx,Tx,xx,Ax,Rx,yee,Hx,fa,bee,Ci=be(()=>{vc=require("worker_threads"),yx=U(rt());De();bx=U(j()),Ox=U(Qi()),n_=require("path"),Ky=require("fs/promises"),s_=U(an()),i_=U(ce());H();$r();Nx=U(require("node:fs")),Uc=(0,Ox.loggerWithTag)("analytics");(0,i_.initSync)();QE=new Map,wx=(0,i_.get)(B.ANALYTICS_AGGREGATEPERIOD)>-1;a(hee,"setAnalyticsEnabled");a(pee,"recordExistingAction");a(Eee,"recordNewAction");a(sr,"recordAction");je.recordAnalytics=sr;a(Wn,"recordActionBinary");zE=0,Ix=1e3,Cx="analytics-report",Px=[];a(o_,"addAnalyticsListener");Dx=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(mee,"sendAnalytics");a(jE,"storeMetric");a(Lx,"calculateCPUUtilization");a(Mx,"diffResourceUsage");a(gee,"storeTableSizeMetrics");a(hx,"storeDBSizeMetrics");a(px,"storeVolumeMetrics");a(See,"aggregation");Ex=0,mx=0,r_={},vx=a(()=>new Promise(setImmediate),"rest");a(gx,"cleanup");Tee=36e5,Aee=31536e6;a(Yy,"getRawAnalyticsTable");a(Ux,"getAnalyticsTable");(0,yx.setChildListenerByType)(Cx,Bx);a(Ree,"startScheduledTasks");Ax=0,Rx=new Map,yee=!1;a(Bx,"recordAnalytics");bee=1e6;a(Oee,"logAnalytics")});var kx={};Be(kx,{Headers:()=>fo,appendHeader:()=>JE,mergeHeaders:()=>Wy});function JE(e,t,r,n){if(e.append)e.append(t,r,n);else if(e.set){let s=e.get(t);if(s)if(n)r=(typeof s=="string"?s:s.join(", "))+", "+r;else if(typeof s=="string")r=[s,r];else{s.push(r);return}return e.set(t,r)}else e[t]=(e[t]?e[t]+", ":"")+r}function Wy(e,t){(typeof e.set!="function"||typeof e.has!="function")&&(e=new fo(e));for(let[r,n]of t)e.has(r)?r.toLowerCase()==="set-cookie"&&e.append?.(r,n,!0):e.set(r,n);return e}var fo,c_=be(()=>{fo=class extends Map{static{a(this,"Headers")}constructor(t){if(t)if(t[Symbol.iterator])super(t);else{super();for(let r in t)this.set(r,t[r])}else super()}set(t,r){return typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r),super.set(t.toLowerCase(),[t,r])}get(t){return typeof t!="string"&&(t=""+t),super.get(t.toLowerCase())?.[1]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase();if(!super.has(n))return super.set(n,[t,r])}append(t,r,n){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase(),i=super.get(s);if(i){let o=i[1];if(n)r=(typeof o=="string"?o:o.join(", "))+", "+r;else if(typeof o=="string")r=[o,r];else{o.push(r);return}}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}};a(JE,"appendHeader");a(Wy,"mergeHeaders")});function Vx(e){let t={openapi:Nee,info:{title:"HarperDB HTTP REST interface",version:$x.packageJson.version},paths:{},components:{schemas:{},securitySchemes:{basicAuth:{type:"http",scheme:"basic"},bearerAuth:{type:"http",scheme:"bearer",bearerFormat:"JWT"}}}},r=[{basicAuth:[],bearerAuth:[]}];for(let[,n]of e){if(!n.path||n.Resource.isError)continue;let{path:s}=n,i=s.split("/").slice(-1),{attributes:o,primaryKey:c,prototype:l}=n.Resource;if(c=c??"id",!c)continue;let u={},f=[];if(o)for(let{type:A,name:w,elements:M,relationship:F,definition:G}of o){if(F)A==="array"?u[w]={type:"array",items:{$ref:_a+M.type}}:u[w]={$ref:_a+A};else{let K=G??M?.definition;if(K){if(!t.components.schemas[K.type]){let ee={};K.properties.forEach(ie=>{ee[ie.name]=new Jy(zy[ie.type],ie.type)}),t.components.schemas[K.type]=new qx(ee)}A==="array"?u[w]={type:"array",items:{$ref:_a+K.type}}:u[w]={$ref:_a+K.type}}else A==="array"?M.type==="Any"||M.type=="ID"?u[w]={type:"array",items:{format:M.type}}:u[w]={type:"array",items:new Jy(zy[M.type],M.type)}:A==="Any"||A=="ID"?u[w]={format:A}:u[w]=new Jy(zy[A],A)}f.push(new Xy(w,"query",u[w]))}let d=Object.keys(u),h=new Xy(c,"path",{format:"ID"});h.required=!0,h.description="primary key of record";let _=new Xy("property","path",{enum:d});_.required=!0,t.components.schemas[i]=new qx(u);let p=l.post!==Resource.prototype.post||l.update,S=typeof l.put=="function",g=typeof l.get=="function",T=typeof l.delete=="function",m="/"+s+"/";p&&(t.paths[m]={},t.paths[m].post=new wee(i,r,"create a new record auto-assigning a primary key")),g&&(t.paths[m]||(t.paths[m]={}),t.paths[m].get=new Qy(f,r,{200:new jy({$ref:_a+i})},"search for records by the specified property name and value pairs")),T&&(t.paths[m]||(t.paths[m]={}),t.paths[m].delete=new Gx(f,r,"delete all the records that match the provided query",{204:new Fx})),m="/"+s+"/{"+c+"}",g&&(t.paths[m]={},t.paths[m].get=new Qy([h],r,{200:new jy({$ref:_a+i})},"retrieve a record by its primary key")),S&&(t.paths[m]||(t.paths[m]={}),t.paths[m].put=new Iee([h],r,i,"create or update the record with the URL path that maps to the record's primary key")),T&&(t.paths[m]||(t.paths[m]={}),t.paths[m].delete=new Gx([h],r,"delete a record with the given primary key",{204:new Fx})),g&&_.schema.enum.length>0&&(m="/"+s+"/{"+c+"}.{property}",t.paths[m]={},t.paths[m].get=new Qy([h,_],r,{200:new jy({enum:d})},"used to retrieve the specified property of the specified record"))}return t}function wee(e,t,r){this.description=r,this.requestBody={content:{"application/json":{schema:{$ref:_a+e}}}},this.security=t,this.responses={200:{description:Zy,headers:{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}},content:{"application/json":{schema:{type:"string",format:"ID"}}}}}}function Qy(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function jy(e){this.description=Zy,this.content={"application/json":{schema:e}}}function Fx(){this.description="successfully processed request, no content returned to client"}function Iee(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:_a+r}}}},this.responses={200:{description:Zy}}}function Gx(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function qx(e){this.type="object",this.properties=e}function Jy(e,t){this.type=e,this.format=t}function Xy(e,t,r){this.name=e,this.in=t,this.schema=r}var $x,Nee,zy,_a,Zy,Kx=be(()=>{$x=U(_t()),Nee="3.0.3",zy={Int:"integer",Float:"number",Long:"integer",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer",array:"array"},_a="#/components/schemas/",Zy="successful operation";a(Vx,"generateJsonApi");a(wee,"Post");a(Qy,"Get");a(jy,"Response200");a(Fx,"Response204");a(Iee,"Put");a(Gx,"Delete");a(qx,"ResourceSchema");a(Jy,"Type");a(Xy,"Parameter")});var ZE={};Be(ZE,{parseHeaderValue:()=>tb,start:()=>Dee});async function Pee(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream",s=n?"CONNECT":e.method;e.search&&Pp(e);let i=new fo;try{e.responseHeaders=i;let o=e.url.slice(1),c,l;if(o!==Yx){let g=XE.getMatch(o,n?"sse":"rest");if(!g)return t(e);e.handlerPath=g.path,c=new nc(g.relativeURL),c.async=!0,l=g.Resource}if(l?.isCaching){let g=r["cache-control"];if(g){let T=tb(g);for(let m of T)switch(m.name){case"max-age":e.expiresAt=m.value*1e3+Date.now();break;case"only-if-cached":e.onlyIfCached=!0;break;case"no-cache":e.noCache=!0;break;case"no-store":e.noCacheStore=!0;break;case"stale-if-error":e.staleIfError=!0;break;case"must-revalidate":e.mustRevalidate=!0;break}}}let u=r["x-replicate-to"];if(u){let g=tb(u).map(T=>(T.next?.name==="confirm"&&T.next.value>=0&&(e.replicatedConfirmation=+T.next.value),T.name));e.replicateTo=g.length===1&&+g[0]>=0?+g[0]:g[0]==="*"?void 0:g}r["x-replicate-from"]==="none"&&(e.replicateFrom=!1);let d=await yt(e,()=>{if(r["content-length"]||r["transfer-encoding"])try{e.data=Ji(r["content-type"],!0)(e.body,e.headers)}catch(g){throw new du.ClientError(g,400)}if(e.authorize=!0,o===Yx&&s==="GET"){if(e?.user?.role?.permission?.super_user)return Vx(XE);throw new du.ServerError("Forbidden",403)}switch(s){case"GET":case"HEAD":return l.get(c,e);case"POST":return l.post(c,e.data,e);case"PUT":return l.put(c,e.data,e);case"DELETE":return l.delete(c,e);case"PATCH":return l.patch(c,e.data,e);case"OPTIONS":i.setIfNone("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return l.connect(c,null,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return l.query(c,e.data,e);case"COPY":return l.copy(c,r.destination,e);case"MOVE":return l.move(c,r.destination,e);case"BREW":throw new du.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new du.ServerError(`Method ${s} is not recognized`,501)}}),h=200,_;if(d==null)h=s==="GET"||s==="HEAD"?404:204,eb.lastModified&&e.lastModified&&i.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(d.status>0&&d.headers){let g=Wy(d.headers,i);return d.headers!==g&&(d.headers=g),d.data!==void 0&&(d.body=uf(d.data,e,d)),d}else if(_=e.lastModified){Cee[0]=_;let g=String.fromCharCode(34,(Lr[0]&63)+62,(Lr[0]>>6)+(Lr[1]<<2&63)+62,(Lr[1]>>4)+(Lr[2]<<4&63)+62,(Lr[2]>>2)+62,(Lr[3]&63)+62,(Lr[3]>>6)+(Lr[4]<<2&63)+62,(Lr[4]>>4)+(Lr[5]<<4&63)+62,(Lr[5]>>2)+62,(Lr[6]&63)+62,(Lr[6]>>6)+(Lr[7]<<2&63)+62,34),T=r["if-none-match"];T&&g==T?(d?.onDone&&d.onDone(),h=304,d=void 0):i.setIfNone("ETag",g),eb.lastModified&&i.setIfNone("Last-Modified",new Date(_).toUTCString())}e.createdResource&&(h=201),e.newLocation&&i.setIfNone("Location",e.newLocation);let p={status:h,headers:i,body:void 0},S=d?.wasLoadedFromSource?.();return S!==void 0&&(p.wasCacheMiss=S,!S&&_&&i.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||_))/1e3))),d!==void 0&&(p.body=uf(d,e,p),s==="HEAD"&&(p.body=void 0)),p}catch(o){o.statusCode?o.statusCode===500?Pi.warn(o):Pi.info(o):Pi.error(o),o.statusCode===405&&(o.method&&(o.message+=` to handle HTTP method ${o.method.toUpperCase()||""}`),o.allow&&(o.allow.push("trace","head","options"),i.setIfNone("Allow",o.allow.map(l=>l.toUpperCase()).join(", "))));let c={status:o.statusCode||500,headers:i,body:void 0};return c.body=uf(o.contentType?o:o.toString(),e,c),c}}function Dee(e){eb=e,!Wx&&(Wx=!0,XE=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return Pee(t,r)},e),e.webSocket!==!1&&e.server.ws(async(t,r,n)=>{l_++;let s=new Mn;zx||(zx=!0,o_(l=>{l_>0&&l.push({metric:"ws-connections",connections:l_,byThread:!0})}));let i;t.on("error",l=>{i=!0,Pi.warn(l)});let o;t.on("message",a(function(u){o||(o=Ji(r.requestedContentType??r.headers.asObject["content-type"],!1));let f=o(u);sr(u.length,"bytes-received",r.handlerPath,"message","ws"),s.push(f)},"message"));let c;t.on("close",()=>{l_--,Wn(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()});try{await n;let l=r.url.slice(1),u=XE.getMatch(l,"ws");if(Wn(!!u,"connection","ws","connect"),u){r.handlerPath=u.path,sr(p=>({count:p.count,total:l_}),"connections",r.handlerPath,"connect","ws"),r.authorize=!0;let f=new nc(u.relativeURL),d=u.Resource;c=(await yt(r,()=>d.connect(f,s,r)))[Symbol.asyncIterator]();let _;for(;!(_=await c.next()).done;){let p=await sa(_.value,r);t.send(p),sr(p.length,"bytes-sent",r.handlerPath,"message","ws")}}else return t.close(1011,`No resource was found to handle ${r.pathname}`)}catch(l){l.statusCode?l.statusCode===500?Pi.warn(l):Pi.info(l):Pi.error(l),t.close(Lee[l.statusCode]||1011,l.toString())}t.close()},e))}function tb(e){return e.trim().split(",").map(t=>{let r,n=t.trim().split(";"),s;for(;s=n.pop();)if(s.includes("=")){let[i,o]=s.trim().split("=");i=i.trim(),o&&(o=o.trim()),r={name:i.toLowerCase(),value:o,next:r}}else r={name:s.toLowerCase(),next:r};return r})}var Pi,du,Lr,Cee,eb,Yx,Wx,XE,zx,l_,Lee,Qx=be(()=>{Xi();Ci();Pi=U(j()),du=U(_e());sf();Ul();rc();c_();Kx();sf();Lr=new Uint8Array(8),Cee=new Float64Array(Lr.buffer,0,1),eb={},Yx="openapi";a(Pee,"http");l_=0;a(Dee,"start");Lee={401:3e3,403:3003};a(tb,"parseHeaderValue")});var rb=P((NNe,Jx)=>{var{recordAction:em,recordActionBinary:jx}=(Ci(),D(a_)),Mee=require("fastify-plugin"),vee=200;Jx.exports=Mee(function(e,t,r){e.addHook("onResponse",async(n,s)=>{let i=s.elapsedTime}),e.addHook("onSend",async(n,s,i)=>{let o=s.elapsedTime,c=performance.now(),l=s.request.routeOptions,u,f,d;l.config?.isOperation?(u=n.body?.operation,f="operation"):(u=l.url,f="fastify-route",d=l.method),em(o,"duration",u,d,f),jx(s.raw.statusCode<400,"success",u,d,f),jx(1,"response_"+s.raw.statusCode,u,d,f);let h=vee;i?.pipe?(i.on("data",g=>{h+=g.length}),i.on("end",()=>{em(performance.now()-c,"transfer",u,d,f),em(h,"bytes-sent",u,d,f)})):(h+=i?.length||0,em(h,"bytes-sent",u,d,f));let _=o.toFixed(3),p=s.getHeader("Server-Timing"),S=`db;dur=${_}`;s.header("Server-Timing",p?`${p}, ${S}`:S)}),r()},{name:"hdb-request-time"})});var Zx=P((wNe,Xx)=>{var Uee=pt(),xee={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};Xx.exports=function(e){return Uee.validateObject(e,xee)}});var tm=P((INe,eB)=>{"use strict";var Bee=(H(),D(q)).OPERATIONS_ENUM,nb=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=Bee.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};eB.exports=nb});var rB=P((PNe,tB)=>{"use strict";var Hee={OPERATION:"operation",REFRESH:"refresh"},sb=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},ib=class{static{a(this,"JWTRSAKeys")}constructor(t,r,n){this.public_key=t,this.private_key=r,this.passphrase=n}};tB.exports={JWTTokens:sb,TOKEN_TYPE_ENUM:Hee,JWTRSAKeys:ib}});var fu=P((LNe,iB)=>{"use strict";var d_=require("jsonwebtoken"),ob=require("fs-extra"),ab=ae(),fs=(H(),D(q)),{handleHDBError:mn,hdb_errors:kee}=_e(),{HTTP_STATUS_CODES:gn,AUTHENTICATION_ERROR_MSGS:Sn}=kee,u_=j(),rm=(hE(),D(_E)),ub=qn(),Fee=hn().update,Gee=tm(),qee=co(),{UserEventMsg:$ee}=Vs(),ha=ce();ha.initSync();var cb=require("path"),{JWTTokens:Vee,JWTRSAKeys:Kee,TOKEN_TYPE_ENUM:nm}=rB(),Yee=ha.get(fs.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?ha.get(fs.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",Wee=ha.get(fs.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?ha.get(fs.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",sm="RS256",lb;iB.exports={createTokens:zee,validateOperationToken:jee,refreshOperationToken:Qee,validateRefreshToken:sB,getJWTRSAKeys:f_};async function zee(e){if(ab.isEmpty(e)||typeof e!="object")throw mn(new Error,Sn.INVALID_AUTH_OBJECT,gn.BAD_REQUEST,void 0,void 0,!0);if(ab.isEmpty(e.username))throw mn(new Error,Sn.USERNAME_REQUIRED,gn.BAD_REQUEST,void 0,void 0,!0);if(ab.isEmpty(e.password))throw mn(new Error,Sn.PASSWORD_REQUIRED,gn.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await ub.findAndValidateUser(e.username,e.password),!t)throw mn(new Error,Sn.INVALID_CREDENTIALS,gn.UNAUTHORIZED,void 0,void 0,!0)}catch(h){throw u_.error(h),mn(new Error,Sn.INVALID_CREDENTIALS,gn.UNAUTHORIZED,void 0,void 0,!0)}let r=await f_(),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 nB(i,r.private_key,r.passphrase),c=await d_.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:Wee,algorithm:sm,subject:nm.REFRESH}),l=rm.hash(c,rm.HASH_FUNCTION.SHA256),u=new Gee(fs.SYSTEM_SCHEMA_NAME,fs.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:l}]),f,d;try{f=await Fee(u)}catch(h){u_.error(h),d=h}if(d!==void 0||f.skipped_hashes.length>0)throw mn(new Error,Sn.REFRESH_TOKEN_SAVE_FAILED,gn.INTERNAL_SERVER_ERROR);return qee.signalUserChange(new $ee(process.pid)),new Vee(o,c)}a(zee,"createTokens");async function nB(e,t,r){return await d_.sign(e,{key:t,passphrase:r},{expiresIn:Yee,algorithm:sm,subject:nm.OPERATION})}a(nB,"signOperationToken");async function f_(){if(lb===void 0)try{let e=cb.join(ha.getHdbBasePath(),fs.LICENSE_KEY_DIR_NAME,fs.JWT_ENUM.JWT_PASSPHRASE_NAME),t=cb.join(ha.getHdbBasePath(),fs.LICENSE_KEY_DIR_NAME,fs.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=cb.join(ha.getHdbBasePath(),fs.LICENSE_KEY_DIR_NAME,fs.JWT_ENUM.JWT_PUBLIC_KEY_NAME),n=(await ob.readFile(e)).toString(),s=(await ob.readFile(t)).toString(),i=(await ob.readFile(r)).toString();lb=new Kee(i,s,n)}catch(e){throw u_.error(e),mn(new Error,Sn.NO_ENCRYPTION_KEYS,gn.INTERNAL_SERVER_ERROR)}return lb}a(f_,"getJWTRSAKeys");async function Qee(e){if(!e)throw mn(new Error,Sn.INVALID_BODY,gn.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw mn(new Error,Sn.REFRESH_TOKEN_REQUIRED,gn.BAD_REQUEST,void 0,void 0,!0);await sB(e.refresh_token);let t=await f_(),r=await d_.decode(e.refresh_token);return{operation_token:await nB({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(Qee,"refreshOperationToken");async function jee(e){try{let t=await f_(),r=await d_.verify(e,t.public_key,{algorithms:sm,subject:nm.OPERATION});return await ub.findAndValidateUser(r.username,void 0,!1)}catch(t){throw u_.warn(t),t.name&&t.name==="TokenExpiredError"?mn(new Error,Sn.TOKEN_EXPIRED,gn.FORBIDDEN):mn(new Error,Sn.INVALID_TOKEN,gn.UNAUTHORIZED)}}a(jee,"validateOperationToken");async function sB(e){let t;try{let r=await f_(),n=await d_.verify(e,r.public_key,{algorithms:sm,subject:nm.REFRESH});t=await ub.findAndValidateUser(n.username,void 0,!1)}catch(r){throw u_.warn(r),r.name&&r.name==="TokenExpiredError"?mn(new Error,Sn.TOKEN_EXPIRED,gn.FORBIDDEN):mn(new Error,Sn.INVALID_TOKEN,gn.UNAUTHORIZED)}if(!rm.validate(t.refresh_token,e,rm.HASH_FUNCTION.SHA256))throw mn(new Error,Sn.INVALID_TOKEN,gn.UNAUTHORIZED);return t}a(sB,"validateRefreshToken")});var db=P((UNe,cB)=>{"use strict";var Jee=Zx(),_u=require("passport"),Xee=require("passport-local").Strategy,Zee=require("passport-http").BasicStrategy,ete=require("util"),tte=qn(),aB=ete.callbackify(tte.findAndValidateUser),vNe=Ln(),rte=(H(),D(q)),oB=fu();_u.use(new Xee(function(e,t,r){aB(e,t,r)}));_u.use(new Zee(function(e,t,r){aB(e,t,r)}));_u.serializeUser(function(e,t){t(null,e)});_u.deserializeUser(function(e,t){t(null,e)});function nte(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":_u.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===rte.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?oB.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):oB.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:_u.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(nte,"authorize");function ste(e,t){let r=Jee(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(ste,"checkPermissions");cB.exports={authorize:nte,checkPermissions:ste}});var im=P((BNe,lB)=>{"use strict";var ite=kn();lB.exports={writeTransaction:ote};function ote(e,t,r){return ite.writeTransaction(e,t,r)}a(ote,"writeTransaction")});var _B=P((FNe,fB)=>{"use strict";var ate=Kr(),cte=Gs(),uB=j(),lte=hn(),kNe=im(),ute=require("clone"),_b=require("alasql"),dte=iE(),dB=require("util"),fte=dB.promisify(cte.getTableSchema),_te=dB.promisify(ate.search),hte=(H(),D(q)),fb=ae();dte(_b);fB.exports={update:Ete};var pte="There was a problem performing this update. Please check the logs and try again.";async function Ete({statement:e,hdb_user:t}){let r=await fte(e.table.databaseid,e.table.tableid),n=mte(e.columns);fb.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=ute(s),c=fb.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,u=_b.parse(l).statements[0],f=await _te(u),d=gte(n,f);return Ste(o,d,t)}a(Ete,"update");function mte(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=_b.compile(`SELECT ${r.expression.toString()} AS [${hte.FUNC_VAL}] FROM ?`)}),t}catch(t){throw uB.error(t),new Error(pte)}}a(mte,"createUpdateRecord");function gte(e,t){return fb.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(gte,"buildUpdateRecords");async function Ste(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await lte.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){uB.error(`Error delete new_attributes from update response: ${i}`)}return s}a(Ste,"updateRecords")});var pB=P((VNe,hB)=>{var Tte=require("alasql"),Ate=Kr(),Rte=j(),yte=kn(),pb=require("util"),hb=ae(),bte=(H(),D(q)),Ote=Gs(),qNe=im(),$Ne=hn(),Nte="record",wte="successfully deleted",Ite=pb.callbackify(Lte),Cte=pb.promisify(Ate.search),Pte=pb.promisify(Ote.getTableSchema);hB.exports={convertDelete:Ite};function Dte(e){return`${e.deleted_hashes.length} ${Nte}${e.deleted_hashes.length===1?"":"s"} ${wte}`}a(Dte,"generateReturnMessage");async function Lte({statement:e,hdb_user:t}){let r=await Pte(e.table.databaseid,e.table.tableid);hb.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=hb.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=Tte.parse(o).statements[0],l={operation:bte.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await Cte(c);let u=await yte.deleteRecords(l);return hb.isEmptyOrZeroLength(u.message)&&(u.message=Dte(u)),delete u.txn_time,u}catch(u){throw Rte.error(u),u.hdb_code?u.message:u}}a(Lte,"convertDelete")});var TB=P((YNe,SB)=>{"use strict";var Mte=oo(),{hdb_errors:EB}=_e(),{getDatabases:mB}=(De(),D(nt));SB.exports={checkSchemaExists:gB,checkSchemaTableExists:vte,schema_describe:Mte};async function gB(e){if(!mB()[e])return EB.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(gB,"checkSchemaExists");async function vte(e,t){let r=await gB(e);if(r)return r;if(!mB()[e][t])return EB.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(vte,"checkSchemaTableExists")});var Tb=P((JNe,LB)=>{"use strict";var{decode:Ute}=require("msgpackr"),{isMainThread:zNe,parentPort:QNe,threadId:jNe}=require("worker_threads"),cm=Er(),hu=Ot(),gb=(H(),D(q)),Qr=j(),mb=ce(),xte=(H(),D(q)),{onMessageByType:Bte}=rt(),bB=io(),{recordAction:AB,recordActionBinary:Hte}=(Ci(),D(a_)),{publishToStream:kte}=cm,{ConsumerEvents:RB}=require("nats"),Fte=Kr(),{promisify:Gte}=require("util"),{decodeBlobsWithWrites:qte}=(cs(),D(fm)),OB=Gte(setTimeout),lm=1e4,um,am,$te,Vte,NB,__=new Map,pu=new Map;LB.exports={initialize:wB,ingestConsumer:Sb,setSubscription:Kte,setIgnoreOrigin:zte,getDatabaseSubscriptions:Wte,updateConsumer:IB};async function wB(){Bte(gb.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await IB(n)}),NB=!0,Qr.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await cm.getNATSReferences();um=e,am=e.info.server_name,$te=t,Vte=r}a(wB,"initialize");async function IB(e){if(e.status==="start"){let{js:t,jsm:r}=await CB(e.node_domain_name);Sb(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=__.get(e.stream_name+e.node_domain_name);t&&(Qr.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),__.set(e.stream_name+e.node_domain_name,"close")),pu.get(e.node_domain_name)==="failed"&&pu.set(e.node_domain_name,"close")}}a(IB,"updateConsumer");var dm=new Map;function Kte(e,t,r){let n=dm.get(e);n||dm.set(e,n=new Map),n.set(t,r),NB||wB().then(Yte)}a(Kte,"setSubscription");async function Yte(){let e=await Fte.searchByValue({database:"system",table:"hdb_nodes",search_attribute:"name",search_value:"*"});for await(let t of e){let r=t.name+hu.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions||[])if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await CB(r),!n))break;let{schema:o,table:c}=i,l=bB.createNatsTableStreamName(o,c);Sb(l,n,s,r)}}}a(Yte,"accessConsumers");async function CB(e){let t,r,n=1;for(;!r;)try{t=await um.jetstream({domain:e}),r=await um.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(pu.get(e)==="close")break;pu.set(e,"failed"),n%10===1&&Qr.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<lm?n++*100:lm;await OB(i)}return{js:t,jsm:r}}a(CB,"connectToRemoteJS");function Wte(){return dm}a(Wte,"getDatabaseSubscriptions");var PB;function zte(e){PB=e}a(zte,"setIgnoreOrigin");var DB=100,yB=new Array(DB),om=0;async function Sb(e,t,r,n){let{connection:s}=await cm.getNATSReferences();um=s,am=s.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,am),Qr.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(u){if(pu.get(n)==="close")break;o%10===1&&Qr.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",u.message),u.code==="404"&&(Qr.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await cm.createConsumer(r,e,am,new Date(Date.now()).toISOString()));let f=o++*100<lm?o++*100:lm;await OB(f)}let c=!1,l;for(;!c;){if(__.get(e+n)==="close"||pu.get(n)==="close"){__.delete(e+n),c=!0;continue}l=await i.consume({max_messages:mb.get(gb.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),__.set(e+n,l);let u=!1;(async()=>{for await(let f of await l.status())if(f.type===RB.ConsumerDeleted&&(await l.close(),c=!0),f.type===RB.HeartbeatsMissed){let d=f.data;Qr.trace(`${d} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),d===100&&(Qr.warn(`Restarting clustering ingest consumer due to missed heartbeat threshold being met, node: ${n} stream: ${l.consumer.stream}`),l.stop(),u=!0)}})();try{for await(let f of l)await yB[om],yB[om]=Qte(f).catch(d=>{Qr.error(d)}),++om>=DB&&(om=0)}catch(f){f.message==="consumer deleted"?(Qr.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):Qr.error("Error consuming clustering ingest, restarting consumer",f)}}}a(Sb,"ingestConsumer");async function Qte(e){let t;await qte(()=>{t=Ute(e.data)}),AB(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),Qr.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=mb.get(gb.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(hu.MSG_HEADERS.TRANSACTED_NODES)&&r.values(hu.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(hu.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!PB),Hte(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(hu.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:l,table:u,records:f,hash_values:d,__origin:h,expiresAt:_}=t;Qr.trace("processing message:",o,c,u,(f?"records: "+f.map(M=>M?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),Qr.trace(`messageProcessor nats msg id: ${e.headers.get(hu.MSG_HEADERS.NATS_MSG_ID)}`);let p;f||(f=d);let S=new Promise(M=>p=M),{timestamp:g,user:T,node_name:m}=h||{},A=dm.get(c)?.get(u);if(!A)throw new Error(`Missing table for replication message: ${u}`);if(o==="define_schema")t.type=o,t.onCommit=p,A.send(t);else if(f.length===1&&!l)A.send({type:Eb(o),value:f[0],id:d?.[0],expiresAt:_,timestamp:g,table:u,onCommit:p,user:T,nodeName:m});else{let M=f.map((F,G)=>({type:Eb(o),value:F,expiresAt:_,id:d?.[G],table:u}));for(;l;)M.push({type:Eb(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;A.send({type:"transaction",writes:M,table:u,timestamp:g,onCommit:p,user:T,nodeName:m})}mb.get(xte.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&kte(e.subject.split(".").slice(0,-1).join("."),bB.createNatsTableStreamName(c,u),e.headers,e.data),await S;let w=Date.now()-g;g&&AB(w,"replication-latency",e.subject,o,"ingest")}catch(o){Qr.error(o)}e.ack()}a(Qte,"messageProcessor");function Eb(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(Eb,"convertOperation")});var Er=P((swe,QB)=>{"use strict";var Nr=ce();Nr.initSync();var jte=require("fs-extra"),Jte=require("semver"),E_=require("path"),{monotonicFactory:Xte}=require("ulidx"),vB=Xte(),Zte=require("util"),UB=require("child_process"),ere=Zte.promisify(UB.exec),tre=UB.spawn,Mr=Ot(),Ve=(H(),D(q)),{packageJson:rre,PACKAGE_ROOT:nre}=_t(),_m=ae(),Ws=j(),hm=io(),sre=im(),h_=wt(),{broadcast:ire,onMessageByType:ore,getWorkerIndex:are}=rt(),{isMainThread:xB}=require("worker_threads"),{Encoder:cre,decode:bb}=require("msgpackr"),BB=new cre,{isEmpty:kc}=_m,HB=qn(),ZNe=48*36e11;xB&&ore(Ve.ITC_EVENT_TYPES.RESTART,()=>{jr=void 0,Hc=void 0});var{connect:lre,StorageType:ure,RetentionPolicy:dre,AckPolicy:Ob,DeliverPolicy:Nb,DiscardPolicy:fre,NatsConnection:ewe,JetStreamManager:twe,JetStreamClient:rwe,StringCodec:nwe,JSONCodec:_re,createInbox:wb,headers:hre,ErrorCode:MB}=require("nats"),{recordAction:pre}=(Ci(),D(a_)),{encodeBlobsAsBuffers:Ere}=(cs(),D(fm)),kB=_re(),mre="clustering",gre=rre.engines[Mr.NATS_SERVER_NAME],Sre=E_.join(nre,"dependencies"),yb=E_.join(Sre,`${process.platform}-${process.arch}`,Mr.NATS_BINARY_NAME),Ab,Rb,p_,xc,Bc;QB.exports={runCommand:FB,checkNATSServerInstalled:Tre,createConnection:Ib,getConnection:m_,getJetStreamManager:g_,getJetStream:qB,getNATSReferences:Di,getServerList:Rre,createLocalStream:Cb,listStreams:$B,deleteLocalStream:yre,getServerConfig:Eu,listRemoteStreams:bre,viewStream:Ore,viewStreamIterator:Nre,publishToStream:wre,request:Pre,reloadNATS:Pb,reloadNATSHub:Dre,reloadNATSLeaf:Lre,extractServerName:Cre,requestErrorHandler:Mre,createLocalTableStream:WB,createTableStreams:xre,purgeTableStream:zB,purgeSchemaTableStreams:Bre,getStreamInfo:Hre,updateLocalStreams:Fre,closeConnection:Are,getJsmServerName:pm,addNatsMsgHeader:VB,clearClientCache:GB,updateRemoteConsumer:vre,createConsumer:KB,updateConsumerIterator:Ure};async function FB(e,t=void 0){let{stdout:r,stderr:n}=await ere(e,{cwd:t});if(n)throw new Error(n.replace(`
18
+ `)},VX="certificate.pem",KX="privateKey.pem",YX="caCertificate.pem",WX="natsCertificate.pem",zX="natsCaCertificate.pem",Tt={DEFAULT:"default","DEFAULT-CA":"default-ca",SERVER:"server",CA:"ca","OPERATIONS-API":"operations-api","OPERATIONS-CA":"operations-ca"},QX={tls_certificate:Tt.SERVER,tls_certificateAuthority:Tt.CA,customFunctions_tls_certificate:Tt.SERVER,customFunctions_tls_certificateAuthority:Tt.CA,operationsApi_tls_certificate:Tt["OPERATIONS-API"],operationsApi_tls_certificateAuthority:Tt["OPERATIONS-CA"]},jX={[Tt.SERVER]:2,[Tt.DEFAULT]:1},JX={[Tt["OPERATIONS-API"]]:3,[Tt.SERVER]:2,[Tt.DEFAULT]:1},XX={[Tt["OPERATIONS-API"]]:3,[Tt.SERVER]:2,[Tt.DEFAULT]:1},ZX={[Tt["OPERATIONS-CA"]]:3,[Tt.CA]:2,[Tt["DEFAULT-CA"]]:1},e6={[Tt["OPERATIONS-CA"]]:3,[Tt.CA]:2,[Tt["DEFAULT-CA"]]:1},t6={[Tt.CA]:2,[Tt["DEFAULT-CA"]]:1};Object.assign(sv,{CERTIFICATE_PEM_NAME:VX,PRIVATEKEY_PEM_NAME:KX,CA_PEM_NAME:YX,CERT_NAME:Tt,CERT_CONFIG_NAME_MAP:QX,CERT_PREFERENCE_APP:jX,CERT_PREFERENCE_OPS:JX,CERT_PREFERENCE_REP:XX,CA_CERT_PREFERENCE_REP:ZX,CA_CERT_PREFERENCE_OPS:e6,CA_CERT_PREFERENCE_APP:t6,CERTIFICATE_VALUES:$X,NATS_CERTIFICATE_PEM_NAME:WX,NATS_CA_PEM_NAME:zX})});var $R=I((Aye,uv)=>{"use strict";var cv=require("fs-extra"),Te=require("joi"),r6=require("os"),{boolean:Be,string:At,number:er,array:Rc}=Te.types(),{totalmem:iv}=require("os"),Ac=require("path"),n6=j(),qR=oe(),Tye=GR(),ov=(H(),D(q)),s6=dt(),av="log",i6="components",o6="Invalid logging.rotation.maxSize unit. Available units are G, M or K",a6="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",c6="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",l6="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",u6="rootPath config parameter is undefined",_n=Te.alternatives([er.min(0),At]).optional().empty(null),ym=Te.alternatives([Rc.items(At,{host:At.required(),port:_n},{hostname:At.required(),port:_n}).empty(null),Rc.items(At)]),yi,lv=!1;uv.exports={configValidator:d6,routesValidator:E6,route_constraints:ym};function d6(e,t=!1){if(lv=t,yi=e.rootPath,qR.isEmpty(yi))throw u6;let r=Be.optional(),n=er.min(0).max(1e3).empty(null).default(m6),s=At.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Ff),i=At.optional().empty(null),o=At.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=Te.string().empty(null).default(Ff),l=Te.custom(_6).empty(null).default(Ff),u=e.clustering?.enabled,f=Te.object({certificate:i,certificateAuthority:i,privateKey:i}),d;return u===!0?d=Te.object({enabled:r,hubServer:Te.object({cluster:Te.object({name:Te.required().empty(null),network:Te.object({port:_n,routes:ym}).required()}).required(),leafNodes:Te.object({network:Te.object({port:_n}).required()}).required(),network:Te.object({port:_n}).required()}).required(),leafServer:Te.object({network:Te.object({port:_n,routes:ym}).required(),streams:Te.object({maxAge:er.min(120).allow(null).optional(),maxBytes:er.min(1).allow(null).optional(),maxMsgs:er.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:Te.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:Be.optional(),databaseLevel:Be.optional(),tls:Te.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Be.required(),verify:Be.optional()}),user:At.optional().empty(null)}).optional():d=Te.object({enabled:r,tls:Te.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Be.optional()})}).optional(),Te.object({authentication:Te.alternatives(Te.object({authorizeLocal:Be,cacheTTL:er.required(),enableSessions:Be,hashFunction:At.valid("md5","sha256","argon2id").optional().empty(null)}),Be).optional(),analytics:Te.object({aggregatePeriod:er}),replication:Te.object({hostname:Te.alternatives(At,er).optional().empty(null),url:At.optional().empty(null),port:_n,securePort:_n,routes:Rc.optional().empty(null),databases:Te.alternatives(At,Rc),enableRootCAs:Be.optional(),copyTablesToCatchUp:Be.optional()}).optional(),componentsRoot:s.optional(),clustering:d,localStudio:Te.object({enabled:r}).required(),logging:Te.object({auditAuthEvents:Te.object({logFailed:Be,logSuccessful:Be}),file:Be.required(),level:Te.valid("notify","fatal","error","warn","info","debug","trace"),rotation:Te.object({enabled:Be.optional(),compress:Be.optional(),interval:At.custom(p6).optional().empty(null),maxSize:At.custom(h6).optional().empty(null),path:At.optional().empty(null).default(Ff)}).required(),root:s,stdStreams:Be.required(),auditLog:Be.required()}).required(),operationsApi:Te.object({network:Te.object({cors:Be.optional(),corsAccessList:Rc.optional(),headersTimeout:er.min(1).optional(),keepAliveTimeout:er.min(1).optional(),port:_n,domainSocket:Te.optional().empty("hdb/operations-server").default(Ff),securePort:_n,timeout:er.min(1).optional()}).optional(),tls:Te.alternatives([Te.array().items(f),f])}).required(),rootPath:At.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:Te.object({network:Te.object({port:_n,securePort:_n,mtls:Te.alternatives([Be.optional(),Te.object({user:At.optional(),certificateAuthority:i,required:Be.optional()})])}).required(),webSocket:Be.optional(),requireAuthentication:Be.optional()}),http:Te.object({compressionThreshold:er.optional(),cors:Be.optional(),corsAccessList:Rc.optional(),headersTimeout:er.min(1).optional(),port:_n,securePort:_n,maxHeaderSize:er.optional(),mtls:Te.alternatives([Be.optional(),Te.object({user:At.optional(),certificateAuthority:i,required:Be.optional()})]),threadRange:Te.alternatives([Rc.optional(),At.optional()])}).required(),threads:Te.alternatives(n.optional(),Te.object({count:n.optional(),debug:Te.alternatives(Be.optional(),Te.object({startingPort:er.min(1).optional(),host:At.optional(),waitForDebugger:Be.optional()})),maxHeapMemory:er.min(0).optional()})),storage:Te.object({writeAsync:Be.required(),overlappingSync:Be.optional(),caching:Be.optional(),compression:Te.alternatives([Be.optional(),Te.object({dictionary:At.optional(),threshold:er.optional()})]),compactOnStart:Be.optional(),compactOnStartKeepBackup:Be.optional(),noReadAhead:Be.optional(),path:l,prefetchWrites:Be.optional(),maxFreeSpaceToLoad:er.optional(),maxFreeSpaceToRetain:er.optional()}).required(),ignoreScripts:Be.optional(),tls:Te.alternatives([Te.array().items(f),f])}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(d6,"configValidator");function f6(e){return lv||cv.existsSync(e)?null:`Specified path ${e} does not exist.`}a(f6,"doesPathExist");function _6(e,t){Te.assert(e,At.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=f6(e);if(r)return t.message(r)}a(_6,"validatePath");function h6(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(o6);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(c6):e}a(h6,"validateRotationMaxSize");function p6(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(a6);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(l6):e}a(p6,"validateRotationInterval");function m6(e,t){let r=t.state.path.join("."),n=r6.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||iv();return i=Math.round(Math.min(i,iv())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),n6.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(m6,"setDefaultThreads");function Ff(e,t){let r=t.state.path.join(".");if(!qR.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(qR.isEmpty(yi))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return Ac.join(yi,i6);case"logging.root":return Ac.join(yi,av);case"clustering.leafServer.streams.path":return Ac.join(yi,"clustering","leaf");case"storage.path":let n=Ac.join(yi,ov.LEGACY_DATABASES_DIR_NAME);return cv.existsSync(n)?n:Ac.join(yi,ov.DATABASES_DIR_NAME);case"logging.rotation.path":return Ac.join(yi,av);case"operationsApi.network.domainSocket":return r==null?null:Ac.join(yi,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Ff,"setDefaultRoot");function E6(e){let t=Te.object({routes:ym});return s6.validateBySchema({routes:e},t)}a(E6,"routesValidator")});var It=I(Av=>{"use strict";var ds=(H(),D(q)),hr=oe(),tr=j(),{configValidator:g6,routesValidator:dv}=$R(),Kr=require("fs-extra"),_v=require("yaml"),Fn=require("path"),S6=require("is-number"),hv=require("properties-reader"),T6=require("lodash"),{handleHDBError:A6}=he(),{HTTP_STATUS_CODES:R6,HDB_ERROR_MSGS:tu}=Cn(),{server:y6}=(Gr(),D(Wl)),{PACKAGE_ROOT:pv}=Et(),{DATABASES_PARAM_CONFIG:Gf,CONFIG_PARAMS:kn,CONFIG_PARAM_MAP:ks}=ds,b6="Unable to get config value because config is uninitialized",O6="Config successfully initialized",N6="Error backing up config file",w6="Empty parameter sent to getConfigValue",mv=Fn.join(pv,"config","yaml",ds.HDB_DEFAULT_CONFIG_FILE),I6=Fn.join(pv,"config","yaml","defaultNatsConfig.yaml"),C6="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",fv={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"},bm,wt,Om;Object.assign(Av,{createConfigFile:P6,getDefaultConfig:D6,getConfigValue:gv,initConfig:Nm,flattenConfig:ru,updateConfigValue:Sv,updateConfigObject:M6,getConfiguration:x6,setConfiguration:B6,readConfigFile:WR,getClusteringRoutes:H6,initOldConfig:Tv,getConfigFromFile:k6,getConfigFilePath:yc,addConfig:F6,deleteConfigFromFile:G6,getConfigObj:q6,resolvePath:VR,getFlatConfigObj:$6});function VR(e){if(e?.startsWith("~/"))return Fn.join(hr.getHomeDir(),e.slice(1));let t=ce();return Fn.resolve(t.getHdbBasePath(),e)}a(VR,"resolvePath");function P6(e,t=!1){let r=ia(mv);if(e.clustering_enabled||e.CLUSTERING_ENABLED||e.clustering){let c=_v.parseDocument(Kr.readFileSync(I6,"utf8"),{simpleKeys:!0});r.addIn(["clustering"],c.toJSON().clustering)}bm=ru(r.toJSON());let n;for(let c in e){let l=ks[c.toLowerCase()];if(l===kn.DATABASES){Array.isArray(e[c])?n=e[c]:n=Object.keys(e[c]).map(u=>({[u]:e[c][u]}));continue}if(!l&&(c.endsWith("_package")||c.endsWith("_port"))&&(l=c),l!==void 0){let u=l.split("_"),f=KR(l,e[c]);l==="rootPath"&&f?.endsWith("/")&&(f=f.slice(0,-1));try{r.setIn([...u],f)}catch(d){tr.error(d)}}}n&&Ev(r,n),YR(r,t);let s=r.toJSON();wt=ru(s);let i=r.getIn(["rootPath"]),o=Fn.join(i,ds.HDB_CONFIG_FILE);if(Kr.createFileSync(o),r.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${r.errors}`);Kr.writeFileSync(o,String(r)),tr.trace(`Config file written to ${o}`)}a(P6,"createConfigFile");function Ev(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!hr.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(Gf.TABLES))for(let i in n[s][Gf.TABLES])for(let o in n[s][Gf.TABLES][i]){let c=n[s][Gf.TABLES][i][o],l=[kn.DATABASES,s,Gf.TABLES,i,o];e.hasIn(l)?e.setIn(l,c):e.addIn(l,c)}else for(let i in n[s]){let o=n[s][i],c=[kn.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){tr.error("Error parsing schemas CLI/env config arguments",n)}}a(Ev,"setSchemasConfig");function D6(e){if(bm===void 0){let r=ia(mv);bm=ru(r.toJSON())}let t=ks[e.toLowerCase()];if(t!==void 0)return bm[t.toLowerCase()]}a(D6,"getDefaultConfig");function gv(e){if(e==null){tr.info(w6);return}if(wt===void 0){tr.trace(b6);return}let t=ks[e.toLowerCase()];if(t!==void 0)return wt[t.toLowerCase()]}a(gv,"getConfigValue");function yc(e=hr.getPropsFilePath()){let t=hr.getEnvCliRootPath();if(t)return VR(Fn.join(t,ds.HDB_CONFIG_FILE));let r=hv(e);return VR(r.get(ds.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}a(yc,"getConfigFilePath");function Nm(e=!1){if(wt===void 0||e){let t;if(!hr.noBootFile()){t=hr.getPropsFilePath();try{Kr.accessSync(t,Kr.constants.F_OK|Kr.constants.R_OK)}catch(i){throw tr.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=yc(t),n;if(r.includes("config/settings.js"))try{Tv(r);return}catch(i){if(i.code!==ds.NODE_ERROR_CODES.ENOENT)throw i}try{n=ia(r)}catch(i){if(i.code===ds.NODE_ERROR_CODES.ENOENT){tr.trace(`HarperDB config file not found at ${r}.
19
+ This can occur during early stages of install where the config file has not yet been created`);return}else throw tr.error(i),new Error(`Error reading HarperDB config file at ${r}`)}L6(n,r),YR(n);let s=n.toJSON();if(y6.config=s,wt=ru(s),wt.logging_rotation_rotate)for(let i in fv)wt[i]&&tr.error(`Config ${fv[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);tr.trace(O6)}}a(Nm,"initConfig");function L6(e,t){let r=e.getIn(["rootPath"]),n=!1;if(e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Fn.join(r,"database")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Fn.join(r,"log")),n=!0),e.hasIn(["authentication"])||(e.addIn(["authentication"],{cacheTTL:3e4,enableSessions:!0,operationTokenTimeout:e.getIn(["operationsApi","authentication","operationTokenTimeout"])??"1d",refreshTokenTimeout:e.getIn(["operationsApi","authentication","refreshTokenTimeout"])??"30d"}),n=!0),e.hasIn(["analytics"])||(e.addIn(["analytics"],{aggregatePeriod:60}),n=!0),n){if(tr.trace("Updating config file with missing config params"),e.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${e.errors}`);Kr.writeFileSync(t,String(e))}}a(L6,"checkForUpdatedConfig");function YR(e,t=!1){let r=e.toJSON();if(r.componentsRoot=r.componentsRoot??r?.customFunctions?.root,r?.http?.threads&&(r.threads=r?.http?.threads),r.http?.port&&r.http?.port===r.http?.securePort)throw tu.CONFIG_VALIDATION("http.port and http.securePort cannot be the same value");if(r.operationsApi?.network?.port&&r.operationsApi?.network?.port===r.operationsApi?.network?.securePort)throw tu.CONFIG_VALIDATION("operationsApi.network.port and operationsApi.network.securePort cannot be the same value");let n=g6(r,t);if(n.error)throw tu.CONFIG_VALIDATION(n.error.message);typeof n.value.threads=="object"?e.setIn(["threads","count"],n.value.threads.count):e.setIn(["threads"],n.value.threads),e.setIn(["componentsRoot"],n.value.componentsRoot),e.setIn(["logging","root"],n.value.logging.root),e.setIn(["storage","path"],n.value.storage.path),e.setIn(["logging","rotation","path"],n.value.logging.rotation.path),e.setIn(["operationsApi","network","domainSocket"],n.value?.operationsApi?.network?.domainSocket),r?.clustering?.enabled&&e.setIn(["clustering","leafServer","streams","path"],n.value.clustering.leafServer.streams?.path)}a(YR,"validateConfig");function M6(e,t){wt===void 0&&(wt={});let r=ks[e.toLowerCase()];if(r===void 0){tr.trace(`Unable to update config object because config param '${e}' does not exist`);return}wt[r.toLowerCase()]=t}a(M6,"updateConfigObject");function Sv(e,t,r=void 0,n=!1,s=!1,i=!1){wt===void 0&&Nm();let o=gv(ks.hdb_root),c=Fn.join(o,ds.HDB_CONFIG_FILE),l=ia(c),u;if(r&&wt){let h=!1;for(let _ in r)if(r[_]!=wt[_.toLowerCase()]){h=!0;break}if(!h){tr.trace("No changes detected in config parameters, skipping update");return}}if(r===void 0&&e.toLowerCase()===kn.DATABASES)u=t;else if(r===void 0){let h;if(i)h=e;else if(h=ks[e.toLowerCase()],h===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let _=h.split("_"),p=KR(h,t);l.setIn([..._],p)}else for(let h in r){let _=ks[h.toLowerCase()];if(_===kn.HTTP_SECUREPORT&&r[h]===wt[kn.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),_===kn.OPERATIONSAPI_NETWORK_SECUREPORT&&r[h]===wt[kn.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),_===kn.DATABASES){u=r[h];continue}if(_?.startsWith("threads_")){let p=l.getIn(["threads"]);p>=0&&(l.deleteIn(["threads"]),l.setIn(["threads","count"],p))}if(!_&&(h.endsWith("_package")||h.endsWith("_port"))&&(_=h),_!==void 0){let p=_.split("_"),S=ds.LEGACY_CONFIG_PARAMS[h.toUpperCase()];S&&S.startsWith("customFunctions")&&l.hasIn(S.split("_"))&&(_=S,p=S.split("_"));let g=KR(_,r[h]);_==="rootPath"&&g?.endsWith("/")&&(g=g.slice(0,-1));try{p.length>1&&typeof l.getIn(p.slice(0,-1))=="boolean"&&l.deleteIn(p.slice(0,-1)),l.setIn([...p],g)}catch(R){tr.error(R)}}}u&&Ev(l,u),YR(l);let f=l.getIn(["rootPath"]),d=Fn.join(f,ds.HDB_CONFIG_FILE);if(n===!0&&v6(c,f),l.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${l.errors}`);Kr.writeFileSync(d,String(l)),s&&(wt=ru(l.toJSON())),tr.trace(`Config parameter: ${e} updated with value: ${t}`)}a(Sv,"updateConfigValue");function v6(e,t){try{let r=Fn.join(t,"backup",`${new Date(Date.now()).toISOString().replaceAll(":","-")}-${ds.HDB_CONFIG_FILE}.bak`);Kr.copySync(e,r),tr.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){tr.error(N6),tr.error(r)}}a(v6,"backupConfigFile");var U6=["databases"];function ru(e){return e.http&&Object.assign(e.http,e?.customFunctions?.network),e?.operationsApi?.network&&(e.operationsApi.network={...e.http,...e.operationsApi.network}),e?.operationsApi&&(e.operationsApi.tls={...e.tls,...e.operationsApi.tls}),Om=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])&&!U6.includes(i)){let o=r(n[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let l=i+"_"+c;!kn[l.toUpperCase()]&&ks[l]&&(s[ks[l].toLowerCase()]=o[c]),s[l]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(ru,"flattenConfig");function KR(e,t){if(e===kn.CLUSTERING_NODENAME||e===kn.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(S6(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||hr.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 hr.autoCast(t)}a(KR,"castConfigValue");function x6(){let e=hr.getPropsFilePath(),t=yc(e);return ia(t).toJSON()}a(x6,"getConfiguration");async function B6(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return Sv(void 0,void 0,s,!0),C6}catch(i){throw typeof i=="string"||i instanceof String?A6(i,i,R6.BAD_REQUEST,void 0,void 0,!0):i}}a(B6,"setConfiguration");function WR(){let e=hr.getPropsFilePath();try{Kr.accessSync(e,Kr.constants.F_OK|Kr.constants.R_OK)}catch(n){if(!hr.noBootFile())throw tr.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=yc(e);return ia(t).toJSON()}a(WR,"readConfigFile");function ia(e){return _v.parseDocument(Kr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(ia,"parseYamlDoc");function H6(){let e=WR(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=hr.isEmptyOrZeroLength(t)?[]:t;let r=dv(t);if(r)throw tu.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=hr.isEmptyOrZeroLength(n)?[]:n;let s=dv(n);if(s)throw tu.CONFIG_VALIDATION(s.message);if(!hr.isEmptyOrZeroLength(n)&&!hr.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!hr.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw tu.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(H6,"getClusteringRoutes");function Tv(e){let t=hv(e);wt={};for(let r in ks){let n=t.get(r.toUpperCase());if(hr.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=ks[r].toLowerCase();s===kn.LOGGING_ROOT?wt[s]=Fn.dirname(n):wt[s]=n}return wt}a(Tv,"initOldConfig");function k6(e){let t=WR();return T6.get(t,e.replaceAll("_","."))}a(k6,"getConfigFromFile");async function F6(e,t){let r=ia(yc());if(r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),r.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${r.errors}`);await Kr.writeFile(yc(),String(r))}a(F6,"addConfig");function G6(e){let t=yc(hr.getPropsFilePath()),r=ia(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=Fn.join(n,ds.HDB_CONFIG_FILE);Kr.writeFileSync(s,String(r))}a(G6,"deleteConfigFromFile");function q6(){return Om||(Nm(),Om)}a(q6,"getConfigObj");function $6(){return wt||Nm(),wt}a($6,"getFlatConfigObj")});var Gn=I((Oye,yr)=>{"use strict";var bv="username is required",Ov="nothing to update, must supply active, role or password to update",Nv="password cannot be an empty string",wv="If role is specified, it cannot be empty.",Iv="active must be true or false";yr.exports.addUser=X6;yr.exports.alterUser=Z6;yr.exports.dropUser=tZ;yr.exports.getSuperUser=oZ;yr.exports.userInfo=rZ;yr.exports.listUsers=Im;yr.exports.listUsersExternal=nZ;yr.exports.setUsersWithRolesCache=bc;yr.exports.findAndValidateUser=ry;yr.exports.getClusterUser=aZ;yr.exports.getUsersWithRolesCache=iZ;yr.exports.USERNAME_REQUIRED=bv;yr.exports.ALTERUSER_NOTHING_TO_UPDATE=Ov;yr.exports.EMPTY_PASSWORD=Nv;yr.exports.EMPTY_ROLE=wv;yr.exports.ACTIVE_BOOLEAN=Iv;var Cv=hn(),V6=Tc(),qf=(Rm(),D(Am)),Pv=tv(),$f=$r(),XR=io(),bi=oe(),Dv=require("validate.js"),ZR=j(),{promisify:K6}=require("util"),ey=ro(),QR=(H(),D(q)),Rv=Nt(),Y6=It(),W6=ce(),z6=Zi(),{hdb_errors:Q6,ClientError:Fs}=he(),{HTTP_STATUS_CODES:so,AUTHENTICATION_ERROR_MSGS:zR,HDB_ERROR_MSGS:nu}=Q6,{UserEventMsg:ty}=Gs(),jR=require("lodash"),{server:wm}=(Gr(),D(Wl)),j6=j();wm.getUser=(e,t)=>ry(e,t,t!=null);wm.authenticateUser=(e,t)=>ry(e,t);var Lv={username:!0,active:!0,role:!0,password:!0},yv=new Map,J6=K6(V6.delete),JR=W6.get(QR.CONFIG_PARAMS.AUTHENTICATION_HASHFUNCTION)??qf.HASH_FUNCTION.SHA256,Oi;async function X6(e){let t=Dv.cleanAttributes(e,Lv),r=Pv.addUserValidation(t);if(r)throw new Fs(r.message);let n=await $f.searchByValue({schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]});if(!n||n.length<1)throw new Fs(nu.ROLE_NAME_NOT_FOUND(t.role),so.NOT_FOUND);if(n.length>1)throw new Fs(nu.DUP_ROLES_FOUND(t.role),so.CONFLICT);n[0].permission.cluster_user===!0&&(t.hash=ey.encrypt(t.password)),t.password=await qf.hash(t.password,JR),t.hash_function=JR,t.role=n[0].id;let s=await Cv.insert({operation:"insert",schema:"system",table:"hdb_user",records:[t]});if(ZR.debug(s),await bc(),s.skipped_hashes.length===1)throw new Fs(nu.USER_ALREADY_EXISTS(t.username),so.CONFLICT);return XR.signalUserChange(new ty(process.pid)),`${t.username} successfully added`}a(X6,"addUser");async function Z6(e){let t=Dv.cleanAttributes(e,Lv);if(bi.isEmptyOrZeroLength(t.username))throw new Error(bv);if(bi.isEmptyOrZeroLength(t.password)&&bi.isEmptyOrZeroLength(t.role)&&bi.isEmptyOrZeroLength(t.active))throw new Error(Ov);if(!bi.isEmpty(t.password)&&bi.isEmptyOrZeroLength(t.password.trim()))throw new Error(Nv);if(!bi.isEmpty(t.active)&&!bi.isBoolean(t.active))throw new Error(Iv);if(!bi.isEmpty(t.password)&&!bi.isEmptyOrZeroLength(t.password.trim())&&(eZ(t.username)&&(t.hash=ey.encrypt(t.password)),t.password=await qf.hash(t.password,JR)),t.role==="")throw new Error(wv);if(t.role){let n=await $f.searchByValue({schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]});if(!n||n.length===0)throw new Fs(nu.ALTER_USER_ROLE_NOT_FOUND(t.role),so.NOT_FOUND);if(n.length>1)throw new Fs(nu.DUP_ROLES_FOUND(t.role),so.CONFLICT);t.role=n[0].id}let r=await Cv.update({operation:"update",schema:"system",table:"hdb_user",records:[t]});return await bc(),XR.signalUserChange(new ty(process.pid)),r}a(Z6,"alterUser");function eZ(e){let t=!1,r=Oi.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(eZ,"isClusterUser");async function tZ(e){let t=Pv.dropUserValidation(e);if(t)throw new Fs(t.message);if(Oi.get(e.username)===void 0)throw new Fs(nu.USER_NOT_EXIST(e.username),so.NOT_FOUND);let r=await J6({table:"hdb_user",schema:"system",hash_values:[e.username]});return ZR.debug(r),await bc(),XR.signalUserChange(new ty(process.pid)),`${e.username} successfully deleted`}a(tZ,"dropUser");async function rZ(e){let t={};if(!e||!e.hdb_user)return"There was no user info in the body";t=jR.cloneDeep(e.hdb_user);let r=await $f.searchByHash({schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]});return t.role=r[0],delete t.password,delete t.refresh_token,delete t.hash,delete t.hash_function,t}a(rZ,"userInfo");async function nZ(){let e=await Im();return e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token,delete t.hash_function}),[...e.values()]}a(nZ,"listUsersExternal");async function Im(){let e=await $f.searchByValue({schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]}),t={};for(let s of e)t[s.id]=jR.cloneDeep(s);if(Object.keys(t).length===0)return null;let r=await $f.searchByValue({schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]}),n=new Map;for(let s of r)s=jR.cloneDeep(s),s.role=t[s.role],sZ(s.role),n.set(s.username,s);return n}a(Im,"listUsers");function sZ(e){if(!e){ZR.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(z6)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}a(sZ,"appendSystemTablesToRole");async function bc(e=void 0){e?Oi=e:Oi=await Im()}a(bc,"setUsersWithRolesCache");async function iZ(){return Oi||await bc(),Oi}a(iZ,"getUsersWithRolesCache");async function ry(e,t,r=!0){Oi||await bc();let n=Oi.get(e);if(!n){if(!r)return{username:e};throw new Fs(zR.GENERIC_AUTH_FAIL,so.UNAUTHORIZED)}if(n&&!n.active)throw new Fs(zR.USER_INACTIVE,so.UNAUTHORIZED);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(yv.get(t)===n.password)return s;{let i=qf.validate(n.password,t,n.hash_function||qf.HASH_FUNCTION.MD5);if(i?.then&&(i=await i),i===!0)yv.set(t,n.password);else throw new Fs(zR.GENERIC_AUTH_FAIL,so.UNAUTHORIZED)}}return s}a(ry,"findAndValidateUser");async function oZ(){Oi||await bc();for(let[,e]of Oi)if(e.role.role==="super_user")return e}a(oZ,"getSuperUser");async function aZ(){let e=await Im(),t=Y6.getConfigFromFile(QR.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!(r==null||r?.role?.role!==QR.ROLE_TYPES_ENUM.CLUSTER_USER))return r.decrypt_hash=ey.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+Rv.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+Rv.SERVER_SUFFIX.ADMIN,r}a(aZ,"getClusterUser");var Mv=[];wm.invalidateUser=function(e){for(let t of Mv)try{t(e)}catch(r){j6.error("Error invalidating user",r)}};wm.onInvalidatedUser=function(e){Mv.push(e)}});var Kf=I((Cye,Bv)=>{"use strict";var Oc=j(),qn=(H(),D(q)),cZ=JL(),wye=Hs(),Iye=no(),lZ=Gn(),{validateEvent:vv}=Gs(),Vf=Hn(),uZ=require("process"),{resetDatabases:dZ}=(Me(),D(st)),fZ={[qn.ITC_EVENT_TYPES.SCHEMA]:_Z,[qn.ITC_EVENT_TYPES.USER]:xv};async function _Z(e){let t=vv(e);if(t){Oc.error(t);return}Oc.trace("ITC schemaHandler received schema event:",e),await cZ(e.message),await hZ(e.message)}a(_Z,"schemaHandler");async function hZ(e){try{Vf.resetReadTxn(qn.SYSTEM_SCHEMA_NAME,qn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Vf.resetReadTxn(qn.SYSTEM_SCHEMA_NAME,qn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Vf.resetReadTxn(qn.SYSTEM_SCHEMA_NAME,qn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=dZ();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Oc.error(t)}}a(hZ,"syncSchemaMetadata");var Uv=[];async function xv(e){try{try{Vf.resetReadTxn(qn.SYSTEM_SCHEMA_NAME,qn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Vf.resetReadTxn(qn.SYSTEM_SCHEMA_NAME,qn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Oc.warn(r)}let t=vv(e);if(t){Oc.error(t);return}Oc.trace(`ITC userHandler ${qn.HDB_ITC_CLIENT_PREFIX}${uZ.pid} received user event:`,e),await lZ.setUsersWithRolesCache();for(let r of Uv)r()}catch(t){Oc.error(t)}}a(xv,"userHandler");xv.addListener=function(e){Uv.push(e)};Bv.exports=fZ});var Gs=I((Uye,kv)=>{"use strict";var Dye=j(),ny=oe(),pZ=(H(),D(q)),{ITC_ERRORS:Yf}=Cn(),{parentPort:Lye,threadId:mZ,isMainThread:EZ,workerData:Mye}=require("worker_threads"),{onMessageFromWorkers:gZ,broadcast:vye,broadcastWithAcknowledgement:SZ}=rt();kv.exports={sendItcEvent:TZ,validateEvent:Hv,SchemaEventMsg:AZ,UserEventMsg:RZ};var Cm;gZ(async(e,t)=>{Cm=Cm||Kf(),Hv(e),Cm[e.type]&&await Cm[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function TZ(e){return!EZ&&e.message&&(e.message.originator=mZ),SZ(e)}a(TZ,"sendItcEvent");function Hv(e){if(typeof e!="object")return Yf.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||ny.isEmpty(e.type))return Yf.MISSING_TYPE;if(!e.hasOwnProperty("message")||ny.isEmpty(e.message))return Yf.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||ny.isEmpty(e.message.originator))return Yf.MISSING_ORIGIN;if(pZ.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Yf.INVALID_EVENT(e.type)}a(Hv,"validateEvent");function AZ(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(AZ,"SchemaEventMsg");function RZ(e){this.originator=e}a(RZ,"UserEventMsg")});var io=I((Hye,$v)=>{"use strict";var Fv=(H(),D(q)),Bye=oe(),Pm=j(),Gv=zL(),su,{sendItcEvent:qv}=Gs();function yZ(e){try{Pm.info("signalSchemaChange called with message:",e),su=su||Kf();let t=new Gv(Fv.ITC_EVENT_TYPES.SCHEMA,e);return su.schema(t),qv(t)}catch(t){Pm.error(t)}}a(yZ,"signalSchemaChange");function bZ(e){try{Pm.trace("signalUserChange called with message:",e),su=su||Kf();let t=new Gv(Fv.ITC_EVENT_TYPES.USER,e);return su.user(t),qv(t)}catch(t){Pm.error(t)}}a(bZ,"signalUserChange");$v.exports={signalSchemaChange:yZ,signalUserChange:bZ}});var Dm=I((Fye,Kv)=>{"use strict";var Vv=oe(),OZ=(H(),D(q)),NZ=j(),wZ=fm(),IZ=dm(),CZ=io(),{SchemaEventMsg:PZ}=Gs(),DZ="already exists in";Kv.exports=LZ;async function LZ(e,t,r){if(Vv.isEmptyOrZeroLength(r))return r;let n=[];Vv.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 MZ(e,t.schema,t.name,i)})),s}a(LZ,"lmdbCheckForNewAttributes");async function MZ(e,t,r,n){let s=new IZ(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await vZ(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(DZ))NZ.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(MZ,"createNewAttribute");async function vZ(e){let t;return t=await wZ(e),CZ.signalSchemaChange(new PZ(process.pid,OZ.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(vZ,"createAttribute")});var iu=I((qye,Yv)=>{"use strict";var sy=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}};Yv.exports=sy});var zv=I((Vye,Wv)=>{"use strict";var UZ=iu(),xZ=(H(),D(q)).OPERATIONS_ENUM,iy=class extends UZ{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(xZ.INSERT,r,n,s,i),this.records=t}};Wv.exports=iy});var jv=I((Yye,Qv)=>{"use strict";var BZ=iu(),HZ=(H(),D(q)).OPERATIONS_ENUM,oy=class extends BZ{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(HZ.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};Qv.exports=oy});var Xv=I((zye,Jv)=>{"use strict";var kZ=iu(),FZ=(H(),D(q)).OPERATIONS_ENUM,ay=class extends kZ{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(FZ.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};Jv.exports=ay});var eU=I((jye,Zv)=>{"use strict";var GZ=iu(),qZ=(H(),D(q)).OPERATIONS_ENUM,cy=class extends GZ{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(qZ.DELETE,n,s,t,i),this.original_records=r}};Zv.exports=cy});var Wf=I((Zye,sU)=>{"use strict";var Xye=require("path"),tU=ft(),$Z=zv(),VZ=jv(),KZ=Xv(),YZ=eU(),ou=vt(),rU=oe(),{CONFIG_PARAMS:WZ}=(H(),D(q)),nU=ce();nU.initSync();var Lm=(H(),D(q)).OPERATIONS_ENUM,{getTransactionAuditStorePath:zZ}=gt();sU.exports=QZ;async function QZ(e,t){if(nU.get(WZ.LOGGING_AUDITLOG)===!1)return;let r=zZ(e.schema,e.table),n=await tU.openEnvironment(r,e.table,!0),s=jZ(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){tU.initializeDBIs(n,ou.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,ou.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[ou.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[ou.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),rU.isEmpty(s.user_name)||n.dbis[ou.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[ou.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(QZ,"writeTransaction");function jZ(e,t){let r=rU.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===Lm.INSERT)return new $Z(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Lm.UPDATE)return new VZ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Lm.UPSERT)return new KZ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Lm.DELETE)return new YZ(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(jZ,"createTransactionObject")});var ly=I((rbe,iU)=>{"use strict";var JZ=Pf(),tbe=rf(),zf=(H(),D(q)),XZ=nf(),ZZ=pc().insertRecords,e8=ft(),t8=j(),r8=Dm(),{getSchemaPath:n8}=gt(),s8=Wf();iU.exports=i8;async function i8(e){try{let{schema_table:t,attributes:r}=JZ(e);XZ(e,r,t.hash_attribute),e.schema!==zf.SYSTEM_SCHEMA_NAME&&(r.includes(zf.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(zf.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(zf.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(zf.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await r8(e.hdb_auth_header,t,r),s=n8(e.schema,e.table),i=await e8.openEnvironment(s,e.table),o=await ZZ(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await s8(e,o)}catch(c){t8.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(i8,"lmdbCreateRecords")});var cU=I((sbe,aU)=>{"use strict";var oU=(H(),D(q)),o8=ly(),a8=rf(),c8=require("fs-extra"),{getSchemaPath:l8}=gt();aU.exports=u8;async function u8(e){let t=[{name:e.schema,createddate:Date.now()}],r=new a8(oU.SYSTEM_SCHEMA_NAME,oU.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await o8(r),await c8.mkdirp(l8(e.schema))}a(u8,"lmdbCreateSchema")});var uU=I((obe,lU)=>{"use strict";var uy=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}};lU.exports=uy});var hU=I((dbe,_U)=>{"use strict";var dU=ft(),dy=an(),fy=Cn().LMDB_ERRORS_ENUM,d8=vt(),fU=j(),cbe=oe(),f8=require("lmdb"),_8=uU(),h8=(H(),D(q)),{OVERFLOW_MARKER:lbe,MAX_SEARCH_KEY_LENGTH:ube}=d8,p8=h8.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function m8(e,t,r,n){if(dy.validateEnv(e),t===void 0)throw new Error(fy.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(fy.IDS_REQUIRED):new Error(fy.IDS_MUST_BE_ITERABLE);try{let s=dU.listDBIs(e);dU.initializeDBIs(e,t,s);let i=new _8,o,c=[],l=[];for(let h=0,_=r.length;h<_;h++)try{o=r[h];let p=e.dbis[t].get(o);if(!p||n&&p[p8]>n){i.skipped.push(o);continue}let S=e.dbis[t].ifVersion(o,f8.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let g=0;g<s.length;g++){let R=s[g];if(!p.hasOwnProperty(R)||R===t)continue;let E=e.dbis[R],A=p[R];if(A!=null)try{let O=dy.getIndexedValues(A);if(O)for(let v=0,F=O.length;v<F;v++)E.remove(O[v],o)}catch{fU.warn(`cannot delete from attribute: ${R}, ${A}:${o}`)}}});c.push(S),l.push(o),i.original_records.push(p)}catch(p){fU.warn(p),i.skipped.push(o)}let u=[],f=await Promise.all(c);for(let h=0,_=f.length;h<_;h++)f[h]===!0?i.deleted.push(l[h]):(i.skipped.push(l[h]),u.push(h));let d=0;for(let h=0;h<u.length;h++){let _=u[h];i.original_records.splice(_-d,1),d++}return i.txn_time=dy.getNextMonotonicTime(),i}catch(s){throw s}}a(m8,"deleteRecords");_U.exports={deleteRecords:m8}});var Qf=I((_be,mU)=>{"use strict";var au=oe(),E8=hU(),g8=ft(),{getSchemaPath:S8}=gt(),T8=Wf(),A8=j();mU.exports=R8;async function R8(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(au.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(au.isEmptyOrZeroLength(e.hash_values)&&!au.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];au.isEmpty(l)||e.hash_values.push(l)}}if(au.isEmptyOrZeroLength(e.hash_values))return pU([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(au.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=S8(e.schema,e.table),i=await g8.openEnvironment(s,e.table),o=await E8.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await T8(e,o)}catch(c){A8.error(`unable to write transaction due to ${c.message}`)}return pU(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(R8,"lmdbDeleteRecords");function pU(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(pU,"createDeleteResponse")});var hy=I((mbe,EU)=>{"use strict";var y8=(H(),D(q)),pbe=an();function _y(e,t){let r=Object.create(null);if(t.length===1&&y8.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(_y,"parseRow");function b8(e,t,r,n){let s=_y(r,e);n.push(s)}a(b8,"searchAll");function O8(e,t,r,n){let s=_y(r,e);n[t]=s}a(O8,"searchAllToMap");function N8(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(N8,"iterateDBI");function Nc(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(Nc,"pushResults");function w8(e,t,r,n,s,i){t.toString().endsWith(e)&&Nc(t,r,n,s,i)}a(w8,"endsWith");function I8(e,t,r,n,s,i){t.toString().includes(e)&&Nc(t,r,n,s,i)}a(I8,"contains");function C8(e,t,r,n,s,i){t>e&&Nc(t,r,n,s,i)}a(C8,"greaterThanCompare");function P8(e,t,r,n,s,i){t>=e&&Nc(t,r,n,s,i)}a(P8,"greaterThanEqualCompare");function D8(e,t,r,n,s,i){t<e&&Nc(t,r,n,s,i)}a(D8,"lessThanCompare");function L8(e,t,r,n,s,i){t<=e&&Nc(t,r,n,s,i)}a(L8,"lessThanEqualCompare");EU.exports={parseRow:_y,searchAll:b8,searchAllToMap:O8,iterateDBI:N8,endsWith:w8,contains:I8,greaterThanCompare:C8,greaterThanEqualCompare:P8,lessThanCompare:D8,lessThanEqualCompare:L8,pushResults:Nc}});var cu=I((Abe,bU)=>{"use strict";var oa=ft(),gbe=j(),$n=an(),Mm=vt(),Kt=Cn().LMDB_ERRORS_ENUM,Sbe=oe(),M8=(H(),D(q)),vm=hy(),{parseRow:v8}=vm,Tbe=require("lmdb"),{OVERFLOW_MARKER:gU,MAX_SEARCH_KEY_LENGTH:U8}=Mm;function SU(e,t,r,n=!1,s=void 0,i=void 0){return wc(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(SU,"iterateFullIndex");function jf(e,t,r,n,s,i=!1,o=void 0,c=void 0,l=!1,u=!1){return wc(e,t,r,(f,d,h,_)=>{let E={transaction:f,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!l:!u,exclusiveStart:i===!0?u:l};return _===r?(E.values=!1,d.getRange(E).map(A=>({value:A}))):d.getRange(E)})}a(jf,"iterateRangeBetween");function wc(e,t,r,n){let s=e.database||e,i=oa.openDBI(s,r);i[Mm.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&oa.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(wc,"setupTransaction");function TU(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(gU)){if(!s)if(r)s=oa.openDBI(e,r);else{let l=oa.listDBIs(e);for(let u=0,f=l.length;u<f&&(s=oa.openDBI(e,l[u]),!s[Mm.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(TU,"getOverflowCheck");function x8(e,t,r,n=!1,s=void 0,i=void 0){if($n.validateEnv(e),t===void 0)throw new Error(Kt.HASH_ATTRIBUTE_REQUIRED);return wc(e,t,t,(o,c,l)=>(Um(r),r=Jf(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(u=>v8(u.value,r))))}a(x8,"searchAll");function B8(e,t,r,n=!1,s=void 0,i=void 0){if($n.validateEnv(e),t===void 0)throw new Error(Kt.HASH_ATTRIBUTE_REQUIRED);Um(r),r=Jf(e.database||e,r);let o=new Map;for(let{key:c,value:l}of SU(e,t,t,n,s,i))o.set(c,vm.parseRow(l,r));return o}a(B8,"searchAllToMap");function H8(e,t,r=!1,n=void 0,s=void 0){if($n.validateEnv(e),t===void 0)throw new Error(Kt.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=SU(e,void 0,t,r,n,s),c=o.transaction,l=TU(c.database,c,void 0,t);for(let{key:u,value:f}of o){let d=l(u,f);i[d]===void 0&&(i[d]=[]),i[d].push(f)}return i}a(H8,"iterateDBI");function k8(e,t){if($n.validateEnv(e),t===void 0)throw new Error(Kt.HASH_ATTRIBUTE_REQUIRED);return oa.statDBI(e,t).entryCount}a(k8,"countAll");function F8(e,t,r,n,s=!1,i=void 0,o=void 0){return aa(e,r,n),wc(e,t,r,(c,l,u,f)=>(n=$n.convertKeyValueToWrite(n),f===r?l.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:l.getValues(n,{transaction:c,reverse:s,limit:i,offset:o}).map(d=>({key:n,value:d}))))}a(F8,"equals");function G8(e,t,r){return aa(e,t,r),oa.openDBI(e,t).getValuesCount(r)}a(G8,"count");function q8(e,t,r,n,s=!1,i=void 0,o=void 0){return aa(e,r,n),wc(e,null,r,(c,l)=>{n=$n.convertKeyValueToWrite(n);let u=!0;typeof n=="number"&&(u=!1);let f;if(s===!0){let d;for(let h of l.getKeys({transaction:c,start:n}))if(!h.startsWith(n)){d=h;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),f=l.getRange({transaction:c,start:d,end:void 0,reverse:s,limit:i,offset:o}).map(h=>{let{key:_}=h;if(_!==d){if(_.toString().startsWith(n))return h;if(u===!0)return f.DONE}}),f.filter(h=>h)}else return f=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(n))return d;if(u===!0)return f.DONE}),u?f:f.filter(d=>d)})}a(q8,"startsWith");function $8(e,t,r,n,s=!1,i=void 0,o=void 0){return AU(e,t,r,n,s,i,o,!0)}a($8,"endsWith");function AU(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return aa(e,r,n),wc(e,null,r,(l,u,f,d)=>{let h=TU(f,l,d,r);return o=Number.isInteger(o)?o:0,u.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(_=>{let p=_.toString();return p.endsWith(gU)?u.getValues(_,{transaction:l}).map(S=>{let g=h(_,S);if(c?g.endsWith(n):g.includes(n))return{key:g,value:S}}).filter(S=>S):(c?p.endsWith(n):p.includes(n))?u[Mm.DBI_DEFINITION_NAME].is_hash_attribute?{key:_,value:_}:u.getValues(_,{transaction:l}).map(S=>({key:_,value:S})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(AU,"contains");function V8(e,t,r,n,s=!1,i=void 0,o=void 0){aa(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),jf(e,t,r,n,l,s,i,o,!0,!1)}a(V8,"greaterThan");function K8(e,t,r,n,s=!1,i=void 0,o=void 0){aa(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),jf(e,t,r,n,l,s,i,o,!1,!1)}a(K8,"greaterThanEqual");function Y8(e,t,r,n,s=!1,i=void 0,o=void 0){aa(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),jf(e,t,r,l,n,s,i,o,!1,!0)}a(Y8,"lessThan");function W8(e,t,r,n,s=!1,i=void 0,o=void 0){aa(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),jf(e,t,r,l,n,s,i,o,!1,!1)}a(W8,"lessThanEqual");function z8(e,t,r,n,s,i=!1,o=void 0,c=void 0){if($n.validateEnv(e),r===void 0)throw new Error(Kt.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(Kt.START_VALUE_REQUIRED);if(s===void 0)throw new Error(Kt.END_VALUE_REQUIRED);if(n=$n.convertKeyValueToWrite(n),s=$n.convertKeyValueToWrite(s),n>s)throw new Error(Kt.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return jf(e,t,r,n,s,i,o,c)}a(z8,"between");function Q8(e,t,r,n){$n.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(Kt.HASH_ATTRIBUTE_REQUIRED);if(Um(r),r=Jf(s,r),n===void 0)throw new Error(Kt.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=vm.parseRow(c,r)),o}a(Q8,"searchByHash");function j8(e,t,r){$n.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(Kt.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Kt.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(j8,"checkHashExists");function J8(e,t,r,n,s=[]){return yU(e,t,r,n,s),RU(e,t,r,n,s).map(i=>i[1])}a(J8,"batchSearchByHash");function X8(e,t,r,n,s=[]){yU(e,t,r,n,s);let i=new Map;for(let[o,c]of RU(e,t,r,n,s))i.set(o,c);return i}a(X8,"batchSearchByHashToMap");function RU(e,t,r,n,s=[]){return wc(e,t,t,(i,o,c)=>{r=Jf(c,r);let l=r.length<3;return n.map(u=>{let f=c.dbis[t].get(u,{transaction:i,lazy:l});if(f)return[u,vm.parseRow(f,r)];s.push(u)}).filter(u=>u)})}a(RU,"batchHashSearch");function yU(e,t,r,n,s){if($n.validateEnv(e),t===void 0)throw new Error(Kt.HASH_ATTRIBUTE_REQUIRED);if(Um(r),n==null)throw new Error(Kt.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(Kt.IDS_MUST_BE_ITERABLE)}a(yU,"initializeBatchSearchByHash");function Um(e){if(!Array.isArray(e))throw e===void 0?new Error(Kt.FETCH_ATTRIBUTES_REQUIRED):new Error(Kt.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Um,"validateFetchAttributes");function aa(e,t,r){if($n.validateEnv(e),t===void 0)throw new Error(Kt.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Kt.SEARCH_VALUE_REQUIRED);if(r?.length>U8)throw new Error(Kt.SEARCH_VALUE_TOO_LARGE)}a(aa,"validateComparisonFunctions");function Jf(e,t){return t.length===1&&M8.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=oa.listDBIs(e)),t}a(Jf,"setGetWholeRowAttributes");bU.exports={searchAll:x8,searchAllToMap:B8,count:G8,countAll:k8,equals:F8,startsWith:q8,endsWith:$8,contains:AU,searchByHash:Q8,setGetWholeRowAttributes:Jf,batchSearchByHash:J8,batchSearchByHashToMap:X8,checkHashExists:j8,iterateDBI:H8,greaterThan:V8,greaterThanEqual:K8,lessThan:Y8,lessThanEqual:W8,between:z8}});var lu=I((ybe,CU)=>{var OU=require("lodash"),NU=dt(),He=require("joi"),Z8=oe(),{hdb_schema_table:Xf,checkValidTable:wU,hdb_table:IU,hdb_database:xm}=Si(),{handleHDBError:e5,hdb_errors:t5}=he(),{getDatabases:r5}=(Me(),D(st)),{HTTP_STATUS_CODES:n5}=t5,s5=He.object({database:xm,schema:xm,table:IU,search_attribute:Xf,search_value:He.any().required(),get_attributes:He.array().min(1).items(He.alternatives(Xf,He.object())).optional(),desc:He.bool(),limit:He.number().integer().min(1),offset:He.number().integer().min(0)}),i5=He.object({database:xm,schema:xm,table:IU,operator:He.string().valid("and","or").default("and").lowercase(),offset:He.number().integer().min(0),limit:He.number().integer().min(1),get_attributes:He.array().min(1).items(He.alternatives(Xf,He.object())).optional(),sort:He.object({attribute:He.alternatives(Xf,He.array().min(1)),descending:He.bool().optional()}).optional(),conditions:He.array().min(1).items(He.alternatives(He.object({operator:He.string().valid("and","or").default("and").lowercase(),conditions:He.array()}),He.object({search_attribute:He.alternatives(Xf,He.array().min(1)),search_type:He.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:He.when("search_type",{switch:[{is:"equals",then:He.any()},{is:"between",then:He.array().items(He.alternatives([He.string(),He.number()])).length(2)}],otherwise:He.alternatives(He.string(),He.number())}).required()}))).required()});CU.exports=function(e,t){let r=null;switch(t){case"value":r=NU.validateBySchema(e,s5);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(wU("database",e.schema)),i(wU("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=NU.validateBySchema(e,i5);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=Z8.checkGlobalSchemaTable(e.schema,e.table);if(s)return e5(new Error,s,n5.NOT_FOUND);let o=r5()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let l=a(f=>{for(let d=0,h=f.conditions.length;d<h;d++){let _=f.conditions[d];_.conditions?l(_):c.push(_.search_attribute)}},"addConditions");t==="conditions"&&l(e);let u=OU.filter(c,f=>f!=="*"&&!f.startsWith?.("$")&&f.attribute!=="*"&&!Array.isArray(f)&&!f.name&&!OU.some(o,d=>d===f||d.attribute===f||d.attribute===f.attribute));if(u&&u.length>0){let f=u.join(", ");return f=f.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${f}'`)}}return r}});var py=I((Obe,PU)=>{"use strict";var o5=ft(),a5=lu(),{getSchemaPath:c5}=gt();PU.exports=l5;function l5(e){let t=a5(e,"hashes");if(t)throw t;let r=c5(e.schema,e.table);return o5.openEnvironment(r,e.table)}a(l5,"initialize")});var my=I((wbe,DU)=>{"use strict";var u5=cu(),d5=py();DU.exports=f5;async function f5(e){let t=await d5(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return u5.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(f5,"lmdbGetDataByHash")});var uu=I((Cbe,LU)=>{"use strict";var Ey=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};LU.exports=Ey});var vU=I((Lbe,MU)=>{"use strict";var Dbe=uu(),_5=cu(),h5=py();MU.exports=p5;async function p5(e){let t=await h5(e),r=global.hdb_schema[e.schema][e.table];return _5.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(p5,"lmdbSearchByHash")});var qs=I((vbe,UU)=>{"use strict";var gy=class{static{a(this,"SearchObject")}constructor(t,r,n,s,i,o,c,l=!1,u=void 0,f=void 0){this.schema=t,this.table=r,this.search_attribute=n,this.search_value=s,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=l,this.limit=u,this.offset=f}};UU.exports=gy});var Bm=I((xbe,GU)=>{"use strict";var Yr=cu(),m5=ft(),E5=oe(),ke=vt(),Ic=(H(),D(q)),g5=Zi(),xU=Cn().LMDB_ERRORS_ENUM,{getSchemaPath:S5}=gt(),oo=Ic.SEARCH_WILDCARDS;async function T5(e,t,r){let n;e.schema===Ic.SYSTEM_SCHEMA_NAME?n=g5[e.table]:n=global.hdb_schema[e.schema][e.table];let s=FU(e,n.hash_attribute,r,t);return HU(e,s,n.hash_attribute,r)}a(T5,"prepSearch");async function HU(e,t,r,n){let s=S5(e.schema,e.table),i=await m5.openEnvironment(s,e.table),o=kU(i,e,t,r),c=o.transaction||i;if([ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,ke.SEARCH_TYPES.SEARCH_ALL,ke.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(A5(e,r)===!1){let f=e.search_attribute;if(f===r)return n?BU(o,()=>!0):o.map(h=>({[r]:h.key}));let d=a(h=>({[r]:h.value,[f]:h.key}),"toObject");return n?BU(o,d):o.map(d)}let u=e.search_attribute===r?o.map(f=>f.key):o.map(f=>f.value);return n===!0?Yr.batchSearchByHashToMap(c,r,e.get_attributes,u):Yr.batchSearchByHash(c,r,e.get_attributes,u)}a(HU,"executeSearch");function kU(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:o,limit:c,offset:l}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,l=Number.isInteger(l)?l:void 0,r){case ke.SEARCH_TYPES.EQUALS:s=Yr.equals(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.CONTAINS:s=Yr.contains(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.ENDS_WITH:case ke.SEARCH_TYPES._ENDS_WITH:s=Yr.endsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.STARTS_WITH:case ke.SEARCH_TYPES._STARTS_WITH:s=Yr.startsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Yr.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Yr.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case ke.SEARCH_TYPES.SEARCH_ALL:return Yr.searchAll(e,n,t.get_attributes,o,c,l);case ke.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Yr.searchAllToMap(e,n,t.get_attributes,o,c,l);case ke.SEARCH_TYPES.BETWEEN:s=Yr.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,l);break;case ke.SEARCH_TYPES.GREATER_THAN:case ke.SEARCH_TYPES._GREATER_THAN:s=Yr.greaterThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.GREATER_THAN_EQUAL:case ke.SEARCH_TYPES._GREATER_THAN_EQUAL:s=Yr.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.LESS_THAN:case ke.SEARCH_TYPES._LESS_THAN:s=Yr.lessThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.LESS_THAN_EQUAL:case ke.SEARCH_TYPES._LESS_THAN_EQUAL:s=Yr.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;default:return Object.create(null)}return s}a(kU,"searchByType");function BU(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(BU,"createMapFromIterable");function A5(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(A5,"checkToFetchMore");function FU(e,t,r,n){if(E5.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),oo.indexOf(s)>-1)return r===!0?ke.SEARCH_TYPES.SEARCH_ALL_TO_MAP:ke.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(oo[0])<0&&s.indexOf(oo[1])<0)return c===!0?r===!0?ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:ke.SEARCH_TYPES.EQUALS;if(oo.indexOf(i)>=0&&oo.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),ke.SEARCH_TYPES.CONTAINS;if(oo.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),ke.SEARCH_TYPES.ENDS_WITH;if(oo.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),ke.SEARCH_TYPES.STARTS_WITH;if(s.includes(oo[0])||s.includes(oo[1]))return ke.SEARCH_TYPES.EQUALS;throw new Error(xU.UNKNOWN_SEARCH_TYPE)}else switch(n){case Ic.VALUE_SEARCH_COMPARATORS.BETWEEN:return ke.SEARCH_TYPES.BETWEEN;case Ic.VALUE_SEARCH_COMPARATORS.GREATER:return ke.SEARCH_TYPES.GREATER_THAN;case Ic.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return ke.SEARCH_TYPES.GREATER_THAN_EQUAL;case Ic.VALUE_SEARCH_COMPARATORS.LESS:return ke.SEARCH_TYPES.LESS_THAN;case Ic.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return ke.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(xU.UNKNOWN_SEARCH_TYPE)}}a(FU,"createSearchTypeFromSearchObject");GU.exports={executeSearch:HU,createSearchTypeFromSearchObject:FU,prepSearch:T5,searchByType:kU}});var $U=I((kbe,qU)=>{"use strict";var Hbe=qs(),R5=lu(),y5=oe(),b5=(H(),D(q)),O5=Bm();qU.exports=N5;function N5(e,t){if(!y5.isEmpty(t)&&b5.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=R5(e,"value");if(n)throw n;return O5.prepSearch(e,t,!0)}a(N5,"lmdbGetDataByValue")});var Zf=I((qbe,VU)=>{"use strict";var Gbe=qs(),w5=lu(),I5=oe(),C5=(H(),D(q)),P5=Bm();VU.exports=D5;async function D5(e,t){if(!I5.isEmpty(t)&&C5.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=w5(e,"value");if(n)throw n;return P5.prepSearch(e,t,!1)}a(D5,"lmdbSearchByValue")});var YU=I((Kbe,KU)=>{"use strict";var Vbe=vt(),Sy=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}},Ty=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},Ay=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};KU.exports={SearchByConditionsObject:Sy,SearchCondition:Ty,SortAttribute:Ay}});var JU=I((Qbe,jU)=>{"use strict";var Wbe=YU().SearchByConditionsObject,L5=qs(),M5=lu(),Ry=cu(),Hm=vt(),{Resource:zbe}=(Jo(),D(TA)),QU=Bm(),v5=hy(),U5=require("lodash"),{getSchemaPath:x5}=gt(),WU=ft(),{handleHDBError:B5,hdb_errors:H5}=he(),{HTTP_STATUS_CODES:k5}=H5,F5=1e8;jU.exports=G5;async function G5(e){let t=M5(e,"conditions");if(t)throw B5(t,t.message,k5.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=x5(e.schema,e.table),n=await WU.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)WU.openDBI(n,u.search_attribute);let i=U5.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let f=u.search_type;f===Hm.SEARCH_TYPES.EQUALS?u.estimated_count=Ry.count(n,u.search_attribute,u.search_value):f===Hm.SEARCH_TYPES.CONTAINS||f===Hm.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=F5}return u.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await zU(o,e,i[0],s.hash_attribute),l;if(!e.operator||e.operator.toLowerCase()==="and"){let u=n.dbis[s.hash_attribute],f=i.slice(1).map(QU.filterByType),d=f.length,h=Ry.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(_=>u.get(_,{transaction:o,lazy:!0})),d>0&&(l=l.filter(_=>{for(let p=0;p<d;p++)if(!f[p](_))return!1;return!0})),(e.offset||e.limit!==void 0)&&(l=l.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),l=l.map(_=>v5.parseRow(_,h))}else{for(let d=1;d<i.length;d++){let h=i[d],_=await zU(o,e,h,s.hash_attribute);c=c.concat(_)}let u=new Set,f=e.offset||0;c=c.filter(d=>u.has(d)?!1:(u.add(d),!0)).slice(f,e.limit&&e.limit+f),l=Ry.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(G5,"lmdbSearchByConditions");async function zU(e,t,r,n){let s=new L5(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===Hm.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,QU.searchByType(e,s,i,n).map(o=>o.value)}a(zU,"executeConditionSearch")});var e_=I((Jbe,XU)=>{"use strict";var q5=(H(),D(q)).OPERATIONS_ENUM,yy=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=q5.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};XU.exports=yy});var by=I((Zbe,o0)=>{"use strict";var r0=qs(),n0=e_(),s0=Zf(),i0=Qf(),pn=(H(),D(q)),ZU=oe(),e0=ft(),{getTransactionAuditStorePath:$5,getSchemaPath:V5}=gt(),t0=j();o0.exports=K5;async function K5(e){try{if(ZU.isEmpty(global.hdb_schema[e.schema])||ZU.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await Y5(e),await W5(e);let t=V5(e.schema,e.table);try{await e0.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")t0.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=$5(e.schema,e.table);await e0.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")t0.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(K5,"lmdbDropTable");async function Y5(e){let t=new r0(pn.SYSTEM_SCHEMA_NAME,pn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,pn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[pn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await s0(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 n0(pn.SYSTEM_SCHEMA_NAME,pn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await i0(s)}a(Y5,"deleteAttributesFromSystem");async function W5(e){let t=new r0(pn.SYSTEM_SCHEMA_NAME,pn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,pn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[pn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,pn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,pn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await s0(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 n0(pn.SYSTEM_SCHEMA_NAME,pn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await i0(s)}catch(i){throw i}}a(W5,"dropTableFromSystem")});var c0=I((tOe,a0)=>{"use strict";var z5=require("fs-extra"),Q5=qs(),j5=uu(),J5=e_(),X5=by(),Z5=Qf(),e9=my(),t9=Zf(),ao=(H(),D(q)),{getSchemaPath:r9}=gt(),{handleHDBError:n9,hdb_errors:s9}=he(),{HDB_ERROR_MSGS:i9,HTTP_STATUS_CODES:o9}=s9;a0.exports=a9;async function a9(e){let t;try{t=await c9(e.schema);let r=new Q5(ao.SYSTEM_SCHEMA_NAME,ao.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,ao.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[ao.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await t9(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await X5(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new J5(ao.SYSTEM_SCHEMA_NAME,ao.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await Z5(s);let i=r9(t);await z5.remove(i)}catch(r){throw r}}a(a9,"lmdbDropSchema");async function c9(e){let t=new j5(ao.SYSTEM_SCHEMA_NAME,ao.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[ao.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await e9(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw n9(new Error,i9.SCHEMA_NOT_FOUND(e),o9.NOT_FOUND,void 0,void 0,!0);return n}a(c9,"validateDropSchema")});var t_=I((nOe,l0)=>{"use strict";var Oy=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};l0.exports=Oy});var wy=I((oOe,u0)=>{"use strict";var l9=require("fs-extra"),km=ft(),{getTransactionAuditStorePath:u9}=gt(),Ny=vt(),iOe=t_();u0.exports=d9;async function d9(e){let t;try{let r=u9(e.schema,e.table);await l9.mkdirp(r),t=await km.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{km.createDBI(t,Ny.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),km.createDBI(t,Ny.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),km.createDBI(t,Ny.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(d9,"createTransactionsAuditEnvironment")});var _0=I((lOe,f0)=>{"use strict";var Iy=(H(),D(q)),d0=ft(),f9=pc(),{getSystemSchemaPath:_9,getSchemaPath:h9}=gt(),cOe=Zi(),p9=fm(),Cy=dm(),m9=j(),E9=wy();f0.exports=g9;async function g9(e,t){let r=h9(t.schema,t.table),n=new Cy(t.schema,t.table,Iy.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new Cy(t.schema,t.table,Iy.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Cy(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await d0.createEnvironment(r,t.table),e!==void 0){let o=await d0.openEnvironment(_9(),Iy.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await f9.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdb_table_attributes,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await Py(n),await Py(s),await Py(i)}await E9(t)}catch(o){throw o}}a(g9,"lmdbCreateTable");async function Py(e){try{await p9(e)}catch(t){m9.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Py,"createAttribute")});var p0=I((dOe,h0)=>{"use strict";var S9=Pf(),T9=nf(),A9=Dm(),r_=(H(),D(q)),R9=pc().updateRecords,y9=ft(),{getSchemaPath:b9}=gt(),O9=Wf(),N9=j();h0.exports=w9;async function w9(e){try{let{schema_table:t,attributes:r}=S9(e);T9(e,r,t.hash_attribute),e.schema!==r_.SYSTEM_SCHEMA_NAME&&(r.includes(r_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(r_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(r_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(r_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await A9(e.hdb_auth_header,t,r),s=b9(e.schema,e.table),i=await y9.openEnvironment(s,e.table),o=await R9(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await O9(e,o)}catch(c){N9.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(w9,"lmdbUpdateRecords")});var E0=I((_Oe,m0)=>{"use strict";var I9=(H(),D(q)).OPERATIONS_ENUM,Dy=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=I9.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};m0.exports=Dy});var S0=I((mOe,g0)=>{"use strict";var pOe=E0(),C9=Pf(),P9=nf(),D9=Dm(),n_=(H(),D(q)),L9=pc().upsertRecords,M9=ft(),{getSchemaPath:v9}=gt(),U9=Wf(),x9=j(),{handleHDBError:B9,hdb_errors:H9}=he();g0.exports=k9;async function k9(e){let t;try{t=C9(e)}catch(l){throw B9(l,l.message,H9.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;P9(e,n,r.hash_attribute),e.schema!==n_.SYSTEM_SCHEMA_NAME&&(n.includes(n_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(n_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(n_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(n_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await D9(e.hdb_auth_header,r,n),i=v9(e.schema,e.table),o=await M9.openEnvironment(i,e.table),c=await L9(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await U9(e,c)}catch(l){x9.error(`unable to write transaction due to ${l.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:s,txn_time:c.txn_time}}a(k9,"lmdbUpsertRecords")});var A0=I((gOe,T0)=>{"use strict";var Ly=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};T0.exports=Ly});var y0=I((TOe,R0)=>{"use strict";var My=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}};R0.exports=My});var N0=I((yOe,O0)=>{"use strict";var vy=ft(),{getTransactionAuditStorePath:F9}=gt(),ROe=A0(),s_=vt(),G9=oe(),b0=y0(),q9=require("util").promisify,$9=q9(setTimeout),V9=1e4,K9=100;O0.exports=Y9;async function Y9(e){let t=F9(e.schema,e.table),r=await vy.openEnvironment(t,e.table,!0),n=vy.listDBIs(r);vy.initializeDBIs(r,s_.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new b0;do s=await W9(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 $9(K9);while(s.transactions_deleted>0);return i}a(Y9,"deleteAuditLogsBefore");async function W9(e,t){let r=new b0;try{let n=e.dbis[s_.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[s_.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];G9.isEmpty(c)||(s=e.dbis[s_.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[s_.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>V9)break}return await s,r}catch(n){throw n}}a(W9,"deleteTransactions")});var I0=I((OOe,w0)=>{"use strict";var Uy=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};w0.exports=Uy});var P0=I((IOe,C0)=>{"use strict";var z9=qs(),Q9=e_(),wOe=I0(),Ni=(H(),D(q)),j9=oe(),xy=ft(),J9=Zi(),X9=Zf(),Z9=Qf(),{getSchemaPath:e7}=gt();C0.exports=t7;async function t7(e,t=!0){let r;e.schema===Ni.SYSTEM_SCHEMA_NAME?r=J9[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await n7(e),s=e7(e.schema,e.table),i=await xy.openEnvironment(s,e.table);return t===!0&&await r7(e,i,r.hash_attribute),xy.dropDBI(i,e.attribute),n}a(t7,"lmdbDropAttribute");async function r7(e,t,r){let n=xy.openDBI(t,r),s,i=e.attribute;for(let{key:o,value:c,version:l}of n.getRange({start:!1,versions:!0})){let u={};for(let f in c)f!==i&&(u[f]=c[f]);s=t.dbis[r].put(o,u,l)}await s}a(r7,"removeAttributeFromAllObjects");async function n7(e){let t=new z9(Ni.SYSTEM_SCHEMA_NAME,Ni.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Ni.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Ni.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Ni.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await X9(t)).filter(o=>o[Ni.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(j9.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[Ni.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new Q9(Ni.SYSTEM_SCHEMA_NAME,Ni.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return Z9(i)}a(n7,"dropAttributeFromSystem")});var x0=I((DOe,U0)=>{"use strict";var By=ft(),du=vt(),POe=an(),Hy=(H(),D(q)),D0=oe(),{getTransactionAuditStorePath:s7}=gt(),i7=cu(),Fm=iu(),o7=j();U0.exports=a7;async function a7(e){let t=s7(e.schema,e.table),r=await By.openEnvironment(t,e.table,!0),n=By.listDBIs(r);By.initializeDBIs(r,du.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case Hy.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return L0(r,e.search_values);case Hy.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,l7(r,e.search_values,s);case Hy.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return c7(r,e.search_values);default:return L0(r)}}a(a7,"readAuditLog");function L0(e,t=[0,Date.now()]){D0.isEmpty(t[0])&&(t[0]=0),D0.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[du.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 Fm,s))}a(L0,"searchTransactionsByTimestamp");function c7(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[du.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,v0(e,i))}return Object.fromEntries(r)}a(c7,"searchTransactionsByUsername");function l7(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let u=t[c],f=i7.equals(e,du.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,du.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let{value:d}of f){let h=Number(d);n.has(h)?n.get(h).push(u.toString()):n.set(h,[u.toString()])}}let s=Array.from(n.keys()),i=v0(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],u=l.timestamp,f=n.get(u);M0(l,"records",r,f,o),M0(l,"original_records",r,f,o)}return Object.fromEntries(o)}a(l7,"searchTransactionsByHashValues");function M0(e,t,r,n,s){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],l=c[r].toString();if(n.indexOf(l)>=0)if(s.has(l)){let u=s.get(l),f=u[u.length-1];if(f.timestamp===i)f[t]=[c];else{let d=new Fm(e.operation,e.user_name,i,void 0);d[t]=[c],u.push(d)}}else{let u=new Fm(e.operation,e.user_name,i,void 0);u[t]=[c],s.set(l,[u])}}}a(M0,"loopRecords");function v0(e,t){let r=[];try{let n=e.dbis[du.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 Fm,i);r.push(o)}}catch(i){o7.warn(i)}return r}catch(n){throw n}}a(v0,"batchSearchTransactions")});var H0=I((UOe,B0)=>{"use strict";var{getSchemaPath:MOe}=gt(),vOe=ft(),{database:u7}=(Me(),D(st));B0.exports={writeTransaction:d7};async function d7(e,t,r){return u7({database:e,table:t}).transaction(r)}a(d7,"writeTransaction")});var q0=I((BOe,G0)=>{"use strict";var{getSchemaPath:k0}=gt(),F0=ft();G0.exports={flush:f7,resetReadTxn:_7};async function f7(e,t){return(await F0.openEnvironment(k0(e,t),t.toString())).flushed}a(f7,"flush");async function _7(e,t){try{(await F0.openEnvironment(k0(e,t),t.toString())).resetReadTxn()}catch{}}a(_7,"resetReadTxn")});var Y0=I((kOe,K0)=>{"use strict";var{Readable:h7}=require("stream"),{getDatabases:p7}=(Me(),D(st)),{readSync:m7,openSync:E7,createReadStream:$0}=require("fs"),{open:g7}=require("lmdb"),V0=yf(),S7=bf(),{AUDIT_STORE_OPTIONS:T7}=(Ji(),D(W0)),{INTERNAL_DBIS_NAME:A7,AUDIT_STORE_NAME:R7}=vt();K0.exports=b7;var ky=32768,y7=100;async function b7(e){let t=e.database||e.schema||"data",r=p7()[t],n=new Date().toISOString(),s=e.tables||e.table&&[e.table];if(s){let u=r[s[0]];if(!u)throw new Error(`Can not find table ${s[0]}`);let f=u.dbisDB,d=g7({noSync:!0,maxDbs:S7.MAX_DBS}),h,_=d.openDB(A7,new V0(!1)),p=f.useReadTransaction(),S=0,g=a(async function(E,A){A.encoding="binary",A.encoder=void 0;let O=d.openDB(E,A),v=f.openDB(E,A);for(let{key:F,version:G,value:Y}of v.getRange({start:null,transaction:p,versions:v.useVersions}))h=O.put(F,Y,G),S++%y7===0&&(await new Promise(te=>setTimeout(te,20)),p.openTimer&&(p.openTimer=0))},"copyDatabase");for(let{key:E,value:A}of f.getRange({transaction:p,start:!1}))if(s.some(O=>E.startsWith?.(O+"/"))){_.put(E,A);let[,O]=E.split("/"),v=!O,F=new V0(!v,v);await g(E,F)}e.include_audit&&await g(R7,{...T7}),await h;let R=$0(d.path);return R.headers=l(),R.on("close",()=>{p.done(),d.close()}),R}let o=r[Object.keys(r)[0]].primaryStore,c=E7(o.path);return o.transaction(()=>{let u=Buffer.alloc(ky);m7(c,u,0,ky),o.resetReadTxn();let f=o.useReadTransaction();f.renew();let d=$0(null,{fd:c,start:ky}),h=new h7.from(async function*(){yield u;for await(let _ of d)f.openTimer&&(f.openTimer=0),yield _;f.done()}());return h.headers=l(),h});function l(){let u=new Map;return u.set("content-type","application/octet-stream"),u.set("content-disposition",`attachment; filename="${t}"`),u.set("date",n),u}}a(b7,"getBackup")});var j0=I((GOe,Q0)=>{"use strict";var O7=j(),{handleHDBError:N7}=he(),w7=iL(),I7=fm(),C7=ly(),P7=cU(),D7=Qf(),L7=my(),M7=vU(),v7=$U(),U7=Zf(),x7=JU(),B7=c0(),H7=_0(),k7=p0(),F7=S0(),G7=N0(),q7=by(),$7=P0(),V7=x0(),K7=H0(),z0=q0(),Y7=Y0(),Fy=class extends w7{static{a(this,"LMDBBridge")}async searchByConditions(t){return x7(t)}async getDataByHash(t){return await L7(t)}async searchByHash(t){return await M7(t)}async getDataByValue(t,r){return await v7(t,r)}async searchByValue(t){return await U7(t)}async createSchema(t){return await P7(t)}async dropSchema(t){return await B7(t)}async createTable(t,r){return await H7(t,r)}async dropTable(t){return await q7(t)}async createAttribute(t){return await I7(t)}async createRecords(t){return await C7(t)}async updateRecords(t){return await k7(t)}async upsertRecords(t){try{return await F7(t)}catch(r){throw N7(r,null,null,O7.ERR,r)}}async deleteRecords(t){return await D7(t)}async dropAttribute(t){return await $7(t)}async deleteAuditLogsBefore(t){return await G7(t)}async readAuditLog(t){return await V7(t)}writeTransaction(t,r,n){return K7.writeTransaction(t,r,n)}flush(t,r){return z0.flush(t,r)}resetReadTxn(t,r){return z0.resetReadTxn(t,r)}getBackup(t){return Y7(t)}};Q0.exports=Fy});var qy={};ve(qy,{add:()=>Gm,applyReverse:()=>J0,getRecordAtTime:()=>Gy,rebuildUpdateBefore:()=>qm});function Gm(e,t,r){let n=e[t];typeof n=="bigint"?e[t]=n+BigInt(r.value):isNaN(e[t])?e[t]=r.value:e[t]=n+r.value}function qm(e,t,r){let n=null;for(let s in e)if(s in t){let i=t[s];if(i?.__op__){let o=e[s];if(o?.__op__)if(o.__op__===i.__op__)n||(n={}),n[s]=o;else throw new Error("Can not merge updates with different operations");else n||(n={}),n[s]=o,Gm(n,s,i)}else r&&(n||(n={}),n[s]=i)}else n||(n={}),n[s]=e[s];return n}function J0(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=W7[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=X0}}function Gy(e,t,r){let n=r.rootStore.auditStore,s={...e.value},i=e.localTime;for(;i>t;){let l=n.get(i),u=Ot(l);switch(u.type){case"put":s=u.getValue(r);break;case"patch":J0(s,u.getValue(r));break;case"delete":s=null}i=u.previousLocalTime}let o={},c=0;for(let l in s)s[l]===X0&&(o[l]=!0,c++);for(;c>0&&i>0;){let l=n.get(i),u=Ot(l),f;switch(u.type){case"put":f=u.getValue(r);break;case"patch":f=u.getValue(r);break}for(let d in f)o[d]&&(s[d]=f[d],o[d]=!1,c--);i=u.previousLocalTime}if(c>0)for(let l in o)s[l]=null;return s}var W7,X0,$m=be(()=>{Ji();a(Gm,"add");Gm.reverse=function(e,t,r){let n=e[t];typeof n=="bigint"?e[t]=n-BigInt(r.value):isNaN(e[t])||(e[t]=n-r.value)};W7={add:Gm};a(qm,"rebuildUpdateBefore");a(J0,"applyReverse");X0={};a(Gy,"getRecordAtTime")});function mn(e){let t=e.getChanges();return t||(t=Object.create(null),e._setChanges(t)),t}function Wm(e,t){let r=e.prototype,n={},s=t.attributes||t.properties||[];for(let c of s){let l=c.name,u,f;if(c.resolve)f={get(){return c.resolve(this,this.getContext?.())},set(d){return c.set(this,d)},configurable:!0};else{switch(c.type){case"String":u=a(function(d){if(!(typeof d=="string"||d==null&&c.nullable!==!1))throw new Vn.ClientError(`${l} must be a string, attempt to assign ${d}`);mn(this)[l]=d},"set");break;case"ID":u=a(function(d){if(!(typeof d=="string"||d?.length>0&&d.every?.(h=>typeof h=="string")||d==null&&c.nullable!==!1))throw new Vn.ClientError(`${l} must be a string, attempt to assign ${d}`);mn(this)[l]=d},"set");break;case"Float":case"Number":u=a(function(d){let h=d?.__op__?d.value:d;if(!(typeof h=="number"||d==null&&c.nullable!==!1))throw new Vn.ClientError(`${l} must be a number, attempt to assign ${h}`);mn(this)[l]=d},"set");break;case"Int":u=a(function(d){let h=d?.__op__?d.value:d;if(!(h>>0===h||d==null&&c.nullable!==!1))if(typeof h=="number"&&Math.abs((h>>0)-h)<=1)h=Math.round(h),d?.__op__?d.value=h:d=h;else throw new Vn.ClientError(`${l} must be an integer between -2147483648 and 2147483647, attempt to assign ${d}`);mn(this)[l]=d},"set");break;case"Long":u=a(function(d){let h=d?.__op__?d.value:d;if(!(Math.round(h)===d&&Math.abs(h)<=9007199254740992||d==null&&c.nullable!==!1))if(typeof h=="number"&&Math.abs(h)<=9007199254740992)h=Math.round(h),d?.__op__?d.value=h:d=h;else throw new Vn.ClientError(`${l} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${d}`);mn(this)[l]=d},"set");break;case"BigInt":u=a(function(d){let h=d?.__op__?d.value:d;if(!(typeof h=="bigint"||d==null&&c.nullable!==!1))if(typeof h=="string"||typeof h=="number")h=BigInt(h),d?.__op__?d.value=h:d=h;else throw new Vn.ClientError(`${l} must be a number, attempt to assign ${d}`);mn(this)[l]=d},"set");break;case"Boolean":u=a(function(d){if(!(typeof d=="boolean"||d==null&&c.nullable!==!1))throw new Vn.ClientError(`${l} must be a boolean, attempt to assign ${d}`);mn(this)[l]=d},"set");break;case"Date":u=a(function(d){if(!(d instanceof Date||d==null&&c.nullable!==!1))if(typeof d=="string"||typeof d=="number")d=new Date(d);else throw new Vn.ClientError(`${l} must be a Date, attempt to assign ${d}`);mn(this)[l]=d},"set");break;case"Bytes":u=a(function(d){if(!(d instanceof Uint8Array||d==null&&c.nullable!==!1))throw new Vn.ClientError(`${l} must be a Buffer or Uint8Array, attempt to assign ${d}`);mn(this)[l]=d},"set");break;case"Blob":u=a(function(d){if(!(d instanceof mi||d==null&&c.nullable!==!1))throw new Vn.ClientError(`${l} must be a Blob, attempt to assign ${d}`);mn(this)[l]=d},"set");break;case"Any":case void 0:u=a(function(d){mn(this)[l]=d},"set");break;default:u=a(function(d){if(!(typeof d=="object"||d==null&&c.nullable!==!1))throw new Vn.ClientError(`${l} must be an object, attempt to assign ${d}`);mn(this)[l]=d},"set")}f={get(){let d=this.getChanges?.();if(d&&l in d){let _=d[l];if(_?.__op__){let p=this.getRecord()?.[l];return _.update(p)}return _}let h=this.getRecord()?.[l];if(h&&typeof h=="object"){let _=$y(h,c);if(_)return d||this._setChanges(d=Object.create(null)),d[l]=_}return h},set:u,enumerable:!0,configurable:!0}}f.get.isAttribute=!0,n[l]=f,(!(l in r)||Object.getOwnPropertyDescriptor(r,l)?.get?.isAttribute)&&Object.defineProperty(r,l,f)}i("getProperty",function(c){let l=n[c];if(l)return l.get.call(this);let u=this.getChanges();return u?.[c]!==void 0?u[c]:this.getRecord()?.[c]}),i("set",function(c,l){let u=n[c];if(u)return u.set.call(this,l);if(t.sealed)throw new Vn.ClientError("Can not add a property to a sealed table schema");mn(this)[c]=l}),i("deleteProperty",function(c){mn(this)[c]=void 0}),i("toJSON",function(){let c=this.getChanges?.(),l;for(let f in c){l||(l={...this.getRecord()});let d=c[f];if(d?.__op__){let h=l[f];d=d.update(h)}l[f]=d}return Object.keys(this).length>0&&(l||(l={...this.getRecord()}),Object.assign(l,this)),l||this.getRecord()}),r.get||i("get",r.getProperty),r.delete||i("delete",r.deleteProperty),r.then||i("then",null);function i(c,l){Object.defineProperty(r,c,{value:l,configurable:!0})}a(i,"setMethod");let o=r;do{let c=Object.getPrototypeOf(o);if(c===Object.prototype){Object.setPrototypeOf(o,ex);break}o=c}while(o&&o!==ex)}function $y(e,t){let r;switch(e.constructor){case Object:return t?(r=t.TrackedObject,r||(t.TrackedObject=r=class extends i_{static{a(this,"TrackedObject")}},Wm(r,t)),new r(e)):new i_(e);case Array:let n=new Km(e.length,e);for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=$y(o,t?.elements)),n[s]=o}return n;default:return e}}function zm(e){let t=e.getChanges?.(),r;for(let s in t){r||(r=e.getRecord?{...e.getRecord()}:{});let i=t[s];if(i&&typeof i=="object")if(i.__op__){let o=r[s];i=i.update(o)}else i=zm(i);r[s]=i}return Object.keys(e).length>0&&(r||(r=e.getRecord?{...e.getRecord()}:{}),Object.assign(r,e)),r||e.getRecord?.()||e}function Pc(e,t=e.getChanges?.()){let r;if(e.getRecord&&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=Pc(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={...e.getRecord?.()});let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=qy[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=Pc(s);r[n]=s}if(!Array.isArray(e))for(let n in e)z7.call(e,n)&&(r||(r={...e.getRecord?.()}),r[n]=e[n]);return r?Object.freeze(r):e.getRecord?.()??e}function Vm(e){let t=e.getRecord?.();if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[Cc]||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?.getRecord?.()===s){if(Vm(i))return!0}else return!0}}else{let r=e.getChanges?.();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.getRecord?.()===i){if(Vm(s))return!0}else return!0}else return!0}}return!1}var Vn,Z0,ex,i_,z7,Cc,Km,Ym,Vy=be(()=>{Vn=M(he());$m();cs();a(mn,"getChanges");a(Wm,"assignTrackedAccessors");Z0=Object.prototype,ex=new Proxy({},{get(e,t,r){if(typeof t=="string"){if(t==="then"||t==="getRecord"||t==="getChanges")return;if(Z0[t])return Z0[t];let n=r.getChanges?.();if(n&&t in n)return n[t];let s=r.getRecord?.()[t];if(s&&typeof s=="object"){let i=$y(s);if(i)return n||(n=Object.create(null),r._setChanges(n)),n[t]=i,i}return s}}});a($y,"trackObject");i_=class{static{a(this,"GenericTrackedObject")}#e;#t;constructor(t){if(t?.getRecord)throw new Error("Can not track an already tracked object, check for circular references");this.#e=t}getRecord(){return this.#e}setRecord(t){this.#e=t}getChanges(){return this.#t}_setChanges(t){this.#t=t}};Wm(i_,{});a(zm,"collapseData");z7=Object.prototype.hasOwnProperty;a(Pc,"updateAndFreeze");a(Vm,"hasChanges");Cc=Symbol.for("has-array-changes"),Km=class extends Array{static{a(this,"TrackedArray")}#e;[Cc];constructor(t,r){super(t),this.#e=r}getRecord(){return this.#e}splice(...t){return this[Cc]=!0,super.splice(...t)}push(...t){return this[Cc]=!0,super.push(...t)}pop(){return this[Cc]=!0,super.pop()}unshift(...t){return this[Cc]=!0,super.unshift(...t)}shift(){return this[Cc]=!0,super.shift()}};Km.prototype.constructor=Array;Ym=class{constructor(t){this.value=t}static{a(this,"Addition")}__op__="add";update(t){return(+t||0)+this.value}}});var cx={};ve(cx,{ResourceBridge:()=>Wy});function zy({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 rx(e,t){let r=wi(e),n=zy(e,r);if(!r)throw new $s.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,onlyIfCached:e.onlyIfCached,noCacheStore:e.noCacheStore,noCache:e.noCache,replicateFrom:e.replicateFrom},o;bt(i,()=>new Promise(u=>o=u));let c=e.ids||e.hash_values,l=0;return{[Symbol.asyncIterator](){return{async next(){if(l<c.length){let u=c[l++],f;try{f=await r.get({id:u,lazy:s,select:n},i),f=f&&zm(f)}catch(d){f={message:d.toString()}}return t?{value:{key:u,value:f}}:{value:f}}else return o(),{done:!0}},return(u){return o(),{value:u,done:!0}},throw(u){return o(),{done:!0}}}}}}function wi(e){let t=e.database||e.schema||j7,r=Je()[t];if(!r)throw(0,$s.handleHDBError)(new Error,Q7.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function nx(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*sx(e,t,r,n){let s,i=0;for await(let o of e.getHistory(t,r)){let c=o.operation??o.type;c==="put"&&(c="upsert");let{id:l,version:u,value:f}=o;if(s?.timestamp===u)s.hash_values.push(l),s.records.push(f);else{if(s&&(yield s,i++,n&&n<=i)){s=void 0;break}s={operation:c,user_name:o.user,timestamp:u,hash_values:[l],records:[f]}}}s&&(yield s)}var ix,Qm,$s,ox,Ky,Yy,ax,Q7,j7,J7,X7,tx,Wy,lx=be(()=>{"use strict";ix=M(j0()),Qm=M(lu()),$s=M(he());Me();ox=M(Pf());H();Ky=M(io()),Yy=M(Gs()),ax=M(oe());rc();Vy();({HDB_ERROR_MSGS:Q7}=$s.hdb_errors),j7="data",J7=1e4,X7=10,Wy=class extends ix.default{static{a(this,"ResourceBridge")}constructor(t){super(t),tx=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,Qm.default)(t,"conditions");if(r)throw(0,$s.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=wi(t);if(!n)throw new $s.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:zy(t,n),sort:t.sort,allowFullScan:!0},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}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 $s.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}]}ut({database:r.database??r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration,audit:r.audit})}async createAttribute(t){return await wi(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=wi(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=a((o,c,l)=>(c={...c},delete c[n],r.primaryStore.ifVersion(o,l,()=>r.primaryStore.put(o,c,l)).then(u=>{if(!u){let{value:f,version:d}=r.primaryStore.getEntry(o);return i(o,f,d)}})),"deleteRecord");for(let{key:o,value:c,version:l}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(o,c,l),await new Promise(u=>setImmediate(u));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){wi(t).dropTable()}createSchema(t){return fu({database:t.schema,table:null}),Ky.signalSchemaChange(new Yy.SchemaEventMsg(process.pid,$t.CREATE_SCHEMA,t.schema))}async dropSchema(t){await Qy(t.schema),Ky.signalSchemaChange(new Yy.SchemaEventMsg(process.pid,$t.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,tx.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,ox.default)(t),s,i=Je()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt,originatingOperation:t.operation};return t.replicateTo&&(o.replicateTo=t.replicateTo),t.replicatedConfirmation&&(o.replicatedConfirmation=t.replicatedConfirmation),bt(o,async c=>{if(!i.schemaDefined){s=[];for(let f of n)i.attributes.find(h=>h.name==f)||s.push(f);s.length>0&&await i.addAttributes(s.map(f=>({name:f,indexed:!0})))}let l=[],u=[];for(let f of t.records){let d=f[i.primaryKey],h=d!=null&&await i.get(d,o);if(t.requires_existing&&!h||t.requires_no_existing&&h){u.push(f[i.primaryKey]);continue}h&&(h=zm(h));for(let _ in f)if(Object.prototype.hasOwnProperty.call(f,_)){let p=f[_];if(typeof p=="function")try{let S=p([[h]]);Array.isArray(S)&&(p=S[0].func_val,f[_]=p)}catch(S){throw S.message+="Trying to set key "+_+" on object"+JSON.stringify(f),S}}if(h)for(let _ in h)Object.prototype.hasOwnProperty.call(f,_)||(f[_]=h[_]);await(d==null?i.create(f,o):i.put(f,o)),l.push(f[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:l,new_attributes:s,skipped_hashes:u}})}async deleteRecords(t){let r=Je()[t.schema][t.table],n={user:t.hdb_user};return t.replicateTo&&(n.replicateTo=t.replicateTo),t.replicatedConfirmation&&(n.replicatedConfirmation=t.replicatedConfirmation),bt(n,async s=>{let i=t.hash_values||t.records.map(l=>l[r.primaryKey]),o=[],c=[];for(let l of i)await r.delete(l,n)?o.push(l):c.push(l);return nx(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=Je()[t.schema][t.table];if(!r.createdTimeProperty)throw new $s.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:Rp.LESS}]}),s=!1,i=[],o=[],c=0,l=[],u=a(async()=>{let f=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:l});i.push(...f.deleted_hashes),o.push(...f.skipped_hashes),await(0,ax.async_set_timeout)(X7),l=[],s=!0},"chunkDelete");for await(let f of n)l.push(f[r.primaryKey]),c++,c%J7===0&&await u();return l.length>0&&await u(),s?nx(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,Qm.default)(t,"hashes");if(r)throw r;return rx(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of rx(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&ZT[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,Qm.default)(t,"value");if(n)throw n;let s=wi(t);if(!s)throw new $s.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===Rp.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,sort:t.sort,select:zy(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=wi(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){wi({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return wi(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=wi(t),n={};switch(t.search_type){case yp.HASH_VALUE:for(let i of t.search_values)n[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.operation??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 yp.USERNAME:let s=t.search_values;for await(let i of sx(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return sx(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};a(zy,"getSelect");a(rx,"getRecords");a(wi,"getTable");a(nx,"createDeleteResponse");a(sx,"groupRecordsInHistory")});var Hn=I((eNe,ux)=>{"use strict";var{ResourceBridge:Z7}=(lx(),D(cx)),eee=ce();eee.initSync();var jm;function tee(){return jm||(jm=new Z7,jm)}a(tee,"getBridge");ux.exports=tee()});var hn=I((rNe,hx)=>{"use strict";var Xm=BA(),Ir=oe(),ree=require("util"),Zm=Hn(),nee=Hs(),dx=j(),{handleHDBError:Dc,hdb_errors:see}=he(),{HTTP_STATUS_CODES:Lc}=see,iee=ree.promisify(nee.getTableSchema),oee="updated",fx="inserted",_x="upserted";hx.exports={insert:cee,update:lee,upsert:uee,validation:aee,flush:dee};async function aee(e){if(Ir.isEmpty(e))throw new Error("invalid update parameters defined.");if(Ir.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Ir.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await iee(e.schema,e.table),r=Xm(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&&Ir.isEmptyOrZeroLength(c[n]))throw dx.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(!Ir.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw dx.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!Ir.isEmpty(c[n])&&c[n]!==""&&s.has(Ir.autoCast(c[n]))&&(c.skip=!0),s.add(Ir.autoCast(c[n]));for(let l in c)i[l]=1}),i[n]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(i)}}a(aee,"validation");async function cee(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Xm(e);if(t)throw Dc(new Error,t.message,Lc.BAD_REQUEST);Ir.transformReq(e);let r=Ir.checkSchemaTableExist(e.schema,e.table);if(r)throw Dc(new Error,r,Lc.BAD_REQUEST);let n=await Zm.createRecords(e);return Jm(fx,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(cee,"insertData");async function lee(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Xm(e);if(t)throw Dc(new Error,t.message,Lc.BAD_REQUEST);Ir.transformReq(e);let r=Ir.checkSchemaTableExist(e.schema,e.table);if(r)throw Dc(new Error,r,Lc.BAD_REQUEST);let n=await Zm.updateRecords(e);return Ir.isEmpty(n.existing_rows)?Jm(oee,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):Jm(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(lee,"updateData");async function uee(e){if(e.operation!=="upsert")throw Dc(new Error,"invalid operation, must be upsert",Lc.INTERNAL_SERVER_ERROR);let t=Xm(e);if(t)throw Dc(new Error,t.message,Lc.BAD_REQUEST);Ir.transformReq(e);let r=Ir.checkSchemaTableExist(e.schema,e.table);if(r)throw Dc(new Error,r,Lc.BAD_REQUEST);let n=await Zm.upsertRecords(e);return Jm(_x,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(uee,"upsertData");function Jm(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===fx?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===_x?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(Jm,"returnObject");function dee(e){return Ir.transformReq(e),Zm.flush(e.schema,e.table)}a(dee,"flush")});var Tx=I((sNe,Sx)=>{var _u=require("validate.js"),mx=dt(),hu=(H(),D(q)),{handleHDBError:fee,hdb_errors:_ee}=he(),{HDB_ERROR_MSGS:Yt,HTTP_STATUS_CODES:hee}=_ee,jy=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),pee={STRUCTURE_USER:"structure_user"},px=Object.values(hu.ROLE_TYPES_ENUM),mee="attribute_permissions",Eee="attribute_name",{PERMS_CRUD_ENUM:pu}=hu,gee=[mee,...Object.values(pu)],Ex=[pu.READ,pu.INSERT,pu.UPDATE],See=[Eee,...Ex];function Tee(e){let t=jy();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,gx(e,t)}a(Tee,"addRoleValidation");function Aee(e){let t=jy();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,gx(e,t)}a(Aee,"alterRoleValidation");function Ree(e){let t=jy();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,mx.validateObject(e,t)}a(Ree,"dropRoleValidation");var yee=["operation","role","id","permission","hdb_user","hdb_auth_header","access"];function gx(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)yee.includes(n[o])||s.push(n[o]);s.length>0&&rr(Yt.INVALID_ROLE_JSON_KEYS(s),r);let i=mx.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{rr(o,r)}),e.permission){let o=bee(e);o&&rr(o,r),px.forEach(c=>{e.permission[c]&&!_u.isBoolean(e.permission[c])&&rr(Yt.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(px.indexOf(o)<0){if(o===pee.STRUCTURE_USER){let l=e.permission[o];if(typeof l=="boolean")continue;if(Array.isArray(l)){for(let u=0,f=l.length;u<f;u++){let d=l[u];global.hdb_schema[d]||rr(Yt.SCHEMA_NOT_FOUND(d),r)}continue}rr(Yt.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){rr(Yt.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let l in c.tables){let u=c.tables[l];if(!l||!global.hdb_schema[o][l]){rr(Yt.TABLE_NOT_FOUND(o,l),r);continue}if(Object.keys(u).forEach(f=>{gee.includes(f)||rr(Yt.INVALID_PERM_KEY(f),r,o,l)}),Object.values(pu).forEach(f=>{_u.isDefined(u[f])?_u.isBoolean(u[f])||rr(Yt.TABLE_PERM_NOT_BOOLEAN(f),r,o,l):rr(Yt.TABLE_PERM_MISSING(f),r,o,l)}),u.attribute_permissions===void 0){rr(Yt.ATTR_PERMS_ARRAY_MISSING,r,o,l);continue}else if(!(Array.isArray(u.attribute_permissions)||u.attribute_permissions===null)){rr(Yt.ATTR_PERMS_NOT_ARRAY,r,o,l);continue}if(u.attribute_permissions){let f=global.hdb_schema[o][l].attributes.map(({attribute:h})=>h),d={read:!1,insert:!1,update:!1};for(let h in u.attribute_permissions){let _=u.attribute_permissions[h];if(Object.keys(_).forEach(S=>{!See.includes(S)&&S!==pu.DELETE&&rr(Yt.INVALID_ATTR_PERM_KEY(S),r,o,l)}),!_u.isDefined(_.attribute_name)){rr(Yt.ATTR_PERM_MISSING_NAME,r,o,l);continue}let p=_.attribute_name;if(!f.includes(p)){rr(Yt.INVALID_ATTRIBUTE_IN_PERMS(p),r,o,l);continue}Ex.forEach(S=>{_u.isDefined(_[S])?_u.isBoolean(_[S])||rr(Yt.ATTR_PERM_NOT_BOOLEAN(S,p),r,o,l):rr(Yt.ATTR_PERM_MISSING(S,p),r,o,l)}),!d.read&&_.read===!0&&(d.read=!0),!d.insert&&_.insert===!0&&(d.insert=!0),!d.update&&_.update===!0&&(d.update=!0)}if(u.read===!1&&d.read===!0||u.insert===!1&&d.insert===!0||u.update===!1&&d.update===!0){let h=`${o}.${l}`;rr(Yt.MISMATCHED_TABLE_ATTR_PERMS(h),r,o,l)}}}}return Oee(r)}a(gx,"customValidate");Sx.exports={addRoleValidation:Tee,alterRoleValidation:Aee,dropRoleValidation:Ree};function bee(e){let{operation:t,permission:r}=e;if(t===hu.OPERATIONS_ENUM.ADD_ROLE||t===hu.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 Yt.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?hu.ROLE_TYPES_ENUM.SUPER_USER:hu.ROLE_TYPES_ENUM.CLUSTER_USER;return Yt.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(bee,"validateNoSUPerms");function Oee(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:Yt.ROLE_PERMS_ERROR,...e};return fee(new Error,n,hee.BAD_REQUEST)}else return null}a(Oee,"generateRolePermResponse");function rr(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(rr,"addPermError")});var a_=I((aNe,bx)=>{"use strict";var Ax=hn(),Rx=$r(),Nee=Tc(),Xy=Tx(),Zy=io(),oNe=require("uuid").v4,wee=require("util"),eE=(H(),D(q)),Iee=oe(),eb=Rx.searchByValue,Cee=Rx.searchByHash,Pee=wee.promisify(Nee.delete),Dee=qs(),Lee=uu(),{hdb_errors:Mee,handleHDBError:Mc}=he(),{HDB_ERROR_MSGS:yx,HTTP_STATUS_CODES:o_}=Mee,{UserEventMsg:tb}=Gs();bx.exports={addRole:vee,alterRole:Uee,dropRole:xee,listRoles:Bee};function Jy(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(Jy,"scrubRoleDetails");async function vee(e){let t=Xy.addRoleValidation(e);if(t)throw t;e=Jy(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 eb(r)||[])}catch(i){throw Mc(i)}if(n&&n.length>0)throw Mc(new Error,yx.ROLE_ALREADY_EXISTS(e.role),o_.CONFLICT,void 0,void 0,!0);e.id||(e.id=e.role);let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await Ax.insert(s),Zy.signalUserChange(new tb(process.pid)),e=Jy(e),e}a(vee,"addRole");async function Uee(e){let t=Xy.alterRoleValidation(e);if(t)throw t;e=Jy(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await Ax.update(r)}catch(s){throw Mc(s)}if(n&&n?.message==="updated 0 of 1 records")throw Mc(new Error,"Invalid role id",o_.BAD_REQUEST,void 0,void 0,!0);return await Zy.signalUserChange(new tb(process.pid)),e}a(Uee,"alterRole");async function xee(e){let t=Xy.dropRoleValidation(e);if(t)throw Mc(new Error,t,o_.BAD_REQUEST,void 0,void 0,!0);let r=new Lee(eE.SYSTEM_SCHEMA_NAME,eE.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await Cee(r));if(n.length===0)throw Mc(new Error,yx.ROLE_NOT_FOUND,o_.NOT_FOUND,void 0,void 0,!0);let s=new Dee(eE.SYSTEM_SCHEMA_NAME,eE.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await eb(s)),o=!1;if(Iee.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){o=!0;break}}if(o===!0)throw Mc(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,o_.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await Pee(c),Zy.signalUserChange(new tb(process.pid)),`${n[0].role} successfully deleted`}a(xee,"dropRole");async function Bee(){return eb({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(Bee,"listRoles")});var rb={};ve(rb,{start:()=>wx,startOnMainThread:()=>Fee});function wx({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r){let n=(0,Ox.parseDocument)(r.toString(),{simpleKeys:!0}).toJSON();for(let s in n){let i=n[s];i.permission||(i={permission:i},i.permission.access&&(i.access=i.permission.access,delete i.permission.access));for(let o in i.permission){if(Hee.includes(o))continue;let c=i.permission[o];c.tables||(i.permission[o]=c={tables:c});for(let l in c.tables){let u=c.tables[l];if(u.read=!!u.read,u.insert=!!u.insert,u.update=!!u.update,u.delete=!!u.delete,u.attributes){let f=[];for(let d in u.attributes){let h=u.attributes[d];h.attribute_name=d,f.push(h)}u.attribute_permissions=f,delete u.attributes}if(u.attribute_permissions){if(!Array.isArray(u.attribute_permissions))throw new Error("attribute_permissions must be an array if defined");for(let f of u.attribute_permissions)f.read=!!f.read,f.insert=!!f.insert,f.update=!!f.update}else u.attribute_permissions=null}}i.role=i.id=s,await kee(i)}}}async function kee(e){let t=Je().system.hdb_role;for await(let r of t.search([{attribute:"role",value:e.role}])){let{__createdtime__:n,__updatedtime__:s,...i}=r;return(0,Nx.isEqual)(i,e)?void 0:(e.id=r.id,(0,tE.alterRole)(e))}return(0,tE.addRole)(e)}var tE,Ox,Nx,Hee,Fee,Ix=be(()=>{Me();tE=M(a_()),Ox=require("yaml"),Nx=require("lodash"),Hee=["super_user","cluster_user","structure_user"];a(wx,"start");a(kee,"ensureRole");Fee=wx});async function rE(e){let t=(0,Dx.pathToFileURL)(e).toString();return Gee?(c_||(c_=qee(Vee)),(await(await c_).import(t)).namespace):import(t)}async function qee(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),c_=new Compartment({console,Math,Date,fetch:$ee,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,Px.extname)(r)||(r+=".js"),r)},importHook:a(async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){Object.assign(s,{Resource:Fr,tables:Kn,databases:qe})}};let n=await(0,Cx.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)},"importHook")}),c_}function $ee(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 Vee(){return{Resource:Fr,tables:Kn}}var Cx,Px,Dx,Gee,c_,nb=be(()=>{Jo();Me();Cx=require("fs/promises"),Px=require("path"),Dx=require("url"),Gee=!1;a(rE,"secureImport");a(qee,"getCompartment");a($ee,"secureOnlyFetch");a(Vee,"getGlobalVars")});var ib={};ve(ib,{handleFile:()=>Kee});async function Kee(e,t,r,n){let s=new Map,i=await rE(r);c(i.default)&&n.set((0,sb.dirname)(t),i.default),o(i,(0,sb.dirname)(t));function o(l,u){for(let f in l){let d=l[f];c(d)?n.set(u+"/"+f,d):typeof d=="object"&&o(d,u+"/"+f)}}a(o,"recurseForResources");function c(l){return typeof l=="function"&&(l.get||l.put||l.post||l.delete)}return a(c,"isResource"),s}var sb,Lx=be(()=>{nb();sb=require("path");a(Kee,"handleFile")});var ab={};ve(ab,{start:()=>Yee});function Yee({resources:e}){e.set("login",ob),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var ob,Mx=be(()=>{Jo();a(Yee,"start");ob=class extends Fr{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 h_={};ve(h_,{addAnalyticsListener:()=>__,calculateCPUUtilization:()=>Xx,diffResourceUsage:()=>Zx,recordAction:()=>nr,recordActionBinary:()=>Yn,setAnalyticsEnabled:()=>Wee});function Wee(e){Wx=e}function zee(e,t){if(typeof e=="number"){let r=t.values,n=r.index++;if(n>=r.length){let s=r;t.values=r=new Float32Array(n*2),r.set(s),r.index=n+1}r[n]=e,t.total+=e}else if(typeof e=="boolean")e&&t.total++,t.count++;else if(typeof e=="function")t.count++;else throw new TypeError("Invalid metric value type "+typeof e)}function Qee(e,t,r,n,s,i){let o={};if(typeof t=="number")o.total=t,o.values=new Float32Array(4),o.values.index=1,o.values[0]=t,o.total=t;else if(typeof t=="boolean")o.total=t?1:0,o.count=1;else if(typeof t=="function")o.count=1,o.callback=t;else throw new TypeError("Invalid metric value type "+typeof t);o.description={metric:r,path:n,method:s,type:i},sE.set(e,o)}function nr(e,t,r,n,s){if(!Wx)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=sE.get(i);o?zee(e,o):Qee(i,e,t,r,n,s),nE||jee()}function Yn(e,t,r,n,s){nr(!!e,t,r,n,s)}function __(e){jx.push(e)}function jee(){nE=performance.now(),setTimeout(async()=>{let e=performance.now()-nE;nE=0;let t=[],r={time:Date.now(),period:e,threadId:vc.threadId,metrics:t};for(let[s,i]of sE){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,l=0,u=[],f;for(let d of Jx){let h=Math.floor(c*d),_=o[h-1];if(h>l){let p=h-l;if(_===f){let S=u[u.length-1];typeof S=="number"?u[u.length-1]={value:S,count:1+p}:S.count+=p}else u.push(p>1?{value:_,count:p}:_),f=_;l=h}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:u,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 eB()}let n=process.memoryUsage();t.push({metric:"memory",threadId:vc.threadId,byThread:!0,...n});for(let s of jx)s(t);sE=new Map,vc.parentPort?vc.parentPort.postMessage({type:Qx,report:r}):nB({report:r})},zx).unref()}function iE(e,t,r){let n={id:(0,d_.getNextMonotonicTime)(),metric:t,...r};e.primaryStore.put(n.id,n,{append:!0}).then(s=>{s||e.primaryStore.put(n.id,n)})}function Xx(e,t){let r=e.userCPUTime+e.systemCPUTime;return Math.round(r/t*100)/100}function Zx(e,t){return{userCPUTime:t.userCPUTime/1e3-(e?.userCPUTime??0),systemCPUTime:t.systemCPUTime/1e3-(e?.systemCPUTime??0),minorPageFault:t.minorPageFault-(e?.minorPageFault??0),majorPageFault:t.majorPageFault-(e?.majorPageFault??0),fsRead:t.fsRead-(e?.fsRead??0),fsWrite:t.fsWrite-(e?.fsWrite??0),voluntaryContextSwitches:t.voluntaryContextSwitches-(e?.voluntaryContextSwitches??0),involuntaryContextSwitches:t.involuntaryContextSwitches-(e?.involuntaryContextSwitches??0)}}function Jee(e,t,r){let n=0;for(let[s,i]of Object.entries(r)){let o=`${t}.${s}`,c=i.getSize(),l={database:t,table:s,size:c};iE(e,"table-size",l),Uc.trace?.(`table ${o} size metric: ${JSON.stringify(l)}`),n+=c}return n}function vx(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s.getAuditSize(),o=Yx.default.statSync(s.primaryStore.env.path).size,c=Jee(e,r,n),l=o-c,u={database:r,size:o,used:c,free:l,audit:i};iE(e,"database-size",u),Uc.trace?.(`database ${r} size metric: ${JSON.stringify(u)}`)}catch(s){Uc.warn?.("Error getting DB size metrics",s)}}function Ux(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s.getStorageStats(),o={database:r,...i};iE(e,"storage-volume",o),Uc.trace?.(`db ${r} storage volume metrics: ${JSON.stringify(o)}`)}catch(s){Uc.warn?.("Error getting DB volumne metrics",s)}}async function Xee(e,t=6e4){let r=lb(),n=tB(),s=new Promise(E=>{let A=performance.now();setImmediate(()=>{let O=performance.now();O-A>5e3&&Uc.warn?.("Unusually high event queue latency on the main thread of "+Math.round(O-A)+"ms"),A=performance.now()}),n.primaryStore.prefetch([1],()=>{let O=performance.now();O-A>5e3&&Uc.warn?.("Unusually high task queue latency on the main thread of "+Math.round(O-A)+"ms"),E(O-A)})}),i;for(let E of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(E.value?.time){i=E.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,l=new Map,u=[],f;for(let{key:E,value:A}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!A)continue;if(o){if(E>o+t)break}else o=E;f=E;let{metrics:O,threadId:v}=A;for(let F of O||[]){let{path:G,method:Y,type:te,metric:se,count:X,total:ne,distribution:Q,threads:pe,...Re}=F;X||(X=1);let Ce=se+(G?"-"+G:"");Y!==void 0&&(Ce+="-"+Y),te!==void 0&&(Ce+="-"+te);let me=c.get(Ce);if(me){if(me.threads){let ct=me.threads[v];if(ct)me=ct;else{me.threads[v]={...Re};continue}}me.count||(me.count=1);let Jt=me.count;for(let ct in Re){let Ar=Re[ct];typeof Ar=="number"&&(me[ct]=(me[ct]*Jt+Ar*X)/(Jt+X))}me.count+=X,ne>=0&&(me.total+=ne,me.ratio=me.total/me.count)}else me={period:t,...F},delete me.distribution,c.set(Ce,me),me.byThread&&(me.threads=[],me.threads[v]={...Re},u.push(me));if(Q){Q=Q.map(ct=>typeof ct=="number"?{value:ct,count:1}:ct);let Jt=l.get(Ce);Jt?Jt.push(...Q):l.set(Ce,Q)}}await eB()}for(let E of u){let{path:A,method:O,type:v,metric:F,count:G,total:Y,distribution:te,threads:se,...X}=E;se=se.filter(ne=>ne);for(let ne in X){if(typeof E[ne]!="number")continue;let Q=0;for(let pe of se){let Re=pe[ne];typeof Re=="number"&&(Q+=Re)}E[ne]=Q}E.count=se.length,delete E.threads,delete E.byThread}for(let[E,A]of l){let O=c.get(E);A.sort((ct,Ar)=>ct.value>Ar.value?1:-1);let v=O.count-1,F=[],G=0,Y=0,te;for(let ct of Jx){let Ar=v*ct;for(;G<Ar;)te=A[Y++],G+=te.count,Y===1&&G--;let is=A[Y>1?Y-2:0];te||(te=A[0]),F.push(te.value-(te.value-is.value)*(G-Ar)/te.count)}let[se,X,ne,Q,pe,Re,Ce,me,Jt]=F;Object.assign(O,{p1:se,p10:X,p25:ne,median:Q,p75:pe,p90:Re,p95:Ce,p99:me,p999:Jt})}let d;for(let[E,A]of c)A.id=(0,d_.getNextMonotonicTime)(),A.time=f,n.primaryStore.put(A.id,A,{append:!0}).then(O=>{O||n.primaryStore.put(A.id,A)}),d=!0;let h=Date.now(),{idle:_,active:p}=performance.eventLoopUtilization();if(d||p*10>_){let E=(0,d_.getNextMonotonicTime)(),A={id:E,metric:"main-thread-utilization",idle:_-xx,active:p-Bx,taskQueueLatency:await s,time:h,...process.memoryUsage()};n.primaryStore.put(E,A,{append:!0}).then(O=>{O||n.primaryStore.put(E,A)})}xx=_,Bx=p;let S=process.resourceUsage(),g=Zx(l_,S);g.time=h,g.period=l_.time?h-l_.time:t,g.cpuUtilization=Xx(l_,g.period),iE(n,"resource-usage",g),l_=g;let R=Je();vx(n,R),vx(n,{system:R.system}),Ux(n,R),Ux(n,{system:R.system})}async function Hx(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function lb(){return kx||(kx=ut({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function tB(){return Fx||(Fx=ut({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function tte(){rB=!0;let e=(0,f_.get)(B.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await Xee(zx,e),await Hx(lb(),Zee),await Hx(tB(),ete)},Math.min(e/2,2147483647)).unref()}function nB(e,t){let r=e.report;r.threadId=t?.threadId||vc.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(Gx+=n.mean*n.count);r.totalBytesProcessed=Gx,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(qx.get(t))}),qx.set(t,t.performance.eventLoopUtilization())),r.id=(0,d_.getNextMonotonicTime)(),lb().primaryStore.put(r.id,r),rB||tte(),rte&&(sB=ste(r))}async function ste(e){if(await sB,!ca){let r=(0,u_.dirname)((0,Vx.getLogFilePath)());try{ca=await(0,cb.open)((0,u_.join)(r,"analytics.log"),"r+")}catch{ca=await(0,cb.open)((0,u_.join)(r,"analytics.log"),"w+")}}let t=(await ca.stat()).size;if(t>nte){let r=Buffer.alloc(t);await ca.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await ca.write(r,{position:0}),await ca.truncate(r.length),t=r.length}await ca.write(JSON.stringify(e)+`
20
+ `,t)}var vc,$x,Vx,Kx,u_,cb,d_,f_,Yx,Uc,sE,Wx,nE,zx,Qx,jx,Jx,xx,Bx,l_,eB,Zee,ete,kx,Fx,rB,Gx,qx,rte,sB,ca,nte,Ii=be(()=>{vc=require("worker_threads"),$x=M(rt());Me();Vx=M(j()),Kx=M(hi()),u_=require("path"),cb=require("fs/promises"),d_=M(an()),f_=M(ce());H();Gr();Yx=M(require("node:fs")),Uc=(0,Kx.loggerWithTag)("analytics");(0,f_.initSync)();sE=new Map,Wx=(0,f_.get)(B.ANALYTICS_AGGREGATEPERIOD)>-1;a(Wee,"setAnalyticsEnabled");a(zee,"recordExistingAction");a(Qee,"recordNewAction");a(nr,"recordAction");Ye.recordAnalytics=nr;a(Yn,"recordActionBinary");nE=0,zx=1e3,Qx="analytics-report",jx=[];a(__,"addAnalyticsListener");Jx=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(jee,"sendAnalytics");a(iE,"storeMetric");a(Xx,"calculateCPUUtilization");a(Zx,"diffResourceUsage");a(Jee,"storeTableSizeMetrics");a(vx,"storeDBSizeMetrics");a(Ux,"storeVolumeMetrics");a(Xee,"aggregation");xx=0,Bx=0,l_={},eB=a(()=>new Promise(setImmediate),"rest");a(Hx,"cleanup");Zee=36e5,ete=31536e6;a(lb,"getRawAnalyticsTable");a(tB,"getAnalyticsTable");(0,$x.setChildListenerByType)(Qx,nB);a(tte,"startScheduledTasks");Gx=0,qx=new Map,rte=!1;a(nB,"recordAnalytics");nte=1e6;a(ste,"logAnalytics")});var iB={};ve(iB,{Headers:()=>co,appendHeader:()=>oE,mergeHeaders:()=>ub});function oE(e,t,r,n){if(e.append)e.append(t,r,n);else if(e.set){let s=e.get(t);if(s)if(n)r=(typeof s=="string"?s:s.join(", "))+", "+r;else if(typeof s=="string")r=[s,r];else{s.push(r);return}return e.set(t,r)}else e[t]=(e[t]?e[t]+", ":"")+r}function ub(e,t){(typeof e.set!="function"||typeof e.has!="function")&&(e=new co(e));for(let[r,n]of t)e.has(r)?r.toLowerCase()==="set-cookie"&&e.append?.(r,n,!0):e.set(r,n);return e}var co,p_=be(()=>{co=class extends Map{static{a(this,"Headers")}constructor(t){if(t)if(t[Symbol.iterator])super(t);else{super();for(let r in t)this.set(r,t[r])}else super()}set(t,r){return typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r),super.set(t.toLowerCase(),[t,r])}get(t){return typeof t!="string"&&(t=""+t),super.get(t.toLowerCase())?.[1]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase();if(!super.has(n))return super.set(n,[t,r])}append(t,r,n){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase(),i=super.get(s);if(i){let o=i[1];if(n)r=(typeof o=="string"?o:o.join(", "))+", "+r;else if(typeof o=="string")r=[o,r];else{o.push(r);return}}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}};a(oE,"appendHeader");a(ub,"mergeHeaders")});function uB(e){let t={openapi:ite,info:{title:"HarperDB HTTP REST interface",version:lB.packageJson.version},paths:{},components:{schemas:{},securitySchemes:{basicAuth:{type:"http",scheme:"basic"},bearerAuth:{type:"http",scheme:"bearer",bearerFormat:"JWT"}}}},r=[{basicAuth:[],bearerAuth:[]}];for(let[,n]of e){if(!n.path||n.Resource.isError)continue;let{path:s}=n,i=s.split("/").slice(-1),{attributes:o,primaryKey:c,prototype:l}=n.Resource;if(c=c??"id",!c)continue;let u={},f=[];if(o)for(let{type:A,name:O,elements:v,relationship:F,definition:G}of o){if(F)A==="array"?u[O]={type:"array",items:{$ref:la+v.type}}:u[O]={$ref:la+A};else{let Y=G??v?.definition;if(Y){if(!t.components.schemas[Y.type]){let te={};Y.properties.forEach(se=>{te[se.name]=new hb(db[se.type],se.type)}),t.components.schemas[Y.type]=new cB(te)}A==="array"?u[O]={type:"array",items:{$ref:la+Y.type}}:u[O]={$ref:la+Y.type}}else A==="array"?v.type==="Any"||v.type=="ID"?u[O]={type:"array",items:{format:v.type}}:u[O]={type:"array",items:new hb(db[v.type],v.type)}:A==="Any"||A=="ID"?u[O]={format:A}:u[O]=new hb(db[A],A)}f.push(new pb(O,"query",u[O]))}let d=Object.keys(u),h=new pb(c,"path",{format:"ID"});h.required=!0,h.description="primary key of record";let _=new pb("property","path",{enum:d});_.required=!0,t.components.schemas[i]=new cB(u);let p=l.post!==Resource.prototype.post||l.update,S=typeof l.put=="function",g=typeof l.get=="function",R=typeof l.delete=="function",E="/"+s+"/";p&&(t.paths[E]={},t.paths[E].post=new ote(i,r,"create a new record auto-assigning a primary key")),g&&(t.paths[E]||(t.paths[E]={}),t.paths[E].get=new fb(f,r,{200:new _b({$ref:la+i})},"search for records by the specified property name and value pairs")),R&&(t.paths[E]||(t.paths[E]={}),t.paths[E].delete=new aB(f,r,"delete all the records that match the provided query",{204:new oB})),E="/"+s+"/{"+c+"}",g&&(t.paths[E]={},t.paths[E].get=new fb([h],r,{200:new _b({$ref:la+i})},"retrieve a record by its primary key")),S&&(t.paths[E]||(t.paths[E]={}),t.paths[E].put=new ate([h],r,i,"create or update the record with the URL path that maps to the record's primary key")),R&&(t.paths[E]||(t.paths[E]={}),t.paths[E].delete=new aB([h],r,"delete a record with the given primary key",{204:new oB})),g&&_.schema.enum.length>0&&(E="/"+s+"/{"+c+"}.{property}",t.paths[E]={},t.paths[E].get=new fb([h,_],r,{200:new _b({enum:d})},"used to retrieve the specified property of the specified record"))}return t}function ote(e,t,r){this.description=r,this.requestBody={content:{"application/json":{schema:{$ref:la+e}}}},this.security=t,this.responses={200:{description:mb,headers:{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}},content:{"application/json":{schema:{type:"string",format:"ID"}}}}}}function fb(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function _b(e){this.description=mb,this.content={"application/json":{schema:e}}}function oB(){this.description="successfully processed request, no content returned to client"}function ate(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:la+r}}}},this.responses={200:{description:mb}}}function aB(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function cB(e){this.type="object",this.properties=e}function hb(e,t){this.type=e,this.format=t}function pb(e,t,r){this.name=e,this.in=t,this.schema=r}var lB,ite,db,la,mb,dB=be(()=>{lB=M(Et()),ite="3.0.3",db={Int:"integer",Float:"number",Long:"integer",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer",array:"array"},la="#/components/schemas/",mb="successful operation";a(uB,"generateJsonApi");a(ote,"Post");a(fb,"Get");a(_b,"Response200");a(oB,"Response204");a(ate,"Put");a(aB,"Delete");a(cB,"ResourceSchema");a(hb,"Type");a(pb,"Parameter")});var cE={};ve(cE,{parseHeaderValue:()=>gb,start:()=>ute});async function lte(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream",s=n?"CONNECT":e.method;e.search&&Fp(e);let i=new co;try{e.responseHeaders=i;let o=e.url.slice(1),c,l;if(o!==fB){let g=aE.getMatch(o,n?"sse":"rest");if(!g)return t(e);e.handlerPath=g.path,c=new nc(g.relativeURL),c.async=!0,l=g.Resource}if(l?.isCaching){let g=r["cache-control"];if(g){let R=gb(g);for(let E of R)switch(E.name){case"max-age":e.expiresAt=E.value*1e3+Date.now();break;case"only-if-cached":e.onlyIfCached=!0;break;case"no-cache":e.noCache=!0;break;case"no-store":e.noCacheStore=!0;break;case"stale-if-error":e.staleIfError=!0;break;case"must-revalidate":e.mustRevalidate=!0;break}}}let u=r["x-replicate-to"];if(u){let g=gb(u).map(R=>(R.next?.name==="confirm"&&R.next.value>=0&&(e.replicatedConfirmation=+R.next.value),R.name));e.replicateTo=g.length===1&&+g[0]>=0?+g[0]:g[0]==="*"?void 0:g}r["x-replicate-from"]==="none"&&(e.replicateFrom=!1);let d=await bt(e,()=>{if(r["content-length"]||r["transfer-encoding"])try{e.data=Qi(r["content-type"],!0)(e.body,e.headers)}catch(g){throw new mu.ClientError(g,400)}if(e.authorize=!0,o===fB&&s==="GET"){if(e?.user?.role?.permission?.super_user)return uB(aE);throw new mu.ServerError("Forbidden",403)}switch(s){case"GET":case"HEAD":return l.get(c,e);case"POST":return l.post(c,e.data,e);case"PUT":return l.put(c,e.data,e);case"DELETE":return l.delete(c,e);case"PATCH":return l.patch(c,e.data,e);case"OPTIONS":i.setIfNone("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return l.connect(c,null,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return l.query(c,e.data,e);case"COPY":return l.copy(c,r.destination,e);case"MOVE":return l.move(c,r.destination,e);case"BREW":throw new mu.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new mu.ServerError(`Method ${s} is not recognized`,501)}}),h=200,_;if(d==null)h=s==="GET"||s==="HEAD"?404:204,Eb.lastModified&&e.lastModified&&i.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(d.status>0&&d.headers){let g=ub(d.headers,i);return d.headers!==g&&(d.headers=g),d.data!==void 0&&(d.body=pf(d.data,e,d)),d}else if(_=e.lastModified){cte[0]=_;let g=String.fromCharCode(34,(Cr[0]&63)+62,(Cr[0]>>6)+(Cr[1]<<2&63)+62,(Cr[1]>>4)+(Cr[2]<<4&63)+62,(Cr[2]>>2)+62,(Cr[3]&63)+62,(Cr[3]>>6)+(Cr[4]<<2&63)+62,(Cr[4]>>4)+(Cr[5]<<4&63)+62,(Cr[5]>>2)+62,(Cr[6]&63)+62,(Cr[6]>>6)+(Cr[7]<<2&63)+62,34),R=r["if-none-match"];R&&g==R?(d?.onDone&&d.onDone(),h=304,d=void 0):i.setIfNone("ETag",g),Eb.lastModified&&i.setIfNone("Last-Modified",new Date(_).toUTCString())}e.createdResource&&(h=201),e.newLocation&&i.setIfNone("Location",e.newLocation);let p={status:h,headers:i,body:void 0},S=d?.wasLoadedFromSource?.();return S!==void 0&&(p.wasCacheMiss=S,!S&&_&&i.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||_))/1e3))),d!==void 0&&(p.body=pf(d,e,p),s==="HEAD"&&(p.body=void 0)),p}catch(o){o.statusCode?o.statusCode===500?Ci.warn(o):Ci.info(o):Ci.error(o),o.statusCode===405&&(o.method&&(o.message+=` to handle HTTP method ${o.method.toUpperCase()||""}`),o.allow&&(o.allow.push("trace","head","options"),i.setIfNone("Allow",o.allow.map(l=>l.toUpperCase()).join(", "))));let c={status:o.statusCode||500,headers:i,body:void 0};return c.body=pf(o.contentType?o:o.toString(),e,c),c}}function ute(e){Eb=e,!_B&&(_B=!0,aE=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return lte(t,r)},e),e.webSocket!==!1&&e.server.ws(async(t,r,n)=>{m_++;let s=new Pn;hB||(hB=!0,__(l=>{m_>0&&l.push({metric:"ws-connections",connections:m_,byThread:!0})}));let i;t.on("error",l=>{i=!0,Ci.warn(l)});let o;t.on("message",a(function(u){o||(o=Qi(r.requestedContentType??r.headers.asObject["content-type"],!1));let f=o(u);nr(u.length,"bytes-received",r.handlerPath,"message","ws"),s.push(f)},"message"));let c;t.on("close",()=>{m_--,Yn(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()});try{await n;let l=r.url.slice(1),u=aE.getMatch(l,"ws");if(Yn(!!u,"connection","ws","connect"),u){r.handlerPath=u.path,nr(p=>({count:p.count,total:m_}),"connections",r.handlerPath,"connect","ws"),r.authorize=!0;let f=new nc(u.relativeURL),d=u.Resource;c=(await bt(r,()=>d.connect(f,s,r)))[Symbol.asyncIterator]();let _;for(;!(_=await c.next()).done;){let p=await Zo(_.value,r);t.send(p),nr(p.length,"bytes-sent",r.handlerPath,"message","ws")}}else return t.close(1011,`No resource was found to handle ${r.pathname}`)}catch(l){l.statusCode?l.statusCode===500?Ci.warn(l):Ci.info(l):Ci.error(l),t.close(dte[l.statusCode]||1011,l.toString())}t.close()},e))}function gb(e){return e.trim().split(",").map(t=>{let r,n=t.trim().split(";"),s;for(;s=n.pop();)if(s.includes("=")){let[i,o]=s.trim().split("=");i=i.trim(),o&&(o=o.trim()),r={name:i.toLowerCase(),value:o,next:r}}else r={name:s.toLowerCase(),next:r};return r})}var Ci,mu,Cr,cte,Eb,fB,_B,aE,hB,m_,dte,pB=be(()=>{ji();Ii();Ci=M(j()),mu=M(he());lf();Fl();rc();p_();dB();lf();Cr=new Uint8Array(8),cte=new Float64Array(Cr.buffer,0,1),Eb={},fB="openapi";a(lte,"http");m_=0;a(ute,"start");dte={401:3e3,403:3003};a(gb,"parseHeaderValue")});var Sb=I((xNe,EB)=>{var{recordAction:lE,recordActionBinary:mB}=(Ii(),D(h_)),fte=require("fastify-plugin"),_te=200;EB.exports=fte(function(e,t,r){e.addHook("onResponse",async(n,s)=>{let i=s.elapsedTime}),e.addHook("onSend",async(n,s,i)=>{let o=s.elapsedTime,c=performance.now(),l=s.request.routeOptions,u,f,d;l.config?.isOperation?(u=n.body?.operation,f="operation"):(u=l.url,f="fastify-route",d=l.method),lE(o,"duration",u,d,f),mB(s.raw.statusCode<400,"success",u,d,f),mB(1,"response_"+s.raw.statusCode,u,d,f);let h=_te;i?.pipe?(i.on("data",g=>{h+=g.length}),i.on("end",()=>{lE(performance.now()-c,"transfer",u,d,f),lE(h,"bytes-sent",u,d,f)})):(h+=i?.length||0,lE(h,"bytes-sent",u,d,f));let _=o.toFixed(3),p=s.getHeader("Server-Timing"),S=`db;dur=${_}`;s.header("Server-Timing",p?`${p}, ${S}`:S)}),r()},{name:"hdb-request-time"})});var SB=I((BNe,gB)=>{var hte=dt(),pte={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};gB.exports=function(e){return hte.validateObject(e,pte)}});var uE=I((HNe,TB)=>{"use strict";var mte=(H(),D(q)).OPERATIONS_ENUM,Tb=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=mte.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};TB.exports=Tb});var S_={};ve(S_,{createTokens:()=>gte,getJWTRSAKeys:()=>pE,refreshOperationToken:()=>Ste,validateOperationToken:()=>yb,validateRefreshToken:()=>mE});async function pE(){if(dE)return dE;try{let e=E_.default.join(g_.default.getHdbBasePath(),jT),t=await fE.default.readFile(E_.default.join(e,Yd.JWT_PASSPHRASE_NAME),"utf8"),r=await fE.default.readFile(E_.default.join(e,Yd.JWT_PRIVATE_KEY_NAME),"utf8");return dE={publicKey:await fE.default.readFile(E_.default.join(e,Yd.JWT_PUBLIC_KEY_NAME),"utf8"),privateKey:r,passphrase:t},dE}catch(e){throw hE.default.error(e),new Vs.ClientError(gu.NO_ENCRYPTION_KEYS,Eu.INTERNAL_SERVER_ERROR)}}async function gte(e){let t=(0,Ab.validateBySchema)(e,Pi.default.object({username:Pi.default.string().optional(),password:Pi.default.string().optional(),role:Pi.default.string().optional(),expires_in:Pi.default.alternatives(Pi.default.string(),Pi.default.number()).optional()}));if(t)throw new Vs.ClientError(t.message);let r;try{let d=e.bypass_auth!==!0;!e.username&&!e.password&&(e.username=e.hdb_user?.username,d=!1),r=await(0,Rb.findAndValidateUser)(e.username,e.password,d)}catch(d){throw hE.default.error(d),new Vs.ClientError(gu.INVALID_CREDENTIALS,Eu.UNAUTHORIZED)}if(!r)throw new Vs.ClientError(gu.INVALID_CREDENTIALS,Eu.UNAUTHORIZED);let n=!1,s=!1;r.role?.permission&&(n=r.role.permission.super_user===!0,s=r.role.permission.cluster_user===!0);let i={username:e.username,super_user:n,cluster_user:s};e.role&&(i.role=e.role);let o=await pE(),c=await Su.default.sign(i,{key:o.privateKey,passphrase:o.passphrase},{expiresIn:e.expires_in??OB,algorithm:_E,subject:"operation"}),l=await Su.default.sign(i,{key:o.privateKey,passphrase:o.passphrase},{expiresIn:Ete,algorithm:_E,subject:"refresh"}),u=BR(l,"sha256");if((await(0,AB.update)(new RB.default(Kd,Hl.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]))).skipped_hashes.length>0)throw new Vs.ClientError(gu.REFRESH_TOKEN_SAVE_FAILED,Eu.INTERNAL_SERVER_ERROR);return yB.default.signalUserChange(new bB.UserEventMsg(process.pid)),{operation_token:c,refresh_token:l}}async function Ste(e){let t=(0,Ab.validateBySchema)(e,Pi.default.object({refresh_token:Pi.default.string().required()}).required());if(t)throw new Vs.ClientError(t.message);let{refresh_token:r}=e;await mE(r);let n=await pE(),s=await Su.default.decode(r);return{operation_token:await Su.default.sign({username:s.username,super_user:s.super_user,cluster_user:s.cluster_user},{key:n.privateKey,passphrase:n.passphrase},{expiresIn:OB,algorithm:_E,subject:"operation"})}}async function yb(e){return NB(e,"operation")}async function mE(e){return NB(e,"refresh")}async function NB(e,t){try{let r=await pE(),n=await Su.default.verify(e,r.publicKey,{algorithms:_E,subject:t});if(n.role)throw new Error("Invalid token");let s=await(0,Rb.findAndValidateUser)(n.username,void 0,!1);if(t==="refresh"&&!HR(s.refresh_token,e))throw new Error("Invalid token");return s}catch(r){throw hE.default.warn(r),r?.name==="TokenExpiredError"?new Vs.ClientError(gu.TOKEN_EXPIRED,Eu.FORBIDDEN):new Vs.ClientError(gu.INVALID_TOKEN,Eu.UNAUTHORIZED)}}var Su,fE,E_,Pi,Ab,Vs,hE,Rb,AB,RB,yB,bB,g_,Eu,gu,OB,Ete,_E,dE,Tu=be(()=>{Su=M(require("jsonwebtoken")),fE=M(require("fs-extra")),E_=M(require("node:path")),Pi=M(require("joi")),Ab=M(dt());H();Vs=M(he()),hE=M(j());Rm();Rb=M(Gn()),AB=M(hn()),RB=M(uE()),yB=M(io()),bB=M(Gs()),g_=M(ce()),{HTTP_STATUS_CODES:Eu,AUTHENTICATION_ERROR_MSGS:gu}=Vs.hdb_errors;g_.default.initSync();OB=g_.default.get(B.AUTHENTICATION_OPERATIONTOKENTIMEOUT)||"1d",Ete=g_.default.get(B.AUTHENTICATION_REFRESHTOKENTIMEOUT)||"30d",_E="RS256";a(pE,"getJWTRSAKeys");a(gte,"createTokens");a(Ste,"refreshOperationToken");a(yb,"validateOperationToken");a(mE,"validateRefreshToken");a(NB,"validateToken")});var bb=I(($Ne,CB)=>{"use strict";var Tte=SB(),Au=require("passport"),Ate=require("passport-local").Strategy,Rte=require("passport-http").BasicStrategy,yte=require("util"),bte=Gn(),IB=yte.callbackify(bte.findAndValidateUser),qNe=Cn(),Ote=(H(),D(q)),wB=(Tu(),D(S_));Au.use(new Ate(function(e,t,r){IB(e,t,r)}));Au.use(new Rte(function(e,t,r){IB(e,t,r)}));Au.serializeUser(function(e,t){t(null,e)});Au.deserializeUser(function(e,t){t(null,e)});function Nte(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":Au.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===Ote.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?wB.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):wB.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Au.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(Nte,"authorize");function wte(e,t){let r=Tte(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(wte,"checkPermissions");CB.exports={authorize:Nte,checkPermissions:wte}});var EE=I((KNe,PB)=>{"use strict";var Ite=Hn();PB.exports={writeTransaction:Cte};function Cte(e,t,r){return Ite.writeTransaction(e,t,r)}a(Cte,"writeTransaction")});var vB=I((zNe,MB)=>{"use strict";var Pte=$r(),Dte=Hs(),DB=j(),Lte=hn(),WNe=EE(),Mte=require("clone"),Nb=require("alasql"),vte=hm(),LB=require("util"),Ute=LB.promisify(Dte.getTableSchema),xte=LB.promisify(Pte.search),Bte=(H(),D(q)),Ob=oe();vte(Nb);MB.exports={update:kte};var Hte="There was a problem performing this update. Please check the logs and try again.";async function kte({statement:e,hdb_user:t}){let r=await Ute(e.table.databaseid,e.table.tableid),n=Fte(e.columns);Ob.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=Mte(s),c=Ob.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,u=Nb.parse(l).statements[0],f=await xte(u),d=Gte(n,f);return qte(o,d,t)}a(kte,"update");function Fte(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=Nb.compile(`SELECT ${r.expression.toString()} AS [${Bte.FUNC_VAL}] FROM ?`)}),t}catch(t){throw DB.error(t),new Error(Hte)}}a(Fte,"createUpdateRecord");function Gte(e,t){return Ob.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(Gte,"buildUpdateRecords");async function qte(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await Lte.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){DB.error(`Error delete new_attributes from update response: ${i}`)}return s}a(qte,"updateRecords")});var xB=I((XNe,UB)=>{var $te=require("alasql"),Vte=$r(),Kte=j(),Yte=Hn(),Ib=require("util"),wb=oe(),Wte=(H(),D(q)),zte=Hs(),jNe=EE(),JNe=hn(),Qte="record",jte="successfully deleted",Jte=Ib.callbackify(tre),Xte=Ib.promisify(Vte.search),Zte=Ib.promisify(zte.getTableSchema);UB.exports={convertDelete:Jte};function ere(e){return`${e.deleted_hashes.length} ${Qte}${e.deleted_hashes.length===1?"":"s"} ${jte}`}a(ere,"generateReturnMessage");async function tre({statement:e,hdb_user:t}){let r=await Zte(e.table.databaseid,e.table.tableid);wb.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=wb.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=$te.parse(o).statements[0],l={operation:Wte.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await Xte(c);let u=await Yte.deleteRecords(l);return wb.isEmptyOrZeroLength(u.message)&&(u.message=ere(u)),delete u.txn_time,u}catch(u){throw Kte.error(u),u.hdb_code?u.message:u}}a(tre,"convertDelete")});var GB=I((ewe,FB)=>{"use strict";var rre=no(),{hdb_errors:BB}=he(),{getDatabases:HB}=(Me(),D(st));FB.exports={checkSchemaExists:kB,checkSchemaTableExists:nre,schema_describe:rre};async function kB(e){if(!HB()[e])return BB.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(kB,"checkSchemaExists");async function nre(e,t){let r=await kB(e);if(r)return r;if(!HB()[e][t])return BB.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(nre,"checkSchemaTableExists")});var Mb=I((iwe,ZB)=>{"use strict";var{decode:sre}=require("msgpackr"),{isMainThread:rwe,parentPort:nwe,threadId:swe}=require("worker_threads"),TE=pr(),Ru=Nt(),Db=(H(),D(q)),Wr=j(),Pb=ce(),ire=(H(),D(q)),{onMessageByType:ore}=rt(),KB=ro(),{recordAction:qB,recordActionBinary:are}=(Ii(),D(h_)),{publishToStream:cre}=TE,{ConsumerEvents:$B}=require("nats"),lre=$r(),{promisify:ure}=require("util"),{decodeBlobsWithWrites:dre}=(cs(),D(bE)),YB=ure(setTimeout),AE=1e4,RE,SE,fre,_re,WB,T_=new Map,yu=new Map;ZB.exports={initialize:zB,ingestConsumer:Lb,setSubscription:hre,setIgnoreOrigin:Ere,getDatabaseSubscriptions:mre,updateConsumer:QB};async function zB(){ore(Db.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await QB(n)}),WB=!0,Wr.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await TE.getNATSReferences();RE=e,SE=e.info.server_name,fre=t,_re=r}a(zB,"initialize");async function QB(e){if(e.status==="start"){let{js:t,jsm:r}=await jB(e.node_domain_name);Lb(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=T_.get(e.stream_name+e.node_domain_name);t&&(Wr.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),T_.set(e.stream_name+e.node_domain_name,"close")),yu.get(e.node_domain_name)==="failed"&&yu.set(e.node_domain_name,"close")}}a(QB,"updateConsumer");var yE=new Map;function hre(e,t,r){let n=yE.get(e);n||yE.set(e,n=new Map),n.set(t,r),WB||zB().then(pre)}a(hre,"setSubscription");async function pre(){let e=await lre.searchByValue({database:"system",table:"hdb_nodes",search_attribute:"name",search_value:"*"});for await(let t of e){let r=t.name+Ru.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions||[])if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await jB(r),!n))break;let{schema:o,table:c}=i,l=KB.createNatsTableStreamName(o,c);Lb(l,n,s,r)}}}a(pre,"accessConsumers");async function jB(e){let t,r,n=1;for(;!r;)try{t=await RE.jetstream({domain:e}),r=await RE.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(yu.get(e)==="close")break;yu.set(e,"failed"),n%10===1&&Wr.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<AE?n++*100:AE;await YB(i)}return{js:t,jsm:r}}a(jB,"connectToRemoteJS");function mre(){return yE}a(mre,"getDatabaseSubscriptions");var JB;function Ere(e){JB=e}a(Ere,"setIgnoreOrigin");var XB=100,VB=new Array(XB),gE=0;async function Lb(e,t,r,n){let{connection:s}=await TE.getNATSReferences();RE=s,SE=s.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,SE),Wr.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(u){if(yu.get(n)==="close")break;o%10===1&&Wr.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",u.message),u.code==="404"&&(Wr.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await TE.createConsumer(r,e,SE,new Date(Date.now()).toISOString()));let f=o++*100<AE?o++*100:AE;await YB(f)}let c=!1,l;for(;!c;){if(T_.get(e+n)==="close"||yu.get(n)==="close"){T_.delete(e+n),c=!0;continue}l=await i.consume({max_messages:Pb.get(Db.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),T_.set(e+n,l);let u=!1;(async()=>{for await(let f of await l.status())if(f.type===$B.ConsumerDeleted&&(await l.close(),c=!0),f.type===$B.HeartbeatsMissed){let d=f.data;Wr.trace(`${d} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),d===100&&(Wr.warn(`Restarting clustering ingest consumer due to missed heartbeat threshold being met, node: ${n} stream: ${l.consumer.stream}`),l.stop(),u=!0)}})();try{for await(let f of l)await VB[gE],VB[gE]=gre(f).catch(d=>{Wr.error(d)}),++gE>=XB&&(gE=0)}catch(f){f.message==="consumer deleted"?(Wr.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):Wr.error("Error consuming clustering ingest, restarting consumer",f)}}}a(Lb,"ingestConsumer");async function gre(e){let t;await dre(()=>{t=sre(e.data)}),qB(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),Wr.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=Pb.get(Db.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Ru.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Ru.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(Ru.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!JB),are(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(Ru.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:l,table:u,records:f,hash_values:d,__origin:h,expiresAt:_}=t;Wr.trace("processing message:",o,c,u,(f?"records: "+f.map(v=>v?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),Wr.trace(`messageProcessor nats msg id: ${e.headers.get(Ru.MSG_HEADERS.NATS_MSG_ID)}`);let p;f||(f=d);let S=new Promise(v=>p=v),{timestamp:g,user:R,node_name:E}=h||{},A=yE.get(c)?.get(u);if(!A)throw new Error(`Missing table for replication message: ${u}`);if(o==="define_schema")t.type=o,t.onCommit=p,A.send(t);else if(f.length===1&&!l)A.send({type:Cb(o),value:f[0],id:d?.[0],expiresAt:_,timestamp:g,table:u,onCommit:p,user:R,nodeName:E});else{let v=f.map((F,G)=>({type:Cb(o),value:F,expiresAt:_,id:d?.[G],table:u}));for(;l;)v.push({type:Cb(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;A.send({type:"transaction",writes:v,table:u,timestamp:g,onCommit:p,user:R,nodeName:E})}Pb.get(ire.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&cre(e.subject.split(".").slice(0,-1).join("."),KB.createNatsTableStreamName(c,u),e.headers,e.data),await S;let O=Date.now()-g;g&&qB(O,"replication-latency",e.subject,o,"ingest")}catch(o){Wr.error(o)}e.ack()}a(gre,"messageProcessor");function Cb(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(Cb,"convertOperation")});var pr=I((fwe,mH)=>{"use strict";var br=ce();br.initSync();var Sre=require("fs-extra"),Tre=require("semver"),y_=require("path"),{monotonicFactory:Are}=require("ulidx"),tH=Are(),Rre=require("util"),rH=require("child_process"),yre=Rre.promisify(rH.exec),bre=rH.spawn,Pr=Nt(),$e=(H(),D(q)),{packageJson:Ore,PACKAGE_ROOT:Nre}=Et(),OE=oe(),Ks=j(),NE=ro(),wre=EE(),A_=It(),{broadcast:Ire,onMessageByType:Cre,getWorkerIndex:Pre}=rt(),{isMainThread:nH}=require("worker_threads"),{Encoder:Dre,decode:Bb}=require("msgpackr"),sH=new Dre,{isEmpty:kc}=OE,iH=Gn(),awe=48*36e11;nH&&Cre($e.ITC_EVENT_TYPES.RESTART,()=>{zr=void 0,Hc=void 0});var{connect:Lre,StorageType:Mre,RetentionPolicy:vre,AckPolicy:Hb,DeliverPolicy:kb,DiscardPolicy:Ure,NatsConnection:cwe,JetStreamManager:lwe,JetStreamClient:uwe,StringCodec:dwe,JSONCodec:xre,createInbox:Fb,headers:Bre,ErrorCode:eH}=require("nats"),{recordAction:Hre}=(Ii(),D(h_)),{encodeBlobsAsBuffers:kre}=(cs(),D(bE)),oH=xre(),Fre="clustering",Gre=Ore.engines[Pr.NATS_SERVER_NAME],qre=y_.join(Nre,"dependencies"),xb=y_.join(qre,`${process.platform}-${process.arch}`,Pr.NATS_BINARY_NAME),vb,Ub,R_,xc,Bc;mH.exports={runCommand:aH,checkNATSServerInstalled:$re,createConnection:Gb,getConnection:b_,getJetStreamManager:O_,getJetStream:lH,getNATSReferences:Di,getServerList:Kre,createLocalStream:qb,listStreams:uH,deleteLocalStream:Yre,getServerConfig:bu,listRemoteStreams:Wre,viewStream:zre,viewStreamIterator:Qre,publishToStream:jre,request:Zre,reloadNATS:$b,reloadNATSHub:ene,reloadNATSLeaf:tne,extractServerName:Xre,requestErrorHandler:rne,createLocalTableStream:hH,createTableStreams:ine,purgeTableStream:pH,purgeSchemaTableStreams:one,getStreamInfo:ane,updateLocalStreams:lne,closeConnection:Vre,getJsmServerName:wE,addNatsMsgHeader:dH,clearClientCache:cH,updateRemoteConsumer:nne,createConsumer:fH,updateConsumerIterator:sne};async function aH(e,t=void 0){let{stdout:r,stderr:n}=await yre(e,{cwd:t});if(n)throw new Error(n.replace(`
21
21
  `,""));return r.replace(`
22
- `,"")}a(FB,"runCommand");async function Tre(){try{await jte.access(yb)}catch{return!1}let e=await FB(`${yb} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return Jte.eq(t,gre)}a(Tre,"checkNATSServerInstalled");async function Ib(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await HB.getClusterUser();if(kc(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}Ws.trace("create nats connection called");let i=await lre({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:Nr.get(Ve.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Nr.get(Ve.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Nr.get(Ve.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),Ws.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&Ws.error("Error with Nats client connection, connection closed",o),i===jr&&GB()}),i}a(Ib,"createConnection");function GB(){jr=void 0,xc=void 0,Bc=void 0,Hc=void 0}a(GB,"clearClientCache");async function Are(){jr&&(await jr.drain(),jr=void 0,xc=void 0,Bc=void 0,Hc=void 0)}a(Are,"closeConnection");var jr,Hc;async function m_(){return Hc||(Hc=Ib(Nr.get(Ve.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),jr=await Hc),jr||Hc}a(m_,"getConnection");async function g_(){if(xc)return xc;kc(jr)&&await m_();let{domain:e}=Eu(Ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(kc(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return xc=await jr.jetstreamManager({domain:e,timeout:6e4}),xc}a(g_,"getJetStreamManager");async function qB(){if(Bc)return Bc;kc(jr)&&await m_();let{domain:e}=Eu(Ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(kc(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Bc=jr.jetstream({domain:e,timeout:6e4}),Bc}a(qB,"getJetStream");async function Di(){let e=jr||await m_(),t=xc||await g_(),r=Bc||await qB();return{connection:e,jsm:t,js:r}}a(Di,"getNATSReferences");async function Rre(e){let t=Nr.get(Ve.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await HB.getClusterUser(),s=await Ib(t,r,n),i=wb(),o=s.subscribe(i),c=[],l,u=(async()=>{for await(let f of o){let d=kB.decode(f.data);d.response_time=Date.now()-l,c.push(d)}})();return l=Date.now(),await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await s.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await s.flush(),await _m.async_set_timeout(e),await o.drain(),await s.close(),await u,c}a(Rre,"getServerList");async function Cb(e,t){let{jsm:r}=await Di(),n=Nr.get(Ve.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Nr.get(Ve.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=Nr.get(Ve.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:ure.File,retention:dre.Limits,subjects:t,discard:fre.Old,max_msgs:s,max_bytes:i,max_age:n})}a(Cb,"createLocalStream");async function $B(){let{jsm:e}=await Di(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a($B,"listStreams");async function yre(e){let{jsm:t}=await Di();await t.streams.delete(e)}a(yre,"deleteLocalStream");async function bre(e){let{connection:t}=await Di(),r=[],n=wb(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(kB.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(bre,"listRemoteStreams");async function Ore(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Di(),i=vB(),o={durable_name:i,ack_policy:Ob.Explicit};t&&(o.deliver_policy=Nb.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let u=[];for await(let f of l){let d=bb(f.data),h={nats_timestamp:f.info.timestampNanos,nats_sequence:f.info.streamSequence,entry:d};if(f.headers&&(h.origin=f.headers.get(Mr.MSG_HEADERS.ORIGIN)),u.push(h),f.ack(),f.info.pending===0)break}return await c.delete(),u}a(Ore,"viewStream");async function*Nre(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Di(),i=vB(),o={durable_name:i,ack_policy:Ob.Explicit};t&&(o.deliver_policy=Nb.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let u of l){let f=bb(u.data);f[0]||(f=[f]);for(let d of f){let h={nats_timestamp:u.info.timestampNanos,nats_sequence:u.info.streamSequence,entry:d};u.headers&&(h.origin=u.headers.get(Mr.MSG_HEADERS.ORIGIN)),yield h}if(u.ack(),u.info.pending===0)break}await c.delete()}a(Nre,"viewStreamIterator");async function wre(e,t,r,n){Ws.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=VB(n,r);let{js:s}=await Di(),i=await pm(),o=`${e}.${i}`,c=await Ere(()=>n instanceof Uint8Array?n:BB.encode(n));try{Ws.trace(`publishToStream publishing to subject: ${o}`),pre(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(o,c,{headers:r})}catch(l){if(l.code&&l.code.toString()==="503")return YB(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){Ws.trace(`publishToStream creating stream: ${t}`);let f=o.split(".");f[2]="*",await Cb(t,[o]),await s.publish(o,c,{headers:r})}else throw l}});throw l}}a(wre,"publishToStream");function VB(e,t){t===void 0&&(t=hre());let r=Nr.get(Ve.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Mr.MSG_HEADERS.ORIGIN)&&r&&t.append(Mr.MSG_HEADERS.ORIGIN,r),t}a(VB,"addNatsMsgHeader");function Eu(e){e=e.toLowerCase();let t=E_.join(Nr.get(Ve.CONFIG_PARAMS.ROOTPATH),mre);if(e===Ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return kc(Rb)&&(Rb={port:h_.getConfigFromFile(Ve.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:h_.getConfigFromFile(Ve.CONFIG_PARAMS.CLUSTERING_NODENAME)+Mr.SERVER_SUFFIX.HUB,config_file:Mr.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:E_.join(t,Mr.PID_FILES.HUB),hdb_nats_path:t}),Rb;if(e===Ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return kc(Ab)&&(Ab={port:h_.getConfigFromFile(Ve.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:h_.getConfigFromFile(Ve.CONFIG_PARAMS.CLUSTERING_NODENAME)+Mr.SERVER_SUFFIX.LEAF,config_file:Mr.NATS_CONFIG_FILES.LEAF_SERVER,domain:h_.getConfigFromFile(Ve.CONFIG_PARAMS.CLUSTERING_NODENAME)+Mr.SERVER_SUFFIX.LEAF,pid_file_path:E_.join(t,Mr.PID_FILES.LEAF),hdb_nats_path:t}),Ab;Ws.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Eu,"getServerConfig");async function KB(e,t,r,n){try{await e.consumers.add(t,{ack_policy:Ob.Explicit,durable_name:r,deliver_policy:Nb.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(KB,"createConsumer");async function Ire(e,t,r){await e.consumers.delete(t,r)}a(Ire,"removeConsumer");function Cre(e){return e.split(".")[1]}a(Cre,"extractServerName");async function Pre(e,t,r=6e4,n=wb()){if(!_m.isObject(t))throw new Error("data param must be an object");let s=BB.encode(t),{connection:i}=await Di(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return bb(c.data)}a(Pre,"request");function Pb(e){return new Promise(async(t,r)=>{let n=tre(yb,["--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(Pb,"reloadNATS");async function Dre(){let{pid_file_path:e}=Eu(Ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await Pb(e)}a(Dre,"reloadNATSHub");async function Lre(){let{pid_file_path:e}=Eu(Ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await Pb(e)}a(Lre,"reloadNATSLeaf");function Mre(e,t,r){let n;switch(e.code){case MB.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case MB.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(Mre,"requestErrorHandler");async function vre(e,t){let r=t+Mr.SERVER_SUFFIX.LEAF,{connection:n}=await Di(),{jsm:s}=await qre(r),{schema:i,table:o}=e,c=hm.createNatsTableStreamName(i,o),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await YB(async()=>{if(e.subscribe===!0)await KB(s,c,n.info.server_name,l);else try{await Ire(s,c,n.info.server_name)}catch(u){Ws.trace(u)}})}a(vre,"updateRemoteConsumer");async function Ure(e,t,r,n){let s=hm.createNatsTableStreamName(e,t),i=r+Mr.SERVER_SUFFIX.LEAF,o={type:Ve.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!xB&&are()<Nr.get(Ve.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=Tb();await c(o)}await ire(o),n==="stop"&&await _m.async_set_timeout(1e3)}a(Ure,"updateConsumerIterator");function YB(e){return sre.writeTransaction(Ve.SYSTEM_SCHEMA_NAME,Ve.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(YB,"exclusiveLock");async function WB(e,t){let r=hm.createNatsTableStreamName(e,t),n=await pm(),s=kre(e,t,n);await Cb(r,[s])}a(WB,"createLocalTableStream");async function xre(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await WB(n,s)}}a(xre,"createTableStreams");async function zB(e,t,r=void 0){if(Nr.get(Ve.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=hm.createNatsTableStreamName(e,t),{domain:s}=Eu(Ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await m_()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")Ws.warn(n);else throw n}}a(zB,"purgeTableStream");async function Bre(e,t){if(Nr.get(Ve.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await zB(e,t[r])}a(Bre,"purgeSchemaTableStreams");async function Hre(e){return(await g_()).streams.info(e)}a(Hre,"getStreamInfo");function kre(e,t,r){return`${Mr.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(kre,"createSubjectName");async function pm(){if(p_)return p_;if(p_=(await g_())?.nc?.info?.server_name,p_===void 0)throw new Error("Unable to get jetstream manager server name");return p_}a(pm,"getJsmServerName");async function Fre(){let e=await g_(),t=await pm(),r=await $B();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=Gre(n),c=i.split(".");if(c[c.length-1]===t&&!o||s.name==="__HARPERDB_WORK_QUEUE__")continue;let u=i.split(".");u[u.length-1]=t;let f=u.join(".");Ws.trace(`Updating stream subject name from: ${i} to: ${f}`),s.subjects[0]=f,await e.streams.update(s.name,s)}}a(Fre,"updateLocalStreams");function Gre(e){let{config:t}=e,r=!1,n=Nr.get(Ve.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Nr.get(Ve.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=Nr.get(Ve.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(Gre,"updateStreamLimits");async function qre(e){let t,r;try{t=await jr.jetstream({domain:e}),r=await jr.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw Ws.error("Unable to connect to:",e),n}return{js:t,jsm:r}}a(qre,"connectToRemoteJS")});function Db(e){let t=e.get(Em),r=t?(0,mu.unpack)(t):null;r||(r={remoteNameToId:{}});let n=Xe(),s=!1;r.nodeName=Xe();let i=r.remoteNameToId;if(i[n]!==0){let o=0,c;for(let l in i){let u=i[l];u===0?c=l:u>o&&(o=u)}if(c){o++,i[c]=o;let l=[Symbol.for("seq"),o];e.rootStore.dbisDb.transactionSync(()=>{e.rootStore.dbisDb.get(l)||e.rootStore.dbisDb.putSync(l,{seqId:T_(e)??1,nodes:[]})})}i[n]=0,e.putSync(Em,(0,mu.pack)(r))}return r}function S_(e){return Db(e).remoteNameToId}function JB(e,t){let r=Db(t),n=r.remoteNameToId,s=new Map,i=!1;for(let o in e){let c=e[o],l=n[o];if(l==null){let u=0;for(let f in n){let d=n[f];d>u&&(u=d)}l=u+1,n[o]=l,i=!0}s.set(c,l)}return i&&t.putSync(Em,(0,mu.pack)(r)),s}function mm(e,t){let r=Db(t),n=r.remoteNameToId,s=n[e];if(s==null){let i=0;for(let o in n){let c=n[o];c>i&&(i=c)}s=i+1,n[e]=s,t.putSync(Em,(0,mu.pack)(r))}return jB.trace?.("The remote node name map",e,n,s),s}var jB,mu,Em,Lb=be(()=>{jB=U(Qi());_s();mu=require("msgpackr"),Em=Symbol.for("remote-ids");a(Db,"getIdMappingRecord");a(S_,"exportIdMapping");a(JB,"remoteToLocalNodeId");a(mm,"getIdOfRemoteNode")});var Mb={};Be(Mb,{commits_awaiting_replication:()=>Su,getHDBNodeTable:()=>mr,getReplicationSharedStatus:()=>gm,iterateRoutes:()=>R_,shouldReplicateToNode:()=>A_,subscribeToNodeUpdates:()=>Tu});function mr(){return XB||(XB=ot({table:"hdb_nodes",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"},{attribute:"ca"},{attribute:"ca_info"},{attribute:"replicates"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]}))}function gm(e,t,r,n){return new Float64Array(e.getUserSharedBuffer(["replicated",t,r],new ArrayBuffer(32),n&&{callback:n}))}function Tu(e){mr().subscribe({}).then(async t=>{for await(let r of t){let n=r?.value?.name;rH.debug?.("adding node",n,"on node",Xe()," on process",process.pid),server.nodes=server.nodes.filter(s=>s.name!==n),r.type==="put"&&n!==Xe()&&(r.value?server.nodes.push(r.value):console.error("Invalid node update event",r)),(r.type==="put"||r.type==="delete")&&e(r.value,r.id)}})}function A_(e,t){return(e.replicates===!0||e.replicates?.sends)&&databases[t]&&mr().primaryStore.get(Xe())?.replicates||e.subscriptions?.some(r=>(r.database||r.schema)===t&&r.subscribe)}function $re(){Tu(e=>{pa({},(t,r)=>{let n=e.name,s=ZB.get(n);if(s||ZB.set(n,s=new Map),s.has(r))return;let i;for(let o in t)if(i=t[o].auditStore,i)break;if(i){let o=gm(i,r,n,()=>{let c=o[0],l=o.lastTime;for(let{txnTime:u,onConfirm:f}of Su.get(r)||[])u>l&&u<=c&&f();o.lastTime=c});o.lastTime=0,s.set(r,o)}})})}function*R_(e){for(let t of e.routes||[]){let r=t.url,n;if(typeof t=="string"?t.includes("://")?r=t:n=t:n=t.hostname??t.host,n&&!r){let s=gu.default.get(B.REPLICATION_SECUREPORT)??(!gu.default.get(B.REPLICATION_PORT)&&gu.default.get(B.OPERATIONSAPI_NETWORK_SECUREPORT)),i;(i=n.match(/:(\d+)$/)?.[1])?n=n.slice(0,-i[0].length-1):t.port?i=t.port:i=s||gu.default.get(B.REPLICATION_PORT)||gu.default.get(B.OPERATIONSAPI_NETWORK_PORT);let o=i?.lastIndexOf?.(":");o>0&&(i=+i.slice(o+1).replace(/[\[\]]/g,"")),r=(s?"wss://":"ws://")+n+":"+i}if(!r){eH.isMainThread&&console.error("Invalid route, must specify a url or host (with port)");continue}yield{replicates:!t.subscriptions,url:r,subscription:t.subscriptions,routes:t.routes,start_time:t.startTime}}}var eH,tH,gu,rH,XB,ZB,Su,Fc=be(()=>{De();_s();wp();eH=require("worker_threads"),tH=U(_e()),gu=U(ce());H();rH=U(Qi());server.nodes=[];a(mr,"getHDBNodeTable");a(gm,"getReplicationSharedStatus");a(Tu,"subscribeToNodeUpdates");a(A_,"shouldReplicateToNode");ZB=new Map;KP((e,t,r)=>{if(r>server.nodes.length)throw new tH.ClientError(`Cannot confirm replication to more nodes (${r}) than are in the network (${server.nodes.length})`);Su||(Su=new Map,$re());let n=Su.get(e);return n||(n=[],Su.set(e,n)),new Promise(s=>{let i=0;n.push({txnTime:t,onConfirm:a(()=>{++i===r&&s()},"onConfirm")})})});a($re,"startSubscriptionToReplications");a(R_,"iterateRoutes")});var oH={};Be(oH,{connectedToNode:()=>Gc,disconnectedFromNode:()=>yu,ensureNode:()=>ho,requestClusterStatus:()=>iH,startOnMainThread:()=>Ub});async function Ub(e){let t=0,r=Je();for(let i of Object.getOwnPropertyNames(r)){let o=r[i];for(let c in o){let l=o[c];if(l.auditStore){Sm.set(i,T_(l.auditStore));break}}}Li.whenThreadsStarted.then(async()=>{let i=[];for await(let o of r.system.hdb_nodes.search([]))i.push(o);for(let o of R_(e))try{let c=!o.subscriptions;if(c){let u=Xe();mr().primaryStore.get(u)===void 0&&await ho(u,{name:u,url:e.url??Ea(),replicates:!0})}let l=o.trusted!==!1;if(c&&o.replicates==null&&(o.replicates=!0),i.find(u=>u.url===o.url))continue;s(o)}catch(c){console.error(c)}Tu(s)});let n;function s(i,o=i?.name){let c=Xe()&&o===Xe()||Ea()&&i?.url===Ea();if(c){let d=!!i?.replicates;if(n!==void 0&&n!==d)for(let h of mr().search([]))h.replicates&&h.name!==o&&s(h,h.name);n=d}if(st.trace("Setting up node replication for",i),!i){for(let[d,h]of _o){let _;for(let[p,{worker:S,nodes:g}]of h){let T=g[0];if(T&&T.name==o){_=!0;for(let[m,{worker:A}]of h)h.delete(m),st.warn("Node was deleted, unsubscribing from node",o,m,d),A?.postMessage({type:"unsubscribe-from-node",node:o,database:m,url:d});break}}if(_){_o.get(d).iterator.remove(),_o.delete(d);return}}return}if(c)return;if(!i.url){st.info(`Node ${i.name} is missing url`);return}let l=_o.get(i.url);if(l&&l.iterator.remove(),!(i.replicates===!0||i.replicates?.sends)&&!i.subscriptions?.length&&!l)return;if(st.info(`Added node ${i.name} at ${i.url} for process ${Xe()}`),i.replicates&&i.subscriptions&&(i={...i,subscriptions:null}),i.name){for(let[d,h]of Au)if(i.url===h.url){Au.delete(d);break}Au.set(i.name,i)}let u=Je();if(l||(l=new Map,_o.set(i.url,l)),l.iterator=pa(e,(d,h,_)=>{_?f(h,!0):f(h,!1)}),i.subscriptions)for(let d of i.subscriptions){let h=d.database||d.schema;u[h]||(st.warn(`Database ${h} not found for node ${i.name}, making a subscription anyway`),f(h,!1))}function f(d,h){st.trace("Setting up replication for database",d,"on node",i.name);let _=l.get(d),p,S=[{replicateByDefault:h,...i}];Sm.has(d)&&(S.push({replicateByDefault:h,name:Xe(),start_time:Sm.get(d),end_time:Date.now(),replicates:!0}),Sm.delete(d));let g=A_(i,d),T=Li.workers.filter(m=>m.name==="http");if(_?(p=_.worker,_.nodes=S):g&&(t=t%T.length,p=T[t++],l.set(d,{worker:p,nodes:S,url:i.url}),p?.on("exit",()=>{l.get(d)?.worker===p&&(l.delete(d),f(d,h))})),g)setTimeout(()=>{let m={type:"subscribe-to-node",database:d,nodes:S};p?p.postMessage(m):Ru(m)},Vre);else{st.info("Node no longer should be used, unsubscribing from node",i.replicates,!!u[d],mr().primaryStore.get(Xe())?.replicates),mr().primaryStore.get(Xe())?.replicates||(n=!1);let m={type:"unsubscribe-from-node",database:d,url:i.url,name:i.name};p?p.postMessage(m):Am(m)}}a(f,"onDatabase")}a(s,"onNodeUpdate"),yu=a(function(i){try{st.info("Disconnected from node",i.name,i.url,"finished",!!i.finished);let o=Array.from(Au.keys()),c=o.sort(),l=c.indexOf(i.name||zs(i.url));if(l===-1){st.warn("Disconnected node not found in node map",i.name,o);return}let u=_o.get(i.url),f=u?.get(i.database);if(!f){st.warn("Disconnected node not found in replication map",i.database,u);return}if(f.connected=!1,i.finished)return;let d=f.nodes[0];if(!(d.replicates===!0||d.replicates?.sends||d.subscriptions?.length))return;let h=(l+1)%c.length;for(;l!==h;){let _=c[h],p=Au.get(_);u=_o.get(p.url);let S=u?.get(i.database);if(!S){h=(h+1)%c.length;continue}let{worker:g,nodes:T}=S,m=!1;for(let A of f.nodes){if(T.some(w=>w.name===A.name)){st.info(`Disconnected node is already failing over to ${_} for ${i.database}`);continue}T.push(A),m=!0}if(!m){st.info(`Disconnected node ${i.name} has no nodes to fail over to ${_}`);return}f.redirectingTo=S,st.info(`Failing over ${i.database} from ${i.name} to ${_}`),g?g.postMessage({type:"subscribe-to-node",database:i.database,nodes:T}):Ru({database:i.database,nodes:T});return}st.warn("Unable to find any other node to fail over to",i.name,i.url)}catch(o){st.error("Error failing over node",o)}},"disconnectedFromNode"),Gc=a(function(i){let o=_o.get(i.url),c=o?.get(i.database);if(!c){st.warn("Connected node not found in replication map, this may be because the node is being removed",i.database,o);return}if(c.connected=!0,c.latency=i.latency,c.redirectingTo){let{worker:l,nodes:u}=c.redirectingTo,f=u.find(d=>d.name===i.name);c.redirectingTo=null,f&&(u.splice(u.indexOf(f),1),l?l.postMessage({type:"subscribe-to-node",database:i.database,nodes:u}):Ru({database:i.database,nodes:u}))}},"connectedToNode"),(0,Li.onMessageByType)("disconnected-from-node",yu),(0,Li.onMessageByType)("connected-to-node",Gc),(0,Li.onMessageByType)("request-cluster-status",iH)}function iH(e,t){let r=[];for(let[n,s]of Au)try{let i=_o.get(s.url);st.info("Getting cluster status for",n,s.url,"has dbs",i?.size);let o=[];if(i){for(let[l,{worker:u,connected:f,nodes:d,latency:h}]of i)o.push({database:l,connected:f,latency:h,thread_id:u?.threadId,nodes:d.map(_=>_.name)});let c=(0,vb.cloneDeep)(s);c.database_sockets=o,delete c.ca,delete c.node_name,delete c.__updatedtime__,delete c.__createdtime__,r.push(c)}}catch(i){st.warn("Error getting cluster status for",s?.url,i)}return t?.postMessage({type:"cluster-status",connections:r}),{connections:r}}async function ho(e,t){let r=mr();e=e??zs(t.url),t.name=e;try{if(t.ca){let s=new sH.X509Certificate(t.ca);t.ca_info={issuer:s.issuer.replace(/\n/g," "),subject:s.subject.replace(/\n/g," "),subject_alt_name:s.subjectAltName,serial_number:s.serialNumber,valid_from:s.validFrom,valid_to:s.validTo}}}catch(s){st.error("Error parsing replication CA info for hdb_nodes table",s.message)}let n=r.primaryStore.get(e);if(st.debug(`Ensuring node ${e} at ${t.url}, existing record:`,n,"new record:",t),!n)await r.put(t);else{t.replicates&&!nH.default.get(B.CLUSTERING_ENABLED)&&(t.subscriptions=null);for(let s in t)if(n[s]!==t[s]&&s==="subscriptions"&&t[s]&&n[s]){let i=[],o=(0,vb.cloneDeep)(n[s]);for(let c of t[s]){let l=!1;for(let u of o)if((c.database??c.schema)===(u.database??u.schema)&&c.table===u.table){u.publish=c.publish,u.subscribe=c.subscribe,l=!0;break}l||i.push(c)}t.subscriptions=[...o,...i];break}st.info(`Updating node ${e} at ${t.url}`),await r.patch(t)}}var Li,Tm,st,vb,nH,sH,Vre,_o,yu,Gc,Au,Sm,y_=be(()=>{De();Li=U(rt());_s();Tm=require("worker_threads");Fc();st=U(j()),vb=require("lodash"),nH=U(ce());H();sH=require("crypto"),Vre=200,_o=new Map,Au=new Map,Sm=new Map;a(Ub,"startOnMainThread");a(iH,"requestClusterStatus");Tm.parentPort&&(yu=a(e=>{Tm.parentPort.postMessage({type:"disconnected-from-node",...e})},"disconnectedFromNode"),Gc=a(e=>{Tm.parentPort.postMessage({type:"connected-to-node",...e})},"connectedToNode"),(0,Li.onMessageByType)("subscribe-to-node",e=>{Ru(e)}),(0,Li.onMessageByType)("unsubscribe-from-node",e=>{Am(e)}));a(ho,"ensureNode")});var Js=P(CH=>{"use strict";var ir=require("path"),Tn=require("fs-extra"),bu=require("node-forge"),fH=require("net"),{generateKeyPair:Bb,X509Certificate:po,createPrivateKey:_H}=require("crypto"),Kre=require("util");Bb=Kre.promisify(Bb);var Tt=bu.pki,Qs=require("joi"),{v4:hH}=require("uuid"),{validateBySchema:Gb}=pt(),ct=j(),hs=ce(),ps=(H(),D(q)),{CONFIG_PARAMS:Ou}=ps,js=bR(),{ClientError:ga}=_e(),Rm=require("node:tls"),{relative:pH,join:Yre}=require("node:path"),{CERT_PREFERENCE_APP:Awe,CERTIFICATE_VALUES:aH}=js,Wre=ec(),Hb=wt(),{table:zre,getDatabases:Qre,databases:xb}=(De(),D(nt)),{getJWTRSAKeys:cH}=fu();Object.assign(CH,{generateKeys:Vb,updateConfigCert:yH,createCsr:nne,signCertificate:sne,setCertTable:Nu,loadCertificates:TH,reviewSelfSignedCert:Yb,createTLSSelector:OH,listCertificates:wH,addCertificate:une,removeCertificate:fne,createNatsCerts:ane,generateCertsKeys:one,getReplicationCert:O_,getReplicationCertAuth:rne,renewSelfSigned:cne,hostnamesFromCert:IH,getKey:_ne});var{urlToNodeName:EH,getThisNodeUrl:jre,getThisNodeName:bm,clearThisNodeName:Jre}=(_s(),D(Aa)),{readFileSync:Xre,watchFile:Zre,statSync:mH}=require("node:fs"),Rwe=ce(),{getTicketKeys:ene,onMessageFromWorkers:tne}=rt(),ma=j(),{isMainThread:gH}=require("worker_threads"),{TLSSocket:SH,createSecureContext:ywe}=require("node:tls"),qb=3650,b_=["127.0.0.1","localhost","::1"],$b=[{name:"countryName",value:"USA"},{name:"stateOrProvinceName",value:"Colorado"},{name:"localityName",value:"Denver"},{name:"organizationName",value:"HarperDB, Inc."}];tne(async e=>{e.type===ps.ITC_EVENT_TYPES.RESTART&&(hs.initSync(!0),await Yb())});var vr;function Ta(){return vr||(vr=Qre().system.hdb_certificate,vr||(vr=zre({table:"hdb_certificate",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]}))),vr}a(Ta,"getCertTable");async function O_(){let e=OH("operations-api"),t={secureContexts:null,setSecureContext:a(s=>{},"setSecureContext")};await e.initialize(t);let r=t.secureContexts.get(bm());if(!r)return;let n=new po(r.options.cert);return r.cert_parsed=n,r.issuer=n.issuer,r}a(O_,"getReplicationCert");async function rne(){Ta();let e=(await O_()).options.cert,r=new po(e).issuer.match(/CN=(.*)/)?.[1];return vr.get(r)}a(rne,"getReplicationCertAuth");var lH,Sa=new Map;function TH(){if(lH)return;lH=!0;let e=[{configKey:Ou.TLS},{configKey:Ou.OPERATIONSAPI_TLS}];Ta();let t=ir.dirname(Hb.getConfigFilePath()),r;for(let{configKey:n}of e){let s=Hb.getConfigFromFile(n);if(s){Array.isArray(s)||(s=[s]);for(let i of s){let o=i.privateKey,c=o&&pH(Yre(t,"keys"),o);c&&uH(o,l=>{Sa.set(c,l)},"private key");for(let l of[!1,!0]){let u=i[l?"certificateAuthority":"certificate"];if(u&&gH){let f;uH(u,d=>{if(aH.cert===d)return;let h=i.hostname??i.hostnames??i.host??i.hosts;h&&!Array.isArray(h)&&(h=[h]);let _=bH(u),p=new po(_),S;try{S=Wb(p)}catch(A){ct.error("error extracting common name from certificate",A);return}if(S==null){ct.error("error extracting common name from certificate");return}if(p.checkIssued(new po(aH.cert)))return;let g=vr.primaryStore.get(S),T=mH(u).mtimeMs,m=!g||g.is_self_signed?1:g.file_timestamp??g.__updatedtime__;if(g&&T<=m){T<m&&ct.info(`Certificate ${S} at ${u} is older (${new Date(T)}) than the certificate in the database (${m>1?new Date(m):"only self signed certificate available"})`);return}r=vr.put({name:S,uses:["https",...n.includes("operations")?["operations"]:[]],ciphers:i.ciphers,certificate:_,private_key_name:c,is_authority:l,hostnames:h,file_timestamp:T,details:{issuer:p.issuer.replace(/\n/g," "),subject:p.subject.replace(/\n/g," "),subject_alt_name:p.subjectAltName,serial_number:p.serialNumber,valid_from:p.validFrom,valid_to:p.validTo}})},l?"certificate authority":"certificate")}}}}}return r}a(TH,"loadCertificates");function uH(e,t,r){let n,s=a((i,o)=>{try{let c=i.mtimeMs;c&&c!==n&&(o&&gH&&ct.warn(`Reloading ${r}:`,e),n=c,t(bH(e)))}catch(c){ct.error(`Error loading ${r}:`,e,c)}},"loadFile");Tn.existsSync(e)?s(mH(e)):ct.error(`${r} file not found:`,e),Zre(e,{persistent:!1},s)}a(uH,"loadAndWatch");function kb(){let e=jre();if(e==null){let t=b_[0];return ct.info("replication url is missing from harperdb-config.yaml, using default host"+t),t}return EH(e)}a(kb,"getHost");function ym(){let e=bm();if(e==null){let t=b_[0];return ct.info("replication url is missing from harperdb-config.yaml, using default host"+t),t}return e}a(ym,"getCommonName");async function nne(){let e=await O_(),t=Tt.certificateFromPem(e.options.cert),r=Tt.privateKeyFromPem(e.options.key);ct.info("Creating CSR with cert named:",e.name);let n=Tt.createCertificationRequest();n.publicKey=t.publicKey;let s=[{name:"commonName",value:ym()},...$b];ct.info("Creating CSR with subject",s),n.setSubject(s);let i=[{name:"unstructuredName",value:"HarperDB, Inc."},{name:"extensionRequest",extensions:AH()}];return ct.info("Creating CSR with attributes",i),n.setAttributes(i),n.sign(r),bu.pki.certificationRequestToPem(n)}a(nne,"createCsr");function AH(){let e=b_.includes(ym())?b_:[...b_,ym()];return e.includes(kb())||e.push(kb()),[{name:"basicConstraints",cA:!1,critical:!0},{name:"keyUsage",digitalSignature:!0,keyEncipherment:!0,critical:!0},{name:"extKeyUsage",serverAuth:!0,clientAuth:!0},{name:"nsCertType",client:!0,server:!0},{name:"subjectAltName",altNames:e.map(t=>fH.isIP(t)?{type:7,ip:t}:{type:2,value:t})}]}a(AH,"certExtensions");async function sne(e){let t={},r=ir.join(hs.getHdbBasePath(),ps.LICENSE_KEY_DIR_NAME);if(e.csr){let n,s;Ta();for await(let f of vr.search([]))if(f.is_authority&&!f.details.issuer.includes("HarperDB-Certificate-Authority")){if(Sa.has(f.private_key_name)){n=Sa.get(f.private_key_name),s=f;break}else if(f.private_key_name&&await Tn.exists(ir.join(r,f.private_key_name))){n=Tn.readFile(ir.join(r,f.private_key_name)),s=f;break}}if(!n){let f=await Fb();s=f.ca,n=f.private_key}n=Tt.privateKeyFromPem(n),t.signingCA=s.certificate;let i=Tt.certificateFromPem(s.certificate);ct.info("Signing CSR with cert named",s.name);let o=Tt.certificationRequestFromPem(e.csr);try{o.verify()}catch(f){return ct.error(f),new Error("Error verifying CSR: "+f.message)}let c=bu.pki.createCertificate();c.serialNumber=Math.random().toString().slice(2,10),c.validity.notBefore=new Date;let l=new Date;c.validity.notAfter=l,c.validity.notAfter.setDate(l.getDate()+qb),ct.info("sign cert setting validity:",c.validity),ct.info("sign cert setting subject from CSR:",o.subject.attributes),c.setSubject(o.subject.attributes),ct.info("sign cert setting issuer:",i.subject.attributes),c.setIssuer(i.subject.attributes);let u=o.getAttribute({name:"extensionRequest"}).extensions;ct.info("sign cert adding extensions from CSR:",u),c.setExtensions(u),c.publicKey=o.publicKey,c.sign(n,bu.md.sha256.create()),t.certificate=Tt.certificateToPem(c)}else ct.info("Sign cert did not receive a CSR from:",e.url,"only the CA will be returned");return t}a(sne,"signCertificate");async function ine(e,t){await Nu({name:bm(),uses:["https","wss"],certificate:e,private_key_name:"privateKey.pem",is_authority:!1,is_self_signed:!0}),await Nu({name:t.subject.getField("CN").value,uses:["https","wss"],certificate:Tt.certificateToPem(t),private_key_name:"privateKey.pem",is_authority:!0,is_self_signed:!0})}a(ine,"createCertificateTable");async function Nu(e){let t=new po(e.certificate);e.details={issuer:t.issuer.replace(/\n/g," "),subject:t.subject.replace(/\n/g," "),subject_alt_name:t.subjectAltName,serial_number:t.serialNumber,valid_from:t.validFrom,valid_to:t.validTo},Ta(),await vr.patch(e)}a(Nu,"setCertTable");async function Vb(){let e=await Bb("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}});return{public_key:Tt.publicKeyFromPem(e.publicKey),private_key:Tt.privateKeyFromPem(e.privateKey)}}a(Vb,"generateKeys");async function Kb(e,t,r){let n=Tt.createCertificate();if(!t){let o=await O_();t=Tt.certificateFromPem(o.options.cert).publicKey}n.publicKey=t,n.serialNumber=Math.random().toString().slice(2,10),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+qb);let i=[{name:"commonName",value:ym()},...$b];return n.setSubject(i),n.setIssuer(r.subject.attributes),n.setExtensions(AH()),n.sign(e,bu.md.sha256.create()),Tt.certificateToPem(n)}a(Kb,"generateCertificates");async function Fb(){let e=await wH(),t;for(let r of e){if(!r.is_authority)continue;let n=await NH(r.private_key_name);if(r.private_key_name&&n&&new po(r.certificate).checkPrivateKey(_H(n))){ct.trace(`CA named: ${r.name} found with matching private key`),t={ca:r,private_key:n};break}}if(t)return t;ct.trace("No CA found with matching private key")}a(Fb,"getCertAuthority");async function RH(e,t,r=!0){let n=Tt.createCertificate();n.publicKey=t,n.serialNumber=Math.random().toString().slice(2,10),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+qb);let i=[{name:"commonName",value:`HarperDB-Certificate-Authority-${hs.get(Ou.REPLICATION_HOSTNAME)??EH(hs.get(Ou.REPLICATION_URL))??hH().split("-")[0]}`},...$b];n.setSubject(i),n.setIssuer(i),n.setExtensions([{name:"basicConstraints",cA:!0,critical:!0},{name:"keyUsage",keyCertSign:!0,critical:!0}]),n.sign(e,bu.md.sha256.create());let o=ir.join(hs.getHdbBasePath(),ps.LICENSE_KEY_DIR_NAME),c=ir.join(o,js.PRIVATEKEY_PEM_NAME);return r&&await Tn.writeFile(c,Tt.privateKeyToPem(e)),n}a(RH,"generateCertAuthority");async function one(){let{private_key:e,public_key:t}=await Vb(),r=await RH(e,t),n=await Kb(e,t,r);await ine(n,r),yH()}a(one,"generateCertsKeys");async function ane(){let e=await Kb(Tt.privateKeyFromPem(js.CERTIFICATE_VALUES.key),void 0,Tt.certificateFromPem(js.CERTIFICATE_VALUES.cert)),t=ir.join(hs.getHdbBasePath(),ps.LICENSE_KEY_DIR_NAME),r=ir.join(t,js.NATS_CERTIFICATE_PEM_NAME);await Tn.exists(r)||await Tn.writeFile(r,e);let n=ir.join(t,js.NATS_CA_PEM_NAME);await Tn.exists(n)||await Tn.writeFile(n,js.CERTIFICATE_VALUES.cert)}a(ane,"createNatsCerts");async function cne(){Ta();for await(let e of vr.search([{attribute:"is_self_signed",value:!0}]))await vr.delete(e.name);await Yb()}a(cne,"renewSelfSigned");async function Yb(){Jre(),await TH(),Ta();let e=await Fb();if(!e){ct.notify("A matching Certificate Authority and key was not found. A new CA will be created in advance, so it's available if needed.");let r=hs.get(Ou.TLS_PRIVATEKEY),n=ir.join(hs.getHdbBasePath(),ps.LICENSE_KEY_DIR_NAME),s,i=pH(n,r);try{s=Tt.privateKeyFromPem(await Tn.readFile(r))}catch(c){ct.warn("Unable to parse the TLS key",r,"A new key will be generated and used to create Certificate Authority",c),{private_key:s}=await Vb(),await Tn.exists(ir.join(n,js.PRIVATEKEY_PEM_NAME))&&(i=`privateKey${hH().split("-")[0]}.pem`),await Tn.writeFile(ir.join(n,i),Tt.privateKeyToPem(s))}let o=await RH(s,Tt.setRsaPublicKey(s.n,s.e),!1);await Nu({name:o.subject.getField("CN").value,uses:["https"],certificate:Tt.certificateToPem(o),private_key_name:i,is_authority:!0,is_self_signed:!0})}if(!await O_()){let r=bm();ct.notify(`A suitable replication certificate was not found, creating new self singed cert named: ${r}`),e=e??await Fb();let n=Tt.certificateFromPem(e.ca.certificate),s=n.publicKey,i=await Kb(Tt.privateKeyFromPem(e.private_key),s,n);await Nu({name:r,uses:["https","operations","wss"],certificate:i,is_authority:!1,private_key_name:e.ca.private_key_name,is_self_signed:!0})}}a(Yb,"reviewSelfSignedCert");function yH(){let e=Wre(Object.keys(ps.CONFIG_PARAM_MAP),!0),t=ir.join(hs.getHdbBasePath(),ps.LICENSE_KEY_DIR_NAME),r=ir.join(t,js.PRIVATEKEY_PEM_NAME),n=ir.join(t,js.NATS_CERTIFICATE_PEM_NAME),s=ir.join(t,js.NATS_CA_PEM_NAME),i=ps.CONFIG_PARAMS,o={[i.TLS_PRIVATEKEY]:e[i.TLS_PRIVATEKEY.toLowerCase()]?e[i.TLS_PRIVATEKEY.toLowerCase()]:r};e[i.TLS_CERTIFICATE.toLowerCase()]&&(o[i.TLS_CERTIFICATE]=e[i.TLS_CERTIFICATE.toLowerCase()]),e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(o[i.TLS_CERTIFICATEAUTHORITY]=e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_CERTIFICATE]=e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]),e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_PRIVATEKEY]=e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY]=e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]),(e[i.CLUSTERING_ENABLED.toLowerCase()]||e.clustering)&&(o[i.CLUSTERING_TLS_CERTIFICATE]=e[i.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]??n,o[i.CLUSTERING_TLS_CERT_AUTH]=e[i.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]??s,o[i.CLUSTERING_TLS_PRIVATEKEY]=e[i.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]??r),Hb.updateConfigValue(void 0,void 0,o,!1,!0)}a(yH,"updateConfigCert");function bH(e){return e.startsWith("-----BEGIN")?e:Xre(e,"utf8")}a(bH,"readPEM");var dH=Rm.createSecureContext;Rm.createSecureContext=function(e){if(!e.cert||!e.key)return dH(e);let t={...e};delete t.key,delete t.cert;let r=dH(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var lne=SH.prototype._init;SH.prototype._init=function(e,t){lne.call(this,e,t);let r=this;this._handle.oncertcb=function(n){let s=n.servername;r._SNICallback(s,(i,o)=>{this.sni_context=o?.context||o,this.certCbDone()})}};var qc=new Map;function OH(e,t){let r=new Map,n,s=!1;return i.initialize=o=>i.ready?i.ready:(o&&(o.secureContexts=r,o.secureContextsListeners=[]),i.ready=new Promise((c,l)=>{async function u(){try{r.clear(),qc.clear();let f=0;for await(let d of xb.system.hdb_certificate.search([])){let h=d.certificate,_=new po(h);d.is_authority&&(_.asString=h,qc.set(_.subject,h))}for await(let d of xb.system.hdb_certificate.search([]))try{if(d.is_authority)continue;let h=e==="operations-api",_=d.is_self_signed?1:2;h&&d.uses?.includes?.("operations")&&(_+=1);let p=await NH(d.private_key_name),S=d.certificate,g=new po(S);if(qc.has(g.issuer)&&(S+=`
23
- `+qc.get(g.issuer)),!p||!S)throw new Error("Missing private key or certificate for secure server");let T={ciphers:d.ciphers,ticketKeys:ene(),availableCAs:qc,ca:t&&Array.from(qc.values()),cert:S,key:p,key_file:d.private_key_name,is_self_signed:d.is_self_signed};o&&(T.sessionIdContext=o.sessionIdContext);let m=Rm.createSecureContext(T);m.name=d.name,m.options=T,m.quality=_,m.certificateAuthorities=Array.from(qc),m.certStart=S.toString().slice(0,100);let A=d.hostnames??IH(g);Array.isArray(A)||(A=[A]);let w;for(let M of A)if(M){M[0]==="*"&&(s=!0,M=M.slice(1)),M===kb()&&(_+=2),fH.isIP(M)&&(w=!0);let F=r.get(M)?.quality??0;_>F&&r.set(M,m)}else ma.error("No hostname found for certificate at",Rm.certificate);ma.trace("Adding TLS",m.name,"for",o.ports||"client","cert named",d.name,"hostnames",A,"quality",_,"best quality",f),_>f&&(i.defaultContext=n=m,f=_,o&&(o.defaultContext=m))}catch(h){ma.error("Error applying TLS for",d.name,h)}o?.secureContextsListeners.forEach(d=>d()),c(n)}catch(f){l(f)}}a(u,"updateTLS"),xb.system.hdb_certificate.subscribe({listener:a(()=>setTimeout(()=>u(),1500).unref(),"listener"),omitCurrent:!0}),u()})),i;function i(o,c){ma.info("TLS requested for",o||"(no SNI)");let l=o;for(;;){let f=r.get(l);if(f)return ma.debug("Found certificate for",o,f.certStart),f.updatedContext&&(f=f.updatedContext),c(null,f);if(s&&l){let d=l.indexOf(".",1);d<0?l="":l=l.slice(d)}else break}o?ma.debug("No certificate found to match",o,"using the default certificate"):ma.debug("No SNI, using the default certificate",n?.name);let u=n;u?u.updatedContext&&(u=u.updatedContext):ma.info("No default certificate found"),c(null,u)}a(i,"SNICallback")}a(OH,"createTLSSelector");async function NH(e){let t=Sa.get(e);return!t&&e?await Tn.readFile(ir.join(hs.get(Ou.ROOTPATH),ps.LICENSE_KEY_DIR_NAME,e),"utf8"):t}a(NH,"getPrivateKeyByName");async function wH(){Ta();let e=[];for await(let t of vr.search([]))e.push(t);return e}a(wH,"listCertificates");async function une(e){let t=Gb(e,Qs.object({name:Qs.string().required(),certificate:Qs.string().required(),is_authority:Qs.boolean().required(),private_key:Qs.string(),hosts:Qs.array(),uses:Qs.array()}));if(t)throw new ga(t.message);let{name:r,certificate:n,private_key:s,is_authority:i}=e,o=new po(n),c=!1,l=!1,u;for(let[_,p]of Sa)!s&&!c&&o.checkPrivateKey(_H(p))&&(c=!0,u=_),s&&s===p&&(l=!0,u=_);if(!i&&!s&&!c)throw new ga("A suitable private key was not found for this certificate");let f;if(!r){try{f=Wb(o)}catch(_){ct.error(_)}if(f==null)throw new ga("Error extracting certificate common name, please provide a name parameter")}let d=dne(r??f);s&&!c&&!l&&(await Tn.writeFile(ir.join(hs.getHdbBasePath(),ps.LICENSE_KEY_DIR_NAME,d+".pem"),s),Sa.set(d,s));let h={name:r??f,certificate:n,is_authority:i,hosts:e.hosts,uses:e.uses};return(!i||i&&u||i&&s)&&(h.private_key_name=u??d+".pem"),await Nu(h),"Successfully added certificate: "+d}a(une,"addCertificate");function dne(e){return e.replace(/[^a-z0-9\.]/gi,"-")}a(dne,"sanitizeName");async function fne(e){let t=Gb(e,Qs.object({name:Qs.string().required()}));if(t)throw new ga(t.message);let{name:r}=e;Ta();let n=await vr.get(r);if(!n)throw new ga(r+" not found");let{private_key_name:s}=n;if(s){let i=Array.from(await vr.search([{attribute:"private_key_name",value:s}]));i.length===1&&i[0].name===r&&(ct.info("Removing private key named",s),await Tn.remove(ir.join(hs.getHdbBasePath(),ps.LICENSE_KEY_DIR_NAME,s)))}return await vr.delete(r),"Successfully removed "+r}a(fne,"removeCertificate");function Wb(e){return e.subject.match(/CN=(.*)/)?.[1]}a(Wb,"extractCommonName");function IH(e){return e.subjectAltName?e.subjectAltName.split(",").map(t=>{let r=t.indexOf(":");if(t=t.slice(r+1),t=t.trim(),t[0]==='"')try{t=JSON.parse(t)}catch{}return t.indexOf("=")>-1?t.match(/CN=([^,]*)/)?.[1]:t}).filter(t=>t):[Wb(e)]}a(IH,"hostnamesFromCert");async function _ne(e){if(e.bypass_auth!==!0)throw new ga("Unauthorized","401");let t=Gb(e,Qs.object({name:Qs.string().required()}));if(t)throw new ga(t.message);let{name:r}=e;if(r===".jwtPrivate")return(await cH()).private_key;if(r===".jwtPublic")return(await cH()).public_key;if(Sa.get(r))return Sa.get(e.name);throw new ga("Key not found")}a(_ne,"getKey")});var zH={};Be(zH,{CONFIRMATION_STATUS_POSITION:()=>WH,NodeReplicationConnection:()=>N_,OPERATION_REQUEST:()=>Xb,RECEIVED_TIME_POSITION:()=>eO,RECEIVED_VERSION_POSITION:()=>Zb,SENDING_TIME_POSITION:()=>Cm,createWebSocket:()=>Lm,database_subscriptions:()=>ya,replicateOverWS:()=>w_,table_update_listeners:()=>rO});async function Lm(e,t){let{authorization:r,rejectUnauthorized:n}=t||{},s=Xe(),i;if(e.includes("wss://")){if(!Qb){let l=(0,VH.createTLSSelector)("operations-api"),u={secureContexts:null};await l.initialize(u),Qb=u.secureContexts}if(i=Qb.get(s),i&&ue.debug?.("Creating web socket for URL",e,"with certificate named:",i.name),!i&&n!==!1)throw new Error("Unable to find a valid certificate to use for replication to connect to "+e)}let o={};r&&(o.Authorization=r);let c={headers:o,localAddress:s?.startsWith("127.0")?s:void 0,servername:(0,YH.isIP)(t?.serverName)?void 0:t?.serverName,noDelay:!0,highWaterMark:128*1024,rejectUnauthorized:n!==!1,secureContext:void 0};return i&&(c.secureContext=KH.createSecureContext({...i.options,ca:Array.from(Vc)})),new qH.WebSocket(e,"harperdb-replication-v1",c)}function w_(e,t,r){let n=t.port||t.securePort,s=$c.pid%1e3+"-"+$H.threadId+(n?"s:"+n:"c:"+t.url?.slice(-4))+" "+Math.random().toString().slice(2,3),i=0,o=Buffer.allocUnsafeSlow(1024),c=0,l=new DataView(o.buffer,0,1024),u=t.database,f=t.databaseSubscriptions||ya,d,h,_=!1,p=t.subscription;p?.then&&p.then(R=>p=R);let S=t.tables||u&&Je()[u];if(!r){ue.error?.("No authorization provided"),mt(1008,"Unauthorized");return}let g=new Map,T=[],m=r.name;m&&t.connection&&(t.connection.nodeName=m);let A,w,M,F,G,K,ee,ie=1e3,X,re=0,z=0,he=0,Te=new Map,Ie=[],pe=0,Ft;if(t.url){let R=a(()=>{G&&z===e._socket?.bytesRead&&he===e._socket?.bytesWritten?e.terminate():(G=performance.now(),e.ping(),z=e._socket?.bytesRead,he=e._socket?.bytesWritten)},"send_ping");M=setInterval(R,kH).unref(),R()}else Gt();e._socket?.setMaxListeners(200);function Gt(){clearTimeout(F),z=e._socket?.bytesRead,he=e._socket?.bytesWritten,F=setTimeout(()=>{z===e._socket?.bytesRead&&he===e._socket?.bytesWritten&&(ue.warn?.(`Timeout waiting for ping from ${m}, terminating connection and reconnecting`),e.terminate())},kH*2).unref()}a(Gt,"resetPingTimer");function Jt(){return h||(h=gm(d,u,m)),h}a(Jt,"getSharedStatus"),u&&kd(u);let fr,Md,za=[],yT=[],bT,Dt=[],vd=[],Ud=[],OT=150,rp=25,xd=0,Le=0,Bd=!1,Ki,Ir,Dn,Qa;e.on("message",R=>{re=performance.now();try{let y=R.dataView=new Kc(R.buffer,R.byteOffset,R.byteLength);if(R[0]>127){let L=(0,ze.decode)(R),[x,N,v]=L;switch(x){case DH:{if(N){if(m){if(m!==N){ue.error?.(s,`Node name mismatch, expecting to connect to ${m}, but peer reported name as ${N}, disconnecting`),e.send((0,ze.encode)([wu])),mt(1008,"Node name mismatch");return}}else if(m=N,t.connection?.tentativeNode){let oe=t.connection.tentativeNode;oe.name=m,t.connection.tentativeNode=null,ho(m,oe)}if(t.connection&&(t.connection.nodeName=m),ue.debug?.(s,"received node name:",m,"db:",u),!u)try{kd(u=L[2]),u==="system"&&(fr=pa(t,(oe,le)=>{Yi(le)&&Ko(le)}),e.on("close",()=>{fr?.remove()}))}catch(oe){ue.warn?.(s,"Error setting database",oe),e.send((0,ze.encode)([wu])),mt(1008,oe.message);return}Ll()}break}case BH:{ue.debug?.(s,"Received table definitions for",N.map(oe=>oe.table));for(let oe of N){let le=L[2];oe.database=le;let se;Yi(le)&&(le==="system"?$e[le]?.[oe.table]||(se=jb(oe,$e[le]?.[oe.table])):se=jb(oe,$e[le]?.[oe.table]),d||(d=se?.auditStore),S||(S=Je()?.[le]))}break}case wu:mt();break;case Xb:try{let oe=r?.replicates||r?.subscribers||r?.name;server.operation(N,{user:r},!oe).then(le=>{Array.isArray(le)&&(le={results:le}),le.requestId=N.requestId,e.send((0,ze.encode)([Nm,le]))},le=>{e.send((0,ze.encode)([Nm,{requestId:N.requestId,error:le instanceof Error?le.toString():le}]))})}catch(oe){e.send((0,ze.encode)([Nm,{requestId:N.requestId,error:oe instanceof Error?oe.toString():oe}]))}break;case Nm:let{resolve:$,reject:Y}=g.get(N.requestId);N.error?Y(new Error(N.error)):$(N),g.delete(N.requestId);break;case zb:let ne=L[3];S||(u?ue.error?.(s,"No tables found for",u):ue.error?.(s,"Database name never received"));let k=S[ne];k=jb({table:ne,database:u,attributes:N.attributes,schemaDefined:N.schemaDefined},k),za[v]={name:ne,decoder:new ze.Packr({useBigIntExtension:!0,randomAccessStructure:!0,freezeData:!0,typedStructs:N.typedStructs,structures:N.structures}),getEntry(oe){return k.primaryStore.getEntry(oe)},rootStore:k.primaryStore.rootStore};break;case LH:Qa=d?JB(N,d):new Map,bT=L[2],ue.debug?.(s,`Acknowledged subscription request, receiving messages for nodes: ${bT}`);break;case MH:let ve=v;Ud[ve]=N;break;case xH:Jt()[WH]=N,ue.trace?.(s,"received and broadcasting committed update",N),Jt().buffer.notify();break;case UH:A=N,p.send({type:"end_txn",localTime:A,remoteNodeIds:T});break;case wm:{let oe=L[1],{fileId:le,size:se,finished:Q,error:fe}=oe,Ee=Te.get(le);ue.debug?.("Received blob",le,"has stream",!!Ee,"connectedToBlob",!!Ee?.connectedToBlob,"length",L[2].length,"finished",Q),Ee||(Ee=new Jb.PassThrough,Ee.expectedSize=se,Te.set(le,Ee)),Ee.lastChunk=Date.now(),Q?(fe?(Ee.on("error",()=>{}),Ee.destroy(new Error("Blob error: "+fe))):Ee.end(L[2]),Ee.connectedToBlob&&Te.delete(le)):Ee.write(L[2]);break}case vH:{let oe=N,le;try{let se=L[3],Q=yT[v]||(yT[v]=S[L[4]]);if(!Q)return ue.warn?.("Unknown table id trying to handle record request",v);let fe=Q.primaryStore.getBinaryFast(Symbol.for("structures")),Ee=fe.length;if(Ee!==Le){Le=Ee;let Me=(0,ze.decode)(fe);e.send((0,ze.encode)([zb,{typedStructs:Me.typed,structures:Me.named},v,Q.tableName]))}let ye=Q.primaryStore.getBinaryFast(se);if(ye){let Me=Q.primaryStore.decoder.decode(ye,{valueAsBuffer:!0});le=(0,ze.encode)([Om,oe,{value:Me.value,expiresAt:Me.expiresAt,version:Me.version,residencyId:Me.residencyId,nodeId:Me.nodeId,user:Me.user}])}else le=(0,ze.encode)([Om,oe])}catch(se){le=(0,ze.encode)([Om,oe,{error:se.message}])}e.send(le);break}case Om:{let{resolve:oe,reject:le,tableId:se,key:Q}=g.get(L[1]),fe=L[2];if(fe?.error)le(new Error(fe.error));else if(fe){let Ee=za[se].decoder.decode(fe.value);fe.value=Ee,fe.key=Q,oe(fe)}else oe();g.delete(L[1]);break}case PH:{Dn=N;let oe,le,se=!1;if(p){if(u!==p.databaseName&&!p.then){ue.error?.("Subscription request for wrong database",u,p.databaseName);return}}else p=f.get(u);if(ue.debug?.(s,"received subscription request for",u,"at",Dn),!p){let Ae;p=new Promise(Rt=>{ue.debug?.("Waiting for subscription to database "+u),Ae=Rt}),p.ready=Ae,ya.set(u,p)}if(r.name)le=mr().subscribe(r.name),le.then(async Ae=>{oe=Ae;for await(let Rt of oe){let Xt=Rt.value;if(!(Xt?.replicates===!0||Xt?.replicates?.receives||Xt?.subscriptions?.some(_r=>(_r.database||_r.schema)===u&&_r.publish!==!1))){se=!0,e.send((0,ze.encode)([wu])),mt(1008,`Unauthorized database subscription to ${u}`);return}}},Ae=>{ue.error?.(s,"Error subscribing to HDB nodes",Ae)});else if(!(r?.role?.permission?.super_user||r.replicates)){e.send((0,ze.encode)([wu])),mt(1008,`Unauthorized database subscription to ${u}`);return}if(Ir&&(ue.debug?.(s,"stopping previous subscription",u),Ir.emit("close")),Dn.length===0)return;let Q=Dn[0],fe=a(Ae=>{if(Ae&&(Q.replicateByDefault?!Q.tables.includes(Ae.tableName):Q.tables.includes(Ae.tableName)))return{table:Ae}},"tableToTableEntry"),Ee={txnTime:0},ye,Me,et=1/0,Fr,Cr=a((Ae,Rt)=>{if(Ae.type==="end_txn"){Ee.txnTime&&(o[i]!==66&&ue.error?.("Invalid encoding of message"),Yo(9),Yo(Pm),E(Fr=Rt),Ms()),i=c,Ee.txnTime=0;return}let Xt=Ae.nodeId,_r=Ae.tableId,qt=Me[_r];if(!qt&&(qt=Me[_r]=fe(p.tableById[_r]),!qt))return ue.debug?.("Not subscribed to table",_r);let Gr=qt.table,ja=Gr.primaryStore,Lt=ja.encoder;(Ae.extendedType&Yp||!Lt.typedStructs)&&(Lt._mergeStructures(Lt.getStructures()),Lt.typedStructs&&(Lt.lastTypedStructuresLength=Lt.typedStructs.length));let ip=ye[Xt];if(!(ip&&ip.startTime<Rt&&(!ip.endTime||ip.endTime>Rt)))return Im&&ue.trace?.(s,"skipping replication update",Ae.recordId,"to:",m,"from:",Xt,"subscribed:",ye),CC();Im&&ue.trace?.(s,"sending replication update",Ae.recordId,"to:",m,"from:",Xt,"subscribed:",ye);let NT=Ae.version;Ee.txnTime!==NT&&(Ee.txnTime&&(Im&&ue.trace?.(s,"new txn time, sending queued txn",Ee.txnTime),o[i]!==66&&ue.error?.("Invalid encoding of message"),Ms()),Ee.txnTime=NT,i=c,E(NT));let Ja=Ae.residencyId,wT=Hd(Ja,Gr),op;if(wT&&!wT.includes(m)){let Xa=Hd(Ae.previousResidencyId,Gr);if(Xa&&!Xa.includes(m)&&(Ae.type==="put"||Ae.type==="patch")||Gr.getResidencyById)return CC();let Gd=Ae.recordId;ue.trace?.(s,"sending invalidation",Gd,m,"from",Xt);let Wo=0;Ja&&(Wo|=fc),Ae.previousResidencyId&&(Wo|=_c);let vs,sn=null;for(let ap in Gr.indices){if(!sn){if(vs=Ae.getValue(ja,!0),!vs)break;sn={}}sn[ap]=vs[ap]}op=Vl(Ae.version,_r,Gd,null,Xt,Ae.user,Ae.type==="put"||Ae.type==="patch"?"invalidate":Ae.type,Lt.encode(sn),Wo,Ja,Ae.previousResidencyId,Ae.expiresAt)}function CC(){ue.trace?.(s,"skipping audit record",Ae.recordId),K||(K=setTimeout(()=>{K=null,(Fr||0)+HH/2<et&&(Im&&ue.trace?.(s,"sending skipped sequence update",et),e.send((0,ze.encode)([UH,et])))},HH).unref())}a(CC,"skipAuditRecord");let IT=Lt.typedStructs,CT=Lt.structures;if((IT?.length!=qt.typed_length||CT?.length!=qt.structure_length)&&(qt.typed_length=IT?.length,qt.structure_length=CT.length,ue.debug?.(s,"send table struct",qt.typed_length,qt.structure_length),qt.sentName||(qt.sentName=!0),e.send((0,ze.encode)([zb,{typedStructs:IT,structures:CT,attributes:Gr.attributes,schemaDefined:Gr.schemaDefined},_r,qt.table.tableName]))),Ja&&!vd[Ja]&&(e.send((0,ze.encode)([MH,wT,Ja])),vd[Ja]=!0),op)Yo(op.length),W(op);else{let Xa=Ae.encoded;Ae.extendedType&Bs&&aO(()=>Ae.getValue(ja),async Wo=>{let vs=Dm(Wo);try{let sn;pe++;for await(let ap of Wo.stream()){if(sn&&(ue.debug?.("Sending blob chunk",vs,"length",sn.length),e.send((0,ze.encode)([wm,{fileId:vs,size:Wo.size},sn]))),sn=ap,se)return;e._socket.writableNeedDrain&&(ue.debug?.("draining",vs),await new Promise(qz=>e._socket.once("drain",qz)),ue.debug?.("drained",vs))}ue.debug?.("Sending final blob chunk",vs,"length",sn.length),e.send((0,ze.encode)([wm,{fileId:vs,size:Wo.size,finished:!0},sn]))}catch(sn){ue.debug?.("Error sending blob",sn),e.send((0,ze.encode)([wm,{fileId:vs,finished:!0,error:sn.toString()},Buffer.alloc(0)]))}finally{pe--,pe<rp&&Ft?.()}});let Gd=Xa[0]===66?8:0;Yo(Xa.length-Gd),W(Xa,Gd),ue.trace?.("wrote record",Ae.recordId,"length:",Xa.length)}},"sendAuditRecord"),Ms=a(()=>{c-i>8?(e.send(o.subarray(i,c)),ue.debug?.(s,"Sent message, size:",c-i)):ue.debug?.(s,"skipping empty transaction")},"sendQueuedData");Ir=new tO.EventEmitter,Ir.once("close",()=>{se=!0,oe?.end()});for(let{startTime:Ae}of Dn)Ae<et&&(et=Ae);(le||Promise.resolve()).then(async()=>{p=await p,d=p.auditStore,Me=p.tableById.map(fe),ye=[];for(let{name:Rt,startTime:Xt,endTime:_r}of Dn){let qt=mm(Rt,d);ue.debug?.("subscription to",Rt,"using local id",qt,"starting",Xt),ye[qt]={startTime:Xt,endTime:_r}}Ko(u),fr||(fr=Yc(Rt=>{Rt.databaseName===u&&Ko(u)}),Md=I_(Rt=>{Rt===u&&(e.send((0,ze.encode)([wu])),mt())}),e.on("close",()=>{fr?.remove(),Md?.remove()})),e.send((0,ze.encode)([LH,S_(p.auditStore),Dn.map(({name:Rt})=>Rt)]));let Ae=!0;do{isFinite(et)||(ue.warn?.("Invalid sequence id "+et),mt(1008,"Invalid sequence id"+et));let Rt;if(Ae&&!se&&(Ae=!1,!(sO(d)<=et)&&(GH.default.get(B.REPLICATION_COPYTABLESTOCATCHUP)??hne)&&server.nodes[0]?.name===m)){ue.info?.("Replicating all tables to",m);let _r=et,qt=Mm(d);for(let Gr in S){if(!fe(Gr))continue;let ja=S[Gr];for(let Lt of ja.primaryStore.getRange({snapshot:!1})){if(se)return;Lt.localTime>=et&&(ue.trace?.(s,"Copying record from",u,Gr,Lt.key,Lt.localTime),_r=Math.max(Lt.localTime,_r),Rt=!0,Jt()[Cm]=1,Cr({recordId:Lt.key,tableId:ja.tableId,type:"put",getValue(){return Lt.value},encoded:ja.primaryStore.getBinary(Lt.key),version:Lt.version,residencyId:Lt.residencyId,nodeId:qt,extendedType:Lt.metadataFlags},Lt.localTime))}}et=_r}for(let{key:Xt,value:_r}of d.getRange({start:et||1,exclusiveStart:!0,snapshot:!1})){if(se)return;let qt=bt(_r);ue.debug?.("sending audit record",new Date(Xt)),Jt()[Cm]=Xt,et=Xt,Cr(qt,Xt),e._socket.writableNeedDrain?await new Promise(Gr=>{ue.debug?.(`Waiting for remote node ${m} to allow more commits ${e._socket.writableNeedDrain?"due to network backlog":"due to requested flow directive"}`),e._socket.once("drain",Gr)}):pe>rp?await new Promise(Gr=>{Ft=Gr}):await new Promise(setImmediate),Ir.startTime=Xt,Rt=!0}Rt&&Cr({type:"end_txn"},et),Jt()[Cm]=0,await QH(d)}while(!se)}).catch(Ae=>{ue.error?.(s,"Error handling subscription to node",Ae),mt(1008,"Error handling subscription to node")});break}}return}y.position=8;let b=!0,C,I;do{Jt();let L=y.readInt();if(L===9&&y.getUint8(y.position)==Pm){y.position++,A=I=y.readFloat64(),h[Zb]=A,h[eO]=Date.now(),ue.trace?.("received remote sequence update",A,u);break}let x=y.position,N=bt(R,x,x+L),v=za[N.tableId];v||ue.error?.(`No table found with an id of ${N.tableId}`);let $;N.residencyId&&($=Ud[N.residencyId],ue.trace?.(s,"received residency list",$,N.type,N.recordId));try{oO(()=>{C={table:v.name,id:N.recordId,type:N.type,nodeId:Qa.get(N.nodeId),residencyList:$,timestamp:N.version,value:N.getValue(v),user:N.user,beginTxn:b,expiresAt:N.expiresAt}},Y=>{let ne=Dm(Y),k=Te.get(ne);ue.debug?.("Received transaction with blob",ne,"has stream",!!k,"ended",!!k?.writableEnded),k?k.writableEnded&&Te.delete(ne):(k=new Jb.PassThrough,Te.set(ne,k)),k.connectedToBlob=!0,k.lastChunk=Date.now(),Y.size===void 0&&k.expectedSize&&(Y.size=k.expectedSize);let ve=createBlob(k,Y),oe=ve.save({primaryStore:p.auditStore});return oe&&(oe.blobId=ne,Ie.push(oe),oe.finally(()=>{ue.debug?.(`Finished receiving blob stream ${ne}`),Ie.splice(Ie.indexOf(oe),1)})),ve})}catch(Y){throw Y.message+="typed structures for current decoder"+JSON.stringify(v.decoder.typedStructs),Y}b=!1,ue.trace?.(s,"received replication message",N.type,"id",C.id,"version",new Date(N.version),"nodeId",C.nodeId),h[Zb]=N.version,h[eO]=Date.now(),p.send(C),y.position=x+L}while(y.position<R.byteLength);xd++,sr(R.byteLength,"bytes-received",m+"."+u+"."+C.table,"replication","ingest"),xd>OT&&!Bd&&(Bd=!0,e.pause(),ue.debug?.(`Commit backlog causing replication back-pressure, requesting that ${m} pause replication`)),p.send({type:"end_txn",localTime:A,remoteNodeIds:T,async onCommit(){if(C){let L=Date.now()-C.timestamp;sr(L,"replication-latency",m+"."+u+"."+C.table,C.type,"ingest")}xd--,Bd&&(Bd=!1,e.resume(),ue.debug?.(`Replication resuming ${m}`)),Ie.length>0&&await Promise.all(Ie),ue.trace?.("All blobs finished"),!w&&I&&(ue.trace?.(s,"queuing confirmation of a commit at",I),setTimeout(()=>{e.send((0,ze.encode)([xH,w])),ue.trace?.(s,"sent confirmation of a commit at",w),w=null},pne)),w=I,ue.debug?.("last sequence committed",new Date(I),u)}})}catch(y){ue.error?.(s,"Error handling incoming replication message",y)}}),e.on("ping",Gt),e.on("pong",()=>{t.connection&&(t.connection.latency=performance.now()-G,Gc({name:m,database:u,url:t.url,latency:t.connection.latency})),G=null}),e.on("close",(R,y)=>{clearInterval(M),clearTimeout(F),clearInterval(ee),Ir&&Ir.emit("close"),Ki&&Ki.end();for(let[b,{reject:C}]of g)C(new Error(`Connection closed ${y?.toString()} ${R}`));ue.debug?.(s,"closed",R,y?.toString())});function np(){}a(np,"recordRemoteNodeSequence");function mt(R,y){e.isFinished=!0,e.close(R,y)}a(mt,"close");function Ll(){if(_||(_=!0,t.connection?.on("subscriptions-updated",Ll)),t.connection?.isFinished)throw new Error("Can not make a subscription request on a connection that is already closed");let R=new Map;try{for(let C of p?.dbisDB?.getRange({start:Symbol.for("seq"),end:[Symbol.for("seq"),Buffer.from([255])]})||[])for(let I of C.value.nodes||[])I.lastTxnTime>(R.get(I.id)??0)&&R.set(I.id,I.lastTxnTime)}catch(C){if(!C.message.includes("Can not re"))throw C}let y=t.connection?.nodeSubscriptions?.[0];T=[];let b=t.connection?.nodeSubscriptions.map((C,I)=>{let L=[],{replicateByDefault:x}=C;if(C.subscriptions){for(let Y of C.subscriptions)if(Y.subscribe&&(Y.schema||Y.database)===u){let ne=Y.table;S?.[ne]?.replicate!==!1&&L.push(ne)}x=!1}else for(let Y in S)(x?S[Y].replicate===!1:S[Y].replicate)&&L.push(Y);let N=d&&mm(C.name,d),v=p?.dbisDB?.get([Symbol.for("seq"),N])??1,$=Math.max(v?.seqId??1,(typeof C.start_time=="string"?new Date(C.start_time).getTime():C.start_time)??1);if(ue.debug?.("Starting time recorded in db",C.name,N,u,v?.seqId,"start time:",$,new Date($)),y!==C){let Y=d&&mm(y.name,d),ne=p?.dbisDB?.get([Symbol.for("seq"),Y])??1;for(let k of ne?.nodes||[])k.name===C.name&&($=k.seqId,ue.debug?.("Using sequence id from proxy node",y.name,$))}return T.push(N),R.get(N)>$&&($=R.get(N),ue.debug?.("Updating start time from more recent txn recorded",y.name,$)),{name:C.name,replicateByDefault:x,tables:L,startTime:$,endTime:C.end_time}});if(b)if(ue.debug?.(s,"sending subscription request",b,p?.dbisDB?.path),clearTimeout(X),b.length>0)e.send((0,ze.encode)([PH,b]));else{let C=a(()=>{let I=performance.now();X=setTimeout(()=>{re<=I?mt(1008,"No nodes to subscribe to"):C()},ie)},"schedule_close");C()}}a(Ll,"sendSubscriptionRequestUpdate");function Hd(R,y){if(!R)return;let b=Dt[R];return b||(b=y.getResidencyRecord(R),Dt[R]=b),b}a(Hd,"getResidence");function Yi(R){return!(Ra&&Ra!="*"&&!Ra[R]&&!Ra.includes?.(R)&&!Ra.some?.(y=>y.name===R))}a(Yi,"checkDatabaseAccess");function kd(R){if(p=p||f.get(R),!Yi(R))throw new Error(`Access to database "${R}" is not permitted`);p||ue.warn?.(`No database named "${R}" was declared and registered`),d=p?.auditStore,S||(S=Je()?.[R]);let y=Xe();if(y===m)throw y?new Error("Should not connect to self",y):new Error("Node name not defined");return Ml(y,R),!0}a(kd,"setDatabase");function Ml(R,y){let b=Je()?.[y],C=[];for(let I in b){let L=b[I];C.push({table:I,schemaDefined:L.schemaDefined,attributes:L.attributes.map(x=>({name:x.name,type:x.type,isPrimaryKey:x.isPrimaryKey}))})}ue.trace?.("Sending database info for node",R,"database name",y),e.send((0,ze.encode)([DH,R,y,C]))}a(Ml,"sendNodeDBName");function Ko(R){let y=Je()?.[R],b=[];for(let C in y){if(Dn&&!Dn.some(L=>L.replicateByDefault?!L.tables.includes(C):L.tables.includes(C)))continue;let I=y[C];b.push({table:C,schemaDefined:I.schemaDefined,attributes:I.attributes.map(L=>({name:L.name,type:L.type,isPrimaryKey:L.isPrimaryKey}))})}e.send((0,ze.encode)([BH,b,R]))}a(Ko,"sendDBSchema"),ee=setInterval(()=>{for(let[R,y]of Te)y.lastChunk+3e4<Date.now()&&(ue.warn?.(`Timeout waiting for blob stream to finish ${R} from ${m}`),Te.delete(R),y.end())},3e4).unref();let Fd=1,sp=[];return{end(){Ki&&Ki.end(),Ir&&Ir.emit("close")},getRecord(R){let y=Fd++;return new Promise((b,C)=>{let I=[vH,y,R.table.tableId,R.id];sp[R.table.tableId]||(I.push(R.table.tableName),sp[R.table.tableId]=!0),e.send((0,ze.encode)(I)),g.set(y,{tableId:R.table.tableId,key:R.id,resolve(L){let{table:x,entry:N}=R;b(L),L&&x._recordRelocate(N,L)},reject:C})})},sendOperation(R){let y=Fd++;return R.requestId=y,e.send((0,ze.encode)([Xb,R])),new Promise((b,C)=>{g.set(y,{resolve:b,reject:C})})}};function Yo(R){O(5),R<128?o[c++]=R:R<16384?(l.setUint16(c,R|32768),c+=2):R<1056964608?(l.setUint32(c,R|3221225472),c+=4):(o[c]=255,l.setUint32(c+1,R),c+=5)}function W(R,y=0,b=R.length){let C=b-y;O(C),R.copy(o,c,y,b),c+=C}function E(R){O(8),l.setFloat64(c,R),c+=8}function O(R){if(R+16>o.length-c){let y=Buffer.allocUnsafeSlow(c+R-i+65536>>10<<11);o.copy(y,0,i,c),c=c-i,i=0,o=y,l=new DataView(o.buffer,0,o.length)}}}function jb(e,t){let r=e.database??"data";if(r!=="data"&&!$e[r]){ue.warn?.("Database not found",e.database);return}t||(t={});let n=!1,s=e.schemaDefined,i=t.attributes||[];for(let o=0;o<e.attributes?.length;o++){let c=e.attributes[o],l=i[o];(!l||l.name!==c.name||l.type!==c.type)&&(n=!0,s||(c.indexed=!0),i[o]=c)}return n?(ue.debug?.("(Re)creating",e),ot({table:e.table,database:e.database,schemaDefined:e.schemaDefined,attributes:i,...t})):t}var GH,ze,qH,$H,ue,tO,VH,KH,$c,YH,Jb,PH,DH,LH,wu,MH,zb,vH,Om,Xb,Nm,UH,xH,BH,wm,WH,Zb,eO,Cm,hne,rO,ya,Im,HH,pne,kH,Qb,FH,N_,nO=be(()=>{De();Zi();Lb();iO();_s();GH=U(ce());H();Kl();ze=require("msgpackr"),qH=require("ws"),$H=require("worker_threads"),ue=U(Qi());y_();tO=require("events"),VH=U(Js()),KH=U(require("node:tls"));Fc();$c=U(require("node:process")),YH=require("node:net");Ci();cs();Jb=require("node:stream"),PH=129,DH=140,LH=141,wu=142,MH=130,zb=132,vH=133,Om=134,Xb=136,Nm=137,UH=143,xH=144,BH=145,wm=146,WH=0,Zb=1,eO=2,Cm=3,hne=$c.env.HDB_LEADER_URL||$c.argv.includes("--HDB_LEADER_URL"),rO=new Map,ya=new Map,Im=!0,HH=300,pne=2,kH=3e4;a(Lm,"createWebSocket");FH=1e3,N_=class extends tO.EventEmitter{constructor(r,n,s,i,o){super();this.url=r;this.subscription=n;this.databaseName=s;this.nodeName=i;this.authorization=o;this.nodeName=this.nodeName??zs(r)}static{a(this,"NodeReplicationConnection")}socket;startTime;retryTime=FH;retries=0;isConnected=!0;isFinished=!1;nodeSubscriptions=[];latency=0;replicateTablesByDefault;session;sessionResolve;sessionReject;async connect(){this.session||this.resetSession();let r=[];this.socket=await Lm(this.url,{serverName:this.nodeName,authorization:this.authorization});let n;ue.debug?.(`Connecting to ${this.url}, db: ${this.databaseName}, process ${$c.pid}`),this.socket.on("open",()=>{this.socket._socket.unref(),ue[this.isConnected?"info":"warn"]?.(`Connected to ${this.url}, db: ${this.databaseName}`),this.retries=0,this.retryTime=FH,Gc({name:this.nodeName,database:this.databaseName,url:this.url}),this.isConnected=!0,n=w_(this.socket,{database:this.databaseName,subscription:this.subscription,url:this.url,connection:this},{replicates:!0}),this.sessionResolve(n)}),this.socket.on("error",s=>{s.code==="SELF_SIGNED_CERT_IN_CHAIN"?(ue.warn?.(`Can not connect to ${this.url}, this server does not have a certificate authority for the certificate provided by ${this.url}`),s.isHandled=!0):s.code!=="ECONNREFUSED"&&(s.code==="UNABLE_TO_VERIFY_LEAF_SIGNATURE"?ue.error?.(`Can not connect to ${this.url}, the certificate provided by ${this.url} is not trusted, this node needs to be added to the cluster, or a certificate authority needs to be added`):ue.error?.(`Error in connection to ${this.url} due to ${s.message}`)),this.sessionReject(s)}),this.socket.on("close",(s,i)=>{if(this.isConnected&&(yu({name:this.nodeName,database:this.databaseName,url:this.url,finished:this.socket.isFinished}),this.isConnected=!1),this.socket.isFinished){this.isFinished=!0,n?.end(),this.emit("finished");return}if(++this.retries%20===1){let o=i?.toString();ue.warn?.(`${n?"Disconnected from":"Failed to connect to"} ${this.url} (db: "${this.databaseName}"), due to ${o?'"'+o+'" ':""}(code: ${s})`)}n=null,this.resetSession(),setTimeout(()=>{this.connect()},this.retryTime).unref(),this.retryTime+=this.retryTime>>3})}resetSession(){this.session=new Promise((r,n)=>{this.sessionResolve=r,this.sessionReject=n})}subscribe(r,n){this.nodeSubscriptions=r,this.replicateTablesByDefault=n,this.emit("subscriptions-updated",r)}unsubscribe(){this.socket.isFinished=!0,this.socket.close(1008,"No longer subscribed")}getRecord(r){return this.session.then(n=>n.getRecord(r))}};a(w_,"replicateOverWS");a(jb,"ensureTableIfChanged")});var Aa={};Be(Aa,{clearThisNodeName:()=>yne,disableReplication:()=>Sne,enabled_databases:()=>Ra,forEachReplicatedDatabase:()=>pa,getThisNodeId:()=>Mm,getThisNodeName:()=>Xe,getThisNodeUrl:()=>Ea,hostnameToUrl:()=>Bm,lastTimeInAuditStore:()=>T_,monitorNodeCAs:()=>nk,replicateOperation:()=>One,replication_certificate_authorities:()=>Vc,sendOperationToNode:()=>P_,servers:()=>mne,setReplicator:()=>ik,start:()=>gne,startOnMainThread:()=>Ub,subscribeToNode:()=>Ru,unsubscribeFromNode:()=>Am,urlToNodeName:()=>zs});function gne(e){if(e.port||(e.port=Es.default.get(B.OPERATIONSAPI_NETWORK_PORT)),e.securePort||(e.securePort=Es.default.get(B.OPERATIONSAPI_NETWORK_SECUREPORT)),!Xe())throw new Error("Can not load replication without a url (see replication.url in the config)");let t=new Map;for(let n of R_(e))t.set(zs(n.url),n);Tne(e),e={mtls:!0,isOperationsServer:!0,maxPayload:10*1024*1024*1024,...e};let r=je.ws(async(n,s,i,o)=>{if(s.headers.get("sec-websocket-protocol")!=="harperdb-replication-v1")return o(n,s,i);await i,n._socket.unref(),w_(n,e,s?.user),n.on("error",c=>{c.code!=="ECONNREFUSED"&&gr.error("Error in connection to "+this.url,c.message)})},e);e.runFirst=!0,je.http((n,s)=>{if(n.isWebSocket&&n.headers.get("Sec-WebSocket-Protocol")==="harperdb-replication-v1"){!n.authorized&&n._nodeRequest.socket.authorizationError&&gr.error(`Incoming client connection from ${n.ip} did not have valid certificate, you may need turn on enableRootCAs in the config if you are using a publicly signed certificate, or add the CA to the server's trusted CAs`,n._nodeRequest.socket.authorizationError);let i=mr().primaryStore;if(n.authorized&&n.peerCertificate.subject){let o=n.peerCertificate.subject,c=o&&(i.get(o.CN)||t.get(o.CN));c?n.user=c:gr.warn(`No node found for certificate common name ${o.CN}, available nodes are ${Array.from(i.getRange({}).filter(({value:l})=>l).map(({key:l})=>l)).join(", ")} and routes ${Array.from(t.keys()).join(", ")}, connection will require credentials.`)}else{let o=i.get(n.ip)||t.get(n.ip);o?n.user=o:gr.warn(`No node found for IP address ${n.ip}, available nodes are ${Array.from(new Set([...i.getKeys(),...t.keys()])).join(", ")}, connection will require credentials.`)}}return s(n)},e);for(let n of r)if(n.secureContexts){let s=a(()=>{let i=new Set(n.secureContexts.values());n.defaultContext&&i.add(n.defaultContext);for(let o of i)try{let c=Array.from(Vc);o.options.availableCAs&&c.push(...o.options.availableCAs.values());let l={...o.options,ca:c};o.updatedContext=xm.createSecureContext(l)}catch(c){gr.error("Error creating replication TLS config",c)}},"updateContexts");n.secureContextsListeners.push(s),nk(s),Es.default.get(B.REPLICATION_ENABLEROOTCAS)!==!1&&s()}}function nk(e){let t=0;Tu(r=>{r?.ca&&(Vc.add(r.ca),Vc.size!==t&&(t=Vc.size,e?.()))})}function Sne(e=!0){rk=e}function Tne(e){rk||(Je(),Ra=e.databases,pa(e,(t,r)=>{if(!t){let n=e.databaseSubscriptions||ya;for(let[s,i]of C_){let o=i.get(r);o&&(o.subscribe([],!1),i.delete(r))}n.delete(r);return}for(let n in t){let s=t[n];ik(r,s,e),rO.get(s)?.forEach(i=>i(s))}}))}function ik(e,t,r){if(!t)return console.error(`Attempt to replicate non-existent table ${t.name} from database ${e}`);if(t.replicate===!1||t.sources?.some(s=>s.isReplicator))return;let n;t.sourcedFrom(class sk extends qr{static{a(this,"Replicator")}static connection;static subscription;static async subscribe(){let i=r.databaseSubscriptions||ya,o=i.get(e),c=o?.tableById||[];c[t.tableId]=t;let l=o?.ready;if(gr.trace("Setting up replicator subscription to database",e),!o?.auditStore)return this.subscription=o=new Mn,i.set(e,o),o.tableById=c,o.auditStore=t.auditStore,o.dbisDB=t.dbisDB,o.databaseName=e,l&&l(o),o;this.subscription=o}static subscribeOnThisThread(i,o){return!0}static async load(i){if(i){let o=i.residencyId,c=i.residency||t.dbisDB.get([Symbol.for("residency_by_id"),o]);if(c){let l,u=new Set;do{let f;for(let h of c){let _=Ane(h,sk.subscription,e);_?.isConnected&&!u.has(_)&&(!f||_.latency<f.latency)&&(f=_)}if(!f)throw l||new ek.ServerError("No connection to any other nodes are available",502);let d={requestId:Ene++,table:t,entry:i,id:i.key};u.add(f);try{return await f.getRecord(d)}catch(h){if(f.isConnected)throw h;gr.warn("Error in load from node",Um,h),l||(l=h)}}while(!0)}}}static isReplicator=!0},{intermediateSource:!0})}function ok(e,t,r,n,s){let i=C_.get(e);i||C_.set(e,i=new Map);let o=i.get(r);if(o)return o;if(t)return i.set(r,o=new N_(e,t,r,n,s)),o.connect(),o.once("finished",()=>i.delete(r)),o}function Ane(e,t,r){let n=jH.get(e)?.get(r);if(n)return n;let s=mr().primaryStore.get(e);return s?.url&&(n=ok(s.url,t,r,e,s.authorization),jH.set(e,C_.get(s.url))),n}async function P_(e,t,r){r||(r={}),r.serverName=e.name;let n=await Lm(e.url,r),s=w_(n,{},{});return new Promise((i,o)=>{n.on("open",()=>{i(s.sendOperation(t))}),n.on("error",c=>{o(c)}),n.on("close",c=>{gr.info("Sending operation connection to "+e.url+" closed",c)})}).finally(()=>{n.close()})}function Ru(e){try{tk.isMainThread&&gr.trace("Subscribing on main thread (should not happen in multi-threaded instance)",e.nodes[0].url,e.database);let t=ya.get(e.database);if(!t){let n;t=new Promise(s=>{gr.info("Waiting for subscription to database "+e.database),n=s}),t.ready=n,ya.set(e.database,t)}let r=ok(e.nodes[0].url,t,e.database,e.nodes[0].name,e.nodes[0].authorization);e.nodes[0].name===void 0?r.tentativeNode=e.nodes[0]:r.nodeName=e.nodes[0].name,r.subscribe(e.nodes.filter(n=>A_(n,e.database)),e.replicateByDefault)}catch(t){gr.error("Error in subscription to node",e.nodes[0]?.url,t)}}async function Am({name:e,url:t,database:r}){gr.trace("Unsubscribing from node",e,t,r,"nodes",Array.from(mr().primaryStore.getRange({})));let n=C_.get(t);if(n){let s=n.get(r);s&&(s.unsubscribe(),n.delete(r))}}function Rne(){if(cO!==void 0)return cO;let e=Es.default.get(B.OPERATIONSAPI_TLS_CERTIFICATE)||Es.default.get(B.TLS_CERTIFICATE);if(e)return cO=new XH.X509Certificate((0,ZH.readFileSync)(e)).subject.match(/CN=(.*)/)?.[1]??null}function Xe(){return Um||(Um=Es.default.get("replication_hostname")??zs(Es.default.get("replication_url"))??Rne()??JH("operationsapi_network_secureport")??JH("operationsapi_network_port")??"127.0.0.1")}function yne(){Um=void 0}function JH(e){let t=Es.default.get(e),r=t?.lastIndexOf?.(":");if(r>0)return t.slice(0,r)}function vm(e){let t=Es.default.get(e),r=t?.lastIndexOf?.(":");return r>0?+t.slice(r+1).replace(/[\[\]]/g,""):+t}function Mm(e){return S_(e)?.[Xe()]}function Ea(){let e=Es.default.get("replication_url");return e||Bm(Xe())}function Bm(e){let t=vm("replication_port");if(t)return`ws://${e}:${t}`;if(t=vm("replication_secureport"),t)return`wss://${e}:${t}`;if(t=vm("operationsapi_network_port"),t)return`ws://${e}:${t}`;if(t=vm("operationsapi_network_secureport"),t)return`wss://${e}:${t}`}function zs(e){if(e)return new URL(e).hostname}function pa(e,t){for(let n of Object.getOwnPropertyNames($e))r(n);return I_(n=>{r(n)}),Yc((n,s)=>{r(n.databaseName)});function r(n){let s=$e[n];gr.trace("Checking replication status of ",n,e?.databases),e?.databases===void 0||e.databases==="*"||e.databases.includes(n)||e.databases.some?.(i=>i.name===n)||!s?t(s,n,!0):bne(n)&&t(s,n,!1)}a(r,"forDatabase")}function bne(e){let t=$e[e];for(let r in t)if(t[r].replicate)return!0}function T_(e){for(let t of e.getKeys({limit:1,reverse:!0}))return t}async function One(e){let t={message:""};if(e.replicated){e.replicated=!1,gr.trace?.("Replicating operation",e.operation,"to nodes",je.nodes.map(n=>n.name));let r=await Promise.allSettled(je.nodes.map(n=>P_(n,e)));t.replicated=r.map((n,s)=>{let i=n.status==="rejected"?{status:"failed",reason:n.reason.toString()}:n.value;return i.node=je.nodes[s]?.name,i})}return t}var Es,gr,XH,ZH,xm,ek,tk,rk,Ene,mne,Vc,Ra,C_,jH,cO,Um,_s=be(()=>{De();ta();Ul();nO();$r();Es=U(ce()),gr=U(j()),XH=require("crypto"),ZH=require("fs");y_();Fc();H();Lb();xm=U(require("node:tls")),ek=U(_e()),tk=require("worker_threads"),Ene=1,mne=[],Vc=Es.default.get(B.REPLICATION_ENABLEROOTCAS)!==!1?new Set(xm.rootCertificates):new Set;a(gne,"start");a(nk,"monitorNodeCAs");a(Sne,"disableReplication");a(Tne,"assignReplicationSource");a(ik,"setReplicator");C_=new Map;a(ok,"getConnection");jH=new Map;a(Ane,"getConnectionByName");a(P_,"sendOperationToNode");a(Ru,"subscribeToNode");a(Am,"unsubscribeFromNode");a(Rne,"getCommonNameFromCert");a(Xe,"getThisNodeName");a(yne,"clearThisNodeName");Object.defineProperty(je,"hostname",{get(){return Xe()}});a(JH,"getHostFromListeningPort");a(vm,"getPortFromListeningPort");a(Mm,"getThisNodeId");je.replication={getThisNodeId:Mm,exportIdMapping:S_};a(Ea,"getThisNodeUrl");a(Bm,"hostnameToUrl");a(zs,"urlToNodeName");a(pa,"forEachReplicatedDatabase");a(bne,"hasExplicitlyReplicatedTable");a(T_,"lastTimeInAuditStore");a(One,"replicateOperation")});var Gm=P((jwe,dk)=>{"use strict";var Iu=tE(),Cu=TB(),Nne=j(),wne=require("uuid").v4,Qwe=require("clone"),km=co(),Pu=(H(),D(q)),Ine=require("util"),ba=kn(),{handleHDBError:An,hdb_errors:Cne}=_e(),{HDB_ERROR_MSGS:Hm,HTTP_STATUS_CODES:Rn}=Cne,{SchemaEventMsg:Fm}=Vs(),ak=Er(),{getDatabases:Pne}=(De(),D(nt)),{transformReq:Du}=ae(),{replicateOperation:ck}=(_s(),D(Aa));dk.exports={createSchema:Dne,createSchemaStructure:lk,createTable:Lne,createTableStructure:uk,createAttribute:Bne,dropSchema:Mne,dropTable:vne,dropAttribute:Une,getBackup:Hne};async function Dne(e){let t=await lk(e);return km.signalSchemaChange(new Fm(process.pid,e.operation,e.schema)),t}a(Dne,"createSchema");async function lk(e){let t=Iu.schema_object(e);if(t)throw An(t,t.message,Rn.BAD_REQUEST,void 0,void 0,!0);if(Du(e),!await Cu.checkSchemaExists(e.schema))throw An(new Error,Hm.SCHEMA_EXISTS_ERR(e.schema),Rn.BAD_REQUEST,Pu.LOG_LEVELS.ERROR,Hm.SCHEMA_EXISTS_ERR(e.schema),!0);return await ba.createSchema(e),`database '${e.schema}' successfully created`}a(lk,"createSchemaStructure");async function Lne(e){return Du(e),e.hash_attribute=e.primary_key??e.hash_attribute,await uk(e)}a(Lne,"createTable");async function uk(e){let t=Iu.create_table_object(e);if(t)throw An(t,t.message,Rn.BAD_REQUEST,void 0,void 0,!0);if(Iu.validateTableResidence(e.residence),!await Cu.checkSchemaTableExists(e.schema,e.table))throw An(new Error,Hm.TABLE_EXISTS_ERR(e.schema,e.table),Rn.BAD_REQUEST,Pu.LOG_LEVELS.ERROR,Hm.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:wne(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await ba.createTable(n,e);else throw An(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Rn.BAD_REQUEST);else await ba.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(uk,"createTableStructure");async function Mne(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=Iu.schema_object(e),n=t??r;if(n)throw An(n,n.message,Rn.BAD_REQUEST,void 0,void 0,!0);Du(e);let s=await Cu.checkSchemaExists(e.schema);if(s)throw An(new Error,s,Rn.NOT_FOUND,Pu.LOG_LEVELS.ERROR,s,!0);let i=await Cu.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);await ba.dropSchema(e),km.signalSchemaChange(new Fm(process.pid,e.operation,e.schema)),await ak.purgeSchemaTableStreams(e.schema,o);let c=await ck(e);return c.message=`successfully deleted '${e.schema}'`,c}a(Mne,"dropSchema");async function vne(e){let t=Iu.table_object(e);if(t)throw An(t,t.message,Rn.BAD_REQUEST,void 0,void 0,!0);Du(e);let r=await Cu.checkSchemaTableExists(e.schema,e.table);if(r)throw An(new Error,r,Rn.NOT_FOUND,Pu.LOG_LEVELS.ERROR,r,!0);await ba.dropTable(e),await ak.purgeTableStream(e.schema,e.table);let n=await ck(e);return n.message=`successfully deleted table '${e.schema}.${e.table}'`,n}a(vne,"dropTable");async function Une(e){let t=Iu.attribute_object(e);if(t)throw An(t,t.message,Rn.BAD_REQUEST,void 0,void 0,!0);Du(e);let r=await Cu.checkSchemaTableExists(e.schema,e.table);if(r)throw An(new Error,r,Rn.NOT_FOUND,Pu.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw An(new Error,"You cannot drop a hash attribute",Rn.BAD_REQUEST,void 0,void 0,!0);if(Pu.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw An(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Rn.BAD_REQUEST,void 0,void 0,!0);try{return await ba.dropAttribute(e),xne(e),km.signalSchemaChange(new Fm(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw Nne.error(`Got an error deleting attribute ${Ine.inspect(e)}.`),n}}a(Une,"dropAttribute");function xne(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(xne,"dropAttributeFromGlobal");async function Bne(e){Du(e);let t=Pne()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw An(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Rn.BAD_REQUEST,void 0,void 0,!0);return await ba.createAttribute(e),km.signalSchemaChange(new Fm(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(Bne,"createAttribute");function Hne(e){return ba.getBackup(e)}a(Hne,"getBackup")});var _k=P((Xwe,fk)=>{"use strict";var{OPERATIONS_ENUM:kne}=(H(),D(q)),lO=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=kne.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};fk.exports=lO});var uO=P((tIe,gk)=>{"use strict";var Fne=kn(),eIe=_k(),qm=ae(),$m=(H(),D(q)),Gne=ce(),{handleHDBError:hk,hdb_errors:qne}=_e(),{HDB_ERROR_MSGS:pk,HTTP_STATUS_CODES:Ek}=qne,$ne=Object.values($m.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),mk="To use this operation audit log must be enabled in harperdb-config.yaml";gk.exports=Vne;async function Vne(e){if(qm.isEmpty(e.schema))throw new Error(pk.SCHEMA_REQUIRED_ERR);if(qm.isEmpty(e.table))throw new Error(pk.TABLE_REQUIRED_ERR);if(!Gne.get($m.CONFIG_PARAMS.LOGGING_AUDITLOG))throw hk(new Error,mk,Ek.BAD_REQUEST,$m.LOG_LEVELS.ERROR,mk,!0);let t=qm.checkSchemaTableExist(e.schema,e.table);if(t)throw hk(new Error,t,Ek.NOT_FOUND,$m.LOG_LEVELS.ERROR,t,!0);if(!qm.isEmpty(e.search_type)&&$ne.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await Fne.readAuditLog(e)}a(Vne,"readAuditLog")});var Tk=P((nIe,Sk)=>{"use strict";var{OPERATIONS_ENUM:Kne}=(H(),D(q)),dO=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Kne.GET_BACKUP,this.schema=t,this.table=r}};Sk.exports=dO});var yk=P((aIe,Rk)=>{"use strict";var Yne=kn(),iIe=Tk(),fO=ae(),Wne=(H(),D(q)),oIe=ce(),{handleHDBError:zne,hdb_errors:Qne}=_e(),{HDB_ERROR_MSGS:Ak,HTTP_STATUS_CODES:jne}=Qne;Rk.exports=Jne;async function Jne(e){if(fO.isEmpty(e.schema))throw new Error(Ak.SCHEMA_REQUIRED_ERR);if(fO.isEmpty(e.table))throw new Error(Ak.TABLE_REQUIRED_ERR);let t=fO.checkSchemaTableExist(e.schema,e.table);if(t)throw zne(new Error,t,jne.NOT_FOUND,Wne.LOG_LEVELS.ERROR,t,!0);return await Yne.getBackup(read_audit_log_object)}a(Jne,"getBackup")});var wk=P((lIe,Nk)=>{"use strict";var Xne=ce(),Oa=require("joi"),Zne=pt(),bk=require("moment"),ese=require("fs-extra"),_O=require("path"),tse=require("lodash"),D_=(H(),D(q)),{LOG_LEVELS:Wc}=(H(),D(q)),rse="YYYY-MM-DD hh:mm:ss",nse=_O.resolve(__dirname,"../logs");Nk.exports=function(e){return Zne.validateBySchema(e,sse)};var sse=Oa.object({from:Oa.custom(Ok),until:Oa.custom(Ok),level:Oa.valid(Wc.NOTIFY,Wc.FATAL,Wc.ERROR,Wc.WARN,Wc.INFO,Wc.DEBUG,Wc.TRACE),order:Oa.valid("asc","desc"),limit:Oa.number().min(1),start:Oa.number().min(0),log_name:Oa.custom(ise)});function Ok(e,t){if(bk(e,bk.ISO_8601).format(rse)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(Ok,"validateDatetime");function ise(e,t){if(tse.invert(D_.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=Xne.get(D_.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?D_.LOG_NAMES.HDB:e,i=s===D_.LOG_NAMES.INSTALL?_O.join(nse,D_.LOG_NAMES.INSTALL):_O.join(n,s);return ese.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(ise,"validateReadLogPath")});var pO=P((dIe,Ck)=>{"use strict";var Vm=(H(),D(q)),ose=j(),ase=ce(),cse=wk(),hO=require("path"),Ik=require("fs-extra"),{once:lse}=require("events"),{handleHDBError:use,hdb_errors:dse}=_e(),{PACKAGE_ROOT:fse}=_t(),_se=hO.join(fse,"logs"),hse=1e3,pse=200;Ck.exports=Ese;async function Ese(e){let t=cse(e);if(t)throw use(t,t.message,dse.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=ase.get(Vm.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e.log_name===void 0?Vm.LOG_NAMES.HDB:e.log_name,s=n===Vm.LOG_NAMES.INSTALL?hO.join(_se,Vm.LOG_NAMES.INSTALL):hO.join(r,n),i=e.level!==void 0,o=i?e.level:void 0,c=e.from!==void 0,l=c?new Date(e.from):void 0,u=e.until!==void 0,f=u?new Date(e.until):void 0,d=e.limit===void 0?hse:e.limit,h=e.order===void 0?void 0:e.order,_=e.start===void 0?0:e.start,p=_+d,S=0;h==="desc"&&!l&&!f&&(S=Math.max(Ik.statSync(s).size-(p+5)*pse,0));let g=Ik.createReadStream(s,{start:S});g.on("error",F=>{ose.error(F)});let T=0,m=[],A="",w;g.on("data",F=>{let G=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;F=A+F;let K=0,ee;for(;(ee=G.exec(F))&&!g.destroyed;){w&&(w.message=F.slice(K,ee.index),M(w));let[ie,X,re]=ee,z=re.split("] ["),he=z[0],Te=z[1];z.splice(0,2),w={timestamp:X,thread:he,level:Te,tags:z,message:""},K=ee.index+ie.length}A=F.slice(K)}),g.on("end",F=>{g.destroyed||w&&(w.message=A.trim(),M(w))}),g.resume();function M(F){let G,K,ee;switch(!0){case(i&&c&&u):G=new Date(F.timestamp),K=new Date(l),ee=new Date(f),F.level===o&&G>=K&&G<=ee&&T<_?T++:F.level===o&&G>=K&&G<=ee&&(Na(F,h,m),T++,T===p&&g.destroy());break;case(i&&c):G=new Date(F.timestamp),K=new Date(l),F.level===o&&G>=K&&T<_?T++:F.level===o&&G>=K&&(Na(F,h,m),T++,T===p&&g.destroy());break;case(i&&u):G=new Date(F.timestamp),ee=new Date(f),F.level===o&&G<=ee&&T<_?T++:F.level===o&&G<=ee&&(Na(F,h,m),T++,T===p&&g.destroy());break;case(c&&u):G=new Date(F.timestamp),K=new Date(l),ee=new Date(f),G>=K&&G<=ee&&T<_?T++:G>=K&&G<=ee&&(Na(F,h,m),T++,T===p&&g.destroy());break;case i:F.level===o&&T<_?T++:F.level===o&&(Na(F,h,m),T++,T===p&&g.destroy());break;case c:G=new Date(F.timestamp),K=new Date(l),G>=K&&T<_?T++:G>=K&&T>=_&&(Na(F,h,m),T++,T===p&&g.destroy());break;case u:G=new Date(F.timestamp),ee=new Date(f),G<=ee&&T<_?T++:G<=ee&&T>=_&&(Na(F,h,m),T++,T===p&&g.destroy());break;default:T<_?T++:(Na(F,h,m),T++,T===p&&g.destroy())}}return a(M,"onLogMessage"),await lse(g,"close"),m}a(Ese,"readLog");function Na(e,t,r){t==="desc"?mse(e,r):t==="asc"?gse(e,r):r.push(e)}a(Na,"pushLineToResult");function mse(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(mse,"insertDescending");function gse(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(gse,"insertAscending")});var Km=P((mIe,Mk)=>{"use strict";var EO=require("joi"),{string:Lu,boolean:Pk,date:Sse}=EO.types(),Tse=pt(),{validateSchemaExists:_Ie,validateTableExists:hIe,validateSchemaName:pIe}=Ti(),Ase=(H(),D(q)),Rse=Ot(),Dk=ce();Dk.initSync();var EIe=Lu.invalid(Dk.get(Ase.CONFIG_PARAMS.CLUSTERING_NODENAME)??"node_name").pattern(Rse.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),Lk={operation:Lu.valid("add_node","update_node","set_node_replication"),node_name:Lu.optional(),subscriptions:EO.array().items({table:Lu.optional(),schema:Lu.optional(),database:Lu.optional(),subscribe:Pk.required(),publish:Pk.required().custom(bse),start_time:Sse.iso()})};function yse(e){return Tse.validateBySchema(e,EO.object(Lk))}a(yse,"addUpdateNodeValidator");function bse(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(bse,"checkForFalsy");Mk.exports={addUpdateNodeValidator:yse,validation_schema:Lk}});var Mu=P((SIe,vk)=>{"use strict";var mO=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},gO=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};vk.exports={Node:mO,NodeSubscription:gO}});var xk=P((AIe,Uk)=>{"use strict";var Ose=(H(),D(q)).OPERATIONS_ENUM,SO=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=Ose.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};Uk.exports=SO});var L_=P((yIe,Bk)=>{"use strict";var TO=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},AO=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)}};Bk.exports={RemotePayloadObject:TO,RemotePayloadSubscription:AO}});var kk=P((OIe,Hk)=>{"use strict";var RO=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}};Hk.exports=RO});var Gk=P((DIe,Fk)=>{"use strict";var Nse=kk(),wIe=Mt(),IIe=at(),wse=j(),{getSchemaPath:CIe,getTransactionAuditStorePath:PIe}=ht(),{getDatabases:Ise}=(De(),D(nt));Fk.exports=Cse;async function Cse(e){let t=new Nse;try{let r=Ise()[e.schema]?.[e.name],n=r.primaryStore.getStats(),s=r.auditStore?.getStats();t.schema=e.schema,t.table=e.name,t.record_count=n.entryCount,t.transaction_log_record_count=s.entryCount}catch(r){wse.warn(`unable to stat table dbi due to ${r}`)}return t}a(Cse,"lmdbGetTableSize")});var $k=P((MIe,qk)=>{"use strict";var yO=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}};qk.exports=yO});var Uu=P((kIe,Wk)=>{"use strict";var Pse=require("fs-extra"),Dse=require("path"),Jr=require("systeminformation"),wa=j(),Vk=Er(),UIe=Ot(),vu=(H(),D(q)),Lse=Gk(),Mse=oo(),{getThreadInfo:Kk}=rt(),M_=ce();M_.initSync();var vse=$k(),{openEnvironment:xIe}=at(),{getSchemaPath:BIe}=ht(),{database:HIe,databases:bO}=(De(),D(nt)),Ym;Wk.exports={getHDBProcessInfo:IO,getNetworkInfo:PO,getDiskInfo:CO,getMemoryInfo:wO,getCPUInfo:NO,getTimeInfo:OO,getSystemInformation:DO,systemInformation:Use,getTableSize:LO,getMetrics:MO};function OO(){return Jr.time()}a(OO,"getTimeInfo");async function NO(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:l,cache:u,...f}=await Jr.cpu();f.cpu_speed=await Jr.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:h,raw_currentload_irq:_,raw_currentload_nice:p,raw_currentload_system:S,raw_currentload_user:g,cpus:T,...m}=await Jr.currentLoad();return m.cpus=[],T.forEach(A=>{let{raw_load:w,raw_load_idle:M,raw_load_irq:F,raw_load_nice:G,raw_load_system:K,raw_load_user:ee,...ie}=A;m.cpus.push(ie)}),f.current_load=m,f}catch(e){return wa.error(`error in getCPUInfo: ${e}`),{}}}a(NO,"getCPUInfo");async function wO(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await Jr.mem();return Object.assign(s,process.memoryUsage())}catch(e){return wa.error(`error in getMemoryInfo: ${e}`),{}}}a(wO,"getMemoryInfo");async function IO(){let e={core:[],clustering:[]};try{let t=await Jr.processes(),r;try{r=Number.parseInt(await Pse.readFile(Dse.join(M_.get(vu.CONFIG_PARAMS.ROOTPATH),vu.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===vu.NODE_ERROR_CODES.ENOENT)wa.warn("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB. This could be because HarperDB is not running.");else throw n}t.list.forEach(n=>{n.pid===r?e.core.push(n):n.name==="nats-server"&&e.clustering.push(n)});for(let n of e.core)for(let s of t.list)s.pid===n.parentPid&&(s.name==="PM2"||s.command==="PM2")&&(n.parent="PM2");return e}catch(t){return wa.error(`error in getHDBProcessInfo: ${t}`),e}}a(IO,"getHDBProcessInfo");async function CO(){let e={};try{if(!M_.get(vu.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_DISK))return e;let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await Jr.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:l,...u}=await Jr.fsStats();return e.read_write=u,e.size=await Jr.fsSize(),e}catch(t){return wa.error(`error in getDiskInfo: ${t}`),e}}a(CO,"getDiskInfo");async function PO(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return M_.get(vu.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_NETWORK)&&(e.default_interface=await Jr.networkInterfaceDefault(),e.latency=await Jr.inetChecksite("google.com"),(await Jr.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:o,dhcp:c,dnsSuffix:l,ieee8021xAuth:u,ieee8021xState:f,carrier_changes:d,...h}=n;e.interfaces.push(h)}),(await Jr.networkStats()).forEach(n=>{let{rx_sec:s,tx_sec:i,ms:o,...c}=n;e.stats.push(c)})),e}catch(t){return wa.error(`error in getNetworkInfo: ${t}`),e}}a(PO,"getNetworkInfo");async function DO(){if(Ym!==void 0)return Ym;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await Jr.osInfo();e=c;let l=await Jr.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,Ym=e,Ym}catch(t){return wa.error(`error in getSystemInformation: ${t}`),e}}a(DO,"getSystemInformation");async function LO(){let e=[],t=await Mse.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await Lse(n));return e}a(LO,"getTableSize");async function MO(){let e={};for(let t in bO){let r=e[t]={},n=r.tables={};for(let s in bO[t])try{let i=bO[t][s];if(!r.readers&&(Object.assign(r,i.primaryStore.rootStore.getStats()),delete r.root,r.readers=i.primaryStore.rootStore.readerList().split(/\n\s+/).slice(1).map(l=>{let[u,f,d]=l.trim().split(" ");return{pid:u,thread:f,txnid:d}}),i.auditStore)){let{treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:f,entryCount:d,overflowPages:h}=i.auditStore.getStats();r.audit={treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:f,entryCount:d,overflowPages:h}}let o=i.primaryStore.getStats(),c={};for(let l of["treeDepth","treeBranchPageCount","treeLeafPageCount","entryCount","overflowPages"])c[l]=o[l];n[s]=c}catch(i){wa.notify(`Error getting stats for table ${s}: ${i}`)}}return e}a(MO,"getMetrics");async function Yk(){if(M_.get(vu.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await Vk.getNATSReferences(),t=await Vk.listStreams(),r=[];for(let n of t){let s=[],i=await e.consumers.list(n.config.name);for await(let c of i)s.push({name:c.name,created:c.created,num_ack_pending:c.num_ack_pending,num_redelivered:c.num_redelivered,num_waiting:c.num_waiting,num_pending:c.num_pending});let o={stream_name:n.config.name,database:n.config.subjects[0].split(".")[1],table:n.config.subjects[0].split(".")[2],state:n.state,consumers:s};r.push(o)}return r}}a(Yk,"getNatsStreamInfo");async function Use(e){let t=new vse;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await DO(),t.time=OO(),t.cpu=await NO(),t.memory=await wO(),t.disk=await CO(),t.network=await PO(),t.harperdb_processes=await IO(),t.table_size=await LO(),t.metrics=await MO(),t.threads=await Kk(),t.replication=await Yk(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await DO();break;case"time":t.time=OO();break;case"cpu":t.cpu=await NO();break;case"memory":t.memory=await wO();break;case"disk":t.disk=await CO();break;case"network":t.network=await PO();break;case"harperdb_processes":t.harperdb_processes=await IO();break;case"table_size":t.table_size=await LO();break;case"database_metrics":case"metrics":t.metrics=await MO();break;case"threads":t.threads=await Kk();break;case"replication":t.replication=await Yk();break;default:break}return t}a(Use,"systemInformation")});var Eo=P(($Ie,Jk)=>{"use strict";var xse=hn(),vO=ae(),Bse=require("util"),zc=(H(),D(q)),zk=ce();zk.initSync();var Hse=db(),Qk=Kr(),{Node:GIe,NodeSubscription:qIe}=Mu(),kse=iu(),Fse=xk(),{RemotePayloadObject:Gse,RemotePayloadSubscription:qse}=L_(),{handleHDBError:$se,hdb_errors:Vse}=_e(),{HTTP_STATUS_CODES:Kse,HDB_ERROR_MSGS:Yse}=Vse,Wse=Ks(),zse=Uu(),{packageJson:Qse}=_t(),{getDatabases:jse}=(De(),D(nt)),Jse=Bse.promisify(Hse.authorize),Xse=Qk.searchByHash,Zse=Qk.searchByValue;Jk.exports={authHeaderToUser:eie,isEmpty:tie,getNodeRecord:rie,upsertNodeRecord:nie,buildNodePayloads:sie,checkClusteringEnabled:iie,getAllNodeRecords:oie,getSystemInfo:aie,reverseSubscription:jk};async function eie(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await Jse(t,null),e}a(eie,"authHeaderToUser");function tie(e){return e==null}a(tie,"isEmpty");async function rie(e){let t=new kse(zc.SYSTEM_SCHEMA_NAME,zc.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return Xse(t)}a(rie,"getNodeRecord");async function nie(e){let t=new Fse(zc.SYSTEM_SCHEMA_NAME,zc.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return xse.upsert(t)}a(nie,"upsertNodeRecord");function jk(e){if(vO.isEmpty(e.subscribe)||vO.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(jk,"reverseSubscription");function sie(e,t,r,n){let s=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:l,table:u}=c,f=vO.getTableHashAttribute(l,u),{subscribe:d,publish:h}=jk(c),_=jse()[l]?.[u],p=new qse(l,u,f,h,d,c.start_time,_.schemaDefined?_.attributes:void 0);s.push(p)}return new Gse(r,t,s,n)}a(sie,"buildNodePayloads");function iie(){if(!zk.get(zc.CONFIG_PARAMS.CLUSTERING_ENABLED))throw $se(new Error,Yse.CLUSTERING_NOT_ENABLED,Kse.BAD_REQUEST,void 0,void 0,!0)}a(iie,"checkClusteringEnabled");async function oie(){let e=new Wse(zc.SYSTEM_SCHEMA_NAME,zc.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await Zse(e))}a(oie,"getAllNodeRecords");async function aie(){let e=await zse.getSystemInformation();return{hdb_version:Qse.version,node_version:e.node_version,platform:e.platform}}a(aie,"getSystemInfo")});var UO=P((KIe,iF)=>{"use strict";var Wm=Er(),Xk=ae(),Zk=Ot(),eF=(H(),D(q)),zm=j(),tF=Gm(),cie=zf(),{RemotePayloadObject:lie}=L_(),{handleHDBError:rF,hdb_errors:uie}=_e(),{HTTP_STATUS_CODES:nF}=uie,{NodeSubscription:sF}=Mu();iF.exports=die;async function die(e,t){let r;try{r=await Wm.request(`${t}.${Zk.REQUEST_SUFFIX}`,new lie(eF.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),zm.trace("Response from remote describe all request:",r)}catch(o){zm.error(`addNode received error from describe all request to remote node: ${o}`);let c=Wm.requestErrorHandler(o,"add_node",t);throw rF(new Error,c,nF.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===Zk.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw rF(new Error,o,nF.INTERNAL_SERVER_ERROR,"error",o)}let n=r.message,s=[],i=[];for(let o of e){let{table:c}=o,l=o.database??o.schema??"data";if(l===eF.SYSTEM_SCHEMA_NAME){await Wm.createLocalTableStream(l,c);let p=new sF(l,c,o.publish,o.subscribe);p.start_time=o.start_time,i.push(p);continue}let u=Xk.doesSchemaExist(l),f=n[l]!==void 0,d=c?Xk.doesTableExist(l,c):!0,h=c?n?.[l]?.[c]!==void 0:!0;if(!u&&!f||!d&&!h){s.push(o);continue}if(!u&&f&&(zm.trace(`addNode creating schema: ${l}`),await tF.createSchema({operation:"create_schema",schema:l})),!d&&h){zm.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let p=new cie(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(p.attributes=n[l][c].attributes),await tF.createTable(p)}await Wm.createLocalTableStream(l,c);let _=new sF(l,c,o.publish,o.subscribe);_.start_time=o.start_time,i.push(_)}return{added:i,skipped:s}}a(die,"reviewSubscriptions")});var Qc={};Be(Qc,{addNodeBack:()=>Eie,removeNodeBack:()=>mie,setNode:()=>pie});async function pie(e){e.node_name&&!e.hostname&&(e.hostname=e.node_name),e.verify_tls!==void 0&&(e.rejectUnauthorized=e.verify_tls);let{url:t,hostname:r}=e;t?r||(r=e.hostname=zs(t)):t=Bm(r);let n=(0,aF.validateBySchema)(e,hie);if(n)throw(0,mo.handleHDBError)(n,n.message,_ie.BAD_REQUEST,void 0,void 0,!0);if(e.operation==="remove_node"){if(!t&&!r)throw new mo.ClientError("url or hostname is required for remove_node operation");let _=r,p=mr(),S=await p.get(_);if(!S)throw new mo.ClientError(_+" does not exist");try{await P_({url:S.url},{operation:$t.REMOVE_NODE_BACK,name:S?.subscriptions?.length>0?Xe():_},void 0)}catch(g){zn.warn(`Error removing node from target node ${_}, if it is offline and we be online in the future, you may need to clean up this node manually, or retry:`,g)}return await p.delete(_),`Successfully removed '${_}' from cluster`}if(!t)throw new mo.ClientError("url required for this operation");let s=Ea();if(s==null)throw new mo.ClientError("replication url is missing from harperdb-config.yaml");let i,o,c;if(t?.startsWith("wss:")){i=await(0,ms.getReplicationCert)();let _=await(0,ms.getReplicationCertAuth)();if(!i)throw new Error("Unable to find a certificate to use for replication");i.options.is_self_signed?(o=await(0,ms.createCsr)(),zn.info("Sending CSR to target node:",t)):_&&(c=_.certificate,zn.info("Sending CA named",_.name,"to target node",t))}let l={operation:$t.ADD_NODE_BACK,hostname:(0,cF.get)(B.REPLICATION_HOSTNAME),target_hostname:r,url:s,csr:o,cert_auth:c,authorization:e.retain_authorization?e.authorization:null};if(e.subscriptions?l.subscriptions=e.subscriptions.map(oF):l.subscriptions=null,e.hasOwnProperty("subscribe")||e.hasOwnProperty("publish")){let _=oF(e);l.subscribe=_.subscribe,l.publish=_.publish}e?.authorization?.username&&e?.authorization?.password&&(e.authorization="Basic "+Buffer.from(e.authorization.username+":"+e.authorization.password).toString("base64"));let u,f;try{u=await P_({url:t},l,e)}catch(_){_.message=`Error returned from ${t}: `+_.message,zn.warn("Error adding node:",t,"to cluster:",_),f=_}if(o&&(!u?.certificate||!u?.certificate?.includes?.("BEGIN CERTIFICATE")))throw f?(f.message+=" and connection was required to sign certificate",f):new Error(`Unexpected certificate signature response from node ${t} response: ${JSON.stringify(u)}`);o&&(zn.info("CSR response received from node:",t,"saving certificate and CA in hdb_certificate"),await(0,ms.setCertTable)({name:fie.certificateFromPem(u.signingCA).issuer.getField("CN").value,certificate:u.signingCA,is_authority:!0}),u.certificate&&await(0,ms.setCertTable)({name:Xe(),uses:["https","operations","wss"],certificate:u.certificate,private_key_name:i?.options?.key_file,is_authority:!1,is_self_signed:!1}),c=u.signingCA);let d={url:t,ca:u?.usingCA};if(e.hostname&&(d.name=e.hostname),e.subscriptions?d.subscriptions=e.subscriptions:d.replicates=!0,e.start_time&&(d.start_time=typeof e.start_time=="string"?new Date(e.start_time).getTime():e.start_time),e.retain_authorization&&(d.authorization=e.authorization),d.replicates){let _={url:s,ca:c,replicates:!0,subscriptions:null};e.retain_authorization&&(_.authorization=e.authorization),e.start_time&&(_.start_time=e.start_time),await ho(Xe(),_)}await ho(u?u.nodeName:d.name??zs(t),d);let h;return e.operation==="update_node"?h=`Successfully updated '${t}'`:h=`Successfully added '${t}' to cluster`,f&&(h+=" but there was an error updating target node: "+f.message),h}async function Eie(e){zn.trace("addNodeBack received request:",e);let t=await(0,ms.signCertificate)(e),r;e.csr?(r=t.signingCA,zn.info("addNodeBack received CSR from node:",e.url,"this node will use and respond with CA that was used to issue CSR")):(r=e?.cert_auth,zn.info("addNodeBack received CA from node:",e.url));let n={url:e.url,ca:r};e.subscriptions?n.subscriptions=e.subscriptions:(n.replicates=!0,n.subscriptions=null),e.start_time&&(n.start_time=e.start_time),e.authorization&&(n.authorization=e.authorization);let s=await(0,ms.getReplicationCertAuth)();if(n.replicates){let i={url:Ea(),ca:s?.certificate,replicates:!0,subscriptions:null};e.start_time&&(i.start_time=e.start_time),e.authorization&&(i.authorization=e.authorization),await ho(Xe(),i)}return await ho(e.hostname,n),t.nodeName=Xe(),t.usingCA=s?.certificate,zn.info("addNodeBack responding to:",e.url,"with CA named:",s?.name),t}async function mie(e){zn.trace("removeNodeBack received request:",e),await mr().delete(e.name)}function oF(e){let{subscribe:t,publish:r}=e;return{...e,subscribe:r,publish:t}}var ms,aF,xu,cF,zn,mo,fie,_ie,hie,jc=be(()=>{ms=U(Js()),aF=U(pt()),xu=U(require("joi")),cF=U(ce());H();y_();Fc();_s();zn=U(j()),mo=U(_e()),{pki:fie}=require("node-forge"),{HTTP_STATUS_CODES:_ie}=mo.hdb_errors,hie=xu.default.object({hostname:xu.default.string(),verify_tls:xu.default.boolean(),replicates:xu.default.boolean(),subscriptions:xu.default.array()});a(pie,"setNode");a(Eie,"addNodeBack");a(mie,"removeNodeBack");a(oF,"reverseSubscription")});var Zm=P((eCe,uF)=>{"use strict";var{handleHDBError:Qm,hdb_errors:gie}=_e(),{HTTP_STATUS_CODES:jm}=gie,{addUpdateNodeValidator:Sie}=Km(),Jm=j(),Xm=(H(),D(q)),lF=Ot(),Tie=ae(),v_=Er(),U_=Eo(),xO=ce(),Aie=UO(),{Node:Rie,NodeSubscription:yie}=Mu(),{broadcast:bie}=rt(),{setNode:Oie}=(jc(),D(Qc)),XIe=ce(),ZIe=(H(),D(q)),Nie="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",wie="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Iie=xO.get(Xm.CONFIG_PARAMS.CLUSTERING_NODENAME);uF.exports=Cie;async function Cie(e,t=!1){if(Jm.trace("addNode called with:",e),xO.get(Xm.CONFIG_PARAMS.REPLICATION_URL)||xO.get(Xm.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Oie(e);U_.checkClusteringEnabled();let r=Sie(e);if(r)throw Qm(r,r.message,jm.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let d=await U_.getNodeRecord(n);if(!Tie.isEmptyOrZeroLength(d))throw Qm(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,jm.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await Aie(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=Nie,o;let c=U_.buildNodePayloads(s,Iie,Xm.OPERATIONS_ENUM.ADD_NODE,await U_.getSystemInfo()),l=[];for(let d=0,h=s.length;d<h;d++){let _=s[d];s[d].start_time===void 0&&delete s[d].start_time,l.push(new yie(_.schema,_.table,_.publish,_.subscribe))}Jm.trace("addNode sending remote payload:",c);let u;try{u=await v_.request(`${n}.${lF.REQUEST_SUFFIX}`,c)}catch(d){Jm.error(`addNode received error from request: ${d}`);for(let _=0,p=s.length;_<p;_++){let S=s[_];S.publish=!1,S.subscribe=!1,await v_.updateRemoteConsumer(S,n)}let h=v_.requestErrorHandler(d,"add_node",n);throw Qm(new Error,h,jm.INTERNAL_SERVER_ERROR,"error",h)}if(u.status===lF.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${n}: ${u.message}`;throw Qm(new Error,d,jm.INTERNAL_SERVER_ERROR,"error",d)}Jm.trace(u);for(let d=0,h=s.length;d<h;d++){let _=s[d];await v_.updateRemoteConsumer(_,n),_.subscribe===!0&&await v_.updateConsumerIterator(_.schema,_.table,n,"start")}let f=new Rie(n,l,u.system_info);return await U_.upsertNodeRecord(f),bie({type:"nats_update"}),i.length>0?o.message=wie:o.message=`Successfully added '${n}' to manifest`,o}a(Cie,"addNode")});var FO=P((nCe,fF)=>{"use strict";var{handleHDBError:BO,hdb_errors:Pie}=_e(),{HTTP_STATUS_CODES:HO}=Pie,{addUpdateNodeValidator:Die}=Km(),x_=j(),eg=(H(),D(q)),dF=Ot(),rCe=ae(),B_=Er(),H_=Eo(),kO=ce(),{cloneDeep:Lie}=require("lodash"),Mie=UO(),{Node:vie,NodeSubscription:Uie}=Mu(),{broadcast:xie}=rt(),{setNode:Bie}=(jc(),D(Qc)),Hie="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",kie="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Fie=kO.get(eg.CONFIG_PARAMS.CLUSTERING_NODENAME);fF.exports=Gie;async function Gie(e){if(x_.trace("updateNode called with:",e),kO.get(eg.CONFIG_PARAMS.REPLICATION_URL)??kO.get(eg.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Bie(e);H_.checkClusteringEnabled();let t=Die(e);if(t)throw BO(t,t.message,HO.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await H_.getNodeRecord(r);s.length>0&&(n=Lie(s));let{added:i,skipped:o}=await Mie(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=Hie,c;let l=H_.buildNodePayloads(i,Fie,eg.OPERATIONS_ENUM.UPDATE_NODE,await H_.getSystemInfo());for(let f=0,d=i.length;f<d;f++){let h=i[f];x_.trace(`updateNode updating work stream for node: ${r} subscription:`,h),i[f].start_time===void 0&&delete i[f].start_time}x_.trace("updateNode sending remote payload:",l);let u;try{u=await B_.request(`${r}.${dF.REQUEST_SUFFIX}`,l)}catch(f){x_.error(`updateNode received error from request: ${f}`);let d=B_.requestErrorHandler(f,"update_node",r);throw BO(new Error,d,HO.INTERNAL_SERVER_ERROR,"error",d)}if(u.status===dF.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let f=`Error returned from remote node ${r}: ${u.message}`;throw BO(new Error,f,HO.INTERNAL_SERVER_ERROR,"error",f)}x_.trace(u);for(let f=0,d=i.length;f<d;f++){let h=i[f];await B_.updateRemoteConsumer(h,r),h.subscribe===!0?await B_.updateConsumerIterator(h.schema,h.table,r,"start"):await B_.updateConsumerIterator(h.schema,h.table,r,"stop")}return n||(n=[new vie(r,[],u.system_info)]),await qie(n[0],i,u.system_info),o.length>0?c.message=kie:c.message=`Successfully updated '${r}'`,c}a(Gie,"updateNode");async function qie(e,t,r){let n=e;for(let s=0,i=t.length;s<i;s++){let o=t[s],c=!1;for(let l=0,u=e.subscriptions.length;l<u;l++){let f=n.subscriptions[l];if(f.schema===o.schema&&f.table===o.table){f.publish=o.publish,f.subscribe=o.subscribe,c=!0;break}}c||n.subscriptions.push(new Uie(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await H_.upsertNodeRecord(n),xie({type:"nats_update"})}a(qie,"updateNodeTable")});var mF=P((iCe,EF)=>{"use strict";var pF=require("joi"),{string:_F}=pF.types(),$ie=pt(),hF=(H(),D(q)),Vie=ce(),Kie=Ot();EF.exports=Yie;function Yie(e){let t=_F.invalid(Vie.get(hF.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(Kie.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=pF.object({operation:_F.valid(hF.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return $ie.validateBySchema(e,r)}a(Yie,"removeNodeValidator")});var tg=P((aCe,RF)=>{"use strict";var{handleHDBError:gF,hdb_errors:Wie}=_e(),{HTTP_STATUS_CODES:SF}=Wie,zie=mF(),k_=j(),TF=Eo(),Qie=ae(),Bu=(H(),D(q)),AF=Ot(),GO=Er(),qO=ce(),{RemotePayloadObject:jie}=L_(),{NodeSubscription:Jie}=Mu(),Xie=Wf(),Zie=Tc(),{broadcast:eoe}=rt(),{setNode:toe}=(jc(),D(Qc)),roe=qO.get(Bu.CONFIG_PARAMS.CLUSTERING_NODENAME);RF.exports=noe;async function noe(e){if(k_.trace("removeNode called with:",e),qO.get(Bu.CONFIG_PARAMS.REPLICATION_URL)??qO.get(Bu.CONFIG_PARAMS.REPLICATION_HOSTNAME))return toe(e);TF.checkClusteringEnabled();let t=zie(e);if(t)throw gF(t,t.message,SF.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await TF.getNodeRecord(r);if(Qie.isEmptyOrZeroLength(n))throw gF(new Error,`Node '${r}' was not found.`,SF.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new jie(Bu.OPERATIONS_ENUM.REMOVE_NODE,roe,[]),i,o=!1;for(let l=0,u=n.subscriptions.length;l<u;l++){let f=n.subscriptions[l];f.subscribe===!0&&await GO.updateConsumerIterator(f.schema,f.table,r,"stop");try{await GO.updateRemoteConsumer(new Jie(f.schema,f.table,!1,!1),r)}catch(d){k_.error(d)}}try{i=await GO.request(`${r}.${AF.REQUEST_SUFFIX}`,s),k_.trace("Remove node reply from remote node:",r,i)}catch(l){k_.error("removeNode received error from request:",l),o=!0}let c=new Xie(Bu.SYSTEM_SCHEMA_NAME,Bu.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await Zie.deleteRecord(c),eoe({type:"nats_update"}),i?.status===AF.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(k_.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(noe,"removeNode")});var OF=P((lCe,bF)=>{"use strict";var yF=require("joi"),{string:soe,array:ioe}=yF.types(),ooe=pt(),aoe=Km();bF.exports=coe;function coe(e){let t=yF.object({operation:soe.valid("configure_cluster").required(),connections:ioe.items(aoe.validation_schema).required()});return ooe.validateBySchema(e,t)}a(coe,"configureClusterValidator")});var $O=P((dCe,PF)=>{"use strict";var NF=(H(),D(q)),rg=j(),loe=ae(),uoe=ce(),doe=tg(),foe=Zm(),_oe=Eo(),hoe=OF(),{handleHDBError:wF,hdb_errors:poe}=_e(),{HTTP_STATUS_CODES:IF}=poe,Eoe="Configure cluster complete.",moe="Failed to configure the cluster. Check the logs for more details.",goe="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";PF.exports=Soe;async function Soe(e){rg.trace("configure cluster called with:",e);let t=hoe(e);if(t)throw wF(t,t.message,IF.BAD_REQUEST,void 0,void 0,!0);let r=await _oe.getAllNodeRecords(),n=[];if(uoe.get(NF.CONFIG_PARAMS.CLUSTERING_ENABLED)){for(let f=0,d=r.length;f<d;f++){let h=await CF(doe,{operation:NF.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name);n.push(h)}rg.trace("All results from configure_cluster remove node:",n)}let s=[],i=e.connections.length;for(let f=0;f<i;f++){let d=e.connections[f],h=await CF(foe,d,d.node_name);s.push(h)}rg.trace("All results from configure_cluster add node:",s);let o=[],c=[],l=!1,u=n.concat(s);for(let f=0,d=u.length;f<d;f++){let h=u[f];h.status==="rejected"&&(rg.error(h.node_name,h?.error?.message,h?.error?.stack),o.includes(h.node_name)||o.push(h.node_name)),(h?.result?.message?.includes?.("Successfully")||h?.result?.includes?.("Successfully"))&&(l=!0),!(typeof h.result=="string"&&h.result.includes("Successfully removed")||h.status==="rejected")&&c.push({node_name:h?.node_name,response:h?.result})}if(loe.isEmptyOrZeroLength(o))return{message:Eoe,connections:c};if(l)return{message:goe,failed_nodes:o,connections:c};throw wF(new Error,moe,IF.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(Soe,"configureCluster");async function CF(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}a(CF,"functionWrapper")});var vF=P((_Ce,MF)=>{"use strict";var F_=require("joi"),Toe=pt(),{validateSchemaExists:DF,validateTableExists:Aoe,validateSchemaName:LF}=Ti(),Roe=F_.object({operation:F_.string().valid("purge_stream"),schema:F_.string().custom(DF).custom(LF).optional(),database:F_.string().custom(DF).custom(LF).optional(),table:F_.string().custom(Aoe).required()});function yoe(e){return Toe.validateBySchema(e,Roe)}a(yoe,"purgeStreamValidator");MF.exports=yoe});var VO=P((pCe,UF)=>{"use strict";var{handleHDBError:boe,hdb_errors:Ooe}=_e(),{HTTP_STATUS_CODES:Noe}=Ooe,woe=vF(),Ioe=Er(),Coe=Eo();UF.exports=Poe;async function Poe(e){e.schema=e.schema??e.database;let t=woe(e);if(t)throw boe(t,t.message,Noe.BAD_REQUEST,void 0,void 0,!0);Coe.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await Ioe.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}a(Poe,"purgeStream")});var WO=P((mCe,qF)=>{"use strict";var YO=Eo(),Doe=Er(),sg=ce(),Hu=(H(),D(q)),Jc=Ot(),Loe=ae(),KO=j(),{RemotePayloadObject:Moe}=L_(),{ErrorCode:xF}=require("nats"),{parentPort:BF}=require("worker_threads"),{onMessageByType:voe}=rt(),{getThisNodeName:Uoe}=(_s(),D(Aa)),{requestClusterStatus:xoe}=(y_(),D(oH)),{getReplicationSharedStatus:Boe}=(Fc(),D(Mb)),{CONFIRMATION_STATUS_POSITION:Hoe,RECEIVED_VERSION_POSITION:koe,RECEIVED_TIME_POSITION:Foe,SENDING_TIME_POSITION:Goe}=(nO(),D(zH)),HF=sg.get(Hu.CONFIG_PARAMS.CLUSTERING_ENABLED),kF=sg.get(Hu.CONFIG_PARAMS.CLUSTERING_NODENAME);qF.exports={clusterStatus:qoe,buildNodeStatus:GF};var FF;voe("cluster-status",async e=>{FF(e)});async function qoe(){if(sg.get(Hu.CONFIG_PARAMS.REPLICATION_URL)||sg.get(Hu.CONFIG_PARAMS.REPLICATION_HOSTNAME)){let n;if(BF){BF.postMessage({type:"request-cluster-status"}),n=await new Promise(s=>{FF=s});for(let s of n.connections){let i=s.name;for(let o of s.database_sockets){let c=o.database,l;for(let f of Object.values(databases[c]||{}))if(l=f.auditStore,l)break;if(!l)continue;let u=Boe(l,c,i);o.lastCommitConfirmed=ng(u[Hoe]),o.lastReceivedRemoteTime=ng(u[koe]),o.lastReceivedLocalTime=ng(u[Foe]),o.sendingMessage=ng(u[Goe])}}}else n=xoe();return n.node_name=Uoe(),n.is_enabled=!0,n}let e={node_name:kF,is_enabled:HF,connections:[]};if(!HF)return e;let t=await YO.getAllNodeRecords();if(Loe.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(GF(t[n],e.connections));return await Promise.allSettled(r),e}a(qoe,"clusterStatus");function ng(e){return e?e===1?"Copying":new Date(e).toUTCString():void 0}a(ng,"asDate");async function GF(e,t){let r=e.name,n=new Moe(Hu.OPERATIONS_ENUM.CLUSTER_STATUS,kF,void 0,await YO.getSystemInfo()),s,i,o=Jc.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await Doe.request(Jc.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===Jc.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Jc.CLUSTER_STATUS_STATUSES.CLOSED,KO.error(`Error getting node status from ${r} `,s))}catch(l){KO.warn(`Error getting node status from ${r}`,l),l.code===xF.NoResponders?o=Jc.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===xF.Timeout?o=Jc.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Jc.CLUSTER_STATUS_STATUSES.CLOSED}let c=new $oe(r,o,s?.message?.ports?.clustering,s?.message?.ports?.operations_api,i,s?.message?.uptime,e.subscriptions,s?.message?.system_info);try{let l={name:r,system_info:s?.message?.system_info};e.system_info?.hdb_version!==Hu.PRE_4_0_0_VERSION&&await YO.upsertNodeRecord(l)}catch(l){KO.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}a(GF,"buildNodeStatus");function $oe(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($oe,"NodeStatusObject")});var QO=P((SCe,$F)=>{"use strict";var{handleHDBError:Voe,hdb_errors:Koe}=_e(),{HTTP_STATUS_CODES:Yoe}=Koe,Woe=Er(),zoe=Eo(),zO=ae(),ig=require("joi"),Qoe=pt(),joe=2e3,Joe=ig.object({timeout:ig.number().min(1),connected_nodes:ig.boolean(),routes:ig.boolean()});$F.exports=Xoe;async function Xoe(e){zoe.checkClusteringEnabled();let t=Qoe.validateBySchema(e,Joe);if(t)throw Voe(t,t.message,Yoe.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||zO.autoCastBoolean(n),o=s===void 0||zO.autoCastBoolean(s),c={nodes:[]},l=await Woe.getServerList(r??joe),u={};if(i)for(let f=0,d=l.length;f<d;f++){let h=l[f].statsz;h&&(u[l[f].server.name]=h.routes)}for(let f=0,d=l.length;f<d;f++){if(l[f].statsz)continue;let h=l[f].server,_=l[f].data;if(h.name.endsWith("-hub")){let p={name:h.name.slice(0,-4),response_time:l[f].response_time};i&&(p.connected_nodes=[],u[h.name]&&u[h.name].forEach(S=>{p.connected_nodes.includes(S.name.slice(0,-4))||p.connected_nodes.push(S.name.slice(0,-4))})),o&&(p.routes=_.cluster?.urls?_.cluster?.urls.map(S=>({host:S.split(":")[0],port:zO.autoCast(S.split(":")[1])})):[]),c.nodes.push(p)}}return c}a(Xoe,"clusterNetwork")});var WF=P((ACe,YF)=>{"use strict";var jO=require("joi"),VF=pt(),{route_constraints:KF}=NR();YF.exports={setRoutesValidator:Zoe,deleteRoutesValidator:eae};function Zoe(e){let t=jO.object({server:jO.valid("hub","leaf"),routes:KF.required()});return VF.validateBySchema(e,t)}a(Zoe,"setRoutesValidator");function eae(e){let t=jO.object({routes:KF.required()});return VF.validateBySchema(e,t)}a(eae,"deleteRoutesValidator")});var og=P((yCe,eG)=>{"use strict";var go=wt(),JO=ae(),gs=(H(),D(q)),ku=ce(),zF=WF(),{handleHDBError:QF,hdb_errors:tae}=_e(),{HTTP_STATUS_CODES:jF}=tae,JF="cluster routes successfully set",XF="cluster routes successfully deleted";eG.exports={setRoutes:nae,getRoutes:sae,deleteRoutes:iae};function rae(e){let t=go.getClusteringRoutes(),r=e.server==="hub"?t.hub_routes:t.leaf_routes,n=e.server==="hub"?t.leaf_routes:t.hub_routes,s=[],i=[];for(let o=0,c=e.routes.length;o<c;o++){let l=e.routes[o];l.port=JO.autoCast(l.port);let u=r.some(d=>d.host===l.host&&d.port===l.port),f=n.some(d=>d.host===l.host&&d.port===l.port);u||f?s.push(l):(r.push(l),i.push(l))}return e.server==="hub"?go.updateConfigValue(gs.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r):go.updateConfigValue(gs.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,r),{message:JF,set:i,skipped:s}}a(rae,"setRoutesNats");function nae(e){let t=zF.setRoutesValidator(e);if(t)throw QF(t,t.message,jF.BAD_REQUEST,void 0,void 0,!0);if(ku.get(gs.CONFIG_PARAMS.CLUSTERING_ENABLED))return rae(e);let r=[],n=[],s=ku.get(gs.CONFIG_PARAMS.REPLICATION_ROUTES)??[];return e.routes.forEach(i=>{ZF(s,i)?n.push(i):(s.push(i),r.push(i))}),go.updateConfigValue(gs.CONFIG_PARAMS.REPLICATION_ROUTES,s),{message:JF,set:r,skipped:n}}a(nae,"setRoutes");function ZF(e,t){return typeof t=="string"?e.includes(t):typeof t=="object"&&t!==null?e.some(r=>(r.host===t.host||r.hostname===t.hostname)&&r.port===t.port):!1}a(ZF,"existsInArray");function sae(){if(ku.get(gs.CONFIG_PARAMS.CLUSTERING_ENABLED)){let e=go.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}else return ku.get(gs.CONFIG_PARAMS.REPLICATION_ROUTES)??[]}a(sae,"getRoutes");function iae(e){let t=zF.deleteRoutesValidator(e);if(t)throw QF(t,t.message,jF.BAD_REQUEST,void 0,void 0,!0);if(ku.get(gs.CONFIG_PARAMS.CLUSTERING_ENABLED))return oae(e);let r=[],n=[],s=ku.get(gs.CONFIG_PARAMS.REPLICATION_ROUTES)??[],i=[];return s.forEach(o=>{ZF(e.routes,o)?r.push(o):(i.push(o),n.push(o))}),go.updateConfigValue(gs.CONFIG_PARAMS.REPLICATION_ROUTES,i),{message:XF,deleted:r,skipped:n}}a(iae,"deleteRoutes");function oae(e){let t=go.getClusteringRoutes(),r=t.hub_routes,n=t.leaf_routes,s=[],i=[],o=!1,c=!1;for(let l=0,u=e.routes.length;l<u;l++){let f=e.routes[l],d=!1;for(let h=0,_=r.length;h<_;h++){let p=r[h];if(f.host===p.host&&f.port===p.port){r.splice(h,1),d=!0,o=!0,s.push(f);break}}if(!d){let h=!0;for(let _=0,p=n.length;_<p;_++){let S=n[_];if(f.host===S.host&&f.port===S.port){n.splice(_,1),c=!0,h=!1,s.push(f);break}}h&&i.push(f)}}return o&&(r=JO.isEmptyOrZeroLength(r)?null:r,go.updateConfigValue(gs.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r)),c&&(n=JO.isEmptyOrZeroLength(n)?null:n,go.updateConfigValue(gs.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:XF,deleted:s,skipped:i}}a(oae,"deleteRoutesNats")});var rG=P((OCe,tG)=>{"use strict";var G_=require("alasql"),Xc=require("recursive-iterator"),Xs=j(),aae=ae(),q_=(H(),D(q)),XO=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,lae(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=>q_.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=>!q_.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][q_.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=cae(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(u=>({attribute_name:u.attribute}));let l=this.affected_attributes.get(i).get(o).filter(u=>!q_.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let f=new G_.yy.Column({columnid:u});s.tableid&&(f.tableid=s.tableid),this.ast.columns.push(f),l.includes(u)||l.push(u)}),this.affected_attributes.get(i).set(o,l)}}),this.ast}};function cae(e){return e.filter(t=>t[q_.PERMS_CRUD_ENUM.READ])}a(cae,"filterReadRestrictedAttrs");function lae(e,t,r,n,s){uae(e,t,r,n,s)}a(lae,"interpretAST");function $_(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($_,"addSchemaTableToMap");function uae(e,t,r,n,s){if(!e){Xs.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof G_.yy.Insert?hae(e,t,r):e instanceof G_.yy.Select?dae(e,t,r,n,s):e instanceof G_.yy.Update?fae(e,t,r):e instanceof G_.yy.Delete?_ae(e,t,r):Xs.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(uae,"getRecordAttributesAST");function dae(e,t,r,n,s){if(!e){Xs.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(aae.isEmptyOrZeroLength(i)){Xs.error("No schema specified");return}e.from.forEach(c=>{$_(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),$_(c.table,t,r,n,s)});let o=new Xc(e.columns);for(let{node:c}of o)if(c&&c.columnid){let l=c.tableid,u=n.has(l)?n.get(l):i;if(l||(l=e.from[0].tableid),!t.get(u).has(l))if(r.has(l))l=r.get(l);else{Xs.info(`table specified as ${l} not found.`);return}t.get(u).get(l).indexOf(c.columnid)<0&&t.get(u).get(l).push(c.columnid)}if(e.where){let c=new Xc(e.where),l=e.from[0].tableid;for(let{node:u}of c)if(u&&u.columnid){let f=u.tableid?u.tableid:l;if(!t.get(i).has(f))if(r.has(f))f=r.get(f);else{Xs.info(`table specified as ${f} not found.`);continue}t.get(i).get(f).indexOf(u.columnid)<0&&t.get(i).get(f).push(u.columnid)}}if(e.joins&&e.joins.forEach(c=>{let l=new Xc(c.on);for(let{node:u}of l)if(u&&u.columnid){let f=u.tableid,d=s.get(f);if(!t.get(d).has(f))if(r.has(f))f=r.get(f);else{Xs.info(`table specified as ${f} not found.`);continue}t.get(d).get(f).indexOf(u.columnid)<0&&t.get(d).get(f).push(u.columnid)}}),e.order){let c=new Xc(e.order);for(let{node:l}of c)if(l&&l.columnid){let u=l.tableid,f=n.has(u)?n.get(u):i;if(u||(u=e.from[0].tableid),!t.get(f).has(u))if(r.has(u))u=r.get(u);else{Xs.info(`table specified as ${u} not found.`);return}t.get(f).get(u).indexOf(l.columnid)<0&&t.get(f).get(u).push(l.columnid)}}}a(dae,"getSelectAttributes");function fae(e,t,r){if(!e){Xs.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new Xc(e.columns),s=e.table.databaseid;$_(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&ZO(e.table.tableid,s,i.columnid,t,r)}a(fae,"getUpdateAttributes");function _ae(e,t,r){if(!e){Xs.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new Xc(e.where),s=e.table.databaseid;$_(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&ZO(e.table.tableid,s,i.columnid,t,r)}a(_ae,"getDeleteAttributes");function hae(e,t,r){if(!e){Xs.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new Xc(e.columns),s=e.into.databaseid;$_(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&ZO(e.into.tableid,s,i.columnid,t,r)}a(hae,"getInsertAttributes");function ZO(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(ZO,"pushAttribute");tG.exports=XO});var sG=P((wCe,nG)=>{"use strict";var ag=(H(),D(q)),cg=class{static{a(this,"BaseLicense")}constructor(t=0,r=ag.RAM_ALLOCATION_ENUM.DEFAULT,n=ag.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},eN=class extends cg{static{a(this,"ExtendedLicense")}constructor(t=0,r=ag.RAM_ALLOCATION_ENUM.DEFAULT,n=ag.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};nG.exports={BaseLicense:cg,ExtendedLicense:eN}});var qu=P((CCe,uG)=>{"use strict";var Gu=require("fs-extra"),lg=(hE(),D(_E)),oG=require("crypto"),pae=require("moment"),Eae=require("uuid").v4,Xr=j(),rN=require("path"),mae=ae(),Zc=(H(),D(q)),{totalmem:iG}=require("os"),gae=sG().ExtendedLicense,Fu="invalid license key format",Sae="061183",Tae="mofi25",Aae="aes-256-cbc",Rae=16,yae=32,aG=ce(),{resolvePath:cG}=wt();aG.initSync();var tN;uG.exports={validateLicense:lG,generateFingerPrint:Oae,licenseSearch:iN,getLicense:Iae,checkMemoryLimit:Cae};function nN(){return rN.join(aG.getHdbBasePath(),Zc.LICENSE_KEY_DIR_NAME,Zc.LICENSE_FILE_NAME)}a(nN,"getLicenseDirPath");function bae(){let e=nN();return cG(rN.join(e,Zc.LICENSE_FILE_NAME))}a(bae,"getLicenseFilePath");function sN(){let e=nN();return cG(rN.join(e,Zc.REG_KEY_FILE_NAME))}a(sN,"getFingerPrintFilePath");async function Oae(){let e=sN();try{return await Gu.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await Nae();throw Xr.error(`Error writing fingerprint file to ${e}`),Xr.error(t),new Error("There was an error generating the fingerprint")}}a(Oae,"generateFingerPrint");async function Nae(){let e=Eae(),t=lg.hash(e,lg.HASH_FUNCTION.MD5),r=sN();try{await Gu.mkdirp(nN()),await Gu.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw Xr.error(`Error writing fingerprint file to ${r}`),Xr.error(n),new Error("There was an error generating the fingerprint")}return t}a(Nae,"writeFingerprint");function lG(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:Zc.RAM_ALLOCATION_ENUM.DEFAULT,version:Zc.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Xr.error("empty license key passed to validate."),r;let n=sN(),s=!1;try{s=Gu.statSync(n)}catch(i){Xr.error(i)}if(s){let i;try{i=Gu.readFileSync(n,"utf8")}catch{Xr.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(Tae),c=o[1];c=Buffer.concat([Buffer.from(c)],Rae);let l=Buffer.concat([Buffer.from(i)],yae),u=oG.createDecipheriv(Aae,l,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let f=null;try{f=u.update(o[0],"hex","utf8"),f.trim(),f+=u.final("utf8")}catch{let _=wae(o[0],i);if(_)f=_;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Fu),Xr.error(Fu),new Error(Fu)}let d;if(isNaN(f))try{d=JSON.parse(f),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(Fu),Xr.error(Fu),new Error(Fu)}else r.exp_date=f;r.exp_date<pae().valueOf()&&(r.valid_date=!1),lg.validate(o[1],`${Sae}${i}${t}`,lg.HASH_FUNCTION.MD5)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||Xr.error("Invalid licence"),r}a(lG,"validateLicense");function wae(e,t){try{let r=oG.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{Xr.warn("Check old license failed")}}a(wae,"checkOldLicense");function iN(){let e=new gae,t=[];try{t=Gu.readFileSync(bae(),"utf-8").split(`\r
24
- `)}catch(r){r.code==="ENOENT"?Xr.debug("no license file found"):Xr.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(mae.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=lG(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){Xr.error("There was an error parsing the license string."),Xr.error(s),e.ram_allocation=Zc.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return tN=e,e}a(iN,"licenseSearch");async function Iae(){return tN||await iN(),tN}a(Iae,"getLicense");function Cae(){let e=iN().ram_allocation,t=process.constrainedMemory?.()||iG();if(t=Math.round(Math.min(t,iG())/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(Cae,"checkMemoryLimit")});var cN=P((DCe,hG)=>{var ug=qu(),dG=require("chalk"),Qn=j(),fG=require("prompt"),{promisify:Pae}=require("util"),oN=(H(),D(q)),Dae=require("fs-extra"),Lae=require("path"),Mae=ae(),{packageJson:vae}=_t(),_G=ce();_G.initSync();var Uae=require("moment"),xae=Pae(fG.get),Bae=Lae.join(_G.getHdbBasePath(),oN.LICENSE_KEY_DIR_NAME,oN.LICENSE_FILE_NAME,oN.LICENSE_FILE_NAME);hG.exports={getFingerprint:kae,setLicense:Hae,parseLicense:aN,register:Fae,getRegistrationInfo:qae};async function Hae(e){if(e&&e.key&&e.company){try{Qn.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await aN(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw Qn.error(r),Qn.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(Hae,"setLicense");async function kae(){let e={};try{e=await ug.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw Qn.error(r),Qn.error(t),new Error(r)}return e}a(kae,"getFingerprint");async function aN(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");Qn.info("Validating license input...");let r=ug.validateLicense(e,t);if(Qn.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(Qn.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(Qn.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{Qn.info("writing license to disk"),await Dae.writeFile(Bae,JSON.stringify({license_key:e,company:t}))}catch(n){throw Qn.error("Failed to write License"),n}return"Registration successful."}a(aN,"parseLicense");async function Fae(){let e=await Gae();return aN(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(Fae,"register");async function Gae(){let e=await ug.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:dG.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:dG.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{fG.start()}catch(n){Qn.error(n)}let r;try{r=await xae(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(Gae,"promptForRegistration");async function qae(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await ug.getLicense()}catch(r){throw Qn.error(`There was an error when searching licenses due to: ${r.message}`),r}if(Mae.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=vae.version,e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=Uae.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(qae,"getRegistrationInfo")});var EG=P((MCe,pG)=>{"use strict";var $ae=Ot(),lN=class{static{a(this,"HubConfigObject")}constructor(t,r,n,s,i,o,c,l,u,f,d,h,_,p){this.port=t,o===null&&(o=void 0),this.server_name=r+$ae.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.reconnect_error_reports=100,this.jetstream={enabled:!1},this.tls={cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l},this.leafnodes={port:u,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c}},this.cluster={name:f,port:d,routes:h,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l}},this.accounts={SYS:{users:_},HDB:{users:p}},this.system_account="SYS"}};pG.exports=lN});var SG=P((UCe,gG)=>{"use strict";var mG=Ot(),uN=class{static{a(this,"LeafConfigObject")}constructor(t,r,n,s,i,o,c,l,u,f,d){this.port=t,d===null&&(d=void 0),this.server_name=r+mG.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+mG.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:f,ca_file:d,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:d,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:d,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:l,jetstream:"enabled"}},this.system_account="SYS"}};gG.exports=uN});var AG=P((BCe,TG)=>{"use strict";var dN=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};TG.exports=dN});var yG=P((kCe,RG)=>{"use strict";var Vae=Ot(),fN=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+Vae.SERVER_SUFFIX.ADMIN,this.password=r}};RG.exports=fN});var hg=P((GCe,NG)=>{"use strict";var el=require("path"),tl=require("fs-extra"),Kae=EG(),Yae=SG(),Wae=AG(),zae=yG(),_N=qn(),Vu=ae(),yn=wt(),fg=(H(),D(q)),V_=Ot(),{CONFIG_PARAMS:Wt}=fg,Ku=j(),K_=ce(),bG=io(),hN=Er(),Qae=Js(),$u="clustering",jae=1e4,OG=50;NG.exports={generateNatsConfig:Xae,removeNatsConfig:Zae,getHubConfigPath:Jae};function Jae(){let e=K_.get(Wt.ROOTPATH);return el.join(e,$u,V_.NATS_CONFIG_FILES.HUB_SERVER)}a(Jae,"getHubConfigPath");async function Xae(e=!1,t=void 0){let r=K_.get(Wt.ROOTPATH);tl.ensureDirSync(el.join(r,"clustering","leaf")),K_.initSync();let n=yn.getConfigFromFile(Wt.CLUSTERING_TLS_CERT_AUTH),s=yn.getConfigFromFile(Wt.CLUSTERING_TLS_PRIVATEKEY),i=yn.getConfigFromFile(Wt.CLUSTERING_TLS_CERTIFICATE);!await tl.exists(i)&&!await tl.exists(!n)&&await Qae.createNatsCerts();let o=el.join(r,$u,V_.PID_FILES.HUB),c=el.join(r,$u,V_.PID_FILES.LEAF),l=yn.getConfigFromFile(Wt.CLUSTERING_LEAFSERVER_STREAMS_PATH),u=el.join(r,$u,V_.NATS_CONFIG_FILES.HUB_SERVER),f=el.join(r,$u,V_.NATS_CONFIG_FILES.LEAF_SERVER),d=yn.getConfigFromFile(Wt.CLUSTERING_TLS_INSECURE),h=yn.getConfigFromFile(Wt.CLUSTERING_TLS_VERIFY),_=yn.getConfigFromFile(Wt.CLUSTERING_NODENAME),p=yn.getConfigFromFile(Wt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await hN.checkNATSServerInstalled()||_g("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let S=await _N.listUsers(),g=yn.getConfigFromFile(Wt.CLUSTERING_USER),T=await _N.getClusterUser();(Vu.isEmpty(T)||T.active!==!0)&&_g(`Invalid cluster user '${g}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await dg(Wt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await dg(Wt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await dg(Wt.CLUSTERING_HUBSERVER_NETWORK_PORT),await dg(Wt.CLUSTERING_LEAFSERVER_NETWORK_PORT));let m=[],A=[];for(let[ie,X]of S.entries())X.role?.role===fg.ROLE_TYPES_ENUM.CLUSTER_USER&&X.active&&(m.push(new zae(X.username,bG.decrypt(X.hash))),A.push(new Wae(X.username,bG.decrypt(X.hash))));let w=[],{hub_routes:M}=yn.getClusteringRoutes();if(!Vu.isEmptyOrZeroLength(M))for(let ie of M)w.push(`tls://${T.sys_name_encoded}:${T.uri_encoded_d_hash}@${ie.host}:${ie.port}`);let F=new Kae(yn.getConfigFromFile(Wt.CLUSTERING_HUBSERVER_NETWORK_PORT),_,o,i,s,n,d,h,p,yn.getConfigFromFile(Wt.CLUSTERING_HUBSERVER_CLUSTER_NAME),yn.getConfigFromFile(Wt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),w,m,A);n==null&&(delete F.tls.ca_file,delete F.leafnodes.tls.ca_file),t=Vu.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===fg.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await tl.writeJson(u,F),Ku.trace(`Hub server config written to ${u}`));let G=`tls://${T.sys_name_encoded}:${T.uri_encoded_d_hash}@0.0.0.0:${p}`,K=`tls://${T.uri_encoded_name}:${T.uri_encoded_d_hash}@0.0.0.0:${p}`,ee=new Yae(yn.getConfigFromFile(Wt.CLUSTERING_LEAFSERVER_NETWORK_PORT),_,c,l,[G],[K],m,A,i,s,n,d);n==null&&delete ee.tls.ca_file,(t===void 0||t===fg.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await tl.writeJson(f,ee),Ku.trace(`Leaf server config written to ${f}`))}a(Xae,"generateNatsConfig");async function dg(e){let t=K_.get(e);return Vu.isEmpty(t)&&_g(`port undefined for '${e}'`),await Vu.isPortTaken(t)&&_g(`'${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(dg,"isPortAvailable");function _g(e){let t=`Error generating clustering config: ${e}`;Ku.error(t),console.error(t),process.exit(1)}a(_g,"generateNatsConfigError");async function Zae(e){let{port:t,config_file:r}=hN.getServerConfig(e),{username:n,decrypt_hash:s}=await _N.getClusterUser(),i=0,o=2e3;for(;i<OG;){try{let f=await hN.createConnection(t,n,s,!1);if(f.protocol.connected===!0){f.close();break}}catch(f){Ku.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${f}`)}if(i++,i>=OG)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check hdb.log for further details.`);let u=o*(i*2);u>3e4&&Ku.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await Vu.async_set_timeout(u)}let c="0".repeat(jae),l=el.join(K_.get(Wt.ROOTPATH),$u,r);await tl.writeFile(l,c),await tl.remove(l),Ku.notify(e,"started.")}a(Zae,"removeNatsConfig")});var LG=P(($Ce,DG)=>{"use strict";var jn=ce(),ece=qu(),Ge=(H(),D(q)),Y_=Ot(),So=require("path"),{PACKAGE_ROOT:Eg}=_t(),wG=ce(),pg=ae(),Yu="/dev/null",tce=So.join(Eg,"launchServiceScripts"),IG=So.join(Eg,"utility/scripts"),rce=So.join(IG,Ge.HDB_RESTART_SCRIPT),CG=So.resolve(Eg,"dependencies",`${process.platform}-${process.arch}`,Y_.NATS_BINARY_NAME);function PG(){let t=ece.licenseSearch().ram_allocation||Ge.RAM_ALLOCATION_ENUM.DEFAULT,r=Ge.MEM_SETTING_KEY+t,n={[Ge.PROCESS_NAME_ENV_PROP]:Ge.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return pg.noBootFile()&&(n[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=pg.getEnvCliRootPath()),{name:Ge.PROCESS_DESCRIPTORS.HDB,script:Ge.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:Eg}}a(PG,"generateMainServerConfig");var nce=9930;function sce(){jn.initSync(!0);let e=jn.get(Ge.CONFIG_PARAMS.ROOTPATH),t=So.join(e,"clustering",Y_.NATS_CONFIG_FILES.HUB_SERVER),r=So.join(jn.get(Ge.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Ge.LOG_NAMES.HDB),n=wG.get(Ge.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=Y_.LOG_LEVEL_FLAGS[jn.get(Ge.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Ge.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==nce?"-"+n:""),script:CG,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Ge.PROCESS_NAME_ENV_PROP]:Ge.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return jn.get(Ge.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Yu,i.error_file=Yu),i}a(sce,"generateNatsHubServerConfig");var ice=9940;function oce(){jn.initSync(!0);let e=jn.get(Ge.CONFIG_PARAMS.ROOTPATH),t=So.join(e,"clustering",Y_.NATS_CONFIG_FILES.LEAF_SERVER),r=So.join(jn.get(Ge.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Ge.LOG_NAMES.HDB),n=wG.get(Ge.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=Y_.LOG_LEVEL_FLAGS[jn.get(Ge.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Ge.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==ice?"-"+n:""),script:CG,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Ge.PROCESS_NAME_ENV_PROP]:Ge.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return jn.get(Ge.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Yu,i.error_file=Yu),i}a(oce,"generateNatsLeafServerConfig");function ace(){jn.initSync();let e=So.join(jn.get(Ge.CONFIG_PARAMS.LOGGING_ROOT),Ge.LOG_NAMES.HDB),t={name:Ge.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:Ge.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[Ge.PROCESS_NAME_ENV_PROP]:Ge.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:tce,autorestart:!1};return jn.get(Ge.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Yu,t.error_file=Yu),t}a(ace,"generateClusteringUpgradeV4ServiceConfig");function cce(){let e={[Ge.PROCESS_NAME_ENV_PROP]:Ge.PROCESS_DESCRIPTORS.RESTART_HDB};return pg.noBootFile()&&(e[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=pg.getEnvCliRootPath()),{...{name:Ge.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:IG},script:rce}}a(cce,"generateRestart");function lce(){return{apps:[PG()]}}a(lce,"generateAllServiceConfigs");DG.exports={generateAllServiceConfigs:lce,generateMainServerConfig:PG,generateRestart:cce,generateNatsHubServerConfig:sce,generateNatsLeafServerConfig:oce,generateClusteringUpgradeV4ServiceConfig:ace}});var z_=P((YCe,YG)=>{"use strict";var Ze=(H(),D(q)),uce=ae(),Ao=hg(),mg=Er(),To=Ot(),Ia=LG(),gg=ce(),rl=j(),dce=Eo(),{startWorker:MG,onMessageFromWorkers:fce}=rt(),_ce=Uu(),KCe=require("util"),hce=require("child_process"),pce=require("fs"),{execFile:Ece}=hce,Ke;YG.exports={enterPM2Mode:mce,start:Ca,stop:pN,reload:UG,restart:xG,list:EN,describe:kG,connect:Ro,kill:Rce,startAllServices:yce,startService:mN,getUniqueServicesList:FG,restartAllServices:bce,isServiceRegistered:GG,reloadStopStart:qG,restartHdb:HG,deleteProcess:Tce,startClusteringProcesses:VG,startClusteringThreads:KG,isHdbRestartRunning:Ace,isClusteringRunning:Nce,stopClustering:Oce,reloadClustering:wce,expectedRestartOfChildren:BG};var W_=!1;fce(e=>{e.type==="restart"&&gg.initSync(!0)});function mce(){W_=!0}a(mce,"enterPM2Mode");function Ro(){return Ke||(Ke=require("pm2")),new Promise((e,t)=>{Ke.connect((r,n)=>{r&&t(r),e(n)})})}a(Ro,"connect");var Zr,gce=10,vG;function Ca(e,t=!1){if(W_)return Sce(e);let r=Ece(e.script,e.args.split(" "),e);r.name=e.name,r.config=e,r.on("exit",async i=>{let o=Zr.indexOf(r);o>-1&&Zr.splice(o,1),!vG&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<gce&&(pce.existsSync(Ao.getHubConfigPath())?Ca(e):(await Ao.generateNatsConfig(!0),Ca(e),await new Promise(c=>setTimeout(c,3e3)),await Ao.removeNatsConfig(Ze.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Ao.removeNatsConfig(Ze.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let o=gg.get(Ze.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,l,u=0,f;for(;l=c.exec(i);){if(l.index&&To.LOG_LEVEL_HIERARCHY[o]>=To.LOG_LEVEL_HIERARCHY[f||"info"]){let _=f===To.LOG_LEVELS.ERR||f===To.LOG_LEVELS.WRN?rl.OUTPUTS.STDERR:rl.OUTPUTS.STDOUT;rl.logCustomLevel(f||"info",_,n,i.slice(u,l.index).trim())}let[d,h]=l;u=l.index+d.length,f=To.LOG_LEVELS[h]}if(To.LOG_LEVEL_HIERARCHY[o]>=To.LOG_LEVEL_HIERARCHY[f||"info"]){let d=f===To.LOG_LEVELS.ERR||f===To.LOG_LEVELS.WRN?rl.OUTPUTS.STDERR:rl.OUTPUTS.STDOUT;rl.logCustomLevel(f||"info",d,n,i.slice(u).trim())}}if(a(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),!Zr&&(Zr=[],!t)){let i=a(()=>{vG=!0,Zr&&(Zr.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)}Zr.push(r)}a(Ca,"start");function Sce(e){return new Promise(async(t,r)=>{try{await Ro()}catch(n){r(n)}Ke.start(e,(n,s)=>{n&&(Ke.disconnect(),r(n)),Ke.disconnect(),t(s)})})}a(Sce,"startWithPM2");function pN(e){if(!W_){for(let t of Zr||[])t.name===e&&(Zr.splice(Zr.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Ro()}catch(n){r(n)}Ke.stop(e,async(n,s)=>{n&&(Ke.disconnect(),r(n)),Ke.delete(e,(i,o)=>{i&&(Ke.disconnect(),r(n)),Ke.disconnect(),t(o)})})})}a(pN,"stop");function UG(e){return new Promise(async(t,r)=>{try{await Ro()}catch(n){r(n)}Ke.reload(e,(n,s)=>{n&&(Ke.disconnect(),r(n)),Ke.disconnect(),t(s)})})}a(UG,"reload");function xG(e){if(!W_){BG();for(let t of Zr||[])t.name===e&&t.kill()}return new Promise(async(t,r)=>{try{await Ro()}catch(n){r(n)}Ke.restart(e,(n,s)=>{Ke.disconnect(),t(s)})})}a(xG,"restart");function BG(){for(let e of Zr||[])e.config&&(e.config.restarts=0)}a(BG,"expectedRestartOfChildren");function Tce(e){return new Promise(async(t,r)=>{try{await Ro()}catch(n){r(n)}Ke.delete(e,(n,s)=>{n&&(Ke.disconnect(),r(n)),Ke.disconnect(),t(s)})})}a(Tce,"deleteProcess");async function HG(){await Ca(Ia.generateRestart())}a(HG,"restartHdb");async function Ace(){let e=await EN();for(let t in e)if(e[t].name===Ze.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(Ace,"isHdbRestartRunning");function EN(){return new Promise(async(e,t)=>{try{await Ro()}catch(r){t(r)}Ke.list((r,n)=>{r&&(Ke.disconnect(),t(r)),Ke.disconnect(),e(n)})})}a(EN,"list");function kG(e){return new Promise(async(t,r)=>{try{await Ro()}catch(n){r(n)}Ke.describe(e,(n,s)=>{n&&(Ke.disconnect(),r(n)),Ke.disconnect(),t(s)})})}a(kG,"describe");function Rce(){if(!W_){for(let e of Zr||[])e.kill();Zr=[];return}return new Promise(async(e,t)=>{try{await Ro()}catch(r){t(r)}Ke.killDaemon((r,n)=>{r&&(Ke.disconnect(),t(r)),Ke.disconnect(),e(n)})})}a(Rce,"kill");async function yce(){try{await VG(),await KG(),await Ca(Ia.generateAllServiceConfigs())}catch(e){throw Ke?.disconnect(),e}}a(yce,"startAllServices");async function mN(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case Ze.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=Ia.generateMainServerConfig();break;case Ze.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=Ia.generateNatsIngestServiceConfig();break;case Ze.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=Ia.generateNatsReplyServiceConfig();break;case Ze.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=Ia.generateNatsHubServerConfig(),await Ca(r,t),await Ao.removeNatsConfig(e);return;case Ze.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=Ia.generateNatsLeafServerConfig(),await Ca(r,t),await Ao.removeNatsConfig(e);return;case Ze.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=Ia.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Ca(r)}catch(r){throw Ke?.disconnect(),r}}a(mN,"startService");async function FG(){try{let e=await EN(),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 Ke?.disconnect(),e}}a(FG,"getUniqueServicesList");async function bce(e=[]){try{let t=!1,r=await FG();for(let n=0,s=Object.values(r).length;n<s;n++){let o=Object.values(r)[n].name;e.includes(o)||(o===Ze.PROCESS_DESCRIPTORS.HDB?t=!0:await xG(o))}t&&await qG(Ze.PROCESS_DESCRIPTORS.HDB)}catch(t){throw Ke?.disconnect(),t}}a(bce,"restartAllServices");async function GG(e){if(Zr?.find(r=>r.name===e))return!0;let t=await _ce.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(GG,"isServiceRegistered");async function qG(e){let t=gg.get(Ze.CONFIG_PARAMS.THREADS_COUNT)??gg.get(Ze.CONFIG_PARAMS.THREADS),r=await kG(e),n=uce.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await pN(e),await mN(e)):e===Ze.PROCESS_DESCRIPTORS.HDB?await HG():await UG(e)}a(qG,"reloadStopStart");var $G;async function VG(e=!1){for(let t in Ze.CLUSTERING_PROCESSES){let r=Ze.CLUSTERING_PROCESSES[t];await mN(r,e)}}a(VG,"startClusteringProcesses");async function KG(){$G=MG(Ze.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Ze.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await mg.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await mg.updateLocalStreams();let e=await dce.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Ze.PRE_4_0_0_VERSION){rl.info("Starting clustering upgrade 4.0.0 process"),MG(Ze.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(KG,"startClusteringThreads");async function Oce(){for(let e in Ze.CLUSTERING_PROCESSES)if(e!==Ze.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===Ze.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await $G.terminate();else{let t=Ze.CLUSTERING_PROCESSES[e];await pN(t)}}a(Oce,"stopClustering");async function Nce(){for(let e in Ze.CLUSTERING_PROCESSES){let t=Ze.CLUSTERING_PROCESSES[e];if(await GG(t)===!1)return!1}return!0}a(Nce,"isClusteringRunning");async function wce(){await Ao.generateNatsConfig(!0),await mg.reloadNATSHub(),await mg.reloadNATSLeaf(),await Ao.removeNatsConfig(Ze.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Ao.removeNatsConfig(Ze.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(wce,"reloadClustering")});var TN={};Be(TN,{compactOnStart:()=>Ice,copyDb:()=>XG});async function Ice(){Pa.notify("Running compact on start"),console.log("Running compact on start");let e=(0,gN.get)(B.ROOTPATH),t=new Map,r=Je();(0,SN.updateConfigValue)(B.STORAGE_COMPACTONSTART,!1);try{for(let n in r){if(n==="system"||n.endsWith("-copy"))continue;let s;for(let l in r[n]){s=r[n][l].primaryStore.path;break}if(!s){console.log("Couldn't find any tables in database",n);continue}let i=(0,Sg.join)(e,"backup",n+".mdb"),o=(0,Sg.join)(e,Za,n+"-copy.mdb"),c=0;try{c=await WG(n),console.log("Database",n,"before compact has a total record count of",c)}catch(l){Pa.error("Error getting record count for database",n,l),console.error("Error getting record count for database",n,l)}t.set(n,{db_path:s,copy_dest:o,backup_dest:i,record_count:c}),await XG(n,o),console.log("Backing up",n,"to",i),await(0,nl.move)(s,i,{overwrite:!0})}try{Wu()}catch(n){Pa.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n)}for(let[n,{db_path:s,copy_dest:i}]of t)console.log("Moving copy compacted",n,"to",s),await(0,nl.move)(i,s,{overwrite:!0}),await(0,nl.remove)((0,Sg.join)(e,Za,`${n}-copy.mdb-lock`));try{Wu()}catch(n){Pa.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n),process.exit(0)}}catch(n){Pa.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,SN.updateConfigValue)(B.STORAGE_COMPACTONSTART,!1);for(let[s,{db_path:i,backup_dest:o}]of t){console.error("Moving backup database",o,"back to",i);try{await(0,nl.move)(o,i,{overwrite:!0})}catch(c){console.error(c)}}throw Wu(),n}for(let[n,{backup_dest:s,record_count:i}]of t){let o=!0,c=await WG(n);if(console.log("Database",n,"after compact has a total record count of",c),i!==c){o=!1;let l=`There is a discrepancy between pre and post compact record count for database ${n}.
22
+ `,"")}a(aH,"runCommand");async function $re(){try{await Sre.access(xb)}catch{return!1}let e=await aH(`${xb} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return Tre.eq(t,Gre)}a($re,"checkNATSServerInstalled");async function Gb(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await iH.getClusterUser();if(kc(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}Ks.trace("create nats connection called");let i=await Lre({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:br.get($e.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:br.get($e.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:br.get($e.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),Ks.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&Ks.error("Error with Nats client connection, connection closed",o),i===zr&&cH()}),i}a(Gb,"createConnection");function cH(){zr=void 0,xc=void 0,Bc=void 0,Hc=void 0}a(cH,"clearClientCache");async function Vre(){zr&&(await zr.drain(),zr=void 0,xc=void 0,Bc=void 0,Hc=void 0)}a(Vre,"closeConnection");var zr,Hc;async function b_(){return Hc||(Hc=Gb(br.get($e.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),zr=await Hc),zr||Hc}a(b_,"getConnection");async function O_(){if(xc)return xc;kc(zr)&&await b_();let{domain:e}=bu($e.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(kc(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return xc=await zr.jetstreamManager({domain:e,timeout:6e4}),xc}a(O_,"getJetStreamManager");async function lH(){if(Bc)return Bc;kc(zr)&&await b_();let{domain:e}=bu($e.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(kc(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Bc=zr.jetstream({domain:e,timeout:6e4}),Bc}a(lH,"getJetStream");async function Di(){let e=zr||await b_(),t=xc||await O_(),r=Bc||await lH();return{connection:e,jsm:t,js:r}}a(Di,"getNATSReferences");async function Kre(e){let t=br.get($e.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await iH.getClusterUser(),s=await Gb(t,r,n),i=Fb(),o=s.subscribe(i),c=[],l,u=(async()=>{for await(let f of o){let d=oH.decode(f.data);d.response_time=Date.now()-l,c.push(d)}})();return l=Date.now(),await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await s.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await s.flush(),await OE.async_set_timeout(e),await o.drain(),await s.close(),await u,c}a(Kre,"getServerList");async function qb(e,t){let{jsm:r}=await Di(),n=br.get($e.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=br.get($e.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=br.get($e.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:Mre.File,retention:vre.Limits,subjects:t,discard:Ure.Old,max_msgs:s,max_bytes:i,max_age:n})}a(qb,"createLocalStream");async function uH(){let{jsm:e}=await Di(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(uH,"listStreams");async function Yre(e){let{jsm:t}=await Di();await t.streams.delete(e)}a(Yre,"deleteLocalStream");async function Wre(e){let{connection:t}=await Di(),r=[],n=Fb(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(oH.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(Wre,"listRemoteStreams");async function zre(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Di(),i=tH(),o={durable_name:i,ack_policy:Hb.Explicit};t&&(o.deliver_policy=kb.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let u=[];for await(let f of l){let d=Bb(f.data),h={nats_timestamp:f.info.timestampNanos,nats_sequence:f.info.streamSequence,entry:d};if(f.headers&&(h.origin=f.headers.get(Pr.MSG_HEADERS.ORIGIN)),u.push(h),f.ack(),f.info.pending===0)break}return await c.delete(),u}a(zre,"viewStream");async function*Qre(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Di(),i=tH(),o={durable_name:i,ack_policy:Hb.Explicit};t&&(o.deliver_policy=kb.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let u of l){let f=Bb(u.data);f[0]||(f=[f]);for(let d of f){let h={nats_timestamp:u.info.timestampNanos,nats_sequence:u.info.streamSequence,entry:d};u.headers&&(h.origin=u.headers.get(Pr.MSG_HEADERS.ORIGIN)),yield h}if(u.ack(),u.info.pending===0)break}await c.delete()}a(Qre,"viewStreamIterator");async function jre(e,t,r,n){Ks.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=dH(n,r);let{js:s}=await Di(),i=await wE(),o=`${e}.${i}`,c=await kre(()=>n instanceof Uint8Array?n:sH.encode(n));try{Ks.trace(`publishToStream publishing to subject: ${o}`),Hre(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(o,c,{headers:r})}catch(l){if(l.code&&l.code.toString()==="503")return _H(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){Ks.trace(`publishToStream creating stream: ${t}`);let f=o.split(".");f[2]="*",await qb(t,[o]),await s.publish(o,c,{headers:r})}else throw l}});throw l}}a(jre,"publishToStream");function dH(e,t){t===void 0&&(t=Bre());let r=br.get($e.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Pr.MSG_HEADERS.ORIGIN)&&r&&t.append(Pr.MSG_HEADERS.ORIGIN,r),t}a(dH,"addNatsMsgHeader");function bu(e){e=e.toLowerCase();let t=y_.join(br.get($e.CONFIG_PARAMS.ROOTPATH),Fre);if(e===$e.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return kc(Ub)&&(Ub={port:A_.getConfigFromFile($e.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:A_.getConfigFromFile($e.CONFIG_PARAMS.CLUSTERING_NODENAME)+Pr.SERVER_SUFFIX.HUB,config_file:Pr.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:y_.join(t,Pr.PID_FILES.HUB),hdb_nats_path:t}),Ub;if(e===$e.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return kc(vb)&&(vb={port:A_.getConfigFromFile($e.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:A_.getConfigFromFile($e.CONFIG_PARAMS.CLUSTERING_NODENAME)+Pr.SERVER_SUFFIX.LEAF,config_file:Pr.NATS_CONFIG_FILES.LEAF_SERVER,domain:A_.getConfigFromFile($e.CONFIG_PARAMS.CLUSTERING_NODENAME)+Pr.SERVER_SUFFIX.LEAF,pid_file_path:y_.join(t,Pr.PID_FILES.LEAF),hdb_nats_path:t}),vb;Ks.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(bu,"getServerConfig");async function fH(e,t,r,n){try{await e.consumers.add(t,{ack_policy:Hb.Explicit,durable_name:r,deliver_policy:kb.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(fH,"createConsumer");async function Jre(e,t,r){await e.consumers.delete(t,r)}a(Jre,"removeConsumer");function Xre(e){return e.split(".")[1]}a(Xre,"extractServerName");async function Zre(e,t,r=6e4,n=Fb()){if(!OE.isObject(t))throw new Error("data param must be an object");let s=sH.encode(t),{connection:i}=await Di(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return Bb(c.data)}a(Zre,"request");function $b(e){return new Promise(async(t,r)=>{let n=bre(xb,["--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($b,"reloadNATS");async function ene(){let{pid_file_path:e}=bu($e.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await $b(e)}a(ene,"reloadNATSHub");async function tne(){let{pid_file_path:e}=bu($e.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await $b(e)}a(tne,"reloadNATSLeaf");function rne(e,t,r){let n;switch(e.code){case eH.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case eH.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(rne,"requestErrorHandler");async function nne(e,t){let r=t+Pr.SERVER_SUFFIX.LEAF,{connection:n}=await Di(),{jsm:s}=await dne(r),{schema:i,table:o}=e,c=NE.createNatsTableStreamName(i,o),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await _H(async()=>{if(e.subscribe===!0)await fH(s,c,n.info.server_name,l);else try{await Jre(s,c,n.info.server_name)}catch(u){Ks.trace(u)}})}a(nne,"updateRemoteConsumer");async function sne(e,t,r,n){let s=NE.createNatsTableStreamName(e,t),i=r+Pr.SERVER_SUFFIX.LEAF,o={type:$e.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!nH&&Pre()<br.get($e.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=Mb();await c(o)}await Ire(o),n==="stop"&&await OE.async_set_timeout(1e3)}a(sne,"updateConsumerIterator");function _H(e){return wre.writeTransaction($e.SYSTEM_SCHEMA_NAME,$e.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(_H,"exclusiveLock");async function hH(e,t){let r=NE.createNatsTableStreamName(e,t),n=await wE(),s=cne(e,t,n);await qb(r,[s])}a(hH,"createLocalTableStream");async function ine(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await hH(n,s)}}a(ine,"createTableStreams");async function pH(e,t,r=void 0){if(br.get($e.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=NE.createNatsTableStreamName(e,t),{domain:s}=bu($e.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await b_()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")Ks.warn(n);else throw n}}a(pH,"purgeTableStream");async function one(e,t){if(br.get($e.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await pH(e,t[r])}a(one,"purgeSchemaTableStreams");async function ane(e){return(await O_()).streams.info(e)}a(ane,"getStreamInfo");function cne(e,t,r){return`${Pr.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(cne,"createSubjectName");async function wE(){if(R_)return R_;if(R_=(await O_())?.nc?.info?.server_name,R_===void 0)throw new Error("Unable to get jetstream manager server name");return R_}a(wE,"getJsmServerName");async function lne(){let e=await O_(),t=await wE(),r=await uH();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=une(n),c=i.split(".");if(c[c.length-1]===t&&!o||s.name==="__HARPERDB_WORK_QUEUE__")continue;let u=i.split(".");u[u.length-1]=t;let f=u.join(".");Ks.trace(`Updating stream subject name from: ${i} to: ${f}`),s.subjects[0]=f,await e.streams.update(s.name,s)}}a(lne,"updateLocalStreams");function une(e){let{config:t}=e,r=!1,n=br.get($e.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=br.get($e.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=br.get($e.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(une,"updateStreamLimits");async function dne(e){let t,r;try{t=await zr.jetstream({domain:e}),r=await zr.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw Ks.error("Unable to connect to:",e),n}return{js:t,jsm:r}}a(dne,"connectToRemoteJS")});function Vb(e){let t=e.get(IE),r=t?(0,Ou.unpack)(t):null;r||(r={remoteNameToId:{}});let n=Xe(),s=!1;r.nodeName=Xe();let i=r.remoteNameToId;if(i[n]!==0){let o=0,c;for(let l in i){let u=i[l];u===0?c=l:u>o&&(o=u)}if(c){o++,i[c]=o;let l=[Symbol.for("seq"),o];e.rootStore.dbisDb.transactionSync(()=>{e.rootStore.dbisDb.get(l)||e.rootStore.dbisDb.putSync(l,{seqId:w_(e)??1,nodes:[]})})}i[n]=0,e.putSync(IE,(0,Ou.pack)(r))}return r}function N_(e){return Vb(e).remoteNameToId}function gH(e,t){let r=Vb(t),n=r.remoteNameToId,s=new Map,i=!1;for(let o in e){let c=e[o],l=n[o];if(l==null){let u=0;for(let f in n){let d=n[f];d>u&&(u=d)}l=u+1,n[o]=l,i=!0}s.set(c,l)}return i&&t.putSync(IE,(0,Ou.pack)(r)),s}function CE(e,t){let r=Vb(t),n=r.remoteNameToId,s=n[e];if(s==null){let i=0;for(let o in n){let c=n[o];c>i&&(i=c)}s=i+1,n[e]=s,t.putSync(IE,(0,Ou.pack)(r))}return EH.trace?.("The remote node name map",e,n,s),s}var EH,Ou,IE,Kb=be(()=>{EH=M(hi());fs();Ou=require("msgpackr"),IE=Symbol.for("remote-ids");a(Vb,"getIdMappingRecord");a(N_,"exportIdMapping");a(gH,"remoteToLocalNodeId");a(CE,"getIdOfRemoteNode")});var Yb={};ve(Yb,{commits_awaiting_replication:()=>wu,getHDBNodeTable:()=>sr,getReplicationSharedStatus:()=>PE,iterateRoutes:()=>C_,shouldReplicateToNode:()=>I_,subscribeToNodeUpdates:()=>Iu});function sr(){return SH||(SH=ut({table:"hdb_nodes",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"},{attribute:"ca"},{attribute:"ca_info"},{attribute:"replicates"},{attribute:"revoked_certificates"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]}))}function PE(e,t,r,n){return new Float64Array(e.getUserSharedBuffer(["replicated",t,r],new ArrayBuffer(32),n&&{callback:n}))}function Iu(e){sr().subscribe({}).then(async t=>{for await(let r of t){let n=r?.value?.name;yH.debug?.("adding node",n,"on node",Xe()," on process",process.pid),server.nodes=server.nodes.filter(i=>i.name!==n),r.type==="put"&&n!==Xe()&&(r.value?server.nodes.push(r.value):console.error("Invalid node update event",r));let s=new Map;for await(let i of sr().search({}))if(i.shard!=null){let o=s.get(i.shard);o||s.set(i.shard,o=[]),o.push(i)}server.shards=s,(r.type==="put"||r.type==="delete")&&e(r.value,r.id)}})}function I_(e,t){return(e.replicates===!0||e.replicates?.sends)&&databases[t]&&sr().primaryStore.get(Xe())?.replicates||e.subscriptions?.some(r=>(r.database||r.schema)===t&&r.subscribe)}function fne(){Iu(e=>{ua({},(t,r)=>{let n=e.name,s=TH.get(n);if(s||TH.set(n,s=new Map),s.has(r))return;let i;for(let o in t)if(i=t[o].auditStore,i)break;if(i){let o=PE(i,r,n,()=>{let c=o[0],l=o.lastTime;for(let{txnTime:u,onConfirm:f}of wu.get(r)||[])u>l&&u<=c&&f();o.lastTime=c});o.lastTime=0,s.set(r,o)}})})}function*C_(e){for(let t of e.routes||[]){let r=t.url,n;if(typeof t=="string"?t.includes("://")?r=t:n=t:n=t.hostname??t.host,n&&!r){let s=Nu.default.get(B.REPLICATION_SECUREPORT)??(!Nu.default.get(B.REPLICATION_PORT)&&Nu.default.get(B.OPERATIONSAPI_NETWORK_SECUREPORT)),i;(i=n.match(/:(\d+)$/)?.[1])?n=n.slice(0,-i[0].length-1):t.port?i=t.port:i=s||Nu.default.get(B.REPLICATION_PORT)||Nu.default.get(B.OPERATIONSAPI_NETWORK_PORT);let o=i?.lastIndexOf?.(":");o>0&&(i=+i.slice(o+1).replace(/[\[\]]/g,"")),r=(s?"wss://":"ws://")+n+":"+i}if(!r){AH.isMainThread&&console.error("Invalid route, must specify a url or host (with port)");continue}yield{replicates:!t.subscriptions,url:r,subscription:t.subscriptions,routes:t.routes,start_time:t.startTime,revoked_certificates:t.revokedCertificates,shard:t.shard}}}var AH,RH,Nu,yH,SH,TH,wu,Fc=be(()=>{Me();fs();Bp();AH=require("worker_threads"),RH=M(he()),Nu=M(ce());H();yH=M(hi());server.nodes=[];a(sr,"getHDBNodeTable");a(PE,"getReplicationSharedStatus");a(Iu,"subscribeToNodeUpdates");a(I_,"shouldReplicateToNode");TH=new Map;uD((e,t,r)=>{if(r>server.nodes.length)throw new RH.ClientError(`Cannot confirm replication to more nodes (${r}) than are in the network (${server.nodes.length})`);wu||(wu=new Map,fne());let n=wu.get(e);return n||(n=[],wu.set(e,n)),new Promise(s=>{let i=0;n.push({txnTime:t,onConfirm:a(()=>{++i===r&&s()},"onConfirm")})})});a(fne,"startSubscriptionToReplications");a(C_,"iterateRoutes")});var wH={};ve(wH,{connectedToNode:()=>Gc,disconnectedFromNode:()=>Du,ensureNode:()=>uo,requestClusterStatus:()=>NH,startOnMainThread:()=>zb});async function zb(e){let t=0,r=Je();for(let i of Object.getOwnPropertyNames(r)){let o=r[i];for(let c in o){let l=o[c];if(l.auditStore){DE.set(i,w_(l.auditStore));break}}}Li.whenThreadsStarted.then(async()=>{let i=[];for await(let o of r.system.hdb_nodes?.search([])||[])i.push(o);for(let o of C_(e))try{let c=!o.subscriptions;if(c){let u=Xe();sr().primaryStore.get(u)===void 0&&await uo(u,{name:u,url:e.url??da(),replicates:!0})}let l=o.trusted!==!1;if(c&&o.replicates==null&&(o.replicates=!0),i.find(u=>u.url===o.url))continue;s(o)}catch(c){console.error(c)}Iu(s)});let n;function s(i,o=i?.name){let c=Xe()&&o===Xe()||da()&&i?.url===da();if(c){let d=!!i?.replicates;if(n!==void 0&&n!==d)for(let h of sr().search([]))h.replicates&&h.name!==o&&s(h,h.name);n=d}if(it.trace("Setting up node replication for",i),!i){for(let[d,h]of lo){let _;for(let[p,{worker:S,nodes:g}]of h){let R=g[0];if(R&&R.name==o){_=!0;for(let[E,{worker:A}]of h)h.delete(E),it.warn("Node was deleted, unsubscribing from node",o,E,d),A?.postMessage({type:"unsubscribe-from-node",node:o,database:E,url:d});break}}if(_){lo.get(d).iterator.remove(),lo.delete(d);return}}return}if(c)return;if(!i.url){it.info(`Node ${i.name} is missing url`);return}let l=lo.get(i.url);if(l&&l.iterator.remove(),!(i.replicates===!0||i.replicates?.sends)&&!i.subscriptions?.length&&!l)return;if(it.info(`Added node ${i.name} at ${i.url} for process ${Xe()}`),i.replicates&&i.subscriptions&&(i={...i,subscriptions:null}),i.name){for(let[d,h]of Cu)if(i.url===h.url){Cu.delete(d);break}Cu.set(i.name,i)}let u=Je();if(l||(l=new Map,lo.set(i.url,l)),l.iterator=ua(e,(d,h,_)=>{_?f(h,!0):f(h,!1)}),i.subscriptions)for(let d of i.subscriptions){let h=d.database||d.schema;u[h]||(it.warn(`Database ${h} not found for node ${i.name}, making a subscription anyway`),f(h,!1))}function f(d,h){it.trace("Setting up replication for database",d,"on node",i.name);let _=l.get(d),p,S=[{replicateByDefault:h,...i}];DE.has(d)&&(S.push({replicateByDefault:h,name:Xe(),start_time:DE.get(d),end_time:Date.now(),replicates:!0}),DE.delete(d));let g=I_(i,d),R=Li.workers.filter(E=>E.name==="http");if(_?(p=_.worker,_.nodes=S):g&&(t=t%R.length,p=R[t++],l.set(d,{worker:p,nodes:S,url:i.url}),p?.on("exit",()=>{l.get(d)?.worker===p&&(l.delete(d),f(d,h))})),g)setTimeout(()=>{let E={type:"subscribe-to-node",database:d,nodes:S};p?p.postMessage(E):Pu(E)},_ne);else{it.info("Node no longer should be used, unsubscribing from node",i.replicates,!!u[d],sr().primaryStore.get(Xe())?.replicates),sr().primaryStore.get(Xe())?.replicates||(n=!1);let E={type:"unsubscribe-from-node",database:d,url:i.url,name:i.name};p?p.postMessage(E):ME(E)}}a(f,"onDatabase")}a(s,"onNodeUpdate"),Du=a(function(i){try{it.info("Disconnected from node",i.name,i.url,"finished",!!i.finished);let o=Array.from(Cu.keys()),c=o.sort(),l=c.indexOf(i.name||Ys(i.url));if(l===-1){it.warn("Disconnected node not found in node map",i.name,o);return}let u=lo.get(i.url),f=u?.get(i.database);if(!f){it.warn("Disconnected node not found in replication map",i.database,u);return}if(f.connected=!1,i.finished)return;let d=f.nodes[0];if(!(d.replicates===!0||d.replicates?.sends||d.subscriptions?.length))return;let h=(l+1)%c.length;for(;l!==h;){let _=c[h],p=Cu.get(_);u=lo.get(p.url);let S=u?.get(i.database);if(!S){h=(h+1)%c.length;continue}let{worker:g,nodes:R}=S,E=!1;for(let A of f.nodes){if(R.some(O=>O.name===A.name)){it.info(`Disconnected node is already failing over to ${_} for ${i.database}`);continue}R.push(A),E=!0}if(!E){it.info(`Disconnected node ${i.name} has no nodes to fail over to ${_}`);return}f.redirectingTo=S,it.info(`Failing over ${i.database} from ${i.name} to ${_}`),g?g.postMessage({type:"subscribe-to-node",database:i.database,nodes:R}):Pu({database:i.database,nodes:R});return}it.warn("Unable to find any other node to fail over to",i.name,i.url)}catch(o){it.error("Error failing over node",o)}},"disconnectedFromNode"),Gc=a(function(i){let o=lo.get(i.url),c=o?.get(i.database);if(!c){it.warn("Connected node not found in replication map, this may be because the node is being removed",i.database,o);return}if(c.connected=!0,c.latency=i.latency,c.redirectingTo){let{worker:l,nodes:u}=c.redirectingTo,f=u.find(d=>d.name===i.name);c.redirectingTo=null,f&&(u.splice(u.indexOf(f),1),l?l.postMessage({type:"subscribe-to-node",database:i.database,nodes:u}):Pu({database:i.database,nodes:u}))}},"connectedToNode"),(0,Li.onMessageByType)("disconnected-from-node",Du),(0,Li.onMessageByType)("connected-to-node",Gc),(0,Li.onMessageByType)("request-cluster-status",NH)}function NH(e,t){let r=[];for(let[n,s]of Cu)try{let i=lo.get(s.url);it.info("Getting cluster status for",n,s.url,"has dbs",i?.size);let o=[];if(i){for(let[l,{worker:u,connected:f,nodes:d,latency:h}]of i)o.push({database:l,connected:f,latency:h,thread_id:u?.threadId,nodes:d.map(_=>_.name)});let c=(0,Wb.cloneDeep)(s);c.database_sockets=o,delete c.ca,delete c.node_name,delete c.__updatedtime__,delete c.__createdtime__,r.push(c)}}catch(i){it.warn("Error getting cluster status for",s?.url,i)}return t?.postMessage({type:"cluster-status",connections:r}),{connections:r}}async function uo(e,t){let r=sr();e=e??Ys(t.url),t.name=e;try{if(t.ca){let s=new OH.X509Certificate(t.ca);t.ca_info={issuer:s.issuer.replace(/\n/g," "),subject:s.subject.replace(/\n/g," "),subject_alt_name:s.subjectAltName,serial_number:s.serialNumber,valid_from:s.validFrom,valid_to:s.validTo}}}catch(s){it.error("Error parsing replication CA info for hdb_nodes table",s.message)}let n=r.primaryStore.get(e);if(it.debug(`Ensuring node ${e} at ${t.url}, existing record:`,n,"new record:",t),!n)await r.put(t);else{t.replicates&&!bH.default.get(B.CLUSTERING_ENABLED)&&(t.subscriptions=null);for(let s in t)if(n[s]!==t[s]&&s==="subscriptions"&&t[s]&&n[s]){let i=[],o=(0,Wb.cloneDeep)(n[s]);for(let c of t[s]){let l=!1;for(let u of o)if((c.database??c.schema)===(u.database??u.schema)&&c.table===u.table){u.publish=c.publish,u.subscribe=c.subscribe,l=!0;break}l||i.push(c)}t.subscriptions=[...o,...i];break}if(Array.isArray(t.revoked_certificates)){let s=n.revoked_certificates||[];t.revoked_certificates=[...new Set([...s,...t.revoked_certificates])]}it.info(`Updating node ${e} at ${t.url}`),await r.patch(t)}}var Li,LE,it,Wb,bH,OH,_ne,lo,Du,Gc,Cu,DE,P_=be(()=>{Me();Li=M(rt());fs();LE=require("worker_threads");Fc();it=M(j()),Wb=require("lodash"),bH=M(ce());H();OH=require("crypto"),_ne=200,lo=new Map,Cu=new Map,DE=new Map;a(zb,"startOnMainThread");a(NH,"requestClusterStatus");LE.parentPort&&(Du=a(e=>{LE.parentPort.postMessage({type:"disconnected-from-node",...e})},"disconnectedFromNode"),Gc=a(e=>{LE.parentPort.postMessage({type:"connected-to-node",...e})},"connectedToNode"),(0,Li.onMessageByType)("subscribe-to-node",e=>{Pu(e)}),(0,Li.onMessageByType)("unsubscribe-from-node",e=>{ME(e)}));a(uo,"ensureNode")});var Qs=I(jH=>{"use strict";var ir=require("path"),En=require("fs-extra"),Lu=require("node-forge"),MH=require("net"),{generateKeyPair:jb,X509Certificate:fo,createPrivateKey:vH}=require("crypto"),hne=require("util");jb=hne.promisify(jb);var Rt=Lu.pki,Ws=require("joi"),{v4:UH}=require("uuid"),{validateBySchema:eO}=dt(),_t=j(),_s=ce(),hs=(H(),D(q)),{CONFIG_PARAMS:Mu}=hs,zs=GR(),{ClientError:_a}=he(),vE=require("node:tls"),{relative:xH,join:pne}=require("node:path"),{CERT_PREFERENCE_APP:Cwe,CERTIFICATE_VALUES:IH}=zs,mne=ec(),Jb=It(),{table:Ene,getDatabases:gne,databases:Qb}=(Me(),D(st)),{getJWTRSAKeys:CH}=(Tu(),D(S_));Object.assign(jH,{generateKeys:nO,updateConfigCert:VH,createCsr:Nne,signCertificate:wne,setCertTable:vu,loadCertificates:GH,reviewSelfSignedCert:iO,createTLSSelector:YH,listCertificates:zH,addCertificate:Mne,removeCertificate:Une,createNatsCerts:Pne,generateCertsKeys:Cne,getReplicationCert:L_,getReplicationCertAuth:One,renewSelfSigned:Dne,hostnamesFromCert:QH,getKey:xne});var{urlToNodeName:BH,getThisNodeUrl:Sne,getThisNodeName:xE,clearThisNodeName:Tne}=(fs(),D(ma)),{readFileSync:Ane,watchFile:Rne,statSync:HH}=require("node:fs"),Pwe=ce(),{getTicketKeys:yne,onMessageFromWorkers:bne}=rt(),fa=j(),{isMainThread:kH}=require("worker_threads"),{TLSSocket:FH,createSecureContext:Dwe}=require("node:tls"),tO=3650,D_=["127.0.0.1","localhost","::1"],rO=[{name:"countryName",value:"USA"},{name:"stateOrProvinceName",value:"Colorado"},{name:"localityName",value:"Denver"},{name:"organizationName",value:"HarperDB, Inc."}];bne(async e=>{e.type===hs.ITC_EVENT_TYPES.RESTART&&(_s.initSync(!0),await iO())});var Dr;function pa(){return Dr||(Dr=gne().system.hdb_certificate,Dr||(Dr=Ene({table:"hdb_certificate",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]}))),Dr}a(pa,"getCertTable");async function L_(){let e=YH("operations-api"),t={secureContexts:null,setSecureContext:a(s=>{},"setSecureContext")};await e.initialize(t);let r=t.secureContexts.get(xE());if(!r)return;let n=new fo(r.options.cert);return r.cert_parsed=n,r.issuer=n.issuer,r}a(L_,"getReplicationCert");async function One(){pa();let e=(await L_()).options.cert,r=new fo(e).issuer.match(/CN=(.*)/)?.[1];return Dr.get(r)}a(One,"getReplicationCertAuth");var PH,ha=new Map;function GH(){if(PH)return;PH=!0;let e=[{configKey:Mu.TLS},{configKey:Mu.OPERATIONSAPI_TLS}];pa();let t=ir.dirname(Jb.getConfigFilePath()),r;for(let{configKey:n}of e){let s=Jb.getConfigFromFile(n);if(s){Array.isArray(s)||(s=[s]);for(let i of s){let o=i.privateKey,c=o&&xH(pne(t,"keys"),o);c&&DH(o,l=>{ha.set(c,l)},"private key");for(let l of[!1,!0]){let u=i[l?"certificateAuthority":"certificate"];if(u&&kH){let f;DH(u,d=>{if(IH.cert===d)return;let h=i.hostname??i.hostnames??i.host??i.hosts;h&&!Array.isArray(h)&&(h=[h]);let _=KH(u),p=new fo(_),S;try{S=oO(p)}catch(A){_t.error("error extracting common name from certificate",A);return}if(S==null){_t.error("error extracting common name from certificate");return}if(p.checkIssued(new fo(IH.cert)))return;let g=Dr.primaryStore.get(S),R=HH(u).mtimeMs,E=!g||g.is_self_signed?1:g.file_timestamp??g.__updatedtime__;if(g&&R<=E){R<E&&_t.info(`Certificate ${S} at ${u} is older (${new Date(R)}) than the certificate in the database (${E>1?new Date(E):"only self signed certificate available"})`);return}r=Dr.put({name:S,uses:["https",...n.includes("operations")?["operations"]:[]],ciphers:i.ciphers,certificate:_,private_key_name:c,is_authority:l,hostnames:h,file_timestamp:R,details:{issuer:p.issuer.replace(/\n/g," "),subject:p.subject.replace(/\n/g," "),subject_alt_name:p.subjectAltName,serial_number:p.serialNumber,valid_from:p.validFrom,valid_to:p.validTo}})},l?"certificate authority":"certificate")}}}}}return r}a(GH,"loadCertificates");function DH(e,t,r){let n,s=a((i,o)=>{try{let c=i.mtimeMs;c&&c!==n&&(o&&kH&&_t.warn(`Reloading ${r}:`,e),n=c,t(KH(e)))}catch(c){_t.error(`Error loading ${r}:`,e,c)}},"loadFile");En.existsSync(e)?s(HH(e)):_t.error(`${r} file not found:`,e),Rne(e,{persistent:!1},s)}a(DH,"loadAndWatch");function Xb(){let e=Sne();if(e==null){let t=D_[0];return _t.info("replication url is missing from harperdb-config.yaml, using default host"+t),t}return BH(e)}a(Xb,"getHost");function UE(){let e=xE();if(e==null){let t=D_[0];return _t.info("replication url is missing from harperdb-config.yaml, using default host"+t),t}return e}a(UE,"getCommonName");async function Nne(){let e=await L_(),t=Rt.certificateFromPem(e.options.cert),r=Rt.privateKeyFromPem(e.options.key);_t.info("Creating CSR with cert named:",e.name);let n=Rt.createCertificationRequest();n.publicKey=t.publicKey;let s=[{name:"commonName",value:UE()},...rO];_t.info("Creating CSR with subject",s),n.setSubject(s);let i=[{name:"unstructuredName",value:"HarperDB, Inc."},{name:"extensionRequest",extensions:qH()}];return _t.info("Creating CSR with attributes",i),n.setAttributes(i),n.sign(r),Lu.pki.certificationRequestToPem(n)}a(Nne,"createCsr");function qH(){let e=D_.includes(UE())?D_:[...D_,UE()];return e.includes(Xb())||e.push(Xb()),[{name:"basicConstraints",cA:!1,critical:!0},{name:"keyUsage",digitalSignature:!0,keyEncipherment:!0,critical:!0},{name:"extKeyUsage",serverAuth:!0,clientAuth:!0},{name:"nsCertType",client:!0,server:!0},{name:"subjectAltName",altNames:e.map(t=>MH.isIP(t)?{type:7,ip:t}:{type:2,value:t})}]}a(qH,"certExtensions");async function wne(e){let t={},r=ir.join(_s.getHdbBasePath(),hs.LICENSE_KEY_DIR_NAME);if(e.csr){let n,s;pa();for await(let f of Dr.search([]))if(f.is_authority&&!f.details.issuer.includes("HarperDB-Certificate-Authority")){if(ha.has(f.private_key_name)){n=ha.get(f.private_key_name),s=f;break}else if(f.private_key_name&&await En.exists(ir.join(r,f.private_key_name))){n=En.readFile(ir.join(r,f.private_key_name)),s=f;break}}if(!n){let f=await Zb();s=f.ca,n=f.private_key}n=Rt.privateKeyFromPem(n),t.signingCA=s.certificate;let i=Rt.certificateFromPem(s.certificate);_t.info("Signing CSR with cert named",s.name);let o=Rt.certificationRequestFromPem(e.csr);try{o.verify()}catch(f){return _t.error(f),new Error("Error verifying CSR: "+f.message)}let c=Lu.pki.createCertificate();c.serialNumber=Math.random().toString().slice(2,10),c.validity.notBefore=new Date;let l=new Date;c.validity.notAfter=l,c.validity.notAfter.setDate(l.getDate()+tO),_t.info("sign cert setting validity:",c.validity),_t.info("sign cert setting subject from CSR:",o.subject.attributes),c.setSubject(o.subject.attributes),_t.info("sign cert setting issuer:",i.subject.attributes),c.setIssuer(i.subject.attributes);let u=o.getAttribute({name:"extensionRequest"}).extensions;_t.info("sign cert adding extensions from CSR:",u),c.setExtensions(u),c.publicKey=o.publicKey,c.sign(n,Lu.md.sha256.create()),t.certificate=Rt.certificateToPem(c)}else _t.info("Sign cert did not receive a CSR from:",e.url,"only the CA will be returned");return t}a(wne,"signCertificate");async function Ine(e,t){await vu({name:xE(),uses:["https","wss"],certificate:e,private_key_name:"privateKey.pem",is_authority:!1,is_self_signed:!0}),await vu({name:t.subject.getField("CN").value,uses:["https","wss"],certificate:Rt.certificateToPem(t),private_key_name:"privateKey.pem",is_authority:!0,is_self_signed:!0})}a(Ine,"createCertificateTable");async function vu(e){let t=new fo(e.certificate);e.details={issuer:t.issuer.replace(/\n/g," "),subject:t.subject.replace(/\n/g," "),subject_alt_name:t.subjectAltName,serial_number:t.serialNumber,valid_from:t.validFrom,valid_to:t.validTo},pa(),await Dr.patch(e)}a(vu,"setCertTable");async function nO(){let e=await jb("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}});return{public_key:Rt.publicKeyFromPem(e.publicKey),private_key:Rt.privateKeyFromPem(e.privateKey)}}a(nO,"generateKeys");async function sO(e,t,r){let n=Rt.createCertificate();if(!t){let o=await L_();t=Rt.certificateFromPem(o.options.cert).publicKey}n.publicKey=t,n.serialNumber=Math.random().toString().slice(2,10),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+tO);let i=[{name:"commonName",value:UE()},...rO];return n.setSubject(i),n.setIssuer(r.subject.attributes),n.setExtensions(qH()),n.sign(e,Lu.md.sha256.create()),Rt.certificateToPem(n)}a(sO,"generateCertificates");async function Zb(){let e=await zH(),t;for(let r of e){if(!r.is_authority)continue;let n=await WH(r.private_key_name);if(r.private_key_name&&n&&new fo(r.certificate).checkPrivateKey(vH(n))){_t.trace(`CA named: ${r.name} found with matching private key`),t={ca:r,private_key:n};break}}if(t)return t;_t.trace("No CA found with matching private key")}a(Zb,"getCertAuthority");async function $H(e,t,r=!0){let n=Rt.createCertificate();n.publicKey=t,n.serialNumber=Math.random().toString().slice(2,10),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+tO);let i=[{name:"commonName",value:`HarperDB-Certificate-Authority-${_s.get(Mu.REPLICATION_HOSTNAME)??BH(_s.get(Mu.REPLICATION_URL))??UH().split("-")[0]}`},...rO];n.setSubject(i),n.setIssuer(i),n.setExtensions([{name:"basicConstraints",cA:!0,critical:!0},{name:"keyUsage",keyCertSign:!0,critical:!0}]),n.sign(e,Lu.md.sha256.create());let o=ir.join(_s.getHdbBasePath(),hs.LICENSE_KEY_DIR_NAME),c=ir.join(o,zs.PRIVATEKEY_PEM_NAME);return r&&await En.writeFile(c,Rt.privateKeyToPem(e)),n}a($H,"generateCertAuthority");async function Cne(){let{private_key:e,public_key:t}=await nO(),r=await $H(e,t),n=await sO(e,t,r);await Ine(n,r),VH()}a(Cne,"generateCertsKeys");async function Pne(){let e=await sO(Rt.privateKeyFromPem(zs.CERTIFICATE_VALUES.key),void 0,Rt.certificateFromPem(zs.CERTIFICATE_VALUES.cert)),t=ir.join(_s.getHdbBasePath(),hs.LICENSE_KEY_DIR_NAME),r=ir.join(t,zs.NATS_CERTIFICATE_PEM_NAME);await En.exists(r)||await En.writeFile(r,e);let n=ir.join(t,zs.NATS_CA_PEM_NAME);await En.exists(n)||await En.writeFile(n,zs.CERTIFICATE_VALUES.cert)}a(Pne,"createNatsCerts");async function Dne(){pa();for await(let e of Dr.search([{attribute:"is_self_signed",value:!0}]))await Dr.delete(e.name);await iO()}a(Dne,"renewSelfSigned");async function iO(){Tne(),await GH(),pa();let e=await Zb();if(!e){_t.notify("A matching Certificate Authority and key was not found. A new CA will be created in advance, so it's available if needed.");let r=_s.get(Mu.TLS_PRIVATEKEY),n=ir.join(_s.getHdbBasePath(),hs.LICENSE_KEY_DIR_NAME),s,i=xH(n,r);try{s=Rt.privateKeyFromPem(await En.readFile(r))}catch(c){_t.warn("Unable to parse the TLS key",r,"A new key will be generated and used to create Certificate Authority",c),{private_key:s}=await nO(),await En.exists(ir.join(n,zs.PRIVATEKEY_PEM_NAME))&&(i=`privateKey${UH().split("-")[0]}.pem`),await En.writeFile(ir.join(n,i),Rt.privateKeyToPem(s))}let o=await $H(s,Rt.setRsaPublicKey(s.n,s.e),!1);await vu({name:o.subject.getField("CN").value,uses:["https"],certificate:Rt.certificateToPem(o),private_key_name:i,is_authority:!0,is_self_signed:!0})}if(!await L_()){let r=xE();_t.notify(`A suitable replication certificate was not found, creating new self singed cert named: ${r}`),e=e??await Zb();let n=Rt.certificateFromPem(e.ca.certificate),s=n.publicKey,i=await sO(Rt.privateKeyFromPem(e.private_key),s,n);await vu({name:r,uses:["https","operations","wss"],certificate:i,is_authority:!1,private_key_name:e.ca.private_key_name,is_self_signed:!0})}}a(iO,"reviewSelfSignedCert");function VH(){let e=mne(Object.keys(hs.CONFIG_PARAM_MAP),!0),t=ir.join(_s.getHdbBasePath(),hs.LICENSE_KEY_DIR_NAME),r=ir.join(t,zs.PRIVATEKEY_PEM_NAME),n=ir.join(t,zs.NATS_CERTIFICATE_PEM_NAME),s=ir.join(t,zs.NATS_CA_PEM_NAME),i=hs.CONFIG_PARAMS,o={[i.TLS_PRIVATEKEY]:e[i.TLS_PRIVATEKEY.toLowerCase()]?e[i.TLS_PRIVATEKEY.toLowerCase()]:r};e[i.TLS_CERTIFICATE.toLowerCase()]&&(o[i.TLS_CERTIFICATE]=e[i.TLS_CERTIFICATE.toLowerCase()]),e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(o[i.TLS_CERTIFICATEAUTHORITY]=e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_CERTIFICATE]=e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]),e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_PRIVATEKEY]=e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY]=e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]),(e[i.CLUSTERING_ENABLED.toLowerCase()]||e.clustering)&&(o[i.CLUSTERING_TLS_CERTIFICATE]=e[i.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]??n,o[i.CLUSTERING_TLS_CERT_AUTH]=e[i.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]??s,o[i.CLUSTERING_TLS_PRIVATEKEY]=e[i.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]??r),Jb.updateConfigValue(void 0,void 0,o,!1,!0)}a(VH,"updateConfigCert");function KH(e){return e.startsWith("-----BEGIN")?e:Ane(e,"utf8")}a(KH,"readPEM");var LH=vE.createSecureContext;vE.createSecureContext=function(e){if(!e.cert||!e.key)return LH(e);let t={...e};delete t.key,delete t.cert;let r=LH(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var Lne=FH.prototype._init;FH.prototype._init=function(e,t){Lne.call(this,e,t);let r=this;this._handle.oncertcb=function(n){let s=n.servername;r._SNICallback(s,(i,o)=>{this.sni_context=o?.context||o,this.certCbDone()})}};var qc=new Map;function YH(e,t){let r=new Map,n,s=!1;return i.initialize=o=>i.ready?i.ready:(o&&(o.secureContexts=r,o.secureContextsListeners=[]),i.ready=new Promise((c,l)=>{async function u(){try{r.clear(),qc.clear();let f=0;for await(let d of Qb.system.hdb_certificate.search([])){let h=d.certificate,_=new fo(h);d.is_authority&&(_.asString=h,qc.set(_.subject,h))}for await(let d of Qb.system.hdb_certificate.search([]))try{if(d.is_authority)continue;let h=e==="operations-api",_=d.is_self_signed?1:2;h&&d.uses?.includes?.("operations")&&(_+=1);let p=await WH(d.private_key_name),S=d.certificate,g=new fo(S);if(qc.has(g.issuer)&&(S+=`
23
+ `+qc.get(g.issuer)),!p||!S)throw new Error("Missing private key or certificate for secure server");let R={ciphers:d.ciphers,ticketKeys:yne(),availableCAs:qc,ca:t&&Array.from(qc.values()),cert:S,key:p,key_file:d.private_key_name,is_self_signed:d.is_self_signed};o&&(R.sessionIdContext=o.sessionIdContext);let E=vE.createSecureContext(R);E.name=d.name,E.options=R,E.quality=_,E.certificateAuthorities=Array.from(qc),E.certStart=S.toString().slice(0,100);let A=d.hostnames??QH(g);Array.isArray(A)||(A=[A]);let O;for(let v of A)if(v){v[0]==="*"&&(s=!0,v=v.slice(1)),v===Xb()&&(_+=2),MH.isIP(v)&&(O=!0);let F=r.get(v)?.quality??0;_>F&&r.set(v,E)}else fa.error("No hostname found for certificate at",vE.certificate);fa.trace("Adding TLS",E.name,"for",o.ports||"client","cert named",d.name,"hostnames",A,"quality",_,"best quality",f),_>f&&(i.defaultContext=n=E,f=_,o&&(o.defaultContext=E))}catch(h){fa.error("Error applying TLS for",d.name,h)}o?.secureContextsListeners.forEach(d=>d()),c(n)}catch(f){l(f)}}a(u,"updateTLS"),Qb.system.hdb_certificate.subscribe({listener:a(()=>setTimeout(()=>u(),1500).unref(),"listener"),omitCurrent:!0}),u()})),i;function i(o,c){fa.info("TLS requested for",o||"(no SNI)");let l=o;for(;;){let f=r.get(l);if(f)return fa.debug("Found certificate for",o,f.certStart),f.updatedContext&&(f=f.updatedContext),c(null,f);if(s&&l){let d=l.indexOf(".",1);d<0?l="":l=l.slice(d)}else break}o?fa.debug("No certificate found to match",o,"using the default certificate"):fa.debug("No SNI, using the default certificate",n?.name);let u=n;u?u.updatedContext&&(u=u.updatedContext):fa.info("No default certificate found"),c(null,u)}a(i,"SNICallback")}a(YH,"createTLSSelector");async function WH(e){let t=ha.get(e);return!t&&e?await En.readFile(ir.join(_s.get(Mu.ROOTPATH),hs.LICENSE_KEY_DIR_NAME,e),"utf8"):t}a(WH,"getPrivateKeyByName");async function zH(){pa();let e=[];for await(let t of Dr.search([]))e.push(t);return e}a(zH,"listCertificates");async function Mne(e){let t=eO(e,Ws.object({name:Ws.string().required(),certificate:Ws.string().required(),is_authority:Ws.boolean().required(),private_key:Ws.string(),hosts:Ws.array(),uses:Ws.array()}));if(t)throw new _a(t.message);let{name:r,certificate:n,private_key:s,is_authority:i}=e,o=new fo(n),c=!1,l=!1,u;for(let[_,p]of ha)!s&&!c&&o.checkPrivateKey(vH(p))&&(c=!0,u=_),s&&s===p&&(l=!0,u=_);if(!i&&!s&&!c)throw new _a("A suitable private key was not found for this certificate");let f;if(!r){try{f=oO(o)}catch(_){_t.error(_)}if(f==null)throw new _a("Error extracting certificate common name, please provide a name parameter")}let d=vne(r??f);s&&!c&&!l&&(await En.writeFile(ir.join(_s.getHdbBasePath(),hs.LICENSE_KEY_DIR_NAME,d+".pem"),s),ha.set(d,s));let h={name:r??f,certificate:n,is_authority:i,hosts:e.hosts,uses:e.uses};return(!i||i&&u||i&&s)&&(h.private_key_name=u??d+".pem"),await vu(h),"Successfully added certificate: "+d}a(Mne,"addCertificate");function vne(e){return e.replace(/[^a-z0-9\.]/gi,"-")}a(vne,"sanitizeName");async function Une(e){let t=eO(e,Ws.object({name:Ws.string().required()}));if(t)throw new _a(t.message);let{name:r}=e;pa();let n=await Dr.get(r);if(!n)throw new _a(r+" not found");let{private_key_name:s}=n;if(s){let i=Array.from(await Dr.search([{attribute:"private_key_name",value:s}]));i.length===1&&i[0].name===r&&(_t.info("Removing private key named",s),await En.remove(ir.join(_s.getHdbBasePath(),hs.LICENSE_KEY_DIR_NAME,s)))}return await Dr.delete(r),"Successfully removed "+r}a(Une,"removeCertificate");function oO(e){return e.subject.match(/CN=(.*)/)?.[1]}a(oO,"extractCommonName");function QH(e){return e.subjectAltName?e.subjectAltName.split(",").map(t=>{let r=t.indexOf(":");if(t=t.slice(r+1),t=t.trim(),t[0]==='"')try{t=JSON.parse(t)}catch{}return t.indexOf("=")>-1?t.match(/CN=([^,]*)/)?.[1]:t}).filter(t=>t):[oO(e)]}a(QH,"hostnamesFromCert");async function xne(e){if(e.bypass_auth!==!0)throw new _a("Unauthorized","401");let t=eO(e,Ws.object({name:Ws.string().required()}));if(t)throw new _a(t.message);let{name:r}=e;if(r===".jwtPrivate")return(await CH()).privateKey;if(r===".jwtPublic")return(await CH()).publicKey;if(ha.get(r))return ha.get(e.name);throw new _a("Key not found")}a(xne,"getKey")});var pk={};ve(pk,{CONFIRMATION_STATUS_POSITION:()=>hk,NodeReplicationConnection:()=>M_,OPERATION_REQUEST:()=>dO,RECEIVED_TIME_POSITION:()=>_O,RECEIVED_VERSION_POSITION:()=>fO,SENDING_TIME_POSITION:()=>GE,createWebSocket:()=>VE,database_subscriptions:()=>ga,replicateOverWS:()=>v_,table_update_listeners:()=>pO});async function VE(e,t){let{authorization:r,rejectUnauthorized:n}=t||{},s=Xe(),i;if(e.includes("wss://")){if(!cO){let l=(0,dk.createTLSSelector)("operations-api"),u={secureContexts:null};await l.initialize(u),cO=u.secureContexts}if(i=cO.get(s),i&&le.debug?.("Creating web socket for URL",e,"with certificate named:",i.name),!i&&n!==!1)throw new Error("Unable to find a valid certificate to use for replication to connect to "+e)}let o={};r&&(o.Authorization=r);let c={headers:o,localAddress:s?.startsWith("127.0")?s:void 0,servername:(0,_k.isIP)(t?.serverName)?void 0:t?.serverName,noDelay:!0,highWaterMark:128*1024,rejectUnauthorized:n!==!1,secureContext:void 0};return i&&(c.secureContext=fk.createSecureContext({...i.options,ca:Array.from(Vc)})),new lk.WebSocket(e,"harperdb-replication-v1",c)}function v_(e,t,r){let n=t.port||t.securePort,s=$c.pid%1e3+"-"+uk.threadId+(n?"s:"+n:"c:"+t.url?.slice(-4))+" "+Math.random().toString().slice(2,3),i=0,o=Buffer.allocUnsafeSlow(1024),c=0,l=new DataView(o.buffer,0,1024),u=t.database,f=t.databaseSubscriptions||ga,d,h,_=!1,p=t.subscription;p?.then&&p.then(m=>p=m);let S=t.tables||u&&Je()[u];if(!r){le.error?.("No authorization provided"),nn(1008,"Unauthorized");return}let g=new Map,R=[],E=r.name;E&&t.connection&&(t.connection.nodeName=E);let A,O,v,F,G,Y,te,se=1e3,X,ne=0,Q=0,pe=0,Re=new Map,Ce=[],me=0,Jt;if(t.url){let m=a(()=>{G&&Q===e._socket?.bytesRead&&pe===e._socket?.bytesWritten?e.terminate():(G=performance.now(),e.ping(),Q=e._socket?.bytesRead,pe=e._socket?.bytesWritten)},"send_ping");v=setInterval(m,ok).unref(),m()}else ct();e._socket?.setMaxListeners(200);function ct(){clearTimeout(F),Q=e._socket?.bytesRead,pe=e._socket?.bytesWritten,F=setTimeout(()=>{Q===e._socket?.bytesRead&&pe===e._socket?.bytesWritten&&(le.warn?.(`Timeout waiting for ping from ${E}, terminating connection and reconnecting`),e.terminate())},ok*2).unref()}a(ct,"resetPingTimer");function Ar(){return h||(h=PE(d,u,E)),h}a(Ar,"getSharedStatus"),u&&Fo(u);let is,In,Pl=[],Dl=[],kT,FT=[],Lt=[],Hd=[],fp=150,_p=25,kd=0,hp=0,Pe=!1,Fd,rn,Nr,Ll;e.on("message",m=>{ne=performance.now();try{let T=m.dataView=new Kc(m.buffer,m.byteOffset,m.byteLength);if(m[0]>127){let C=(0,ze.decode)(m),[N,L,k]=C;switch(N){case XH:{if(L){if(E){if(E!==L){le.error?.(s,`Node name mismatch, expecting to connect to ${E}, but peer reported name as ${L}, disconnecting`),e.send((0,ze.encode)([Uu])),nn(1008,"Node name mismatch");return}}else if(E=L,t.connection?.tentativeNode){let U=t.connection.tentativeNode;U.name=E,t.connection.tentativeNode=null,uo(E,U)}if(t.connection&&(t.connection.nodeName=E),le.debug?.(s,"received node name:",E,"db:",u),!u)try{Fo(u=C[2]),u==="system"&&(is=ua(t,(U,ue)=>{vl(ue)&&Go(ue)}),e.on("close",()=>{is?.remove()}))}catch(U){le.warn?.(s,"Error setting database",U),e.send((0,ze.encode)([Uu])),nn(1008,U.message);return}Br()}break}case sk:{le.debug?.(s,"Received table definitions for",L.map(U=>U.table));for(let U of L){let ue=C[2];U.database=ue;let ae;vl(ue)&&(ue==="system"?qe[ue]?.[U.table]||(ae=lO(U,qe[ue]?.[U.table])):ae=lO(U,qe[ue]?.[U.table]),d||(d=ae?.auditStore),S||(S=Je()?.[ue]))}break}case Uu:nn();break;case dO:try{let U=r?.replicates||r?.subscribers||r?.name;server.operation(L,{user:r},!U).then(ue=>{Array.isArray(ue)&&(ue={results:ue}),ue.requestId=L.requestId,e.send((0,ze.encode)([HE,ue]))},ue=>{e.send((0,ze.encode)([HE,{requestId:L.requestId,error:ue instanceof Error?ue.toString():ue}]))})}catch(U){e.send((0,ze.encode)([HE,{requestId:L.requestId,error:U instanceof Error?U.toString():U}]))}break;case HE:let{resolve:P,reject:x}=g.get(L.requestId);L.error?x(new Error(L.error)):P(L),g.delete(L.requestId);break;case aO:let $=C[3];S||(u?le.error?.(s,"No tables found for",u):le.error?.(s,"Database name never received"));let z=S[$];z=lO({table:$,database:u,attributes:L.attributes,schemaDefined:L.schemaDefined},z),Pl[k]={name:$,decoder:new ze.Packr({useBigIntExtension:!0,randomAccessStructure:!0,freezeData:!0,typedStructs:L.typedStructs,structures:L.structures}),getEntry(U){return z.primaryStore.getEntry(U)},rootStore:z.primaryStore.rootStore};break;case ZH:Ll=d?gH(L,d):new Map,kT=C[2],le.debug?.(s,`Acknowledged subscription request, receiving messages for nodes: ${kT}`);break;case ek:let ie=k;Hd[ie]=L;break;case nk:Ar()[hk]=L,le.trace?.(s,"received and broadcasting committed update",L),Ar().buffer.notify();break;case rk:A=L,p.send({type:"end_txn",localTime:A,remoteNodeIds:R});break;case kE:{let U=C[1],{fileId:ue,size:ae,finished:fe,error:ee}=U,W=Re.get(ue);le.debug?.("Received blob",ue,"has stream",!!W,"connectedToBlob",!!W?.connectedToBlob,"length",C[2].length,"finished",fe),W||(W=new uO.PassThrough,W.expectedSize=ae,Re.set(ue,W)),W.lastChunk=Date.now(),fe?(ee?(W.on("error",()=>{}),W.destroy(new Error("Blob error: "+ee))):W.end(C[2]),W.connectedToBlob&&Re.delete(ue)):W.write(C[2]);break}case tk:{let U=L,ue;try{let ae=C[3],fe=Dl[k]||(Dl[k]=S[C[4]]);if(!fe)return le.warn?.("Unknown table id trying to handle record request",k);let ee=fe.primaryStore.getBinaryFast(Symbol.for("structures")),W=ee.length;if(W!==hp){hp=W;let Ae=(0,ze.decode)(ee);e.send((0,ze.encode)([aO,{typedStructs:Ae.typed,structures:Ae.named},k,fe.tableName]))}let _e=fe.primaryStore.getBinaryFast(ae);if(_e){let Ae=fe.primaryStore.decoder.decode(_e,{valueAsBuffer:!0});ue=(0,ze.encode)([BE,U,{value:Ae.value,expiresAt:Ae.expiresAt,version:Ae.version,residencyId:Ae.residencyId,nodeId:Ae.nodeId,user:Ae.user}])}else ue=(0,ze.encode)([BE,U])}catch(ae){ue=(0,ze.encode)([BE,U,{error:ae.message}])}e.send(ue);break}case BE:{let{resolve:U,reject:ue,tableId:ae,key:fe}=g.get(C[1]),ee=C[2];if(ee?.error)ue(new Error(ee.error));else if(ee){let W=Pl[ae].decoder.decode(ee.value);ee.value=W,ee.key=fe,U(ee)}else U();g.delete(C[1]);break}case JH:{Nr=L;let U,ue,ae=!1;if(p){if(u!==p.databaseName&&!p.then){le.error?.("Subscription request for wrong database",u,p.databaseName);return}}else p=f.get(u);if(le.debug?.(s,"received subscription request for",u,"at",Nr),!p){let Ee;p=new Promise(je=>{le.debug?.("Waiting for subscription to database "+u),Ee=je}),p.ready=Ee,ga.set(u,p)}if(r.name)ue=sr().subscribe(r.name),ue.then(async Ee=>{U=Ee;for await(let je of U){let tt=je.value;if(!(tt?.replicates===!0||tt?.replicates?.receives||tt?.subscriptions?.some(Gt=>(Gt.database||Gt.schema)===u&&Gt.publish!==!1))){ae=!0,e.send((0,ze.encode)([Uu])),nn(1008,`Unauthorized database subscription to ${u}`);return}}},Ee=>{le.error?.(s,"Error subscribing to HDB nodes",Ee)});else if(!(r?.role?.permission?.super_user||r.replicates)){e.send((0,ze.encode)([Uu])),nn(1008,`Unauthorized database subscription to ${u}`);return}if(rn&&(le.debug?.(s,"stopping previous subscription",u),rn.emit("close")),Nr.length===0)return;let fe=Nr[0],ee=a(Ee=>{if(Ee&&(fe.replicateByDefault?!fe.tables.includes(Ee.tableName):fe.tables.includes(Ee.tableName)))return{table:Ee}},"tableToTableEntry"),W={txnTime:0},_e,Ae,ye=1/0,lt,et=a((Ee,je)=>{if(Ee.type==="end_txn"){W.txnTime&&(o[i]!==66&&le.error?.("Invalid encoding of message"),Ul(9),Ul(qE),Bl(lt=je),Hr()),i=c,W.txnTime=0;return}let tt=Ee.nodeId,Gt=Ee.tableId,qt=Ae[Gt];if(!qt&&(qt=Ae[Gt]=ee(p.tableById[Gt]),!qt))return le.debug?.("Not subscribed to table",Gt);let kr=qt.table,ja=kr.primaryStore,Mt=ja.encoder;(Ee.extendedType&tm||!Mt.typedStructs)&&(Mt._mergeStructures(Mt.getStructures()),Mt.typedStructs&&(Mt.lastTypedStructuresLength=Mt.typedStructs.length));let mp=_e[tt];if(!(mp&&mp.startTime<je&&(!mp.endTime||mp.endTime>je)))return FE&&le.trace?.(s,"skipping replication update",Ee.recordId,"to:",E,"from:",tt,"subscribed:",_e),zC();FE&&le.trace?.(s,"sending replication update",Ee.recordId,"to:",E,"from:",tt,"subscribed:",_e);let GT=Ee.version;W.txnTime!==GT&&(W.txnTime&&(FE&&le.trace?.(s,"new txn time, sending queued txn",W.txnTime),o[i]!==66&&le.error?.("Invalid encoding of message"),Hr()),W.txnTime=GT,i=c,Bl(GT));let Ja=Ee.residencyId,qT=Ml(Ja,kr),Ep;if(qT&&!qT.includes(E)){let Xa=Ml(Ee.previousResidencyId,kr);if(Xa&&!Xa.includes(E)&&(Ee.type==="put"||Ee.type==="patch")||kr.getResidencyById)return zC();let $d=Ee.recordId;le.trace?.(s,"sending invalidation",$d,E,"from",tt);let $o=0;Ja&&($o|=fc),Ee.previousResidencyId&&($o|=_c);let Ds,sn=null;for(let gp in kr.indices){if(!sn){if(Ds=Ee.getValue(ja,!0),!Ds)break;sn={}}sn[gp]=Ds[gp]}Ep=jl(Ee.version,Gt,$d,null,tt,Ee.user,Ee.type==="put"||Ee.type==="patch"?"invalidate":Ee.type,Mt.encode(sn),$o,Ja,Ee.previousResidencyId,Ee.expiresAt)}function zC(){le.trace?.(s,"skipping audit record",Ee.recordId),Y||(Y=setTimeout(()=>{Y=null,(lt||0)+ik/2<ye&&(FE&&le.trace?.(s,"sending skipped sequence update",ye),e.send((0,ze.encode)([rk,ye])))},ik).unref())}a(zC,"skipAuditRecord");let $T=Mt.typedStructs,VT=Mt.structures;if(($T?.length!=qt.typed_length||VT?.length!=qt.structure_length)&&(qt.typed_length=$T?.length,qt.structure_length=VT.length,le.debug?.(s,"send table struct",qt.typed_length,qt.structure_length),qt.sentName||(qt.sentName=!0),e.send((0,ze.encode)([aO,{typedStructs:$T,structures:VT,attributes:kr.attributes,schemaDefined:kr.schemaDefined},Gt,qt.table.tableName]))),Ja&&!Lt[Ja]&&(e.send((0,ze.encode)([ek,qT,Ja])),Lt[Ja]=!0),Ep)Ul(Ep.length),xl(Ep);else{let Xa=Ee.encoded;Ee.extendedType&vn&&TO(()=>Ee.getValue(ja),async $o=>{let Ds=$E($o);try{let sn;me++;for await(let gp of $o.stream()){if(sn&&(le.debug?.("Sending blob chunk",Ds,"length",sn.length),e.send((0,ze.encode)([kE,{fileId:Ds,size:$o.size},sn]))),sn=gp,ae)return;e._socket.writableNeedDrain&&(le.debug?.("draining",Ds),await new Promise(NQ=>e._socket.once("drain",NQ)),le.debug?.("drained",Ds))}le.debug?.("Sending final blob chunk",Ds,"length",sn.length),e.send((0,ze.encode)([kE,{fileId:Ds,size:$o.size,finished:!0},sn]))}catch(sn){le.debug?.("Error sending blob",sn),e.send((0,ze.encode)([kE,{fileId:Ds,finished:!0,error:sn.toString()},Buffer.alloc(0)]))}finally{me--,me<_p&&Jt?.()}});let $d=Xa[0]===66?8:0;Ul(Xa.length-$d),xl(Xa,$d),le.trace?.("wrote record",Ee.recordId,"length:",Xa.length)}},"sendAuditRecord"),Hr=a(()=>{c-i>8?(e.send(o.subarray(i,c)),le.debug?.(s,"Sent message, size:",c-i)):le.debug?.(s,"skipping empty transaction")},"sendQueuedData");rn=new hO.EventEmitter,rn.once("close",()=>{ae=!0,U?.end()});for(let{startTime:Ee}of Nr)Ee<ye&&(ye=Ee);(ue||Promise.resolve()).then(async()=>{p=await p,d=p.auditStore,Ae=p.tableById.map(ee),_e=[];for(let{name:je,startTime:tt,endTime:Gt}of Nr){let qt=CE(je,d);le.debug?.("subscription to",je,"using local id",qt,"starting",tt),_e[qt]={startTime:tt,endTime:Gt}}Go(u),is||(is=Yc(je=>{je.databaseName===u&&Go(u)}),In=U_(je=>{je===u&&(e.send((0,ze.encode)([Uu])),nn())}),e.on("close",()=>{is?.remove(),In?.remove()})),e.send((0,ze.encode)([ZH,N_(p.auditStore),Nr.map(({name:je})=>je)]));let Ee=!0;do{isFinite(ye)||(le.warn?.("Invalid sequence id "+ye),nn(1008,"Invalid sequence id"+ye));let je;if(Ee&&!ae&&(Ee=!1,!(EO(d)<=ye)&&(ck.default.get(B.REPLICATION_COPYTABLESTOCATCHUP)??Bne)&&server.nodes[0]?.name===E)){le.info?.("Replicating all tables to",E);let Gt=ye,qt=KE(d);for(let kr in S){if(!ee(kr))continue;let ja=S[kr];for(let Mt of ja.primaryStore.getRange({snapshot:!1})){if(ae)return;Mt.localTime>=ye&&(le.trace?.(s,"Copying record from",u,kr,Mt.key,Mt.localTime),Gt=Math.max(Mt.localTime,Gt),je=!0,Ar()[GE]=1,et({recordId:Mt.key,tableId:ja.tableId,type:"put",getValue(){return Mt.value},encoded:ja.primaryStore.getBinary(Mt.key),version:Mt.version,residencyId:Mt.residencyId,nodeId:qt,extendedType:Mt.metadataFlags},Mt.localTime))}}ye=Gt}for(let{key:tt,value:Gt}of d.getRange({start:ye||1,exclusiveStart:!0,snapshot:!1})){if(ae)return;let qt=Ot(Gt);le.debug?.("sending audit record",new Date(tt)),Ar()[GE]=tt,ye=tt,et(qt,tt),e._socket.writableNeedDrain?await new Promise(kr=>{le.debug?.(`Waiting for remote node ${E} to allow more commits ${e._socket.writableNeedDrain?"due to network backlog":"due to requested flow directive"}`),e._socket.once("drain",kr)}):me>_p?await new Promise(kr=>{Jt=kr}):await new Promise(setImmediate),rn.startTime=tt,je=!0}je&&et({type:"end_txn"},ye),Ar()[GE]=0,await mk(d)}while(!ae)}).catch(Ee=>{le.error?.(s,"Error handling subscription to node",Ee),nn(1008,"Error handling subscription to node")});break}}return}T.position=8;let w=!0,y,b;do{Ar();let C=T.readInt();if(C===9&&T.getUint8(T.position)==qE){T.position++,A=b=T.readFloat64(),h[fO]=A,h[_O]=Date.now(),le.trace?.("received remote sequence update",A,u);break}let N=T.position,L=Ot(m,N,N+C),k=Pl[L.tableId];k||le.error?.(`No table found with an id of ${L.tableId}`);let P;L.residencyId&&(P=Hd[L.residencyId],le.trace?.(s,"received residency list",P,L.type,L.recordId));try{SO(()=>{y={table:k.name,id:L.recordId,type:L.type,nodeId:Ll.get(L.nodeId),residencyList:P,timestamp:L.version,value:L.getValue(k),user:L.user,beginTxn:w,expiresAt:L.expiresAt}},x=>{let $=$E(x),z=Re.get($);le.debug?.("Received transaction with blob",$,"has stream",!!z,"ended",!!z?.writableEnded),z?z.writableEnded&&Re.delete($):(z=new uO.PassThrough,Re.set($,z)),z.connectedToBlob=!0,z.lastChunk=Date.now(),x.size===void 0&&z.expectedSize&&(x.size=z.expectedSize);let ie=createBlob(z,x),U=ie.save({primaryStore:p.auditStore});return U&&(U.blobId=$,Ce.push(U),U.finally(()=>{le.debug?.(`Finished receiving blob stream ${$}`),Ce.splice(Ce.indexOf(U),1)})),ie})}catch(x){throw x.message+="typed structures for current decoder"+JSON.stringify(k.decoder.typedStructs),x}w=!1,le.trace?.(s,"received replication message",L.type,"id",y.id,"version",new Date(L.version),"nodeId",y.nodeId),h[fO]=L.version,h[_O]=Date.now(),p.send(y),T.position=N+C}while(T.position<m.byteLength);kd++,nr(m.byteLength,"bytes-received",`${E}.${u}.${y?.table||"unknown_table"}`,"replication","ingest"),kd>fp&&!Pe&&(Pe=!0,e.pause(),le.debug?.(`Commit backlog causing replication back-pressure, requesting that ${E} pause replication`)),p.send({type:"end_txn",localTime:A,remoteNodeIds:R,async onCommit(){if(y){let C=Date.now()-y.timestamp;nr(C,"replication-latency",E+"."+u+"."+y.table,y.type,"ingest")}kd--,Pe&&(Pe=!1,e.resume(),le.debug?.(`Replication resuming ${E}`)),Ce.length>0&&await Promise.all(Ce),le.trace?.("All blobs finished"),!O&&b&&(le.trace?.(s,"queuing confirmation of a commit at",b),setTimeout(()=>{e.send((0,ze.encode)([nk,O])),le.trace?.(s,"sent confirmation of a commit at",O),O=null},Hne)),O=b,le.debug?.("last sequence committed",new Date(b),u)}})}catch(T){le.error?.(s,"Error handling incoming replication message",T)}}),e.on("ping",ct),e.on("pong",()=>{t.connection&&(t.connection.latency=performance.now()-G,Gc({name:E,database:u,url:t.url,latency:t.connection.latency})),G=null}),e.on("close",(m,T)=>{clearInterval(v),clearTimeout(F),clearInterval(te),rn&&rn.emit("close"),Fd&&Fd.end();for(let[w,{reject:y}]of g)y(new Error(`Connection closed ${T?.toString()} ${m}`));le.debug?.(s,"closed",m,T?.toString())});function Gd(){}a(Gd,"recordRemoteNodeSequence");function nn(m,T){e.isFinished=!0,e.close(m,T)}a(nn,"close");function Br(){if(_||(_=!0,t.connection?.on("subscriptions-updated",Br)),t.connection?.isFinished)throw new Error("Can not make a subscription request on a connection that is already closed");let m=new Map;try{for(let y of p?.dbisDB?.getRange({start:Symbol.for("seq"),end:[Symbol.for("seq"),Buffer.from([255])]})||[])for(let b of y.value.nodes||[])b.lastTxnTime>(m.get(b.id)??0)&&m.set(b.id,b.lastTxnTime)}catch(y){if(!y.message.includes("Can not re"))throw y}let T=t.connection?.nodeSubscriptions?.[0];R=[];let w=t.connection?.nodeSubscriptions.map((y,b)=>{let C=[],{replicateByDefault:N}=y;if(y.subscriptions){for(let x of y.subscriptions)if(x.subscribe&&(x.schema||x.database)===u){let $=x.table;S?.[$]?.replicate!==!1&&C.push($)}N=!1}else for(let x in S)(N?S[x].replicate===!1:S[x].replicate)&&C.push(x);let L=d&&CE(y.name,d),k=p?.dbisDB?.get([Symbol.for("seq"),L])??1,P=Math.max(k?.seqId??1,(typeof y.start_time=="string"?new Date(y.start_time).getTime():y.start_time)??1);if(le.debug?.("Starting time recorded in db",y.name,L,u,k?.seqId,"start time:",P,new Date(P)),T!==y){let x=d&&CE(T.name,d),$=p?.dbisDB?.get([Symbol.for("seq"),x])??1;for(let z of $?.nodes||[])z.name===y.name&&(P=z.seqId,le.debug?.("Using sequence id from proxy node",T.name,P))}return R.push(L),m.get(L)>P&&(P=m.get(L),le.debug?.("Updating start time from more recent txn recorded",T.name,P)),{name:y.name,replicateByDefault:N,tables:C,startTime:P,endTime:y.end_time}});if(w)if(le.debug?.(s,"sending subscription request",w,p?.dbisDB?.path),clearTimeout(X),w.length>0)e.send((0,ze.encode)([JH,w]));else{let y=a(()=>{let b=performance.now();X=setTimeout(()=>{ne<=b?nn(1008,"No nodes to subscribe to"):y()},se)},"schedule_close");y()}}a(Br,"sendSubscriptionRequestUpdate");function Ml(m,T){if(!m)return;let w=FT[m];return w||(w=T.getResidencyRecord(m),FT[m]=w),w}a(Ml,"getResidence");function vl(m){return!(Ea&&Ea!="*"&&!Ea[m]&&!Ea.includes?.(m)&&!Ea.some?.(T=>T.name===m))}a(vl,"checkDatabaseAccess");function Fo(m){if(p=p||f.get(m),!vl(m))throw new Error(`Access to database "${m}" is not permitted`);p||le.warn?.(`No database named "${m}" was declared and registered`),d=p?.auditStore,S||(S=Je()?.[m]);let T=Xe();if(T===E)throw T?new Error("Should not connect to self",T):new Error("Node name not defined");return pp(T,m),!0}a(Fo,"setDatabase");function pp(m,T){let w=Je()?.[T],y=[];for(let b in w){let C=w[b];y.push({table:b,schemaDefined:C.schemaDefined,attributes:C.attributes.map(N=>({name:N.name,type:N.type,isPrimaryKey:N.isPrimaryKey}))})}le.trace?.("Sending database info for node",m,"database name",T),e.send((0,ze.encode)([XH,m,T,y]))}a(pp,"sendNodeDBName");function Go(m){let T=Je()?.[m],w=[];for(let y in T){if(Nr&&!Nr.some(C=>C.replicateByDefault?!C.tables.includes(y):C.tables.includes(y)))continue;let b=T[y];w.push({table:y,schemaDefined:b.schemaDefined,attributes:b.attributes.map(C=>({name:C.name,type:C.type,isPrimaryKey:C.isPrimaryKey}))})}e.send((0,ze.encode)([sk,w,m]))}a(Go,"sendDBSchema"),te=setInterval(()=>{for(let[m,T]of Re)T.lastChunk+3e4<Date.now()&&(le.warn?.(`Timeout waiting for blob stream to finish ${m} from ${E}`),Re.delete(m),T.end())},3e4).unref();let qo=1,qd=[];return{end(){Fd&&Fd.end(),rn&&rn.emit("close")},getRecord(m){let T=qo++;return new Promise((w,y)=>{let b=[tk,T,m.table.tableId,m.id];qd[m.table.tableId]||(b.push(m.table.tableName),qd[m.table.tableId]=!0),e.send((0,ze.encode)(b)),g.set(T,{tableId:m.table.tableId,key:m.id,resolve(C){let{table:N,entry:L}=m;w(C),C&&N._recordRelocate(L,C)},reject:y})})},sendOperation(m){let T=qo++;return m.requestId=T,e.send((0,ze.encode)([dO,m])),new Promise((w,y)=>{g.set(T,{resolve:w,reject:y})})}};function Ul(m){K(5),m<128?o[c++]=m:m<16384?(l.setUint16(c,m|32768),c+=2):m<1056964608?(l.setUint32(c,m|3221225472),c+=4):(o[c]=255,l.setUint32(c+1,m),c+=5)}function xl(m,T=0,w=m.length){let y=w-T;K(y),m.copy(o,c,T,w),c+=y}function Bl(m){K(8),l.setFloat64(c,m),c+=8}function K(m){if(m+16>o.length-c){let T=Buffer.allocUnsafeSlow(c+m-i+65536>>10<<11);o.copy(T,0,i,c),c=c-i,i=0,o=T,l=new DataView(o.buffer,0,o.length)}}}function lO(e,t){let r=e.database??"data";if(r!=="data"&&!qe[r]){le.warn?.("Database not found",e.database);return}t||(t={});let n=!1,s=e.schemaDefined,i=t.attributes||[];for(let o=0;o<e.attributes?.length;o++){let c=e.attributes[o],l=i[o];(!l||l.name!==c.name||l.type!==c.type)&&(n=!0,s||(c.indexed=!0),i[o]=c)}return n?(le.debug?.("(Re)creating",e),ut({table:e.table,database:e.database,schemaDefined:e.schemaDefined,attributes:i,...t})):t}var ck,ze,lk,uk,le,hO,dk,fk,$c,_k,uO,JH,XH,ZH,Uu,ek,aO,tk,BE,dO,HE,rk,nk,sk,kE,hk,fO,_O,GE,Bne,pO,ga,FE,ik,Hne,ok,cO,ak,M_,mO=be(()=>{Me();Ji();Kb();gO();fs();ck=M(ce());H();Jl();ze=require("msgpackr"),lk=require("ws"),uk=require("worker_threads"),le=M(hi());P_();hO=require("events"),dk=M(Qs()),fk=M(require("node:tls"));Fc();$c=M(require("node:process")),_k=require("node:net");Ii();cs();uO=require("node:stream"),JH=129,XH=140,ZH=141,Uu=142,ek=130,aO=132,tk=133,BE=134,dO=136,HE=137,rk=143,nk=144,sk=145,kE=146,hk=0,fO=1,_O=2,GE=3,Bne=$c.env.HDB_LEADER_URL||$c.argv.includes("--HDB_LEADER_URL"),pO=new Map,ga=new Map,FE=!0,ik=300,Hne=2,ok=3e4;a(VE,"createWebSocket");ak=1e3,M_=class extends hO.EventEmitter{constructor(r,n,s,i,o){super();this.url=r;this.subscription=n;this.databaseName=s;this.nodeName=i;this.authorization=o;this.nodeName=this.nodeName??Ys(r)}static{a(this,"NodeReplicationConnection")}socket;startTime;retryTime=ak;retries=0;isConnected=!0;isFinished=!1;nodeSubscriptions=[];latency=0;replicateTablesByDefault;session;sessionResolve;sessionReject;async connect(){this.session||this.resetSession();let r=[];this.socket=await VE(this.url,{serverName:this.nodeName,authorization:this.authorization});let n;le.debug?.(`Connecting to ${this.url}, db: ${this.databaseName}, process ${$c.pid}`),this.socket.on("open",()=>{this.socket._socket.unref(),le[this.isConnected?"info":"warn"]?.(`Connected to ${this.url}, db: ${this.databaseName}`),this.retries=0,this.retryTime=ak,Gc({name:this.nodeName,database:this.databaseName,url:this.url}),this.isConnected=!0,n=v_(this.socket,{database:this.databaseName,subscription:this.subscription,url:this.url,connection:this},{replicates:!0}),this.sessionResolve(n)}),this.socket.on("error",s=>{s.code==="SELF_SIGNED_CERT_IN_CHAIN"?(le.warn?.(`Can not connect to ${this.url}, this server does not have a certificate authority for the certificate provided by ${this.url}`),s.isHandled=!0):s.code!=="ECONNREFUSED"&&(s.code==="UNABLE_TO_VERIFY_LEAF_SIGNATURE"?le.error?.(`Can not connect to ${this.url}, the certificate provided by ${this.url} is not trusted, this node needs to be added to the cluster, or a certificate authority needs to be added`):le.error?.(`Error in connection to ${this.url} due to ${s.message}`)),this.sessionReject(s)}),this.socket.on("close",(s,i)=>{if(this.isConnected&&(Du({name:this.nodeName,database:this.databaseName,url:this.url,finished:this.socket.isFinished}),this.isConnected=!1),this.socket.isFinished){this.isFinished=!0,n?.end(),this.emit("finished");return}if(++this.retries%20===1){let o=i?.toString();le.warn?.(`${n?"Disconnected from":"Failed to connect to"} ${this.url} (db: "${this.databaseName}"), due to ${o?'"'+o+'" ':""}(code: ${s})`)}n=null,this.resetSession(),setTimeout(()=>{this.connect()},this.retryTime).unref(),this.retryTime+=this.retryTime>>3})}resetSession(){this.session=new Promise((r,n)=>{this.sessionResolve=r,this.sessionReject=n})}subscribe(r,n){this.nodeSubscriptions=r,this.replicateTablesByDefault=n,this.emit("subscriptions-updated",r)}unsubscribe(){this.socket.isFinished=!0,this.socket.close(1008,"No longer subscribed")}getRecord(r){return this.session.then(n=>n.getRecord(r))}};a(v_,"replicateOverWS");a(lO,"ensureTableIfChanged")});var ma={};ve(ma,{clearThisNodeName:()=>Yne,disableReplication:()=>qne,enabled_databases:()=>Ea,forEachReplicatedDatabase:()=>ua,getThisNodeId:()=>KE,getThisNodeName:()=>Xe,getThisNodeUrl:()=>da,hostnameToUrl:()=>QE,lastTimeInAuditStore:()=>w_,monitorNodeCAs:()=>bk,replicateOperation:()=>zne,replication_certificate_authorities:()=>Vc,sendOperationToNode:()=>B_,servers:()=>Fne,setReplicator:()=>Nk,start:()=>Gne,startOnMainThread:()=>zb,subscribeToNode:()=>Pu,unsubscribeFromNode:()=>ME,urlToNodeName:()=>Ys});function Gne(e){if(e.port||(e.port=ps.default.get(B.OPERATIONSAPI_NETWORK_PORT)),e.securePort||(e.securePort=ps.default.get(B.OPERATIONSAPI_NETWORK_SECUREPORT)),!Xe())throw new Error("Can not load replication without a url (see replication.url in the config)");let t=new Map;for(let n of C_(e))t.set(Ys(n.url),n);$ne(e),e={mtls:!0,isOperationsServer:!0,maxPayload:10*1024*1024*1024,...e};let r=Ye.ws(async(n,s,i,o)=>{if(s.headers.get("sec-websocket-protocol")!=="harperdb-replication-v1")return o(n,s,i);await i,n._socket.unref(),v_(n,e,s?.user),n.on("error",c=>{c.code!=="ECONNREFUSED"&&or.error("Error in connection to "+this.url,c.message)})},e);e.runFirst=!0,Ye.http((n,s)=>{if(n.isWebSocket&&n.headers.get("Sec-WebSocket-Protocol")==="harperdb-replication-v1"){!n.authorized&&n._nodeRequest.socket.authorizationError&&or.error(`Incoming client connection from ${n.ip} did not have valid certificate, you may need turn on enableRootCAs in the config if you are using a publicly signed certificate, or add the CA to the server's trusted CAs`,n._nodeRequest.socket.authorizationError);let i=sr().primaryStore;if(n.authorized&&n.peerCertificate.subject){let o=n.peerCertificate.subject,c=o&&(i.get(o.CN)||t.get(o.CN));if(c)if(c?.revoked_certificates?.includes(n.peerCertificate.serialNumber)){or.warn("Revoked certificate used in attempt to connect to node",c.name,"certificate serial number",n.peerCertificate.serialNumber);return}else n.user=c;else or.warn(`No node found for certificate common name ${o.CN}, available nodes are ${Array.from(i.getRange({}).filter(({value:l})=>l).map(({key:l})=>l)).join(", ")} and routes ${Array.from(t.keys()).join(", ")}, connection will require credentials.`)}else{let o=i.get(n.ip)||t.get(n.ip);o?n.user=o:or.warn(`No node found for IP address ${n.ip}, available nodes are ${Array.from(new Set([...i.getKeys(),...t.keys()])).join(", ")}, connection will require credentials.`)}}return s(n)},e);for(let n of r)if(n.secureContexts){let s=a(()=>{let i=new Set(n.secureContexts.values());n.defaultContext&&i.add(n.defaultContext);for(let o of i)try{let c=Array.from(Vc);o.options.availableCAs&&c.push(...o.options.availableCAs.values());let l={...o.options,ca:c};o.updatedContext=zE.createSecureContext(l)}catch(c){or.error("Error creating replication TLS config",c)}},"updateContexts");n.secureContextsListeners.push(s),bk(s),ps.default.get(B.REPLICATION_ENABLEROOTCAS)!==!1&&s()}}function bk(e){let t=0;Iu(r=>{r?.ca&&(Vc.add(r.ca),Vc.size!==t&&(t=Vc.size,e?.()))})}function qne(e=!0){yk=e}function $ne(e){yk||(Je(),Ea=e.databases,ua(e,(t,r)=>{if(!t){let n=e.databaseSubscriptions||ga;for(let[s,i]of x_){let o=i.get(r);o&&(o.subscribe([],!1),i.delete(r))}n.delete(r);return}for(let n in t){let s=t[n];Nk(r,s,e),pO.get(s)?.forEach(i=>i(s))}}))}function Nk(e,t,r){if(!t)return console.error(`Attempt to replicate non-existent table ${t.name} from database ${e}`);if(t.replicate===!1||t.sources?.some(s=>s.isReplicator))return;let n;t.sourcedFrom(class Ok extends Fr{static{a(this,"Replicator")}static connection;static subscription;static async subscribe(){let i=r.databaseSubscriptions||ga,o=i.get(e),c=o?.tableById||[];c[t.tableId]=t;let l=o?.ready;if(or.trace("Setting up replicator subscription to database",e),!o?.auditStore)return this.subscription=o=new Pn,i.set(e,o),o.tableById=c,o.auditStore=t.auditStore,o.dbisDB=t.dbisDB,o.databaseName=e,l&&l(o),o;this.subscription=o}static subscribeOnThisThread(i,o){return!0}static async load(i){if(i){let o=i.residencyId,c=i.residency||t.dbisDB.get([Symbol.for("residency_by_id"),o]);if(c){let l,u=new Set;do{let f;for(let h of c){let _=Vne(h,Ok.subscription,e);_?.isConnected&&!u.has(_)&&(!f||_.latency<f.latency)&&(f=_)}if(!f)throw l||new Ak.ServerError("No connection to any other nodes are available",502);let d={requestId:kne++,table:t,entry:i,id:i.key};u.add(f);try{return await f.getRecord(d)}catch(h){if(f.isConnected)throw h;or.warn("Error in load from node",WE,h),l||(l=h)}}while(!0)}}}static isReplicator=!0},{intermediateSource:!0})}function wk(e,t,r,n,s){let i=x_.get(e);i||x_.set(e,i=new Map);let o=i.get(r);if(o)return o;if(t)return i.set(r,o=new M_(e,t,r,n,s)),o.connect(),o.once("finished",()=>i.delete(r)),o}function Vne(e,t,r){let n=Ek.get(e)?.get(r);if(n)return n;let s=sr().primaryStore.get(e);return s?.url&&(n=wk(s.url,t,r,e,s.authorization),Ek.set(e,x_.get(s.url))),n}async function B_(e,t,r){r||(r={}),r.serverName=e.name;let n=await VE(e.url,r),s=v_(n,{},{});return new Promise((i,o)=>{n.on("open",()=>{i(s.sendOperation(t))}),n.on("error",c=>{o(c)}),n.on("close",c=>{or.info("Sending operation connection to "+e.url+" closed",c)})}).finally(()=>{n.close()})}function Pu(e){try{Rk.isMainThread&&or.trace("Subscribing on main thread (should not happen in multi-threaded instance)",e.nodes[0].url,e.database);let t=ga.get(e.database);if(!t){let n;t=new Promise(s=>{or.info("Waiting for subscription to database "+e.database),n=s}),t.ready=n,ga.set(e.database,t)}let r=wk(e.nodes[0].url,t,e.database,e.nodes[0].name,e.nodes[0].authorization);e.nodes[0].name===void 0?r.tentativeNode=e.nodes[0]:r.nodeName=e.nodes[0].name,r.subscribe(e.nodes.filter(n=>I_(n,e.database)),e.replicateByDefault)}catch(t){or.error("Error in subscription to node",e.nodes[0]?.url,t)}}async function ME({name:e,url:t,database:r}){or.trace("Unsubscribing from node",e,t,r,"nodes",Array.from(sr().primaryStore.getRange({})));let n=x_.get(t);if(n){let s=n.get(r);s&&(s.unsubscribe(),n.delete(r))}}function Kne(){if(AO!==void 0)return AO;let e=ps.default.get(B.OPERATIONSAPI_TLS_CERTIFICATE)||ps.default.get(B.TLS_CERTIFICATE);if(e)return AO=new Sk.X509Certificate((0,Tk.readFileSync)(e)).subject.match(/CN=(.*)/)?.[1]??null}function Xe(){return WE||(WE=ps.default.get("replication_hostname")??Ys(ps.default.get("replication_url"))??Kne()??gk("operationsapi_network_secureport")??gk("operationsapi_network_port")??"127.0.0.1")}function Yne(){WE=void 0}function gk(e){let t=ps.default.get(e),r=t?.lastIndexOf?.(":");if(r>0)return t.slice(0,r)}function YE(e){let t=ps.default.get(e),r=t?.lastIndexOf?.(":");return r>0?+t.slice(r+1).replace(/[\[\]]/g,""):+t}function KE(e){return N_(e)?.[Xe()]}function da(){let e=ps.default.get("replication_url");return e||QE(Xe())}function QE(e){let t=YE("replication_port");if(t)return`ws://${e}:${t}`;if(t=YE("replication_secureport"),t)return`wss://${e}:${t}`;if(t=YE("operationsapi_network_port"),t)return`ws://${e}:${t}`;if(t=YE("operationsapi_network_secureport"),t)return`wss://${e}:${t}`}function Ys(e){if(e)return new URL(e).hostname}function ua(e,t){for(let n of Object.getOwnPropertyNames(qe))r(n);return U_(n=>{r(n)}),Yc((n,s)=>{r(n.databaseName)});function r(n){let s=qe[n];or.trace("Checking replication status of ",n,e?.databases),e?.databases===void 0||e.databases==="*"||e.databases.includes(n)||e.databases.some?.(i=>i.name===n)||!s?t(s,n,!0):Wne(n)&&t(s,n,!1)}a(r,"forDatabase")}function Wne(e){let t=qe[e];for(let r in t)if(t[r].replicate)return!0}function w_(e){for(let t of e.getKeys({limit:1,reverse:!0}))return t}async function zne(e){let t={message:""};if(e.replicated){e.replicated=!1,or.trace?.("Replicating operation",e.operation,"to nodes",Ye.nodes.map(n=>n.name));let r=await Promise.allSettled(Ye.nodes.map(n=>B_(n,e)));t.replicated=r.map((n,s)=>{let i=n.status==="rejected"?{status:"failed",reason:n.reason.toString()}:n.value;return i.node=Ye.nodes[s]?.name,i})}return t}var ps,or,Sk,Tk,zE,Ak,Rk,yk,kne,Fne,Vc,Ea,x_,Ek,AO,WE,fs=be(()=>{Me();Jo();Fl();mO();Gr();ps=M(ce()),or=M(j()),Sk=require("crypto"),Tk=require("fs");P_();Fc();H();Kb();zE=M(require("node:tls")),Ak=M(he()),Rk=require("worker_threads"),kne=1,Fne=[],Vc=ps.default.get(B.REPLICATION_ENABLEROOTCAS)!==!1?new Set(zE.rootCertificates):new Set;a(Gne,"start");a(bk,"monitorNodeCAs");a(qne,"disableReplication");a($ne,"assignReplicationSource");a(Nk,"setReplicator");x_=new Map;a(wk,"getConnection");Ek=new Map;a(Vne,"getConnectionByName");a(B_,"sendOperationToNode");a(Pu,"subscribeToNode");a(ME,"unsubscribeFromNode");a(Kne,"getCommonNameFromCert");a(Xe,"getThisNodeName");a(Yne,"clearThisNodeName");Object.defineProperty(Ye,"hostname",{get(){return Xe()}});a(gk,"getHostFromListeningPort");a(YE,"getPortFromListeningPort");a(KE,"getThisNodeId");Ye.replication={getThisNodeId:KE,exportIdMapping:N_};a(da,"getThisNodeUrl");a(QE,"hostnameToUrl");a(Ys,"urlToNodeName");a(ua,"forEachReplicatedDatabase");a(Wne,"hasExplicitlyReplicatedTable");a(w_,"lastTimeInAuditStore");a(zne,"replicateOperation")});var ZE=I((sIe,Lk)=>{"use strict";var xu=um(),Bu=GB(),Qne=j(),jne=require("uuid").v4,nIe=require("clone"),JE=io(),Hu=(H(),D(q)),Jne=require("util"),Sa=Hn(),{handleHDBError:gn,hdb_errors:Xne}=he(),{HDB_ERROR_MSGS:jE,HTTP_STATUS_CODES:Sn}=Xne,{SchemaEventMsg:XE}=Gs(),Ik=pr(),{getDatabases:Zne}=(Me(),D(st)),{transformReq:ku}=oe(),{replicateOperation:Ck}=(fs(),D(ma));Lk.exports={createSchema:ese,createSchemaStructure:Pk,createTable:tse,createTableStructure:Dk,createAttribute:ose,dropSchema:rse,dropTable:nse,dropAttribute:sse,getBackup:ase};async function ese(e){let t=await Pk(e);return JE.signalSchemaChange(new XE(process.pid,e.operation,e.schema)),t}a(ese,"createSchema");async function Pk(e){let t=xu.schema_object(e);if(t)throw gn(t,t.message,Sn.BAD_REQUEST,void 0,void 0,!0);if(ku(e),!await Bu.checkSchemaExists(e.schema))throw gn(new Error,jE.SCHEMA_EXISTS_ERR(e.schema),Sn.BAD_REQUEST,Hu.LOG_LEVELS.ERROR,jE.SCHEMA_EXISTS_ERR(e.schema),!0);return await Sa.createSchema(e),`database '${e.schema}' successfully created`}a(Pk,"createSchemaStructure");async function tse(e){return ku(e),e.hash_attribute=e.primary_key??e.hash_attribute,await Dk(e)}a(tse,"createTable");async function Dk(e){let t=xu.create_table_object(e);if(t)throw gn(t,t.message,Sn.BAD_REQUEST,void 0,void 0,!0);if(xu.validateTableResidence(e.residence),!await Bu.checkSchemaTableExists(e.schema,e.table))throw gn(new Error,jE.TABLE_EXISTS_ERR(e.schema,e.table),Sn.BAD_REQUEST,Hu.LOG_LEVELS.ERROR,jE.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:jne(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await Sa.createTable(n,e);else throw gn(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Sn.BAD_REQUEST);else await Sa.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(Dk,"createTableStructure");async function rse(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=xu.schema_object(e),n=t??r;if(n)throw gn(n,n.message,Sn.BAD_REQUEST,void 0,void 0,!0);ku(e);let s=await Bu.checkSchemaExists(e.schema);if(s)throw gn(new Error,s,Sn.NOT_FOUND,Hu.LOG_LEVELS.ERROR,s,!0);let i=await Bu.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);await Sa.dropSchema(e),JE.signalSchemaChange(new XE(process.pid,e.operation,e.schema)),await Ik.purgeSchemaTableStreams(e.schema,o);let c=await Ck(e);return c.message=`successfully deleted '${e.schema}'`,c}a(rse,"dropSchema");async function nse(e){let t=xu.table_object(e);if(t)throw gn(t,t.message,Sn.BAD_REQUEST,void 0,void 0,!0);ku(e);let r=await Bu.checkSchemaTableExists(e.schema,e.table);if(r)throw gn(new Error,r,Sn.NOT_FOUND,Hu.LOG_LEVELS.ERROR,r,!0);await Sa.dropTable(e),await Ik.purgeTableStream(e.schema,e.table);let n=await Ck(e);return n.message=`successfully deleted table '${e.schema}.${e.table}'`,n}a(nse,"dropTable");async function sse(e){let t=xu.attribute_object(e);if(t)throw gn(t,t.message,Sn.BAD_REQUEST,void 0,void 0,!0);ku(e);let r=await Bu.checkSchemaTableExists(e.schema,e.table);if(r)throw gn(new Error,r,Sn.NOT_FOUND,Hu.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw gn(new Error,"You cannot drop a hash attribute",Sn.BAD_REQUEST,void 0,void 0,!0);if(Hu.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw gn(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Sn.BAD_REQUEST,void 0,void 0,!0);try{return await Sa.dropAttribute(e),ise(e),JE.signalSchemaChange(new XE(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw Qne.error(`Got an error deleting attribute ${Jne.inspect(e)}.`),n}}a(sse,"dropAttribute");function ise(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(ise,"dropAttributeFromGlobal");async function ose(e){ku(e);let t=Zne()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw gn(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Sn.BAD_REQUEST,void 0,void 0,!0);return await Sa.createAttribute(e),JE.signalSchemaChange(new XE(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(ose,"createAttribute");function ase(e){return Sa.getBackup(e)}a(ase,"getBackup")});var vk=I((oIe,Mk)=>{"use strict";var{OPERATIONS_ENUM:cse}=(H(),D(q)),RO=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=cse.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};Mk.exports=RO});var yO=I((lIe,kk)=>{"use strict";var lse=Hn(),cIe=vk(),eg=oe(),tg=(H(),D(q)),use=ce(),{handleHDBError:Uk,hdb_errors:dse}=he(),{HDB_ERROR_MSGS:xk,HTTP_STATUS_CODES:Bk}=dse,fse=Object.values(tg.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),Hk="To use this operation audit log must be enabled in harperdb-config.yaml";kk.exports=_se;async function _se(e){if(eg.isEmpty(e.schema))throw new Error(xk.SCHEMA_REQUIRED_ERR);if(eg.isEmpty(e.table))throw new Error(xk.TABLE_REQUIRED_ERR);if(!use.get(tg.CONFIG_PARAMS.LOGGING_AUDITLOG))throw Uk(new Error,Hk,Bk.BAD_REQUEST,tg.LOG_LEVELS.ERROR,Hk,!0);let t=eg.checkSchemaTableExist(e.schema,e.table);if(t)throw Uk(new Error,t,Bk.NOT_FOUND,tg.LOG_LEVELS.ERROR,t,!0);if(!eg.isEmpty(e.search_type)&&fse.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await lse.readAuditLog(e)}a(_se,"readAuditLog")});var Gk=I((dIe,Fk)=>{"use strict";var{OPERATIONS_ENUM:hse}=(H(),D(q)),bO=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=hse.GET_BACKUP,this.schema=t,this.table=r}};Fk.exports=bO});var Vk=I((pIe,$k)=>{"use strict";var pse=Hn(),_Ie=Gk(),OO=oe(),mse=(H(),D(q)),hIe=ce(),{handleHDBError:Ese,hdb_errors:gse}=he(),{HDB_ERROR_MSGS:qk,HTTP_STATUS_CODES:Sse}=gse;$k.exports=Tse;async function Tse(e){if(OO.isEmpty(e.schema))throw new Error(qk.SCHEMA_REQUIRED_ERR);if(OO.isEmpty(e.table))throw new Error(qk.TABLE_REQUIRED_ERR);let t=OO.checkSchemaTableExist(e.schema,e.table);if(t)throw Ese(new Error,t,Sse.NOT_FOUND,mse.LOG_LEVELS.ERROR,t,!0);return await pse.getBackup(read_audit_log_object)}a(Tse,"getBackup")});var zk=I((EIe,Wk)=>{"use strict";var Ase=ce(),Ta=require("joi"),Rse=dt(),Kk=require("moment"),yse=require("fs-extra"),NO=require("path"),bse=require("lodash"),H_=(H(),D(q)),{LOG_LEVELS:Wc}=(H(),D(q)),Ose="YYYY-MM-DD hh:mm:ss",Nse=NO.resolve(__dirname,"../logs");Wk.exports=function(e){return Rse.validateBySchema(e,wse)};var wse=Ta.object({from:Ta.custom(Yk),until:Ta.custom(Yk),level:Ta.valid(Wc.NOTIFY,Wc.FATAL,Wc.ERROR,Wc.WARN,Wc.INFO,Wc.DEBUG,Wc.TRACE),order:Ta.valid("asc","desc"),limit:Ta.number().min(1),start:Ta.number().min(0),log_name:Ta.custom(Ise)});function Yk(e,t){if(Kk(e,Kk.ISO_8601).format(Ose)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(Yk,"validateDatetime");function Ise(e,t){if(bse.invert(H_.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=Ase.get(H_.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?H_.LOG_NAMES.HDB:e,i=s===H_.LOG_NAMES.INSTALL?NO.join(Nse,H_.LOG_NAMES.INSTALL):NO.join(n,s);return yse.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(Ise,"validateReadLogPath")});var IO=I((SIe,jk)=>{"use strict";var rg=(H(),D(q)),Cse=j(),Pse=ce(),Dse=zk(),wO=require("path"),Qk=require("fs-extra"),{once:Lse}=require("events"),{handleHDBError:Mse,hdb_errors:vse}=he(),{PACKAGE_ROOT:Use}=Et(),xse=wO.join(Use,"logs"),Bse=1e3,Hse=200;jk.exports=kse;async function kse(e){let t=Dse(e);if(t)throw Mse(t,t.message,vse.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=Pse.get(rg.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e.log_name===void 0?rg.LOG_NAMES.HDB:e.log_name,s=n===rg.LOG_NAMES.INSTALL?wO.join(xse,rg.LOG_NAMES.INSTALL):wO.join(r,n),i=e.level!==void 0,o=i?e.level:void 0,c=e.from!==void 0,l=c?new Date(e.from):void 0,u=e.until!==void 0,f=u?new Date(e.until):void 0,d=e.limit===void 0?Bse:e.limit,h=e.order===void 0?void 0:e.order,_=e.start===void 0?0:e.start,p=_+d,S=0;h==="desc"&&!l&&!f&&(S=Math.max(Qk.statSync(s).size-(p+5)*Hse,0));let g=Qk.createReadStream(s,{start:S});g.on("error",F=>{Cse.error(F)});let R=0,E=[],A="",O;g.on("data",F=>{let G=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;F=A+F;let Y=0,te;for(;(te=G.exec(F))&&!g.destroyed;){O&&(O.message=F.slice(Y,te.index),v(O));let[se,X,ne]=te,Q=ne.split("] ["),pe=Q[0],Re=Q[1];Q.splice(0,2),O={timestamp:X,thread:pe,level:Re,tags:Q,message:""},Y=te.index+se.length}A=F.slice(Y)}),g.on("end",F=>{g.destroyed||O&&(O.message=A.trim(),v(O))}),g.resume();function v(F){let G,Y,te;switch(!0){case(i&&c&&u):G=new Date(F.timestamp),Y=new Date(l),te=new Date(f),F.level===o&&G>=Y&&G<=te&&R<_?R++:F.level===o&&G>=Y&&G<=te&&(Aa(F,h,E),R++,R===p&&g.destroy());break;case(i&&c):G=new Date(F.timestamp),Y=new Date(l),F.level===o&&G>=Y&&R<_?R++:F.level===o&&G>=Y&&(Aa(F,h,E),R++,R===p&&g.destroy());break;case(i&&u):G=new Date(F.timestamp),te=new Date(f),F.level===o&&G<=te&&R<_?R++:F.level===o&&G<=te&&(Aa(F,h,E),R++,R===p&&g.destroy());break;case(c&&u):G=new Date(F.timestamp),Y=new Date(l),te=new Date(f),G>=Y&&G<=te&&R<_?R++:G>=Y&&G<=te&&(Aa(F,h,E),R++,R===p&&g.destroy());break;case i:F.level===o&&R<_?R++:F.level===o&&(Aa(F,h,E),R++,R===p&&g.destroy());break;case c:G=new Date(F.timestamp),Y=new Date(l),G>=Y&&R<_?R++:G>=Y&&R>=_&&(Aa(F,h,E),R++,R===p&&g.destroy());break;case u:G=new Date(F.timestamp),te=new Date(f),G<=te&&R<_?R++:G<=te&&R>=_&&(Aa(F,h,E),R++,R===p&&g.destroy());break;default:R<_?R++:(Aa(F,h,E),R++,R===p&&g.destroy())}}return a(v,"onLogMessage"),await Lse(g,"close"),E}a(kse,"readLog");function Aa(e,t,r){t==="desc"?Fse(e,r):t==="asc"?Gse(e,r):r.push(e)}a(Aa,"pushLineToResult");function Fse(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(Fse,"insertDescending");function Gse(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(Gse,"insertAscending")});var ng=I((OIe,eF)=>{"use strict";var CO=require("joi"),{string:Fu,boolean:Jk,date:qse}=CO.types(),$se=dt(),{validateSchemaExists:AIe,validateTableExists:RIe,validateSchemaName:yIe}=Si(),Vse=(H(),D(q)),Kse=Nt(),Xk=ce();Xk.initSync();var bIe=Fu.invalid(Xk.get(Vse.CONFIG_PARAMS.CLUSTERING_NODENAME)??"node_name").pattern(Kse.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),Zk={operation:Fu.valid("add_node","update_node","set_node_replication"),node_name:Fu.optional(),subscriptions:CO.array().items({table:Fu.optional(),schema:Fu.optional(),database:Fu.optional(),subscribe:Jk.required(),publish:Jk.required().custom(Wse),start_time:qse.iso()})};function Yse(e){return $se.validateBySchema(e,CO.object(Zk))}a(Yse,"addUpdateNodeValidator");function Wse(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(Wse,"checkForFalsy");eF.exports={addUpdateNodeValidator:Yse,validation_schema:Zk}});var Gu=I((wIe,tF)=>{"use strict";var PO=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},DO=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};tF.exports={Node:PO,NodeSubscription:DO}});var nF=I((CIe,rF)=>{"use strict";var zse=(H(),D(q)).OPERATIONS_ENUM,LO=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=zse.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};rF.exports=LO});var k_=I((DIe,sF)=>{"use strict";var MO=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},vO=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)}};sF.exports={RemotePayloadObject:MO,RemotePayloadSubscription:vO}});var oF=I((MIe,iF)=>{"use strict";var UO=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}};iF.exports=UO});var cF=I((kIe,aF)=>{"use strict";var Qse=oF(),UIe=vt(),xIe=ft(),jse=j(),{getSchemaPath:BIe,getTransactionAuditStorePath:HIe}=gt(),{getDatabases:Jse}=(Me(),D(st));aF.exports=Xse;async function Xse(e){let t=new Qse;try{let r=Jse()[e.schema]?.[e.name],n=r.primaryStore.getStats(),s=r.auditStore?.getStats();t.schema=e.schema,t.table=e.name,t.record_count=n.entryCount,t.transaction_log_record_count=s.entryCount}catch(r){jse.warn(`unable to stat table dbi due to ${r}`)}return t}a(Xse,"lmdbGetTableSize")});var uF=I((GIe,lF)=>{"use strict";var xO=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}};lF.exports=xO});var $u=I((WIe,hF)=>{"use strict";var Zse=require("fs-extra"),eie=require("path"),Qr=require("systeminformation"),Ra=j(),dF=pr(),$Ie=Nt(),qu=(H(),D(q)),tie=cF(),rie=no(),{getThreadInfo:fF}=rt(),F_=ce();F_.initSync();var nie=uF(),{openEnvironment:VIe}=ft(),{getSchemaPath:KIe}=gt(),{database:YIe,databases:BO}=(Me(),D(st)),sg;hF.exports={getHDBProcessInfo:GO,getNetworkInfo:$O,getDiskInfo:qO,getMemoryInfo:FO,getCPUInfo:kO,getTimeInfo:HO,getSystemInformation:VO,systemInformation:sie,getTableSize:KO,getMetrics:YO};function HO(){return Qr.time()}a(HO,"getTimeInfo");async function kO(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:l,cache:u,...f}=await Qr.cpu();f.cpu_speed=await Qr.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:h,raw_currentload_irq:_,raw_currentload_nice:p,raw_currentload_system:S,raw_currentload_user:g,cpus:R,...E}=await Qr.currentLoad();return E.cpus=[],R.forEach(A=>{let{raw_load:O,raw_load_idle:v,raw_load_irq:F,raw_load_nice:G,raw_load_system:Y,raw_load_user:te,...se}=A;E.cpus.push(se)}),f.current_load=E,f}catch(e){return Ra.error(`error in getCPUInfo: ${e}`),{}}}a(kO,"getCPUInfo");async function FO(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await Qr.mem();return Object.assign(s,process.memoryUsage())}catch(e){return Ra.error(`error in getMemoryInfo: ${e}`),{}}}a(FO,"getMemoryInfo");async function GO(){let e={core:[],clustering:[]};try{let t=await Qr.processes(),r;try{r=Number.parseInt(await Zse.readFile(eie.join(F_.get(qu.CONFIG_PARAMS.ROOTPATH),qu.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===qu.NODE_ERROR_CODES.ENOENT)Ra.warn("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB. This could be because HarperDB is not running.");else throw n}t.list.forEach(n=>{n.pid===r?e.core.push(n):n.name==="nats-server"&&e.clustering.push(n)});for(let n of e.core)for(let s of t.list)s.pid===n.parentPid&&(s.name==="PM2"||s.command==="PM2")&&(n.parent="PM2");return e}catch(t){return Ra.error(`error in getHDBProcessInfo: ${t}`),e}}a(GO,"getHDBProcessInfo");async function qO(){let e={};try{if(!F_.get(qu.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_DISK))return e;let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await Qr.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:l,...u}=await Qr.fsStats();return e.read_write=u,e.size=await Qr.fsSize(),e}catch(t){return Ra.error(`error in getDiskInfo: ${t}`),e}}a(qO,"getDiskInfo");async function $O(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return F_.get(qu.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_NETWORK)&&(e.default_interface=await Qr.networkInterfaceDefault(),e.latency=await Qr.inetChecksite("google.com"),(await Qr.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:o,dhcp:c,dnsSuffix:l,ieee8021xAuth:u,ieee8021xState:f,carrier_changes:d,...h}=n;e.interfaces.push(h)}),(await Qr.networkStats()).forEach(n=>{let{rx_sec:s,tx_sec:i,ms:o,...c}=n;e.stats.push(c)})),e}catch(t){return Ra.error(`error in getNetworkInfo: ${t}`),e}}a($O,"getNetworkInfo");async function VO(){if(sg!==void 0)return sg;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await Qr.osInfo();e=c;let l=await Qr.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,sg=e,sg}catch(t){return Ra.error(`error in getSystemInformation: ${t}`),e}}a(VO,"getSystemInformation");async function KO(){let e=[],t=await rie.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await tie(n));return e}a(KO,"getTableSize");async function YO(){let e={};for(let t in BO){let r=e[t]={},n=r.tables={};for(let s in BO[t])try{let i=BO[t][s];if(!r.readers&&(Object.assign(r,i.primaryStore.rootStore.getStats()),delete r.root,r.readers=i.primaryStore.rootStore.readerList().split(/\n\s+/).slice(1).map(l=>{let[u,f,d]=l.trim().split(" ");return{pid:u,thread:f,txnid:d}}),i.auditStore)){let{treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:f,entryCount:d,overflowPages:h}=i.auditStore.getStats();r.audit={treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:f,entryCount:d,overflowPages:h}}let o=i.primaryStore.getStats(),c={};for(let l of["treeDepth","treeBranchPageCount","treeLeafPageCount","entryCount","overflowPages"])c[l]=o[l];n[s]=c}catch(i){Ra.notify(`Error getting stats for table ${s}: ${i}`)}}return e}a(YO,"getMetrics");async function _F(){if(F_.get(qu.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await dF.getNATSReferences(),t=await dF.listStreams(),r=[];for(let n of t){let s=[],i=await e.consumers.list(n.config.name);for await(let c of i)s.push({name:c.name,created:c.created,num_ack_pending:c.num_ack_pending,num_redelivered:c.num_redelivered,num_waiting:c.num_waiting,num_pending:c.num_pending});let o={stream_name:n.config.name,database:n.config.subjects[0].split(".")[1],table:n.config.subjects[0].split(".")[2],state:n.state,consumers:s};r.push(o)}return r}}a(_F,"getNatsStreamInfo");async function sie(e){let t=new nie;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await VO(),t.time=HO(),t.cpu=await kO(),t.memory=await FO(),t.disk=await qO(),t.network=await $O(),t.harperdb_processes=await GO(),t.table_size=await KO(),t.metrics=await YO(),t.threads=await fF(),t.replication=await _F(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await VO();break;case"time":t.time=HO();break;case"cpu":t.cpu=await kO();break;case"memory":t.memory=await FO();break;case"disk":t.disk=await qO();break;case"network":t.network=await $O();break;case"harperdb_processes":t.harperdb_processes=await GO();break;case"table_size":t.table_size=await KO();break;case"database_metrics":case"metrics":t.metrics=await YO();break;case"threads":t.threads=await fF();break;case"replication":t.replication=await _F();break;default:break}return t}a(sie,"systemInformation")});var _o=I((JIe,gF)=>{"use strict";var iie=hn(),WO=oe(),oie=require("util"),zc=(H(),D(q)),pF=ce();pF.initSync();var aie=bb(),mF=$r(),{Node:QIe,NodeSubscription:jIe}=Gu(),cie=uu(),lie=nF(),{RemotePayloadObject:uie,RemotePayloadSubscription:die}=k_(),{handleHDBError:fie,hdb_errors:_ie}=he(),{HTTP_STATUS_CODES:hie,HDB_ERROR_MSGS:pie}=_ie,mie=qs(),Eie=$u(),{packageJson:gie}=Et(),{getDatabases:Sie}=(Me(),D(st)),Tie=oie.promisify(aie.authorize),Aie=mF.searchByHash,Rie=mF.searchByValue;gF.exports={authHeaderToUser:yie,isEmpty:bie,getNodeRecord:Oie,upsertNodeRecord:Nie,buildNodePayloads:wie,checkClusteringEnabled:Iie,getAllNodeRecords:Cie,getSystemInfo:Pie,reverseSubscription:EF};async function yie(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await Tie(t,null),e}a(yie,"authHeaderToUser");function bie(e){return e==null}a(bie,"isEmpty");async function Oie(e){let t=new cie(zc.SYSTEM_SCHEMA_NAME,zc.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return Aie(t)}a(Oie,"getNodeRecord");async function Nie(e){let t=new lie(zc.SYSTEM_SCHEMA_NAME,zc.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return iie.upsert(t)}a(Nie,"upsertNodeRecord");function EF(e){if(WO.isEmpty(e.subscribe)||WO.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(EF,"reverseSubscription");function wie(e,t,r,n){let s=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:l,table:u}=c,f=WO.getTableHashAttribute(l,u),{subscribe:d,publish:h}=EF(c),_=Sie()[l]?.[u],p=new die(l,u,f,h,d,c.start_time,_.schemaDefined?_.attributes:void 0);s.push(p)}return new uie(r,t,s,n)}a(wie,"buildNodePayloads");function Iie(){if(!pF.get(zc.CONFIG_PARAMS.CLUSTERING_ENABLED))throw fie(new Error,pie.CLUSTERING_NOT_ENABLED,hie.BAD_REQUEST,void 0,void 0,!0)}a(Iie,"checkClusteringEnabled");async function Cie(){let e=new mie(zc.SYSTEM_SCHEMA_NAME,zc.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await Rie(e))}a(Cie,"getAllNodeRecords");async function Pie(){let e=await Eie.getSystemInformation();return{hdb_version:gie.version,node_version:e.node_version,platform:e.platform}}a(Pie,"getSystemInfo")});var zO=I((ZIe,NF)=>{"use strict";var ig=pr(),SF=oe(),TF=Nt(),AF=(H(),D(q)),og=j(),RF=ZE(),Die=t_(),{RemotePayloadObject:Lie}=k_(),{handleHDBError:yF,hdb_errors:Mie}=he(),{HTTP_STATUS_CODES:bF}=Mie,{NodeSubscription:OF}=Gu();NF.exports=vie;async function vie(e,t){let r;try{r=await ig.request(`${t}.${TF.REQUEST_SUFFIX}`,new Lie(AF.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),og.trace("Response from remote describe all request:",r)}catch(o){og.error(`addNode received error from describe all request to remote node: ${o}`);let c=ig.requestErrorHandler(o,"add_node",t);throw yF(new Error,c,bF.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===TF.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw yF(new Error,o,bF.INTERNAL_SERVER_ERROR,"error",o)}let n=r.message,s=[],i=[];for(let o of e){let{table:c}=o,l=o.database??o.schema??"data";if(l===AF.SYSTEM_SCHEMA_NAME){await ig.createLocalTableStream(l,c);let p=new OF(l,c,o.publish,o.subscribe);p.start_time=o.start_time,i.push(p);continue}let u=SF.doesSchemaExist(l),f=n[l]!==void 0,d=c?SF.doesTableExist(l,c):!0,h=c?n?.[l]?.[c]!==void 0:!0;if(!u&&!f||!d&&!h){s.push(o);continue}if(!u&&f&&(og.trace(`addNode creating schema: ${l}`),await RF.createSchema({operation:"create_schema",schema:l})),!d&&h){og.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let p=new Die(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(p.attributes=n[l][c].attributes),await RF.createTable(p)}await ig.createLocalTableStream(l,c);let _=new OF(l,c,o.publish,o.subscribe);_.start_time=o.start_time,i.push(_)}return{added:i,skipped:s}}a(vie,"reviewSubscriptions")});var Qc={};ve(Qc,{addNodeBack:()=>kie,removeNodeBack:()=>Fie,setNode:()=>Hie});async function Hie(e){e.node_name&&!e.hostname&&(e.hostname=e.node_name),e.verify_tls!==void 0&&(e.rejectUnauthorized=e.verify_tls);let{url:t,hostname:r}=e;t?r||(r=e.hostname=Ys(t)):t=QE(r);let n=(0,IF.validateBySchema)(e,Bie);if(n)throw(0,ho.handleHDBError)(n,n.message,xie.BAD_REQUEST,void 0,void 0,!0);if(e.operation==="remove_node"){if(!t&&!r)throw new ho.ClientError("url or hostname is required for remove_node operation");let _=r,p=sr(),S=await p.get(_);if(!S)throw new ho.ClientError(_+" does not exist");try{await B_({url:S.url},{operation:$t.REMOVE_NODE_BACK,name:S?.subscriptions?.length>0?Xe():_},void 0)}catch(g){Wn.warn(`Error removing node from target node ${_}, if it is offline and we be online in the future, you may need to clean up this node manually, or retry:`,g)}return await p.delete(_),`Successfully removed '${_}' from cluster`}if(!t)throw new ho.ClientError("url required for this operation");let s=da();if(s==null)throw new ho.ClientError("replication url is missing from harperdb-config.yaml");let i,o,c;if(t?.startsWith("wss:")){i=await(0,ms.getReplicationCert)();let _=await(0,ms.getReplicationCertAuth)();if(!i)throw new Error("Unable to find a certificate to use for replication");i.options.is_self_signed?(o=await(0,ms.createCsr)(),Wn.info("Sending CSR to target node:",t)):_&&(c=_.certificate,Wn.info("Sending CA named",_.name,"to target node",t))}let l={operation:$t.ADD_NODE_BACK,hostname:(0,CF.get)(B.REPLICATION_HOSTNAME),target_hostname:r,url:s,csr:o,cert_auth:c,authorization:e.retain_authorization?e.authorization:null};if(e.subscriptions?l.subscriptions=e.subscriptions.map(wF):l.subscriptions=null,e.hasOwnProperty("subscribe")||e.hasOwnProperty("publish")){let _=wF(e);l.subscribe=_.subscribe,l.publish=_.publish}e?.authorization?.username&&e?.authorization?.password&&(e.authorization="Basic "+Buffer.from(e.authorization.username+":"+e.authorization.password).toString("base64"));let u,f;try{u=await B_({url:t},l,e)}catch(_){_.message=`Error returned from ${t}: `+_.message,Wn.warn("Error adding node:",t,"to cluster:",_),f=_}if(o&&(!u?.certificate||!u?.certificate?.includes?.("BEGIN CERTIFICATE")))throw f?(f.message+=" and connection was required to sign certificate",f):new Error(`Unexpected certificate signature response from node ${t} response: ${JSON.stringify(u)}`);o&&(Wn.info("CSR response received from node:",t,"saving certificate and CA in hdb_certificate"),await(0,ms.setCertTable)({name:Uie.certificateFromPem(u.signingCA).issuer.getField("CN").value,certificate:u.signingCA,is_authority:!0}),u.certificate&&await(0,ms.setCertTable)({name:Xe(),uses:["https","operations","wss"],certificate:u.certificate,private_key_name:i?.options?.key_file,is_authority:!1,is_self_signed:!1}),c=u.signingCA);let d={url:t,ca:u?.usingCA};if(e.hostname&&(d.name=e.hostname),e.subscriptions?d.subscriptions=e.subscriptions:d.replicates=!0,e.start_time&&(d.start_time=typeof e.start_time=="string"?new Date(e.start_time).getTime():e.start_time),e.retain_authorization&&(d.authorization=e.authorization),e.revoked_certificates&&(d.revoked_certificates=e.revoked_certificates),e.shard&&(d.shard=e.shard),d.replicates){let _={url:s,ca:c,replicates:!0,subscriptions:null};e.retain_authorization&&(_.authorization=e.authorization),e.start_time&&(_.start_time=e.start_time),await uo(Xe(),_)}await uo(u?u.nodeName:d.name??Ys(t),d);let h;return e.operation==="update_node"?h=`Successfully updated '${t}'`:h=`Successfully added '${t}' to cluster`,f&&(h+=" but there was an error updating target node: "+f.message),h}async function kie(e){Wn.trace("addNodeBack received request:",e);let t=await(0,ms.signCertificate)(e),r;e.csr?(r=t.signingCA,Wn.info("addNodeBack received CSR from node:",e.url,"this node will use and respond with CA that was used to issue CSR")):(r=e?.cert_auth,Wn.info("addNodeBack received CA from node:",e.url));let n={url:e.url,ca:r};e.subscriptions?n.subscriptions=e.subscriptions:(n.replicates=!0,n.subscriptions=null),e.start_time&&(n.start_time=e.start_time),e.authorization&&(n.authorization=e.authorization);let s=await(0,ms.getReplicationCertAuth)();if(n.replicates){let i={url:da(),ca:s?.certificate,replicates:!0,subscriptions:null};e.start_time&&(i.start_time=e.start_time),e.authorization&&(i.authorization=e.authorization),await uo(Xe(),i)}return await uo(e.hostname,n),t.nodeName=Xe(),t.usingCA=s?.certificate,Wn.info("addNodeBack responding to:",e.url,"with CA named:",s?.name),t}async function Fie(e){Wn.trace("removeNodeBack received request:",e),await sr().delete(e.name)}function wF(e){let{subscribe:t,publish:r}=e;return{...e,subscribe:r,publish:t}}var ms,IF,ya,CF,Wn,ho,Uie,xie,Bie,jc=be(()=>{ms=M(Qs()),IF=M(dt()),ya=M(require("joi")),CF=M(ce());H();P_();Fc();fs();Wn=M(j()),ho=M(he()),{pki:Uie}=require("node-forge"),{HTTP_STATUS_CODES:xie}=ho.hdb_errors,Bie=ya.default.object({hostname:ya.default.string(),verify_tls:ya.default.boolean(),replicates:ya.default.boolean(),subscriptions:ya.default.array(),revoked_certificates:ya.default.array(),shard:ya.default.number()});a(Hie,"setNode");a(kie,"addNodeBack");a(Fie,"removeNodeBack");a(wF,"reverseSubscription")});var dg=I((cCe,DF)=>{"use strict";var{handleHDBError:ag,hdb_errors:Gie}=he(),{HTTP_STATUS_CODES:cg}=Gie,{addUpdateNodeValidator:qie}=ng(),lg=j(),ug=(H(),D(q)),PF=Nt(),$ie=oe(),G_=pr(),q_=_o(),QO=ce(),Vie=zO(),{Node:Kie,NodeSubscription:Yie}=Gu(),{broadcast:Wie}=rt(),{setNode:zie}=(jc(),D(Qc)),oCe=ce(),aCe=(H(),D(q)),Qie="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",jie="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Jie=QO.get(ug.CONFIG_PARAMS.CLUSTERING_NODENAME);DF.exports=Xie;async function Xie(e,t=!1){if(lg.trace("addNode called with:",e),QO.get(ug.CONFIG_PARAMS.REPLICATION_URL)||QO.get(ug.CONFIG_PARAMS.REPLICATION_HOSTNAME))return zie(e);q_.checkClusteringEnabled();let r=qie(e);if(r)throw ag(r,r.message,cg.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let d=await q_.getNodeRecord(n);if(!$ie.isEmptyOrZeroLength(d))throw ag(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,cg.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await Vie(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=Qie,o;let c=q_.buildNodePayloads(s,Jie,ug.OPERATIONS_ENUM.ADD_NODE,await q_.getSystemInfo()),l=[];for(let d=0,h=s.length;d<h;d++){let _=s[d];s[d].start_time===void 0&&delete s[d].start_time,l.push(new Yie(_.schema,_.table,_.publish,_.subscribe))}lg.trace("addNode sending remote payload:",c);let u;try{u=await G_.request(`${n}.${PF.REQUEST_SUFFIX}`,c)}catch(d){lg.error(`addNode received error from request: ${d}`);for(let _=0,p=s.length;_<p;_++){let S=s[_];S.publish=!1,S.subscribe=!1,await G_.updateRemoteConsumer(S,n)}let h=G_.requestErrorHandler(d,"add_node",n);throw ag(new Error,h,cg.INTERNAL_SERVER_ERROR,"error",h)}if(u.status===PF.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${n}: ${u.message}`;throw ag(new Error,d,cg.INTERNAL_SERVER_ERROR,"error",d)}lg.trace(u);for(let d=0,h=s.length;d<h;d++){let _=s[d];await G_.updateRemoteConsumer(_,n),_.subscribe===!0&&await G_.updateConsumerIterator(_.schema,_.table,n,"start")}let f=new Kie(n,l,u.system_info);return await q_.upsertNodeRecord(f),Wie({type:"nats_update"}),i.length>0?o.message=jie:o.message=`Successfully added '${n}' to manifest`,o}a(Xie,"addNode")});var ZO=I((dCe,MF)=>{"use strict";var{handleHDBError:jO,hdb_errors:Zie}=he(),{HTTP_STATUS_CODES:JO}=Zie,{addUpdateNodeValidator:eoe}=ng(),$_=j(),fg=(H(),D(q)),LF=Nt(),uCe=oe(),V_=pr(),K_=_o(),XO=ce(),{cloneDeep:toe}=require("lodash"),roe=zO(),{Node:noe,NodeSubscription:soe}=Gu(),{broadcast:ioe}=rt(),{setNode:ooe}=(jc(),D(Qc)),aoe="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",coe="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",loe=XO.get(fg.CONFIG_PARAMS.CLUSTERING_NODENAME);MF.exports=uoe;async function uoe(e){if($_.trace("updateNode called with:",e),XO.get(fg.CONFIG_PARAMS.REPLICATION_URL)??XO.get(fg.CONFIG_PARAMS.REPLICATION_HOSTNAME))return ooe(e);K_.checkClusteringEnabled();let t=eoe(e);if(t)throw jO(t,t.message,JO.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await K_.getNodeRecord(r);s.length>0&&(n=toe(s));let{added:i,skipped:o}=await roe(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=aoe,c;let l=K_.buildNodePayloads(i,loe,fg.OPERATIONS_ENUM.UPDATE_NODE,await K_.getSystemInfo());for(let f=0,d=i.length;f<d;f++){let h=i[f];$_.trace(`updateNode updating work stream for node: ${r} subscription:`,h),i[f].start_time===void 0&&delete i[f].start_time}$_.trace("updateNode sending remote payload:",l);let u;try{u=await V_.request(`${r}.${LF.REQUEST_SUFFIX}`,l)}catch(f){$_.error(`updateNode received error from request: ${f}`);let d=V_.requestErrorHandler(f,"update_node",r);throw jO(new Error,d,JO.INTERNAL_SERVER_ERROR,"error",d)}if(u.status===LF.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let f=`Error returned from remote node ${r}: ${u.message}`;throw jO(new Error,f,JO.INTERNAL_SERVER_ERROR,"error",f)}$_.trace(u);for(let f=0,d=i.length;f<d;f++){let h=i[f];await V_.updateRemoteConsumer(h,r),h.subscribe===!0?await V_.updateConsumerIterator(h.schema,h.table,r,"start"):await V_.updateConsumerIterator(h.schema,h.table,r,"stop")}return n||(n=[new noe(r,[],u.system_info)]),await doe(n[0],i,u.system_info),o.length>0?c.message=coe:c.message=`Successfully updated '${r}'`,c}a(uoe,"updateNode");async function doe(e,t,r){let n=e;for(let s=0,i=t.length;s<i;s++){let o=t[s],c=!1;for(let l=0,u=e.subscriptions.length;l<u;l++){let f=n.subscriptions[l];if(f.schema===o.schema&&f.table===o.table){f.publish=o.publish,f.subscribe=o.subscribe,c=!0;break}}c||n.subscriptions.push(new soe(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await K_.upsertNodeRecord(n),ioe({type:"nats_update"})}a(doe,"updateNodeTable")});var HF=I((_Ce,BF)=>{"use strict";var xF=require("joi"),{string:vF}=xF.types(),foe=dt(),UF=(H(),D(q)),_oe=ce(),hoe=Nt();BF.exports=poe;function poe(e){let t=vF.invalid(_oe.get(UF.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(hoe.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=xF.object({operation:vF.valid(UF.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return foe.validateBySchema(e,r)}a(poe,"removeNodeValidator")});var _g=I((pCe,$F)=>{"use strict";var{handleHDBError:kF,hdb_errors:moe}=he(),{HTTP_STATUS_CODES:FF}=moe,Eoe=HF(),Y_=j(),GF=_o(),goe=oe(),Vu=(H(),D(q)),qF=Nt(),eN=pr(),tN=ce(),{RemotePayloadObject:Soe}=k_(),{NodeSubscription:Toe}=Gu(),Aoe=e_(),Roe=Tc(),{broadcast:yoe}=rt(),{setNode:boe}=(jc(),D(Qc)),Ooe=tN.get(Vu.CONFIG_PARAMS.CLUSTERING_NODENAME);$F.exports=Noe;async function Noe(e){if(Y_.trace("removeNode called with:",e),tN.get(Vu.CONFIG_PARAMS.REPLICATION_URL)??tN.get(Vu.CONFIG_PARAMS.REPLICATION_HOSTNAME))return boe(e);GF.checkClusteringEnabled();let t=Eoe(e);if(t)throw kF(t,t.message,FF.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await GF.getNodeRecord(r);if(goe.isEmptyOrZeroLength(n))throw kF(new Error,`Node '${r}' was not found.`,FF.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new Soe(Vu.OPERATIONS_ENUM.REMOVE_NODE,Ooe,[]),i,o=!1;for(let l=0,u=n.subscriptions.length;l<u;l++){let f=n.subscriptions[l];f.subscribe===!0&&await eN.updateConsumerIterator(f.schema,f.table,r,"stop");try{await eN.updateRemoteConsumer(new Toe(f.schema,f.table,!1,!1),r)}catch(d){Y_.error(d)}}try{i=await eN.request(`${r}.${qF.REQUEST_SUFFIX}`,s),Y_.trace("Remove node reply from remote node:",r,i)}catch(l){Y_.error("removeNode received error from request:",l),o=!0}let c=new Aoe(Vu.SYSTEM_SCHEMA_NAME,Vu.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await Roe.deleteRecord(c),yoe({type:"nats_update"}),i?.status===qF.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(Y_.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(Noe,"removeNode")});var YF=I((ECe,KF)=>{"use strict";var VF=require("joi"),{string:woe,array:Ioe}=VF.types(),Coe=dt(),Poe=ng();KF.exports=Doe;function Doe(e){let t=VF.object({operation:woe.valid("configure_cluster").required(),connections:Ioe.items(Poe.validation_schema).required()});return Coe.validateBySchema(e,t)}a(Doe,"configureClusterValidator")});var rN=I((SCe,JF)=>{"use strict";var WF=(H(),D(q)),hg=j(),Loe=oe(),Moe=ce(),voe=_g(),Uoe=dg(),xoe=_o(),Boe=YF(),{handleHDBError:zF,hdb_errors:Hoe}=he(),{HTTP_STATUS_CODES:QF}=Hoe,koe="Configure cluster complete.",Foe="Failed to configure the cluster. Check the logs for more details.",Goe="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";JF.exports=qoe;async function qoe(e){hg.trace("configure cluster called with:",e);let t=Boe(e);if(t)throw zF(t,t.message,QF.BAD_REQUEST,void 0,void 0,!0);let r=await xoe.getAllNodeRecords(),n=[];if(Moe.get(WF.CONFIG_PARAMS.CLUSTERING_ENABLED)){for(let f=0,d=r.length;f<d;f++){let h=await jF(voe,{operation:WF.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name);n.push(h)}hg.trace("All results from configure_cluster remove node:",n)}let s=[],i=e.connections.length;for(let f=0;f<i;f++){let d=e.connections[f],h=await jF(Uoe,d,d.node_name);s.push(h)}hg.trace("All results from configure_cluster add node:",s);let o=[],c=[],l=!1,u=n.concat(s);for(let f=0,d=u.length;f<d;f++){let h=u[f];h.status==="rejected"&&(hg.error(h.node_name,h?.error?.message,h?.error?.stack),o.includes(h.node_name)||o.push(h.node_name)),(h?.result?.message?.includes?.("Successfully")||h?.result?.includes?.("Successfully"))&&(l=!0),!(typeof h.result=="string"&&h.result.includes("Successfully removed")||h.status==="rejected")&&c.push({node_name:h?.node_name,response:h?.result})}if(Loe.isEmptyOrZeroLength(o))return{message:koe,connections:c};if(l)return{message:Goe,failed_nodes:o,connections:c};throw zF(new Error,Foe,QF.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(qoe,"configureCluster");async function jF(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}a(jF,"functionWrapper")});var tG=I((ACe,eG)=>{"use strict";var W_=require("joi"),$oe=dt(),{validateSchemaExists:XF,validateTableExists:Voe,validateSchemaName:ZF}=Si(),Koe=W_.object({operation:W_.string().valid("purge_stream"),schema:W_.string().custom(XF).custom(ZF).optional(),database:W_.string().custom(XF).custom(ZF).optional(),table:W_.string().custom(Voe).required()});function Yoe(e){return $oe.validateBySchema(e,Koe)}a(Yoe,"purgeStreamValidator");eG.exports=Yoe});var nN=I((yCe,rG)=>{"use strict";var{handleHDBError:Woe,hdb_errors:zoe}=he(),{HTTP_STATUS_CODES:Qoe}=zoe,joe=tG(),Joe=pr(),Xoe=_o();rG.exports=Zoe;async function Zoe(e){e.schema=e.schema??e.database;let t=joe(e);if(t)throw Woe(t,t.message,Qoe.BAD_REQUEST,void 0,void 0,!0);Xoe.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await Joe.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}a(Zoe,"purgeStream")});var oN=I((OCe,lG)=>{"use strict";var iN=_o(),eae=pr(),mg=ce(),Ku=(H(),D(q)),Jc=Nt(),tae=oe(),sN=j(),{RemotePayloadObject:rae}=k_(),{ErrorCode:nG}=require("nats"),{parentPort:sG}=require("worker_threads"),{onMessageByType:nae}=rt(),{getThisNodeName:sae}=(fs(),D(ma)),{requestClusterStatus:iae}=(P_(),D(wH)),{getReplicationSharedStatus:oae}=(Fc(),D(Yb)),{CONFIRMATION_STATUS_POSITION:aae,RECEIVED_VERSION_POSITION:cae,RECEIVED_TIME_POSITION:lae,SENDING_TIME_POSITION:uae}=(mO(),D(pk)),iG=mg.get(Ku.CONFIG_PARAMS.CLUSTERING_ENABLED),oG=mg.get(Ku.CONFIG_PARAMS.CLUSTERING_NODENAME);lG.exports={clusterStatus:dae,buildNodeStatus:cG};var aG;nae("cluster-status",async e=>{aG(e)});async function dae(){if(mg.get(Ku.CONFIG_PARAMS.REPLICATION_URL)||mg.get(Ku.CONFIG_PARAMS.REPLICATION_HOSTNAME)){let n;if(sG){sG.postMessage({type:"request-cluster-status"}),n=await new Promise(s=>{aG=s});for(let s of n.connections){let i=s.name;for(let o of s.database_sockets){let c=o.database,l;for(let f of Object.values(databases[c]||{}))if(l=f.auditStore,l)break;if(!l)continue;let u=oae(l,c,i);o.lastCommitConfirmed=pg(u[aae]),o.lastReceivedRemoteTime=pg(u[cae]),o.lastReceivedLocalTime=pg(u[lae]),o.sendingMessage=pg(u[uae])}}}else n=iae();return n.node_name=sae(),n.is_enabled=!0,n}let e={node_name:oG,is_enabled:iG,connections:[]};if(!iG)return e;let t=await iN.getAllNodeRecords();if(tae.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(cG(t[n],e.connections));return await Promise.allSettled(r),e}a(dae,"clusterStatus");function pg(e){return e?e===1?"Copying":new Date(e).toUTCString():void 0}a(pg,"asDate");async function cG(e,t){let r=e.name,n=new rae(Ku.OPERATIONS_ENUM.CLUSTER_STATUS,oG,void 0,await iN.getSystemInfo()),s,i,o=Jc.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await eae.request(Jc.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===Jc.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Jc.CLUSTER_STATUS_STATUSES.CLOSED,sN.error(`Error getting node status from ${r} `,s))}catch(l){sN.warn(`Error getting node status from ${r}`,l),l.code===nG.NoResponders?o=Jc.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===nG.Timeout?o=Jc.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Jc.CLUSTER_STATUS_STATUSES.CLOSED}let c=new fae(r,o,s?.message?.ports?.clustering,s?.message?.ports?.operations_api,i,s?.message?.uptime,e.subscriptions,s?.message?.system_info);try{let l={name:r,system_info:s?.message?.system_info};e.system_info?.hdb_version!==Ku.PRE_4_0_0_VERSION&&await iN.upsertNodeRecord(l)}catch(l){sN.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}a(cG,"buildNodeStatus");function fae(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(fae,"NodeStatusObject")});var cN=I((wCe,uG)=>{"use strict";var{handleHDBError:_ae,hdb_errors:hae}=he(),{HTTP_STATUS_CODES:pae}=hae,mae=pr(),Eae=_o(),aN=oe(),Eg=require("joi"),gae=dt(),Sae=2e3,Tae=Eg.object({timeout:Eg.number().min(1),connected_nodes:Eg.boolean(),routes:Eg.boolean()});uG.exports=Aae;async function Aae(e){Eae.checkClusteringEnabled();let t=gae.validateBySchema(e,Tae);if(t)throw _ae(t,t.message,pae.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||aN.autoCastBoolean(n),o=s===void 0||aN.autoCastBoolean(s),c={nodes:[]},l=await mae.getServerList(r??Sae),u={};if(i)for(let f=0,d=l.length;f<d;f++){let h=l[f].statsz;h&&(u[l[f].server.name]=h.routes)}for(let f=0,d=l.length;f<d;f++){if(l[f].statsz)continue;let h=l[f].server,_=l[f].data;if(h.name.endsWith("-hub")){let p={name:h.name.slice(0,-4),response_time:l[f].response_time};i&&(p.connected_nodes=[],u[h.name]&&u[h.name].forEach(S=>{p.connected_nodes.includes(S.name.slice(0,-4))||p.connected_nodes.push(S.name.slice(0,-4))})),o&&(p.routes=_.cluster?.urls?_.cluster?.urls.map(S=>({host:S.split(":")[0],port:aN.autoCast(S.split(":")[1])})):[]),c.nodes.push(p)}}return c}a(Aae,"clusterNetwork")});var hG=I((CCe,_G)=>{"use strict";var lN=require("joi"),dG=dt(),{route_constraints:fG}=$R();_G.exports={setRoutesValidator:Rae,deleteRoutesValidator:yae};function Rae(e){let t=lN.object({server:lN.valid("hub","leaf"),routes:fG.required()});return dG.validateBySchema(e,t)}a(Rae,"setRoutesValidator");function yae(e){let t=lN.object({routes:fG.required()});return dG.validateBySchema(e,t)}a(yae,"deleteRoutesValidator")});var gg=I((DCe,AG)=>{"use strict";var po=It(),uN=oe(),Es=(H(),D(q)),Yu=ce(),pG=hG(),{handleHDBError:mG,hdb_errors:bae}=he(),{HTTP_STATUS_CODES:EG}=bae,gG="cluster routes successfully set",SG="cluster routes successfully deleted";AG.exports={setRoutes:Nae,getRoutes:wae,deleteRoutes:Iae};function Oae(e){let t=po.getClusteringRoutes(),r=e.server==="hub"?t.hub_routes:t.leaf_routes,n=e.server==="hub"?t.leaf_routes:t.hub_routes,s=[],i=[];for(let o=0,c=e.routes.length;o<c;o++){let l=e.routes[o];l.port=uN.autoCast(l.port);let u=r.some(d=>d.host===l.host&&d.port===l.port),f=n.some(d=>d.host===l.host&&d.port===l.port);u||f?s.push(l):(r.push(l),i.push(l))}return e.server==="hub"?po.updateConfigValue(Es.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r):po.updateConfigValue(Es.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,r),{message:gG,set:i,skipped:s}}a(Oae,"setRoutesNats");function Nae(e){let t=pG.setRoutesValidator(e);if(t)throw mG(t,t.message,EG.BAD_REQUEST,void 0,void 0,!0);if(Yu.get(Es.CONFIG_PARAMS.CLUSTERING_ENABLED))return Oae(e);let r=[],n=[],s=Yu.get(Es.CONFIG_PARAMS.REPLICATION_ROUTES)??[];return e.routes.forEach(i=>{TG(s,i)?n.push(i):(s.push(i),r.push(i))}),po.updateConfigValue(Es.CONFIG_PARAMS.REPLICATION_ROUTES,s),{message:gG,set:r,skipped:n}}a(Nae,"setRoutes");function TG(e,t){return typeof t=="string"?e.includes(t):typeof t=="object"&&t!==null?e.some(r=>(r.host===t.host||r.hostname===t.hostname)&&r.port===t.port):!1}a(TG,"existsInArray");function wae(){if(Yu.get(Es.CONFIG_PARAMS.CLUSTERING_ENABLED)){let e=po.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}else return Yu.get(Es.CONFIG_PARAMS.REPLICATION_ROUTES)??[]}a(wae,"getRoutes");function Iae(e){let t=pG.deleteRoutesValidator(e);if(t)throw mG(t,t.message,EG.BAD_REQUEST,void 0,void 0,!0);if(Yu.get(Es.CONFIG_PARAMS.CLUSTERING_ENABLED))return Cae(e);let r=[],n=[],s=Yu.get(Es.CONFIG_PARAMS.REPLICATION_ROUTES)??[],i=[];return s.forEach(o=>{TG(e.routes,o)?r.push(o):(i.push(o),n.push(o))}),po.updateConfigValue(Es.CONFIG_PARAMS.REPLICATION_ROUTES,i),{message:SG,deleted:r,skipped:n}}a(Iae,"deleteRoutes");function Cae(e){let t=po.getClusteringRoutes(),r=t.hub_routes,n=t.leaf_routes,s=[],i=[],o=!1,c=!1;for(let l=0,u=e.routes.length;l<u;l++){let f=e.routes[l],d=!1;for(let h=0,_=r.length;h<_;h++){let p=r[h];if(f.host===p.host&&f.port===p.port){r.splice(h,1),d=!0,o=!0,s.push(f);break}}if(!d){let h=!0;for(let _=0,p=n.length;_<p;_++){let S=n[_];if(f.host===S.host&&f.port===S.port){n.splice(_,1),c=!0,h=!1,s.push(f);break}}h&&i.push(f)}}return o&&(r=uN.isEmptyOrZeroLength(r)?null:r,po.updateConfigValue(Es.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r)),c&&(n=uN.isEmptyOrZeroLength(n)?null:n,po.updateConfigValue(Es.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:SG,deleted:s,skipped:i}}a(Cae,"deleteRoutesNats")});var yG=I((MCe,RG)=>{"use strict";var z_=require("alasql"),Xc=require("recursive-iterator"),js=j(),Pae=oe(),Q_=(H(),D(q)),dN=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,Lae(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=>Q_.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=>!Q_.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][Q_.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=Dae(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(u=>({attribute_name:u.attribute}));let l=this.affected_attributes.get(i).get(o).filter(u=>!Q_.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let f=new z_.yy.Column({columnid:u});s.tableid&&(f.tableid=s.tableid),this.ast.columns.push(f),l.includes(u)||l.push(u)}),this.affected_attributes.get(i).set(o,l)}}),this.ast}};function Dae(e){return e.filter(t=>t[Q_.PERMS_CRUD_ENUM.READ])}a(Dae,"filterReadRestrictedAttrs");function Lae(e,t,r,n,s){Mae(e,t,r,n,s)}a(Lae,"interpretAST");function j_(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(j_,"addSchemaTableToMap");function Mae(e,t,r,n,s){if(!e){js.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof z_.yy.Insert?Bae(e,t,r):e instanceof z_.yy.Select?vae(e,t,r,n,s):e instanceof z_.yy.Update?Uae(e,t,r):e instanceof z_.yy.Delete?xae(e,t,r):js.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(Mae,"getRecordAttributesAST");function vae(e,t,r,n,s){if(!e){js.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(Pae.isEmptyOrZeroLength(i)){js.error("No schema specified");return}e.from.forEach(c=>{j_(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),j_(c.table,t,r,n,s)});let o=new Xc(e.columns);for(let{node:c}of o)if(c&&c.columnid){let l=c.tableid,u=n.has(l)?n.get(l):i;if(l||(l=e.from[0].tableid),!t.get(u).has(l))if(r.has(l))l=r.get(l);else{js.info(`table specified as ${l} not found.`);return}t.get(u).get(l).indexOf(c.columnid)<0&&t.get(u).get(l).push(c.columnid)}if(e.where){let c=new Xc(e.where),l=e.from[0].tableid;for(let{node:u}of c)if(u&&u.columnid){let f=u.tableid?u.tableid:l;if(!t.get(i).has(f))if(r.has(f))f=r.get(f);else{js.info(`table specified as ${f} not found.`);continue}t.get(i).get(f).indexOf(u.columnid)<0&&t.get(i).get(f).push(u.columnid)}}if(e.joins&&e.joins.forEach(c=>{let l=new Xc(c.on);for(let{node:u}of l)if(u&&u.columnid){let f=u.tableid,d=s.get(f);if(!t.get(d).has(f))if(r.has(f))f=r.get(f);else{js.info(`table specified as ${f} not found.`);continue}t.get(d).get(f).indexOf(u.columnid)<0&&t.get(d).get(f).push(u.columnid)}}),e.order){let c=new Xc(e.order);for(let{node:l}of c)if(l&&l.columnid){let u=l.tableid,f=n.has(u)?n.get(u):i;if(u||(u=e.from[0].tableid),!t.get(f).has(u))if(r.has(u))u=r.get(u);else{js.info(`table specified as ${u} not found.`);return}t.get(f).get(u).indexOf(l.columnid)<0&&t.get(f).get(u).push(l.columnid)}}}a(vae,"getSelectAttributes");function Uae(e,t,r){if(!e){js.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new Xc(e.columns),s=e.table.databaseid;j_(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&fN(e.table.tableid,s,i.columnid,t,r)}a(Uae,"getUpdateAttributes");function xae(e,t,r){if(!e){js.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new Xc(e.where),s=e.table.databaseid;j_(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&fN(e.table.tableid,s,i.columnid,t,r)}a(xae,"getDeleteAttributes");function Bae(e,t,r){if(!e){js.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new Xc(e.columns),s=e.into.databaseid;j_(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&fN(e.into.tableid,s,i.columnid,t,r)}a(Bae,"getInsertAttributes");function fN(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(fN,"pushAttribute");RG.exports=dN});var OG=I((UCe,bG)=>{"use strict";var Sg=(H(),D(q)),Tg=class{static{a(this,"BaseLicense")}constructor(t=0,r=Sg.RAM_ALLOCATION_ENUM.DEFAULT,n=Sg.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},_N=class extends Tg{static{a(this,"ExtendedLicense")}constructor(t=0,r=Sg.RAM_ALLOCATION_ENUM.DEFAULT,n=Sg.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};bG.exports={BaseLicense:Tg,ExtendedLicense:_N}});var Qu=I((BCe,DG)=>{"use strict";var zu=require("fs-extra"),Ag=(Rm(),D(Am)),wG=require("crypto"),Hae=require("moment"),kae=require("uuid").v4,jr=j(),pN=require("path"),Fae=oe(),Zc=(H(),D(q)),{totalmem:NG}=require("os"),Gae=OG().ExtendedLicense,Wu="invalid license key format",qae="061183",$ae="mofi25",Vae="aes-256-cbc",Kae=16,Yae=32,IG=ce(),{resolvePath:CG}=It();IG.initSync();var hN;DG.exports={validateLicense:PG,generateFingerPrint:zae,licenseSearch:gN,getLicense:Jae,checkMemoryLimit:Xae};function mN(){return pN.join(IG.getHdbBasePath(),Zc.LICENSE_KEY_DIR_NAME,Zc.LICENSE_FILE_NAME)}a(mN,"getLicenseDirPath");function Wae(){let e=mN();return CG(pN.join(e,Zc.LICENSE_FILE_NAME))}a(Wae,"getLicenseFilePath");function EN(){let e=mN();return CG(pN.join(e,Zc.REG_KEY_FILE_NAME))}a(EN,"getFingerPrintFilePath");async function zae(){let e=EN();try{return await zu.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await Qae();throw jr.error(`Error writing fingerprint file to ${e}`),jr.error(t),new Error("There was an error generating the fingerprint")}}a(zae,"generateFingerPrint");async function Qae(){let e=kae(),t=Ag.hash(e,Ag.HASH_FUNCTION.MD5),r=EN();try{await zu.mkdirp(mN()),await zu.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw jr.error(`Error writing fingerprint file to ${r}`),jr.error(n),new Error("There was an error generating the fingerprint")}return t}a(Qae,"writeFingerprint");function PG(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:Zc.RAM_ALLOCATION_ENUM.DEFAULT,version:Zc.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return jr.error("empty license key passed to validate."),r;let n=EN(),s=!1;try{s=zu.statSync(n)}catch(i){jr.error(i)}if(s){let i;try{i=zu.readFileSync(n,"utf8")}catch{jr.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split($ae),c=o[1];c=Buffer.concat([Buffer.from(c)],Kae);let l=Buffer.concat([Buffer.from(i)],Yae),u=wG.createDecipheriv(Vae,l,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let f=null;try{f=u.update(o[0],"hex","utf8"),f.trim(),f+=u.final("utf8")}catch{let _=jae(o[0],i);if(_)f=_;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Wu),jr.error(Wu),new Error(Wu)}let d;if(isNaN(f))try{d=JSON.parse(f),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(Wu),jr.error(Wu),new Error(Wu)}else r.exp_date=f;r.exp_date<Hae().valueOf()&&(r.valid_date=!1),Ag.validate(o[1],`${qae}${i}${t}`,Ag.HASH_FUNCTION.MD5)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||jr.error("Invalid licence"),r}a(PG,"validateLicense");function jae(e,t){try{let r=wG.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{jr.warn("Check old license failed")}}a(jae,"checkOldLicense");function gN(){let e=new Gae,t=[];try{t=zu.readFileSync(Wae(),"utf-8").split(`\r
24
+ `)}catch(r){r.code==="ENOENT"?jr.debug("no license file found"):jr.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(Fae.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=PG(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){jr.error("There was an error parsing the license string."),jr.error(s),e.ram_allocation=Zc.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return hN=e,e}a(gN,"licenseSearch");async function Jae(){return hN||await gN(),hN}a(Jae,"getLicense");function Xae(){let e=gN().ram_allocation,t=process.constrainedMemory?.()||NG();if(t=Math.round(Math.min(t,NG())/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(Xae,"checkMemoryLimit")});var AN=I((kCe,UG)=>{var Rg=Qu(),LG=require("chalk"),zn=j(),MG=require("prompt"),{promisify:Zae}=require("util"),SN=(H(),D(q)),ece=require("fs-extra"),tce=require("path"),rce=oe(),{packageJson:nce}=Et(),vG=ce();vG.initSync();var sce=require("moment"),ice=Zae(MG.get),oce=tce.join(vG.getHdbBasePath(),SN.LICENSE_KEY_DIR_NAME,SN.LICENSE_FILE_NAME,SN.LICENSE_FILE_NAME);UG.exports={getFingerprint:cce,setLicense:ace,parseLicense:TN,register:lce,getRegistrationInfo:dce};async function ace(e){if(e&&e.key&&e.company){try{zn.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await TN(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw zn.error(r),zn.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(ace,"setLicense");async function cce(){let e={};try{e=await Rg.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw zn.error(r),zn.error(t),new Error(r)}return e}a(cce,"getFingerprint");async function TN(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");zn.info("Validating license input...");let r=Rg.validateLicense(e,t);if(zn.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(zn.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(zn.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{zn.info("writing license to disk"),await ece.writeFile(oce,JSON.stringify({license_key:e,company:t}))}catch(n){throw zn.error("Failed to write License"),n}return"Registration successful."}a(TN,"parseLicense");async function lce(){let e=await uce();return TN(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(lce,"register");async function uce(){let e=await Rg.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:LG.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:LG.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{MG.start()}catch(n){zn.error(n)}let r;try{r=await ice(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(uce,"promptForRegistration");async function dce(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await Rg.getLicense()}catch(r){throw zn.error(`There was an error when searching licenses due to: ${r.message}`),r}if(rce.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=nce.version,e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=sce.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(dce,"getRegistrationInfo")});var BG=I((GCe,xG)=>{"use strict";var fce=Nt(),RN=class{static{a(this,"HubConfigObject")}constructor(t,r,n,s,i,o,c,l,u,f,d,h,_,p){this.port=t,o===null&&(o=void 0),this.server_name=r+fce.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.reconnect_error_reports=100,this.jetstream={enabled:!1},this.tls={cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l},this.leafnodes={port:u,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c}},this.cluster={name:f,port:d,routes:h,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l}},this.accounts={SYS:{users:_},HDB:{users:p}},this.system_account="SYS"}};xG.exports=RN});var FG=I(($Ce,kG)=>{"use strict";var HG=Nt(),yN=class{static{a(this,"LeafConfigObject")}constructor(t,r,n,s,i,o,c,l,u,f,d){this.port=t,d===null&&(d=void 0),this.server_name=r+HG.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+HG.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:f,ca_file:d,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:d,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:d,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:l,jetstream:"enabled"}},this.system_account="SYS"}};kG.exports=yN});var qG=I((KCe,GG)=>{"use strict";var bN=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};GG.exports=bN});var VG=I((WCe,$G)=>{"use strict";var _ce=Nt(),ON=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+_ce.SERVER_SUFFIX.ADMIN,this.password=r}};$G.exports=ON});var Ng=I((QCe,WG)=>{"use strict";var el=require("path"),tl=require("fs-extra"),hce=BG(),pce=FG(),mce=qG(),Ece=VG(),NN=Gn(),Ju=oe(),Tn=It(),bg=(H(),D(q)),J_=Nt(),{CONFIG_PARAMS:Wt}=bg,Xu=j(),X_=ce(),KG=ro(),wN=pr(),gce=Qs(),ju="clustering",Sce=1e4,YG=50;WG.exports={generateNatsConfig:Ace,removeNatsConfig:Rce,getHubConfigPath:Tce};function Tce(){let e=X_.get(Wt.ROOTPATH);return el.join(e,ju,J_.NATS_CONFIG_FILES.HUB_SERVER)}a(Tce,"getHubConfigPath");async function Ace(e=!1,t=void 0){let r=X_.get(Wt.ROOTPATH);tl.ensureDirSync(el.join(r,"clustering","leaf")),X_.initSync();let n=Tn.getConfigFromFile(Wt.CLUSTERING_TLS_CERT_AUTH),s=Tn.getConfigFromFile(Wt.CLUSTERING_TLS_PRIVATEKEY),i=Tn.getConfigFromFile(Wt.CLUSTERING_TLS_CERTIFICATE);!await tl.exists(i)&&!await tl.exists(!n)&&await gce.createNatsCerts();let o=el.join(r,ju,J_.PID_FILES.HUB),c=el.join(r,ju,J_.PID_FILES.LEAF),l=Tn.getConfigFromFile(Wt.CLUSTERING_LEAFSERVER_STREAMS_PATH),u=el.join(r,ju,J_.NATS_CONFIG_FILES.HUB_SERVER),f=el.join(r,ju,J_.NATS_CONFIG_FILES.LEAF_SERVER),d=Tn.getConfigFromFile(Wt.CLUSTERING_TLS_INSECURE),h=Tn.getConfigFromFile(Wt.CLUSTERING_TLS_VERIFY),_=Tn.getConfigFromFile(Wt.CLUSTERING_NODENAME),p=Tn.getConfigFromFile(Wt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await wN.checkNATSServerInstalled()||Og("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let S=await NN.listUsers(),g=Tn.getConfigFromFile(Wt.CLUSTERING_USER),R=await NN.getClusterUser();(Ju.isEmpty(R)||R.active!==!0)&&Og(`Invalid cluster user '${g}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await yg(Wt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await yg(Wt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await yg(Wt.CLUSTERING_HUBSERVER_NETWORK_PORT),await yg(Wt.CLUSTERING_LEAFSERVER_NETWORK_PORT));let E=[],A=[];for(let[se,X]of S.entries())X.role?.role===bg.ROLE_TYPES_ENUM.CLUSTER_USER&&X.active&&(E.push(new Ece(X.username,KG.decrypt(X.hash))),A.push(new mce(X.username,KG.decrypt(X.hash))));let O=[],{hub_routes:v}=Tn.getClusteringRoutes();if(!Ju.isEmptyOrZeroLength(v))for(let se of v)O.push(`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@${se.host}:${se.port}`);let F=new hce(Tn.getConfigFromFile(Wt.CLUSTERING_HUBSERVER_NETWORK_PORT),_,o,i,s,n,d,h,p,Tn.getConfigFromFile(Wt.CLUSTERING_HUBSERVER_CLUSTER_NAME),Tn.getConfigFromFile(Wt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),O,E,A);n==null&&(delete F.tls.ca_file,delete F.leafnodes.tls.ca_file),t=Ju.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===bg.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await tl.writeJson(u,F),Xu.trace(`Hub server config written to ${u}`));let G=`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@0.0.0.0:${p}`,Y=`tls://${R.uri_encoded_name}:${R.uri_encoded_d_hash}@0.0.0.0:${p}`,te=new pce(Tn.getConfigFromFile(Wt.CLUSTERING_LEAFSERVER_NETWORK_PORT),_,c,l,[G],[Y],E,A,i,s,n,d);n==null&&delete te.tls.ca_file,(t===void 0||t===bg.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await tl.writeJson(f,te),Xu.trace(`Leaf server config written to ${f}`))}a(Ace,"generateNatsConfig");async function yg(e){let t=X_.get(e);return Ju.isEmpty(t)&&Og(`port undefined for '${e}'`),await Ju.isPortTaken(t)&&Og(`'${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(yg,"isPortAvailable");function Og(e){let t=`Error generating clustering config: ${e}`;Xu.error(t),console.error(t),process.exit(1)}a(Og,"generateNatsConfigError");async function Rce(e){let{port:t,config_file:r}=wN.getServerConfig(e),{username:n,decrypt_hash:s}=await NN.getClusterUser(),i=0,o=2e3;for(;i<YG;){try{let f=await wN.createConnection(t,n,s,!1);if(f.protocol.connected===!0){f.close();break}}catch(f){Xu.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${f}`)}if(i++,i>=YG)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check hdb.log for further details.`);let u=o*(i*2);u>3e4&&Xu.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await Ju.async_set_timeout(u)}let c="0".repeat(Sce),l=el.join(X_.get(Wt.ROOTPATH),ju,r);await tl.writeFile(l,c),await tl.remove(l),Xu.notify(e,"started.")}a(Rce,"removeNatsConfig")});var ZG=I((JCe,XG)=>{"use strict";var Qn=ce(),yce=Qu(),Fe=(H(),D(q)),Z_=Nt(),mo=require("path"),{PACKAGE_ROOT:Ig}=Et(),zG=ce(),wg=oe(),Zu="/dev/null",bce=mo.join(Ig,"launchServiceScripts"),QG=mo.join(Ig,"utility/scripts"),Oce=mo.join(QG,Fe.HDB_RESTART_SCRIPT),jG=mo.resolve(Ig,"dependencies",`${process.platform}-${process.arch}`,Z_.NATS_BINARY_NAME);function JG(){let t=yce.licenseSearch().ram_allocation||Fe.RAM_ALLOCATION_ENUM.DEFAULT,r=Fe.MEM_SETTING_KEY+t,n={[Fe.PROCESS_NAME_ENV_PROP]:Fe.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return wg.noBootFile()&&(n[Fe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=wg.getEnvCliRootPath()),{name:Fe.PROCESS_DESCRIPTORS.HDB,script:Fe.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:Ig}}a(JG,"generateMainServerConfig");var Nce=9930;function wce(){Qn.initSync(!0);let e=Qn.get(Fe.CONFIG_PARAMS.ROOTPATH),t=mo.join(e,"clustering",Z_.NATS_CONFIG_FILES.HUB_SERVER),r=mo.join(Qn.get(Fe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Fe.LOG_NAMES.HDB),n=zG.get(Fe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=Z_.LOG_LEVEL_FLAGS[Qn.get(Fe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Fe.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==Nce?"-"+n:""),script:jG,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Fe.PROCESS_NAME_ENV_PROP]:Fe.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return Qn.get(Fe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Zu,i.error_file=Zu),i}a(wce,"generateNatsHubServerConfig");var Ice=9940;function Cce(){Qn.initSync(!0);let e=Qn.get(Fe.CONFIG_PARAMS.ROOTPATH),t=mo.join(e,"clustering",Z_.NATS_CONFIG_FILES.LEAF_SERVER),r=mo.join(Qn.get(Fe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Fe.LOG_NAMES.HDB),n=zG.get(Fe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=Z_.LOG_LEVEL_FLAGS[Qn.get(Fe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Fe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==Ice?"-"+n:""),script:jG,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Fe.PROCESS_NAME_ENV_PROP]:Fe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return Qn.get(Fe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Zu,i.error_file=Zu),i}a(Cce,"generateNatsLeafServerConfig");function Pce(){Qn.initSync();let e=mo.join(Qn.get(Fe.CONFIG_PARAMS.LOGGING_ROOT),Fe.LOG_NAMES.HDB),t={name:Fe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:Fe.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[Fe.PROCESS_NAME_ENV_PROP]:Fe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:bce,autorestart:!1};return Qn.get(Fe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Zu,t.error_file=Zu),t}a(Pce,"generateClusteringUpgradeV4ServiceConfig");function Dce(){let e={[Fe.PROCESS_NAME_ENV_PROP]:Fe.PROCESS_DESCRIPTORS.RESTART_HDB};return wg.noBootFile()&&(e[Fe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=wg.getEnvCliRootPath()),{...{name:Fe.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:QG},script:Oce}}a(Dce,"generateRestart");function Lce(){return{apps:[JG()]}}a(Lce,"generateAllServiceConfigs");XG.exports={generateAllServiceConfigs:Lce,generateMainServerConfig:JG,generateRestart:Dce,generateNatsHubServerConfig:wce,generateNatsLeafServerConfig:Cce,generateClusteringUpgradeV4ServiceConfig:Pce}});var th=I((ePe,_q)=>{"use strict";var Ze=(H(),D(q)),Mce=oe(),go=Ng(),Cg=pr(),Eo=Nt(),ba=ZG(),Pg=ce(),rl=j(),vce=_o(),{startWorker:eq,onMessageFromWorkers:Uce}=rt(),xce=$u(),ZCe=require("util"),Bce=require("child_process"),Hce=require("fs"),{execFile:kce}=Bce,Ve;_q.exports={enterPM2Mode:Fce,start:Oa,stop:IN,reload:rq,restart:nq,list:CN,describe:oq,connect:So,kill:Kce,startAllServices:Yce,startService:PN,getUniqueServicesList:aq,restartAllServices:Wce,isServiceRegistered:cq,reloadStopStart:lq,restartHdb:iq,deleteProcess:$ce,startClusteringProcesses:dq,startClusteringThreads:fq,isHdbRestartRunning:Vce,isClusteringRunning:Qce,stopClustering:zce,reloadClustering:jce,expectedRestartOfChildren:sq};var eh=!1;Uce(e=>{e.type==="restart"&&Pg.initSync(!0)});function Fce(){eh=!0}a(Fce,"enterPM2Mode");function So(){return Ve||(Ve=require("pm2")),new Promise((e,t)=>{Ve.connect((r,n)=>{r&&t(r),e(n)})})}a(So,"connect");var Jr,Gce=10,tq;function Oa(e,t=!1){if(eh)return qce(e);let r=kce(e.script,e.args.split(" "),e);r.name=e.name,r.config=e,r.on("exit",async i=>{let o=Jr.indexOf(r);o>-1&&Jr.splice(o,1),!tq&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<Gce&&(Hce.existsSync(go.getHubConfigPath())?Oa(e):(await go.generateNatsConfig(!0),Oa(e),await new Promise(c=>setTimeout(c,3e3)),await go.removeNatsConfig(Ze.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await go.removeNatsConfig(Ze.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let o=Pg.get(Ze.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,l,u=0,f;for(;l=c.exec(i);){if(l.index&&Eo.LOG_LEVEL_HIERARCHY[o]>=Eo.LOG_LEVEL_HIERARCHY[f||"info"]){let _=f===Eo.LOG_LEVELS.ERR||f===Eo.LOG_LEVELS.WRN?rl.OUTPUTS.STDERR:rl.OUTPUTS.STDOUT;rl.logCustomLevel(f||"info",_,n,i.slice(u,l.index).trim())}let[d,h]=l;u=l.index+d.length,f=Eo.LOG_LEVELS[h]}if(Eo.LOG_LEVEL_HIERARCHY[o]>=Eo.LOG_LEVEL_HIERARCHY[f||"info"]){let d=f===Eo.LOG_LEVELS.ERR||f===Eo.LOG_LEVELS.WRN?rl.OUTPUTS.STDERR:rl.OUTPUTS.STDOUT;rl.logCustomLevel(f||"info",d,n,i.slice(u).trim())}}if(a(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),!Jr&&(Jr=[],!t)){let i=a(()=>{tq=!0,Jr&&(Jr.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)}Jr.push(r)}a(Oa,"start");function qce(e){return new Promise(async(t,r)=>{try{await So()}catch(n){r(n)}Ve.start(e,(n,s)=>{n&&(Ve.disconnect(),r(n)),Ve.disconnect(),t(s)})})}a(qce,"startWithPM2");function IN(e){if(!eh){for(let t of Jr||[])t.name===e&&(Jr.splice(Jr.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await So()}catch(n){r(n)}Ve.stop(e,async(n,s)=>{n&&(Ve.disconnect(),r(n)),Ve.delete(e,(i,o)=>{i&&(Ve.disconnect(),r(n)),Ve.disconnect(),t(o)})})})}a(IN,"stop");function rq(e){return new Promise(async(t,r)=>{try{await So()}catch(n){r(n)}Ve.reload(e,(n,s)=>{n&&(Ve.disconnect(),r(n)),Ve.disconnect(),t(s)})})}a(rq,"reload");function nq(e){if(!eh){sq();for(let t of Jr||[])t.name===e&&t.kill()}return new Promise(async(t,r)=>{try{await So()}catch(n){r(n)}Ve.restart(e,(n,s)=>{Ve.disconnect(),t(s)})})}a(nq,"restart");function sq(){for(let e of Jr||[])e.config&&(e.config.restarts=0)}a(sq,"expectedRestartOfChildren");function $ce(e){return new Promise(async(t,r)=>{try{await So()}catch(n){r(n)}Ve.delete(e,(n,s)=>{n&&(Ve.disconnect(),r(n)),Ve.disconnect(),t(s)})})}a($ce,"deleteProcess");async function iq(){await Oa(ba.generateRestart())}a(iq,"restartHdb");async function Vce(){let e=await CN();for(let t in e)if(e[t].name===Ze.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(Vce,"isHdbRestartRunning");function CN(){return new Promise(async(e,t)=>{try{await So()}catch(r){t(r)}Ve.list((r,n)=>{r&&(Ve.disconnect(),t(r)),Ve.disconnect(),e(n)})})}a(CN,"list");function oq(e){return new Promise(async(t,r)=>{try{await So()}catch(n){r(n)}Ve.describe(e,(n,s)=>{n&&(Ve.disconnect(),r(n)),Ve.disconnect(),t(s)})})}a(oq,"describe");function Kce(){if(!eh){for(let e of Jr||[])e.kill();Jr=[];return}return new Promise(async(e,t)=>{try{await So()}catch(r){t(r)}Ve.killDaemon((r,n)=>{r&&(Ve.disconnect(),t(r)),Ve.disconnect(),e(n)})})}a(Kce,"kill");async function Yce(){try{await dq(),await fq(),await Oa(ba.generateAllServiceConfigs())}catch(e){throw Ve?.disconnect(),e}}a(Yce,"startAllServices");async function PN(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case Ze.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=ba.generateMainServerConfig();break;case Ze.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=ba.generateNatsIngestServiceConfig();break;case Ze.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=ba.generateNatsReplyServiceConfig();break;case Ze.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=ba.generateNatsHubServerConfig(),await Oa(r,t),await go.removeNatsConfig(e);return;case Ze.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=ba.generateNatsLeafServerConfig(),await Oa(r,t),await go.removeNatsConfig(e);return;case Ze.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=ba.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Oa(r)}catch(r){throw Ve?.disconnect(),r}}a(PN,"startService");async function aq(){try{let e=await CN(),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 Ve?.disconnect(),e}}a(aq,"getUniqueServicesList");async function Wce(e=[]){try{let t=!1,r=await aq();for(let n=0,s=Object.values(r).length;n<s;n++){let o=Object.values(r)[n].name;e.includes(o)||(o===Ze.PROCESS_DESCRIPTORS.HDB?t=!0:await nq(o))}t&&await lq(Ze.PROCESS_DESCRIPTORS.HDB)}catch(t){throw Ve?.disconnect(),t}}a(Wce,"restartAllServices");async function cq(e){if(Jr?.find(r=>r.name===e))return!0;let t=await xce.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(cq,"isServiceRegistered");async function lq(e){let t=Pg.get(Ze.CONFIG_PARAMS.THREADS_COUNT)??Pg.get(Ze.CONFIG_PARAMS.THREADS),r=await oq(e),n=Mce.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await IN(e),await PN(e)):e===Ze.PROCESS_DESCRIPTORS.HDB?await iq():await rq(e)}a(lq,"reloadStopStart");var uq;async function dq(e=!1){for(let t in Ze.CLUSTERING_PROCESSES){let r=Ze.CLUSTERING_PROCESSES[t];await PN(r,e)}}a(dq,"startClusteringProcesses");async function fq(){uq=eq(Ze.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Ze.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await Cg.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await Cg.updateLocalStreams();let e=await vce.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Ze.PRE_4_0_0_VERSION){rl.info("Starting clustering upgrade 4.0.0 process"),eq(Ze.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(fq,"startClusteringThreads");async function zce(){for(let e in Ze.CLUSTERING_PROCESSES)if(e!==Ze.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===Ze.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await uq.terminate();else{let t=Ze.CLUSTERING_PROCESSES[e];await IN(t)}}a(zce,"stopClustering");async function Qce(){for(let e in Ze.CLUSTERING_PROCESSES){let t=Ze.CLUSTERING_PROCESSES[e];if(await cq(t)===!1)return!1}return!0}a(Qce,"isClusteringRunning");async function jce(){await go.generateNatsConfig(!0),await Cg.reloadNATSHub(),await Cg.reloadNATSLeaf(),await go.removeNatsConfig(Ze.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await go.removeNatsConfig(Ze.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(jce,"reloadClustering")});var MN={};ve(MN,{compactOnStart:()=>Jce,copyDb:()=>Sq});async function Jce(){Na.notify("Running compact on start"),console.log("Running compact on start");let e=(0,DN.get)(B.ROOTPATH),t=new Map,r=Je();(0,LN.updateConfigValue)(B.STORAGE_COMPACTONSTART,!1);try{for(let n in r){if(n==="system"||n.endsWith("-copy"))continue;let s;for(let l in r[n]){s=r[n][l].primaryStore.path;break}if(!s){console.log("Couldn't find any tables in database",n);continue}let i=(0,Dg.join)(e,"backup",n+".mdb"),o=(0,Dg.join)(e,Za,n+"-copy.mdb"),c=0;try{c=await hq(n),console.log("Database",n,"before compact has a total record count of",c)}catch(l){Na.error("Error getting record count for database",n,l),console.error("Error getting record count for database",n,l)}t.set(n,{db_path:s,copy_dest:o,backup_dest:i,record_count:c}),await Sq(n,o),console.log("Backing up",n,"to",i),await(0,nl.move)(s,i,{overwrite:!0})}try{ed()}catch(n){Na.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n)}for(let[n,{db_path:s,copy_dest:i}]of t)console.log("Moving copy compacted",n,"to",s),await(0,nl.move)(i,s,{overwrite:!0}),await(0,nl.remove)((0,Dg.join)(e,Za,`${n}-copy.mdb-lock`));try{ed()}catch(n){Na.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n),process.exit(0)}}catch(n){Na.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,LN.updateConfigValue)(B.STORAGE_COMPACTONSTART,!1);for(let[s,{db_path:i,backup_dest:o}]of t){console.error("Moving backup database",o,"back to",i);try{await(0,nl.move)(o,i,{overwrite:!0})}catch(c){console.error(c)}}throw ed(),n}for(let[n,{backup_dest:s,record_count:i}]of t){let o=!0,c=await hq(n);if(console.log("Database",n,"after compact has a total record count of",c),i!==c){o=!1;let l=`There is a discrepancy between pre and post compact record count for database ${n}.
25
25
  Total record count before compaction: ${i}, total after: ${c}.
26
- Database backup has not been removed and can be found here: ${s}`;Pa.error(l),console.error(l)}(0,gN.get)(B.STORAGE_COMPACTONSTARTKEEPBACKUP)===!0||o===!1||(console.log("Removing backup",s),await(0,nl.remove)(s))}}async function WG(e){let t=await(0,JG.describeSchema)({database:e}),r=0;for(let n in t)r+=t[n].record_count;return r}async function XG(e,t){console.log("copyDb start");let r=Je()[e],n;for(let d in r){n=r[d].primaryStore.rootStore;break}let s=n.dbisDb,i=n.auditStore,o=(0,zG.open)(new QG.default(t)),c=o.openDB(Tg.INTERNAL_DBIS_NAME),l,u=0,f=s.useReadTransaction();try{for(let{key:h,value:_}of s.getRange({transaction:f})){let p=_.is_hash_attribute||_.isPrimaryKey,S,g;if(p&&(S=_.compression,g=Ag(),g?_.compression=g:delete _.compression,S?.dictionary?.toString()===g?.dictionary?.toString()&&(S=null,g=null)),c.put(h,_),!(p||_.indexed))continue;let T=new jG.default(!p,p);T.encoding="binary",T.compression=S;let m=n.openDB(h,T);m.decoder=null,m.decoderCopies=!1,m.encoding="binary",T.compression=g;let A=o.openDB(h,T);A.encoder=null,console.log("copying",h,"from",e,"to",t),await d(m,A,p,f)}if(i){let h=n.openDB(Tg.AUDIT_STORE_NAME,Q_);console.log("copying audit log for",e,"to",t),d(i,h,!1,f)}async function d(h,_,p,S){let g=0,T=0,m=1e7,A=null;for(;m-- >0;)try{for(let w of h.getKeys({start:A,transaction:S}))try{A=w;let{value:M,version:F}=h.getEntry(w,{transaction:S});l=_.put(w,M,p?F:void 0),g++,S.openTimer&&(S.openTimer=0),T+=(w?.length||10)+M.length,u++>5e3&&(await l,console.log("copied",g,"entries",T,"bytes"),u=0)}catch(M){console.error("Error copying record",typeof w=="symbol"?"symbol":w,"from",e,"to",t,M)}console.log("finish copying, copied",g,"entries",T,"bytes");return}catch{if(typeof A=="string"){if(A==="z")return console.error("Reached end of dbi",A,"for",e,"to",t);A=A.slice(0,-2)+"z"}else if(typeof A=="number")A++;else return console.error("Unknown key type",A,"for",e,"to",t)}}a(d,"copyDbi"),await l,console.log("copied database "+e+" to "+t)}finally{f.done(),o.close()}}var zG,Sg,nl,gN,QG,jG,Tg,JG,SN,Pa,AN=be(()=>{De();zG=require("lmdb"),Sg=require("path"),nl=require("fs-extra"),gN=U(ce()),QG=U(gf()),jG=U(mf()),Tg=U(Mt());H();Zi();JG=U(oo()),SN=U(wt()),Pa=U(j());a(Ice,"compactOnStart");a(WG,"getTotalDBRecordCount");a(XG,"copyDb")});var Qu=P((tPe,iq)=>{"use strict";var Cce=require("minimist"),{isMainThread:yN,parentPort:J_,threadId:XCe}=require("worker_threads"),tt=(H(),D(q)),Mi=j(),bN=ae(),yg=hg(),Rg=Er(),ZCe=Ot(),rq=wt(),Zs=z_(),ZG=Uu(),{compactOnStart:Pce}=(AN(),D(TN)),Dce=ec(),{restartWorkers:bg,onMessageByType:Lce}=rt(),{handleHDBError:Mce,hdb_errors:vce}=_e(),{HTTP_STATUS_CODES:Uce}=vce,X_=ce(),{sendOperationToNode:eq,getThisNodeName:xce,monitorNodeCAs:Bce}=(_s(),D(Aa)),{getHDBNodeTable:ePe}=(Fc(),D(Mb));X_.initSync();var j_=`Restarting HarperDB. This may take up to ${tt.RESTART_TIMEOUT_MS/1e3} seconds.`,Hce="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",tq="Clustering is not enabled so cannot be restarted",kce="Invalid service",zu,Ss;iq.exports={restart:nq,restartService:ON};yN&&Lce(tt.ITC_EVENT_TYPES.RESTART,async(e,t)=>{e.workerType?await ON({service:e.workerType}):nq({operation:"restart"}),t.postMessage({type:"restart-complete"})});async function nq(e){Ss=Object.keys(e).length===0,zu=await Zs.isServiceRegistered(tt.PROCESS_DESCRIPTORS.HDB);let t=Cce(process.argv);if(t.service){await ON(t);return}if(Ss&&!zu){console.error(Hce);return}if(Ss&&console.log(j_),zu){Zs.enterPM2Mode(),Mi.notify(j_);let r=Dce(Object.keys(tt.CONFIG_PARAM_MAP),!0);return bN.isEmptyOrZeroLength(Object.keys(r))||rq.updateConfigValue(void 0,void 0,r,!0,!0),Fce(),j_}return yN?(Mi.notify(j_),X_.get(tt.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await Pce(),setTimeout(()=>{bg()},50)):J_.postMessage({type:tt.ITC_EVENT_TYPES.RESTART}),j_}a(nq,"restart");async function ON(e){let{service:t}=e;if(tt.HDB_PROCESS_SERVICES[t]===void 0)throw Mce(new Error,kce,Uce.BAD_REQUEST,void 0,void 0,!0);if(Zs.expectedRestartOfChildren(),zu=await Zs.isServiceRegistered(tt.PROCESS_DESCRIPTORS.HDB),!yN){e.replicated&&Bce(),J_.postMessage({type:tt.ITC_EVENT_TYPES.RESTART,workerType:t}),J_.ref(),await new Promise(s=>{J_.on("message",i=>{i.type==="restart-complete"&&(s(),J_.unref())})});let n;if(e.replicated){e.replicated=!1,n=[];for(let s of server.nodes){if(s.name===xce())continue;let{job_id:i}=await eq(s,e);n.push(await new Promise((o,c)=>{let u=2400,f=setInterval(async()=>{if(u--<=0){clearInterval(f);let _=new Error("Timed out waiting for restart job to complete");_.replicated=n,c(_)}let h=(await eq(s,{operation:"get_job",id:i})).results[0];if(h.status==="COMPLETE"&&(clearInterval(f),o({node:s.name,message:h.message})),h.status==="ERROR"){clearInterval(f);let _=new Error(h.message);_.replicated=n,c(_)}},250)}))}return{replicated:n}}return}let r;switch(t){case tt.HDB_PROCESS_SERVICES.clustering:if(!X_.get(tt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=tq;break}Ss&&console.log("Restarting clustering"),Mi.notify("Restarting clustering"),await sq();break;case tt.HDB_PROCESS_SERVICES.clustering_config:case tt.HDB_PROCESS_SERVICES["clustering config"]:if(!X_.get(tt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=tq;break}Ss&&console.log("Restarting clustering_config"),Mi.notify("Restarting clustering_config"),await Zs.reloadClustering();break;case"custom_functions":case"custom functions":case tt.HDB_PROCESS_SERVICES.harperdb:case tt.HDB_PROCESS_SERVICES.http_workers:case tt.HDB_PROCESS_SERVICES.http:if(Ss&&!zu){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}Ss&&console.log("Restarting http_workers"),Mi.notify("Restarting http_workers"),Ss?await Zs.restart(tt.PROCESS_DESCRIPTORS.HDB):await bg("http");break;default:r=`Unrecognized service: ${t}`;break}return r?(Mi.error(r),Ss&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(ON,"restartService");async function Fce(){await sq(),await Zs.restart(tt.PROCESS_DESCRIPTORS.HDB),await bN.async_set_timeout(2e3),X_.get(tt.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await RN(),Ss&&(await Rg.closeConnection(),process.exit(0))}a(Fce,"restartPM2Mode");async function sq(){if(!rq.getConfigFromFile(tt.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await ZG.getHDBProcessInfo()).clustering.length===0)Mi.trace("Clustering not running, restart will start clustering services"),await yg.generateNatsConfig(!0),await Zs.startClusteringProcesses(),await Zs.startClusteringThreads(),await RN(),Ss&&await Rg.closeConnection();else{await yg.generateNatsConfig(!0),zu?(Mi.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await Zs.restart(tt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Zs.restart(tt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await ZG.getHDBProcessInfo()).clustering.forEach(s=>{Mi.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await bN.async_set_timeout(3e3),await RN(),await Rg.updateLocalStreams(),Ss&&await Rg.closeConnection(),Mi.trace("Restart clustering restarting ingest and reply service threads");let t=bg(tt.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=bg(tt.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(sq,"restartClustering");async function RN(){await yg.removeNatsConfig(tt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await yg.removeNatsConfig(tt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(RN,"removeNatsConfig")});var Eq=P((sPe,pq)=>{"use strict";var nPe=require("lodash"),bn=(H(),D(q)),{handleHDBError:oq,hdb_errors:Gce}=_e(),{HDB_ERROR_MSGS:qce,HTTP_STATUS_CODES:$ce}=Gce,NN=j();pq.exports={getRolePermissions:Kce};var sl=Object.create(null),Vce=a(e=>({key:e,perms:{}}),"perms_template_obj"),uq=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),dq=a((e=!1,t=!1,r=!1,n=!1)=>({[bn.PERMS_CRUD_ENUM.READ]:e,[bn.PERMS_CRUD_ENUM.INSERT]:t,[bn.PERMS_CRUD_ENUM.UPDATE]:r,[bn.PERMS_CRUD_ENUM.DELETE]:n}),"permissions_template"),wN=a((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...dq(t,r,n,s)}),"table_perms_template"),aq=a((e,t=dq())=>({attribute_name:e,describe:hq(t),[Z_]:t[Z_],[IN]:t[IN],[CN]:t[CN]}),"attr_perms_template"),cq=a((e,t=!1)=>({attribute_name:e,describe:t,[Z_]:t}),"timestamp_attr_perms_template"),{READ:Z_,INSERT:IN,UPDATE:CN}=bn.PERMS_CRUD_ENUM,fq=Object.values(bn.PERMS_CRUD_ENUM),_q=[Z_,IN,CN];function Kce(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r={...global.hdb_schema};delete r[bn.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(sl[t]&&sl[t].key===n)return sl[t].perms;let s=Yce(e,r);return sl[t]?sl[t].key=n:sl[t]=Vce(n),sl[t].perms=s,s}catch(r){if(!e[bn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[bn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<bn.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 NN.error(n),NN.debug(r),oq(new Error,qce.OUTDATED_PERMS_TRANSLATION_ERROR,$ce.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
27
- ${r.stack}`;throw NN.error(n),oq(new Error)}}}a(Kce,"getRolePermissions");function Yce(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[bn.SYSTEM_SCHEMA_NAME]=n[bn.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]=Wce(t[i]);return}r[i]=uq(),n[i]?(n[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(n[i].tables[o]){let c=n[i].tables[o],l=t[i][o],u=zce(c,l);r[i].describe||fq.forEach(f=>{u[f]&&(r[i].describe=!0)}),r[i].tables[o]=u}else r[i].tables[o]=wN()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=wN()})}),r}a(Yce,"translateRolePermissions");function Wce(e){let t=uq(!0);return Object.keys(e).forEach(r=>{t.tables[r]=wN(!0,!0,!0,!0,!0)}),t}a(Wce,"createStructureUserPermissions");function zce(e,t){let{attribute_permissions:r}=e;if(r?.length>0){let s={...e};s.attribute_permissions=[];let i=r.reduce((u,f)=>{let{attribute_name:d}=f,h=f;return bn.TIME_STAMP_NAMES.includes(d)&&(h=cq(d,f[Z_])),u[d]=h,u},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],l=aq(o);return t.attributes.forEach(({attribute:u})=>{if(i[u]){let f=i[u];f.describe=hq(f),s.attribute_permissions.push(f),c||Qce(f,l)}else if(u!==o){let f;bn.TIME_STAMP_NAMES.includes(u)?f=cq(u):f=aq(u),s.attribute_permissions.push(f)}}),c||s.attribute_permissions.push(l),s.describe=lq(s),s}else return e.describe=lq(e),e}a(zce,"getTableAttrPerms");function lq(e){return fq.filter(t=>e[t]).length>0}a(lq,"getSchemaTableDescribePerm");function hq(e){return _q.filter(t=>e[t]).length>0}a(hq,"getAttributeDescribePerm");function Qce(e,t){_q.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(Qce,"checkForHashPerms")});var eh={};Be(eh,{authentication:()=>yq,bypassAuth:()=>rle,login:()=>sle,logout:()=>ile,start:()=>nle});function rle(){Rq=!0}async function yq(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,o=[];try{if(i){let _=e.isOperationsServer?Zce?Xce:[]:Jce?jce:[];if(_.includes(i)||_.includes("*")){if(e.method==="OPTIONS"){let p=new fo([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return Og&&p.set("Access-Control-Allow-Credentials","true"),{status:200,headers:p}}o.push("Access-Control-Allow-Origin",i),Og&&o.push("Access-Control-Allow-Credentials","true")}}let l,u;if(Og){i||(i=r.host);let _=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",p=s?.split(/;\s+/)||[];for(let S of p)if(S.startsWith(_)){let g=S.indexOf(";");l=S.slice(_.length,g===-1?S.length:g),u=await mq.get(l);break}e.session=u||(u={})}let f=a((_,p,S)=>{let g=new ju.AuthAuditLog(_,p,zo.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);g.auth_strategy=S,l&&(g.session_id=l),r.referer&&(g.referer=r.referer),r.origin&&(g.origin=r.origin),p===Us.SUCCESS?PN.notify(g):PN.error(g)},"authAuditLog");if(!e.authorized&&e.mtlsConfig&&e.peerCertificate.subject&&e?._nodeRequest?.socket?.authorizationError&&PN.error("Authorization error:",e._nodeRequest.socket.authorizationError),e.mtlsConfig&&e.authorized&&e.peerCertificate.subject){let _=e.mtlsConfig.user;_!==null?((_===void 0||_==="Common Name"||_==="CN")&&(_=e.peerCertificate.subject.CN),e.user=await je.getUser(_,null,e),f(_,Us.SUCCESS,"mTLS")):(0,ju.debug)("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let d;if(!e.user)if(n){if(d=il.get(n),!d){let _=n.indexOf(" "),p=n.slice(0,_),S=n.slice(_+1),g,T;try{switch(p){case"Basic":let m=atob(S),A=m.indexOf(":");g=m.slice(0,A),T=m.slice(A+1),d=g||T?await je.getUser(g,T,e):null;break;case"Bearer":try{d=await(0,Ng.validateOperationToken)(S)}catch(w){if(w.message==="invalid token")try{return await(0,Ng.validateRefreshToken)(S),c({status:-1})}catch{throw w}}break}}catch(m){return tle&&(il.get(S)||(il.set(S,S),f(g,Us.FAILURE,p))),c({status:401,body:sa({error:m.message},e)})}il.set(n,d),ele&&f(d.username,Us.SUCCESS,p)}e.user=d}else u?.user?e.user=await je.getUser(u.user,null,e):(Rq&&(e.ip?.includes("127.0.0.")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,Sq.getSuperUser)());Og&&(e.session.update=function(_){if(!l){l=(0,Tq.v4)();let S=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${l}; Path=/; Expires=Tue, 01 Oct 8307 19:33:20 GMT; HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",S):h?.headers?.set&&h.headers.set("Set-Cookie",S)}return e.protocol==="https"&&(o?(i&&o.push("Access-Control-Expose-Headers","X-Hdb-Session"),o.push("X-Hdb-Session","Secure")):h?.headers?.set&&(i&&h.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),h.headers.set("X-Hdb-Session","Secure"))),_.id=l,mq.put(_)},e.login=async function(_,p){let S=e.user=await je.getUser(_,p,e);e.session.update({user:S&&(S.getId?.()??S.username)})});let h=await t(e);return h&&(h.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&pi.loginPath?(h.status=302,h.headers.set("Location",pi.loginPath(e))):h.headers.set("WWW-Authenticate","Basic")),c(h))}catch(l){throw c(l)}function c(l){let u=o.length;if(u>0){let f=l.headers;f||(l.headers=f=new fo);for(let d=0;d<u;){let h=o[d++];f.set(h,o[d++])}}return o=null,l}a(c,"applyResponseHeaders")}function nle({server:e,port:t,securePort:r}){e.http(yq,t||r?{port:t,securePort:r}:{port:"all"}),gq||(gq=!0,setInterval(()=>{il=new Map},Ts.get(B.AUTHENTICATION_CACHETTL)).unref(),Aq.user.addListener(()=>{il=new Map}))}async function sle(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 ile(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var Sq,Ng,Tq,Ts,ju,Aq,PN,jce,Jce,Xce,Zce,mq,Og,Rq,ele,tle,il,gq,wg=be(()=>{Sq=U(qn());$r();Gl();Ng=U(fu());De();Tq=require("uuid"),Ts=U(ce());H();ju=U(j()),Aq=U(Hf());c_();Xi();PN=(0,ju.loggerWithTag)("auth-event");Ts.initSync();jce=Ts.get(B.HTTP_CORSACCESSLIST),Jce=Ts.get(B.HTTP_CORS),Xce=Ts.get(B.OPERATIONSAPI_NETWORK_CORSACCESSLIST),Zce=Ts.get(B.OPERATIONSAPI_NETWORK_CORS),mq=ot({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),Og=Ts.get(B.AUTHENTICATION_ENABLESESSIONS)??!0,Rq=process.env.AUTHENTICATION_AUTHORIZELOCAL??Ts.get(B.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,ele=Ts.get(B.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,tle=Ts.get(B.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,il=new Map;je.onInvalidatedUser(()=>{il=new Map});a(rle,"bypassAuth");a(yq,"authentication");a(nle,"start");a(sle,"login");a(ile,"logout")});var Pq=P((_Pe,Cq)=>{"use strict";var Oe=require("joi"),bq=require("fs-extra"),Oq=require("path"),Jn=pt(),Nq=ce(),wq=(H(),D(q)),Iq=j(),{hdb_errors:ole}=_e(),{HDB_ERROR_MSGS:en}=ole,yo=/^[a-zA-Z0-9-_]+$/,ale=/^[a-zA-Z0-9-_]+$/;Cq.exports={getDropCustomFunctionValidator:lle,setCustomFunctionValidator:ule,addComponentValidator:hle,dropCustomFunctionProjectValidator:ple,packageComponentValidator:Ele,deployComponentValidator:mle,setComponentFileValidator:dle,getComponentFileValidator:_le,dropComponentFileValidator:fle,addSSHKeyValidator:gle,updateSSHKeyValidator:Sle,deleteSSHKeyValidator:Tle,setSSHKnownHostsValidator:Ale};function Ig(e,t,r){try{let n=Nq.get(wq.CONFIG_PARAMS.COMPONENTSROOT),s=Oq.join(n,t);return bq.existsSync(s)?e?t:r.message(en.PROJECT_EXISTS):e?r.message(en.NO_PROJECT):t}catch(n){return Iq.error(n),r.message(en.VALIDATION_ERR)}}a(Ig,"checkProjectExists");function th(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(th,"checkFilePath");function cle(e,t,r,n){try{let s=Nq.get(wq.CONFIG_PARAMS.COMPONENTSROOT),i=Oq.join(s,e,t,r+".js");return bq.existsSync(i)?r:n.message(en.NO_FILE)}catch(s){return Iq.error(s),n.message(en.VALIDATION_ERR)}}a(cle,"checkFileExists");function lle(e){let t=Oe.object({project:Oe.string().pattern(yo).custom(Ig.bind(null,!0)).required().messages({"string.pattern.base":en.BAD_PROJECT_NAME}),type:Oe.string().valid("helpers","routes").required(),file:Oe.string().pattern(yo).custom(cle.bind(null,e.project,e.type)).custom(th).required().messages({"string.pattern.base":en.BAD_FILE_NAME})});return Jn.validateBySchema(e,t)}a(lle,"getDropCustomFunctionValidator");function ule(e){let t=Oe.object({project:Oe.string().pattern(yo).custom(Ig.bind(null,!0)).required().messages({"string.pattern.base":en.BAD_PROJECT_NAME}),type:Oe.string().valid("helpers","routes").required(),file:Oe.string().custom(th).required(),function_content:Oe.string().required()});return Jn.validateBySchema(e,t)}a(ule,"setCustomFunctionValidator");function dle(e){let t=Oe.object({project:Oe.string().pattern(yo).required().messages({"string.pattern.base":en.BAD_PROJECT_NAME}),file:Oe.string().custom(th).required(),payload:Oe.string().allow("").optional(),encoding:Oe.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Jn.validateBySchema(e,t)}a(dle,"setComponentFileValidator");function fle(e){let t=Oe.object({project:Oe.string().pattern(yo).required().messages({"string.pattern.base":en.BAD_PROJECT_NAME}),file:Oe.string().custom(th).optional()});return Jn.validateBySchema(e,t)}a(fle,"dropComponentFileValidator");function _le(e){let t=Oe.object({project:Oe.string().required(),file:Oe.string().custom(th).required(),encoding:Oe.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Jn.validateBySchema(e,t)}a(_le,"getComponentFileValidator");function hle(e){let t=Oe.object({project:Oe.string().pattern(yo).custom(Ig.bind(null,!1)).required().messages({"string.pattern.base":en.BAD_PROJECT_NAME})});return Jn.validateBySchema(e,t)}a(hle,"addComponentValidator");function ple(e){let t=Oe.object({project:Oe.string().pattern(yo).custom(Ig.bind(null,!0)).required().messages({"string.pattern.base":en.BAD_PROJECT_NAME})});return Jn.validateBySchema(e,t)}a(ple,"dropCustomFunctionProjectValidator");function Ele(e){let t=Oe.object({project:Oe.string().pattern(yo).required().messages({"string.pattern.base":en.BAD_PROJECT_NAME}),skip_node_modules:Oe.boolean(),skip_symlinks:Oe.boolean()});return Jn.validateBySchema(e,t)}a(Ele,"packageComponentValidator");function mle(e){let t=Oe.object({project:Oe.string().pattern(yo).required().messages({"string.pattern.base":en.BAD_PROJECT_NAME}),package:Oe.string().optional(),restart:Oe.alternatives().try(Oe.boolean(),Oe.string().valid("rolling")).optional()});return Jn.validateBySchema(e,t)}a(mle,"deployComponentValidator");function gle(e){let t=Oe.object({name:Oe.string().pattern(ale).required().messages({"string.pattern.base":en.BAD_SSH_KEY_NAME}),key:Oe.string().required(),host:Oe.string().required(),hostname:Oe.string().required(),known_hosts:Oe.string().optional()});return Jn.validateBySchema(e,t)}a(gle,"addSSHKeyValidator");function Sle(e){let t=Oe.object({name:Oe.string().required(),key:Oe.string().required()});return Jn.validateBySchema(e,t)}a(Sle,"updateSSHKeyValidator");function Tle(e){let t=Oe.object({name:Oe.string().required()});return Jn.validateBySchema(e,t)}a(Tle,"deleteSSHKeyValidator");function Ale(e){let t=Oe.object({known_hosts:Oe.string().required()});return Jn.validateBySchema(e,t)}a(Ale,"setSSHKnownHostsValidator")});var rh=P((pPe,xq)=>{"use strict";var Cg=require("joi"),Da=require("path"),Ju=require("fs-extra"),{exec:Rle}=require("child_process"),yle=require("util"),Dq=yle.promisify(Rle),ed=(H(),D(q)),{PACKAGE_ROOT:ble}=_t(),{handleHDBError:Xu,hdb_errors:Ole}=_e(),{HTTP_STATUS_CODES:Zu}=Ole,ol=ce(),Nle=pt(),al=j();ol.initSync();var DN=ol.get(ed.CONFIG_PARAMS.COMPONENTSROOT),Lq="npm install --force --omit=dev --json",wle=`${Lq} --dry-run`,Ile=ol.get(ed.CONFIG_PARAMS.ROOTPATH),Pg=Da.join(Ile,"ssh");xq.exports={installModules:Lle,auditModules:Mle,installAllRootModules:Cle,uninstallRootModule:Ple,linkHarperdb:Dle,runCommand:td};async function Cle(e=!1,t=ol.get(ed.CONFIG_PARAMS.ROOTPATH)){await Dg();let r=!1,n=process.env;Ju.pathExistsSync(Pg)&&Ju.readdirSync(Pg).forEach(s=>{s.includes(".key")&&!r&&(n={GIT_SSH_COMMAND:"ssh -F "+Da.join(Pg,"config")+" -o UserKnownHostsFile="+Da.join(Pg,"known_hosts"),...process.env},r=!0)});try{let s=ol.get(ed.CONFIG_PARAMS.ROOTPATH),i=Da.join(s,"node_modules","harperdb");Ju.lstatSync(i).isSymbolicLink()&&Ju.unlinkSync(i)}catch(s){s.code!=="ENOENT"&&al.error("Error removing symlink:",s)}await td(e?"npm install --force --ignore-scripts --no-bin-links":"npm install --force --no-bin-links",t,n)}a(Cle,"installAllRootModules");async function Ple(e){await td(`npm uninstall ${e}`,ol.get(ed.CONFIG_PARAMS.ROOTPATH))}a(Ple,"uninstallRootModule");async function Dle(){await Dg(),await td(`npm link ${ble}`,ol.get(ed.CONFIG_PARAMS.ROOTPATH))}a(Dle,"linkHarperdb");async function td(e,t=void 0,r=process.env){let n,s;try{({stdout:n,stderr:s}=await Dq(e,{cwd:t,env:r}))}catch(i){throw new Error(i.stderr.replace(`
26
+ Database backup has not been removed and can be found here: ${s}`;Na.error(l),console.error(l)}(0,DN.get)(B.STORAGE_COMPACTONSTARTKEEPBACKUP)===!0||o===!1||(console.log("Removing backup",s),await(0,nl.remove)(s))}}async function hq(e){let t=await(0,gq.describeSchema)({database:e}),r=0;for(let n in t)r+=t[n].record_count;return r}async function Sq(e,t){console.log("copyDb start");let r=Je()[e],n;for(let d in r){n=r[d].primaryStore.rootStore;break}let s=n.dbisDb,i=n.auditStore,o=(0,pq.open)(new mq.default(t)),c=o.openDB(Lg.INTERNAL_DBIS_NAME),l,u=0,f=s.useReadTransaction();try{for(let{key:h,value:_}of s.getRange({transaction:f})){let p=_.is_hash_attribute||_.isPrimaryKey,S,g;if(p&&(S=_.compression,g=Mg(),g?_.compression=g:delete _.compression,S?.dictionary?.toString()===g?.dictionary?.toString()&&(S=null,g=null)),c.put(h,_),!(p||_.indexed))continue;let R=new Eq.default(!p,p);R.encoding="binary",R.compression=S;let E=n.openDB(h,R);E.decoder=null,E.decoderCopies=!1,E.encoding="binary",R.compression=g;let A=o.openDB(h,R);A.encoder=null,console.log("copying",h,"from",e,"to",t),await d(E,A,p,f)}if(i){let h=n.openDB(Lg.AUDIT_STORE_NAME,rh);console.log("copying audit log for",e,"to",t),d(i,h,!1,f)}async function d(h,_,p,S){let g=0,R=0,E=1e7,A=null;for(;E-- >0;)try{for(let O of h.getKeys({start:A,transaction:S}))try{A=O;let{value:v,version:F}=h.getEntry(O,{transaction:S});l=_.put(O,v,p?F:void 0),g++,S.openTimer&&(S.openTimer=0),R+=(O?.length||10)+v.length,u++>5e3&&(await l,console.log("copied",g,"entries",R,"bytes"),u=0)}catch(v){console.error("Error copying record",typeof O=="symbol"?"symbol":O,"from",e,"to",t,v)}console.log("finish copying, copied",g,"entries",R,"bytes");return}catch{if(typeof A=="string"){if(A==="z")return console.error("Reached end of dbi",A,"for",e,"to",t);A=A.slice(0,-2)+"z"}else if(typeof A=="number")A++;else return console.error("Unknown key type",A,"for",e,"to",t)}}a(d,"copyDbi"),await l,console.log("copied database "+e+" to "+t)}finally{f.done(),o.close()}}var pq,Dg,nl,DN,mq,Eq,Lg,gq,LN,Na,vN=be(()=>{Me();pq=require("lmdb"),Dg=require("path"),nl=require("fs-extra"),DN=M(ce()),mq=M(bf()),Eq=M(yf()),Lg=M(vt());H();Ji();gq=M(no()),LN=M(It()),Na=M(j());a(Jce,"compactOnStart");a(hq,"getTotalDBRecordCount");a(Sq,"copyDb")});var rd=I((lPe,Nq)=>{"use strict";var Xce=require("minimist"),{isMainThread:xN,parentPort:sh,threadId:oPe}=require("worker_threads"),nt=(H(),D(q)),Mi=j(),BN=oe(),Ug=Ng(),vg=pr(),aPe=Nt(),yq=It(),Js=th(),Tq=$u(),{compactOnStart:Zce}=(vN(),D(MN)),ele=ec(),{restartWorkers:xg,onMessageByType:tle}=rt(),{handleHDBError:rle,hdb_errors:nle}=he(),{HTTP_STATUS_CODES:sle}=nle,ih=ce(),{sendOperationToNode:Aq,getThisNodeName:ile,monitorNodeCAs:ole}=(fs(),D(ma)),{getHDBNodeTable:cPe}=(Fc(),D(Yb));ih.initSync();var nh=`Restarting HarperDB. This may take up to ${nt.RESTART_TIMEOUT_MS/1e3} seconds.`,ale="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",Rq="Clustering is not enabled so cannot be restarted",cle="Invalid service",td,gs;Nq.exports={restart:bq,restartService:HN};xN&&tle(nt.ITC_EVENT_TYPES.RESTART,async(e,t)=>{e.workerType?await HN({service:e.workerType}):bq({operation:"restart"}),t.postMessage({type:"restart-complete"})});async function bq(e){gs=Object.keys(e).length===0,td=await Js.isServiceRegistered(nt.PROCESS_DESCRIPTORS.HDB);let t=Xce(process.argv);if(t.service){await HN(t);return}if(gs&&!td){console.error(ale);return}if(gs&&console.log(nh),td){Js.enterPM2Mode(),Mi.notify(nh);let r=ele(Object.keys(nt.CONFIG_PARAM_MAP),!0);return BN.isEmptyOrZeroLength(Object.keys(r))||yq.updateConfigValue(void 0,void 0,r,!0,!0),lle(),nh}return xN?(Mi.notify(nh),ih.get(nt.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await Zce(),process.env.HARPER_EXIT_ON_RESTART&&process.exit(0),setTimeout(()=>{xg()},50)):sh.postMessage({type:nt.ITC_EVENT_TYPES.RESTART}),nh}a(bq,"restart");async function HN(e){let{service:t}=e;if(nt.HDB_PROCESS_SERVICES[t]===void 0)throw rle(new Error,cle,sle.BAD_REQUEST,void 0,void 0,!0);if(Js.expectedRestartOfChildren(),td=await Js.isServiceRegistered(nt.PROCESS_DESCRIPTORS.HDB),!xN){e.replicated&&ole(),sh.postMessage({type:nt.ITC_EVENT_TYPES.RESTART,workerType:t}),sh.ref(),await new Promise(s=>{sh.on("message",i=>{i.type==="restart-complete"&&(s(),sh.unref())})});let n;if(e.replicated){e.replicated=!1,n=[];for(let s of server.nodes){if(s.name===ile())continue;let{job_id:i}=await Aq(s,e);n.push(await new Promise((o,c)=>{let u=2400,f=setInterval(async()=>{if(u--<=0){clearInterval(f);let _=new Error("Timed out waiting for restart job to complete");_.replicated=n,c(_)}let h=(await Aq(s,{operation:"get_job",id:i})).results[0];if(h.status==="COMPLETE"&&(clearInterval(f),o({node:s.name,message:h.message})),h.status==="ERROR"){clearInterval(f);let _=new Error(h.message);_.replicated=n,c(_)}},250)}))}return{replicated:n}}return}let r;switch(t){case nt.HDB_PROCESS_SERVICES.clustering:if(!ih.get(nt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=Rq;break}gs&&console.log("Restarting clustering"),Mi.notify("Restarting clustering"),await Oq();break;case nt.HDB_PROCESS_SERVICES.clustering_config:case nt.HDB_PROCESS_SERVICES["clustering config"]:if(!ih.get(nt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=Rq;break}gs&&console.log("Restarting clustering_config"),Mi.notify("Restarting clustering_config"),await Js.reloadClustering();break;case"custom_functions":case"custom functions":case nt.HDB_PROCESS_SERVICES.harperdb:case nt.HDB_PROCESS_SERVICES.http_workers:case nt.HDB_PROCESS_SERVICES.http:if(gs&&!td){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}gs&&console.log("Restarting http_workers"),Mi.notify("Restarting http_workers"),gs?await Js.restart(nt.PROCESS_DESCRIPTORS.HDB):await xg("http");break;default:r=`Unrecognized service: ${t}`;break}return r?(Mi.error(r),gs&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(HN,"restartService");async function lle(){await Oq(),await Js.restart(nt.PROCESS_DESCRIPTORS.HDB),await BN.async_set_timeout(2e3),ih.get(nt.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await UN(),gs&&(await vg.closeConnection(),process.exit(0))}a(lle,"restartPM2Mode");async function Oq(){if(!yq.getConfigFromFile(nt.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await Tq.getHDBProcessInfo()).clustering.length===0)Mi.trace("Clustering not running, restart will start clustering services"),await Ug.generateNatsConfig(!0),await Js.startClusteringProcesses(),await Js.startClusteringThreads(),await UN(),gs&&await vg.closeConnection();else{await Ug.generateNatsConfig(!0),td?(Mi.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await Js.restart(nt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Js.restart(nt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await Tq.getHDBProcessInfo()).clustering.forEach(s=>{Mi.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await BN.async_set_timeout(3e3),await UN(),await vg.updateLocalStreams(),gs&&await vg.closeConnection(),Mi.trace("Restart clustering restarting ingest and reply service threads");let t=xg(nt.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=xg(nt.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(Oq,"restartClustering");async function UN(){await Ug.removeNatsConfig(nt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Ug.removeNatsConfig(nt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(UN,"removeNatsConfig")});var Bq=I((fPe,xq)=>{"use strict";var dPe=require("lodash"),An=(H(),D(q)),{handleHDBError:wq,hdb_errors:ule}=he(),{HDB_ERROR_MSGS:dle,HTTP_STATUS_CODES:fle}=ule,kN=j();xq.exports={getRolePermissions:hle};var sl=Object.create(null),_le=a(e=>({key:e,perms:{}}),"perms_template_obj"),Dq=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),Lq=a((e=!1,t=!1,r=!1,n=!1)=>({[An.PERMS_CRUD_ENUM.READ]:e,[An.PERMS_CRUD_ENUM.INSERT]:t,[An.PERMS_CRUD_ENUM.UPDATE]:r,[An.PERMS_CRUD_ENUM.DELETE]:n}),"permissions_template"),FN=a((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...Lq(t,r,n,s)}),"table_perms_template"),Iq=a((e,t=Lq())=>({attribute_name:e,describe:Uq(t),[oh]:t[oh],[GN]:t[GN],[qN]:t[qN]}),"attr_perms_template"),Cq=a((e,t=!1)=>({attribute_name:e,describe:t,[oh]:t}),"timestamp_attr_perms_template"),{READ:oh,INSERT:GN,UPDATE:qN}=An.PERMS_CRUD_ENUM,Mq=Object.values(An.PERMS_CRUD_ENUM),vq=[oh,GN,qN];function hle(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r={...global.hdb_schema};delete r[An.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(sl[t]&&sl[t].key===n)return sl[t].perms;let s=ple(e,r);return sl[t]?sl[t].key=n:sl[t]=_le(n),sl[t].perms=s,s}catch(r){if(!e[An.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[An.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<An.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 kN.error(n),kN.debug(r),wq(new Error,dle.OUTDATED_PERMS_TRANSLATION_ERROR,fle.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
27
+ ${r.stack}`;throw kN.error(n),wq(new Error)}}}a(hle,"getRolePermissions");function ple(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[An.SYSTEM_SCHEMA_NAME]=n[An.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]=mle(t[i]);return}r[i]=Dq(),n[i]?(n[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(n[i].tables[o]){let c=n[i].tables[o],l=t[i][o],u=Ele(c,l);r[i].describe||Mq.forEach(f=>{u[f]&&(r[i].describe=!0)}),r[i].tables[o]=u}else r[i].tables[o]=FN()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=FN()})}),r}a(ple,"translateRolePermissions");function mle(e){let t=Dq(!0);return Object.keys(e).forEach(r=>{t.tables[r]=FN(!0,!0,!0,!0,!0)}),t}a(mle,"createStructureUserPermissions");function Ele(e,t){let{attribute_permissions:r}=e;if(r?.length>0){let s={...e};s.attribute_permissions=[];let i=r.reduce((u,f)=>{let{attribute_name:d}=f,h=f;return An.TIME_STAMP_NAMES.includes(d)&&(h=Cq(d,f[oh])),u[d]=h,u},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],l=Iq(o);return t.attributes.forEach(({attribute:u})=>{if(i[u]){let f=i[u];f.describe=Uq(f),s.attribute_permissions.push(f),c||gle(f,l)}else if(u!==o){let f;An.TIME_STAMP_NAMES.includes(u)?f=Cq(u):f=Iq(u),s.attribute_permissions.push(f)}}),c||s.attribute_permissions.push(l),s.describe=Pq(s),s}else return e.describe=Pq(e),e}a(Ele,"getTableAttrPerms");function Pq(e){return Mq.filter(t=>e[t]).length>0}a(Pq,"getSchemaTableDescribePerm");function Uq(e){return vq.filter(t=>e[t]).length>0}a(Uq,"getAttributeDescribePerm");function gle(e,t){vq.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(gle,"checkForHashPerms")});var ah={};ve(ah,{authentication:()=>Vq,bypassAuth:()=>Ole,login:()=>wle,logout:()=>Ile,start:()=>Nle});function Ole(){$q=!0}async function Vq(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,o=[];try{if(i){let _=e.isOperationsServer?Rle?Ale:[]:Tle?Sle:[];if(_.includes(i)||_.includes("*")){if(e.method==="OPTIONS"){let p=jn.get(B.HTTP_CORSACCESSCONTROLALLOWHEADERS)??"Accept, Content-Type, Authorization",S=new co([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers",p],["Access-Control-Allow-Origin",i]]);return Bg&&S.set("Access-Control-Allow-Credentials","true"),{status:200,headers:S}}o.push("Access-Control-Allow-Origin",i),Bg&&o.push("Access-Control-Allow-Credentials","true")}}let l,u;if(Bg){i||(i=r.host);let _=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",p=s?.split(/;\s+/)||[];for(let S of p)if(S.startsWith(_)){let g=S.indexOf(";");l=S.slice(_.length,g===-1?S.length:g),u=await Hq.get(l);break}e.session=u||(u={})}let f=a((_,p,S)=>{let g=new nd.AuthAuditLog(_,p,Vo.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);g.auth_strategy=S,l&&(g.session_id=l),r.referer&&(g.referer=r.referer),r.origin&&(g.origin=r.origin),p===Ls.SUCCESS?$N.notify(g):$N.error(g)},"authAuditLog");if(!e.authorized&&e.mtlsConfig&&e.peerCertificate.subject&&e?._nodeRequest?.socket?.authorizationError&&$N.error("Authorization error:",e._nodeRequest.socket.authorizationError),e.mtlsConfig&&e.authorized&&e.peerCertificate.subject){let _=e.mtlsConfig.user;_!==null?((_===void 0||_==="Common Name"||_==="CN")&&(_=e.peerCertificate.subject.CN),e.user=await Ye.getUser(_,null,e),f(_,Ls.SUCCESS,"mTLS")):(0,nd.debug)("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let d;if(!e.user)if(n){if(d=il.get(n),!d){let _=n.indexOf(" "),p=n.slice(0,_),S=n.slice(_+1),g,R;try{switch(p){case"Basic":let E=atob(S),A=E.indexOf(":");g=E.slice(0,A),R=E.slice(A+1),d=g||R?await Ye.getUser(g,R,e):null;break;case"Bearer":try{d=await yb(S)}catch(O){if(O.message==="invalid token")try{return await mE(S),c({status:-1})}catch{throw O}}break}}catch(E){return ble&&(il.get(S)||(il.set(S,S),f(g,Ls.FAILURE,p))),c({status:401,body:Zo({error:E.message},e)})}il.set(n,d),yle&&f(d.username,Ls.SUCCESS,p)}e.user=d}else u?.user?e.user=await Ye.getUser(u.user,null,e):($q&&(e.ip?.includes("127.0.0.")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,Fq.getSuperUser)());Bg&&(e.session.update=function(_){if(!l){l=(0,Gq.v4)();let S=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${l}; Path=/; Expires=Tue, 01 Oct 8307 19:33:20 GMT; HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",S):h?.headers?.set&&h.headers.set("Set-Cookie",S)}return e.protocol==="https"&&(o?(i&&o.push("Access-Control-Expose-Headers","X-Hdb-Session"),o.push("X-Hdb-Session","Secure")):h?.headers?.set&&(i&&h.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),h.headers.set("X-Hdb-Session","Secure"))),_.id=l,Hq.put(_)},e.login=async function(_,p){let S=e.user=await Ye.authenticateUser(_,p,e);e.session.update({user:S&&(S.getId?.()??S.username)})});let h=await t(e);return h&&(h.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&_i.loginPath?(h.status=302,h.headers.set("Location",_i.loginPath(e))):h.headers.set("WWW-Authenticate","Basic")),c(h))}catch(l){throw c(l)}function c(l){let u=o.length;if(u>0){let f=l.headers;f||(l.headers=f=new co);for(let d=0;d<u;){let h=o[d++];f.set(h,o[d++])}}return o=null,l}a(c,"applyResponseHeaders")}function Nle({server:e,port:t,securePort:r}){e.http(Vq,t||r?{port:t,securePort:r}:{port:"all"}),kq||(kq=!0,setInterval(()=>{il=new Map},jn.get(B.AUTHENTICATION_CACHETTL)).unref(),qq.user.addListener(()=>{il=new Map}))}async function wle(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 Ile(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var Fq,Gq,jn,nd,qq,$N,Sle,Tle,Ale,Rle,Hq,Bg,$q,yle,ble,il,kq,Hg=be(()=>{Fq=M(Gn());Gr();Yl();Tu();Me();Gq=require("uuid"),jn=M(ce());H();nd=M(j()),qq=M(Kf());p_();ji();$N=(0,nd.loggerWithTag)("auth-event");jn.initSync();Sle=jn.get(B.HTTP_CORSACCESSLIST),Tle=jn.get(B.HTTP_CORS),Ale=jn.get(B.OPERATIONSAPI_NETWORK_CORSACCESSLIST),Rle=jn.get(B.OPERATIONSAPI_NETWORK_CORS),Hq=ut({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),Bg=jn.get(B.AUTHENTICATION_ENABLESESSIONS)??!0,$q=process.env.AUTHENTICATION_AUTHORIZELOCAL??jn.get(B.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,yle=jn.get(B.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,ble=jn.get(B.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,il=new Map;Ye.onInvalidatedUser(()=>{il=new Map});a(Ole,"bypassAuth");a(Vq,"authentication");a(Nle,"start");a(wle,"login");a(Ile,"logout")});var Jq=I((RPe,jq)=>{"use strict";var Ne=require("joi"),Kq=require("fs-extra"),Yq=require("path"),Jn=dt(),Wq=ce(),zq=(H(),D(q)),Qq=j(),{hdb_errors:Cle}=he(),{HDB_ERROR_MSGS:Xr}=Cle,To=/^[a-zA-Z0-9-_]+$/,Ple=/^[a-zA-Z0-9-_]+$/;jq.exports={getDropCustomFunctionValidator:Lle,setCustomFunctionValidator:Mle,addComponentValidator:Ble,dropCustomFunctionProjectValidator:Hle,packageComponentValidator:kle,deployComponentValidator:Fle,setComponentFileValidator:vle,getComponentFileValidator:xle,dropComponentFileValidator:Ule,addSSHKeyValidator:Gle,updateSSHKeyValidator:qle,deleteSSHKeyValidator:$le,setSSHKnownHostsValidator:Vle};function kg(e,t,r){try{let n=Wq.get(zq.CONFIG_PARAMS.COMPONENTSROOT),s=Yq.join(n,t);return Kq.existsSync(s)?e?t:r.message(Xr.PROJECT_EXISTS):e?r.message(Xr.NO_PROJECT):t}catch(n){return Qq.error(n),r.message(Xr.VALIDATION_ERR)}}a(kg,"checkProjectExists");function ch(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(ch,"checkFilePath");function Dle(e,t,r,n){try{let s=Wq.get(zq.CONFIG_PARAMS.COMPONENTSROOT),i=Yq.join(s,e,t,r+".js");return Kq.existsSync(i)?r:n.message(Xr.NO_FILE)}catch(s){return Qq.error(s),n.message(Xr.VALIDATION_ERR)}}a(Dle,"checkFileExists");function Lle(e){let t=Ne.object({project:Ne.string().pattern(To).custom(kg.bind(null,!0)).required().messages({"string.pattern.base":Xr.BAD_PROJECT_NAME}),type:Ne.string().valid("helpers","routes").required(),file:Ne.string().pattern(To).custom(Dle.bind(null,e.project,e.type)).custom(ch).required().messages({"string.pattern.base":Xr.BAD_FILE_NAME})});return Jn.validateBySchema(e,t)}a(Lle,"getDropCustomFunctionValidator");function Mle(e){let t=Ne.object({project:Ne.string().pattern(To).custom(kg.bind(null,!0)).required().messages({"string.pattern.base":Xr.BAD_PROJECT_NAME}),type:Ne.string().valid("helpers","routes").required(),file:Ne.string().custom(ch).required(),function_content:Ne.string().required()});return Jn.validateBySchema(e,t)}a(Mle,"setCustomFunctionValidator");function vle(e){let t=Ne.object({project:Ne.string().pattern(To).required().messages({"string.pattern.base":Xr.BAD_PROJECT_NAME}),file:Ne.string().custom(ch).required(),payload:Ne.string().allow("").optional(),encoding:Ne.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Jn.validateBySchema(e,t)}a(vle,"setComponentFileValidator");function Ule(e){let t=Ne.object({project:Ne.string().pattern(To).required().messages({"string.pattern.base":Xr.BAD_PROJECT_NAME}),file:Ne.string().custom(ch).optional()});return Jn.validateBySchema(e,t)}a(Ule,"dropComponentFileValidator");function xle(e){let t=Ne.object({project:Ne.string().required(),file:Ne.string().custom(ch).required(),encoding:Ne.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Jn.validateBySchema(e,t)}a(xle,"getComponentFileValidator");function Ble(e){let t=Ne.object({project:Ne.string().pattern(To).custom(kg.bind(null,!1)).required().messages({"string.pattern.base":Xr.BAD_PROJECT_NAME})});return Jn.validateBySchema(e,t)}a(Ble,"addComponentValidator");function Hle(e){let t=Ne.object({project:Ne.string().pattern(To).custom(kg.bind(null,!0)).required().messages({"string.pattern.base":Xr.BAD_PROJECT_NAME})});return Jn.validateBySchema(e,t)}a(Hle,"dropCustomFunctionProjectValidator");function kle(e){let t=Ne.object({project:Ne.string().pattern(To).required().messages({"string.pattern.base":Xr.BAD_PROJECT_NAME}),skip_node_modules:Ne.boolean(),skip_symlinks:Ne.boolean()});return Jn.validateBySchema(e,t)}a(kle,"packageComponentValidator");function Fle(e){let t=Ne.object({project:Ne.string().pattern(To).required().messages({"string.pattern.base":Xr.BAD_PROJECT_NAME}),package:Ne.string().optional(),restart:Ne.alternatives().try(Ne.boolean(),Ne.string().valid("rolling")).optional()});return Jn.validateBySchema(e,t)}a(Fle,"deployComponentValidator");function Gle(e){let t=Ne.object({name:Ne.string().pattern(Ple).required().messages({"string.pattern.base":Xr.BAD_SSH_KEY_NAME}),key:Ne.string().required(),host:Ne.string().required(),hostname:Ne.string().required(),known_hosts:Ne.string().optional()});return Jn.validateBySchema(e,t)}a(Gle,"addSSHKeyValidator");function qle(e){let t=Ne.object({name:Ne.string().required(),key:Ne.string().required()});return Jn.validateBySchema(e,t)}a(qle,"updateSSHKeyValidator");function $le(e){let t=Ne.object({name:Ne.string().required()});return Jn.validateBySchema(e,t)}a($le,"deleteSSHKeyValidator");function Vle(e){let t=Ne.object({known_hosts:Ne.string().required()});return Jn.validateBySchema(e,t)}a(Vle,"setSSHKnownHostsValidator")});var dh=I((bPe,n$)=>{"use strict";var Fg=require("joi"),wa=require("path"),sd=require("fs-extra"),{exec:Kle}=require("child_process"),Yle=require("util"),Xq=Yle.promisify(Kle),id=(H(),D(q)),{PACKAGE_ROOT:Wle}=Et(),{handleHDBError:lh,hdb_errors:zle}=he(),{HTTP_STATUS_CODES:uh}=zle,ol=ce(),Qle=dt(),al=j();ol.initSync();var VN=ol.get(id.CONFIG_PARAMS.COMPONENTSROOT),Zq="npm install --force --omit=dev --json",jle=`${Zq} --dry-run`,Jle=ol.get(id.CONFIG_PARAMS.ROOTPATH),Gg=wa.join(Jle,"ssh");n$.exports={installModules:tue,auditModules:rue,installAllRootModules:Xle,uninstallRootModule:Zle,linkHarperdb:eue,runCommand:od};async function Xle(e=!1,t=ol.get(id.CONFIG_PARAMS.ROOTPATH)){await qg();let r=!1,n=process.env;sd.pathExistsSync(Gg)&&sd.readdirSync(Gg).forEach(s=>{s.includes(".key")&&!r&&(n={GIT_SSH_COMMAND:"ssh -F "+wa.join(Gg,"config")+" -o UserKnownHostsFile="+wa.join(Gg,"known_hosts"),...process.env},r=!0)});try{let s=ol.get(id.CONFIG_PARAMS.ROOTPATH),i=wa.join(s,"node_modules","harperdb");sd.lstatSync(i).isSymbolicLink()&&sd.unlinkSync(i)}catch(s){s.code!=="ENOENT"&&al.error("Error removing symlink:",s)}await od(e?"npm install --force --ignore-scripts --no-bin-links":"npm install --force --no-bin-links",t,n)}a(Xle,"installAllRootModules");async function Zle(e){await od(`npm uninstall ${e}`,ol.get(id.CONFIG_PARAMS.ROOTPATH))}a(Zle,"uninstallRootModule");async function eue(){await qg(),await od(`npm link ${Wle}`,ol.get(id.CONFIG_PARAMS.ROOTPATH))}a(eue,"linkHarperdb");async function od(e,t=void 0,r=process.env){let n,s;try{({stdout:n,stderr:s}=await Xq(e,{cwd:t,env:r}))}catch(i){throw new Error(i.stderr.replace(`
28
28
  `,""))}return s&&!s.includes("Debugger listening")&&!s.includes("warn using --force")&&al.error("Error running NPM command:",e,s),al.trace(n,s),n?.replace(`
29
- `,"")}a(td,"runCommand");async function Lle(e){let t="install_node_modules is deprecated. Dependencies are automatically installed on deploy, and install_node_modules can lead to inconsistent behavior";al.warn(t,e);let r=Uq(e);if(r)throw Xu(r,r.message,Zu.BAD_REQUEST);let{projects:n,dry_run:s}=e,i=s===!0?wle:Lq;await Dg(),await vq(n);let o={};for(let c=0,l=n.length;c<l;c++){let u=n[c];o[u]={npm_output:null,npm_error:null};let f=Da.join(DN,u),d,h=null;try{let{stdout:_,stderr:p}=await Dq(i,{cwd:f});d=_?_.replace(`
29
+ `,"")}a(od,"runCommand");async function tue(e){let t="install_node_modules is deprecated. Dependencies are automatically installed on deploy, and install_node_modules can lead to inconsistent behavior";al.warn(t,e);let r=r$(e);if(r)throw lh(r,r.message,uh.BAD_REQUEST);let{projects:n,dry_run:s}=e,i=s===!0?jle:Zq;await qg(),await t$(n);let o={};for(let c=0,l=n.length;c<l;c++){let u=n[c];o[u]={npm_output:null,npm_error:null};let f=wa.join(VN,u),d,h=null;try{let{stdout:_,stderr:p}=await Xq(i,{cwd:f});d=_?_.replace(`
30
30
  `,""):null,h=p?p.replace(`
31
- `,""):null}catch(_){_.stderr?o[u].npm_error=Mq(_.stderr):o[u].npm_error=_.message;continue}try{o[u].npm_output=JSON.parse(d)}catch{o[u].npm_output=d}try{o[u].npm_error=JSON.parse(h)}catch{o[u].npm_error=h}}return al.info(`finished installModules with response ${o}`),o.warning=t,o}a(Lle,"installModules");function Mq(e){let t='"error": {',r=e.indexOf('"error": {'),n=e.indexOf(`}
32
- `);return r>-1&&n>-1?JSON.parse(e.substring(r+t.length-1,n+1)):e}a(Mq,"parseNPMStdErr");async function Mle(e){al.info(`starting auditModules for request: ${e}`);let t=Uq(e);if(t)throw Xu(t,t.message,Zu.BAD_REQUEST);let{projects:r}=e;await Dg(),await vq(r);let n={};for(let s=0,i=r.length;s<i;s++){let o=r[s],c=Da.join(DN,o);n[o]={npm_output:null,npm_error:null};try{let l=await td("npm audit --json",c);n[o].npm_output=JSON.parse(l)}catch(l){n[o].npm_error=Mq(l.stderr)}}return al.info(`finished auditModules with response ${n}`),n}a(Mle,"auditModules");async function Dg(){try{return await td("npm -v"),!0}catch{throw Xu(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",Zu.BAD_REQUEST,void 0,void 0,!0)}}a(Dg,"checkNPMInstalled");async function vq(e){if(!Array.isArray(e)||e.length===0)throw Xu(new Error,"projects argument must be an array with at least 1 element",Zu.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=Da.join(DN,i.toString());if(!await Ju.pathExists(o)){t.push(i);continue}let l=Da.join(o,"package.json");await Ju.pathExists(l)||r.push(i)}if(t.length>0)throw Xu(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Zu.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Xu(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Zu.BAD_REQUEST,void 0,void 0,!0)}a(vq,"checkProjectPaths");function Uq(e){let t=Cg.object({projects:Cg.array().min(1).items(Cg.string()).required(),dry_run:Cg.boolean().default(!1)});return Nle.validateBySchema(e,t)}a(Uq,"modulesValidator")});var MN=P((mPe,qq)=>{"use strict";var As=require("fs-extra"),sh=require("path"),nh=j(),Bq=ae(),{PACKAGE_ROOT:vle}=_t(),LN=(H(),D(q)),Gq=ce(),Ule=wt();qq.exports=xle;async function xle(){let e=Ble(),t=Gq.get(LN.CONFIG_PARAMS.ROOTPATH),r=sh.join(t,"package.json"),n={dependencies:{harperdb:"file:"+vle}},s=sh.join(t,"node_modules");As.ensureDirSync(s);let i,o=!0,c=!1;try{i=As.readJsonSync(r)}catch(l){if(Bq.isEmptyOrZeroLength(e))return;if(l.code!==LN.NODE_ERROR_CODES.ENOENT)throw l;o=!1}if(!Bq.isEmptyOrZeroLength(e)){for(let{name:l,package:u}of e){let f=kq(u);n.dependencies[l]=f+u}if(!o){nh.notify("Installing components"),await Fq(r,n,null),await Hq(t,e);return}for(let{name:l,package:u}of e){let f=i.dependencies[l],d=kq(u);if(f===void 0||f!==d+u){c=!0;break}if(u.startsWith("file:"))try{if(As.statSync(new URL(u+"/package.json")).mtimeMs>As.statSync(r).mtimeMs){c=!0;break}}catch(h){nh.info(`Error checking ${u}/package.json modification time`,h);break}}}for(let l in i.dependencies)n.dependencies[l]===void 0&&(nh.notify("Removing component",l),c=!0);c&&(nh.notify("Updating components."),await Fq(r,n,i),await Hq(t,e))}a(xle,"installComponents");function Hq(e,t){return Promise.all(t.map(({name:r})=>{let n=sh.join(e,"node_modules",r),s=sh.join(e,"components",r);if(As.existsSync(n)&&As.lstatSync(n).isDirectory())return As.move(n,s,{overwrite:!0}).then(()=>{As.symlink(s,n)})}))}a(Hq,"moveModuleToComponents");function Ble(){let e=Ule.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(Ble,"getComponentsConfig");function kq(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":sh.extname(e)||As.existsSync(e)?"file:":"github:"}a(kq,"getPkgPrefix");async function Fq(e,t,r){nh.trace("npm installing components package.json",t),As.writeFileSync(e,JSON.stringify(t,null," "));try{await rh().installAllRootModules(Gq.get(LN.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(n){throw r?As.writeFileSync(e,JSON.stringify(r,null," ")):As.unlinkSync(e),n}}a(Fq,"installPackages")});var Yq={};Be(Yq,{packageDirectory:()=>Hle});function Hle(e,t={skip_node_modules:!1,skip_symlinks:!1}){return new Promise((r,n)=>{let s=[];Vq.default.pack(e,{dereference:!t.skip_symlinks,ignore:t.skip_node_modules?i=>i.includes("node_modules")||i.includes((0,$q.join)("cache","webpack")):void 0}).pipe((0,Kq.createGzip)()).on("data",i=>s.push(i)).on("end",()=>{r(Buffer.concat(s))}).on("error",n)})}var $q,Vq,Kq,Wq=be(()=>{$q=require("path"),Vq=U(require("tar-fs")),Kq=require("node:zlib");a(Hle,"packageDirectory")});var xN=P(Jq=>{"use strict";var Re=require("fs-extra"),vN=require("fast-glob"),Ne=require("path"),kle=require("tar-fs"),Fle=require("gunzip-maybe"),UN=require("normalize-path"),On=Pq(),vt=j(),it=(H(),D(q)),zt=ce(),Lg=wt(),Gle=ae(),{PACKAGE_ROOT:qle}=_t(),{handleHDBError:Ut,hdb_errors:$le}=_e(),{basename:Vle}=require("path"),Kle=MN(),Qq=ce(),{Readable:Yle}=require("stream"),{isMainThread:Wle}=require("worker_threads"),{HDB_ERROR_MSGS:cl,HTTP_STATUS_CODES:xt}=$le,jq=rt(),{replicateOperation:ei}=(_s(),D(Aa)),{packageDirectory:zle}=(Wq(),D(Yq)),zq=rh(),Qle=Ne.join(qle,"application-template"),jle=zt.get(it.CONFIG_PARAMS.ROOTPATH),La=Ne.join(jle,"ssh"),bo=Ne.join(La,"known_hosts");function Jle(){vt.trace("getting custom api status");let e={};try{e={port:zt.get(it.CONFIG_PARAMS.HTTP_PORT),directory:zt.get(it.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Ut(new Error,cl.FUNCTION_STATUS,xt.INTERNAL_SERVER_ERROR,vt.ERR,t)}return e}a(Jle,"customFunctionsStatus");function Xle(){vt.trace("getting custom api endpoints");let e={},t=zt.get(it.CONFIG_PARAMS.COMPONENTSROOT);try{vN.sync(UN(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:vN.sync(UN(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:vN.sync(UN(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Ut(new Error,cl.GET_FUNCTIONS,xt.INTERNAL_SERVER_ERROR,vt.ERR,r)}return e}a(Xle,"getCustomFunctions");function Zle(e){e.project&&(e.project=Ne.parse(e.project).name),e.file&&(e.file=Ne.parse(e.file).name);let t=On.getDropCustomFunctionValidator(e);if(t)throw Ut(t,t.message,xt.BAD_REQUEST);vt.trace("getting custom api endpoint file content");let r=zt.get(it.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,o=Ne.join(r,n,s,i+".js");try{return Re.readFileSync(o,{encoding:"utf8"})}catch(c){throw Ut(new Error,cl.GET_FUNCTION,xt.INTERNAL_SERVER_ERROR,vt.ERR,c)}}a(Zle,"getCustomFunction");async function eue(e){e.project&&(e.project=Ne.parse(e.project).name),e.file&&(e.file=Ne.parse(e.file).name);let t=On.setCustomFunctionValidator(e);if(t)throw Ut(t,t.message,xt.BAD_REQUEST);vt.trace("setting custom function file content");let r=zt.get(it.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:o}=e;try{Re.outputFileSync(Ne.join(r,n,s,i+".js"),o);let c=await ei(e);return c.message=`Successfully updated custom function: ${i}.js`,c}catch(c){throw Ut(new Error,cl.SET_FUNCTION,xt.INTERNAL_SERVER_ERROR,vt.ERR,c)}}a(eue,"setCustomFunction");async function tue(e){e.project&&(e.project=Ne.parse(e.project).name),e.file&&(e.file=Ne.parse(e.file).name);let t=On.getDropCustomFunctionValidator(e);if(t)throw Ut(t,t.message,xt.BAD_REQUEST);vt.trace("dropping custom function file");let r=zt.get(it.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{Re.unlinkSync(Ne.join(r,n,s,i+".js"));let o=await ei(e);return o.message=`Successfully deleted custom function: ${i}.js`,o}catch(o){throw Ut(new Error,cl.DROP_FUNCTION,xt.INTERNAL_SERVER_ERROR,vt.ERR,o)}}a(tue,"dropCustomFunction");async function rue(e){e.project&&(e.project=Ne.parse(e.project).name);let t=On.addComponentValidator(e);if(t)throw Ut(t,t.message,xt.BAD_REQUEST);vt.trace("adding component");let r=zt.get(it.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;try{let s=Ne.join(r,n);Re.mkdirSync(s,{recursive:!0}),Re.copySync(Qle,s);let i=await ei(e);return i.message=`Successfully added project: ${n}`,i}catch(s){throw Ut(new Error,cl.ADD_FUNCTION,xt.INTERNAL_SERVER_ERROR,vt.ERR,s)}}a(rue,"addComponent");async function nue(e){e.project&&(e.project=Ne.parse(e.project).name);let t=On.dropCustomFunctionProjectValidator(e);if(t)throw Ut(t,t.message,xt.BAD_REQUEST);vt.trace("dropping custom function project");let r=zt.get(it.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=zt.get(it.CONFIG_PARAMS.APPS);if(!Gle.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 Lg.updateConfigValue(it.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=Ne.join(r,n);Re.rmSync(i,{recursive:!0});let o=await ei(e);return o.message=`Successfully deleted project: ${n}`,o}catch(i){throw Ut(new Error,cl.DROP_FUNCTION_PROJECT,xt.INTERNAL_SERVER_ERROR,vt.ERR,i)}}a(nue,"dropCustomFunctionProject");async function sue(e){e.project&&(e.project=Ne.parse(e.project).name);let t=On.packageComponentValidator(e);if(t)throw Ut(t,t.message,xt.BAD_REQUEST);let r=zt.get(it.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;vt.trace("packaging component",n);let s;try{s=await Re.realpath(Ne.join(r,n))}catch(o){if(o.code!==it.NODE_ERROR_CODES.ENOENT)throw o;try{s=await Re.realpath(Ne.join(zt.get(it.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(c){if(c.code===it.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}let i=(await zle(s,e)).toString("base64");return{project:n,payload:i}}a(sue,"packageComponent");async function iue(e){e.project?e.project=Ne.parse(e.project).name:e.package&&(e.project=oue(e.package));let t=On.deployComponentValidator(e);if(t)throw Ut(t,t.message,xt.BAD_REQUEST);let r=zt.get(it.CONFIG_PARAMS.COMPONENTSROOT),{project:n,payload:s,package:i,install_command:o}=e;if(vt.trace("deploying component",n),!s&&!i)throw new Error("'payload' or 'package' must be provided");let c;if(s){c=Ne.join(r,n),i="file:"+c,await Re.emptyDir(c);let S=Yle.from(s instanceof Buffer?s:Buffer.from(s,"base64"));await new Promise((m,A)=>{S.pipe(Fle()).pipe(kle.extract(c,{finish:m})).on("error",A)});let g=await Re.readdir(c);g.length===1&&g[0]==="package"&&(await Re.copy(Ne.join(c,"package"),c),await Re.remove(Ne.join(c,"package")));let T=Ne.join(c,"node_modules");o?await zq.runCommand(o,c):Re.existsSync(T)||await zq.installAllRootModules(!1,c)}else{await Lg.addConfig(n,{package:i}),await Kle();let S=Qq.get(it.CONFIG_PARAMS.ROOTPATH);c=Ne.join(S,"node_modules",n)}if(Wle)return;let l=new Map;l.isWorker=!0;let u=(oh(),D(ih)),f;u.setErrorReporter(S=>f=S);let d=Vle(c),h=u.component_errors.get(d);try{await u.loadComponent(c,l)}finally{u.component_errors.set(d,h)}if(f)throw f;vt.info("Installed component");let _=e.restart==="rolling";e.restart=_?!1:e.restart;let p=await ei(e);if(e.restart===!0)jq.restartWorkers("http"),p.message=`Successfully deployed: ${n}, restarting HarperDB`;else if(_){let g=await BN().executeJob({operation:"restart_service",service:"http",replicated:!0});p.restartJobId=g.job_id,p.message=`Successfully deployed: ${n}, restarting HarperDB`}else p.message=`Successfully deployed: ${n}`;return p}a(iue,"deployComponent");function oue(e){if(e.startsWith("git+ssh://"))return Ne.basename(e.split("#")[0].replace(/\.git$/,""));if(e.startsWith("http://")||e.startsWith("https://"))return Ne.basename(new URL(e.replace(/\.git$/,"")).pathname);if(e.startsWith("file://"))try{let{name:t}=JSON.parse(Re.readFileSync(Ne.join(e,"package.json"),"utf8"));return Ne.basename(t)}catch{}return Ne.basename(e)}a(oue,"getProjectNameFromPackage");async function aue(){let e=a(async(s,i)=>{try{let o=await Re.readdir(s,{withFileTypes:!0});for(let c of o){let l=c.name;if(l.startsWith(".")||l==="node_modules")continue;let u=Ne.join(s,l);if(c.isDirectory()||c.isSymbolicLink()){let f={name:l,entries:[]};i.entries.push(f),await e(u,f)}else{let f=await Re.stat(u),d={name:Ne.basename(l),mtime:f.mtime,size:f.size};i.entries.push(d)}}return i}catch(o){return vt.warn("Error loading package",o),{error:o.toString(),entries:[]}}},"walkDir"),t=await e(zt.get(it.CONFIG_PARAMS.COMPONENTSROOT),{name:zt.get(it.CONFIG_PARAMS.COMPONENTSROOT).split(Ne.sep).slice(-1).pop(),entries:[]}),n=(oh(),D(ih)).component_errors;for(let s of t.entries){let i=n.get(s.name);i?s.error=n.get(s.name):i===void 0&&(s.error="The component has not been loaded yet (may need a restart)")}return t}a(aue,"getComponents");async function cue(e){let t=On.getComponentFileValidator(e);if(t)throw Ut(t,t.message,xt.BAD_REQUEST);let n=Lg.getConfigObj()[e.project]||e.project==="harperdb"?Ne.join(Qq.get(it.CONFIG_PARAMS.ROOTPATH),"node_modules"):zt.get(it.CONFIG_PARAMS.COMPONENTSROOT),s=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await Re.stat(Ne.join(n,e.project,e.file));return{message:await Re.readFile(Ne.join(n,e.project,e.file),s),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===it.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${Ne.join(e.project,e.file)}'`):i}}a(cue,"getComponentFile");async function lue(e){let t=On.setComponentFileValidator(e);if(t)throw Ut(t,t.message,xt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=Ne.join(zt.get(it.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);e.payload!==void 0?(await Re.ensureFile(n),await Re.outputFile(n,e.payload,r)):await Re.ensureDir(n);let s=await ei(e);return s.message="Successfully set component: "+e.file,s}a(lue,"setComponentFile");async function uue(e){let t=On.dropComponentFileValidator(e);if(t)throw Ut(t,t.message,xt.BAD_REQUEST);let{project:r,file:n}=e,s=e.file?Ne.join(r,n):r,i=Ne.join(zt.get(it.CONFIG_PARAMS.COMPONENTSROOT),s),o=Ne.join(zt.get(it.CONFIG_PARAMS.ROOTPATH),"node_modules",r);await Re.pathExists(o)&&await Re.unlink(o),await Re.pathExists(i)&&await Re.remove(i);let c=Ne.join(zt.get(it.CONFIG_PARAMS.ROOTPATH),"package.json");if(await Re.pathExists(c)){let u=JSON.parse(await Re.readFile(c,"utf8"));u?.dependencies?.[r]&&delete u.dependencies[r],await Re.writeFile(c,JSON.stringify(u,null,2),"utf8")}Lg.deleteConfigFromFile([r]);let l=await ei(e);return e.restart===!0?(jq.restartWorkers("http"),l.message=`Successfully dropped: ${s}, restarting HarperDB`):l.message=`Successfully dropped: ${s}`,l}a(uue,"dropComponent");async function due(e){let t=On.addSSHKeyValidator(e);if(t)throw Ut(t,t.message,xt.BAD_REQUEST);let{name:r,key:n,host:s,hostname:i,known_hosts:o}=e;vt.trace("adding ssh key",r);let c=Ne.join(La,r+".key"),l=Ne.join(La,"config");if(await Re.pathExists(c))throw new Error("Key already exists. Use update_ssh_key or delete_ssh_key and then add_ssh_key");await Re.outputFile(c,n),await Re.chmod(c,"0600");let u=`#${r}
31
+ `,""):null}catch(_){_.stderr?o[u].npm_error=e$(_.stderr):o[u].npm_error=_.message;continue}try{o[u].npm_output=JSON.parse(d)}catch{o[u].npm_output=d}try{o[u].npm_error=JSON.parse(h)}catch{o[u].npm_error=h}}return al.info(`finished installModules with response ${o}`),o.warning=t,o}a(tue,"installModules");function e$(e){let t='"error": {',r=e.indexOf('"error": {'),n=e.indexOf(`}
32
+ `);return r>-1&&n>-1?JSON.parse(e.substring(r+t.length-1,n+1)):e}a(e$,"parseNPMStdErr");async function rue(e){al.info(`starting auditModules for request: ${e}`);let t=r$(e);if(t)throw lh(t,t.message,uh.BAD_REQUEST);let{projects:r}=e;await qg(),await t$(r);let n={};for(let s=0,i=r.length;s<i;s++){let o=r[s],c=wa.join(VN,o);n[o]={npm_output:null,npm_error:null};try{let l=await od("npm audit --json",c);n[o].npm_output=JSON.parse(l)}catch(l){n[o].npm_error=e$(l.stderr)}}return al.info(`finished auditModules with response ${n}`),n}a(rue,"auditModules");async function qg(){return await od("npm -v"),!0}a(qg,"checkNPMInstalled");async function t$(e){if(!Array.isArray(e)||e.length===0)throw lh(new Error,"projects argument must be an array with at least 1 element",uh.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=wa.join(VN,i.toString());if(!await sd.pathExists(o)){t.push(i);continue}let l=wa.join(o,"package.json");await sd.pathExists(l)||r.push(i)}if(t.length>0)throw lh(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,uh.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw lh(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,uh.BAD_REQUEST,void 0,void 0,!0)}a(t$,"checkProjectPaths");function r$(e){let t=Fg.object({projects:Fg.array().min(1).items(Fg.string()).required(),dry_run:Fg.boolean().default(!1)});return Qle.validateBySchema(e,t)}a(r$,"modulesValidator")});var YN=I((NPe,l$)=>{"use strict";var Ss=require("fs-extra"),_h=require("path"),fh=j(),s$=oe(),{PACKAGE_ROOT:nue}=Et(),KN=(H(),D(q)),c$=ce(),sue=It();l$.exports=iue;async function iue(){let e=oue(),t=c$.get(KN.CONFIG_PARAMS.ROOTPATH),r=_h.join(t,"package.json"),n={dependencies:{harperdb:"file:"+nue}},s=_h.join(t,"node_modules");Ss.ensureDirSync(s);let i,o=!0,c=!1;try{i=Ss.readJsonSync(r)}catch(l){if(s$.isEmptyOrZeroLength(e))return;if(l.code!==KN.NODE_ERROR_CODES.ENOENT)throw l;o=!1}if(!s$.isEmptyOrZeroLength(e)){for(let{name:l,package:u}of e){let f=o$(u);n.dependencies[l]=f+u}if(!o){fh.notify("Installing components"),await a$(r,n,null),await i$(t,e);return}for(let{name:l,package:u}of e){let f=i.dependencies[l],d=o$(u);if(f===void 0||f!==d+u){c=!0;break}if(u.startsWith("file:"))try{if(Ss.statSync(new URL(u+"/package.json")).mtimeMs>Ss.statSync(r).mtimeMs){c=!0;break}}catch(h){fh.info(`Error checking ${u}/package.json modification time`,h);break}}}for(let l in i.dependencies)n.dependencies[l]===void 0&&(fh.notify("Removing component",l),c=!0);c&&(fh.notify("Updating components."),await a$(r,n,i),await i$(t,e))}a(iue,"installComponents");function i$(e,t){return Promise.all(t.map(({name:r})=>{let n=_h.join(e,"node_modules",r),s=_h.join(e,"components",r);if(Ss.existsSync(n)&&Ss.lstatSync(n).isDirectory())return Ss.move(n,s,{overwrite:!0}).then(()=>{Ss.symlink(s,n)})}))}a(i$,"moveModuleToComponents");function oue(){let e=sue.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(oue,"getComponentsConfig");function o$(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":_h.extname(e)||Ss.existsSync(e)?"file:":"github:"}a(o$,"getPkgPrefix");async function a$(e,t,r){fh.trace("npm installing components package.json",t),Ss.writeFileSync(e,JSON.stringify(t,null," "));try{await dh().installAllRootModules(c$.get(KN.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(n){throw r?Ss.writeFileSync(e,JSON.stringify(r,null," ")):Ss.unlinkSync(e),n}}a(a$,"installPackages")});var _$={};ve(_$,{packageDirectory:()=>aue});function aue(e,t={skip_node_modules:!1,skip_symlinks:!1}){return new Promise((r,n)=>{let s=[];d$.default.pack(e,{dereference:!t.skip_symlinks,ignore:t.skip_node_modules?i=>i.includes("node_modules")||i.includes((0,u$.join)("cache","webpack")):void 0}).pipe((0,f$.createGzip)()).on("data",i=>s.push(i)).on("end",()=>{r(Buffer.concat(s))}).on("error",n)})}var u$,d$,f$,h$=be(()=>{u$=require("path"),d$=M(require("tar-fs")),f$=require("node:zlib");a(aue,"packageDirectory")});var QN=I(g$=>{"use strict";var Oe=require("fs-extra"),WN=require("fast-glob"),we=require("path"),cue=require("tar-fs"),lue=require("gunzip-maybe"),zN=require("normalize-path"),Rn=Jq(),Ut=j(),ot=(H(),D(q)),zt=ce(),$g=It(),uue=oe(),{PACKAGE_ROOT:due}=Et(),{handleHDBError:xt,hdb_errors:fue}=he(),{basename:_ue}=require("path"),hue=YN(),m$=ce(),{Readable:pue}=require("stream"),{isMainThread:mue}=require("worker_threads"),{HDB_ERROR_MSGS:cl,HTTP_STATUS_CODES:Bt}=fue,E$=rt(),{replicateOperation:Xs}=(fs(),D(ma)),{packageDirectory:Eue}=(h$(),D(_$)),p$=dh(),gue=we.join(due,"application-template"),Sue=zt.get(ot.CONFIG_PARAMS.ROOTPATH),Ia=we.join(Sue,"ssh"),Ao=we.join(Ia,"known_hosts");function Tue(){Ut.trace("getting custom api status");let e={};try{e={port:zt.get(ot.CONFIG_PARAMS.HTTP_PORT),directory:zt.get(ot.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw xt(new Error,cl.FUNCTION_STATUS,Bt.INTERNAL_SERVER_ERROR,Ut.ERR,t)}return e}a(Tue,"customFunctionsStatus");function Aue(){Ut.trace("getting custom api endpoints");let e={},t=zt.get(ot.CONFIG_PARAMS.COMPONENTSROOT);try{WN.sync(zN(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:WN.sync(zN(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:WN.sync(zN(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw xt(new Error,cl.GET_FUNCTIONS,Bt.INTERNAL_SERVER_ERROR,Ut.ERR,r)}return e}a(Aue,"getCustomFunctions");function Rue(e){e.project&&(e.project=we.parse(e.project).name),e.file&&(e.file=we.parse(e.file).name);let t=Rn.getDropCustomFunctionValidator(e);if(t)throw xt(t,t.message,Bt.BAD_REQUEST);Ut.trace("getting custom api endpoint file content");let r=zt.get(ot.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,o=we.join(r,n,s,i+".js");try{return Oe.readFileSync(o,{encoding:"utf8"})}catch(c){throw xt(new Error,cl.GET_FUNCTION,Bt.INTERNAL_SERVER_ERROR,Ut.ERR,c)}}a(Rue,"getCustomFunction");async function yue(e){e.project&&(e.project=we.parse(e.project).name),e.file&&(e.file=we.parse(e.file).name);let t=Rn.setCustomFunctionValidator(e);if(t)throw xt(t,t.message,Bt.BAD_REQUEST);Ut.trace("setting custom function file content");let r=zt.get(ot.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:o}=e;try{Oe.outputFileSync(we.join(r,n,s,i+".js"),o);let c=await Xs(e);return c.message=`Successfully updated custom function: ${i}.js`,c}catch(c){throw xt(new Error,cl.SET_FUNCTION,Bt.INTERNAL_SERVER_ERROR,Ut.ERR,c)}}a(yue,"setCustomFunction");async function bue(e){e.project&&(e.project=we.parse(e.project).name),e.file&&(e.file=we.parse(e.file).name);let t=Rn.getDropCustomFunctionValidator(e);if(t)throw xt(t,t.message,Bt.BAD_REQUEST);Ut.trace("dropping custom function file");let r=zt.get(ot.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{Oe.unlinkSync(we.join(r,n,s,i+".js"));let o=await Xs(e);return o.message=`Successfully deleted custom function: ${i}.js`,o}catch(o){throw xt(new Error,cl.DROP_FUNCTION,Bt.INTERNAL_SERVER_ERROR,Ut.ERR,o)}}a(bue,"dropCustomFunction");async function Oue(e){e.project&&(e.project=we.parse(e.project).name);let t=Rn.addComponentValidator(e);if(t)throw xt(t,t.message,Bt.BAD_REQUEST);Ut.trace("adding component");let r=zt.get(ot.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;try{let s=we.join(r,n);Oe.mkdirSync(s,{recursive:!0}),Oe.copySync(gue,s);let i=await Xs(e);return i.message=`Successfully added project: ${n}`,i}catch(s){throw xt(new Error,cl.ADD_FUNCTION,Bt.INTERNAL_SERVER_ERROR,Ut.ERR,s)}}a(Oue,"addComponent");async function Nue(e){e.project&&(e.project=we.parse(e.project).name);let t=Rn.dropCustomFunctionProjectValidator(e);if(t)throw xt(t,t.message,Bt.BAD_REQUEST);Ut.trace("dropping custom function project");let r=zt.get(ot.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=zt.get(ot.CONFIG_PARAMS.APPS);if(!uue.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 $g.updateConfigValue(ot.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=we.join(r,n);Oe.rmSync(i,{recursive:!0});let o=await Xs(e);return o.message=`Successfully deleted project: ${n}`,o}catch(i){throw xt(new Error,cl.DROP_FUNCTION_PROJECT,Bt.INTERNAL_SERVER_ERROR,Ut.ERR,i)}}a(Nue,"dropCustomFunctionProject");async function wue(e){e.project&&(e.project=we.parse(e.project).name);let t=Rn.packageComponentValidator(e);if(t)throw xt(t,t.message,Bt.BAD_REQUEST);let r=zt.get(ot.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;Ut.trace("packaging component",n);let s;try{s=await Oe.realpath(we.join(r,n))}catch(o){if(o.code!==ot.NODE_ERROR_CODES.ENOENT)throw o;try{s=await Oe.realpath(we.join(zt.get(ot.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(c){if(c.code===ot.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}let i=(await Eue(s,e)).toString("base64");return{project:n,payload:i}}a(wue,"packageComponent");async function Iue(e){e.project?e.project=we.parse(e.project).name:e.package&&(e.project=Cue(e.package));let t=Rn.deployComponentValidator(e);if(t)throw xt(t,t.message,Bt.BAD_REQUEST);let r=zt.get(ot.CONFIG_PARAMS.COMPONENTSROOT),{project:n,payload:s,package:i,install_command:o}=e;if(Ut.trace("deploying component",n),!s&&!i)throw new Error("'payload' or 'package' must be provided");let c;if(s){c=we.join(r,n),i="file:"+c,await Oe.emptyDir(c);let S=pue.from(s instanceof Buffer?s:Buffer.from(s,"base64"));await new Promise((E,A)=>{S.pipe(lue()).pipe(cue.extract(c,{finish:E})).on("error",A)});let g=await Oe.readdir(c);g.length===1&&g[0]==="package"&&(await Oe.copy(we.join(c,"package"),c),await Oe.remove(we.join(c,"package")));let R=we.join(c,"node_modules");o?await p$.runCommand(o,c):Oe.existsSync(R)||await p$.installAllRootModules(!1,c)}else{await $g.addConfig(n,{package:i}),await hue();let S=m$.get(ot.CONFIG_PARAMS.ROOTPATH);c=we.join(S,"node_modules",n)}if(mue)return;let l=new Map;l.isWorker=!0;let u=(ph(),D(hh)),f;u.setErrorReporter(S=>f=S);let d=_ue(c),h=u.component_errors.get(d);try{await u.loadComponent(c,l)}finally{u.component_errors.set(d,h)}if(f)throw f;Ut.info("Installed component");let _=e.restart==="rolling";e.restart=_?!1:e.restart;let p=await Xs(e);if(e.restart===!0)E$.restartWorkers("http"),p.message=`Successfully deployed: ${n}, restarting HarperDB`;else if(_){let g=await jN().executeJob({operation:"restart_service",service:"http",replicated:!0});p.restartJobId=g.job_id,p.message=`Successfully deployed: ${n}, restarting HarperDB`}else p.message=`Successfully deployed: ${n}`;return p}a(Iue,"deployComponent");function Cue(e){if(e.startsWith("git+ssh://"))return we.basename(e.split("#")[0].replace(/\.git$/,""));if(e.startsWith("http://")||e.startsWith("https://"))return we.basename(new URL(e.replace(/\.git$/,"")).pathname);if(e.startsWith("file://"))try{let{name:t}=JSON.parse(Oe.readFileSync(we.join(e,"package.json"),"utf8"));return we.basename(t)}catch{}return we.basename(e)}a(Cue,"getProjectNameFromPackage");async function Pue(){let e=a(async(s,i)=>{try{let o=await Oe.readdir(s,{withFileTypes:!0});for(let c of o){let l=c.name;if(l.startsWith(".")||l==="node_modules")continue;let u=we.join(s,l);if(c.isDirectory()||c.isSymbolicLink()){let f={name:l,entries:[]};i.entries.push(f),await e(u,f)}else{let f=await Oe.stat(u),d={name:we.basename(l),mtime:f.mtime,size:f.size};i.entries.push(d)}}return i}catch(o){return Ut.warn("Error loading package",o),{error:o.toString(),entries:[]}}},"walkDir"),t=await e(zt.get(ot.CONFIG_PARAMS.COMPONENTSROOT),{name:zt.get(ot.CONFIG_PARAMS.COMPONENTSROOT).split(we.sep).slice(-1).pop(),entries:[]}),n=(ph(),D(hh)).component_errors;for(let s of t.entries){let i=n.get(s.name);i?s.error=n.get(s.name):i===void 0&&(s.error="The component has not been loaded yet (may need a restart)")}return t}a(Pue,"getComponents");async function Due(e){let t=Rn.getComponentFileValidator(e);if(t)throw xt(t,t.message,Bt.BAD_REQUEST);let n=$g.getConfigObj()[e.project]||e.project==="harperdb"?we.join(m$.get(ot.CONFIG_PARAMS.ROOTPATH),"node_modules"):zt.get(ot.CONFIG_PARAMS.COMPONENTSROOT),s=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await Oe.stat(we.join(n,e.project,e.file));return{message:await Oe.readFile(we.join(n,e.project,e.file),s),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===ot.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${we.join(e.project,e.file)}'`):i}}a(Due,"getComponentFile");async function Lue(e){let t=Rn.setComponentFileValidator(e);if(t)throw xt(t,t.message,Bt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=we.join(zt.get(ot.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);e.payload!==void 0?(await Oe.ensureFile(n),await Oe.outputFile(n,e.payload,r)):await Oe.ensureDir(n);let s=await Xs(e);return s.message="Successfully set component: "+e.file,s}a(Lue,"setComponentFile");async function Mue(e){let t=Rn.dropComponentFileValidator(e);if(t)throw xt(t,t.message,Bt.BAD_REQUEST);let{project:r,file:n}=e,s=e.file?we.join(r,n):r,i=we.join(zt.get(ot.CONFIG_PARAMS.COMPONENTSROOT),s),o=we.join(zt.get(ot.CONFIG_PARAMS.ROOTPATH),"node_modules",r);await Oe.pathExists(o)&&await Oe.unlink(o),await Oe.pathExists(i)&&await Oe.remove(i);let c=we.join(zt.get(ot.CONFIG_PARAMS.ROOTPATH),"package.json");if(await Oe.pathExists(c)){let u=JSON.parse(await Oe.readFile(c,"utf8"));u?.dependencies?.[r]&&delete u.dependencies[r],await Oe.writeFile(c,JSON.stringify(u,null,2),"utf8")}$g.deleteConfigFromFile([r]);let l=await Xs(e);return e.restart===!0?(E$.restartWorkers("http"),l.message=`Successfully dropped: ${s}, restarting HarperDB`):l.message=`Successfully dropped: ${s}`,l}a(Mue,"dropComponent");async function vue(e){let t=Rn.addSSHKeyValidator(e);if(t)throw xt(t,t.message,Bt.BAD_REQUEST);let{name:r,key:n,host:s,hostname:i,known_hosts:o}=e;Ut.trace("adding ssh key",r);let c=we.join(Ia,r+".key"),l=we.join(Ia,"config");if(await Oe.pathExists(c))throw new Error("Key already exists. Use update_ssh_key or delete_ssh_key and then add_ssh_key");await Oe.outputFile(c,n),await Oe.chmod(c,"0600");let u=`#${r}
33
33
  Host ${s}
34
34
  HostName ${i}
35
35
  User git
36
36
  IdentityFile ${c}
37
- IdentitiesOnly yes`;await Re.pathExists(l)?await Re.appendFile(l,`
38
- `+u):await Re.outputFile(l,u);let f="";if(await Re.pathExists(bo)||(await Re.writeFile(bo,""),await Re.chmod(bo,"0600")),i=="github.com"&&!(await Re.readFile(bo,"utf8")).includes("github.com"))try{let S=(await(await fetch("https://api.github.com/meta")).json()).ssh_keys;for(let g of S)Re.appendFile(bo,"github.com "+g+`
39
- `)}catch{f=". Unable to get known hosts from github.com. Set your known hosts manually using set_ssh_known_hosts."}o&&await Re.appendFile(bo,o);let d=await ei(e);return d.message=`Added ssh key: ${r}${f}`,d}a(due,"addSSHKey");async function fue(e){let t=On.updateSSHKeyValidator(e);if(t)throw Ut(t,t.message,xt.BAD_REQUEST);let{name:r,key:n}=e;vt.trace("updating ssh key",r);let s=Ne.join(La,r+".key");if(!await Re.pathExists(s))throw new Error("Key does not exist. Use add_ssh_key");await Re.outputFile(s,n);let i=await ei(e);return i.message=`Updated ssh key: ${r}`,i}a(fue,"updateSSHKey");async function _ue(e){let t=On.deleteSSHKeyValidator(e);if(t)throw Ut(t,t.message,xt.BAD_REQUEST);let{name:r}=e;vt.trace("deleting ssh key",r);let n=Ne.join(La,r+".key"),s=Ne.join(La,"config");if(!await Re.pathExists(n))throw new Error("Key does not exist");let i=await Re.readFile(s,"utf8"),o=new RegExp(`#${r}[\\S\\s]*?IdentitiesOnly yes`,"g");i=i.replace(o,""),await Re.outputFile(s,i),Re.removeSync(n);let c=await ei(e);return c.message=`Deleted ssh key: ${r}`,c}a(_ue,"deleteSSHKey");async function hue(e){let t=[];return await Re.pathExists(La)&&(await Re.readdir(La)).forEach(r=>{r!="known_hosts"&&r!="config"&&t.push({name:r.split(".")[0]})}),t}a(hue,"listSSHKeys");async function pue(e){let t=On.setSSHKnownHostsValidator(e);if(t)throw Ut(t,t.message,xt.BAD_REQUEST);let{known_hosts:r}=e;await Re.outputFile(bo,r);let n=await ei(e);return n.message="Known hosts successfully set",n}a(pue,"setSSHKnownHosts");async function Eue(e){return await Re.pathExists(bo)?{known_hosts:await Re.readFile(bo,"utf8")}:{known_hosts:null}}a(Eue,"getSSHKnownHosts");Object.assign(Jq,{customFunctionsStatus:Jle,getCustomFunctions:Xle,getCustomFunction:Zle,setCustomFunction:eue,dropCustomFunction:tue,addComponent:rue,dropCustomFunctionProject:nue,packageComponent:sue,deployComponent:iue,getComponents:aue,getComponentFile:cue,setComponentFile:lue,dropComponent:uue,addSSHKey:due,updateSSHKey:fue,deleteSSHKey:_ue,listSSHKeys:hue,setSSHKnownHosts:pue,getSSHKnownHosts:Eue})});var HN=P((RPe,Zq)=>{"use strict";var Rs=require("joi"),Xq=pt();Zq.exports={readTransactionLogValidator:mue,deleteTransactionLogsBeforeValidator:gue};function mue(e){let t=Rs.object({schema:Rs.string(),database:Rs.string(),table:Rs.string().required(),from:Rs.date().timestamp(),to:Rs.date().timestamp(),limit:Rs.number().min(1)});return Xq.validateBySchema(e,t)}a(mue,"readTransactionLogValidator");function gue(e){let t=Rs.object({schema:Rs.string(),database:Rs.string(),table:Rs.string().required(),timestamp:Rs.date().timestamp().required()});return Xq.validateBySchema(e,t)}a(gue,"deleteTransactionLogsBeforeValidator")});var Ug=P((bPe,i$)=>{"use strict";var kN=(H(),D(q)),ah=Er(),e$=ae(),t$=ce(),r$=io(),n$=j(),{handleHDBError:Mg,hdb_errors:Sue}=_e(),{HTTP_STATUS_CODES:vg}=Sue,{readTransactionLogValidator:Tue,deleteTransactionLogsBeforeValidator:Aue}=HN(),s$=kn(),Rue="Logs successfully deleted from transaction log.",yue="All logs successfully deleted from transaction log.";i$.exports={readTransactionLog:bue,deleteTransactionLogsBefore:Nue};async function bue(e){let t=Tue(e);if(t)throw Mg(t,t.message,vg.BAD_REQUEST,void 0,void 0,!0);e.database=e.database??e.schema??"data";let r=e$.checkSchemaTableExist(e.database,e.table);if(r)throw Mg(new Error,r,vg.NOT_FOUND,void 0,void 0,!0);return t$.get(kN.CONFIG_PARAMS.CLUSTERING_ENABLED)?await Oue(e):(n$.info("Reading HarperDB logs used by Plexus"),(e.from||e.to)&&(e.search_type="timestamp",e.search_values=[e.from??0],e.to&&(e.search_values[1]=e.to)),s$.readAuditLog(e))}a(bue,"readTransactionLog");async function*Oue(e){let t=r$.createNatsTableStreamName(e.database,e.table),r=await ah.viewStreamIterator(t,parseInt(e.from),e.limit);for await(let n of r){let s=Math.floor(n?.nats_timestamp/1e6);if(e.to&&s>e.to)break;let i={operation:n?.entry?.operation,user:n?.entry?.__origin?.user,timestamp:s,records:n?.entry?.records,attributes:n?.entry?.attributes};n?.entry?.operation===kN.OPERATIONS_ENUM.DELETE&&(i.hash_values=n?.entry?.hash_values),yield i}}a(Oue,"readTransactionLogNats");async function Nue(e){let t=Aue(e);if(t)throw Mg(t,t.message,vg.BAD_REQUEST,void 0,void 0,!0);if(e.database=e.database??e.schema??"data",!t$.get(kN.CONFIG_PARAMS.CLUSTERING_ENABLED))return n$.info("Delete transaction logs called for Plexus"),s$.deleteAuditLogsBefore(e);let{database:r,table:n,timestamp:s}=e,i=e$.checkSchemaTableExist(r,n);if(i)throw Mg(new Error,i,vg.NOT_FOUND,void 0,void 0,!0);let o=r$.createNatsTableStreamName(r,n),{jsm:c}=await ah.getNATSReferences(),l=await ah.getStreamInfo(o),u=new Date(l.state.first_ts).getTime();if(s<=u)return`No transactions exist before: ${s}`;let f=Rue,d,h=new Date(l.state.last_ts).getTime();return s>h?(d=l.state.last_seq+1,f=yue):d=(await ah.viewStream(o,parseInt(s),1))[0].nats_sequence,await ah.purgeTableStream(r,n,{seq:d}),f}a(Nue,"deleteTransactionLogsBefore")});var a$=P((NPe,o$)=>{"use strict";var FN=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}};o$.exports=FN});var l$=P((IPe,c$)=>{"use strict";var GN=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};c$.exports=GN});var $N=P((PPe,d$)=>{"use strict";var u$=a$(),wue=l$(),{HDB_ERROR_MSGS:Iue}=Ln(),qN=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=Iue.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 u$(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new wue(c,s[c]);i.push(l)});let o=`${r}_${n}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new u$(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}};d$.exports=qN});var kg=P((vPe,I$)=>{"use strict";var VN=hn(),xg=Kr(),ys=Gm(),uh=oo(),KN=Tc(),Cue=uO(),Pue=yk(),dh=qn(),Bg=e_(),Sr=j(),Due=pO(),Lue=Zm(),Mue=FO(),vue=tg(),Uue=$O(),xue=VO(),Bue=WO(),Hue=QO(),YN=og(),Oo=ae(),kue=rG(),WN=cN(),h$=Qu(),tn=(H(),D(q)),p$=Eq(),Fue=Uu(),E$=fu(),m$=(wg(),D(eh)),g$=wt(),or=xN(),Gue=require("alasql"),S$=Ug(),T$=rh(),rd=Js(),A$=(jc(),D(Qc)),R$=$N(),{handleHDBError:Nn,hdb_errors:y$}=_e(),{addNodeBack:LPe,removeNodeBack:MPe}=(jc(),D(Qc)),{HDB_ERROR_MSGS:Ur,HTTP_STATUS_CODES:ch}=y$,J=new Map,b$="delete",Ma="insert",No="read",ll="update",lh="describe",f$=uh.describeSchema.name,_$=uh.describeTable.name,O$={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},que={insert:!0,delete:!0,deleteRecord:!0,update:!0,updateData:!0,upsert:!0,upsertData:!0},$ue="catchup",Vue="handleGetJob",Kue="handleGetJobsByStartDate",Hg={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},Yue=[ys.createTable.name,ys.createAttribute.name,ys.dropTable.name,ys.dropAttribute.name],N$={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},te=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};J.set(VN.insert.name,new te(!1,[Ma]));J.set(VN.update.name,new te(!1,[ll]));J.set(VN.upsert.name,new te(!1,[Ma,ll]));J.set(xg.searchByConditions.name,new te(!1,[No]));J.set(xg.searchByHash.name,new te(!1,[No]));J.set(xg.searchByValue.name,new te(!1,[No]));J.set(xg.search.name,new te(!1,[No]));J.set(ys.createSchema.name,new te(!0,[]));J.set(ys.createTable.name,new te(!0,[]));J.set(ys.createAttribute.name,new te(!1,[Ma]));J.set(ys.dropSchema.name,new te(!0,[]));J.set(ys.dropTable.name,new te(!0,[]));J.set(ys.dropAttribute.name,new te(!0,[]));J.set(uh.describeSchema.name,new te(!1,[No]));J.set(uh.describeTable.name,new te(!1,[No]));J.set(KN.deleteRecord.name,new te(!1,[b$]));J.set(dh.addUser.name,new te(!0,[]));J.set(dh.alterUser.name,new te(!0,[]));J.set(dh.dropUser.name,new te(!0,[]));J.set(dh.listUsersExternal.name,new te(!0,[]));J.set(Bg.listRoles.name,new te(!0,[]));J.set(Bg.addRole.name,new te(!0,[]));J.set(Bg.alterRole.name,new te(!0,[]));J.set(Bg.dropRole.name,new te(!0,[]));J.set(Due.name,new te(!0,[]));J.set(Lue.name,new te(!0,[]));J.set(Mue.name,new te(!0,[]));J.set(vue.name,new te(!0,[]));J.set(Uue.name,new te(!0,[]));J.set(xue.name,new te(!0,[]));J.set(YN.setRoutes.name,new te(!0,[]));J.set(YN.getRoutes.name,new te(!0,[]));J.set(YN.deleteRoutes.name,new te(!0,[]));J.set(g$.setConfiguration.name,new te(!0,[]));J.set(Bue.clusterStatus.name,new te(!0,[]));J.set(Hue.name,new te(!0,[]));J.set(WN.getFingerprint.name,new te(!0,[]));J.set(WN.setLicense.name,new te(!0,[]));J.set(KN.deleteFilesBefore.name,new te(!0,[]));J.set(KN.deleteAuditLogsBefore.name,new te(!0,[]));J.set(h$.restart.name,new te(!0,[]));J.set(h$.restartService.name,new te(!0,[]));J.set(Cue.name,new te(!0,[]));J.set(Pue.name,new te(!0,[No]));J.set(Fue.systemInformation.name,new te(!0,[]));J.set(g$.getConfiguration.name,new te(!0,[]));J.set(S$.readTransactionLog.name,new te(!0,[]));J.set(S$.deleteTransactionLogsBefore.name,new te(!0,[]));J.set(T$.installModules.name,new te(!0,[]));J.set(T$.auditModules.name,new te(!0,[]));J.set(rd.createCsr.name,new te(!0,[]));J.set(rd.signCertificate.name,new te(!0,[]));J.set(rd.listCertificates.name,new te(!0,[]));J.set(rd.addCertificate.name,new te(!0,[]));J.set(rd.removeCertificate.name,new te(!0,[]));J.set(rd.getKey.name,new te(!0,[]));J.set(A$.addNodeBack.name,new te(!0,[]));J.set(A$.removeNodeBack.name,new te(!0,[]));J.set(E$.createTokens.name,new te(!1,[]));J.set(E$.refreshOperationToken.name,new te(!1,[]));J.set(m$.login.name,new te(!1,[]));J.set(m$.logout.name,new te(!1,[]));J.set(or.customFunctionsStatus.name,new te(!0,[]));J.set(or.getCustomFunctions.name,new te(!0,[]));J.set(or.getComponents.name,new te(!0,[]));J.set(or.getComponentFile.name,new te(!0,[]));J.set(or.setComponentFile.name,new te(!0,[]));J.set(or.dropComponent.name,new te(!0,[]));J.set(or.getCustomFunction.name,new te(!0,[]));J.set(or.setCustomFunction.name,new te(!0,[]));J.set(or.dropCustomFunction.name,new te(!0,[]));J.set(or.addComponent.name,new te(!0,[]));J.set(or.dropCustomFunctionProject.name,new te(!0,[]));J.set(or.packageComponent.name,new te(!0,[]));J.set(or.deployComponent.name,new te(!0,[]));J.set(or.addSSHKey.name,new te(!0,[]));J.set(or.updateSSHKey.name,new te(!0,[]));J.set(or.deleteSSHKey.name,new te(!0,[]));J.set(or.listSSHKeys.name,new te(!0,[]));J.set(or.setSSHKnownHosts.name,new te(!0,[]));J.set(or.getSSHKnownHosts.name,new te(!0,[]));J.set(WN.getRegistrationInfo.name,new te(!1,[]));J.set(dh.userInfo.name,new te(!1,[]));J.set(uh.describeAll.name,new te(!1,[]));J.set(Vue,new te(!1,[]));J.set(Kue,new te(!0,[]));J.set($ue,new te(!0,[]));J.set(Hg.CSV_DATA_LOAD,new te(!1,[Ma,ll]));J.set(Hg.CSV_URL_LOAD,new te(!1,[Ma,ll]));J.set(Hg.CSV_FILE_LOAD,new te(!1,[Ma,ll]));J.set(Hg.IMPORT_FROM_S3,new te(!1,[Ma,ll]));J.set(N$.EXPORT_TO_S3,new te(!0,[]));J.set(N$.EXPORT_LOCAL,new te(!0,[]));J.set(tn.VALID_SQL_OPS_ENUM.DELETE,new te(!1,[b$]));J.set(tn.VALID_SQL_OPS_ENUM.SELECT,new te(!1,[No]));J.set(tn.VALID_SQL_OPS_ENUM.INSERT,new te(!1,[Ma]));J.set(tn.VALID_SQL_OPS_ENUM.UPDATE,new te(!1,[ll]));I$.exports={verifyPerms:zue,verifyPermsAst:Wue,verifyBulkLoadAttributePerms:jue};function Wue(e,t,r){if(Oo.isEmptyOrZeroLength(e))throw Sr.info("verify_perms_ast has an empty user parameter"),Nn(new Error);if(Oo.isEmptyOrZeroLength(t))throw Sr.info("verify_perms_ast has an empty user parameter"),Nn(new Error);if(Oo.isEmptyOrZeroLength(r))throw Sr.info("verify_perms_ast has a null operation parameter"),Nn(new Error);try{let n=new R$,s=new kue(e),i=s.getSchemas(),o=new Map;if((!i||i.length===0)&&s.affected_attributes&&s.affected_attributes.size>0)throw Sr.info("No schemas defined in verifyPermsAst(), will not continue."),Nn(new Error);let c=!!t.role.permission.super_user,l=i.includes("system");if(l&&O$[r])throw Nn(new Error,Ur.DROP_SYSTEM,ch.FORBIDDEN);if(c&&!l)return null;let u=p$.getRolePermissions(t.role);t.role.permission=u,!c&&e instanceof Gue.yy.Select&&(e=s.updateAttributeWildcardsForRolePerms(u));for(let d=0;d<i.length;d++){let h=s.getTablesBySchemaName(i[d]);h&&o.set(i[d],h)}let f=w$(t,r,o,n);return f||(o.forEach((d,h)=>{for(let _=0;_<d.length;_++){let p=s.getAttributesBySchemaTableName(h,d[_]),S=QN(t.role.permission,h,d[_]);zN(p,S,r,d[_],h,n)}}),n.getPermsResponse())}catch(n){throw Nn(n)}}a(Wue,"verifyPermsAst");function zue(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Sr.info("null required parameter in verifyPerms"),Nn(new Error,Ur.DEFAULT_INVALID_REQUEST,ch.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 R$;if(Oo.isEmptyOrZeroLength(e.hdb_user?.role)||Oo.isEmptyOrZeroLength(e.hdb_user?.role?.permission))return Sr.info(`User ${e.hdb_user?.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(Ur.USER_HAS_NO_PERMS(e.hdb_user?.username));let l=!!e.hdb_user?.role?.permission?.super_user,u=e.hdb_user?.role?.permission?.structure_user,f=o.has(tn.SYSTEM_SCHEMA_NAME)||s===tn.SYSTEM_SCHEMA_NAME;if(l&&f&&que[e.operation]&&(i===tn.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME||i===tn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||i===tn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME))return null;if(f&&O$[r])throw Nn(new Error,Ur.DROP_SYSTEM,ch.FORBIDDEN);if(l&&!f||u===!0&&(r===ys.createSchema.name||r===ys.dropSchema.name))return null;if(Yue.indexOf(r)>=0&&(u===!0||Array.isArray(u)))return u===!0||u.indexOf(s)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${s}'`);let d=p$.getRolePermissions(e.hdb_user?.role);if(e.hdb_user?.role&&(e.hdb_user.role.permission=d),(r===f$||r===_$)&&!d.super_user){if(s===tn.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Ur.SCHEMA_PERM_ERROR(s));if(r===f$&&(!d[s]||!d[s][lh]))return c.handleInvalidItem(Ur.SCHEMA_NOT_FOUND(s));if(r===_$&&(!d[s]||!d[s].tables[i]||!d[s].tables[i][lh]))return c.handleInvalidItem(Ur.TABLE_NOT_FOUND(s,i))}let h=w$(e.hdb_user,r,o,c,n);if(h)return h;if(J.get(r)&&J.get(r).perms.length===0)return null;if(!l&&e.get_attributes&&tn.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let S=[],g=d[s].tables[i];g[tn.PERMS_CRUD_ENUM.READ]&&(g.attribute_permissions.length>0?g.attribute_permissions.filter(m=>m[tn.PERMS_CRUD_ENUM.READ]).forEach(m=>{S.push(m.attribute_name)}):S=global.hdb_schema[s][i].attributes.map(T=>T.attribute),e.get_attributes=S)}let _=Que(e),p=QN(e.hdb_user?.role?.permission,s,i);return zN(_,p,r,i,s,c,n),c.getPermsResponse()}a(zue,"verifyPerms");function w$(e,t,r,n,s){if(Oo.arrayHasEmptyValues([e,t,r]))throw Sr.info("hasPermissions has an invalid parameter"),Nn(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||J.get(t).requires_su))return null;if(!J.get(t))throw Sr.info(`operation ${t} not found.`),Nn(new Error,Ur.OP_NOT_FOUND(t),ch.BAD_REQUEST);if(J.get(t)&&J.get(t).requires_su)return Sr.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(Ur.OP_IS_SU_ONLY(t));let c=r.keys();for(let l of c){try{if(l&&!o[l]||o[l][lh]===!1){n.addInvalidItem(Ur.SCHEMA_NOT_FOUND(l));continue}}catch{n.addInvalidItem(Ur.SCHEMA_NOT_FOUND(l));continue}let u=r.get(l);for(let f of u){let d=o[l].tables[f];if(!d||d[lh]===!1)n.addInvalidItem(Ur.TABLE_NOT_FOUND(l,f));else try{let h=[],_=J.get(t).perms;!Oo.isEmpty(s)&&_.includes(s)&&(_=[s]);for(let p=0;p<_.length;p++){let S=_[p],g=d[S];(g==null||g===!1)&&(Sr.info(`Required ${S} permission not found for ${t} ${s?`${s} `:""}operation in role ${e.role.id}`),h.push(S))}h.length>0&&n.addUnauthorizedTable(l,f,h)}catch(h){let _=Ur.UNKNOWN_OP_AUTH_ERROR(t,l,f);throw Sr.error(_),Sr.error(h),Nn(y$.CHECK_LOGS_WRAPPER(_))}}}return r.size<2?n.getPermsResponse():null}a(w$,"hasPermissions");function zN(e,t,r,n,s,i,o){if(!e||!t)throw Sr.info("no attributes specified in checkAttributePerms."),Nn(new Error);let c=J.get(r).perms;if(!c||c==="")throw Sr.info(`no permissions found for ${r} in checkAttributePerms().`),Nn(new Error);if(Oo.isEmptyOrZeroLength(t))return Sr.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let l={};for(let f of e){let d=t.get(f);if(d){if(d[lh]===!1){i.addInvalidItem(Ur.ATTR_NOT_FOUND(s,n,f),s,n);continue}if(c)for(let h of c){if(tn.TIME_STAMP_NAMES.includes(d.attribute_name)&&h!==No)throw Nn(new Error,Ur.SYSTEM_TIMESTAMP_PERMS_ERR,ch.FORBIDDEN);d[h]===!1&&(l[d.attribute_name]?l[d.attribute_name].push(h):l[d.attribute_name]=[h])}}else i.addInvalidItem(Ur.ATTR_NOT_FOUND(s,n,f),s,n)}let u=Object.keys(l);u.length>0&&i.addUnauthorizedAttributes(u,s,n,l)}a(zN,"checkAttributePerms");function Que(e){let t=new Set;try{if(e.action)return t;if(e.operation===tn.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){Sr.info(r)}return t}a(Que,"getRecordAttributes");function QN(e,t,r){let n=new Map;if(Oo.isEmpty(e))return Sr.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{Sr.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}a(QN,"getAttributePermissions");function jue(e,t,r,n,s,i,o){let c=new Set(i),l=QN(e,n,s);zN(c,l,t,s,n,o,r)}a(jue,"verifyBulkLoadAttributePerms")});var Gg=P((xPe,M$)=>{"use strict";M$.exports={evaluateSQL:lde,processAST:L$,convertSQLToAST:D$,checkASTPermissions:P$};var Jue=hn(),C$=require("util"),Xue=C$.callbackify(Jue.insert),Zue=Kr().search,ede=_B().update,tde=C$.callbackify(ede),rde=pB().convertDelete,va=require("alasql"),nde=kg(),Fg=j(),sde=iE(),ide=ae(),fh=(H(),D(q)),{hdb_errors:ode,handleHDBError:jN}=_e(),{HTTP_STATUS_CODES:JN}=ode;sde(va);var ade=403,cde="There was a problem performing this insert. Please check the logs and try again.",XN=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function lde(e,t){let r=e.parsed_sql_object;if(!r){r=D$(e.sql);let n,s=r.ast.statements[0];if(s instanceof va.yy.Insert?n=s.into.databaseid:s instanceof va.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof va.yy.Update||s instanceof va.yy.Delete?n=s.table.databaseid:Fg.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof va.yy.Select)&&ide.isEmptyOrZeroLength(n))return t("No schema specified",null)}L$(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}a(lde,"evaluateSQL");function P$(e,t){let r;try{r=nde.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}a(P$,"checkASTPermissions");function D$(e){let t=new XN;if(!e)throw jN(new Error,"The 'sql' parameter is missing from the request body",JN.BAD_REQUEST);try{let r=e.trim(),n=va.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
40
- `);throw n[1]?jN(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,JN.BAD_REQUEST):jN(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",JN.BAD_REQUEST)}return t}a(D$,"convertSQLToAST");function L$(e,t,r){try{let n=ude;if(!e.bypass_auth&&!t.permissions_checked){let i=P$(e,t);if(i&&i.length>0)return r(ade,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case fh.VALID_SQL_OPS_ENUM.SELECT:n=Zue,s=t.ast.statements[0];break;case fh.VALID_SQL_OPS_ENUM.INSERT:n=dde;break;case fh.VALID_SQL_OPS_ENUM.UPDATE:n=tde;break;case fh.VALID_SQL_OPS_ENUM.DELETE:n=rde;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(L$,"processAST");function ude(e,t){Fg.info(e),t("unknown sql statement")}a(ude,"nullFunction");function dde({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=fde(i,e.values)}catch(o){return r(o)}Xue(s,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(l){Fg.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}a(dde,"convertInsert");function fde(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]]=va.compile(`SELECT ${s.toString()} AS [${fh.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw Fg.error(r),new Error(cde)}}a(fde,"createDataObjects")});var sw=P((FPe,B$)=>{var Kg=require("clone"),Yg=pt(),_de=ae(),$g=(H(),D(q)),HPe=j(),ZN=require("fs"),tw=require("joi"),{string:Vg}=tw.types(),{hdb_errors:hde,handleHDBError:qg}=_e(),{HDB_ERROR_MSGS:kPe,HTTP_STATUS_CODES:ew}=hde,{common_validators:nd}=Ti(),v$=" is required",pde=["insert","update","upsert"],rw={database:{presence:!1,format:nd.schema_format,length:nd.schema_length},schema:{presence:!1,format:nd.schema_format,length:nd.schema_length},table:{presence:!0,format:nd.schema_format,length:nd.schema_length},action:{inclusion:{within:pde,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},Ede={schema:Vg.required(),table:Vg.required(),action:Vg.valid("insert","update","upsert")},{AWS_ACCESS_KEY:mde,AWS_SECRET:gde,AWS_BUCKET:Sde,AWS_FILE_KEY:Tde,REGION:Ade}=$g.S3_BUCKET_AUTH_KEYS,Rde={s3:{presence:!0},[`s3.${mde}`]:{presence:!0,type:"String"},[`s3.${gde}`]:{presence:!0,type:"String"},[`s3.${Sde}`]:{presence:!0,type:"String"},[`s3.${Tde}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${Ade}`]:{presence:!0,type:"String"}},U$=Kg(rw);U$.data.presence={message:v$};var x$=Kg(rw);x$.file_path.presence={message:v$};var yde=Object.assign(Kg(rw),Rde),nw=Kg(Ede);nw.csv_url=Vg.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();nw.passthrough_headers=tw.object();function bde(e){let t=Yg.validateObject(e,U$);return Wg(e,t)}a(bde,"dataObject");function Ode(e){let t=Yg.validateBySchema(e,tw.object(nw));return Wg(e,t)}a(Ode,"urlObject");function Nde(e){let t=Yg.validateObject(e,x$);return Wg(e,t)}a(Nde,"fileObject");function wde(e){let t=Yg.validateObject(e,yde);return Wg(e,t)}a(wde,"s3FileObject");function Wg(e,t){if(!t){let r=_de.checkGlobalSchemaTable(e.schema,e.table);if(r)return qg(new Error,r,ew.BAD_REQUEST);if(e.operation===$g.OPERATIONS_ENUM.CSV_FILE_LOAD)try{ZN.accessSync(e.file_path,ZN.constants.R_OK|ZN.constants.F_OK)}catch(n){return n.code===$g.NODE_ERROR_CODES.ENOENT?qg(n,`No such file or directory ${n.path}`,ew.BAD_REQUEST):n.code===$g.NODE_ERROR_CODES.EACCES?qg(n,`Permission denied ${n.path}`,ew.BAD_REQUEST):qg(n)}}return t}a(Wg,"postValidateChecks");B$.exports={dataObject:bde,urlObject:Ode,fileObject:Nde,s3FileObject:wde}});var iw=P((qPe,H$)=>{"use strict";var _h=j(),zg=(H(),D(q));async function Ide(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===zg.OPERATIONS_ENUM.INSERT||t.operation===zg.OPERATIONS_ENUM.UPDATE||t.operation===zg.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===zg.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(_h.info(i.message),i):i.http_resp_msg?(_h.error(`Error calling operation: ${e.name}`),_h.error(i.http_resp_msg),i):(_h.error(`Error calling operation: ${e.name}`),_h.error(i),i)}}a(Ide,"callOperationFunctionAsAwait");H$.exports={callOperationFunctionAsAwait:Ide}});var ow=P((VPe,F$)=>{"use strict";var{S3:Cde,GetObjectCommand:Pde}=require("@aws-sdk/client-s3");F$.exports={getFileStreamFromS3:Dde,getS3AuthObj:k$};async function Dde(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await k$(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new Pde(r))).Body}a(Dde,"getFileStreamFromS3");function k$(e,t,r){return new Cde({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(k$,"getS3AuthObj")});var q$=P((YPe,G$)=>{"use strict";var aw=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}},cw=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};G$.exports={BulkLoadFileObject:aw,BulkLoadDataObject:cw}});var V$=P((zPe,$$)=>{"use strict";var lw=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};$$.exports=lw});var pw=P((eDe,aV)=>{"use strict";var Qg=hn(),Jg=sw(),Lde=require("needle"),ti=(H(),D(q)),jPe=Ot(),sd=ae(),{handleHDBError:Bt,hdb_errors:Z$}=_e(),{HTTP_STATUS_CODES:xr,HDB_ERROR_MSGS:Tr,CHECK_LOGS_WRAPPER:dl}=Z$,id=j(),uw=require("papaparse");sd.promisifyPapaParse();var ri=require("fs-extra"),Mde=require("path"),{chain:K$}=require("stream-chain"),Y$=require("stream-json/streamers/StreamArray"),W$=require("stream-json/utils/Batch"),z$=require("stream-chain/utils/comp"),{finished:Q$}=require("stream"),vde=ce(),eV=iw(),Ude=ow(),{BulkLoadFileObject:fw,BulkLoadDataObject:xde}=q$(),_w=$N(),{verifyBulkLoadAttributePerms:tV}=kg(),JPe=V$(),XPe=Er(),ZPe=io(),{databases:Bde}=(De(),D(nt)),{coerceType:Hde}=(of(),D(Ew)),j$="No records parsed from csv file.",ul=`${vde.get("HDB_ROOT")}/tmp`,{schema_regex:kde}=Ti(),J$=1024*1024*2,X$=5e3,Fde={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};aV.exports={csvDataLoad:Gde,csvURLLoad:qde,csvFileLoad:$de,importFromS3:Vde};async function Gde(e,t){let r=Jg.dataObject(e);if(r)throw Bt(r,r.message,xr.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=sV(e.schema,e.table),i=uw.parse(e.data,{header:!0,skipEmptyLines:!0,transform:dw.bind(null,s),dynamicTyping:!1}),o=new _w;e.hdb_user&&e.hdb_user?.role&&e.hdb_user?.role?.permission&&e.hdb_user?.role?.permission?.super_user!==!0&&tV(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 Bt(new Error,c,xr.BAD_REQUEST,void 0,void 0,!0);let l=new xde(e.action,e.schema,e.table,i.data);return n=await eV.callOperationFunctionAsAwait(iV,l,null),n.message===j$?j$:oV(n.records,n.number_written)}catch(s){throw fl(s)}}a(Gde,"csvDataLoad");async function qde(e){let t=Jg.urlObject(e);if(t)throw Bt(t,t.message,xr.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${ul}/${r}`;try{await Kde(e,r)}catch(s){throw id.error(Tr.DOWNLOAD_FILE_ERR(r)+" - "+s),Bt(s,dl(Tr.DOWNLOAD_FILE_ERR(r)))}try{let s=new fw(this.job_operation_function.name,e.action,e.schema,e.table,n,ti.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission),i=await hw(s);return await jg(n),i}catch(s){throw await jg(n),fl(s)}}a(qde,"csvURLLoad");async function $de(e){let t=Jg.fileObject(e);if(t)throw Bt(t,t.message,xr.BAD_REQUEST,void 0,void 0,!0);let r=new fw(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,ti.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission);try{return await hw(r)}catch(n){throw fl(n)}}a($de,"csvFileLoad");async function Vde(e){let t=Jg.s3FileObject(e);if(t)throw Bt(t,t.message,xr.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=Mde.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${ul}/${s}`;let i=new fw(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user?.role?.permission);await Yde(s,e);let o=await hw(i);return await jg(r),o}catch(n){throw await jg(r),fl(n)}}a(Vde,"importFromS3");async function Kde(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await Lde("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 Bt(n,s,n.statusCode,ti.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}zde(r,e.csv_url),await Wde(t,r.raw)}a(Kde,"downloadCSVFile");async function Yde(e,t){try{let r=`${ul}/${e}`;await ri.mkdirp(ul),await ri.writeFile(`${ul}/${e}`,"",{flag:"a+"});let n=await ri.createWriteStream(r),s=await Ude.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(){id.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw id.error(Tr.S3_DOWNLOAD_ERR+" - "+r),Bt(r,dl(Tr.S3_DOWNLOAD_ERR))}}a(Yde,"downloadFileFromS3");async function Wde(e,t){try{await ri.mkdirp(ul),await ri.writeFile(`${ul}/${e}`,t)}catch(r){throw id.error(Tr.WRITE_TEMP_FILE_ERR),Bt(r,dl(Tr.DEFAULT_BULK_LOAD_ERR))}}a(Wde,"writeFileToTempFolder");async function jg(e){if(e)try{await ri.access(e),await ri.unlink(e)}catch{id.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(jg,"deleteTempFile");function zde(e,t){if(e.statusCode!==Z$.HTTP_STATUS_CODES.OK)throw Bt(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,xr.BAD_REQUEST);if(!Fde[e.headers["content-type"]])throw Bt(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,xr.BAD_REQUEST);if(!e.raw)throw Bt(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,xr.BAD_REQUEST)}a(zde,"validateURLResponse");async function hw(e){try{let t;switch(e.file_type){case ti.VALID_S3_FILE_TYPES.CSV:t=await Qde(e);break;case ti.VALID_S3_FILE_TYPES.JSON:t=await jde(e);break;default:throw Bt(new Error,Tr.DEFAULT_BULK_LOAD_ERR,xr.BAD_REQUEST,ti.LOG_LEVELS.ERROR,Tr.INVALID_FILE_EXT_ERR(e))}return oV(t.records,t.number_written)}catch(t){throw fl(t)}}a(hw,"fileLoad");async function rV(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 Qg.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&tV(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let l=Bt(c);r(l)}}a(rV,"validateChunk");async function nV(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;sd.autoCastJSONDeep(i),s&&s.pause();let o=n.meta?n.meta.fields:null;if(o)i.forEach(c=>{!sd.isEmpty(c)&&!sd.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(l=>{Object.keys(l).forEach(u=>c.add(u))}),o=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},l=await eV.callOperationFunctionAsAwait(iV,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=Bt(c,dl(Tr.INSERT_CSV_ERR),xr.INTERNAL_SERVER_ERROR,ti.LOG_LEVELS.ERROR,Tr.INSERT_CSV_ERR+" - "+c);r(l)}}a(nV,"insertChunk");async function Qde(e){let t={records:0,number_written:0},r=sV(e.schema,e.table);try{let n=new _w,s=ri.createReadStream(e.file_path,{highWaterMark:J$});s.setEncoding("utf8"),await uw.parsePromise(s,rV.bind(null,e,n),dw.bind(null,r));let i=n.getPermsResponse();if(i)throw Bt(new Error,i,xr.BAD_REQUEST);return s=ri.createReadStream(e.file_path,{highWaterMark:J$}),s.setEncoding("utf8"),await uw.parsePromise(s,nV.bind(null,e,t),dw.bind(null,r)),s.destroy(),t}catch(n){throw Bt(n,dl(Tr.PAPA_PARSE_ERR),xr.INTERNAL_SERVER_ERROR,ti.LOG_LEVELS.ERROR,Tr.PAPA_PARSE_ERR+n)}}a(Qde,"callPapaParse");function sV(e,t){let r=Bde[e][t].attributes,n=new Map;for(let s of r)s.type&&!s.computed&&!s.relationship&&n.set(s.name,i=>Hde(i,s));return n}a(sV,"createTransformMap");function dw(e,t,r){let n=e.get(r);return n?n(t):sd.autoCast(t)}a(dw,"typeFunction");async function jde(e){let t={records:0,number_written:0},r=a(n=>{throw n},"throwErr");try{let n=new _w,s=K$([ri.createReadStream(e.file_path,{encoding:"utf-8"}),Y$.withParser(),c=>c.value,new W$({batchSize:X$}),z$(async c=>{await rV(e,n,r,c)})]);await new Promise((c,l)=>{Q$(s,u=>{u?l(u):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw Bt(new Error,i,xr.BAD_REQUEST);let o=K$([ri.createReadStream(e.file_path,{encoding:"utf-8"}),Y$.withParser(),c=>c.value,new W$({batchSize:X$}),z$(async c=>{await nV(e,t,r,c)})]);return await new Promise((c,l)=>{Q$(o,u=>{u?l(u):c()}),o.resume()}),t}catch(n){throw Bt(n,dl(Tr.INSERT_JSON_ERR),xr.INTERNAL_SERVER_ERROR,ti.LOG_LEVELS.ERROR,Tr.INSERT_JSON_ERR+n)}}a(jde,"insertJson");async function iV(e){let t={};try{e.data&&e.data.length>0&&Jde(e.data[0])?t=await Xde(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",id.info(t.message))}catch(r){throw fl(r)}return t}a(iV,"callBulkFileLoad");function Jde(e){let t=Object.keys(e);for(let r of t)if(!kde.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(Jde,"validateColumnNames");async function Xde(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=Qg.insert;break;case"update":i=Qg.update;break;case"upsert":i=Qg.upsert;break;default:throw Bt(new Error,Tr.INVALID_ACTION_PARAM_ERR(n),xr.BAD_REQUEST,ti.LOG_LEVELS.ERROR,Tr.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 f=global.hdb_schema[t][r].hash_attribute,d=e.length;for(;d--;)o.skipped_hashes.indexOf(e[d][f])>=0&&e.splice(d,1)}let l=sd.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:o.new_attributes}}catch(o){throw fl(o)}}a(Xde,"bulkFileLoad");function oV(e,t){return`successfully loaded ${t} of ${e} records`}a(oV,"buildResponseMsg");function fl(e){return Bt(e,dl(Tr.DEFAULT_BULK_LOAD_ERR),xr.INTERNAL_SERVER_ERROR,ti.LOG_LEVELS.ERROR,Tr.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(fl,"buildTopLevelErrMsg")});var Sw=P((rDe,pV)=>{"use strict";var gw=Kr(),Zde=ow(),{AsyncParser:efe}=require("json2csv"),Xg=require("stream"),Xn=ae(),mw=require("fs-extra"),tfe=require("path"),bs=j(),{promisify:uV}=require("util"),hh=ae(),{handleHDBError:ar,hdb_errors:rfe}=_e(),{HDB_ERROR_MSGS:wn,HTTP_STATUS_CODES:cr}=rfe,{streamAsJSON:nfe}=(dA(),D(hD)),{Upload:sfe}=require("@aws-sdk/lib-storage"),{toCsvStream:ife}=(Xi(),D(gA)),cV=["search_by_value","search_by_hash","sql","search_by_conditions"],lV=["json","csv"],dV="json",fV="csv",ofe="Successfully exported JSON locally.",afe="Successfully exported CSV locally.",cfe=1e3,lfe=gw.searchByHash,ufe=gw.searchByValue,dfe=uV(Xg.finished);pV.exports={export_to_s3:pfe,export_local:ffe};async function ffe(e){bs.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=_V(e);if(!Xn.isEmpty(t))throw bs.error(t),ar(new Error,t,cr.BAD_REQUEST,void 0,void 0,!0);if(Xn.isEmpty(e.path))throw bs.error(wn.MISSING_VALUE("path")),ar(new Error,wn.MISSING_VALUE("path"),cr.BAD_REQUEST,void 0,void 0,!0);let r=(Xn.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(tfe.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=Xn.buildFolderPath(e.path,r);await _fe(e.path);let s=await hV(e);return await hfe(n,e.format,s)}a(ffe,"export_local");async function _fe(e){if(bs.trace("in confirmPath"),Xn.isEmptyOrZeroLength(e))throw ar(new Error,`Invalid path: ${e}`,cr.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await mw.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,bs.error(n),ar(new Error,n,cr.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 bs.error(r),ar(new Error,r,cr.BAD_REQUEST,void 0,void 0,!0)}return!0}a(_fe,"confirmPath");async function hfe(e,t,r){if(bs.trace("in saveToLocal"),hh.isEmptyOrZeroLength(e))throw ar(new Error,wn.INVALID_VALUE("file_path"),cr.BAD_REQUEST,void 0,void 0,!0);if(hh.isEmptyOrZeroLength(t))throw ar(new Error,wn.INVALID_VALUE("Source format"),cr.BAD_REQUEST,void 0,void 0,!0);if(hh.isEmpty(r))throw ar(new Error,wn.NOT_FOUND("Data"),cr.BAD_REQUEST,void 0,void 0,!0);if(t===dV){let n=mw.createWriteStream(e);return nfe(r).pipe(n),await dfe(n),{message:ofe,path:e}}else if(t===fV){let n=mw.createWriteStream(e),s=Xg.Readable.from(r),i={},o=r.getColumns?.();o&&(i.fields=o.map(f=>({label:f,value:f})));let c={objectMode:!0};return await new efe(i,c).fromInput(s).toOutput(n).promise(!1),{message:afe,path:e}}throw ar(new Error,wn.INVALID_VALUE("format"),cr.BAD_REQUEST)}a(hfe,"saveToLocal");async function pfe(e){if(!e.s3||Object.keys(e.s3).length===0)throw ar(new Error,wn.MISSING_VALUE("S3 object"),cr.BAD_REQUEST);if(Xn.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw ar(new Error,wn.MISSING_VALUE("aws_access_key_id"),cr.BAD_REQUEST);if(Xn.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw ar(new Error,wn.MISSING_VALUE("aws_secret_access_key"),cr.BAD_REQUEST);if(Xn.isEmptyOrZeroLength(e.s3.bucket))throw ar(new Error,wn.MISSING_VALUE("bucket"),cr.BAD_REQUEST);if(Xn.isEmptyOrZeroLength(e.s3.key))throw ar(new Error,wn.MISSING_VALUE("key"),cr.BAD_REQUEST);if(Xn.isEmptyOrZeroLength(e.s3.region))throw ar(new Error,wn.MISSING_VALUE("region"),cr.BAD_REQUEST);let t=_V(e);if(!Xn.isEmpty(t))throw ar(new Error,t,cr.BAD_REQUEST);bs.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await hV(e)}catch(l){throw bs.error(l),l}let n,s=await Zde.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new Xg.PassThrough;if(e.format===fV){i=e.s3.key+".csv";let l=ife(r,r.getColumns?.());l.on("error",u=>{throw u}),l.pipe(o)}else if(e.format===dV){i=e.s3.key+".json";let l=new Xg.Readable;l.pipe(o),l.on("error",d=>{throw d}),l.push("[");let u=r.length,f="";for(let[d,h]of r.entries()){let _=d===u-1?JSON.stringify(h):JSON.stringify(h)+",";f+=_,d!==0&&d%cfe===0&&(l.push(f),f="")}f.length!==0&&l.push(f),l.push("]"),l.push(null)}else throw ar(new Error,wn.INVALID_VALUE("format"),cr.BAD_REQUEST);return new sfe({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(pfe,"export_to_s3");function _V(e){if(bs.trace("in exportCoreValidation"),Xn.isEmpty(e.format))return"format missing";if(lV.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${lV.join(", ")}`;let t=e.search_operation.operation;if(Xn.isEmpty(t))return"search_operation.operation missing";if(cV.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${cV.join(", ")}`}a(_V,"exportCoreValidation");async function hV(e){bs.trace("in getRecords");let t,r;if(hh.isEmpty(e.search_operation)||hh.isEmptyOrZeroLength(e.search_operation.operation))throw ar(new Error,wn.INVALID_VALUE("Search operation"),cr.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=ufe;break;case"search_by_hash":t=lfe;break;case"search_by_conditions":t=gw.searchByConditions;break;case"sql":{let n=Gg();t=uV(n.evaluateSQL);break}default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,bs.error(r),ar(new Error,r,cr.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(hV,"getRecords")});var mV=P((sDe,EV)=>{"use strict";var Tw=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};EV.exports=Tw});var TV=P((oDe,SV)=>{"use strict";var Efe=(H(),D(q)),gV=require("moment"),mfe=require("uuid").v4,Aw=class{static{a(this,"JobObject")}constructor(){this.id=mfe(),this.type=void 0,this.start_datetime=gV().valueOf(),this.created_datetime=gV().valueOf(),this.end_datetime=void 0,this.status=Efe.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};SV.exports=Aw});var Rw=P((cDe,IV)=>{"use strict";var gfe=require("uuid").v4,OV=hn(),NV=Kr(),Sfe=Ks(),Tfe=iu(),Afe=mV(),At=(H(),D(q)),Rfe=TV(),yfe=tm(),ni=j(),bfe=Xd(),od=ae(),{promisify:Ofe}=require("util"),_l=require("moment"),Nfe=Gg(),Zg=sw(),AV=fR(),{deleteTransactionLogsBeforeValidator:wfe}=HN(),{handleHDBError:RV,hdb_errors:Ife,ClientError:Cfe}=_e(),{HTTP_STATUS_CODES:yV}=Ife,bV=NV.searchByValue,Pfe=NV.searchByHash,Dfe=OV.insert,Lfe=Ofe(Nfe.evaluateSQL),Mfe=OV.update;IV.exports={addJob:xfe,updateJob:Hfe,handleGetJob:vfe,handleGetJobsByStartDate:Ufe,getJobById:wV};async function vfe(e){if(e.id===void 0)throw new Cfe("'id' is required");let t=await wV(e.id);return od.isEmptyOrZeroLength(t)||(t[0]={...t[0]},t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}a(vfe,"handleGetJob");async function Ufe(e){try{let t=await Bfe(e);if(ni.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=_l(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=_l(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 ni.error(r),new Error(r)}}a(Ufe,"handleGetJobsByStartDate");async function xfe(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||od.isEmptyOrZeroLength(e.operation)){let f="job parameter is invalid";return ni.info(f),t.error=f,t}if(!At.JOB_TYPE_ENUM[e.operation])return ni.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case At.OPERATIONS_ENUM.CSV_FILE_LOAD:n=Zg.fileObject(e);break;case At.OPERATIONS_ENUM.CSV_URL_LOAD:n=Zg.urlObject(e);break;case At.OPERATIONS_ENUM.CSV_DATA_LOAD:n=Zg.dataObject(e);break;case At.OPERATIONS_ENUM.IMPORT_FROM_S3:n=Zg.s3FileObject(e);break;case At.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case At.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=AV(e,"date");break;case At.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=AV(e,"timestamp");break;case At.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=wfe(e);break;case At.OPERATIONS_ENUM.RESTART_SERVICE:if(At.HDB_PROCESS_SERVICES[e.service]===void 0)throw RV(new Error,"Invalid service",yV.BAD_REQUEST,void 0,void 0,!0);break;default:break}if(n)throw RV(n,n.message,yV.BAD_REQUEST,void 0,void 0,!0);let s=new Rfe;s.type=e.operation===At.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?At.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user?.username;let i=new Sfe(At.SYSTEM_SCHEMA_NAME,At.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),o;try{o=Array.from(await bV(i))}catch(f){let d=`There was an error inserting a new job: ${f}`;return ni.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){s.id=gfe();try{o=await bV(i)}catch(f){let d=`There was an error inserting a new job: ${f}`;return ni.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return ni.error("Error creating a job, could not find a unique job id."),t}s.request=e;let l=new bfe(At.SYSTEM_SCHEMA_NAME,At.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),u;try{u=await Dfe(l)}catch(f){return ni.error(`There was an error inserting a job for job type: ${e.operation} -- ${f}`),t.success=!1,t}if(u.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${s.operation} and id ${s.id}`;else{let f=`Created a job with type ${s.type} and id ${s.id}`;t.message=f,t.createdJob=s,t.success=!0,ni.trace(f)}return t}a(xfe,"addJob");async function Bfe(e){let t=_l(e.from_date,_l.ISO_8601),r=_l(e.to_date,_l.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 Afe(n,e.hdb_user);try{return await Lfe(s)}catch(i){throw ni.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(Bfe,"getJobsInDateRange");async function wV(e){if(od.isEmptyOrZeroLength(e))return od.errorizeMessage("Invalid job ID specified.");let t=new Tfe(At.SYSTEM_SCHEMA_NAME,At.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await Pfe(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return ni.error(n),od.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(wV,"getJobById");async function Hfe(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(od.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===At.JOB_STATUS_ENUM.COMPLETE||e.status===At.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=_l().valueOf());let t=new yfe(At.SYSTEM_SCHEMA_NAME,At.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await Mfe(t),r}a(Hfe,"updateJob")});var xV=P((uDe,UV)=>{"use strict";var CV=ae(),Ar=(H(),D(q)),kfe=require("moment"),eS=pw(),ph=j(),PV=Rw(),DV=Sw(),LV=Tc(),MV=rt(),Ffe=Ug(),Gfe=Qu(),{parentPort:qfe,isMainThread:vV}=require("worker_threads"),{onMessageByType:$fe}=rt(),yw=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function Vfe(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(CV.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(CV.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Ar.JOB_TYPE_ENUM.csv_file_load:await vi(e,eS.csvFileLoad);break;case Ar.JOB_TYPE_ENUM.csv_url_load:await vi(e,eS.csvURLLoad);break;case Ar.JOB_TYPE_ENUM.csv_data_load:await vi(e,eS.csvDataLoad);break;case Ar.JOB_TYPE_ENUM.import_from_s3:await vi(e,eS.importFromS3);break;case Ar.JOB_TYPE_ENUM.empty_trash:break;case Ar.JOB_TYPE_ENUM.export_local:await vi(e,DV.export_local);break;case Ar.JOB_TYPE_ENUM.export_to_s3:await vi(e,DV.export_to_s3);break;case Ar.JOB_TYPE_ENUM.delete_files_before:case Ar.JOB_TYPE_ENUM.delete_records_before:await vi(e,LV.deleteFilesBefore);break;case Ar.JOB_TYPE_ENUM.delete_audit_logs_before:await vi(e,LV.deleteAuditLogsBefore);break;case Ar.JOB_TYPE_ENUM.delete_transaction_logs_before:await vi(e,Ffe.deleteTransactionLogsBefore);break;case Ar.JOB_TYPE_ENUM.restart_service:return await vi(e,Gfe.restartService),`Restarting ${e.json.service}`;break;default:return`Invalid operation ${e.json.operation} specified`}}a(Vfe,"parseMessage");async function vi(e,t){try{e.job.status=Ar.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=kfe().valueOf(),await PV.updateJob(e.job),await Kfe(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):ph.error(`There was an error running ${t.name} job with id ${e.job.id}`),ph.error(n),e.job.message=n,e.job.status=Ar.JOB_STATUS_ENUM.ERROR;try{await PV.updateJob(e.job)}catch(s){throw ph.error(`Unable to update job with id ${e.job.id}`),s}throw r}}a(vi,"runJob");async function Kfe(e){ph.trace("launching job thread:",e),vV?MV.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Ar.PROCESS_NAME_ENV_PROP]:`JOB-${e}`}}):qfe.postMessage({type:Ar.ITC_EVENT_TYPES.START_JOB,jobId:e})}a(Kfe,"launchJobThread");vV&&$fe(Ar.ITC_EVENT_TYPES.START_JOB,async(e,t)=>{try{MV.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Ar.PROCESS_NAME_ENV_PROP]:`JOB-${e.jobId}`}})}catch(r){ph.error(r)}});UV.exports={parseMessage:Vfe,RunnerMessage:yw}});var HV=P((fDe,BV)=>{"use strict";var bw=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};BV.exports=bw});var BN=P((pDe,Pw)=>{"use strict";var iS=Kr(),ww=Gg(),tS=pw(),wo=Gm(),rS=oo(),mh=Tc(),Yfe=uO(),Eh=qn(),nS=e_(),It=xN(),sS=j(),Wfe=pO(),zfe=Zm(),kV=FO(),Qfe=tg(),jfe=$O(),Jfe=VO(),Xfe=WO(),Zfe=QO(),Ow=og(),FV=Sw(),e_e=kg(),Iw=Rw(),V=(H(),D(q)),{hdb_errors:Sh,handleHDBError:gh}=_e(),{HTTP_STATUS_CODES:GV}=Sh,Nw=cN(),qV=Qu(),XV=require("util"),cd=hn(),t_e=Gs(),r_e=Uu(),$V=xV(),VV=fu(),KV=(wg(),D(eh)),YV=wt(),WV=Ug(),zV=rh(),{setServerUtilities:n_e}=(of(),D(Ew)),{CONTEXT:hDe}=(ta(),D(sA)),{_assignPackageExport:s_e}=ui(),{transformReq:i_e}=ae(),{server:o_e}=($r(),D(ic)),rn=sS.loggerWithTag("operation"),ad=Js(),QV=(jc(),D(Qc)),a_e=iw(),jV=iS.searchByHash,c_e=iS.searchByValue,l_e=XV.promisify(iS.search),u_e=XV.promisify(ww.evaluateSQL),d_e={[V.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[V.OPERATIONS_ENUM.CREATE_TABLE]:!0,[V.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[V.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[V.OPERATIONS_ENUM.DROP_TABLE]:!0,[V.OPERATIONS_ENUM.DROP_SCHEMA]:!0},Z=HV();async function ZV(e,t){try{if(e.body.operation!=="read_log"&&(sS.log_level===V.LOG_LEVELS.INFO||sS.log_level===V.LOG_LEVELS.DEBUG||sS.log_level===V.LOG_LEVELS.TRACE)){let{hdb_user:n,hdb_auth_header:s,password:i,payload:o,...c}=e.body;rn.info(c)}}catch(n){rn.error(n)}let r=await a_e.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return d_e[e.body.operation]&&t_e.setSchemaDataToGlobal(n=>{n&&rn.error(n)}),r}a(ZV,"processLocalTransaction");var JV=__e();Pw.exports={chooseOperation:e1,getOperationFunction:t1,operation:Cw,processLocalTransaction:ZV,executeJob:Os};n_e(Pw.exports);o_e.operation=Cw;function e1(e){let t;try{t=t1(e)}catch(s){throw rn.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=ww.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let o=ww.checkASTPermissions(e,i);if(o)throw rn.error(`${GV.FORBIDDEN} from operation ${e.operation}`),rn.warn(`User '${e.hdb_user?.username}' is not permitted to ${e.operation}`),gh(new Error,o,Sh.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==V.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==V.OPERATIONS_ENUM.LOGIN&&e.operation!==V.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=e_e.verifyPerms(i,s);if(o)throw rn.error(`${GV.FORBIDDEN} from operation ${e.operation}`),rn.warn(`User '${i.hdb_user?.username}' is not permitted to ${i.operation}`),gh(new Error,o,Sh.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw gh(s,"There was an error when trying to choose an operation path")}return r}a(e1,"chooseOperation");function t1(e){if(rn.trace(`getOperationFunction with operation: ${e.operation}`),JV.has(e.operation))return JV.get(e.operation);throw gh(new Error,Sh.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),Sh.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(t1,"getOperationFunction");s_e("operation",Cw);function Cw(e,t,r){e.hdb_user=t?.user,e.bypass_auth=!r;let n=e1(e);return ZV({body:e},n)}a(Cw,"operation");async function f_e(e){rn.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[V.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case V.OPERATIONS_ENUM.INSERT:o=await cd.insert(i);break;case V.OPERATIONS_ENUM.UPDATE:o=await cd.update(i);break;case V.OPERATIONS_ENUM.UPSERT:o=await cd.upsert(i);break;case V.OPERATIONS_ENUM.DELETE:o=await mh.deleteRecord(i);break;default:rn.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){rn.info("Invalid operation in transaction"),rn.error(o)}}a(f_e,"catchup");async function Os(e){i_e(e);let t,r;try{r=await Iw.addJob(e),t=r.createdJob,rn.info("addJob result",r);let n=new $V.RunnerMessage(t,e);return{message:await $V.parseMessage(n)??`Starting job with id ${t.id}`,job_id:t.id}}catch(n){let s=`There was an error executing job: ${n.http_resp_msg?n.http_resp_msg:n}`;throw rn.error(s),gh(n,s)}}a(Os,"executeJob");function __e(){let e=new Map;return e.set(V.OPERATIONS_ENUM.INSERT,new Z(cd.insert)),e.set(V.OPERATIONS_ENUM.UPDATE,new Z(cd.update)),e.set(V.OPERATIONS_ENUM.UPSERT,new Z(cd.upsert)),e.set(V.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new Z(iS.searchByConditions)),e.set(V.OPERATIONS_ENUM.SEARCH_BY_HASH,new Z(jV)),e.set(V.OPERATIONS_ENUM.SEARCH_BY_ID,new Z(jV)),e.set(V.OPERATIONS_ENUM.SEARCH_BY_VALUE,new Z(c_e)),e.set(V.OPERATIONS_ENUM.SEARCH,new Z(l_e)),e.set(V.OPERATIONS_ENUM.SQL,new Z(u_e)),e.set(V.OPERATIONS_ENUM.CSV_DATA_LOAD,new Z(Os,tS.csvDataLoad)),e.set(V.OPERATIONS_ENUM.CSV_FILE_LOAD,new Z(Os,tS.csvFileLoad)),e.set(V.OPERATIONS_ENUM.CSV_URL_LOAD,new Z(Os,tS.csvURLLoad)),e.set(V.OPERATIONS_ENUM.IMPORT_FROM_S3,new Z(Os,tS.importFromS3)),e.set(V.OPERATIONS_ENUM.CREATE_SCHEMA,new Z(wo.createSchema)),e.set(V.OPERATIONS_ENUM.CREATE_DATABASE,new Z(wo.createSchema)),e.set(V.OPERATIONS_ENUM.CREATE_TABLE,new Z(wo.createTable)),e.set(V.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new Z(wo.createAttribute)),e.set(V.OPERATIONS_ENUM.DROP_SCHEMA,new Z(wo.dropSchema)),e.set(V.OPERATIONS_ENUM.DROP_DATABASE,new Z(wo.dropSchema)),e.set(V.OPERATIONS_ENUM.DROP_TABLE,new Z(wo.dropTable)),e.set(V.OPERATIONS_ENUM.DROP_ATTRIBUTE,new Z(wo.dropAttribute)),e.set(V.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new Z(rS.describeSchema)),e.set(V.OPERATIONS_ENUM.DESCRIBE_DATABASE,new Z(rS.describeSchema)),e.set(V.OPERATIONS_ENUM.DESCRIBE_TABLE,new Z(rS.describeTable)),e.set(V.OPERATIONS_ENUM.DESCRIBE_ALL,new Z(rS.describeAll)),e.set(V.OPERATIONS_ENUM.DELETE,new Z(mh.deleteRecord)),e.set(V.OPERATIONS_ENUM.ADD_USER,new Z(Eh.addUser)),e.set(V.OPERATIONS_ENUM.ALTER_USER,new Z(Eh.alterUser)),e.set(V.OPERATIONS_ENUM.DROP_USER,new Z(Eh.dropUser)),e.set(V.OPERATIONS_ENUM.LIST_USERS,new Z(Eh.listUsersExternal)),e.set(V.OPERATIONS_ENUM.LIST_ROLES,new Z(nS.listRoles)),e.set(V.OPERATIONS_ENUM.ADD_ROLE,new Z(nS.addRole)),e.set(V.OPERATIONS_ENUM.ALTER_ROLE,new Z(nS.alterRole)),e.set(V.OPERATIONS_ENUM.DROP_ROLE,new Z(nS.dropRole)),e.set(V.OPERATIONS_ENUM.USER_INFO,new Z(Eh.userInfo)),e.set(V.OPERATIONS_ENUM.READ_LOG,new Z(Wfe)),e.set(V.OPERATIONS_ENUM.ADD_NODE,new Z(zfe)),e.set(V.OPERATIONS_ENUM.UPDATE_NODE,new Z(kV)),e.set(V.OPERATIONS_ENUM.SET_NODE_REPLICATION,new Z(kV)),e.set(V.OPERATIONS_ENUM.REMOVE_NODE,new Z(Qfe)),e.set(V.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new Z(jfe)),e.set(V.OPERATIONS_ENUM.PURGE_STREAM,new Z(Jfe)),e.set(V.OPERATIONS_ENUM.SET_CONFIGURATION,new Z(YV.setConfiguration)),e.set(V.OPERATIONS_ENUM.CLUSTER_STATUS,new Z(Xfe.clusterStatus)),e.set(V.OPERATIONS_ENUM.CLUSTER_NETWORK,new Z(Zfe)),e.set(V.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new Z(Ow.setRoutes)),e.set(V.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new Z(Ow.getRoutes)),e.set(V.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new Z(Ow.deleteRoutes)),e.set(V.OPERATIONS_ENUM.EXPORT_TO_S3,new Z(Os,FV.export_to_s3)),e.set(V.OPERATIONS_ENUM.CREATE_CSR,new Z(ad.createCsr)),e.set(V.OPERATIONS_ENUM.SIGN_CERTIFICATE,new Z(ad.signCertificate)),e.set(V.OPERATIONS_ENUM.LIST_CERTIFICATES,new Z(ad.listCertificates)),e.set(V.OPERATIONS_ENUM.ADD_CERTIFICATES,new Z(ad.addCertificate)),e.set(V.OPERATIONS_ENUM.REMOVE_CERTIFICATE,new Z(ad.removeCertificate)),e.set(V.OPERATIONS_ENUM.GET_KEY,new Z(ad.getKey)),e.set(V.OPERATIONS_ENUM.ADD_NODE_BACK,new Z(QV.addNodeBack)),e.set(V.OPERATIONS_ENUM.REMOVE_NODE_BACK,new Z(QV.removeNodeBack)),e.set(V.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new Z(Os,mh.deleteFilesBefore)),e.set(V.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new Z(Os,mh.deleteFilesBefore)),e.set(V.OPERATIONS_ENUM.EXPORT_LOCAL,new Z(Os,FV.export_local)),e.set(V.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new Z(Iw.handleGetJobsByStartDate)),e.set(V.OPERATIONS_ENUM.GET_JOB,new Z(Iw.handleGetJob)),e.set(V.OPERATIONS_ENUM.GET_FINGERPRINT,new Z(Nw.getFingerprint)),e.set(V.OPERATIONS_ENUM.SET_LICENSE,new Z(Nw.setLicense)),e.set(V.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new Z(Nw.getRegistrationInfo)),e.set(V.OPERATIONS_ENUM.RESTART,new Z(qV.restart)),e.set(V.OPERATIONS_ENUM.RESTART_SERVICE,new Z(Os,qV.restartService)),e.set(V.OPERATIONS_ENUM.CATCHUP,new Z(f_e)),e.set(V.OPERATIONS_ENUM.SYSTEM_INFORMATION,new Z(r_e.systemInformation)),e.set(V.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new Z(Os,mh.deleteAuditLogsBefore)),e.set(V.OPERATIONS_ENUM.READ_AUDIT_LOG,new Z(Yfe)),e.set(V.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new Z(VV.createTokens)),e.set(V.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new Z(VV.refreshOperationToken)),e.set(V.OPERATIONS_ENUM.LOGIN,new Z(KV.login)),e.set(V.OPERATIONS_ENUM.LOGOUT,new Z(KV.logout)),e.set(V.OPERATIONS_ENUM.GET_CONFIGURATION,new Z(YV.getConfiguration)),e.set(V.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new Z(It.customFunctionsStatus)),e.set(V.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new Z(It.getCustomFunctions)),e.set(V.OPERATIONS_ENUM.GET_COMPONENT_FILE,new Z(It.getComponentFile)),e.set(V.OPERATIONS_ENUM.GET_COMPONENTS,new Z(It.getComponents)),e.set(V.OPERATIONS_ENUM.SET_COMPONENT_FILE,new Z(It.setComponentFile)),e.set(V.OPERATIONS_ENUM.DROP_COMPONENT,new Z(It.dropComponent)),e.set(V.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new Z(It.getCustomFunction)),e.set(V.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new Z(It.setCustomFunction)),e.set(V.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new Z(It.dropCustomFunction)),e.set(V.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new Z(It.addComponent)),e.set(V.OPERATIONS_ENUM.ADD_COMPONENT,new Z(It.addComponent)),e.set(V.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new Z(It.dropCustomFunctionProject)),e.set(V.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new Z(It.packageComponent)),e.set(V.OPERATIONS_ENUM.PACKAGE_COMPONENT,new Z(It.packageComponent)),e.set(V.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new Z(It.deployComponent)),e.set(V.OPERATIONS_ENUM.DEPLOY_COMPONENT,new Z(It.deployComponent)),e.set(V.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new Z(WV.readTransactionLog)),e.set(V.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new Z(Os,WV.deleteTransactionLogsBefore)),e.set(V.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new Z(zV.installModules)),e.set(V.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new Z(zV.auditModules)),e.set(V.OPERATIONS_ENUM.GET_BACKUP,new Z(wo.getBackup)),e.set(V.OPERATIONS_ENUM.ADD_SSH_KEY,new Z(It.addSSHKey)),e.set(V.OPERATIONS_ENUM.UPDATE_SSH_KEY,new Z(It.updateSSHKey)),e.set(V.OPERATIONS_ENUM.DELETE_SSH_KEY,new Z(It.deleteSSHKey)),e.set(V.OPERATIONS_ENUM.LIST_SSH_KEYS,new Z(It.listSSHKeys)),e.set(V.OPERATIONS_ENUM.SET_SSH_KNOWN_HOSTS,new Z(It.setSSHKnownHosts)),e.set(V.OPERATIONS_ENUM.GET_SSH_KNOWN_HOSTS,new Z(It.getSSHKnownHosts)),e}a(__e,"initializeOperationFunctionMap")});var aS=P((mDe,s1)=>{"use strict";var Dw=(H(),D(q)),h_e=ae(),Th=j(),{handleHDBError:Lw,hdb_errors:oS}=_e(),{isMainThread:p_e}=require("worker_threads"),{Readable:E_e}=require("stream"),r1=require("os"),m_e=require("util"),g_e=db(),S_e=m_e.promisify(g_e.authorize),n1=BN(),{createGzip:T_e,constants:A_e}=require("zlib");function R_e(e){let t=`Found an uncaught exception with message: ${e.message}. ${r1.EOL}Stack: ${e.stack} ${r1.EOL}Terminating ${p_e?"HDB":"thread"}.`;console.error(t),Th.fatal(t),process.exit(1)}a(R_e,"handleServerUncaughtException");function y_e(e,t,r){if(Th[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:oS.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(y_e,"serverErrorHandler");function b_e(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=Lw(new Error,"Invalid JSON.",oS.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(h_e.isEmpty(e.body.operation)){let n=Lw(new Error,"Request body must include an 'operation' property.",oS.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}a(b_e,"reqBodyValidationHandler");function O_e(e,t,r){let n;e.body.operation!==Dw.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==Dw.OPERATIONS_ENUM.LOGIN&&e.body.operation!==Dw.OPERATIONS_ENUM.LOGOUT?S_e(e,t).then(s=>{n=s,e.body.hdb_user=n,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(s=>{Th.warn(s),Th.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${s.stack}"`);let i=typeof s=="string"?{error:s}:{error:s.message};r(Lw(s,i,oS.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(O_e,"authHandler");async function N_e(e,t,r=!1){let n;try{e.body.bypass_auth&&delete e.body.bypass_auth,n=n1.chooseOperation(e.body);let s=await n1.processLocalTransaction(e,n);if(s instanceof E_e&&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(T_e({level:A_e.Z_BEST_SPEED})))}return s}catch(s){throw Th.error(s),s}}a(N_e,"handlePostRequest");s1.exports={authHandler:O_e,handlePostRequest:N_e,handleServerUncaughtException:R_e,serverErrorHandler:y_e,reqBodyValidationHandler:b_e}});var c1=P((SDe,a1)=>{"use strict";var w_e=require("fastify-plugin"),{handlePostRequest:i1,authHandler:I_e,reqBodyValidationHandler:C_e}=aS();async function P_e(e){e.decorate("hdbCore",{preValidation:[C_e,I_e],request:a(t=>o1(i1(t,response)),"request"),requestWithoutAuthentication:a((t,r)=>o1(i1(t,r,!0)),"requestWithoutAuthentication")})}a(P_e,"hdbCore");async function o1(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(o1,"convertAsyncIterators");a1.exports=w_e(P_e)});var u1=P((RDe,l1)=>{"use strict";var ADe=require("fs"),cS=ce();cS.initSync();var{CONFIG_PARAMS:Mw}=(H(),D(q)),D_e=1024*1024*1024;function L_e(e){let t=cS.get(Mw.HTTP_TIMEOUT),r=cS.get(Mw.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:D_e,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,maxParamLength:cS.get(Mw.HTTP_MAXPARAMLENGTH)??1e3,https:e}}a(L_e,"getServerOptions");l1.exports=L_e});var _1=P((bDe,f1)=>{"use strict";var vw=ce();vw.initSync();var{CONFIG_PARAMS:d1}=(H(),D(q));function M_e(){let e=vw.get(d1.HTTP_CORSACCESSLIST),t=vw.get(d1.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(M_e,"getCORSOptions");f1.exports=M_e});var E1=P((NDe,p1)=>{"use strict";var h1=ce();h1.initSync();var v_e=(H(),D(q));function U_e(){return h1.get(v_e.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(U_e,"getHeaderTimeoutConfig");p1.exports=U_e});var xw={};Be(xw,{customFunctionsServer:()=>H_e,ready:()=>P1,start:()=>B_e});function B_e(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){Io||(Io=C1(t),je.http((await Io).server));let o=await Io,c=(0,Uw.dirname)(s),l=(0,Uw.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!m1.has(c)){m1.add(c);try{o.register(F_e(c,l))}catch(u){if(u.message==="Root plugin has already booted")lt.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw u}}},ready:P1}}async function H_e(){try{lt.info("In Custom Functions Fastify server"+process.cwd()),lt.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),lt.debug(`Custom Functions server process ${process.pid} starting up.`),await k_e();let e=y1.get(B.HTTP_SECUREPORT)>0,t;try{t=Io=await C1(e)}catch(r){throw lt.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw lt.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){lt.error(`Custom Functions ${process.pid} Error: ${e}`),lt.error(e),process.exit(1)}}async function k_e(){try{lt.info("Custom Functions starting configuration."),await b1.setUsersWithRolesCache(),lt.info("Custom Functions completed configuration.")}catch(e){lt.error(e)}}function F_e(e,t){return async function(r){try{lt.info("Custom Functions starting buildRoutes"),lt.trace("Loading fastify routes folder "+e),(0,g1.existsSync)(e)&&r.register(R1.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:lt.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,o)=>{s?.message?lt.error(s.message):s&&lt.error(s),o()})}catch(n){lt.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function C1(e){lt.info("Custom Functions starting buildServer.");let t=(0,O1.default)(e),r=(0,S1.default)(t);r.server.headersTimeout=(0,w1.default)(),r.setErrorHandler(I1.serverErrorHandler);let n=(0,N1.default)();return n&&r.register(T1.default,n),r.register(function(s,i,o){s.setNotFoundHandler(function(c,l){r.server.emit("unhandled",c.raw,l.raw)}),o()}),r.register(A1.default),await r.register(x_e),await r.after(),EA(r),lt.info("Custom Functions completed buildServer."),r}function P1(){if(Io)return Io.then?Io.then(e=>e.ready()):Io.ready()}var Uw,g1,S1,T1,A1,R1,y1,lt,x_e,b1,O1,N1,w1,I1,Io,m1,D1=be(()=>{Uw=require("path"),g1=require("fs"),S1=U(require("fastify")),T1=U(require("@fastify/cors")),A1=U(rb()),R1=U(require("@fastify/autoload")),y1=U(ce());H();lt=U(j()),x_e=U(c1()),b1=U(qn()),O1=U(u1()),N1=U(_1()),w1=U(E1()),I1=U(aS());Xi();$r();m1=new Set;a(B_e,"start");a(H_e,"customFunctionsServer");a(k_e,"setUp");a(F_e,"buildRouteFolder");a(C1,"buildServer");a(P1,"ready")});var Bw={};Be(Bw,{start:()=>G_e});function G_e(e){return{handleDirectory(t,r){if(t==="/"){let n=(0,x1.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){M1||(M1=!0,e.server.http(async(s,i)=>{if(!s.isWebSocket){let o=L1.get(s.pathname);if(o)return{handlesHeaders:!0,body:(0,v1.default)(s,(0,U1.realpathSync)(o))}}return i(s)},{runFirst:!0})),L1.set(r,n)}}}var v1,U1,x1,L1,M1,B1=be(()=>{v1=U(require("send")),U1=require("fs"),x1=U(require("serve-static")),L1=new Map;a(G_e,"start")});var W1={};Be(W1,{startHTTPThreads:()=>$_e,startSocketServer:()=>qw,updateWorkerIdleness:()=>Y1});async function $_e(e=2,t){try{if(t)Fw(0,1,!0);else{let{loadRootComponents:r}=_S();if(e===0)return(0,Ns.setMainIsWorker)(!0),await Kw().startServers(),Promise.resolve([]);await r()}K1();for(let r=0;r<e;r++)Fw(r,e);return Promise.all(V1)}finally{(0,Ns.threadsHaveStarted)()}}function K1(){let e=(0,G1.checkMemoryLimit)();e&&!process.env.DEV_MODE&&(console.error(e),kw=setInterval(()=>{dS.notify(e)},q_e).unref())}function Fw(e,t=1,r){if(Hw++,(0,Ns.startWorker)("server/threads/threadServer.js",{name:kT.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((o,c)=>{function l(u){u.type===xT.CHILD_STARTED&&(n.removeListener("message",l),o(n))}a(l,"onMessage"),n.on("message",l),n.on("error",c)});V1.push(s),await s,ld.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",o=>{if(o.requestId){let c=uS.get(o.requestId);c&&c(o)}}),n.on("exit",i),n.on("shutdown",i);function i(){let o=ld.indexOf(n);o>-1&&ld.splice(o,1)}if(a(i,"removeWorker"),ud){let o=ud;ud=[];for(let c of o)$1[c.localPort](null,c)}}}),r){let n=setInterval(()=>{Gw?Gw=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,Ns.shutdownWorkers)(),Hw=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function qw(e=0,t){if(typeof e=="string")try{(0,fS.existsSync)(e)&&(0,fS.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=V_e:r=K_e(t):r=$w;let n=(0,dd.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);return n._handle&&(n._handle.onconnection=$1[e]=function(s,i){r.readsData||(i.reading=!1,i.readStop()),Gw=!0,r(i,(o,c)=>{if(!o){if(H1){let u=i._socket||new dd.Socket({handle:i,writable:!0,readable:!0});H1.deliverSocket(u,e,c),u.resume()}else Hw>0?(ud.length===0&&setTimeout(()=>{ud.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(),i.localPort=e,ud.push(i)):(console.log("start up a dynamic thread to handle request"),Fw(0));sr(!1,"socket-routed");return}o.requests++;let l=i.fd;if(l>=0)o.postMessage({port:e,fd:l,data:c});else{let u=i._socket||new dd.Socket({handle:i,writable:!0,readable:!0});z_e(u,o,e)}sr(!0,"socket-routed")})},dS.info(`HarperDB ${q1.packageJson.version} Server running on port ${e}`)),n.on("error",s=>{console.error("Error in socket server",s)}),process.env._UNREF_SERVER&&n.unref(),n}function $w(e,t){let r,n=0;for(let s of ld){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=lS)return lS=i,t(r);n=i}lS=0,t(r)}function V_e(e,t){let r={};e.getpeername(r);let n=r.address,s=fd.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);$w(e,o=>{fd.set(n,{worker:o,lastUsed:i}),t(o)})}function K_e(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new dd.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",o=>{n.readStop();let l=o.toString("latin1").match(t)?.[1],u=fd.get(l),f=Date.now();if(u&&u.worker.threadId!==-1)return u.lastUsed=f,s(u.worker);$w(n,d=>{fd.set(l,{worker:d,lastUsed:f}),s(d,o)})})}a(r,"findByHeaderAffinity")}function Y1(){lS=0;for(let e of ld)e.expectedIdle=e.recentELU.idle+Y_e,e.requests=1;ld.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function z_e(e,t,r){let n=W_e++;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(),uS.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")),uS.delete(n)),s.event=="destroy"&&(e.destroy(),uS.delete(n))})}var Ns,dd,dS,fS,F1,G1,q1,ld,ud,$1,H1,Hw,V1,kw,q_e,Gw,lS,k1,fd,Y_e,uS,W_e,Vw=be(()=>{Ns=U(rt()),dd=require("net");H();dS=U(j()),fS=require("fs");Ci();F1=require("worker_threads"),G1=U(qu()),q1=U(_t()),ld=[],ud=[],$1=[],Hw=0,V1=[];F1.isMainThread&&(process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)}),(0,Ns.onMessageFromWorkers)(e=>{e.type===HT.RESTART&&kw&&(clearInterval(kw),K1())}));q_e=6e5;a($_e,"startHTTPThreads");a(K1,"licenseWarning");a(Fw,"startHTTPWorker");a(qw,"startSocketServer");lS=0;a($w,"findMostIdleWorker");k1=36e5,fd=new Map;a(V_e,"findByRemoteAddressAffinity");a(K_e,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of fd)r.lastUsed+k1<e&&fd.delete(t)},k1).unref();Y_e=1e3;a(Y1,"updateWorkerIdleness");(0,Ns.setMonitorListener)(Y1);uS=new Map,W_e=1;a(z_e,"proxySocket")});var J1=P((UDe,j1)=>{"use strict";var Q_e=require("cluster"),hl=ce();hl.initSync();var Q1=(H(),D(q)),Co=j(),j_e=require("fastify"),J_e=require("@fastify/cors"),X_e=require("@fastify/compress"),Z_e=require("@fastify/static"),ehe=rb(),the=require("path"),{PACKAGE_ROOT:rhe}=_t(),nhe=Gs(),she=ae(),ihe=qn(),ohe=qu(),{server:ahe}=($r(),D(ic)),{authHandler:che,handlePostRequest:lhe,serverErrorHandler:uhe,reqBodyValidationHandler:dhe}=aS(),{registerContentHandlers:fhe}=(Xi(),D(gA)),_he=6e4,hhe=1024*1024*1024,phe="TRUE",{CONFIG_PARAMS:Ah}=Q1,_d;j1.exports={hdbServer:z1,start:z1};async function z1(e){try{Co.debug("In Fastify server"+process.cwd()),Co.debug(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Co.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=Q_e.isMaster,await Ehe();let t=e.securePort>0;_d=mhe(t),await _d.ready(),e||(e={}),e.isOperationsServer=!0;try{ahe.http(_d.server,e),_d.server.closeIdleConnections||await _d.listen({port:0,host:"::"})}catch(r){throw _d.close(),Co.error(r),Co.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),Co.fatal(t),process.exit(1)}}a(z1,"operationsServer");async function Ehe(){Co.trace("Configuring HarperDB process."),nhe.setSchemaDataToGlobal(),await ihe.setUsersWithRolesCache(),await ohe.getLicense()}a(Ehe,"setUp");function mhe(e){Co.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=ghe(e),r=j_e(t);r.server.headersTimeout=The(),r.setErrorHandler(uhe);let n=She();n&&r.register(J_e,n),r.register(function(i,o,c){i.setNotFoundHandler(function(l,u){r.server.emit("unhandled",l.raw,u.raw)}),c()}),r.register(ehe),r.register(X_e),r.register(Z_e,{root:the.join(rhe,"studio/build-local")}),fhe(r);let s=hl.get(Q1.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!she.isEmpty(s)&&s.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[dhe,che],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),lhe(i,o)}),r.get("/health",()=>"HarperDB is running."),Co.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(mhe,"buildServer");function ghe(e){let t=hl.get(Ah.OPERATIONSAPI_NETWORK_TIMEOUT),r=hl.get(Ah.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:hhe,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}a(ghe,"getServerOptions");function She(){let e=hl.get(Ah.OPERATIONSAPI_NETWORK_CORS),t=hl.get(Ah.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===phe)&&(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(She,"getCORSOpts");function The(){return hl.get(Ah.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??_he}a(The,"getHeaderTimeoutConfig")});var Jw={};Be(Jw,{disableNATS:()=>Rhe,publishToStream:()=>ES,setNATSReplicator:()=>Yw,setPublishToStream:()=>yhe,setSubscription:()=>jw,start:()=>Ahe});function Ahe(){Rh.default.get(B.CLUSTERING_ENABLED)&&Ohe()}function Rhe(e=!0){rK=e}function yhe(e,t){ES=e,jw=t}function Ohe(){if(rK||process.env._DISABLE_NATS)return;let e=Je(),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];Yw(s,r,i)}}Yc((r,n)=>{Yw(r.tableName,r.databaseName,r),n&&sK(r)}),!X1&&(X1=!0)}function Yw(e,t,r){if(t==="system"&&Nhe.includes(e))return;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 qr{static{a(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this.getId(),record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this.getId()})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this.getId(),record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this.getId(),record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this.getId()})}static defineSchema(i){sK(i)}static subscribe(){let i=new Mn;return jw(t,e,i),i}static subscribeOnThisThread(i){return i<(Rh.default.get(B.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??bhe)}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 hS(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=nK;return i}a(n,"getNATSTransaction")}function sK(e){let t=Rh.default.get(B.CLUSTERING_NODENAME);ES(`${zw.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,Qw.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 Z1,zw,Qw,eK,tK,Rh,pS,rK,ES,jw,bhe,nK,X1,Nhe,hS,Ww,iK=be(()=>{De();ta();Z1=U(Er()),zw=U(Ot()),Qw=U(io());Ul();eK=U(Tb()),tK=U(an()),Rh=U(ce());H();pS=U(j());a(Ahe,"start");a(Rhe,"disableNATS");ES=Z1.publishToStream,jw=eK.setSubscription;a(yhe,"setPublishToStream");bhe=2;a(Ohe,"assignReplicationSource");Nhe=["hdb_job","hdb_analytics","hdb_raw_analytics","hdb_info","hdb_license"];a(Yw,"setNATSReplicator");a(sK,"publishSchema");hS=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=Rh.default.get(B.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writes_by_db){let o=[],c=[],l,u;for(let f of i){let d=f.table,h=f.operation=="put"?"upsert":f.operation;l||(pS.trace(`Sending transaction event ${h}`),u=l={operation:h,schema:s,table:d,__origin:{user:this.user?.username,timestamp:t,node_name:r}},l.hash_values=c,h!=="delete"&&h!=="invalidate"&&(l.records=o)),l.table===d&&l.operation===h?(o.push(f.record),c.push(f.id)):u=u.next={operation:h,table:d,id:f.id,record:f.record},f.expiresAt&&(u.expiresAt=f.expiresAt)}l&&n.push(ES(`${zw.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,Qw.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(f=>{throw pS.error("An error has occurred trying to replicate transaction",l,f),f.statusCode=504,f}))}return Promise.all(n)}},Ww=class extends hS{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,tK.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};nK=new Ww});async function uK({clientId:e,user:t,clean:r,will:n,keepalive:s}){let i;if(e&&!r){let o=await Xw.get(e,{returnNonexistent:!0});i=new tI(e,t,o),o&&(i.sessionWasPresent=!0)}else{if(e){let o=await Xw.get(e);o&&o.delete()}i=new gS(e,t)}return n&&(n.id=e,n.user={username:t?.username},yh.put(n)),s&&(i.keepalive=s,i.receivedPacket()),i}function Zw(){return mS++,mS>65500&&(mS=1),mS}function eI(e,t,r){let{topic:n,retain:s}=e;e.data=t,e.async=!0,r.authorize=!0;let i=pi.getMatch(n,"mqtt");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 yt(r,()=>s?t===void 0?o.delete(e,r):o.put(e,e.data,r):o.publish(e,e.data,r))}var aK,Ua,cK,lK,oK,Xw,yh,mS,gS,tI,dK=be(()=>{De();Gl();aK=U(an()),Ua=U(j());rc();cK=U(rt()),lK=U(Kw());$r();oK=100,Xw=ot({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"}]}}]}),yh=ot({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,cK.getWorkerIndex)()===0&&(async()=>{await lK.when_components_loaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of yh.search({})){let t=e.data,r={...e};r.user?.username&&(r.user=await je.getUser(r.user.username));try{await eI(r,t,r)}catch{(0,Ua.warn)("Failed to publish will",t)}yh.delete(e.id)}})();a(uK,"getSession");mS=1;a(Zw,"getNextMessageId");gS=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;request;socket;subscriptions=[];awaitingAcks;sessionWasPresent;keepalive;keepaliveTimer;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,n){let{topic:s,rh:i,startTime:o}=t,c=s.indexOf("?"),l,u;if(c>-1?(l=s.slice(c),u=s.slice(0,c)):u=s,!u)throw new Error("No topic provided");if(u.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");let f=this.subscriptions.find(T=>T.topic===s),d;f?(d=i>0,f.end(),this.subscriptions.splice(this.subscriptions.indexOf(f),1)):d=i===2;let h={search:l,async:!0,user:this.user,startTime:o,omitCurrent:d,url:""};o&&(0,Ua.trace)("Resuming subscription from",s,"from",o);let _=pi.getMatch(u,"mqtt");if(!_){let T=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw T.statusCode=404,T}if(h.url=_.relativeURL,h.url.indexOf("+")>-1||h.url.indexOf("#")>-1){let T=h.url.slice(1);if(T.indexOf("#")>-1&&T.indexOf("#")!==T.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(h.isCollection=!0,T.indexOf("+")===T.length-1)h.onlyChildren=!0,h.url="/"+T.slice(0,T.length-1);else{let m=T.split("/"),A;for(let F=0;F<m.length;F++)if(m[F].indexOf("+")>-1)if(m[F]==="+")A=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&A)throw new Error("Filters can not be combined");let w=!0;m[m.length-1]==="#"&&(m.length--,w=!1),A&&(n=a(F=>{let G=F.id;if(!Array.isArray(G)||w&&G.length!==m.length)return!1;for(let K=0;K<m.length;K++)if(m[K]!=="+"&&m[K]!==G[K])return!1;return!0},"filter"));let M=m.indexOf("+");h.url="/"+(M>-1?m.slice(0,M):m).concat("").join("/")}}let p=_.path,S=_.Resource,g=await yt(h,async()=>{let T=this.createContext();T.topic=s,T.retainHandling=i;let m=await S.subscribe(h,T);if(!m)return;if(!m[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);let A=(async()=>{for await(let w of m)try{let M;if(w.type&&w.type!=="put"&&w.type!=="delete"&&w.type!=="message"&&w.type!=="patch"||n&&!n(w))continue;r?(w.topic=s,M=this.needsAcknowledge(w)):(w.acknowledge?.(),M=Zw());let F=w.id;if(Array.isArray(F)&&(F=Fl(F)),F==null&&(F=""),await this.listener(p+"/"+F,w.value,M,t)===!1)break;this.awaitingAcks?.size>oK?await new Promise(K=>setTimeout(K,this.awaitingAcks.size-oK)):await new Promise(setImmediate)}catch(M){(0,Ua.warn)(M)}})();return m});if(g)return g.topic=s,g.qos=t.qos,this.subscriptions.push(g),g}resume(){}needsAcknowledge(t){let r=Zw();return t.acknowledge&&(this.awaitingAcks||(this.awaitingAcks=new Map),this.awaitingAcks.set(r,{acknowledge:t.acknowledge})),r}acknowledge(t){let r=this.awaitingAcks?.get(t);r&&(this.awaitingAcks.delete(t),r.acknowledge())}async removeSubscription(t){let r=this.subscriptions.find(n=>n.topic===t);if(r)return r.end(),this.subscriptions.splice(this.subscriptions.indexOf(r),1),!0}async publish(t,r){return eI(t,r,this.createContext())}createContext(){let t={session:this,socket:this.socket,user:this.user,authorize:!0};return this.request&&(t.request=this.request,t.url=this.request.url,t.headers=this.request.headers),t}setListener(t){this.listener=t}disconnect(t){this.keepaliveTimer&&clearTimeout(this.keepaliveTimer);let r=this.createContext();yt(r,async()=>{try{if(!t){let n=await yh.get(this.sessionId);n?.doesExist()&&await eI(n,n.data,r)}}finally{await yh.delete(this.sessionId)}}).catch(n=>{(0,Ua.warn)(`Error publishing MQTT will for ${this.sessionId}`,n)});for(let n of this.subscriptions)n.end();this.subscriptions=[]}receivedPacket(){this.keepalive&&(clearTimeout(this.keepaliveTimer),this.keepaliveTimer=setTimeout(()=>{this.socket?.destroy?this.socket.destroy(new Error("Keepalive timeout")):this.socket?.terminate()},this.keepalive*1500))}};a(eI,"publish");tI=class extends gS{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.localTime):null)}resumeSubscription(t,r,n){return super.addSubscription(t,r,n)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=Zw(),n={topic:t.topic,timestamp:t.localTime};return t.acknowledge&&(n.acknowledge=t.acknowledge),this.awaitingAcks.set(r,n),r}acknowledge(t){let r=this.awaitingAcks?.get(t);if(!r)return;this.awaitingAcks?.delete(t),r.acknowledge?.();let n=r.topic;for(let[,s]of this.awaitingAcks)if(s.topic===n&&s.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===n){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,Ua.trace)("Received ack",n,r.timestamp),this.sessionRecord.update();return}}for(let s of this.sessionRecord.subscriptions)s.topic===n&&(s.startTime=r.timestamp);this.sessionRecord.update()}async addSubscription(t,r){await this.resumeSubscription(t,r);let{qos:n,startTime:s}=t;return n>0&&!s&&this.saveSubscriptions(),t.qos}removeSubscription(t){let r=this.subscriptions.find(s=>s.topic===t),n=super.removeSubscription(t);return r.qos>0&&this.saveSubscriptions(),n}saveSubscriptions(){this.sessionRecord.subscriptions=this.subscriptions.map(t=>{let r=t.startTime;return r||(r=t.startTime=(0,aK.getNextMonotonicTime)()),(0,Ua.trace)("Added durable subscription",t.topic,r),{qos:t.qos,topic:t.topic,startTime:r}}),Xw.put(this.sessionRecord)}}});var nI={};Be(nI,{bypassAuth:()=>whe,start:()=>Ihe});function whe(){EK=!0}function Ihe({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){e.mqtt||(e.mqtt={requireAuthentication:i,sessions:new Set,events:new pK.EventEmitter},e.mqtt.events.on("error",()=>{}));let o=e.mqtt,c=[],l=r?.mtls;return n&&(c=e.ws((u,f,d,h)=>{if(f.headers.get("sec-websocket-protocol")!=="mqtt")return h(u,f,d);o.events.emit("connection",u),lr.debug?.("Received WebSocket connection for MQTT from",u._socket.remoteAddress);let{onMessage:_,onClose:p}=_K(u,S=>{u.send(S)},f,Promise.resolve(d).then(()=>f?.user),o);u.on("message",_),u.on("close",p),u.on("error",S=>{lr.info?.("WebSocket error",S)})},{...n})),(t||s)&&c.push(e.socket(async u=>{let f;if(o.events.emit("connection",u),lr.debug?.(`Received ${u.getCertificate?"SSL":"TCP"} connection for MQTT from ${u.remoteAddress}`),l){if(u.authorized)try{let _=l.user;if(_!==null){(_===void 0||_==="Common Name"||_==="CN")&&(_=u.getPeerCertificate().subject.CN);try{f=await e.getUser(_,null,null),(0,hd.get)(B.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&TS.notify?.({username:f?.username,status:Us.SUCCESS,type:zo.AUTHENTICATION,auth_strategy:"MQTT mTLS",remote_address:u.remoteAddress})}catch(p){throw(0,hd.get)(B.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&TS.error?.({username:_,status:Us.FAILURE,type:zo.AUTHENTICATION,auth_strategy:"mqtt",remote_address:u.remoteAddress}),p}}else lr.debug?.("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",u.remoteAddress)}catch(_){o.events.emit("error",_,u),lr.error?.(_)}else if(l.required)return lr.info?.(`Unauthorized connection attempt, no authorized client certificate provided, error: ${u.authorizationError}`),u.end()}!f&&EK&&u.remoteAddress.includes("127.0.0.1")&&(f=await(0,hK.getSuperUser)(),lr.debug?.("Auto-authorizing local connection",f?.username));let{onMessage:d,onClose:h}=_K(u,_=>u.write(_),null,f,o);u.on("data",d),u.on("close",h),u.on("error",_=>{lr.info?.("Socket error",_)})},{port:t,securePort:s,mtls:l})),c}function _K(e,t,r,n,s){fK||(fK=!0,o_(d=>{SS>0&&d.push({metric:"mqtt-connections",connections:SS,byThread:!0})}));let i;SS++;let o,c={protocolVersion:4},l=(0,AS.parser)({protocolVersion:5});function u(d){l.parse(d)}a(u,"onMessage");function f(){SS--,i||(i=!0,o?.disconnect?.(),s.events.emit("disconnected",o,e),s.sessions.delete(o),Wn(!1,"connection","mqtt","disconnect"),lr.debug?.("MQTT connection was closed",e.remoteAddress))}return a(f,"onClose"),l.on("packet",async d=>{n?.then&&(n=await n);let h=d.cmd;if(o)o.then&&await o;else if(h!=="connect"){lr.info?.("Received packet before connection was established, closing connection"),e?.destroy?e.destroy():e?.terminate();return}let _=d.topic,p=_?.indexOf("/",1),S=p>0?_.slice(0,p):_;sr(d.length,"bytes-received",S,T(d),"mqtt");try{switch(o?.receivedPacket?.(),h){case"connect":if(c.protocolVersion=d.protocolVersion,d.username)try{n=await je.getUser(d.username,d.password.toString(),r),(0,hd.get)(B.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&TS.notify?.({username:n?.username,status:Us.SUCCESS,type:zo.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch(ie){return(0,hd.get)(B.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&TS.error?.({username:d.username,status:Us.FAILURE,type:zo.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),s.events.emit("auth-failed",d,e,ie),Wn(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return s.events.emit("auth-failed",d,e),Wn(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(d,n),d.will){let ie=e.deserialize||(e.deserialize=Ji(r?.headers.get?.("content-type")));d.will.data=d.will.payload?.length>0?ie(d.will.payload):void 0,delete d.will.payload}o=uK({user:n,...d}),o=await o,o.socket=e,r&&(o.request=r),s.sessions.add(o)}catch(ie){return lr.error?.(ie),s.events.emit("auth-failed",d,e,ie),Wn(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:ie.code||5,returnCode:ie.code||128})}s.events.emit("connected",o,e),Wn(!0,"connection","mqtt","connect"),g({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0});let A=a(async(ie,X,re,z)=>{try{if(i)throw new Error("Session disconnected while trying to send message to",ie);let he=ie.indexOf("/",1),Te=he>0?ie.slice(0,he):ie;g({cmd:"publish",topic:ie,payload:await m(X),messageId:re||Math.floor(Math.random()*1e8),qos:z.qos},Te);let Ie=e._socket??e;return Ie.writableNeedDrain?new Promise(pe=>Ie.once("drain",pe)):!Ie.closed}catch(he){return lr.error?.(he),o?.disconnect(),s.sessions.delete(o),!1}},"listener");o.setListener(A),o.sessionWasPresent&&await o.resume();break;case"subscribe":let w=[];for(let ie of d.subscriptions){let X;try{let re=await o.addSubscription(ie,ie.qos>=1);X=re?re.qos||0:c.protocolVersion<5?128:143}catch(re){s.events.emit("error",re,e,ie,o),re.statusCode?re.statusCode===500?lr.warn?.(re):lr.info?.(re):lr.error?.(re),X=c.protocolVersion<5?128:re.statusCode===403?135:re.statusCode===404?143:128}w.push(X)}await o.committed,g({cmd:"suback",granted:w,messageId:d.messageId});break;case"unsubscribe":{let ie=[];for(let X of d.unsubscriptions)ie.push(o.removeSubscription(X)?0:17);g({cmd:"unsuback",granted:ie,messageId:d.messageId});break}case"pubrel":g({cmd:"pubcomp",messageId:d.messageId,reasonCode:0});return;case"publish":let M=d.qos===2?"pubrec":"puback",F=e.deserialize||(e.deserialize=Ji(r?.headers.get?.("content-type"))),K=(d.payload?.length||0)>0?F(d.payload):void 0,ee;try{ee=await o.publish(d,K)}catch(ie){s.events.emit("error",ie,e,d,o),lr.warn?.(ie),d.qos>0&&g({cmd:M,messageId:d.messageId,reasonCode:128},d.topic);break}d.qos>0&&g({cmd:M,messageId:d.messageId,reasonCode:ee===!1?144:0},d.topic);break;case"pubrec":g({cmd:"pubrel",messageId:d.messageId,reasonCode:0});break;case"pubcomp":case"puback":o.acknowledge(d.messageId);break;case"pingreq":g({cmd:"pingresp"});break;case"disconnect":i=!0,o?.disconnect(!0),s.events.emit("disconnected",o,e),s.sessions.delete(o),Wn(!0,"connection","mqtt","disconnect"),lr.debug?.("Received disconnect command, closing MQTT session",e.remoteAddress),e.close?e.close():e.end();break}}catch(A){s.events.emit("error",A,e,d,o),lr.error?.(A),g({cmd:"disconnect"})}function g(A,w){let M=(0,AS.generate)(A,c);t(M),sr(M.length,"bytes-sent",w,T(A),"mqtt")}a(g,"sendPacket");function T(A){return A.qos>0?A.cmd+",qos="+A.qos:A.cmd}a(T,"packetMethodName");function m(A){return sa(A,r)}a(m,"serialize")}),l.on("error",d=>{lr.warn("MQTT parsing error, closing connection:",d.message),e?.destroy?e.destroy():e?.terminate()}),{onMessage:u,onClose:f}}var AS,hK,hd,rI,pK,TS,lr,EK,fK,SS,mK=be(()=>{AS=require("mqtt-packet");dK();hK=U(qn());Xi();Ci();$r();hd=U(ce());H();rI=U(Qi()),pK=require("events"),TS=(0,rI.loggerWithTag)("auth-event"),lr=(0,rI.loggerWithTag)("mqtt"),EK=(0,hd.get)(B.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(whe,"bypassAuth");a(Ihe,"start");SS=0;a(_K,"onSocket")});var SK={};Be(SK,{Request:()=>sI,createReuseportFd:()=>RS});var gK,sI,iI,oI,RS,aI=be(()=>{gK=require("os"),sI=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 oI(t.headers)}get absoluteURL(){return this.protocol+"://"+this.host+this.url}get pathname(){let t=this.url.indexOf("?");return t>-1?this.url.slice(0,t):this.url}set pathname(t){let r=this.url.indexOf("?");r>-1?this.url=t+this.url.slice(r):this.url=t}get protocol(){return this._nodeRequest.socket.encrypted?"https":"http"}get ip(){return this._nodeRequest.socket.remoteAddress}get authorized(){return this._nodeRequest.socket.authorized}get peerCertificate(){return this._nodeRequest.socket.getPeerCertificate()}get mtlsConfig(){return this._nodeRequest.socket.server.mtlsConfig}get body(){return this.#e||(this.#e=new iI(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}sendEarlyHints(t,r={}){r.link=t,this._nodeResponse.writeEarlyHints(r)}},iI=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}pipe(t,r){return this.#e.pipe(t,r)}},oI=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)}delete(t){delete this.asObject[t.toLowerCase()]}forEach(t){for(let[r,n]of this)t(n,r,this)}};(0,gK.platform)()!="win32"&&(RS=require("node-unix-socket").createReuseportFd)});var ih={};Be(ih,{component_errors:()=>Ed,getComponentName:()=>Mhe,loadComponent:()=>OS,loadComponentDirectories:()=>OK,setErrorReporter:()=>Lhe});function OK(e,t){t&&(lI=t),e&&(fI=e);let r=[];if((0,ut.existsSync)(cI)){let s=(0,ut.readdirSync)(cI,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Et.join)(cI,o);r.push(OS(c,lI,LT,!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(OS(n,lI,n,!1,null,!!process.env.DEV_MODE)),Promise.all(r).then(()=>{bK=!0})}function Lhe(e){bh=e}async function OS(e,t,r,n,s,i){let o=(0,ut.realpathSync)(e);if(yS.has(o))return yS.get(o);yS.set(o,!0),s&&(fI=s);try{let c;n&&(Ed=new Map);let l=(0,Et.join)(e,"harperdb-config.yaml");(0,ut.existsSync)(l)?c=n?(0,NS.getConfigObj)():(0,uI.parseDocument)((0,ut.readFileSync)(l,"utf8")).toJSON():!n&&(0,ut.existsSync)(l=(0,Et.join)(e,"config.yaml"))?c=(0,uI.parseDocument)((0,ut.readFileSync)(l,"utf8")).toJSON():c=_I;let u=(0,Et.join)(e,"node_modules","harperdb");try{pl.isMainThread&&(n||(0,ut.existsSync)(u)&&(0,ut.realpathSync)(dI.PACKAGE_ROOT)!==(0,ut.realpathSync)(u))&&((0,ut.rmSync)(u,{recursive:!0,force:!0}),(0,ut.existsSync)((0,Et.join)(e,"node_modules"))||(0,ut.mkdirSync)((0,Et.join)(e,"node_modules")),(0,ut.symlinkSync)(dI.PACKAGE_ROOT,u,"dir"))}catch(h){pd.default.error("Error symlinking harperdb module",h)}let f=bS,d=n;for(let h in c){bS=h;let _=c[h];if(Ed.set(n?h:(0,Et.basename)(e),!1),!_)continue;let p,S=_.package;try{if(S){let w=e,M;for(;!(0,ut.existsSync)(M=(0,Et.join)(w,"node_modules",h));)if(w=(0,Et.dirname)(w),w.length<(0,yK.getHdbBasePath)().length){M=null;break}if(M)p=await OS(M,t,r,!1),d=!0;else throw new Error(`Unable to find package ${h}:${S}`)}else p=Dhe[h];if(!p)continue;let g=a(w=>(w.origin=r,ot(w)),"ensureTable"),T=_.network||(_.port||_.securePort)&&_,m=T?.securePort||T?.https&&T.port,A=!T?.https&&T?.port;if(pl.isMainThread&&(p=await p.startOnMainThread?.({server:je,ensureTable:g,port:A,securePort:m,resources:t,..._})||p,n&&T))for(let w of[A,m])try{if(+w&&!TK.includes(w)){let M=hI.get(B.HTTP_SESSIONAFFINITY);M&&pd.default.warn("Session affinity is not recommended and may cause memory leaks"),(M||!RS)&&(TK.push(w),qw(w,M))}}catch(M){console.error("Error listening on socket",w,M,h)}if(t.isWorker&&(p=await p.start?.({server:je,ensureTable:g,port:A,securePort:m,resources:t,..._})||p),fI.set(p,!0),(p.handleFile||p.handleDirectory||p.setupFile||p.setupDirectory)&&_.files!=null){if(_.files.includes(".."))throw(0,RK.handleHDBError)("Can not reference parent directories");let w=(0,Et.join)(e,_.files).replace(/\\/g,"/"),M=w.indexOf("/*");if(M>-1&&_.files!==_I[h]?.files&&!(0,ut.existsSync)(w.slice(0,M)))throw new Error(`The path '${w.slice(0,M)}' does not exist and cannot be used as the base of the resolved 'files' path value '${_.files}'`);let F=(0,Et.basename)(e),G=_.path||"/";G=G.startsWith("/")?G:G.startsWith("./")?"/"+F+G.slice(2):G==="."?"/"+F:"/"+F+"/"+G;let K,ee,ie;if(_.root){let re=_.root;re.startsWith("/")&&(re=re.slice(1)),re.endsWith("/")&&(re=re.slice(0,-1)),re+="/",ee=(0,Et.join)(e,re)}else(ie=w.indexOf("/*"))>-1?(ee=w.slice(0,ie+1),K=(0,Et.relative)(e,ee)):_.files.indexOf("/")>-1&&(ee=w.slice(0,w.lastIndexOf("/")+1),K=(0,Et.relative)(e,ee));let X=!1;if(pl.isMainThread&&p.setupDirectory&&(X=await p.setupDirectory?.(G,ee,t)),t.isWorker&&p.handleDirectory&&(X=await p.handleDirectory?.(G,ee,t)),X){d=!0;continue}for(let re of await(0,AK.default)(w,{onlyFiles:!1,objectMode:!0})){let{path:z,dirent:he}=re;d=!0;let Te=(0,Et.relative)(e,z).replace(/\\/g,"/");if(K)if(Te.startsWith(K))Te=Te.slice(K.length+1);else throw new Error(`The root path '${_.root}' does not reference a valid part of the file path '${Te}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`);let Ie=G+(G.endsWith("/")?"":"/")+Te;try{if(he.isFile()){let pe=await Phe(z);pl.isMainThread&&await p.setupFile?.(pe,Ie,z,t),t.isWorker&&await p.handleFile?.(pe,Ie,z,t)}else pl.isMainThread&&await p.setupDirectory?.(Ie,z,t),t.isWorker&&await p.handleDirectory?.(Ie,z,t)}catch(pe){pe.message=`Could not load ${he.isFile()?"file":"directory"} '${z}'${_.module?" using '"+_.module+"'":""} for application '${e}' due to: ${pe.message}`,bh?.(pe),((0,md.getWorkerIndex)()===0?console:pd.default).error(pe),t.set(_.path||"/",new ra(pe)),Ed.set(n?h:(0,Et.basename)(e),pe.message)}}}}catch(g){g.message=`Could not load component '${h}' for application '${(0,Et.basename)(e)}' due to: ${g.message}`,bh?.(g),((0,md.getWorkerIndex)()===0?console:pd.default).error(g),t.set(_.path||"/",new ra(g),null,!0),Ed.set(n?h:(0,Et.basename)(e),g.message)}}if(bS=f,pl.isMainThread&&!bK&&i&&(0,md.watchDir)(e,async()=>OK()),c.extensionModule){let h=await WE((0,Et.join)(e,c.extensionModule));return yS.set(o,h),h}if(!d&&t.isWorker){let h=`${e} did not load any modules, resources, or files, is this a valid component?`;bh?.(new Error(h)),((0,md.getWorkerIndex)()===0?console:pd.default).error(h),Ed.set((0,Et.basename)(e),h)}}catch(c){console.error(`Could not load application directory ${e}`,c),c.message=`Could not load application due to ${c.message}`,bh?.(c),t.set("",new ra(c))}}var ut,Et,pl,uI,hI,dI,AK,md,pd,RK,yK,Che,NS,Phe,cI,fI,bK,lI,Ed,Dhe,_I,TK,yS,bh,bS,Mhe,oh=be(()=>{ut=require("fs"),Et=require("path"),pl=require("worker_threads"),uI=require("yaml"),hI=U(ce()),dI=U(_t());H();aD();DD();cx();fx();_x();Qx();D1();B1();AK=U(require("fast-glob")),md=U(rt()),pd=U(j());Fy();$r();RK=U(_e());De();Vw();yK=U(ce()),Che=U(J1());wg();iK();_s();mK();NS=U(wt());aI();iA();({readFile:Phe}=ut.promises),cI=(0,NS.resolvePath)(hI.get(B.COMPONENTSROOT)),fI=new Map,Ed=new Map;a(OK,"loadComponentDirectories");Dhe={REST:ZE,rest:ZE,graphql:TA,graphqlSchema:cA,roles:ky,jsResource:qy,fastifyRoutes:xw,login:Vy,static:Bw,operationsApi:Che,customFunctions:{},http:{},clustering:Jw,replication:Aa,authentication:eh,mqtt:nI},_I={rest:!0,graphqlSchema:{files:"*.graphql"},roles:{files:"roles.yaml"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(_I,"static",{value:{files:"web/**"}});TK=[],yS=new Map;a(Lhe,"setErrorReporter");Mhe=a(()=>bS,"getComponentName");a(OS,"loadComponent")});var _S=P((fLe,wK)=>{var{isMainThread:NK}=require("worker_threads"),{getTables:vhe,getDatabases:uLe,table:dLe}=(De(),D(nt)),{loadComponentDirectories:Uhe,loadComponent:xhe}=(oh(),D(ih)),{resetResources:Bhe}=(Gl(),D(nD)),Hhe=MN(),khe=wt(),{dirname:Fhe}=require("path"),{getConnection:Ghe}=Er(),qhe=ce(),{CONFIG_PARAMS:$he}=(H(),D(q)),{loadCertificates:Vhe}=Js(),pI=new Map;async function Khe(e=!1){!NK&&qhe.get($he.CLUSTERING_ENABLED)&&Ghe();try{NK&&await Hhe()}catch(n){console.error(n)}let t=Bhe();vhe(),t.isWorker=e,await Vhe(),await xhe(Fhe(khe.getConfigFilePath()),t,"hdb",!0,pI),await Uhe(pI,t);let r=[];for(let[n]of pI)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}a(Khe,"loadRootComponents");wK.exports.loadRootComponents=Khe});var rt=P((hLe,si)=>{"use strict";PT();var{Worker:Yhe,MessageChannel:Whe,parentPort:Ui,isMainThread:TI,threadId:zhe,workerData:xi}=require("worker_threads"),{PACKAGE_ROOT:Qhe}=_t(),{join:DK,isAbsolute:jhe,extname:Jhe}=require("path"),{server:LK}=($r(),D(ic)),{watch:Xhe,readdir:Zhe}=require("fs/promises"),{totalmem:IK}=require("os"),gd=(H(),D(q)),MK=ce(),Bi=j(),{randomBytes:epe}=require("crypto"),{_assignPackageExport:tpe}=ui(),CK=1024*1024,xa=[],ws=[],rpe=50,AI=1e4,npe="restart",vK="request_thread_info",UK="resource_report",xK="thread_info",BK="added-port",spe="ack",EI;tpe("threads",ws);si.exports={startWorker:mI,restartWorkers:yI,shutdownWorkers:lpe,workers:xa,setMonitorListener:mpe,onMessageFromWorkers:upe,onMessageByType:VK,broadcast:fpe,broadcastWithAcknowledgement:hpe,setChildListenerByType:cpe,getWorkerIndex:HK,getWorkerCount:kK,getTicketKeys:GK,setMainIsWorker:ope,setTerminateTimeout:ipe,restartNumber:xi?.restartNumber||1};ws.onMessageByType=VK;ws.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=ws.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};si.exports.whenThreadsStarted=new Promise(e=>{si.exports.threadsHaveStarted=e});var RI;function ipe(e){AI=e}a(ipe,"setTerminateTimeout");function HK(){return xi?xi.workerIndex:RI?0:void 0}a(HK,"getWorkerIndex");function kK(){return xi?xi.workerCount:RI?1:void 0}a(kK,"getWorkerCount");function ope(e){RI=e,si.exports.threadsHaveStarted()}a(ope,"setMainIsWorker");var FK=1,wS;function GK(){return wS||(wS=TI?epe(48):xi.ticketKeys,wS)}a(GK,"getTicketKeys");Object.defineProperty(LK,"workerIndex",{get(){return HK()}});Object.defineProperty(LK,"workerCount",{get(){return kK()}});var qK={[vK](e,t){ppe(t)},[UK](e,t){Epe(t,e)}};function mI(e,t={}){let r=process.constrainedMemory?.()||IK();r=Math.min(r,IK(),2e4*CK);let n=MK.get(gd.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/CK/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],o=[];for(let l of ws){let u=new Whe;u.existingPort=l,i.push(u),o.push(u.port2)}Jhe(e)||(e+=".js");let c=new Yhe(jhe(e)?e:DK(Qhe,e),{resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:["--enable-source-maps"],argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(l=>l.existingPort.threadId),workerIndex:t.workerIndex,workerCount:FK=t.threadCount,name:t.name,restartNumber:si.exports.restartNumber,ticketKeys:GK()},transferList:o,...t});for(let{port1:l,existingPort:u}of i)u.postMessage({type:BK,port:l,threadId:c.threadId},[l]);return CS(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>mI(e,t),c.on("error",l=>{Bi.error(`Worker index ${t.workerIndex} error:`,l)}),c.on("exit",l=>{xa.splice(xa.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<rpe?(t.unexpectedRestarts=c.unexpectedRestarts+1,mI(e,t)):Bi.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",l=>{qK[l.type]?.(l,c)}),xa.push(c),Spe(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(mI,"startWorker");var ape=[gd.THREAD_TYPES.HTTP];async function yI(e=null,t=Math.max(FK>3,1),r=!0){if(TI){if(r){let{loadRootComponents:o}=_S();await o()}si.exports.restartNumber++,t<1&&(t=t*xa.length);let n=[],s=[];for(let o of xa.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;Bi.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:si.exports.restartNumber,type:gd.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=ape.indexOf(o.name)>-1,l=new Promise(u=>{let f=setTimeout(()=>{Bi.warn("Thread did not voluntarily terminate, terminating from the outside",o.threadId),o.terminate()},AI*2).unref();o.on("exit",()=>{clearTimeout(f),n.splice(n.indexOf(l)),!c&&r&&o.startCopy(),u()})});if(n.push(l),c&&r){let u=o.startCopy(),f=new Promise(d=>{let h=a(_=>{_.type===gd.ITC_EVENT_TYPES.CHILD_STARTED&&(Bi.trace("Worker has started",u.threadId),d(),s.splice(s.indexOf(f)),u.off("message",h))},"startListener");Bi.trace("Waiting for worker to start",u.threadId),u.on("message",h)});s.push(f),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}=Qu();r&&(e==="http"||!e)&&MK.get(gd.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else Ui.postMessage({type:npe,workerType:e})}a(yI,"restartWorkers");function cpe(e,t){qK[e]=t}a(cpe,"setChildListenerByType");function lpe(e){return yI(e,1/0,!1)}a(lpe,"shutdownWorkers");var $K=[];function upe(e){$K.push(e)}a(upe,"onMessageFromWorkers");var gI=new Map;function VK(e,t){let r=gI.get(e);r||gI.set(e,r=[]),r.push(t)}a(VK,"onMessageByType");var dpe=10;async function fpe(e,t){let r=0;for(let n of ws)try{n.postMessage(e),r++>dpe&&(r=0,await new Promise(setImmediate))}catch(s){Bi.error("Unable to send message to worker",s)}t&&YK(e,null)}a(fpe,"broadcast");var IS=new Map,_pe=1;function hpe(e){return new Promise(t=>{let r=0;for(let n of ws)try{let s=_pe++,i=a(()=>{IS.delete(s),--r===0&&t(),n!==Ui&&--n.refCount===0&&n.unref()},"ack_handler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,IS.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,o]of IS)o.port===n&&o()})),n.postMessage(e),r++}catch(s){Bi.error("Unable to send message to worker",s)}r===0&&t()})}a(hpe,"broadcastWithAcknowledgement");function ppe(e){e.postMessage({type:xK,workers:KK()})}a(ppe,"sendThreadInfo");function KK(){let e=Date.now();return xa.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(KK,"getChildWorkerInfo");function Epe(e,t){e.resources=t,e.resources.updated=Date.now()}a(Epe,"recordResourceReport");var SI;function mpe(e){SI=e}a(mpe,"setMonitorListener");var gpe=1e3,PK=!1;function Spe(){PK||(PK=!0,setInterval(()=>{for(let e of xa){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}SI&&SI()},gpe).unref())}a(Spe,"startMonitoring");var Tpe=1e3;if(Ui&&xi?.addPorts){CS(Ui);for(let e=0,t=xi.addPorts.length;e<t;e++){let r=xi.addPorts[e];r.threadId=xi.addThreadIds[e],CS(r)}setInterval(()=>{let e=process.memoryUsage();Ui.postMessage({type:UK,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Tpe).unref(),EI=a(()=>new Promise((e,t)=>{Ui.on("message",r),Ui.postMessage({type:vK});function r(n){n.type===xK&&(Ui.off("message",r),e(n.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else EI=KK;si.exports.getThreadInfo=EI;function CS(e,t){ws.push(e),e.on("message",r=>{if(r.type===BK)r.port.threadId=r.threadId,CS(r.port);else if(r.type===spe){let n=IS.get(r.id);n&&n()}else YK(r,e)}).on("close",()=>{ws.splice(ws.indexOf(e),1)}).on("exit",()=>{ws.splice(ws.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(CS,"addPort");function YK(e,t){for(let n of $K)n(e,t);let r=gI.get(e.type);if(r)for(let n of r)try{n(e,t)}catch(s){Bi.error(s)}}a(YK,"notifyMessageListeners");if(TI){let e,t,r=new Set,n=a(async(s,i)=>{i&&(e=i);for(let o of await Zhe(s,{withFileTypes:!0}))o.isDirectory()&&o.name!=="node_modules"&&n(DK(s,o.name));try{for await(let{filename:o}of Xhe(s,{persistent:!1}))r.add(o),t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await yI(),console.log("Reloaded HarperDB components, changed files:",Array.from(r)),r.clear()},100)}catch(o){console.warn("Error trying to watch component directory",s,o)}},"watch_dir");si.exports.watchDir=n,process.env.WATCH_DIR&&n(process.env.WATCH_DIR)}else Ui.on("message",async e=>{let{type:t}=e;t===gd.ITC_EVENT_TYPES.SHUTDOWN&&(si.exports.restartNumber=e.restartNumber,Ui.unref(),setTimeout(()=>{Bi.warn("Thread did not voluntarily terminate",zhe),process.exit(0)},AI).unref())})});var w0={};Be(w0,{ACTION_32_BIT:()=>Vp,ACTION_64_BIT:()=>ype,AUDIT_STORE_OPTIONS:()=>Q_,Decoder:()=>Kc,HAS_BLOBS:()=>Bs,HAS_CURRENT_RESIDENCY_ID:()=>fc,HAS_EXPIRATION_EXTENDED_TYPE:()=>Ef,HAS_ORIGINATING_OPERATION:()=>pf,HAS_PREVIOUS_RESIDENCY_ID:()=>_c,REMOTE_SEQUENCE_UPDATE:()=>Pm,createAuditEntry:()=>Vl,getLastRemoved:()=>sO,openAuditStore:()=>MS,readAuditEntry:()=>bt,removeAuditEntry:()=>vS,setAuditRetention:()=>Rpe,transactionKeyEncoder:()=>tY});function MS(e){let t=e.auditStore=e.openDB(bI.AUDIT_STORE_NAME,{create:!1,...Q_});t||(t=e.auditStore=e.openDB(bI.AUDIT_STORE_NAME,Q_),zK(t,1)),t.rootStore=e,t.tableStores=[];let r=[];t.addDeleteRemovalCallback=function(i,o,c){return r[i]=c,t.tableStores[i]=o,t.deleteCallbacks=r,{remove(){delete r[i]}}};let n=null;function s(i=PS){clearTimeout(n),n=setTimeout(async()=>{if(t.rootStore.status==="closed"||t.rootStore.status==="closing")return;let o=0,c,l;try{for(let{key:u,value:f}of t.getRange({start:1,snapshot:!1,end:Date.now()-OI})){try{c=vS(t,u,f)}catch(d){Sd.warn("Error removing audit entry",d)}if(l=u,await new Promise(setImmediate),++o>=Ape){i=10;break}}await c}finally{o===0?i=Math.min(i<<1,OI/10):zK(t,l),s(i)}},i).unref()}if(a(s,"scheduleAuditCleanup"),t.scheduleAuditCleanup=s,(0,Nh.getWorkerIndex)()===(0,Nh.getWorkerCount)()-1&&s(PS),(0,Nh.getWorkerIndex)()===0&&!WK)for(let i of t.getKeys({reverse:!0,limit:1}))i>Date.now()&&(WK=!0,Sd.error("The current time is before the last recorded entry in the audit log. Time reversal can undermine the integrity of data tracking and certificate validation and the time must be corrected."));return t}function vS(e,t,r){let n=bpe(r),s;if(n&Bs){s=bt(r);let i=e.tableStores[s.tableId];i.getEntry(s.recordId).version!==s.version&&uc(()=>eo(s.getValue(i)),i.rootStore)}if((n&15)===NI){s=s||bt(r);let i=s.tableId;e.tableStores[s.tableId].getEntry(s.recordId).version===s.version&&e.deleteCallbacks?.[i]?.(s.recordId,s.version)}return e.remove(t)}function zK(e,t){wI[0]=t,e.put(Symbol.for("last-removed"),rY)}function sO(e){let t=e.get(Symbol.for("last-removed"));if(t)return rY.set(t),wI[0]}function Rpe(e,t=PS){OI=e,PS=t}function Vl(e,t,r,n,s,i,o,c,l,u,f,d,h){let _=nY[o];if(!_)throw new Error(`Invalid audit entry type ${o}`);let p=1;if(n&&(n>1?Ba.setFloat64(0,n):Is.set(PA),p=9),l){if(l&255)throw new Error("Illegal extended type");p+=3}T(s),T(t),g(r),Ba.setFloat64(p,e),p+=8,l&fc&&T(u),l&_c&&T(f),l&Ef&&(Ba.setFloat64(p,d),p+=8),l&pf&&T(sY[h]),i?g(i):Is[p++]=0,l?Ba.setUint32(n?8:0,_|l|3221225472):Is[n?8:0]=_;let S=Is.subarray(0,p);if(c)return Buffer.concat([S,c]);return S;function g(m){let A=p;p+=1,p=(0,El.writeKey)(m,Is,p);let w=p-A-1;w>127?w>16383?(Sd.error("Key or username was too large for audit entry",m),p=A+1,Is[A]=0):(Is.copyWithin(A+2,A+1,p),Ba.setUint16(A,w|32768),p++):Is[A]=w}function T(m){m<128?Is[p++]=m:m<16384?(Ba.setUint16(p,m|32768),p+=2):m<1056964608?(Ba.setUint32(p,m|3221225472),p+=4):(Is[p]=255,Ba.setUint32(p+1,m),p+=5)}}function bpe(e){let t=0;e[0]==66&&(t=8);let r=e[t];if(r<128)return r;let n=e.dataView||(e.dataView=new Kc(e.buffer,e.byteOffset,e.byteLength));return n.position=t,n.readInt()}function bt(e,t=0,r=void 0){try{let n=e.dataView||(e.dataView=new Kc(e.buffer,e.byteOffset,e.byteLength));n.position=t;let s;e[n.position]==66&&(s=n.readFloat64());let i=n.readInt(),o=n.readInt(),c=n.readInt(),l=n.readInt(),u=n.position,f=n.position+=l,d=n.readFloat64(),h,_,p,S;if(i&fc&&(h=n.readInt()),i&_c&&(_=n.readInt()),i&Ef&&(p=n.readFloat64()),i&pf){let m=n.readInt();S=sY[m]}l=n.readInt();let g=n.position,T=n.position+=l;return{type:nY[i&7],tableId:c,nodeId:o,get recordId(){return(0,El.readKey)(e,u,f)},getBinaryRecordId(){return e.subarray(u,f)},version:d,previousLocalTime:s,get user(){return T>g?(0,El.readKey)(e,g,T):void 0},get encoded(){return t?e.subarray(t,r):e},getValue(m,A,w){if(i&DS||i&Oh&&!A)return uc(()=>m.decoder.decode(e.subarray(n.position,r)),m.rootStore);if(i&Oh&&w)return by(m.getEntry(this.recordId),w,m)},getBinaryValue(){return i&(DS|Oh)?e.subarray(n.position,r):void 0},extendedType:i,residencyId:h,previousResidencyId:_,expiresAt:p,originatingOperation:S}}catch(n){return Sd.error("Reading audit entry error",n,e),{}}}var El,LS,bI,Nh,eY,Sd,Is,Ba,tY,Q_,OI,Ape,wI,rY,PS,WK,DS,Oh,QK,NI,jK,JK,XK,ZK,Vp,ype,Pm,fc,_c,pf,Ef,Bs,nY,sY,Kc,Zi=be(()=>{El=require("ordered-binary"),LS=U(ce()),bI=U(Mt());H();Nh=U(rt()),eY=U(ae());Kl();Sd=U(j());vE();cs();(0,LS.initSync)();Is=Buffer.alloc(2816),Ba=new DataView(Is.buffer,Is.byteOffset,2816),tY={writeKey(e,t,r){return e===hf?(t.set(hf,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,El.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,El.readKey)(e,t,r)}},Q_={encoding:"binary",keyEncoder:tY},OI=(0,eY.convertToMS)((0,LS.get)(B.LOGGING_AUDITRETENTION))||86400*3,Ape=1e3,wI=new Float64Array(1),rY=new Uint8Array(wI.buffer),PS=1e4,WK=!1;a(MS,"openAuditStore");a(vS,"removeAuditEntry");a(zK,"updateLastRemoved");a(sO,"getLastRemoved");a(Rpe,"setAuditRetention");DS=16,Oh=32,QK=1,NI=2,jK=3,JK=4,XK=5,ZK=6,Vp=14,ype=15,Pm=11,fc=512,_c=1024,pf=2048,Ef=4096,Bs=8192,nY={put:QK|DS,[QK]:"put",delete:NI,[NI]:"delete",message:jK|DS,[jK]:"message",invalidate:JK|Oh,[JK]:"invalidate",patch:XK|Oh,[XK]:"patch",relocate:ZK,[ZK]:"relocate"},sY={insert:1,update:2,upsert:3,1:"insert",2:"update",3:"upsert"};a(Vl,"createAuditEntry");a(bpe,"readAction");a(bt,"readAuditEntry");Kc=class extends DataView{static{a(this,"Decoder")}position=0;readInt(){let t;return t=this.getUint8(this.position++),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(t){throw t.message=`Error reading float64: ${t.message} at position ${this.position}`,t}}}});function PI(e,t,r,n,s){let i=e.primaryStore.env.path,o=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=oY,Ope(e.primaryStore,e.auditStore)):(c=iY,e.primaryStore.env.hasSubscriptionCommitListener||(e.primaryStore.env.hasSubscriptionCommitListener=!0,e.primaryStore.on("committed",()=>{aY(iY[i])})));let l=c[i]||(c[i]=[]);if(l.auditStore=e.auditStore,l.lastTxnTime==null&&(l.lastTxnTime=Date.now()),s?.scope==="full-database")return;let u=l[o];u||(u=l[o]=new Map,u.envs=l,u.tableId=o,u.store=e.primaryStore),t=Fl(t);let f=new CI(r);f.startTime=n;let d=u.get(t);return d?d.push(f):(u.set(t,d=[f]),d.tables=u,d.key=t),f.subscriptions=d,f}function aY(e){if(!e)return;let t=e.auditStore;t.resetReadTxn(),cY(e.auditStore);let r;for(let{key:n,value:s}of t.getRange({start:e.lastTxnTime,exclusiveStart:!0})){e.lastTxnTime=n;let i=bt(s),o=e[i.tableId];if(!o)continue;let c=i.recordId,l=Fl(c),u=0;do{let f=o.get(l);if(f){for(let h of f)if(!(u>0&&!(h.includeDescendants&&!(h.onlyChildren&&u>1)))){if(h.startTime>=n){(0,II.info)("omitting",c,h.startTime,n);continue}try{let _;h.supportsTransactions&&h.txnInProgress!==i.version&&(_=!0,h.txnInProgress||(r?r.push(h):r=[h]),h.txnInProgress=i.version),h.listener(c,i,n,_)}catch(_){console.error(_),(0,II.info)(_)}}}if(l==null)break;let d=l.lastIndexOf?.("/",l.length-2);d>-1?l=l.slice(0,d):l=null,u++}while(!0)}if(r)for(let n of r)n.txnInProgress=null,n.listener(null,{type:"end_txn"},e.lastTxnTime,!0)}function Ope(e,t){let r=t||e,n=r.env;if(!n.hasAfterCommitListener){n.hasAfterCommitListener=!0;let s=n.path;r.on("aftercommit",({next:i,last:o,txnId:c})=>{let l=oY[s];if(!l)return;let u=a(()=>{r.threadLocalWrites||(r.threadLocalWrites=new Float64Array(r.getUserSharedBuffer("last-thread-local-write",new ArrayBuffer(8)))),l.txnTime=r.threadLocalWrites[0]||Date.now();try{aY(l)}finally{r.threadLocalWrites[0]=l.lastTxnTime,r.unlock("thread-local-writes")}},"acquiredLock");r.attemptLock("thread-local-writes",u)&&u()})}}function cY(e){e.nextTransaction?.resolve();let t;e.nextTransaction=new Promise(r=>{t=r}),e.nextTransaction.resolve=t}function QH(e){return e.nextTransaction||(PI({primaryStore:e,auditStore:e},null,null,0,{scope:"full-database"}),cY(e)),e.nextTransaction}var II,iY,oY,CI,iO=be(()=>{II=U(j());Ul();Gl();Zi();iY=Object.create(null),oY=Object.create(null);a(PI,"addSubscription");CI=class extends Mn{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;if(t){let 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(aY,"notifyFromTransactionData");a(Ope,"listenToCommits");a(cY,"nextTransaction");a(QH,"whenNextTransaction")});var Ew={};Be(Ew,{EVICTED:()=>ea,INVALIDATED:()=>as,coerceType:()=>BS,makeTable:()=>kS,setServerUtilities:()=>Mpe});function kS(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:o,databaseName:c,auditStore:l,schemaDefined:u,dbisDB:f,sealed:d,splitSegments:h,replicate:_}=e,{expirationMS:p,evictionMS:S,audit:g,trackDeletes:T}=e,{attributes:m}=e;m||(m=[]);let A=MA(i,n,l),w,M,F={},G=Promise.resolve(),K,ee,ie;for(let W of m)(W.assignCreatedTime||W.name==="__createdtime__")&&(K=W),(W.assignUpdatedTime||W.name==="__updatedtime__")&&(ee=W),W.expiresAt&&(ie=W),W.isPrimaryKey&&(F=W);let X,re=[],z=[],he=1,Te=2,Ie={},pe={},Ft=864e5,Gt,Jt,fr,Md=!1,za,yT=new Map,bT=new Map,Dt,vd,Ud=Ad.get(B.REPLICATION_DATABASES);if(Array.isArray(Ud)){for(let W of Ud)if(W.name===c&&W.replicateTo>=0){vd=W.replicateTo;break}}let OT=i.getRange({start:!1,end:!1}).constructor,rp=10,xd=6;g&&Fd();class Le extends qr{#e;#t;#n;#r;#s;#i;static name=s;static primaryStore=i;static auditStore=l;static primaryKey=t;static tableName=s;static tableId=n;static indices=r;static audit=g;static databasePath=o;static databaseName=c;static attributes=m;static replicate=_;static sealed=d;static splitSegments=h??!0;static createdTimeProperty=K;static updatedTimeProperty=ee;static propertyResolvers;static userResolvers={};static sources=[];static get expirationMS(){return p}static dbisDB=f;static schemaDefined=u;static sourcedFrom(E,O){if(O&&(this.sourceOptions=O,(O.expiration||O.eviction||O.scanInterval)&&this.setTTLExpiration(O)),O?.intermediateSource)E.intermediateSource=!0,this.sources.unshift(E);else{if(this.sources.some(I=>!I.intermediateSource)){if(this.sources.some(I=>I.name===E.name))return;throw new Error("Can not have multiple canonical (non-intermediate) sources")}this.sources.push(E)}M=M||E.get&&(!E.get.reliesOnPrototype||E.prototype.get),w=w||E.load;let R=a(I=>{let L=this.sources;if(L=L.filter(x=>x.intermediateSource&&x[I]&&(!x[I].reliesOnPrototype||x.prototype[I])),L.length>0)if(L.length===1){let x=L[0];return(N,v,$)=>{if(N?.source!==x)return x[I](v,$,N)}}else return(x,N,v)=>{let $=[];for(let Y of L){if(x?.source===Y)break;$.push(Y[I](N,v,x))}return Promise.all($)}},"getApplyToIntermediateSource"),y=this.sources[this.sources.length-1];y.intermediateSource&&(y={});let b=a(I=>{if(y[I]&&(!y[I].reliesOnPrototype||y.prototype[I]))return(L,x,N)=>{if(!L?.source)return y[I](x,N,L)}},"getApplyToCanonicalSource");Ie={put:b("put"),patch:b("patch"),delete:b("delete"),publish:b("publish")},pe={put:R("put"),patch:R("patch"),delete:R("delete"),publish:R("publish"),invalidate:R("invalidate")};let C=y.shouldRevalidateEvents;return(async()=>{let I=!1,L,x=a(async(N,v)=>{let $=N.value,Y=N.table?$e[c][N.table]:Le;if(c===UT&&(N.table===dp.ROLE_TABLE_NAME||N.table===dp.USER_TABLE_NAME)&&(I=!0),N.id===void 0&&(N.id=$[Y.primaryKey],N.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(N));N.source=E;let ne={residencyId:Yo(N.residencyList),isNotification:!0,ensureLoaded:!1,nodeId:N.nodeId},k=await Y.getResource(N.id,v,ne);switch(N.finished&&await N.finished,N.type){case"put":return C?k._writeInvalidate(ne):k._writeUpdate($,!0,ne);case"patch":return C?k._writeInvalidate(ne):k._writeUpdate($,!1,ne);case"delete":return k._writeDelete(ne);case"publish":return k._writePublish($,ne);case"invalidate":return k._writeInvalidate(ne);case"relocate":return k._writeRelocate(ne);default:xe.default.error?.("Unknown operation",N.type,N.id)}},"writeUpdate");try{let N=E.subscribe;N&&T==null&&(T=!0);let v={crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0},$=E.subscribeOnThisThread?E.subscribeOnThisThread((0,ml.getWorkerIndex)(),v):(0,ml.getWorkerIndex)()===0,Y=N&&$&&await E.subscribe?.(v);if(Y){let ne;for await(let k of Y)try{if(!(k.type==="transaction"?k.writes[0]:k)){xe.default.error?.("Bad subscription event",k);continue}if(k.source=E,k.type==="end_txn"){if(ne?.resolve(),k.localTime&&L!==k.localTime){if(k.remoteNodeIds?.length>0){let le=[Symbol.for("seq"),k.remoteNodeIds[0]],se=f.get(le),Q=se?.nodes;Q||(Q=[]);for(let Ee of k.remoteNodeIds.slice(1)){let ye=Q.find(Me=>Me.id===Ee);Q=Q.filter(Me=>Me.id!==Ee||Me===ye),ye||(ye={id:Ee,seqId:0},Q.push(ye)),ye.seqId=Math.max(se?.seqId??1,k.localTime),Ee===ne?.nodeId&&(ye.lastTxnTime=k.timestamp)}let fe=Math.max(se?.seqId??1,k.localTime);xe.default.trace?.("Received txn",c,new Date(fe),new Date(k.localTime),k.remoteNodeIds),f.put(le,{seqId:fe,nodes:Q})}L=k.localTime}k.onCommit&&ne?.committed.then(k.onCommit);continue}if(ne)if(k.beginTxn)ne.resolve();else{ne.write_promises.push(x(k,ne));continue}!k.timestamp&&k.version&&(k.timestamp=k.version);let oe=yt(k,()=>{if(k.type==="transaction"){let le=[];for(let se of k.writes)try{le.push(x(se,k))}catch(Q){throw Q.message+=" writing "+JSON.stringify(se)+" of event "+JSON.stringify(k),Q}return Promise.all(le)}else if(k.type==="define_schema"){let le=this.attributes.slice(0),se;for(let Q of k.attributes)le.find(fe=>fe.name===Q.name)||(le.push(Q),se=!0);se&&(ot({table:s,database:c,attributes:le,origin:"cluster"}),Ih.signalSchemaChange(new Ch.SchemaEventMsg(process.pid,$t.CREATE_TABLE,c,s)))}else return k.beginTxn?(ne=k,ne.write_promises=[x(k,k)],new Promise(le=>{ne.resolve=()=>le(Promise.all(ne.write_promises))})):x(k,k)});ne&&(ne.committed=oe),I&&oe&&!oe?.waitingForUserChange&&(oe.then(()=>Ih.signalUserChange(new Ch.UserEventMsg(process.pid))),oe.waitingForUserChange=!0),k.onCommit&&(oe?oe.then(k.onCommit):k.onCommit())}catch(ve){xe.default.error?.("error in subscription handler",ve)}}}catch(N){xe.default.error?.(N)}})(),this}static get isCaching(){return M}static get shouldRevalidateEvents(){return this.prototype.get!==Le.prototype.get}static getResource(E,O,R){let y=super.getResource(E,O,R);if(E!=null){Ir(E);try{if(y.getRecord?.())return y;if(typeof E=="object"&&E&&!Array.isArray(E))throw new Error(`Invalid id ${JSON.stringify(E)}`);let b=!R?.async||i.cache?.get?.(E),C=mt(O),I=C.getReadTxn();if(I?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return Dn(E,O,{transaction:I,ensureLoaded:R?.ensureLoaded},b,L=>{if(L?Le._updateResource(y,L):y.#e=null,O.onlyIfCached&&O.noCacheStore){if(!y.doesExist())throw new wr.ServerError("Entry is not cached",504)}else if(R?.ensureLoaded){let x=np(E,L,O,y);if(x)return C?.disregardReadTxn(),y.#i=!0,LI(x,N=>(Le._updateResource(y,N),y))}return y})}catch(b){throw b.message.includes("Unable to serialize object")&&(b.message+=": "+JSON.stringify(E)),b}}return y}static _updateResource(E,O){E.#r=O,E.#e=O?.value??null,E.#n=O?.version}ensureLoaded(){let E=np(this.getId(),this.#r,this.getContext());if(E)return this.#i=!0,LI(E,O=>{this.#r=O,this.#e=O.value,this.#n=O.version})}static getNewId(){let E=F?.type;if(E==="String"||E==="ID")return super.getNewId();if(!Dt){let b=i.getEntry(Symbol.for("id_allocation")),C=b?.value,I;if(C&&C.nodeName===server.hostname&&(!Upe(i)||C.pid===process.pid)){let L=C.start,x=C.end;I=L;for(let N of i.getKeys({start:x,end:L,limit:1,reverse:!0}))I=N}else C=y(b?.version??null),I=C.start;Dt=new BigInt64Array([BigInt(I)+1n]),Dt=new BigInt64Array(i.getUserSharedBuffer("id",Dt.buffer)),Dt.maxSafeId=C.end}let O=Number(Atomics.add(Dt,0,1n)),R=E==="Int"?512:1048576;if(O+R>=Dt.maxSafeId){let b=a(C=>{Dt.maxSafeId=O+(E==="Int"?1023:4194303);let I=(E==="Int"?Math.pow(2,31):Math.pow(2,49))-1,L=C?void 0:i.useReadTransaction(),x=Number(Dt[0]);for(let $ of i.getKeys({start:x+1,end:I,limit:1,transaction:L}))I=$;L?.done();let{value:N,version:v}=i.getEntry(Symbol.for("id_allocation"));if(Dt.maxSafeId<I){if(N.end>Dt.maxSafeId-100)return;xe.default.info?.("New id allocation",O,Dt.maxSafeId,v),i.put(Symbol.for("id_allocation"),{start:N.start,end:Dt.maxSafeId,nodeName:server.hostname,pid:process.pid},Date.now(),v)}else{xe.default.warn?.(`Id conflict detected, starting new id allocation range, attempting to allocate to ${Dt.maxSafeId}, but id of ${I} detected`);let $=y(v);$.alreadyUpdated||Atomics.store(Dt,0,BigInt($.start+1)),Dt.maxSafeId=$.end}},"updateEnd");O+R===Dt.maxSafeId?setImmediate(b):O+100>=Dt.maxSafeId&&(xe.default.warn?.(`Synchronous id allocation required on table ${s}${E=="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`),i.transactionSync(()=>b(!0)))}return O;function y(b){let C=(E==="Int"?Math.pow(2,31):Math.pow(2,49))-1,I=C/4,L,x,N=!1,v,$;do{v=Math.floor(Math.random()*C),$={start:v,end:v+(E==="Int"?1024:4194304),nodeName:server.hostname,pid:process.pid},L=0;for(let Y of i.getKeys({start:v,limit:1,reverse:!0}))L=Y;x=C;for(let Y of i.getKeys({start:v+1,end:C,limit:1}))x=Y;I*=.875,I<1e3&&!N&&(N=!0,xe.default.error?.(`Id allocation in table ${s} is very dense, limited safe range of numbers to allocate ids in${E==="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`,v,L,x,I))}while(!(I<x-v&&(I<v-L||L===0)));return i.transactionSync(()=>{let Y=i.getEntry(Symbol.for("id_allocation"));return(Y?.version??null)==b?(xe.default.info?.("Allocated new id range",$),i.put(Symbol.for("id_allocation"),$,Date.now()),$):(xe.default.debug?.("Looks like ids were already allocated"),{alreadyUpdated:!0,...Y.value})})}}static setTTLExpiration(E){if(typeof E=="number")p=E*1e3,S||(S=0);else if(E&&typeof E=="object")p=E.expiration*1e3,S=(E.eviction||0)*1e3,Ft=E.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(p<0)throw new Error("Expiration can not be negative");Ft=Ft||(p+S)/4,Ko()}static getResidencyRecord(E){return f.get([Symbol.for("residency_by_id"),E])}static setResidency(E){Le.getResidency=E}static setResidencyById(E){Le.getResidencyById=E}static getResidency(E,O,R){if(Le.getResidencyById)return Le.getResidencyById(E[t]);let y=vd;if(O.replicateTo!=null){if(Array.isArray(O.replicateTo))return O.replicateTo.includes(server.hostname)?O.replicateTo:[server.hostname,...O.replicateTo];O.replicateTo>=0&&(y=O.replicateTo)}if(y>=0&&server.nodes){let b=[server.hostname];if(R)b.push(...R.slice(0,y));else{let C=server.nodes.map(x=>x.name),I=Math.floor(C.length*Math.random());b.push(...C.slice(I,I+y));let L=I+y-C.length;L>0&&b.push(...C.slice(0,L))}return b}}static enableAuditing(E=!0){g=E,E&&Fd(),Le.audit=E}static coerceId(E){return E===""?null:BS(E,F)}static async dropTable(){delete $e[c][s];for(let E of i.getRange({versions:!0,snapshot:!1,lazy:!0}))E.metadataFlags&Bs&&E.value&&eo(E.value);if(c===o){for(let E of m)f.remove(Le.tableName+"/"+E.name),r[E.name]?.drop();f.remove(Le.tableName+"/"),i.drop(),await f.committed}else console.log("legacy dropTable"),await i.close(),await xS.default.remove(data_path),await xS.default.remove(data_path===standard_path?data_path+MDB_LOCK_FILE_SUFFIX:path.join(path.dirname(data_path),MDB_LEGACY_LOCK_FILE_NAME));Ih.signalSchemaChange(new Ch.SchemaEventMsg(process.pid,$t.DROP_TABLE,c,s))}get(E){if(typeof E=="string")return this.getProperty(E);if(this.isCollection)return this.search(E);if(this.getId()===null){if(E?.conditions)return this.search(E);let O=Le.getRecordCount();return{recordCount:O.recordCount,estimatedRecordRange:O.estimatedRange,records:"./",name:s,database:c,auditSize:l?.getStats().entryCount,attributes:m}}if(E?.property)return this.getProperty(E.property);if(this.doesExist()||E?.ensureLoaded===!1||this.getContext()?.returnNonexistent)return this}allowRead(E,O){let R=Qa(E);if(R?.read){if(R.isSuperUser)return!0;let y=R.attribute_permissions,b=O?.select;if(y?.length>0||Md&&b){if(O||(O={}),b){let C=y?.length>0&&DI(y,"read");O.select=b.map(I=>{let L=I.name||I;if(!C||C[L]){let x=fr[L]?.definition?.tableClass;if(x){if(I.name||(I={name:I}),!x.prototype.allowRead.call(null,E,I))return!1;if(!I.select)return I.name}return I}}).filter(Boolean)}else O.select=y.filter(C=>C.read&&!fr[C.attribute_name]).map(C=>C.attribute_name);return O}else return!0}}allowUpdate(E,O){let R=Qa(E);if(R?.update){let y=R.attribute_permissions;if(y?.length>0){let b=DI(y,"update");for(let C in O)if(!b[C])return!1;for(let C of y){let I=C.attribute_name;!C.update&&!(I in O)&&(O[I]=this.getProperty(I))}}return Ml(this.getContext())}}allowCreate(E,O){if(this.isCollection){let R=Qa(E);if(R?.insert){let y=R.attribute_permissions;if(y?.length>0){let b=DI(y,"insert");for(let C in O)if(!b[C])return!1;return Ml(this.getContext())}else return Ml(this.getContext())}}else return this.allowUpdate(E,{})}allowDelete(E){return Qa(E)?.delete&&Ml(this.getContext())}update(E,O){if(!mt(this.getContext()))throw new Error("Can not update a table resource outside of a transaction");if(E===!1)return this;let y;return typeof E=="object"&&E&&(O?(Object.isFrozen(E)&&(E={...E}),this.#e={},this.#t=E):(y=this.#t,y&&(E=Object.assign(y,E)),this.#t=E)),this._writeUpdate(this.#t,O),this}addTo(E,O){if(typeof O=="number"||typeof O=="bigint")this.#s===uY?this.set(E,(+this.getProperty(E)||0)+O):(this.#s||this.update(),this.set(E,new BE(O)));else throw new Error("Can not add a non-numeric value")}subtractFrom(E,O){if(typeof O=="number")return this.addTo(E,-O);throw new Error("Can not subtract a non-numeric value")}getMetadata(){return this.#r}getRecord(){return this.#e}getChanges(){return this.#t}_setChanges(E){this.#t=E}setRecord(E){this.#e=E}invalidate(){this._writeInvalidate()}_writeInvalidate(E){let O=this.getContext(),R=this.getId();Ir(R),mt(this.getContext()).addWrite({key:R,store:i,invalidated:!0,entry:this.#r,before:Ie.invalidate?.bind(this,O,R),beforeIntermediate:pe.invalidate?.bind(this,O,R),commit:a((b,C)=>{if(Yi(b,C,E?.nodeId)<=0)return;let I=null;for(let L in r)I||(I={}),I[L]=this.getProperty(L);xe.default.trace?.(`Invalidating entry id: ${R}, timestamp: ${new Date(b).toISOString()}`),A(R,I,this.#r,b,as,g,{user:O?.user,residencyId:E?.residencyId,nodeId:E?.nodeId},"invalidate")},"commit")})}_writeRelocate(E){let O=this.getContext(),R=this.getId();Ir(R),mt(this.getContext()).addWrite({key:R,store:i,invalidated:!0,entry:this.#r,before:Ie.relocate?.bind(this,O,R),beforeIntermediate:pe.relocate?.bind(this,O,R),commit:a((b,C)=>{if(Yi(b,C,E?.nodeId)<=0)return;let I=Le.getResidencyRecord(E.residencyId),L=0,x=null,N=C?.value;if(I&&!I.includes(server.hostname)){for(let v in r)x||(x={}),x[v]=N(v);L=as}else x=N;xe.default.trace?.(`Relocating entry id: ${R}, timestamp: ${new Date(b).toISOString()}`),A(R,x,this.#r,b,L,g,{user:O.user,residencyId:E.residencyId,nodeId:E.nodeId,expiresAt:E.expiresAt},"relocate",!1,null)},"commit")})}static _recordRelocate(E,O){let R={previousResidency:this.getResidencyRecord(E.residencyId),isRelocation:!0},y=this.getResidency(O.value,R),b;if(y){if(!Array.isArray(y))throw new Error("Residency must be an array, but was: "+y);if(!y.includes(server.hostname))return;b=Yo(y)}let I=A(E.key,O.value,E,E.version,0,!0,{residencyId:b,expiresAt:O.expiresAt},"relocate",!1,null)}static evict(E,O,R){let y=this.Source,b;if(!((M||g)&&(!O||(b=i.getEntry(E),!b||!O)||b.version!==R))){if(M){if(i.hasLock(E,b.version))return;let C;for(let I in r)C||(C={}),C[I]=O[I];if(C)return A(E,C,b,R,ea,null,null,null,!0)}if(i.ifVersion(E,R,()=>{Ki(E,O,null)}),g)return A(E,null,b,R,ea,null,null,null,!0);dc(i,b??i.getEntry(E),R)}}lock(){throw new Error("Not yet implemented")}static operation(E,O){return E.table||=s,E.schema||=c,gY.operation(E,O)}put(E){this.update(E,!0)}patch(E){this.update(E,!1)}_writeUpdate(E,O,R){let y=this.getContext(),b=mt(y),C=this.getId();Ir(C);let I=this.#r;this.#s=O?uY:Ppe;let L={key:C,store:i,entry:I,nodeName:y?.nodeName,validate:a(x=>{E||(E=this.#t),O||E&&UE(this.#t===E?this:E)?y?.source||(b.checkOverloaded(),this.validate(E,!O),ee&&(E[ee.name]=ee.type==="Date"?new Date(x):ee.type==="String"?new Date(x).toISOString():x),O&&(t&&E[t]!==C&&(E[t]=C),K&&(I?.value?E[K.name]=I?.value[K.name]:E[K.name]=K.type==="Date"?new Date(x):K.type==="String"?new Date(x).toISOString():x),E=Pc(E))):b.removeWrite(L)},"validate"),before:O?Ie.put?()=>Ie.put(y,C,E):null:Ie.patch?()=>Ie.patch(y,C,E):Ie.put?()=>Ie.put(y,C,Pc(this)):null,beforeIntermediate:O?pe.put?()=>pe.put(y,C,E):null:pe.patch?()=>pe.patch(y,C,E):pe.put?()=>pe.put(y,C,Pc(this)):null,commit:a((x,N,v)=>{if(v){if(y&&N?.version>(y.lastModified||0)&&(y.lastModified=N.version),this.#r=N,N?.value&&N.value.getRecord)throw new Error("Can not assign a record to a record, check for circular references");O||(this.#e=N?.value??null)}this.#t=void 0,this.#n=x;let $=N?.value,Y=E;this.#s=0;let ne=Yi(x,N,R?.nodeId),k;if(ne<=0)if(g){let Q=N.localTime,fe=N.version;xe.default.trace?.("Applying CRDT update to record with id: ",C,"applying later update:",fe);let Ee=[];for(;Q>x||fe>=x&&Q>0;){let ye=l.get(Q);if(!ye)break;let Me=bt(ye);if(fe=Me.version,fe>=x){if(fe===x){if(ne=Yi(x,{version:fe,localTime:Q},R?.nodeId),ne===0)return;if(ne>0)continue}if(Me.type==="patch")Ee.push(Me),k=E;else if(Me.type==="put"||Me.type==="delete")return}Q=Me.previousLocalTime}Ee.sort((ye,Me)=>ye.version-Me.version);for(let ye of Ee){let Me=ye.getValue(i);if(Y=ME(Y,Me,O),xe.default.debug?.("Rebuilding update with future patch:",Y),!Y)return}}else{if(O)return;Y=ME(Y,$,O),xe.default.debug?.("Rebuilding update without audit:",Y)}let ve;if(O?ve=Y:(this.#e=$,ve=Pc(this,Y)),this.#e=ve,ve&&ve.getRecord)throw new Error("Can not assign a record to a record, check for circular references");let oe;if(R?.residencyId!=null)oe=R.residencyId;else{I?.residencyId&&(y.previousResidency=Le.getResidencyRecord(I.residencyId));let Q=Le.getResidency(ve,y);if(Q){if(!Array.isArray(Q))throw new Error("Residency must be an array, got: "+Q);Q.includes(server.hostname)||Q.push(server.hostname)}oe=Yo(Q)}O||(k=E);let le=y?.expiresAt??(p?p+Date.now():-1);xe.default.trace?.(`Saving record with id: ${C}, timestamp: ${new Date(x).toISOString()}${le?", expires at: "+new Date(le).toISOString():""}${N?", replaces entry from: "+new Date(N.version).toISOString():", new entry"}`,ve),Ki(C,$,ve);let se=O?"put":"patch";A(C,ve,N,x,0,g,{user:y?.user,residencyId:oe,expiresAt:le,nodeId:R?.nodeId,originatingOperation:y?.originatingOperation},se,!1,k),y.expiresAt&&Ko()},"commit")};b.addWrite(L)}async delete(E){if(typeof E=="string")return this.deleteProperty(E);if(this.isCollection){for await(let O of this.search(E))(await Le.getResource(O[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(E);return}return this.#e?this._writeDelete(E):!1}_writeDelete(E){let O=mt(this.getContext()),R=this.getId();Ir(R);let y=this.getContext();return O.addWrite({key:R,store:i,entry:this.#r,nodeName:y?.nodeName,before:Ie.delete?.bind(this,y,R),beforeIntermediate:pe.delete?.bind(this,y,R),commit:a((b,C,I)=>{let L=C?.value;I&&(y&&C?.version>(y.lastModified||0)&&(y.lastModified=C.version),Le._updateResource(this,C)),!(Yi(b,C,E?.nodeId)<=0)&&(Ki(this.getId(),L),xe.default.trace?.(`Deleting record with id: ${R}, txn timestamp: ${new Date(b).toISOString()}`),g||T?(A(R,null,this.#r,b,0,g,{user:y?.user,nodeId:E?.nodeId},"delete"),g||Ko()):dc(i,C))},"commit")}),!0}search(E){let O=this.getContext(),R=mt(O);if(!E)throw new Error("No query provided");let y=E.conditions;y?y.length===void 0&&(y=y[Symbol.iterator]?Array.from(y):[y]):y=Array.isArray(E)?E:E[Symbol.iterator]?Array.from(E):[],this.getId()&&(y=[{attribute:null,comparator:Array.isArray(this.getId())?"prefix":"starts_with",value:this.getId()}].concat(y));let b,C={};function I(Q,fe){let Ee;switch(fe){case"and":case void 0:if(Q.length<1)throw new Error('An "and" operator requires at least one condition');Ee=!0;break;case"or":if(Q.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+fe)}for(let ye of Q){if(ye.conditions){ye.conditions=I(ye.conditions,ye.operator);continue}let Me=ye[0]??ye.attribute,et=Me==null?F:hi(m,Me);if(et)(et.type||eA[ye.comparator])&&(ye[1]===void 0?ye.value=x(ye.value,et):ye[1]=x(ye[1],et));else if(Me!=null)throw(0,wr.handleHDBError)(new Error,`${Me} is not a defined attribute`,404);if(ye.chainedConditions)if(ye.chainedConditions.length===1&&(!ye.operator||ye.operator=="and")){let Fr=ye.chainedConditions[0],Cr,Ms;if(Fr.comparator==="gt"||Fr.comparator==="greater_than"||Fr.comparator==="ge"||Fr.comparator==="greater_than_equal"?(Cr=ye,Ms=Fr):(Cr=Fr,Ms=ye),Cr.comparator!=="lt"&&Cr.comparator!=="less_than"&&Cr.comparator!=="le"&&Cr.comparator!=="less_than_equal")throw new Error("Invalid chained condition, only less than and greater than conditions can be chained together");let Ae=Ms.comparator==="ge"||Ms.comparator==="greater_than_equal",Rt=Cr.comparator==="le"||Cr.comparator==="less_than_equal";ye.comparator=(Ae?"ge":"gt")+(Rt?"le":"lt"),ye.value=[Ms.value,Cr.value]}else throw new Error("Multiple chained conditions are not currently supported")}return Q}a(I,"prepareConditions");function L(Q,fe){if(E.enforceExecutionOrder)return Q;for(let Ee of Q)Ee.conditions&&(Ee.conditions=L(Ee.conditions,Ee.operator));return Q.length>1&&fe!=="or"?(0,EY.sortBy)(Q,Cp(Le)):Q}a(L,"orderConditions");function x(Q,fe){return Array.isArray(Q)?Q.map(Ee=>BS(Ee,fe)):BS(Q,fe)}a(x,"coerceTypedValues");let N=E.operator;(y.length>0||N)&&(y=I(y,N));let v=typeof E.sort=="object"&&E.sort,$;if(v&&N!=="or"){let Q=v.attribute;if(Q==null)throw new wr.ClientError("Sort requires an attribute");if(b=y.find(fe=>kl(fe.attribute)===kl(Q)),!b){let fe=hi(m,Q);if(!fe)throw(0,wr.handleHDBError)(new Error,`${Array.isArray(Q)?Q.join("."):Q} is not a defined attribute`,404);if(fe.indexed)b={attribute:Q,comparator:"sort"},y.push(b);else if(y.length===0&&!E.allowFullScan)throw(0,wr.handleHDBError)(new Error,`${Array.isArray(Q)?Q.join("."):Q} is not indexed and not combined with any other conditions`,404)}b&&(b.descending=!!v.descending)}y=L(y,N),v&&(b&&y[0]===b?v.next&&($={dbOrderedAttribute:v.attribute,attribute:v.next.attribute,descending:v.next.descending,next:v.next.next}):(b&&y.splice(y.indexOf(b),1),$=v));let Y=E.select;if(y.length===0&&(y=[{attribute:t,comparator:"greater_than",value:!0}]),E.explain)return{conditions:y,operator:N,postOrdering:$,selectApplied:!!Y};let ne=R.useReadTxn(),k=tA(y,N,Le,ne,E,O,(Q,fe)=>Hd(Q,Y,O,ne,fe),C),ve=E.ensureLoaded!==!1;$||(k=se(k));let oe=Le.transformEntryForSelect(Y,O,ne,C,ve,!0),le=Le.transformToOrderedSelect(k,Y,$,ne,O,oe);function se(Q){return E.offset||E.limit!==void 0?Q.slice(E.offset,E.limit!==void 0?(E.offset||0)+E.limit:void 0):Q}return a(se,"applyOffset"),$&&(le=se(le)),le.onDone=()=>{le.onDone=null,R.doneReadTxn()},le.selectApplied=!0,le.getColumns=()=>{if(Y){let Q=[];for(let fe of Y)fe==="*"?Q.push(...m.map(Ee=>Ee.name)):Q.push(fe.name||fe);return Q}return m.filter(Q=>!Q.computed&&!Q.relationship).map(Q=>Q.name)},le}static transformToOrderedSelect(E,O,R,y,b,C){let I=new OT;if(R){E=Hd(E,O,y,b,null);let L;I.iterate=function(){let N,v=E[Symbol.asyncIterator]?E[Symbol.asyncIterator]():E[Symbol.iterator](),$,Y=R.dbOrderedAttribute,ne,k,ve=!0;function oe(se){let Q=se.next&&oe(se.next),fe=se.descending;return(Ee,ye)=>{let Me=Ll(Ee,se.attribute,y),et=Ll(ye,se.attribute,y),Fr=fe?(0,gl.compareKeys)(et,Me):(0,gl.compareKeys)(Me,et);return Fr===0?Q?.(Ee,ye)||0:Fr}}a(oe,"createComparator");let le=oe(R);return{async next(){let se;if(N)if(se=N.next(),se.done){if($)return I.onDone&&I.onDone(),se}else return{value:await C.call(this,se.value)};L=[],ne&&L.push(ne);do if(se=await v.next(),se.done){if($=!0,L.length)break;return I.onDone&&I.onDone(),se}else{let Q=se.value;if(Q?.then&&(Q=await Q),Y){let fe=Ll(Q,Y,y);if(ve)ve=!1,k=fe;else if(fe!==k){k=fe,ne=Q;break}}L.push(Q)}while(!0);return R.isGrouped,L.sort(le),N=L[Symbol.iterator](),se=N.next(),se.done?(I.onDone&&I.onDone(),se):{value:await C.call(this,se.value)}},return(){I.onDone&&I.onDone(),v.return()},throw(){I.onDone&&I.onDone(),v.throw()}}};let x=a(N=>{if(typeof O=="object"&&Array.isArray(N.attribute))for(let v=0;v<O.length;v++){let $=O[v],Y;if($.name===N.attribute[0]){for(Y=$.sort||($.sort={});Y.next;)Y=Y.next;Y.attribute=N.attribute.slice(1),Y.descending=N.descending}else $===N.attribute[0]&&(O[v]=Y={name:$,sort:{attribute:N.attribute.slice(1),descending:N.descending}})}N.next&&x(N.next)},"applySortingOnSelect");x(R)}else I.iterate=(E[Symbol.asyncIterator]||E[Symbol.iterator]).bind(E),I=I.map(function(L){try{let x=C.call(this,L);return typeof x?.catch=="function"?x.catch(N=>{throw N.partialObject={[t]:L.key},N}):x}catch(x){throw x.partialObject={[t]:L.key},x}});return I}static transformEntryForSelect(E,O,R,y,b,C){if(E&&(E===t||E?.length===1&&E[0]===t&&Array.isArray(E))){let N=a(v=>(O?.transaction?.stale&&(O.transaction.stale=!1),v?.key??v),"transform");return E===t?N:E.asArray?v=>[N(v)]:v=>({[t]:N(v)})}let I;b&&M&&!(typeof E=="string"?[E]:E)?.every(N=>{let v;return typeof N=="object"?v=N.name:v=N,r[v]||v===t})&&(I=!0);let L,x=a(function(N){let v;if(O?.transaction?.stale&&(O.transaction.stale=!1),N!=null){if(v=N.value||N.deref?.()?.value,!v&&(N.key===void 0||N.deref)||N.metadataFlags&as){if(N.metadataFlags&as&&O.replicateFrom===!1&&C&&N.residencyId)return Ha.SKIP;if(N=Dn(N.key??N,O,{transaction:R,lazy:E?.length<4,ensureLoaded:b},this?.isSync,$=>$),N?.then)return N.then(x.bind(this));v=N?.value}if(I&&N?.metadataFlags&(as|ea)||N?.expiresAt!=null&&N?.expiresAt<Date.now()){if(O.onlyIfCached&&O.noCacheStore)return{[t]:N.key,message:"This entry has expired"};let $=np(N.key??N,N,O);if($?.then)return $.then(x)}}if(v==null)return C?Ha.SKIP:v;if(E&&!(E[0]==="*"&&E.length===1)){let $,Y=a((k,ve)=>{let oe;typeof k=="object"?oe=k.name:oe=k;let le=fr?.[oe],se;if(le){let Q=y?.[oe];if(Q)if(Q.hasMappings){let Ee=le.from?v[le.from]:kl(N.key);se=Q.get(Ee),se||(se=[])}else se=Q.fromRecord?.(v);else se=le(v,O,N);let fe=a(Ee=>{if(Ee&&typeof Ee=="object"){let ye=le.definition?.tableClass||Le;L||(L={});let Me=L[oe]||(L[oe]=ye.transformEntryForSelect(oe===k?null:k.select||(Array.isArray(k)?k:null),O,R,Q,b));if(Array.isArray(Ee)){let et=[],Fr=ye.transformToOrderedSelect(Ee,k.select,typeof k.sort=="object"&&k.sort,O,R,Me)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),Cr=a(Ae=>{for(;!Ae.done;){if(Ae?.then)return Ae.then(Cr);et.push(Ae.value),Ae=Fr.next()}ve(et,oe)},"nextValue"),Ms=Cr(Fr.next());Ms&&($||($=[]),$.push(Ms));return}else if(Ee=Me.call(this,Ee),Ee?.then){$||($=[]),$.push(Ee.then(et=>ve(et,oe)));return}}ve(Ee,oe)},"handleResolvedValue");se?.then?($||($=[]),$.push(se.then(fe))):fe(se);return}else se=v[oe],se&&typeof se=="object"&&oe!==k&&(se=Le.transformEntryForSelect(k.select||k,O,R,null)({value:se}));ve(se,oe)},"selectAttribute"),ne;if(typeof E=="string")Y(E,k=>{ne=k});else if(Array.isArray(E))if(E.asArray)ne=[],E.forEach((k,ve)=>{k==="*"?E[ve]=v:Y(k,oe=>ne[ve]=oe)});else{ne={};let k=E.forceNulls;for(let ve of E)if(ve==="*")for(let oe in v)ne[oe]=v[oe];else Y(ve,(oe,le)=>{oe===void 0&&k&&(oe=null),ne[le]=oe})}else throw new wr.ClientError("Invalid select"+E);return $?Promise.all($).then(()=>ne):ne}return v},"transform");return x}async subscribe(E){if(!l)throw new Error("Can not subscribe to a table without an audit log");g||ot({table:s,database:c,schemaDefined:u,attributes:m,audit:!0}),E||(E={});let O=!E.rawEvents,R=[],y=this,b=PI(Le,this.getId()??null,function(I,L,x,N){try{let v=L.getValue?.(i,O),$=L.type;if(!v&&$==="patch"&&O){let ne=i.getEntry(I);ne?.version===L.version?v=ne.value:v=L.getValue?.(i,!0,x),$="put"}let Y={id:I,localTime:x,value:v,version:L.version,type:$,beginTxn:N};R?R.push(Y):this.send(Y)}catch(v){xe.default.error?.(v)}},E.startTime||0,E),C=(async()=>{this.isCollection&&(b.includeDescendants=!0,E.onlyChildren&&(b.onlyChildren=!0)),E.supportsTransactions&&(b.supportsTransactions=!0);let I=this.getId(),L=E.previousCount;L>1e3&&(L=1e3);let x=E.startTime;if(this.isCollection){if(x){if(L)throw new wr.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:N,value:v}of l.getRange({start:x,exclusiveStart:!0,snapshot:!1})){let $=bt(v);if($.tableId!==n)continue;let Y=$.recordId;if(I==null||hY(I,Y)){let ne=$.getValue(i,O,N);if(b.send({id:Y,localTime:N,value:ne,version:$.version,type:$.type}),b.queue?.length>fY&&await b.waitForDrain()===!1)return}b.startTime=N}}else if(L){let N=[];for(let{key:v,value:$}of l.getRange({start:"z",end:!1,reverse:!0}))try{let Y=bt($);if(Y.tableId!==n)continue;let ne=Y.recordId;if(I==null||hY(I,ne)){let k=Y.getValue(i,O,v);if(N.push({id:ne,localTime:v,value:k,version:Y.version,type:Y.type}),--L<=0)break}}catch(Y){xe.default.error("Error getting history entry",v,Y)}for(let v=N.length;v>0;)b.send(N[--v]);N[0]&&(b.startTime=N[0].localTime)}else if(!E.omitCurrent){for(let{key:N,value:v,version:$,localTime:Y}of i.getRange({start:I??!1,end:I==null?void 0:[I,gl.MAXIMUM_KEY],versions:!0,snapshot:!1}))if(v&&(b.send({id:N,localTime:Y,value:v,version:$,type:"put"}),b.queue?.length>fY&&await b.waitForDrain()===!1))return}}else{L&&!x&&(x=0);let N=this.#r?.localTime;if(N===LA&&(i.cache?.delete(I),this.#r=i.getEntry(I),xe.default.trace?.("re-retrieved record",N,this.#r?.localTime),N=this.#r?.localTime),xe.default.trace?.("Subscription from",x,"from",I,N),x<N){let v=[],$=N;do{let Y=l.get($);if(Y){E.omitCurrent=!0;let ne=bt(Y),k=ne.getValue(i,O,$);O&&(ne.type="put"),v.push({id:I,value:k,localTime:$,...ne}),$=ne.previousLocalTime}else break;L&&L--}while($>x&&L!==0);for(let Y=v.length;Y>0;)b.send(v[--Y]);b.startTime=N}!E.omitCurrent&&this.doesExist()&&b.send({id:I,localTime:N,value:this.#e,version:this.#n,type:"put"})}for(let N of R)b.send(N);R=null})();return E.listener&&b.on("data",E.listener),b}static subscribeOnThisThread(E,O){return E===0||O?.crossThreads===!1}doesExist(){return!!(this.#e||this.#s)}publish(E,O){this._writePublish(E,O)}_writePublish(E,O){let R=mt(this.getContext()),y=this.getId()||null;y!=null&&Ir(y);let b=this.getContext();R.addWrite({key:y,store:i,entry:this.#r,nodeName:b?.nodeName,validate:a(()=>{b?.source||(R.checkOverloaded(),this.validate(E))},"validate"),before:Ie.publish?.bind(this,b,y,E),beforeIntermediate:pe.publish?.bind(this,b,y,E),commit:a((C,I,L)=>{I===void 0&&T&&!g&&Ko(),xe.default.trace?.(`Publishing message to id: ${y}, timestamp: ${new Date(C).toISOString()}`),A(y,I?.value??null,I,I?.version||C,0,!0,{user:b?.user,residencyId:O?.residencyId,expiresAt:b?.expiresAt,nodeId:O?.nodeId},"message",!1,E)},"commit")})}validate(E,O){let R,y=a((b,C,I)=>{if(C.type&&b!=null)if(O&&b.__op__&&(b=b.value),C.properties){typeof b!="object"&&(R||(R=[])).push(`Value ${Cs(b)} in property ${I} must be an object${C.type?" ("+C.type+")":""}`);let L=C.properties;for(let x=0,N=L.length;x<N;x++){let v=L[x],$=y(b[v.name],v,I+"."+v.name);$&&(b[v.name]=$)}if(C.sealed&&b!=null&&typeof b=="object")for(let x in b)L.find(N=>N.name===x)||(R||(R=[])).push(`Property ${x} is not allowed within object in property ${I}`)}else switch(C.type){case"Int":(typeof b!="number"||b>>0!==b)&&(R||(R=[])).push(`Value ${Cs(b)} in property ${I} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof b!="number"||!(Math.floor(b)===b&&Math.abs(b)<=9007199254740992))&&(R||(R=[])).push(`Value ${Cs(b)} in property ${I} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof b!="number"&&(R||(R=[])).push(`Value ${Cs(b)} in property ${I} must be a number`);break;case"ID":typeof b=="string"||b?.length>0&&b.every?.(L=>typeof L=="string")||(R||(R=[])).push(`Value ${Cs(b)} in property ${I} must be a string, or an array of strings`);break;case"String":typeof b!="string"&&(R||(R=[])).push(`Value ${Cs(b)} in property ${I} must be a string`);break;case"Boolean":typeof b!="boolean"&&(R||(R=[])).push(`Value ${Cs(b)} in property ${I} must be a boolean`);break;case"Date":if(!(b instanceof Date)){if(typeof b=="string"||typeof b=="number")return new Date(b);(R||(R=[])).push(`Value ${Cs(b)} in property ${I} must be a Date`)}break;case"BigInt":if(typeof b!="bigint"){if(typeof b=="string"||typeof b=="number")return BigInt(b);(R||(R=[])).push(`Value ${Cs(b)} in property ${I} must be a bigint`)}break;case"Bytes":if(!(b instanceof Uint8Array)){if(typeof b=="string")return Buffer.from(b);(R||(R=[])).push(`Value ${Cs(b)} in property ${I} must be a Buffer or Uint8Array`)}break;case"Blob":if(!(b instanceof mi)){if(typeof b=="string"&&(b=Buffer.from(b)),b instanceof Buffer)return createBlob(b,{type:"text/plain"});(R||(R=[])).push(`Value ${Cs(b)} in property ${I} must be a Blob`)}break;case"array":if(Array.isArray(b)){if(C.elements)for(let L=0,x=b.length;L<x;L++){let N=b[L],v=y(N,C.elements,I+"[*]");v&&(b[L]=v)}}else(R||(R=[])).push(`Value ${Cs(b)} in property ${I} must be an Array`);break}C.nullable===!1&&b==null&&(R||(R=[])).push(`Property ${I} is required (and not does not allow null values)`)},"validateValue");for(let b=0,C=m.length;b<C;b++){let I=m[b];if(!(I.relationship||I.computed)&&(!O||I.name in E)){let L=y(E[I.name],I,I.name);L&&(E[I.name]=L)}}if(d)for(let b in E)m.find(C=>C.name===b)||(R||(R=[])).push(`Property ${b} is not allowed`);if(R)throw new wr.ClientError(R.join(". "))}getUpdatedTime(){return this.#n}wasLoadedFromSource(){return M?!!this.#i:void 0}static async addAttributes(E){let O=m.slice(0);for(let R of E){if(!R.name)throw new wr.ClientError("Attribute name is required");if(R.name.match(/[`/]/))throw new wr.ClientError("Attribute names cannot include backticks or forward slashes");(0,mY.validateAttribute)(R.name),O.push(R)}return ot({table:s,database:c,schemaDefined:u,attributes:O}),Le.indexingOperation}static async removeAttributes(E){let O=m.filter(R=>!E.includes(R.name));return ot({table:s,database:c,schemaDefined:u,attributes:O}),Le.indexingOperation}static getSize(){let E=i.getStats();return(E.treeBranchPageCount+E.treeLeafPageCount+E.overflowPages)*E.pageSize}static getAuditSize(){let E=l?.getStats();return E&&(E.treeBranchPageCount+E.treeLeafPageCount+E.overflowPages)*E.pageSize}static getStorageStats(){let E=i.env.path,O=xS.default.statfsSync(E);return{available:O.bavail*O.bsize,free:O.bfree*O.bsize,size:O.blocks*O.bsize}}static getRecordCount(E){let O=i.getStats().entryCount,R=1e3/2,y=performance.now(),b=Math.floor(O/2),C=E?.exactCount,I=0,L=0,x;for(let{value:N}of i.getRange({start:!0,lazy:!0}))if(N!=null&&I++,L++,!C&&L<b&&performance.now()-y>R){x=L;break}if(x){let N=I;I=0;for(let{value:se}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:x}))se!=null&&I++;let v=x*2,$=(I+N)/v,Y=Math.pow((I-N+1)/x/2,2)+$*(1-$)/v,ne=Math.max(Math.sqrt(Y)*O,1),k=Math.round($*O),ve=Math.max(k-1.96*ne,I+N),oe=Math.min(k+1.96*ne,O),le=Math.pow(10,Math.round(Math.log10(ne)));return le>k&&(le=le/10),I=Math.round(k/le)*le,{recordCount:I,estimatedRange:[Math.round(ve),Math.round(oe)]}}return{recordCount:I}}static updatedAttributes(){fr=this.propertyResolvers={$id:a((E,O,R)=>({value:R.key}),"$id"),$updatedtime:a((E,O,R)=>R.version,"$updatedtime"),$record:a((E,O,R)=>R?{value:E}:E,"$record")};for(let E of this.attributes){E.resolve=null;let O=E.relationship,R=E.computed;if(O)if(E.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),R&&console.error("A relationship property is already computed and can not be combined with a computed function (the relationship will be given precedence)"),Md=!0,O.to)E.elements?.definition?(fr[E.name]=E.resolve=(y,b,C)=>{let I=y[O.from?O.from:t],L=E.elements.definition.tableClass;return C?Hl({attribute:O.to,value:I},mt(b).getReadTxn(),!1,L,!1).asArray:L.search([{attribute:O.to,value:I}],b).asArray},E.set=()=>{throw new Error("Setting a one-to-many relationship property is not supported")},E.resolve.definition=E.elements.definition,O.from&&(E.resolve.from=O.from)):console.error(`The one-to-many/many-to-many relationship property "${E.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(O.from){let y=E.definition||E.elements?.definition;y?(fr[E.name]=E.resolve=(b,C,I)=>{let L=b[O.from];if(L!==void 0){if(E.elements){let x,N=L?.map(v=>{let $=I?y.tableClass.primaryStore.getEntry(v,{transaction:mt(C).getReadTxn()}):y.tableClass.get(v,C);return $?.then&&(x=!0),$});return O.filterMissing?x?Promise.all(N).then(v=>v.filter(pY)):N.filter(pY):x?Promise.all(N):N}return I?y.tableClass.primaryStore.getEntry(L,{transaction:mt(C).getReadTxn()}):y.tableClass.get(L,C)}},E.set=(b,C)=>{if(Array.isArray(C)){let I=C.map(L=>L.getId?.()||L[y.tableClass.primaryKey]);b[O.from]=I}else{let I=C.getId?.()||C[y.tableClass.primaryKey];b[O.from]=I}},E.resolve.definition=E.definition||E.elements?.definition,E.resolve.from=O.from):console.error(`The relationship property "${E.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${E.name}" in table "${s}" must use either "from" or "to" arguments`);else R&&(typeof R.from=="function"&&this.setComputedAttribute(E.name,R.from),fr[E.name]=E.resolve=(y,b,C)=>{let I=typeof R.from=="string"?y[R.from]:y,L=this.userResolvers[E.name];if(L)return L(I,b,C);xe.default.warn(`Computed attribute "${E.name}" does not have a function assigned to it. Please use setComputedAttribute('${E.name}', resolver) to assign a resolver function.`),this.userResolvers[E.name]=()=>{}})}HE(this,this)}static setComputedAttribute(E,O){let R=hi(m,E);if(!R){console.error(`The attribute "${E}" does not exist in the table "${s}"`);return}if(!R.computed){console.error(`The attribute "${E}" is not defined as computed in the table "${s}"`);return}this.userResolvers[E]=O}static async deleteHistory(E=0,O=!1){let R;for(let{key:y,value:b}of l.getRange({start:0,end:E}))await Td(),bt(b).tableId===n&&(R=vS(l,y,b));if(O)for(let y of i.getRange({start:0,versions:!0})){let{key:b,value:C,localTime:I}=y;await Td(),C===null&&I<E&&(R=dc(i,y))}await R}static async*getHistory(E=0,O=1/0){for(let{key:R,value:y}of l.getRange({start:E||1,end:O})){await Td();let b=bt(y);b.tableId===n&&(yield{id:b.recordId,localTime:R,version:b.version,type:b.type,value:b.getValue(i,!0,R),user:b.user,operation:b.originatingOperation})}}static async getHistoryOfRecord(E){let O=[];if(E==null)throw new Error("An id is required");let R=i.getEntry(E);if(!R)return O;let y=R.localTime;if(!y)throw new Error("The entry does not have a local audit time");let b=0;do{await Td();let C=l.get(y);if(C){let I=bt(C);O.push({id:I.recordId,localTime:y,version:I.version,type:I.type,value:I.getValue(i,!0,y),user:I.user}),y=I.previousLocalTime}else break}while(b<1e3&&y);return O.reverse()}static cleanup(){X?.remove()}}Le.updatedAttributes();let Bd=Le.prototype;return p&&Le.setTTLExpiration(p/1e3),ie&&sp(),Le;function Ki(W,E,O){let R;for(let y in r){let b=r[y],C=b.isIndexing,I=fr[y],L=O&&(I?I(O):O[y]),x=E&&(I?I(E):E[y]);if(L===x&&!C)continue;R=!0;let N=b.indexNulls,v=(0,wh.getIndexedValues)(L,N),$=(0,wh.getIndexedValues)(x,N);if($?.length>0){let Y=new Set($);if(v=v?v.filter(ne=>{if(Y.has(ne))Y.delete(ne);else return!0}):[],$=Array.from(Y),($.length>0||v.length>0)&&lY){let ne=$.concat(v).map(k=>({key:k,value:W}));b.prefetch(ne,_Y)}for(let ne=0,k=$.length;ne<k;ne++)b.remove($[ne],W)}else v?.length>0&&lY&&b.prefetch(v.map(Y=>({key:Y,value:W})),_Y);if(v)for(let Y=0,ne=v.length;Y<ne;Y++)b.put(v[Y],W)}return R}a(Ki,"updateIndices");function Ir(W){switch(typeof W){case"number":return!0;case"string":if(W.length<659)return!0;if(W.length>dY)throw new Error("Primary key size is too large: "+W.length);break;case"object":if(W===null)throw new Error("Invalid primary key of null");break;case"bigint":if(W<2n**64n&&W>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof W)}if((0,gl.writeKey)(W,Dpe,0)>dY)throw new Error("Primary key size is too large: "+W.length);return!0}a(Ir,"checkValidId");function Dn(W,E,O,R,y){if(Le.getResidencyById&&O.ensureLoaded&&E?.replicateFrom!==!1){let C=Le.getResidencyById(W);if(C&&!C.includes(server.hostname)&&w)return w({key:W,residency:C}).then(y)}let b=a(()=>{if(E?.transaction?.stale&&(E.transaction.stale=!1),O.transaction?.isDone)return y(null,W);let C=i.getEntry(W,O);return C?.residencyId&&C.metadataFlags&as&&w&&O.ensureLoaded&&E?.replicateFrom!==!1?w(C).then(I=>y(I,W),I=>(xe.default.error?.("Error loading remote record",W,C,O,I),y(null,W))):(C&&E&&(C?.version>(E.lastModified||0)&&(E.lastModified=C.version),C?.localTime&&!E.lastRefreshed&&(E.lastRefreshed=C.localTime)),y(C,W))},"whenPrefetched");return R?b():he>0?(he--,b()):new Promise((C,I)=>{he===0?(he--,i.prefetch([W],()=>{L(),x()})):(re.push(W),z.push(x),re.length>xd&&(he--,L()));function L(){if(re.length>0){let N=z;i.prefetch(re,()=>{he===-1?L():he++;for(let v of N)v()}),re=[],z=[],Te>2&&Te--}else he=Te,Te<rp&&Te++}a(L,"prefetch");function x(){try{C(b())}catch(N){I(N)}}a(x,"load")})}a(Dn,"loadLocalRecord");function Qa(W){if(!W?.role)return;let E=W.role.permission;if(E.super_user)return Lpe;let O=E[c],R,y=O?.tables;if(y)return y[s];if(c==="data"&&(R=E[s])&&!R.tables)return R}a(Qa,"getTablePermissions");function np(W,E,O,R){if(M){let y=!1;if(O.noCache?y=!0:(E?(!E.value||E.metadataFlags&(as|ea)||E.expiresAt!=null&&E.expiresAt<Date.now())&&(y=!0):y=!0,Wn(!y,"cache-hit",s)),y){let b=kd(W,E,O).then(C=>(C?.value&&C?.value.getRecord?.()&&xe.default.error?.("Can not assign a record that is already a resource"),O&&(C?.version>(O.lastModified||0)&&(O.lastModified=C.version),O.lastRefreshed=Date.now()),C));if(O?.onlyIfCached||E?.value&&R?.allowStaleWhileRevalidate?.(E,W)){if(b.catch(C=>xe.default.warn?.(C)),O?.onlyIfCached&&!R.doesExist())throw new wr.ServerError("Entry is not cached",504);return}else return b}}else if(E?.value&&E.expiresAt!=null&&E.expiresAt<Date.now())return Le.evict(E.key,E.value,E.version),E.value=null,{then(y){return y(E)}}}a(np,"ensureLoadedFromSource");function mt(W){let E=W?.transaction;if(E){if(!E.lmdbDb)return E.lmdbDb=i,E;do{if(E.lmdbDb?.path===i.path)return E;let O=E.next;if(!O)return E=E.next=new tc,E.lmdbDb=i,E;E=O}while(!0)}else return new Np}a(mt,"txnForContext");function Ll(W,E,O){if(!W)return;let R=W.value||i.getEntry(W.key)?.value;if(typeof E=="object"){let b=fr,C=R;for(let I=0,L=E.length;I<L;I++){let x=E[I],N=b?.[x];C=N&&C?N(C,O,!0)?.value:C?.[x],b=N?.definition?.tableClass?.propertyResolvers}return C}let y=fr[E];return y?y(R,O):R[E]}a(Ll,"getAttributeValue");function Hd(W,E,O,R,y){let b=y?.length,C={transaction:R,lazy:b>0||typeof E=="string"||E?.length<4,alwaysPrefetch:!0},I;function L(x,N){let v=x?.value;if(!v)return Ha.SKIP;for(let $=0;$<b;$++)if(!I?.includes($)&&!y[$](v,x))return Ha.SKIP;return N!==void 0&&(x.key=N),x}if(a(L,"processEntry"),b>0||!W.hasEntries){let x=W.map(N=>{if(I=null,typeof N=="object"&&N?.key!==void 0)return b>0?L(N):N;if(N==null)return Ha.SKIP;for(let v=0;v<b;v++){let Y=y[v].idFilter;if(Y){if(!Y(N))return Ha.SKIP;I||(I=[]),I.push(v)}}return Dn(N,O,C,!1,L)});return Array.isArray(W)&&(x=x.filter(N=>N!==Ha.SKIP)),x.hasEntries=!0,x}return W}a(Hd,"transformToEntries");function Yi(W,E,O=server.replication?.getThisNodeId(l)){if(W<=E?.version){if(E?.version===W&&O!==void 0){let R=server.replication?.exportIdMapping(l),y=E.localTime,b=y&&l.get(y);if(b){let C,I,L=bt(b);for(let x in R)R[x]===O&&(C=x),R[x]===L.nodeId&&(I=x);if(C>I)return 1;if(C===I)return 0}}return-1}return 1}a(Yi,"precedesExistingVersion");async function kd(W,E,O){let R=E?.metadataFlags,y=E?.version,b,C;if(!i.attemptLock(W,y,()=>{clearTimeout(C);let N=i.getEntry(W);!N||!N.value||N.metadataFlags&(as|ea)?b(kd(W,i.getEntry(W),O)):b(N)}))return new Promise(N=>{b=N,C=setTimeout(()=>{i.unlock(W,y)},Cpe)});let I=E?.value,L={requestContext:O,replacingRecord:I,replacingEntry:E,replacingVersion:y,noCacheStore:!1,source:null,resourceCache:O?.resourceCache},x=O?.responseHeaders;return new Promise((N,v)=>{let $;LI(yt(L,async Y=>{let ne=performance.now(),k,ve,oe;try{for(let fe of Le.sources)if(fe.get&&(!fe.get.reliesOnPrototype||fe.prototype.get)){if(fe.available?.(E)===!1)continue;if(L.source=fe,k=await fe.get(W,L),k)break}oe=R&as;let se=L.lastModified||oe&&y;ve=oe||se>y||!I,se||(se=(0,wh.getNextMonotonicTime)());let Q=performance.now()-ne;if(sr(Q,"cache-resolution",s,null,"success"),x&&JE(x,"Server-Timing",`cache-resolve;dur=${Q.toFixed(2)}`,!0),Y.timestamp=se,p&&L.expiresAt==null&&(L.expiresAt=Date.now()+p),k){if(typeof k!="object")throw new Error("Only objects can be cached and stored in tables");if(k.status>0&&k.headers)if(k.status>=300)if(k.status===304)k=I,se=y;else throw new wr.ServerError(k.body||"Error from source",k.status);else k=k.body;typeof k.toJSON=="function"&&(k=k.toJSON()),t&&k[t]!==W&&(k[t]=W)}$=!0,N({key:W,version:se,value:k})}catch(se){se.message+=` while resolving record ${W} for ${s}`,I&&((se.code==="ECONNRESET"||se.code==="ECONNREFUSED"||se.code==="EAI_AGAIN")&&!O?.mustRevalidate||O?.staleIfError&&(se.statusCode===500||se.statusCode===502||se.statusCode===503||se.statusCode===504))?(N({key:W,version:y,value:I}),xe.default.trace?.(se.message,"(returned stale record)")):v(se);let Q=performance.now()-ne;sr(Q,"cache-resolution",s,null,"fail"),x&&JE(x,"Server-Timing",`cache-resolve;dur=${Q.toFixed(2)}`,!0),L.transaction.abort();return}if(O?.noCacheStore||L.noCacheStore){L.transaction.abort();return}mt(L).addWrite({key:W,store:i,entry:E,nodeName:"source",commit:a((se,Q)=>{if(Q?.version!==y)return;let fe=Ki(W,I,k);k?(pe.put?.(L,W,k),xe.default.trace?.(`Writing resolved record from source with id: ${W}, timestamp: ${new Date(se).toISOString()}`),A(W,k,Q,se,0,g&&ve||null,{user:L?.user,expiresAt:L.expiresAt},"put",!!oe)):Q&&(pe.delete?.(L,W),xe.default.trace?.(`Deleting resolved record from source with id: ${W}, timestamp: ${new Date(se).toISOString()}`),g||T?A(W,null,Q,se,0,g&&ve||null,{user:L?.user},"delete",!!oe):dc(i,Q,y))},"commit")})}),()=>{i.unlock(W,y)},Y=>{i.unlock(W,y),$&&xe.default.error?.("Error committing cache update",Y)})})}a(kd,"getFromSource");function Ml(W){if(!W||W.user?.role?.permission?.super_user)return!0;if(W.replicateTo)throw new wr.ClientError("Can not specify replication parameters without super user permissions",403);if(W.replicatedConfirmation)throw new wr.ClientError("Can not specify replication confirmation without super user permissions",403);return!0}a(Ml,"checkContextPermissions");function Ko(){if(Ft!==Gt&&(Gt=Ft,(0,ml.getWorkerIndex)()===(0,ml.getWorkerCount)()-1)){if(Jt&&clearTimeout(Jt),!Ft)return;let W=new Date;W.setMonth(0),W.setDate(1),W.setHours(0),W.setMinutes(0),W.setSeconds(0);let E=Math.ceil((Date.now()-W.getTime())/Ft)*Ft+W.getTime(),O=a(R=>{xe.default.trace?.(`Scheduled next cleanup scan at ${new Date(R)}ms`),Jt=setTimeout(()=>G=G.then(async()=>{if(O(Math.max(R+Ft,Date.now())),i.rootStore.status!=="open"){clearTimeout(Jt);return}let y=50,b=new Array(y),C=0;xe.default.info?.(`Starting cleanup scan for ${s}`);try{let I=0;for(let L of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let{key:x,value:N,version:v,expiresAt:$}=L,Y;N===null&&!g&&v+Ipe<Date.now()?Y=dc(i,L,v):$!=null&&$+S<Date.now()&&(Y=Le.evict(x,N,v),I++),Y&&(await b[C],b[C]=Y.catch(ne=>{xe.default.error?.("Cleanup error",ne)}),++C>=y&&(C=0)),await Td()}xe.default.info?.(`Finished cleanup scan for ${s}, evicted ${I} entries`)}catch(I){xe.default.warn?.(`Error in cleanup scan for ${s}:`,I)}}),Math.min(R-Date.now(),2147483647)).unref()},"startNextTimer");O(E)}}a(Ko,"scheduleCleanup");function Fd(){X=l?.addDeleteRemovalCallback(n,i,(W,E)=>{i.remove(W,E)})}a(Fd,"addDeleteRemoval");function sp(){(0,ml.getWorkerIndex)()===0&&setInterval(async()=>{if(!za){za=!0;try{let W=ie.name,E=r[W];if(!E)throw new Error(`expiresAt attribute ${ie} must be indexed`);for(let O of E.getRange({start:!0,values:!1,end:Date.now(),snapshot:!1})){for(let R of E.getValues(O)){let y=i.getEntry(R);y?.value?y.value[W]<Date.now()&&Le.evict(R,y.value,y.version):i.ifVersion(R,y?.version,()=>E.remove(O,R))}await Td()}}catch(W){xe.default.error?.("Error in evicting old records",W)}finally{za=!1}}},wpe).unref()}a(sp,"runRecordExpirationEviction");function Yo(W){if(W){let E=W.join(","),O=f.get([Symbol.for("residency_by_set"),E]);return O||(f.put([Symbol.for("residency_by_set"),E],O=Math.floor(Math.random()*2147483647)),f.put([Symbol.for("residency_by_id"),O],W),O)}}a(Yo,"getResidencyId")}function DI(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 _Y(){}function Mpe(e){gY=e}function BS(e,t){let r=t?.type;if(e===null)return e;if(e===""&&r&&r!=="String"&&r!=="Any")return null;try{switch(r){case"Int":case"Long":if(e[0]==="$")return US(parseInt(e.slice(1),36));if(e==="null")return null;if(!/^-?[0-9]+$/.test(e)&&!(e instanceof Date))throw new SyntaxError;return US(+e);case"Float":return e==="null"?null:US(+e);case"BigInt":return e==="null"?null:BigInt(e);case"Boolean":return e==="true"?!0:e==="false"?!1:e;case"Date":if(isNaN(e)){if(e==="null")return null;vpe.test(e)||(e+="Z");let n=new Date(e);return US(n.getTime()),n}return new Date(+e);case void 0:case"Any":return(0,HS.autoCast)(e);default:return e}}catch(n){throw n.message=`Invalid value for attribute ${t.name}: "${e}", expecting ${r}`,n.statusCode=400,n}}function US(e){if(isNaN(e))throw new SyntaxError;return e}function hY(e,t){if(e==null)return!0;if(!Array.isArray(t))return e===t||t.startsWith?.(e);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 LI(e,t,r){return e?.then?e.then(t,r):t(e)}function pY(e){return e!=null}function Cs(e){try{return JSON.stringify(e)}catch{return e}}function Upe(e){let t=process.pid;return e.env.readerList().slice(1).some(r=>+r.match(/\d+/)?.[0]!=t)}var Ha,wh,EY,mY,Ad,wr,Ih,Ch,xe,gl,ml,HS,xS,Npe,gY,wpe,Ipe,lY,Cpe,uY,Ppe,as,ea,Dpe,dY,fY,Lpe,$Le,vpe,Td,of=be(()=>{H();Ha=require("lmdb"),wh=U(an()),EY=require("lodash"),mY=U(Zd());ta();wp();Ad=U(ce());iO();wr=U(_e()),Ih=U(co()),Ch=U(Vs());De();sf();xe=U(Qi());wy();rc();gl=require("ordered-binary"),ml=U(rt());Zi();HS=U(ae());Kl();Ci();vE();c_();xS=U(require("node:fs"));cs();Npe=new Uint8Array(9);Npe[8]=192;wpe=6e4,Ipe=864e5;Ad.initSync();lY=Ad.get(B.STORAGE_PREFETCHWRITES),Cpe=1e4,uY=1,Ppe=2,as=1,ea=8,Dpe=Buffer.allocUnsafeSlow(8192),dY=1978,fY=100,Lpe={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},$Le=(0,HS.convertToMS)(Ad.get(B.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(kS,"makeTable");a(DI,"attributesAsObject");a(_Y,"noop");a(Mpe,"setServerUtilities");vpe=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(BS,"coerceType");a(US,"rejectNaN");a(hY,"isDescendantId");Td=a(()=>new Promise(setImmediate),"rest");a(LI,"when");a(pY,"exists");a(Cs,"stringify");a(Upe,"hasOtherProcesses")});var nt={};Be(nt,{database:()=>au,database_envs:()=>Po,databases:()=>$e,dropDatabase:()=>Ly,dropTableMeta:()=>Fpe,getDatabases:()=>Je,getDefaultCompression:()=>Ag,getTables:()=>xpe,onRemovedDB:()=>I_,onUpdatedTable:()=>Yc,readMetaDb:()=>Ph,resetDatabases:()=>Wu,table:()=>ot,tables:()=>Yn});function xpe(){return $S||Je(),Yn||{}}function Je(){if($S)return $e;$S=!0,bd=new Map;let e=(0,Qt.getHdbBasePath)()&&(0,Ct.join)((0,Qt.getHdbBasePath)(),Za),t=(0,Qt.get)(B.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,Qt.get)(B.STORAGE_PATH)||e&&((0,Zn.existsSync)(e)?e:(0,Ct.join)((0,Qt.getHdbBasePath)(),up)),!e)return;if((0,Zn.existsSync)(e))for(let n of(0,Zn.readdirSync)(e,{withFileTypes:!0})){let s=(0,Ct.basename)(n.name,".mdb");n.isFile()&&(0,Ct.extname)(n.name).toLowerCase()===".mdb"&&!t[s]?.path&&Ph((0,Ct.join)(e,n.name),null,s)}if((0,Zn.existsSync)((0,yd.getBaseSchemaPath)())){for(let n of(0,Zn.readdirSync)((0,yd.getBaseSchemaPath)(),{withFileTypes:!0}))if(!n.isFile()){let s=(0,Ct.join)((0,yd.getBaseSchemaPath)(),n.name),i=(0,Ct.join)((0,yd.getTransactionAuditStoreBasePath)(),n.name);for(let o of(0,Zn.readdirSync)(s,{withFileTypes:!0}))if(o.isFile()&&(0,Ct.extname)(o.name).toLowerCase()===".mdb"){let c=(0,Ct.join)(i,o.name);Ph((0,Ct.join)(s,o.name),(0,Ct.basename)(o.name,".mdb"),n.name,c,!0)}}}if(t)for(let n in t){let s=t[n],i=s.path;if((0,Zn.existsSync)(i))for(let c of(0,Zn.readdirSync)(i,{withFileTypes:!0}))c.isFile()&&(0,Ct.extname)(c.name).toLowerCase()===".mdb"&&Ph((0,Ct.join)(i,c.name),(0,Ct.basename)(c.name,".mdb"),n);let o=s.tables;if(o)for(let c in o){let l=o[c],u=(0,Ct.join)(l.path,(0,Ct.basename)(c+".mdb"));(0,Zn.existsSync)(u)&&Ph(u,c,n,null,!0)}}for(let n in $e){let s=bd.get(n);if(s){let i=$e[n];n.includes("delete")&&Ht.trace(`defined tables ${Array.from(s.keys())}`);for(let o in i)s.has(o)||(Ht.trace(`delete table class ${o}`),delete i[o])}else if(delete $e[n],n==="data"){for(let i in Yn)delete Yn[i];delete Yn[VS]}}let r=["hdb_temp","hdb_certificate","hdb_analytics","hdb_raw_analytics","hdb_session_will","hdb_job","hdb_license","hdb_info"];if($e.system)for(let n of r)$e.system[n]&&($e.system[n].replicate=!1);return bd=null,$e}function Wu(){$S=!1;for(let[,e]of Po)e.needsDeletion=!0;Je();for(let[e,t]of Po)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),Po.delete(e),delete $e[t.databaseName],Lh.forEach(r=>r(t.databaseName)));return $e}function Ph(e,t,r=UI,n,s){let i=new MI.default(e,!1);try{let o=Po.get(e);o?o.needsDeletion=!1:(o=(0,Od.open)(i),Po.set(e,o));let c=new Sl.default(!1),l=o.dbisDb||(o.dbisDb=o.openDB(FS.INTERNAL_DBIS_NAME,c)),u=o.auditStore;u||(n?(0,Zn.existsSync)(n)&&(i.path=n,u=(0,Od.open)(i),u.isLegacy=!0):u=MS(o));let f=RY(r),d=f[VS],h=new Map;for(let{key:_,value:p}of l.getRange({start:!1})){let[S,g]=_.toString().split("/");g===""?g=p.name:g||(g=S,S=t,p.name||(p.name=g,p.indexed=!p.is_hash_attribute)),d?.add(S);let T=h.get(S);T||h.set(S,T={attributes:[]}),(g==null||p.is_hash_attribute)&&(T.primary=p),g!=null&&T.attributes.push(p),Object.defineProperty(p,"key",{value:_,configurable:!0})}for(let[_,p]of h){let{attributes:S,primary:g}=p;if(!g){for(let z of S)if(z.is_hash_attribute||z.isPrimaryKey){g=z;break}if(!g){Ht.warn(`Unable to find a primary key attribute on table ${_}, with attributes: ${JSON.stringify(S)}`);continue}}let T=f[_],m={},A=[],w,M,F=typeof g.audit=="boolean"?g.audit:(0,Qt.get)(B.LOGGING_AUDITLOG),G=g.trackDeletes,K=g.expiration,ee=g.eviction,ie=g.sealed,X=g.splitSegments,re=g.replicate;if(T)m=T.indices,A=T.attributes,T.schemaVersion++;else{w=g.tableId,w?w>=(l.get(Rd)||0)&&(l.putSync(Rd,w+1),Ht.info(`Updating next table id (it was out of sync) to ${w+1} for ${_}`)):(g.tableId=w=l.get(Rd),w||(w=1),Ht.debug("Table {table_name} missing an id, assigning {table_id}"),l.putSync(Rd,w+1),l.putSync(g.key,g));let z=new Sl.default(!g.is_hash_attribute,g.is_hash_attribute);if(z.compression=g.compression,z.compression){let he=(0,Qt.get)(B.STORAGE_COMPRESSION_THRESHOLD)||AY;z.compression.threshold=he}M=Wp(o.openDB(g.key,z),o),o.databaseName=r,M.tableId=w}for(let z of S){z.attribute=z.name;try{if(!z.is_hash_attribute&&(z.indexed||z.attribute&&!z.name)){if(!m[z.name]){let Te=new Sl.default(!z.is_hash_attribute,z.is_hash_attribute);m[z.name]=o.openDB(z.key,Te),m[z.name].indexNulls=z.indexNulls}let he=A.find(Te=>Te.name===z.name);he?A.splice(A.indexOf(he),1,z):A.push(z)}}catch(he){Ht.error("Error trying to update attribute",z,A,m,he)}}if(!T){T=yY(f,_,kS({primaryStore:M,auditStore:u,audit:F,sealed:ie,splitSegments:X,replicate:re,expirationMS:K&&K*1e3,evictionMS:ee&&ee*1e3,trackDeletes:G,tableName:_,tableId:w,primaryKey:g.name,databasePath:s?r+"/"+_:r,databaseName:r,indices:m,attributes:S,schemaDefined:g.schemaDefined,dbisDB:l})),T.schemaVersion=1;for(let z of Dh)z(T)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function RY(e){let t=$e[e];if(t||(e==="data"?t=$e[e]=Yn:e==="system"?Object.defineProperty($e,"system",{value:t=Object.create(null),configurable:!0}):t=$e[e]=Object.create(null)),bd&&!bd.has(e)){let r=new Set;t[VS]=r,bd.set(e,r)}return t}function yY(e,t,r){return e[t]=r,r}function au({database:e,table:t}){e||(e=UI),Je();let r=RY(e),n=(0,Ct.join)((0,Qt.getHdbBasePath)(),Za),s=(0,Qt.get)(B.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,Qt.get)(B.STORAGE_PATH)||((0,Zn.existsSync)(n)?n:(0,Ct.join)((0,Qt.getHdbBasePath)(),up));let o=(0,Ct.join)(n,(i?t:e)+".mdb"),c=Po.get(o);if(!c||c.status==="closed"){let l=new MI.default(o,!1);c=(0,Od.open)(l),Po.set(o,c)}return c.auditStore||(c.auditStore=MS(c)),c}async function Ly(e){if(!$e[e])throw new Error("Schema does not exist");let t=$e[e],r;for(let n in t)r=t[n].primaryStore.rootStore,Po.delete(r.path),r.status==="open"&&(await r.close(),await Mh.remove(r.path));if(r||(r=au({database:e,table:null}),r.status==="open"&&(await r.close(),await Mh.remove(r.path))),e==="data"){for(let n in Yn)delete Yn[n];delete Yn[VS]}delete $e[e],Lh.forEach(n=>n(e)),await xI(r)}function ot(e){let{table:t,database:r,expiration:n,eviction:s,scanInterval:i,attributes:o,audit:c,sealed:l,splitSegments:u,replicate:f,trackDeletes:d,schemaDefined:h,origin:_}=e;r||(r=UI);let p=au({database:r,table:t}),S=$e[r];Ht.trace(`Defining ${t} in ${r}`);let g=S?.[t];if(p.status==="closed")throw new Error(`Can not use a closed data store for ${t}`);let T,m,A;h==null&&(h=!0);let w=new Sl.default(!1);for(let X of o)X.attribute&&!X.name?(X.name=X.attribute,X.indexed=!0):X.attribute=X.name,X.expiresAt&&(X.indexed=!0);let M,F;if(g){if(T=g.primaryKey,g.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${t} class`);u==null&&(u=g.splitSegments),g.attributes.splice(0,g.attributes.length,...o)}else{let X=p.auditStore;m=o.find(Te=>Te.isPrimaryKey)||{},T=m.name,m.is_hash_attribute=m.isPrimaryKey=!0,m.schemaDefined=h,m.compression=Ag(),d&&(m.trackDeletes=!0),c=m.audit=typeof c=="boolean"?c:(0,Qt.get)(B.LOGGING_AUDITLOG),n&&(m.expiration=n),s&&(m.eviction=s),m.splitSegments=!1,typeof l=="boolean"&&(m.sealed=l),typeof f=="boolean"&&(m.replicate=f),_&&(m.origins?m.origins.includes(_)||m.origins.push(_):m.origins=[_]),Ht.trace(`${t} table loading, opening primary store`);let re=new Sl.default(!1,!0);re.compression=m.compression;let z=t+"/";if(A=p.dbisDb=p.openDB(FS.INTERNAL_DBIS_NAME,w),ie(),A.get(z))return F&&F(),Wu(),ot(e);let he=Wp(p.openDB(z,re),p);p.databaseName=r,he.tableId=A.get(Rd),Ht.trace(`Assigning new table id ${he.tableId} for ${t}`),he.tableId||(he.tableId=1),A.put(Rd,he.tableId+1),m.tableId=he.tableId,g=yY(S,t,kS({primaryStore:he,auditStore:X,audit:c,sealed:l,splitSegments:u,replicate:f,trackDeletes:d,expirationMS:n&&n*1e3,evictionMS:s&&s*1e3,primaryKey:T,tableName:t,tableId:he.tableId,databasePath:r,databaseName:r,indices:{},attributes:o,schemaDefined:h,dbisDB:A})),g.schemaVersion=1,M=!0,A.put(z,m)}let G=g.indices;A=A||(p.dbisDb=p.openDB(FS.INTERNAL_DBIS_NAME,w)),g.dbisDB=A;let K=[];for(let{key:X,value:re}of A.getRange({start:!0})){let[z,he]=X.toString().split("/");if(he===""&&(he=re.name),he){if(z!==t)continue}else continue;let Te=o.find(pe=>pe.name===he),Ie=!Te?.indexed&&re.indexed&&!re.isPrimaryKey;if((!Te||Ie)&&(ie(),M=!0,Te||A.remove(X),Ie)){let pe=g.indices[z];pe&&K.push(pe)}}let ee=[];try{for(let X of o||[]){if((X.relationship||X.computed)&&(M=!0,X.relationship))continue;let re=t+"/"+(X.name||"");Object.defineProperty(X,"key",{value:re,configurable:!0});let z=A.get(re);if(X.isPrimaryKey){if(z=z||A.get(re=t+"/")||{},c!==void 0&&c!==g.audit||l!==void 0&&l!==g.sealed||f!==void 0&&f!==g.replicate||(+n||void 0)!==(+z.expiration||void 0)||(+s||void 0)!==(+z.eviction||void 0)){let Te={...z};typeof c=="boolean"&&(c&&g.enableAuditing(c),Te.audit=c),n&&(Te.expiration=+n),s&&(Te.eviction=+s),l!==void 0&&(Te.sealed=l),f!==void 0&&(Te.replicate=f),M=!0,ie(),A.put(re,Te)}continue}z?.attribute&&!z.name&&(z.indexed=!0);let he=!z||z.type!==X.type||z.indexed!==X.indexed||z.nullable!==X.nullable||z.version!==X.version||JSON.stringify(z.properties)!==JSON.stringify(X.properties)||JSON.stringify(z.elements)!==JSON.stringify(X.elements);if(X.indexed){let Te=new Sl.default(!0,!1),Ie=p.openDB(re,Te);(he||z.indexingPID&&z.indexingPID!==process.pid||z.restartNumber<vh.workerData?.restartNumber)&&(M=!0,ie(),z=A.get(re),(he||z.indexingPID&&z.indexingPID!==process.pid||z.restartNumber<vh.workerData?.restartNumber)&&(M=!0,X.indexNulls===void 0&&(X.indexNulls=!0),g.primaryStore.getStats().entryCount>0&&(X.lastIndexedKey=z?.lastIndexedKey??void 0,X.indexingPID=process.pid,Ie.isIndexing=!0,Object.defineProperty(X,"dbi",{value:Ie}),ee.push(X))),A.put(re,X)),z?.indexNulls&&X.indexNulls===void 0&&(X.indexNulls=!0),Ie.indexNulls=X.indexNulls,G[X.name]=Ie}else he&&(M=!0,ie(),A.put(re,X))}}finally{F&&F()}if(M&&(g.schemaVersion++,g.updatedAttributes()),Ht.trace(`${t} table loading, running index`),ee.length>0||K.length>0?g.indexingOperation=kpe(g,ee,K):M&&GS.signalSchemaChange(new qS.SchemaEventMsg(process.pid,"schema-change",g.databaseName,g.tableName)),g.origin=_,M)for(let X of Dh)X(g,_!=="cluster");return(n||s||i)&&g.setTTLExpiration({expiration:n,eviction:s,scanInterval:i}),Ht.trace(`${t} table loaded`),g;function ie(){F||p.transactionSync(()=>({then(X){F=X}}))}a(ie,"startTxn")}async function kpe(e,t,r){try{Ht.info(`Indexing ${e.tableName} attributes`,t);let n=e.schemaVersion;await GS.signalSchemaChange(new qS.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let u of r)s=u.drop();let i,o={},c=0,l=t.length;if(await new Promise(u=>setImmediate(u)),l>0){let u;for(let d of t)(0,Od.compareKeys)(d.lastIndexedKey,u)<0&&(u=d.lastIndexedKey),d.lastIndexedKey==null&&d.dbi.clearAsync();let f=0;for(let{key:d,value:h,version:_}of e.primaryStore.getRange({start:u,lazy:l<4,versions:!0,snapshot:!1}))if(h){if(f++,s=e.primaryStore.ifVersion(d,_,()=>{for(let p=0;p<l;p++){let S=t[p],g=S.name;try{let T=S.resolve,m=h&&(T?T(h):h[g]),A=(0,SY.getIndexedValues)(m);if(A)for(let w=0,M=A.length;w<M;w++)S.dbi.put(A[w],d)}catch(T){o[g]||(o[g]=!0,Ht.error(`Error indexing attribute ${g}`,T))}}}),s.then(()=>f--,p=>{f--,Ht.error(p)}),vh.workerData&&vh.workerData.restartNumber!==TY.restartNumber&&(i=!0),++c%100===0||i){for(let p of t)p.lastIndexedKey=d,e.dbisDB.put(p.key,p);if(i)return}f>Bpe?await s:f>Hpe&&await new Promise(p=>setImmediate(p))}for(let d of t)delete d.lastIndexedKey,delete d.indexingPID,d.dbi.isIndexing=!1,s=e.dbisDB.put(d.key,d)}await s,await GS.signalSchemaChange(new qS.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName)),Ht.info(`Finished indexing ${e.tableName} attributes`,t)}catch(n){Ht.error("Error in indexing",n)}}function Fpe({table:e,database:t}){let r=au({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 Yc(e){return Dh.push(e),{remove(){let t=Dh.indexOf(e);t>-1&&Dh.splice(t,1)}}}function I_(e){return Lh.push(e),{remove(){let t=Lh.indexOf(e);t>-1&&Lh.splice(t,1)}}}function Ag(){let e=(0,Qt.get)(B.STORAGE_COMPRESSION),t=(0,Qt.get)(B.STORAGE_COMPRESSION_DICTIONARY),r=(0,Qt.get)(B.STORAGE_COMPRESSION_THRESHOLD)||AY,n={startingOffset:32};return t&&(n.dictionary=Mh.readFileSync(t)),r&&(n.threshold=r),e&&n}var Qt,FS,Od,Ct,Zn,yd,Sl,MI,Mh,vI,SY,GS,qS,vh,Ht,TY,UI,VS,AY,Yn,$e,Rd,Dh,Lh,$S,Po,bd,Bpe,Hpe,De=be(()=>{Qt=U(ce()),FS=U(Mt()),Od=require("lmdb"),Ct=require("path"),Zn=require("fs"),yd=U(ht());of();Sl=U(mf()),MI=U(gf());H();Mh=U(require("fs-extra")),vI=U(ui()),SY=U(an()),GS=U(co()),qS=U(Vs()),vh=require("worker_threads"),Ht=U(j()),TY=U(rt());Zi();Kl();cs();UI="data",VS=Symbol("defined-tables"),AY=((0,Qt.get)(B.STORAGE_PAGESIZE)||4096)-60;(0,Qt.initSync)();Yn=Object.create(null),$e=Object.create(null);(0,vI._assignPackageExport)("databases",$e);(0,vI._assignPackageExport)("tables",Yn);Rd=Symbol.for("next-table-id"),Dh=[],Lh=[],Po=new Map;a(xpe,"getTables");a(Je,"getDatabases");a(Wu,"resetDatabases");a(Ph,"readMetaDb");a(RY,"ensureDB");a(yY,"setTable");a(au,"database");a(Ly,"dropDatabase");a(ot,"table");Bpe=1e3,Hpe=10;a(kpe,"runIndexing");a(Fpe,"dropTableMeta");a(Yc,"onUpdatedTable");a(I_,"onRemovedDB");a(Ag,"getDefaultCompression")});var ae=P((eMe,BY)=>{"use strict";var ka=require("path"),IY=require("fs-extra"),In=j(),bY=require("fs-extra"),KS=require("os"),Gpe=require("net"),qpe=require("recursive-iterator"),Rr=(H(),D(q)),{PACKAGE_ROOT:$pe}=_t(),Vpe=KT(),OY=require("papaparse"),YS=require("moment"),{inspect:Kpe}=require("util"),NY=require("is-number"),ZLe=require("lodash"),Ype=require("minimist"),Wpe=require("https"),zpe=require("http"),{hdb_errors:WS}=_e(),Qpe=/^((\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)))$/,CY=require("util").promisify(setTimeout),jpe=100,Jpe=5,Xpe="",Zpe=4,wY={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};BY.exports={isEmpty:es,isEmptyOrZeroLength:Hi,arrayHasEmptyValues:rEe,arrayHasEmptyOrZeroLengthValues:nEe,buildFolderPath:sEe,isBoolean:PY,errorizeMessage:eEe,stripFileExtension:oEe,autoCast:aEe,autoCastJSON:DY,autoCastJSONDeep:HI,removeDir:cEe,compareVersions:lEe,isCompatibleDataVersion:uEe,escapeRawValue:dEe,unescapeValue:fEe,stringifyProps:_Ee,timeoutPromise:pEe,isClusterOperation:mEe,getClusterUser:SEe,checkGlobalSchemaTable:gEe,getHomeDir:MY,getPropsFilePath:hEe,promisifyPapaParse:TEe,removeBOM:vY,createEventPromise:AEe,checkProcessRunning:REe,checkSchemaTableExist:yEe,checkSchemaExists:UY,checkTableExists:xY,getStartOfTomorrowInSeconds:bEe,getLimitKey:OEe,isObject:iEe,isNotEmptyAndHasValue:tEe,autoCasterIsNumberCheck:LY,backtickASTSchemaItems:NEe,isPortTaken:EEe,createForkArgs:wEe,autoCastBoolean:IEe,async_set_timeout:CY,getTableHashAttribute:CEe,doesSchemaExist:PEe,doesTableExist:DEe,stringifyObj:LEe,ms_to_time:MEe,changeExtension:vEe,getEnvCliRootPath:kI,noBootFile:UEe,httpRequest:xEe,transformReq:BEe,convertToMS:HEe,PACKAGE_ROOT:$pe};function eEe(e){return e instanceof Error?e:new Error(e)}a(eEe,"errorizeMessage");function es(e){return e==null}a(es,"isEmpty");function tEe(e){return!es(e)&&(e||e===0||e===""||PY(e))}a(tEe,"isNotEmptyAndHasValue");function Hi(e){return es(e)||e.length===0||e.size===0}a(Hi,"isEmptyOrZeroLength");function rEe(e){if(es(e))return!0;for(let t=0;t<e.length;t++)if(es(e[t]))return!0;return!1}a(rEe,"arrayHasEmptyValues");function nEe(e){if(Hi(e))return!0;for(let t=0;t<e.length;t++)if(Hi(e[t]))return!0;return!1}a(nEe,"arrayHasEmptyOrZeroLengthValues");function sEe(...e){try{return e.join(ka.sep)}catch{console.error(e)}}a(sEe,"buildFolderPath");function PY(e){return es(e)?!1:e===!0||e===!1}a(PY,"isBoolean");function iEe(e){return es(e)?!1:typeof e=="object"}a(iEe,"isObject");function oEe(e){return Hi(e)?Xpe:e.slice(0,-Zpe)}a(oEe,"stripFileExtension");function aEe(e){return es(e)||e===""||typeof e!="string"?e:wY[e]!==void 0?wY[e]:LY(e)===!0?Number(e):Qpe.test(e)?new Date(e):e}a(aEe,"autoCast");function DY(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(DY,"autoCastJSON");function HI(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=HI(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=HI(r);n!==r&&(e[t]=n)}return e}else return DY(e)}a(HI,"autoCastJSONDeep");function LY(e){if(e.startsWith("0.")&&NY(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&NY(e))}a(LY,"autoCasterIsNumberCheck");async function cEe(e){if(Hi(e))throw new Error(`Directory path: ${e} does not exist`);try{await bY.emptyDir(e),await bY.remove(e)}catch(t){throw In.error(`Error removing files in ${e} -- ${t}`),t}}a(cEe,"removeDir");function lEe(e,t){if(Hi(e)){In.info("Invalid current version sent as parameter.");return}if(Hi(t)){In.info("Invalid upgrade version sent as parameter.");return}let r,n=/(\.0+)+$/,s=e.version?e.version:e,i=t.version?t.version:t,o=s.replace(n,"").split("."),c=i.replace(n,"").split("."),l=Math.min(o.length,c.length);for(let u=0;u<l;u++)if(r=parseInt(o[u],10)-parseInt(c[u],10),r)return r;return o.length-c.length}a(lEe,"compareVersions");function uEe(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(uEe,"isCompatibleDataVersion");function dEe(e){if(es(e))return e;let t=String(e);return t==="."?Rr.UNICODE_PERIOD:t===".."?Rr.UNICODE_PERIOD+Rr.UNICODE_PERIOD:t.replace(Rr.FORWARD_SLASH_REGEX,Rr.UNICODE_FORWARD_SLASH)}a(dEe,"escapeRawValue");function fEe(e){if(es(e))return e;let t=String(e);return t===Rr.UNICODE_PERIOD?".":t===Rr.UNICODE_PERIOD+Rr.UNICODE_PERIOD?"..":String(e).replace(Rr.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(fEe,"unescapeValue");function _Ee(e,t){if(es(e))return In.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+KS.EOL}!Hi(n)&&n[0]===";"?r+=" "+n+s+KS.EOL:Hi(n)||(r+=n+"="+s+KS.EOL)}catch{In.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(_Ee,"stringifyProps");function MY(){let e;try{e=KS.homedir()}catch{e=process.env.HOME}return e}a(MY,"getHomeDir");function hEe(){let e=ka.join(MY(),Rr.HDB_HOME_DIR_NAME,Rr.BOOT_PROPS_FILE_NAME);return IY.existsSync(e)||(e=ka.join(__dirname,"../","hdb_boot_properties.file")),e}a(hEe,"getPropsFilePath");function pEe(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:a(function(){clearTimeout(r)},"cancel")}}a(pEe,"timeoutPromise");async function EEe(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=Gpe.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a(EEe,"isPortTaken");function mEe(e){try{return Rr.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){In.error(`Error checking operation against cluster ops ${t}`)}return!1}a(mEe,"isClusterOperation");function gEe(e,t){let r=(De(),D(nt)).getDatabases();if(!r[e])return WS.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return WS.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(gEe,"checkGlobalSchemaTable");function SEe(e,t){if(es(t)){In.warn("No CLUSTERING_USER defined, clustering disabled");return}if(es(e)||Hi(e)){In.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){In.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){In.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(SEe,"getClusterUser");function TEe(){OY.parsePromise=function(e,t,r){return new Promise(function(n,s){OY.parse(e,{header:!0,transformHeader:vY,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(TEe,"promisifyPapaParse");function vY(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(vY,"removeBOM");function AEe(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;In.info(`Got cluster status event response: ${Kpe(s)}`);try{i.cancel()}catch{In.error("Error trying to cancel timeout.")}n(s)})})}a(AEe,"createEventPromise");async function REe(e){let t=!0,r=0;do await CY(jpe*r++),(await Vpe.findPs(e)).length>0&&(t=!1);while(t&&r<Jpe);if(t)throw new Error(`process ${e} was not started`)}a(REe,"checkProcessRunning");function yEe(e,t){let r=UY(e);if(r)return r;let n=xY(e,t);if(n)return n}a(yEe,"checkSchemaTableExist");function UY(e){let{getDatabases:t}=(De(),D(nt));if(!t()[e])return WS.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(UY,"checkSchemaExists");function xY(e,t){let{getDatabases:r}=(De(),D(nt));if(!r()[e][t])return WS.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(xY,"checkTableExists");function bEe(){let e=YS().utc().add(1,"d").startOf("d").unix(),t=YS().utc().unix();return e-t}a(bEe,"getStartOfTomorrowInSeconds");function OEe(){return YS().utc().format("DD-MM-YYYY")}a(OEe,"getLimitKey");function NEe(e){try{let t=new qpe(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){In.error("Got an error back ticking items."),In.error(t)}}a(NEe,"backtickASTSchemaItems");function wEe(e){return[e]}a(wEe,"createForkArgs");function IEe(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(IEe,"autoCastBoolean");function CEe(e,t){let{getDatabases:r}=(De(),D(nt)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(CEe,"getTableHashAttribute");function PEe(e){let{getDatabases:t}=(De(),D(nt));return t()[e]!==void 0}a(PEe,"doesSchemaExist");function DEe(e,t){let{getDatabases:r}=(De(),D(nt));return r()[e]?.[t]!==void 0}a(DEe,"doesTableExist");function LEe(e){try{return JSON.stringify(e)}catch{return e}}a(LEe,"stringifyObj");function MEe(e){let t=YS.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(MEe,"ms_to_time");function vEe(e,t){let r=ka.basename(e,ka.extname(e));return ka.join(ka.dirname(e),r+t)}a(vEe,"changeExtension");function kI(){if(process.env[Rr.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Rr.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=Ype(process.argv);if(e[Rr.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Rr.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(kI,"getEnvCliRootPath");var BI;function UEe(){if(BI)return BI;let e=kI();if(kI()&&IY.pathExistsSync(ka.join(e,Rr.HDB_CONFIG_FILE)))return BI=!0,!0}a(UEe,"noBootFile");function xEe(e,t){let r;return e.protocol==="http:"?r=zpe:r=Wpe,new Promise((n,s)=>{let i=r.request(e,o=>{o.setEncoding("utf8"),o.body="",o.on("data",c=>{o.body+=c}),o.on("end",()=>{n(o)})});i.on("error",o=>{s(o)}),i.write(t instanceof Buffer?t:JSON.stringify(t)),i.end()})}a(xEe,"httpRequest");function BEe(e){if(!e.schema&&!e.database){e.schema=Rr.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(BEe,"transformReq");function HEe(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(HEe,"convertToMS")});var ce=P((qY,$Y)=>{"use strict";var FI=require("fs-extra"),Tl=require("path"),HY=require("os"),kEe=require("properties-reader"),xh=j(),Uh=ae(),Pe=(H(),D(q)),zS=wt(),FEe="Error initializing environment manager",QS="BOOT_PROPS_FILE_PATH",kY=!1,GEe={[Pe.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[Pe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[Pe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Do={};Object.assign(qY,$Y.exports={BOOT_PROPS_FILE_PATH:QS,getHdbBasePath:qEe,setHdbBasePath:$Ee,get:FY,initSync:KEe,setProperty:Ye,initTestEnvironment:WEe,setCloneVar:YEe});function qEe(){return Do[Pe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(qEe,"getHdbBasePath");function $Ee(e){Do[Pe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a($Ee,"setHdbBasePath");function FY(e){let t=zS.getConfigValue(e);return t===void 0?Do[e]:t}a(FY,"get");function Ye(e,t){GEe[e]&&(Do[e]=t),zS.updateConfigObject(e,t)}a(Ye,"setProperty");function VEe(){let e;try{e=Uh.getPropsFilePath(),FI.accessSync(e,FI.constants.F_OK|FI.constants.R_OK),kY=!0;let t=kEe(e);return Do[Pe.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(Pe.HDB_SETTINGS_NAMES.INSTALL_USER),Do[Pe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(Pe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Do[QS]=e,!0}catch{return xh.trace(`Environment manager found no properties file at ${e}`),!1}}a(VEe,"doesPropFileExist");function KEe(e=!1){try{((kY||VEe()||Uh.noBootFile())&&!GY||e)&&(zS.initConfig(e),Do[Pe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=zS.getConfigValue(Pe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){xh.error(FEe),xh.error(t),console.error(t),process.exit(1)}}a(KEe,"initSync");var GY=!1;function YEe(e){GY=e}a(YEe,"setCloneVar");function WEe(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:n,https_enabled:s,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,l=Tl.join(__dirname,"../../","unitTests");Do[QS]=Tl.join(l,"hdb_boot_properties.file"),Ye(Pe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Tl.join(l,"settings.test")),Ye(Pe.HDB_SETTINGS_NAMES.INSTALL_USER,HY.userInfo()?HY.userInfo().username:void 0),Ye(Pe.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Ye(Pe.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Tl.join(l,"envDir","log")),Ye(Pe.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Ye(Pe.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Ye(Pe.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Ye(Pe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Tl.join(l,"envDir")),Ye(Pe.CONFIG_PARAMS.STORAGE_PATH,Tl.join(l,"envDir")),s&&(Ye(Pe.CONFIG_PARAMS.HTTP_SECUREPORT,FY(Pe.CONFIG_PARAMS.HTTP_PORT)),Ye(Pe.CONFIG_PARAMS.HTTP_PORT,null)),Ye(Pe.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),Ye(Pe.CONFIG_PARAMS.HTTP_PORT,9926),Ye(Pe.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Ye(Pe.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT,9925),Ye(Pe.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Uh.isEmpty(i)?!1:i),Ye(Pe.CONFIG_PARAMS.HTTP_CORS,Uh.isEmpty(i)?!1:i),Ye(Pe.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Ye(Pe.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Ye(Pe.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Ye(Pe.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Ye(Pe.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Tl.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Ye(Pe.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Uh.isEmpty(c)?!1:c),o&&(Ye("CORS_ACCESSLIST",o),Ye(Pe.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(Ye(Pe.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),Ye(Pe.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(Ye(Pe.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Ye(Pe.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(Ye(Pe.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Ye(Pe.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${QS}. Please check your boot props and settings files`;xh.fatal(r),xh.error(t)}}a(WEe,"initTestEnvironment")});var fm={};Be(fm,{Blob:()=>mi,blobsWereEncoded:()=>Yl,databasePaths:()=>XS,decodeBlobsWithWrites:()=>oO,decodeFromDatabase:()=>uc,decodeWithBlobCallback:()=>aO,deleteBlob:()=>XY,deleteBlobsInObject:()=>eo,deleteRootBlobPathsForDB:()=>xI,encodeBlobsAsBuffers:()=>nme,encodeBlobsWithFilePath:()=>Kp,getFileId:()=>Dm,getFilePathForBlob:()=>eW,getRootBlobPathsForDB:()=>rT,setDeletionDelay:()=>JEe});function jY(){}function XY(e){let t=eW(e);if(!t){Lo.default.debug?.("No file path for blob, can not delete");return}setTimeout(()=>{(0,Qe.unlink)(t,r=>{r&&Lo.default.debug?.("Error trying to remove blob file",r)})},JY)}function JEe(e){JY=e}function ZY(e){let t=Cn.get(e);if(!t)t={storageIndex:0,fileId:null,store:ii},Cn.set(e,t);else{if(t.saving)return t;t.store=ii}return ZEe(t),t.source?GI(e,t.source,t):t.contentBuffer?XEe(e,t):GI(e,Hh.Readable.from(e.stream()),t),t}function GI(e,t,r){let{filePath:n,fileId:s,store:i,compress:o,flush:c}=r;return r.saving=new Promise((l,u)=>{let f=s+":blob";if(!i.attemptLock(f,0))throw new Error(`Unable to get lock for blob file ${s}`);let d=(0,Qe.createWriteStream)(n,{autoClose:!1,flags:"w"});if(t.errored){let g=Buffer.from(t.errored.toString());d.end(Buffer.concat([p(BigInt(g.length)+0xff000000000000n),g]));return}let h=!1;e.size!==void 0&&(d.write(p(e.size)),h=!0);let _;o?(h||d.write(QEe),_=(0,eT.createDeflate)(),t.pipe(_).pipe(d)):(h||d.write(zEe),t.pipe(d)),t.on("error",S);function p(g){let T=BigInt(g),m=new Uint8Array(yr),A=new DataView(m.buffer);return T|=BigInt(o?qI:QY)<<48n,A.setBigInt64(0,T),m}a(p,"createHeader");function S(g){i.unlock(f,0);let T=d.fd;g?(T&&(0,Qe.close)(T),u(g)):c?(0,Qe.fdatasync)(T,m=>{m&&u(m),l(),(0,Qe.close)(T)}):(l(),(0,Qe.close)(T))}a(S,"finished"),d.on("error",S).on("finish",()=>{if(h)S();else{let g=_?_.bytesWritten:d.bytesWritten-yr;e.size=g,(0,Qe.write)(d.fd,p(g),0,yr,0,S)}})}),e}function Dm(e){return Cn.get(e)?.fileId}function eW(e){let t=Cn.get(e);return t?.fileId&&kh(t)}function rT(e){if(!e)throw new Error("No store specified, can not determine blob storage path");let t=XS.get(e);if(!t){if(!e.databaseName)throw new Error("No database name specified, can not determine blob storage path");let r=(0,tT.get)(B.STORAGE_BLOBPATHS);r?t=r.map(n=>(0,vo.join)(n,e.databaseName)):t=[(0,vo.join)((0,tT.getHdbBasePath)(),"blobs",e.databaseName)],XS.set(e,t)}return t}async function xI(e){let t=XS.get(e);t&&await Promise.all(t.map(r=>tW(r)))}async function tW(e){for(let t of await(0,oi.readdir)(e,{withFileTypes:!0}))if(t.isDirectory())await tW((0,vo.join)(e,t.name));else try{await(0,oi.unlink)((0,vo.join)(e,t.name))}catch(r){Lo.default.warn?.("Error deleting file",r)}try{await(0,oi.rmdir)(e)}catch(t){Lo.default.warn?.("Error deleting directory",t)}}function kh({storageIndex:e,fileId:t,store:r}){let n=rT(r);return(0,vo.join)(n[e],t.slice(-9,-6)||"0",t.slice(-6,-3)||"0",t.length<=9?t.slice(-3):t.slice(0,-9)+t.slice(-3))}function XEe(e,t){let r=t.contentBuffer,n=r.length;if(!(n<zY))return e.size=n,GI(e,Hh.Readable.from([r]),t)}function ZEe(e){let t=rT(e.store),r=eme(),n=t?.length>1?tme(t,r):0,s=r.toString(16);e.storageIndex=n,e.fileId=s;let i=kh(e),o=(0,vo.dirname)(i);(0,Qe.existsSync)(o)||(0,WY.ensureDirSync)(o),e.filePath=i}function eme(){let e=YY.get(ii);if(!e){let t=0,r=rT(ii);for(let n of r){let s=0;for(let i=0;i<3;i++){s=s*4096;let o=0;if((0,Qe.existsSync)(n))for(let c of(0,Qe.readdirSync)(n)){let l=parseInt(c,16);i===2&&c.length>3&&(l=parseInt(c.slice(-3),16),l+=parseInt(c.slice(0,-3),16)*68719476736),l>o&&(o=l)}s+=o,n=(0,vo.join)(n,o.toString(16))}t=Math.max(t,s)}e=new BigInt64Array([BigInt(t)+1n]),e=new BigInt64Array(ii.getUserSharedBuffer("blob-file-id",e.buffer)),YY.set(ii,e)}return Number(Atomics.add(e,0,1n))}function tme(e,t){let r=Date.now();if(!e.frequencyTable){e.lastUpdated=0;let s=new Array(ZS);for(let i=0;i<s.length;i++)s[i]=i%e.length;e.frequencyTable=s}return(e.lastUpdated??0)+6e4<r&&(e.lastUpdated=r,rme(e)),e.frequencyTable[t%ZS]}async function rme(e){if(!oi.statfs)return;let t=await Promise.all(e.map(async(s,i)=>{let o=await(0,oi.statfs)(s),c=o.bavail*o.bsize;return Math.pow(c,.8)})),r=new Array(ZS),n=t.map(s=>1/s);for(let s=0;s<ZS;s++){let i=1/0,o=0;for(let c=0;c<n.length;c++)n[c]<i&&(o=c,i=n[c]);n[o]+=1/t[o],r[s]=o}e.frequencyTable=r}function Kp(e,t,r){Nd=t,ii=r,Yl=!1;try{return e()}finally{Nd=void 0,ii=void 0}}function nme(e){Br=[];let t;try{t=e()}catch(n){throw Br=void 0,n}let r=Br.length<2?Br[0]:Promise.all(Br);return Br=void 0,r?r.then(()=>e()):t}function oO(e,t){try{Br=[],Al=t,e()}catch(n){throw Al=void 0,Br=void 0,n}Al=void 0;let r=Br.length<2?Br[0]:Promise.all(Br);return Br=void 0,r}function aO(e,t){try{return Al=t,e()}finally{Al=void 0}}function uc(e,t){return ii=t,e()}function eo(e){if(e instanceof mi)XY(e);else if(e.constructor===Object||Array.isArray(e))for(let t in e)typeof e[t]=="object"&&eo(e[t])}function sme(){return class{static{a(this,"Blob")}content;constructor(t){this.content=t[0]}stream(){return new ReadableStream({start(t){t.enqueue(this.content),t.close()}})}text(){return Promise.resolve(this.content.toString())}arrayBuffer(){return Promise.resolve(this.content.buffer)}get size(){return this.content.length}slice(){throw new Error("Not implemented")}bytes(){return Promise.resolve(this.content)}get type(){return""}}}var Mo,oi,Qe,eT,Hh,WY,tT,vo,Lo,zY,yr,QY,qI,VY,zEe,QEe,KY,Cn,Al,mi,Nd,Br,ii,Yl,Bh,jS,jEe,JS,JY,XS,YY,ZS,cs=be(()=>{Mo=require("msgpackr"),oi=require("node:fs/promises"),Qe=require("node:fs"),eT=require("node:zlib"),Hh=require("node:stream"),WY=require("fs-extra"),tT=U(ce());H();vo=require("path"),Lo=U(Qi());Xi();zY=8192,yr=8,QY=0,qI=1,VY=255,zEe=new Uint8Array([0,QY,255,255,255,255,255,255]),QEe=new Uint8Array([0,qI,255,255,255,255,255,255]),KY=0xffffffffffff,Cn=new WeakMap,mi=global.Blob||sme(),Yl=!1,Bh=new Uint8Array(8),jS=new DataView(Bh.buffer),jEe=6e4;a(jY,"InstanceOfBlobWithNoConstructor");jY.prototype=mi.prototype;JS=class e extends jY{static{a(this,"FileBackedBlob")}type="";size;#e;#t;constructor(t){super(),t?.type&&(this.type=t.type),t?.size!=null&&(this.size=t.size)}on(t,r){if(t==="error")this.#e??=[],this.#e.push(r);else if(t==="size")this.#t??=[],this.#t.push(r);else throw new Error("Only 'error' and 'size' events are supported")}toJSON(){if(this.type?.startsWith("text")){let t=Cn.get(this),{start:r,end:n,contentBuffer:s}=t;return s&&(n!==void 0||r!==void 0)&&(s=s.subarray(r??0,n??t.contentBuffer.length)),s?s.toString():(mA(this.bytes().then(i=>t.contentBuffer=i)),"")}return{description:"Blobs that are not of type text/* can not be directly serialized as JSON, use as the body of a response or convert to another type"}}async text(){return(await this.bytes()).toString()}bytes(){let t=Cn.get(this),{start:r,end:n,contentBuffer:s}=t;if(s)return(n!==void 0||r!==void 0)&&(s=s.subarray(r??0,n??t.contentBuffer.length)),Promise.resolve(s);let i=kh(t),o,c=a(async()=>{let l,u=yr;try{if(l=await(0,oi.readFile)(i),l.length>=yr){l.copy(Bh,0,0,yr);let d=jS.getBigUint64(0);if(Number(d>>48n)===VY)throw new Error("Error in blob: "+buffer.subarray(yr));if(u=Number(d&0xffffffffffffn),u<n&&(u=n),u<KY&&(this.size=u,this.#t))for(let h of this.#t)h(u)}}catch(d){if(d.code!=="ENOENT")throw d;l=Buffer.alloc(0)}function f(d){if(u>d.length){let h=t.store,_=t.fileId+":blob";if(o)throw new Error("Incomplete blob");return new Promise((p,S)=>{if(h.attemptLock(_,0,()=>(o=!0,h.unlock(_,0),p(c()))))return o=!0,h.unlock(_,0),p(c())})}return(n!=null||r!=null)&&(d=d.subarray(r??0,n??d.length)),d}return a(f,"checkCompletion"),l[1]===qI?new Promise((d,h)=>{(0,eT.deflate)(l.subarray(yr),(_,p)=>{_?h(_):d(f(p))})}):f(l.subarray(yr))},"readContents");return c()}async arrayBuffer(){let t=await this.bytes(),r=new ArrayBuffer(t.length);return new Uint8Array(r).set(t),r}stream(){let t=Cn.get(this),{contentBuffer:r,start:n,end:s}=t;if(r)return(s!=null||n!=null)&&(r=r.subarray(n??0,s??t.contentBuffer.length)),new ReadableStream({pull(p){p.enqueue(r),p.close()}});let i=kh(t),o,c=0,l=0,u,f,d,h=this;return new ReadableStream({start(){let p=1e3,S=a((g,T)=>{(0,Qe.open)(i,"r",(m,A)=>{if(m){if(m.code==="ENOENT"&&d!==!1&&(Lo.default.debug?.("File does not exist yet, waiting for it to be created",i,p),p-- >0))return setTimeout(()=>{_(),S(g,T)},20).unref();T(m),h.#e?.forEach(w=>w(m))}else o=A,g(A)})},"openFile");return new Promise(S)},pull:a(p=>{let S=0,g=100;return new Promise(a(function T(m,A){function w(F){(0,Qe.close)(o),u&&u.close(),A(F),h.#e?.forEach(G=>G(F))}a(w,"onError");let M=Buffer.allocUnsafe(262144);(0,Qe.read)(o,M,0,M.length,c,(F,G,K)=>{if(l+=G,F)return w(F);if(c===0){if(G<yr){g-- >0&&d!==!1?(_(),Lo.default.debug?.("File was empty, waiting for data to be written",i,g),setTimeout(()=>T(m,A),20).unref()):(Lo.default.debug?.("File was empty, throwing error",i,g),A(new Error(`Blob ${t.fileId} was empty`)));return}K.copy(Bh,0,0,yr);let ee=jS.getBigUint64(0);if(Number(ee>>48n)===VY)return w(new Error("Error in blob: "+K.subarray(yr)));if(S=Number(ee&0xffffffffffffn),S<KY&&h.size!==S&&(h.size=S,h.#t))for(let ie of h.#t)ie(S);K=K.subarray(yr,G),l-=yr}else if(G===0){let ee=Buffer.allocUnsafe(8);return(0,Qe.read)(o,ee,0,yr,0,ie=>{if(ie)return w(ie);if(Bh.set(ee),S=Number(jS.getBigUint64(0)&0xffffffffffffn),S>l){d!==!1?(f=setTimeout(()=>{w(new Error("File read timed out"))},jEe).unref(),u=(0,Qe.watch)(i,{persistent:!1},()=>{clearTimeout(f),u.close(),_(),T(m,A)})):w(new Error("Blob is incomplete"));return}(0,Qe.close)(o),p.close(),m()})}else K=K.subarray(0,G);if(n!==void 0||s!==void 0){if(n&&l<n)return c+=G,T(m,A);s&&l>=s&&(l>s&&(K=K.subarray(0,s-c)),l=S=s),n&&n>c&&(K=K.subarray(n-c))}c+=G;try{p.enqueue(K)}catch(ee){return Lo.default.debug?.("Error enqueuing chunk",ee),m()}l===S&&((0,Qe.close)(o),p.close()),m()})},"readMore"))},"pull"),cancel(){(0,Qe.close)(o),clearTimeout(f),u&&u.close()}});function _(){if(d===void 0){let p=t.store,S=t.fileId+":blob";d=!p.attemptLock(S,0,()=>{d=!1,p.unlock(S,0)}),d||p.unlock(S,0)}return d}}slice(t,r,n){let s=Cn.get(this),i=new e(n&&{type:n});if(s?.fileId){let o={...s,start:t,end:r};Cn.set(i,o),this.size!=null&&(i.size=(r==null?this.size:Math.min(r,this.size))-(t??0))}else if(s?.contentBuffer&&!s.storageBuffer){let o={...s,contentBuffer:s.contentBuffer.subarray(t,r)};Cn.set(i,o),i.size=(r??this.size)-t}else throw new Error("Can not slice a streaming blob that is not backed by a file");return i}save(t){if(!t?.primaryStore?.rootStore)throw new Error("No target table specified");return ZY(this).saving??Promise.resolve()}},JY=500;a(XY,"deleteBlob");a(JEe,"setDeletionDelay");global.createBlob=function(e,t){let r=new JS(t),n={storageIndex:0,fileId:null,flush:t?.flush,compress:t?.compress};if(Cn.set(r,n),e instanceof Uint8Array)r.size=e.length,n.contentBuffer=e;else if(e instanceof Hh.Readable)n.source=e;else if(typeof e=="string")n.contentBuffer=Buffer.from(e);else if(e?.[Symbol.asyncIterator]||e?.[Symbol.iterator])n.source=Hh.Readable.from(e);else throw new Error("Invalid source type");return r};a(ZY,"saveBlob");a(GI,"writeBlobWithStream");a(Dm,"getFileId");a(eW,"getFilePathForBlob");XS=new Map;a(rT,"getRootBlobPathsForDB");a(xI,"deleteRootBlobPathsForDB");a(tW,"rimrafSteadily");a(kh,"getFilePath");a(XEe,"writeBlobWithBuffer");a(ZEe,"generateFilePath");YY=new Map;a(eme,"getNextFileId");ZS=128;a(tme,"getNextStorageIndex");a(rme,"createFrequencyTableForStoragePaths");a(Kp,"encodeBlobsWithFilePath");a(nme,"encodeBlobsAsBuffers");a(oO,"decodeBlobsWithWrites");a(aO,"decodeWithBlobCallback");a(uc,"decodeFromDatabase");a(eo,"deleteBlobsInObject");(0,Mo.addExtension)({Class:mi,type:11,unpack:a(function(e){let t=(0,Mo.unpack)(e),r=new JS;if(Object.assign(r,t[0]),typeof t[1]!="object"){if(!ii)throw new Error("No store specified, can not load blob from storage");if(Cn.set(r,{storageIndex:t[1],fileId:t[2],store:ii}),Al)return Al(r)??r}else Cn.set(r,{storageIndex:0,fileId:null,storageBuffer:e,contentBuffer:t[1]}),r.size=t[1]?.length;return r},"unpack"),pack:a(function(e){let t=Cn.get(e);if(Nd!==void 0&&(Yl=!0,t?.recordId!==void 0&&t.recordId!==Nd))throw new Error("Cannot use the same blob in two different records");let r={...e};if(e.type&&(r.type=e.type),e.size!==void 0&&(r.size=e.size),t){if(t.storageBuffer)return t.storageBuffer;if(t.contentBuffer?.length<zY)return r.size=t.contentBuffer.length,(0,Mo.pack)([r,t.contentBuffer])}if(Nd!==void 0){if(t=ZY(e),!t.fileId)throw new Error("Unable to save blob without file id");return t.recordId=Nd,(0,Mo.pack)([r,t.storageIndex,t.fileId])}if(t)try{let n=(0,Qe.readFileSync)(kh(t));if(n.length>=yr&&(n.copy(Bh,0,0,yr),Number(jS.getBigUint64(0)&0xffffffffffffn)===n.length-yr))return Buffer.concat([(0,Mo.pack)([r]),n]);if(Br)Br.push(e.bytes());else throw new Error("Incomplete blob");return Buffer.alloc(0)}catch(n){if(n.code==="ENOENT"&&Br)return Br.push(e.bytes()),Buffer.alloc(0);throw n}else throw new Error("Blob has no storage info or buffer attached to it")},"pack")});(0,Mo.addExtension)({Class:Promise,type:12,pack(){throw new Error("Cannot encode a promise")}});a(sme,"polyfillBlob")});var VI=P((aMe,rW)=>{"use strict";var Fh=ce();Fh.initSync();var wd=require("fs-extra"),$I=require("path"),Id=(H(),D(q)),ime=require("crypto"),ome=require("uuid").v4;rW.exports=ame;function ame(){if(Fh.getHdbBasePath()!==void 0){let e=$I.join(Fh.getHdbBasePath(),Id.LICENSE_KEY_DIR_NAME,Id.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=$I.join(Fh.getHdbBasePath(),Id.LICENSE_KEY_DIR_NAME,Id.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=$I.join(Fh.getHdbBasePath(),Id.LICENSE_KEY_DIR_NAME,Id.JWT_ENUM.JWT_PASSPHRASE_NAME);try{wd.accessSync(r),wd.accessSync(e),wd.accessSync(t)}catch(n){if(n.code==="ENOENT"){let s=ome(),i=ime.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:s}});wd.writeFileSync(r,s),wd.writeFileSync(e,i.privateKey),wd.writeFileSync(t,i.publicKey)}else throw n}}}a(ame,"checkJWTTokenExist")});var sW=P((lMe,nW)=>{"use strict";var KI=class{static{a(this,"HdbInfoInsertObject")}constructor(t,r,n){this.info_id=t,this.data_version_num=r,this.hdb_version_num=n}};nW.exports={HdbInfoInsertObject:KI}});var aW=P((dMe,oW)=>{"use strict";var iW=(H(),D(q)),YI=class{static{a(this,"UpgradeObject")}constructor(t,r){this[iW.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[iW.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};oW.exports={UpgradeObject:YI}});var nT=P((_Me,lW)=>{"use strict";var Ps=require("prompt"),Cd=require("chalk"),cW=j(),ai=require("os"),WI=ec(),zI=["yes","y"];async function cme(e){let t=`${ai.EOL}`+Cd.bold.green("Your current HarperDB version requires that we complete an update process.")+`${ai.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${ai.EOL}${ai.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${ai.EOL}`;Ps.override=WI(["CONFIRM_UPGRADE"]),Ps.start(),Ps.message=t;let r={properties:{CONFIRM_UPGRADE:{description:Cd.magenta(`${ai.EOL}[CONFIRM_UPGRADE] Do you want to upgrade your HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n;try{n=await Ps.get([r])}catch(s){return cW.error("There was an error when prompting user about an upgrade."),cW.error(s),!1}return zI.includes(n.CONFIRM_UPGRADE)}a(cme,"forceUpdatePrompt");async function lme(e){let t=`${ai.EOL}`+Cd.bold.green(`Your installed HarperDB version is older than the version used to create your data. Downgrading is not recommended as it is not tested and guaranteed to work. However, if you need to downgrade, and a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${ai.EOL}`);Ps.override=WI(["CONFIRM_DOWNGRADE"]),Ps.start(),Ps.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:Cd.magenta(`${ai.EOL}[CONFIRM_DOWNGRADE] Do you want to proceed with using your downgraded HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n=await Ps.get([r]);return zI.includes(n.CONFIRM_DOWNGRADE)}a(lme,"forceDowngradePrompt");async function ume(){let e=`${ai.EOL}`+Cd.bold.green("We now require a Certifacte Authority certificate. HarperDB can generate all new certificates for you (your existing certificates will be backed up) or you can keep any existing certificates and add your own CA certificate. To add your own CA certificate set the <certificateAuthority> parameter in harperdb-config.yaml");Ps.override=WI(["GENERATE_CERTS"]),Ps.start(),Ps.message=e;let t={properties:{GENERATE_CERTS:{description:Cd.magenta(`${ai.EOL}[GENERATE_CERTS] Do you want HarperDB to generate all new certificates? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"yes",required:!0}}},r=await Ps.get([t]);return zI.includes(r.GENERATE_CERTS)}a(ume,"upgradeCertsPrompt");lW.exports={forceUpdatePrompt:cme,forceDowngradePrompt:lme,upgradeCertsPrompt:ume}});var jI=P((pMe,uW)=>{"use strict";var QI=class{static{a(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};uW.exports=QI});var fW=P((AMe,dW)=>{"use strict";var dme=ae(),fme=wt(),mMe=j(),gMe=require("path"),SMe=require("fs"),TMe=(H(),D(q));dW.exports={getOldPropsValue:_me};function _me(e,t,r=!1){let n=t.getRaw(e);return dme.isNotEmptyAndHasValue(n)?n:r?fme.getDefaultConfig(e):""}a(_me,"getOldPropsValue")});var EW=P((yMe,pW)=>{"use strict";var Fa=require("path"),Ga=require("fs-extra"),hme=require("properties-reader"),pme=jI(),ur=j(),{getOldPropsValue:dt}=fW(),{HDB_SETTINGS_NAMES:me,CONFIG_PARAMS:Rl}=(H(),D(q)),yl=wt(),sT=ce(),_W=ae(),ki=(H(),D(q)),JI=new pme("3.1.0"),hW=[];function Eme(){let e=hme(sT.get(me.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),ur.info(t);let r=` ;Settings for the HarperDB process.
37
+ IdentitiesOnly yes`;await Oe.pathExists(l)?await Oe.appendFile(l,`
38
+ `+u):await Oe.outputFile(l,u);let f="";if(await Oe.pathExists(Ao)||(await Oe.writeFile(Ao,""),await Oe.chmod(Ao,"0600")),i=="github.com"&&!(await Oe.readFile(Ao,"utf8")).includes("github.com"))try{let S=(await(await fetch("https://api.github.com/meta")).json()).ssh_keys;for(let g of S)Oe.appendFile(Ao,"github.com "+g+`
39
+ `)}catch{f=". Unable to get known hosts from github.com. Set your known hosts manually using set_ssh_known_hosts."}o&&await Oe.appendFile(Ao,o);let d=await Xs(e);return d.message=`Added ssh key: ${r}${f}`,d}a(vue,"addSSHKey");async function Uue(e){let t=Rn.updateSSHKeyValidator(e);if(t)throw xt(t,t.message,Bt.BAD_REQUEST);let{name:r,key:n}=e;Ut.trace("updating ssh key",r);let s=we.join(Ia,r+".key");if(!await Oe.pathExists(s))throw new Error("Key does not exist. Use add_ssh_key");await Oe.outputFile(s,n);let i=await Xs(e);return i.message=`Updated ssh key: ${r}`,i}a(Uue,"updateSSHKey");async function xue(e){let t=Rn.deleteSSHKeyValidator(e);if(t)throw xt(t,t.message,Bt.BAD_REQUEST);let{name:r}=e;Ut.trace("deleting ssh key",r);let n=we.join(Ia,r+".key"),s=we.join(Ia,"config");if(!await Oe.pathExists(n))throw new Error("Key does not exist");let i=await Oe.readFile(s,"utf8"),o=new RegExp(`#${r}[\\S\\s]*?IdentitiesOnly yes`,"g");i=i.replace(o,""),await Oe.outputFile(s,i),Oe.removeSync(n);let c=await Xs(e);return c.message=`Deleted ssh key: ${r}`,c}a(xue,"deleteSSHKey");async function Bue(e){let t=[];return await Oe.pathExists(Ia)&&(await Oe.readdir(Ia)).forEach(r=>{r!="known_hosts"&&r!="config"&&t.push({name:r.split(".")[0]})}),t}a(Bue,"listSSHKeys");async function Hue(e){let t=Rn.setSSHKnownHostsValidator(e);if(t)throw xt(t,t.message,Bt.BAD_REQUEST);let{known_hosts:r}=e;await Oe.outputFile(Ao,r);let n=await Xs(e);return n.message="Known hosts successfully set",n}a(Hue,"setSSHKnownHosts");async function kue(e){return await Oe.pathExists(Ao)?{known_hosts:await Oe.readFile(Ao,"utf8")}:{known_hosts:null}}a(kue,"getSSHKnownHosts");Object.assign(g$,{customFunctionsStatus:Tue,getCustomFunctions:Aue,getCustomFunction:Rue,setCustomFunction:yue,dropCustomFunction:bue,addComponent:Oue,dropCustomFunctionProject:Nue,packageComponent:wue,deployComponent:Iue,getComponents:Pue,getComponentFile:Due,setComponentFile:Lue,dropComponent:Mue,addSSHKey:vue,updateSSHKey:Uue,deleteSSHKey:xue,listSSHKeys:Bue,setSSHKnownHosts:Hue,getSSHKnownHosts:kue})});var JN=I((DPe,T$)=>{"use strict";var Ts=require("joi"),S$=dt();T$.exports={readTransactionLogValidator:Fue,deleteTransactionLogsBeforeValidator:Gue};function Fue(e){let t=Ts.object({schema:Ts.string(),database:Ts.string(),table:Ts.string().required(),from:Ts.date().timestamp(),to:Ts.date().timestamp(),limit:Ts.number().min(1)});return S$.validateBySchema(e,t)}a(Fue,"readTransactionLogValidator");function Gue(e){let t=Ts.object({schema:Ts.string(),database:Ts.string(),table:Ts.string().required(),timestamp:Ts.date().timestamp().required()});return S$.validateBySchema(e,t)}a(Gue,"deleteTransactionLogsBeforeValidator")});var Yg=I((MPe,N$)=>{"use strict";var XN=(H(),D(q)),mh=pr(),A$=oe(),R$=ce(),y$=ro(),b$=j(),{handleHDBError:Vg,hdb_errors:que}=he(),{HTTP_STATUS_CODES:Kg}=que,{readTransactionLogValidator:$ue,deleteTransactionLogsBeforeValidator:Vue}=JN(),O$=Hn(),Kue="Logs successfully deleted from transaction log.",Yue="All logs successfully deleted from transaction log.";N$.exports={readTransactionLog:Wue,deleteTransactionLogsBefore:Que};async function Wue(e){let t=$ue(e);if(t)throw Vg(t,t.message,Kg.BAD_REQUEST,void 0,void 0,!0);e.database=e.database??e.schema??"data";let r=A$.checkSchemaTableExist(e.database,e.table);if(r)throw Vg(new Error,r,Kg.NOT_FOUND,void 0,void 0,!0);return R$.get(XN.CONFIG_PARAMS.CLUSTERING_ENABLED)?await zue(e):(b$.info("Reading HarperDB logs used by Plexus"),(e.from||e.to)&&(e.search_type="timestamp",e.search_values=[e.from??0],e.to&&(e.search_values[1]=e.to)),O$.readAuditLog(e))}a(Wue,"readTransactionLog");async function*zue(e){let t=y$.createNatsTableStreamName(e.database,e.table),r=await mh.viewStreamIterator(t,parseInt(e.from),e.limit);for await(let n of r){let s=Math.floor(n?.nats_timestamp/1e6);if(e.to&&s>e.to)break;let i={operation:n?.entry?.operation,user:n?.entry?.__origin?.user,timestamp:s,records:n?.entry?.records,attributes:n?.entry?.attributes};n?.entry?.operation===XN.OPERATIONS_ENUM.DELETE&&(i.hash_values=n?.entry?.hash_values),yield i}}a(zue,"readTransactionLogNats");async function Que(e){let t=Vue(e);if(t)throw Vg(t,t.message,Kg.BAD_REQUEST,void 0,void 0,!0);if(e.database=e.database??e.schema??"data",!R$.get(XN.CONFIG_PARAMS.CLUSTERING_ENABLED))return b$.info("Delete transaction logs called for Plexus"),O$.deleteAuditLogsBefore(e);let{database:r,table:n,timestamp:s}=e,i=A$.checkSchemaTableExist(r,n);if(i)throw Vg(new Error,i,Kg.NOT_FOUND,void 0,void 0,!0);let o=y$.createNatsTableStreamName(r,n),{jsm:c}=await mh.getNATSReferences(),l=await mh.getStreamInfo(o),u=new Date(l.state.first_ts).getTime();if(s<=u)return`No transactions exist before: ${s}`;let f=Kue,d,h=new Date(l.state.last_ts).getTime();return s>h?(d=l.state.last_seq+1,f=Yue):d=(await mh.viewStream(o,parseInt(s),1))[0].nats_sequence,await mh.purgeTableStream(r,n,{seq:d}),f}a(Que,"deleteTransactionLogsBefore")});var I$=I((UPe,w$)=>{"use strict";var ZN=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}};w$.exports=ZN});var P$=I((BPe,C$)=>{"use strict";var ew=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};C$.exports=ew});var rw=I((kPe,L$)=>{"use strict";var D$=I$(),jue=P$(),{HDB_ERROR_MSGS:Jue}=Cn(),tw=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=Jue.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 D$(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new jue(c,s[c]);i.push(l)});let o=`${r}_${n}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new D$(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}};L$.exports=tw});var jg=I(($Pe,Q$)=>{"use strict";var nw=hn(),Wg=$r(),As=ZE(),Sh=no(),sw=Tc(),Xue=yO(),Zue=Vk(),Th=Gn(),zg=a_(),mr=j(),ede=IO(),tde=dg(),rde=ZO(),nde=_g(),sde=rN(),ide=nN(),ode=oN(),ade=cN(),iw=gg(),Ro=oe(),cde=yG(),ow=AN(),U$=rd(),Zr=(H(),D(q)),x$=Bq(),lde=$u(),B$=(Tu(),D(S_)),H$=(Hg(),D(ah)),k$=It(),ar=QN(),ude=require("alasql"),F$=Yg(),G$=dh(),ad=Qs(),q$=(jc(),D(Qc)),$$=rw(),{handleHDBError:yn,hdb_errors:V$}=he(),{addNodeBack:GPe,removeNodeBack:qPe}=(jc(),D(Qc)),{HDB_ERROR_MSGS:Lr,HTTP_STATUS_CODES:Eh}=V$,J=new Map,K$="delete",Ca="insert",yo="read",ll="update",gh="describe",M$=Sh.describeSchema.name,v$=Sh.describeTable.name,Y$={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},dde={insert:!0,delete:!0,deleteRecord:!0,update:!0,updateData:!0,upsert:!0,upsertData:!0},fde="catchup",_de="handleGetJob",hde="handleGetJobsByStartDate",Qg={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},pde=[As.createTable.name,As.createAttribute.name,As.dropTable.name,As.dropAttribute.name],W$={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},re=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};J.set(nw.insert.name,new re(!1,[Ca]));J.set(nw.update.name,new re(!1,[ll]));J.set(nw.upsert.name,new re(!1,[Ca,ll]));J.set(Wg.searchByConditions.name,new re(!1,[yo]));J.set(Wg.searchByHash.name,new re(!1,[yo]));J.set(Wg.searchByValue.name,new re(!1,[yo]));J.set(Wg.search.name,new re(!1,[yo]));J.set(As.createSchema.name,new re(!0,[]));J.set(As.createTable.name,new re(!0,[]));J.set(As.createAttribute.name,new re(!1,[Ca]));J.set(As.dropSchema.name,new re(!0,[]));J.set(As.dropTable.name,new re(!0,[]));J.set(As.dropAttribute.name,new re(!0,[]));J.set(Sh.describeSchema.name,new re(!1,[yo]));J.set(Sh.describeTable.name,new re(!1,[yo]));J.set(sw.deleteRecord.name,new re(!1,[K$]));J.set(Th.addUser.name,new re(!0,[]));J.set(Th.alterUser.name,new re(!0,[]));J.set(Th.dropUser.name,new re(!0,[]));J.set(Th.listUsersExternal.name,new re(!0,[]));J.set(zg.listRoles.name,new re(!0,[]));J.set(zg.addRole.name,new re(!0,[]));J.set(zg.alterRole.name,new re(!0,[]));J.set(zg.dropRole.name,new re(!0,[]));J.set(ede.name,new re(!0,[]));J.set(tde.name,new re(!0,[]));J.set(rde.name,new re(!0,[]));J.set(nde.name,new re(!0,[]));J.set(sde.name,new re(!0,[]));J.set(ide.name,new re(!0,[]));J.set(iw.setRoutes.name,new re(!0,[]));J.set(iw.getRoutes.name,new re(!0,[]));J.set(iw.deleteRoutes.name,new re(!0,[]));J.set(k$.setConfiguration.name,new re(!0,[]));J.set(ode.clusterStatus.name,new re(!0,[]));J.set(ade.name,new re(!0,[]));J.set(ow.getFingerprint.name,new re(!0,[]));J.set(ow.setLicense.name,new re(!0,[]));J.set(sw.deleteFilesBefore.name,new re(!0,[]));J.set(sw.deleteAuditLogsBefore.name,new re(!0,[]));J.set(U$.restart.name,new re(!0,[]));J.set(U$.restartService.name,new re(!0,[]));J.set(Xue.name,new re(!0,[]));J.set(Zue.name,new re(!0,[yo]));J.set(lde.systemInformation.name,new re(!0,[]));J.set(k$.getConfiguration.name,new re(!0,[]));J.set(F$.readTransactionLog.name,new re(!0,[]));J.set(F$.deleteTransactionLogsBefore.name,new re(!0,[]));J.set(G$.installModules.name,new re(!0,[]));J.set(G$.auditModules.name,new re(!0,[]));J.set(ad.createCsr.name,new re(!0,[]));J.set(ad.signCertificate.name,new re(!0,[]));J.set(ad.listCertificates.name,new re(!0,[]));J.set(ad.addCertificate.name,new re(!0,[]));J.set(ad.removeCertificate.name,new re(!0,[]));J.set(ad.getKey.name,new re(!0,[]));J.set(q$.addNodeBack.name,new re(!0,[]));J.set(q$.removeNodeBack.name,new re(!0,[]));J.set(B$.createTokens.name,new re(!1,[]));J.set(B$.refreshOperationToken.name,new re(!1,[]));J.set(H$.login.name,new re(!1,[]));J.set(H$.logout.name,new re(!1,[]));J.set(ar.customFunctionsStatus.name,new re(!0,[]));J.set(ar.getCustomFunctions.name,new re(!0,[]));J.set(ar.getComponents.name,new re(!0,[]));J.set(ar.getComponentFile.name,new re(!0,[]));J.set(ar.setComponentFile.name,new re(!0,[]));J.set(ar.dropComponent.name,new re(!0,[]));J.set(ar.getCustomFunction.name,new re(!0,[]));J.set(ar.setCustomFunction.name,new re(!0,[]));J.set(ar.dropCustomFunction.name,new re(!0,[]));J.set(ar.addComponent.name,new re(!0,[]));J.set(ar.dropCustomFunctionProject.name,new re(!0,[]));J.set(ar.packageComponent.name,new re(!0,[]));J.set(ar.deployComponent.name,new re(!0,[]));J.set(ar.addSSHKey.name,new re(!0,[]));J.set(ar.updateSSHKey.name,new re(!0,[]));J.set(ar.deleteSSHKey.name,new re(!0,[]));J.set(ar.listSSHKeys.name,new re(!0,[]));J.set(ar.setSSHKnownHosts.name,new re(!0,[]));J.set(ar.getSSHKnownHosts.name,new re(!0,[]));J.set(ow.getRegistrationInfo.name,new re(!1,[]));J.set(Th.userInfo.name,new re(!1,[]));J.set(Sh.describeAll.name,new re(!1,[]));J.set(_de,new re(!1,[]));J.set(hde,new re(!0,[]));J.set(fde,new re(!0,[]));J.set(Qg.CSV_DATA_LOAD,new re(!1,[Ca,ll]));J.set(Qg.CSV_URL_LOAD,new re(!1,[Ca,ll]));J.set(Qg.CSV_FILE_LOAD,new re(!1,[Ca,ll]));J.set(Qg.IMPORT_FROM_S3,new re(!1,[Ca,ll]));J.set(W$.EXPORT_TO_S3,new re(!0,[]));J.set(W$.EXPORT_LOCAL,new re(!0,[]));J.set(Zr.VALID_SQL_OPS_ENUM.DELETE,new re(!1,[K$]));J.set(Zr.VALID_SQL_OPS_ENUM.SELECT,new re(!1,[yo]));J.set(Zr.VALID_SQL_OPS_ENUM.INSERT,new re(!1,[Ca]));J.set(Zr.VALID_SQL_OPS_ENUM.UPDATE,new re(!1,[ll]));Q$.exports={verifyPerms:Ede,verifyPermsAst:mde,verifyBulkLoadAttributePerms:Sde};function mde(e,t,r){if(Ro.isEmptyOrZeroLength(e))throw mr.info("verify_perms_ast has an empty user parameter"),yn(new Error);if(Ro.isEmptyOrZeroLength(t))throw mr.info("verify_perms_ast has an empty user parameter"),yn(new Error);if(Ro.isEmptyOrZeroLength(r))throw mr.info("verify_perms_ast has a null operation parameter"),yn(new Error);try{let n=new $$,s=new cde(e),i=s.getSchemas(),o=new Map;if((!i||i.length===0)&&s.affected_attributes&&s.affected_attributes.size>0)throw mr.info("No schemas defined in verifyPermsAst(), will not continue."),yn(new Error);let c=!!t.role.permission.super_user,l=i.includes("system");if(l&&Y$[r])throw yn(new Error,Lr.DROP_SYSTEM,Eh.FORBIDDEN);if(c&&!l)return null;let u=x$.getRolePermissions(t.role);t.role.permission=u,!c&&e instanceof ude.yy.Select&&(e=s.updateAttributeWildcardsForRolePerms(u));for(let d=0;d<i.length;d++){let h=s.getTablesBySchemaName(i[d]);h&&o.set(i[d],h)}let f=z$(t,r,o,n);return f||(o.forEach((d,h)=>{for(let _=0;_<d.length;_++){let p=s.getAttributesBySchemaTableName(h,d[_]),S=cw(t.role.permission,h,d[_]);aw(p,S,r,d[_],h,n)}}),n.getPermsResponse())}catch(n){throw yn(n)}}a(mde,"verifyPermsAst");function Ede(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw mr.info("null required parameter in verifyPerms"),yn(new Error,Lr.DEFAULT_INVALID_REQUEST,Eh.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 $$;if(Ro.isEmptyOrZeroLength(e.hdb_user?.role)||Ro.isEmptyOrZeroLength(e.hdb_user?.role?.permission))return mr.info(`User ${e.hdb_user?.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(Lr.USER_HAS_NO_PERMS(e.hdb_user?.username));let l=!!e.hdb_user?.role?.permission?.super_user,u=e.hdb_user?.role?.permission?.structure_user,f=o.has(Zr.SYSTEM_SCHEMA_NAME)||s===Zr.SYSTEM_SCHEMA_NAME;if(l&&f&&dde[e.operation]&&(i===Zr.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME||i===Zr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||i===Zr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME))return null;if(f&&Y$[r])throw yn(new Error,Lr.DROP_SYSTEM,Eh.FORBIDDEN);if(l&&!f||u===!0&&(r===As.createSchema.name||r===As.dropSchema.name))return null;if(pde.indexOf(r)>=0&&(u===!0||Array.isArray(u)))return u===!0||u.indexOf(s)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${s}'`);let d=x$.getRolePermissions(e.hdb_user?.role);if(e.hdb_user?.role&&(e.hdb_user.role.permission=d),(r===M$||r===v$)&&!d.super_user){if(s===Zr.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Lr.SCHEMA_PERM_ERROR(s));if(r===M$&&(!d[s]||!d[s][gh]))return c.handleInvalidItem(Lr.SCHEMA_NOT_FOUND(s));if(r===v$&&(!d[s]||!d[s].tables[i]||!d[s].tables[i][gh]))return c.handleInvalidItem(Lr.TABLE_NOT_FOUND(s,i))}let h=z$(e.hdb_user,r,o,c,n);if(h)return h;if(J.get(r)&&J.get(r).perms.length===0)return null;if(!l&&e.get_attributes&&Zr.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let S=[],g=d[s].tables[i];g[Zr.PERMS_CRUD_ENUM.READ]&&(g.attribute_permissions.length>0?g.attribute_permissions.filter(E=>E[Zr.PERMS_CRUD_ENUM.READ]).forEach(E=>{S.push(E.attribute_name)}):S=global.hdb_schema[s][i].attributes.map(R=>R.attribute),e.get_attributes=S)}let _=gde(e),p=cw(e.hdb_user?.role?.permission,s,i);return aw(_,p,r,i,s,c,n),c.getPermsResponse()}a(Ede,"verifyPerms");function z$(e,t,r,n,s){if(Ro.arrayHasEmptyValues([e,t,r]))throw mr.info("hasPermissions has an invalid parameter"),yn(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||J.get(t).requires_su))return null;if(!J.get(t))throw mr.info(`operation ${t} not found.`),yn(new Error,Lr.OP_NOT_FOUND(t),Eh.BAD_REQUEST);if(J.get(t)&&J.get(t).requires_su)return mr.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(Lr.OP_IS_SU_ONLY(t));let c=r.keys();for(let l of c){try{if(l&&!o[l]||o[l][gh]===!1){n.addInvalidItem(Lr.SCHEMA_NOT_FOUND(l));continue}}catch{n.addInvalidItem(Lr.SCHEMA_NOT_FOUND(l));continue}let u=r.get(l);for(let f of u){let d=o[l].tables[f];if(!d||d[gh]===!1)n.addInvalidItem(Lr.TABLE_NOT_FOUND(l,f));else try{let h=[],_=J.get(t).perms;!Ro.isEmpty(s)&&_.includes(s)&&(_=[s]);for(let p=0;p<_.length;p++){let S=_[p],g=d[S];(g==null||g===!1)&&(mr.info(`Required ${S} permission not found for ${t} ${s?`${s} `:""}operation in role ${e.role.id}`),h.push(S))}h.length>0&&n.addUnauthorizedTable(l,f,h)}catch(h){let _=Lr.UNKNOWN_OP_AUTH_ERROR(t,l,f);throw mr.error(_),mr.error(h),yn(V$.CHECK_LOGS_WRAPPER(_))}}}return r.size<2?n.getPermsResponse():null}a(z$,"hasPermissions");function aw(e,t,r,n,s,i,o){if(!e||!t)throw mr.info("no attributes specified in checkAttributePerms."),yn(new Error);let c=J.get(r).perms;if(!c||c==="")throw mr.info(`no permissions found for ${r} in checkAttributePerms().`),yn(new Error);if(Ro.isEmptyOrZeroLength(t))return mr.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let l={};for(let f of e){let d=t.get(f);if(d){if(d[gh]===!1){i.addInvalidItem(Lr.ATTR_NOT_FOUND(s,n,f),s,n);continue}if(c)for(let h of c){if(Zr.TIME_STAMP_NAMES.includes(d.attribute_name)&&h!==yo)throw yn(new Error,Lr.SYSTEM_TIMESTAMP_PERMS_ERR,Eh.FORBIDDEN);d[h]===!1&&(l[d.attribute_name]?l[d.attribute_name].push(h):l[d.attribute_name]=[h])}}else i.addInvalidItem(Lr.ATTR_NOT_FOUND(s,n,f),s,n)}let u=Object.keys(l);u.length>0&&i.addUnauthorizedAttributes(u,s,n,l)}a(aw,"checkAttributePerms");function gde(e){let t=new Set;try{if(e.action)return t;if(e.operation===Zr.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){mr.info(r)}return t}a(gde,"getRecordAttributes");function cw(e,t,r){let n=new Map;if(Ro.isEmpty(e))return mr.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{mr.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}a(cw,"getAttributePermissions");function Sde(e,t,r,n,s,i,o){let c=new Set(i),l=cw(e,n,s);aw(c,l,t,s,n,o,r)}a(Sde,"verifyBulkLoadAttributePerms")});var Xg=I((KPe,eV)=>{"use strict";eV.exports={evaluateSQL:Lde,processAST:Z$,convertSQLToAST:X$,checkASTPermissions:J$};var Tde=hn(),j$=require("util"),Ade=j$.callbackify(Tde.insert),Rde=$r().search,yde=vB().update,bde=j$.callbackify(yde),Ode=xB().convertDelete,Pa=require("alasql"),Nde=jg(),Jg=j(),wde=hm(),Ide=oe(),Ah=(H(),D(q)),{hdb_errors:Cde,handleHDBError:lw}=he(),{HTTP_STATUS_CODES:uw}=Cde;wde(Pa);var Pde=403,Dde="There was a problem performing this insert. Please check the logs and try again.",dw=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function Lde(e,t){let r=e.parsed_sql_object;if(!r){r=X$(e.sql);let n,s=r.ast.statements[0];if(s instanceof Pa.yy.Insert?n=s.into.databaseid:s instanceof Pa.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof Pa.yy.Update||s instanceof Pa.yy.Delete?n=s.table.databaseid:Jg.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof Pa.yy.Select)&&Ide.isEmptyOrZeroLength(n))return t("No schema specified",null)}Z$(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}a(Lde,"evaluateSQL");function J$(e,t){let r;try{r=Nde.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}a(J$,"checkASTPermissions");function X$(e){let t=new dw;if(!e)throw lw(new Error,"The 'sql' parameter is missing from the request body",uw.BAD_REQUEST);try{let r=e.trim(),n=Pa.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
40
+ `);throw n[1]?lw(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,uw.BAD_REQUEST):lw(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",uw.BAD_REQUEST)}return t}a(X$,"convertSQLToAST");function Z$(e,t,r){try{let n=Mde;if(!e.bypass_auth&&!t.permissions_checked){let i=J$(e,t);if(i&&i.length>0)return r(Pde,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case Ah.VALID_SQL_OPS_ENUM.SELECT:n=Rde,s=t.ast.statements[0];break;case Ah.VALID_SQL_OPS_ENUM.INSERT:n=vde;break;case Ah.VALID_SQL_OPS_ENUM.UPDATE:n=bde;break;case Ah.VALID_SQL_OPS_ENUM.DELETE:n=Ode;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(Z$,"processAST");function Mde(e,t){Jg.info(e),t("unknown sql statement")}a(Mde,"nullFunction");function vde({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=Ude(i,e.values)}catch(o){return r(o)}Ade(s,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(l){Jg.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}a(vde,"convertInsert");function Ude(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]]=Pa.compile(`SELECT ${s.toString()} AS [${Ah.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw Jg.error(r),new Error(Dde)}}a(Ude,"createDataObjects")});var Ew=I((QPe,sV)=>{var rS=require("clone"),nS=dt(),xde=oe(),eS=(H(),D(q)),WPe=j(),fw=require("fs"),hw=require("joi"),{string:tS}=hw.types(),{hdb_errors:Bde,handleHDBError:Zg}=he(),{HDB_ERROR_MSGS:zPe,HTTP_STATUS_CODES:_w}=Bde,{common_validators:cd}=Si(),tV=" is required",Hde=["insert","update","upsert"],pw={database:{presence:!1,format:cd.schema_format,length:cd.schema_length},schema:{presence:!1,format:cd.schema_format,length:cd.schema_length},table:{presence:!0,format:cd.schema_format,length:cd.schema_length},action:{inclusion:{within:Hde,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},kde={schema:tS.required(),table:tS.required(),action:tS.valid("insert","update","upsert")},{AWS_ACCESS_KEY:Fde,AWS_SECRET:Gde,AWS_BUCKET:qde,AWS_FILE_KEY:$de,REGION:Vde}=eS.S3_BUCKET_AUTH_KEYS,Kde={s3:{presence:!0},[`s3.${Fde}`]:{presence:!0,type:"String"},[`s3.${Gde}`]:{presence:!0,type:"String"},[`s3.${qde}`]:{presence:!0,type:"String"},[`s3.${$de}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${Vde}`]:{presence:!0,type:"String"}},rV=rS(pw);rV.data.presence={message:tV};var nV=rS(pw);nV.file_path.presence={message:tV};var Yde=Object.assign(rS(pw),Kde),mw=rS(kde);mw.csv_url=tS.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();mw.passthrough_headers=hw.object();function Wde(e){let t=nS.validateObject(e,rV);return sS(e,t)}a(Wde,"dataObject");function zde(e){let t=nS.validateBySchema(e,hw.object(mw));return sS(e,t)}a(zde,"urlObject");function Qde(e){let t=nS.validateObject(e,nV);return sS(e,t)}a(Qde,"fileObject");function jde(e){let t=nS.validateObject(e,Yde);return sS(e,t)}a(jde,"s3FileObject");function sS(e,t){if(!t){let r=xde.checkGlobalSchemaTable(e.schema,e.table);if(r)return Zg(new Error,r,_w.BAD_REQUEST);if(e.operation===eS.OPERATIONS_ENUM.CSV_FILE_LOAD)try{fw.accessSync(e.file_path,fw.constants.R_OK|fw.constants.F_OK)}catch(n){return n.code===eS.NODE_ERROR_CODES.ENOENT?Zg(n,`No such file or directory ${n.path}`,_w.BAD_REQUEST):n.code===eS.NODE_ERROR_CODES.EACCES?Zg(n,`Permission denied ${n.path}`,_w.BAD_REQUEST):Zg(n)}}return t}a(sS,"postValidateChecks");sV.exports={dataObject:Wde,urlObject:zde,fileObject:Qde,s3FileObject:jde}});var gw=I((JPe,iV)=>{"use strict";var Rh=j(),iS=(H(),D(q));async function Jde(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===iS.OPERATIONS_ENUM.INSERT||t.operation===iS.OPERATIONS_ENUM.UPDATE||t.operation===iS.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===iS.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(Rh.info(i.message),i):i.http_resp_msg?(Rh.error(`Error calling operation: ${e.name}`),Rh.error(i.http_resp_msg),i):(Rh.error(`Error calling operation: ${e.name}`),Rh.error(i),i)}}a(Jde,"callOperationFunctionAsAwait");iV.exports={callOperationFunctionAsAwait:Jde}});var Sw=I((ZPe,aV)=>{"use strict";var{S3:Xde,GetObjectCommand:Zde}=require("@aws-sdk/client-s3");aV.exports={getFileStreamFromS3:efe,getS3AuthObj:oV};async function efe(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await oV(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new Zde(r))).Body}a(efe,"getFileStreamFromS3");function oV(e,t,r){return new Xde({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(oV,"getS3AuthObj")});var lV=I((tDe,cV)=>{"use strict";var Tw=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}},Aw=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};cV.exports={BulkLoadFileObject:Tw,BulkLoadDataObject:Aw}});var dV=I((nDe,uV)=>{"use strict";var Rw=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};uV.exports=Rw});var Iw=I((lDe,IV)=>{"use strict";var oS=hn(),cS=Ew(),tfe=require("needle"),Zs=(H(),D(q)),iDe=Nt(),ld=oe(),{handleHDBError:Ht,hdb_errors:TV}=he(),{HTTP_STATUS_CODES:Mr,HDB_ERROR_MSGS:Er,CHECK_LOGS_WRAPPER:dl}=TV,ud=j(),yw=require("papaparse");ld.promisifyPapaParse();var ei=require("fs-extra"),rfe=require("path"),{chain:fV}=require("stream-chain"),_V=require("stream-json/streamers/StreamArray"),hV=require("stream-json/utils/Batch"),pV=require("stream-chain/utils/comp"),{finished:mV}=require("stream"),nfe=ce(),AV=gw(),sfe=Sw(),{BulkLoadFileObject:Ow,BulkLoadDataObject:ife}=lV(),Nw=rw(),{verifyBulkLoadAttributePerms:RV}=jg(),oDe=dV(),aDe=pr(),cDe=ro(),{databases:ofe}=(Me(),D(st)),{coerceType:afe}=(uf(),D(Cw)),EV="No records parsed from csv file.",ul=`${nfe.get("HDB_ROOT")}/tmp`,{schema_regex:cfe}=Si(),gV=1024*1024*2,SV=5e3,lfe={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};IV.exports={csvDataLoad:ufe,csvURLLoad:dfe,csvFileLoad:ffe,importFromS3:_fe};async function ufe(e,t){let r=cS.dataObject(e);if(r)throw Ht(r,r.message,Mr.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=OV(e.schema,e.table),i=yw.parse(e.data,{header:!0,skipEmptyLines:!0,transform:bw.bind(null,s),dynamicTyping:!1}),o=new Nw;e.hdb_user&&e.hdb_user?.role&&e.hdb_user?.role?.permission&&e.hdb_user?.role?.permission?.super_user!==!0&&RV(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 Ht(new Error,c,Mr.BAD_REQUEST,void 0,void 0,!0);let l=new ife(e.action,e.schema,e.table,i.data);return n=await AV.callOperationFunctionAsAwait(NV,l,null),n.message===EV?EV:wV(n.records,n.number_written)}catch(s){throw fl(s)}}a(ufe,"csvDataLoad");async function dfe(e){let t=cS.urlObject(e);if(t)throw Ht(t,t.message,Mr.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${ul}/${r}`;try{await hfe(e,r)}catch(s){throw ud.error(Er.DOWNLOAD_FILE_ERR(r)+" - "+s),Ht(s,dl(Er.DOWNLOAD_FILE_ERR(r)))}try{let s=new Ow(this.job_operation_function.name,e.action,e.schema,e.table,n,Zs.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission),i=await ww(s);return await aS(n),i}catch(s){throw await aS(n),fl(s)}}a(dfe,"csvURLLoad");async function ffe(e){let t=cS.fileObject(e);if(t)throw Ht(t,t.message,Mr.BAD_REQUEST,void 0,void 0,!0);let r=new Ow(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Zs.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission);try{return await ww(r)}catch(n){throw fl(n)}}a(ffe,"csvFileLoad");async function _fe(e){let t=cS.s3FileObject(e);if(t)throw Ht(t,t.message,Mr.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=rfe.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${ul}/${s}`;let i=new Ow(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user?.role?.permission);await pfe(s,e);let o=await ww(i);return await aS(r),o}catch(n){throw await aS(r),fl(n)}}a(_fe,"importFromS3");async function hfe(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await tfe("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 Ht(n,s,n.statusCode,Zs.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}Efe(r,e.csv_url),await mfe(t,r.raw)}a(hfe,"downloadCSVFile");async function pfe(e,t){try{let r=`${ul}/${e}`;await ei.mkdirp(ul),await ei.writeFile(`${ul}/${e}`,"",{flag:"a+"});let n=await ei.createWriteStream(r),s=await sfe.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(){ud.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw ud.error(Er.S3_DOWNLOAD_ERR+" - "+r),Ht(r,dl(Er.S3_DOWNLOAD_ERR))}}a(pfe,"downloadFileFromS3");async function mfe(e,t){try{await ei.mkdirp(ul),await ei.writeFile(`${ul}/${e}`,t)}catch(r){throw ud.error(Er.WRITE_TEMP_FILE_ERR),Ht(r,dl(Er.DEFAULT_BULK_LOAD_ERR))}}a(mfe,"writeFileToTempFolder");async function aS(e){if(e)try{await ei.access(e),await ei.unlink(e)}catch{ud.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(aS,"deleteTempFile");function Efe(e,t){if(e.statusCode!==TV.HTTP_STATUS_CODES.OK)throw Ht(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Mr.BAD_REQUEST);if(!lfe[e.headers["content-type"]])throw Ht(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Mr.BAD_REQUEST);if(!e.raw)throw Ht(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Mr.BAD_REQUEST)}a(Efe,"validateURLResponse");async function ww(e){try{let t;switch(e.file_type){case Zs.VALID_S3_FILE_TYPES.CSV:t=await gfe(e);break;case Zs.VALID_S3_FILE_TYPES.JSON:t=await Sfe(e);break;default:throw Ht(new Error,Er.DEFAULT_BULK_LOAD_ERR,Mr.BAD_REQUEST,Zs.LOG_LEVELS.ERROR,Er.INVALID_FILE_EXT_ERR(e))}return wV(t.records,t.number_written)}catch(t){throw fl(t)}}a(ww,"fileLoad");async function yV(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 oS.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&RV(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let l=Ht(c);r(l)}}a(yV,"validateChunk");async function bV(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;ld.autoCastJSONDeep(i),s&&s.pause();let o=n.meta?n.meta.fields:null;if(o)i.forEach(c=>{!ld.isEmpty(c)&&!ld.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(l=>{Object.keys(l).forEach(u=>c.add(u))}),o=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},l=await AV.callOperationFunctionAsAwait(NV,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=Ht(c,dl(Er.INSERT_CSV_ERR),Mr.INTERNAL_SERVER_ERROR,Zs.LOG_LEVELS.ERROR,Er.INSERT_CSV_ERR+" - "+c);r(l)}}a(bV,"insertChunk");async function gfe(e){let t={records:0,number_written:0},r=OV(e.schema,e.table);try{let n=new Nw,s=ei.createReadStream(e.file_path,{highWaterMark:gV});s.setEncoding("utf8"),await yw.parsePromise(s,yV.bind(null,e,n),bw.bind(null,r));let i=n.getPermsResponse();if(i)throw Ht(new Error,i,Mr.BAD_REQUEST);return s=ei.createReadStream(e.file_path,{highWaterMark:gV}),s.setEncoding("utf8"),await yw.parsePromise(s,bV.bind(null,e,t),bw.bind(null,r)),s.destroy(),t}catch(n){throw Ht(n,dl(Er.PAPA_PARSE_ERR),Mr.INTERNAL_SERVER_ERROR,Zs.LOG_LEVELS.ERROR,Er.PAPA_PARSE_ERR+n)}}a(gfe,"callPapaParse");function OV(e,t){let r=ofe[e][t].attributes,n=new Map;for(let s of r)s.type&&!s.computed&&!s.relationship&&n.set(s.name,i=>afe(i,s));return n}a(OV,"createTransformMap");function bw(e,t,r){let n=e.get(r);return n?n(t):ld.autoCast(t)}a(bw,"typeFunction");async function Sfe(e){let t={records:0,number_written:0},r=a(n=>{throw n},"throwErr");try{let n=new Nw,s=fV([ei.createReadStream(e.file_path,{encoding:"utf-8"}),_V.withParser(),c=>c.value,new hV({batchSize:SV}),pV(async c=>{await yV(e,n,r,c)})]);await new Promise((c,l)=>{mV(s,u=>{u?l(u):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw Ht(new Error,i,Mr.BAD_REQUEST);let o=fV([ei.createReadStream(e.file_path,{encoding:"utf-8"}),_V.withParser(),c=>c.value,new hV({batchSize:SV}),pV(async c=>{await bV(e,t,r,c)})]);return await new Promise((c,l)=>{mV(o,u=>{u?l(u):c()}),o.resume()}),t}catch(n){throw Ht(n,dl(Er.INSERT_JSON_ERR),Mr.INTERNAL_SERVER_ERROR,Zs.LOG_LEVELS.ERROR,Er.INSERT_JSON_ERR+n)}}a(Sfe,"insertJson");async function NV(e){let t={};try{e.data&&e.data.length>0&&Tfe(e.data[0])?t=await Afe(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",ud.info(t.message))}catch(r){throw fl(r)}return t}a(NV,"callBulkFileLoad");function Tfe(e){let t=Object.keys(e);for(let r of t)if(!cfe.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(Tfe,"validateColumnNames");async function Afe(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=oS.insert;break;case"update":i=oS.update;break;case"upsert":i=oS.upsert;break;default:throw Ht(new Error,Er.INVALID_ACTION_PARAM_ERR(n),Mr.BAD_REQUEST,Zs.LOG_LEVELS.ERROR,Er.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 f=global.hdb_schema[t][r].hash_attribute,d=e.length;for(;d--;)o.skipped_hashes.indexOf(e[d][f])>=0&&e.splice(d,1)}let l=ld.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:o.new_attributes}}catch(o){throw fl(o)}}a(Afe,"bulkFileLoad");function wV(e,t){return`successfully loaded ${t} of ${e} records`}a(wV,"buildResponseMsg");function fl(e){return Ht(e,dl(Er.DEFAULT_BULK_LOAD_ERR),Mr.INTERNAL_SERVER_ERROR,Zs.LOG_LEVELS.ERROR,Er.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(fl,"buildTopLevelErrMsg")});var Lw=I((dDe,xV)=>{"use strict";var Dw=$r(),Rfe=Sw(),{AsyncParser:yfe}=require("json2csv"),lS=require("stream"),Xn=oe(),Pw=require("fs-extra"),bfe=require("path"),Rs=j(),{promisify:DV}=require("util"),yh=oe(),{handleHDBError:cr,hdb_errors:Ofe}=he(),{HDB_ERROR_MSGS:bn,HTTP_STATUS_CODES:lr}=Ofe,{streamAsJSON:Nfe}=(wA(),D(MD)),{Upload:wfe}=require("@aws-sdk/lib-storage"),{toCsvStream:Ife}=(ji(),D(GD)),CV=["search_by_value","search_by_hash","sql","search_by_conditions"],PV=["json","csv"],LV="json",MV="csv",Cfe="Successfully exported JSON locally.",Pfe="Successfully exported CSV locally.",Dfe=1e3,Lfe=Dw.searchByHash,Mfe=Dw.searchByValue,vfe=DV(lS.finished);xV.exports={export_to_s3:Hfe,export_local:Ufe};async function Ufe(e){Rs.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=vV(e);if(!Xn.isEmpty(t))throw Rs.error(t),cr(new Error,t,lr.BAD_REQUEST,void 0,void 0,!0);if(Xn.isEmpty(e.path))throw Rs.error(bn.MISSING_VALUE("path")),cr(new Error,bn.MISSING_VALUE("path"),lr.BAD_REQUEST,void 0,void 0,!0);let r=(Xn.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(bfe.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=Xn.buildFolderPath(e.path,r);await xfe(e.path);let s=await UV(e);return await Bfe(n,e.format,s)}a(Ufe,"export_local");async function xfe(e){if(Rs.trace("in confirmPath"),Xn.isEmptyOrZeroLength(e))throw cr(new Error,`Invalid path: ${e}`,lr.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await Pw.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,Rs.error(n),cr(new Error,n,lr.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 Rs.error(r),cr(new Error,r,lr.BAD_REQUEST,void 0,void 0,!0)}return!0}a(xfe,"confirmPath");async function Bfe(e,t,r){if(Rs.trace("in saveToLocal"),yh.isEmptyOrZeroLength(e))throw cr(new Error,bn.INVALID_VALUE("file_path"),lr.BAD_REQUEST,void 0,void 0,!0);if(yh.isEmptyOrZeroLength(t))throw cr(new Error,bn.INVALID_VALUE("Source format"),lr.BAD_REQUEST,void 0,void 0,!0);if(yh.isEmpty(r))throw cr(new Error,bn.NOT_FOUND("Data"),lr.BAD_REQUEST,void 0,void 0,!0);if(t===LV){let n=Pw.createWriteStream(e);return Nfe(r).pipe(n),await vfe(n),{message:Cfe,path:e}}else if(t===MV){let n=Pw.createWriteStream(e),s=lS.Readable.from(r),i={},o=r.getColumns?.();o&&(i.fields=o.map(f=>({label:f,value:f})));let c={objectMode:!0};return await new yfe(i,c).fromInput(s).toOutput(n).promise(!1),{message:Pfe,path:e}}throw cr(new Error,bn.INVALID_VALUE("format"),lr.BAD_REQUEST)}a(Bfe,"saveToLocal");async function Hfe(e){if(!e.s3||Object.keys(e.s3).length===0)throw cr(new Error,bn.MISSING_VALUE("S3 object"),lr.BAD_REQUEST);if(Xn.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw cr(new Error,bn.MISSING_VALUE("aws_access_key_id"),lr.BAD_REQUEST);if(Xn.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw cr(new Error,bn.MISSING_VALUE("aws_secret_access_key"),lr.BAD_REQUEST);if(Xn.isEmptyOrZeroLength(e.s3.bucket))throw cr(new Error,bn.MISSING_VALUE("bucket"),lr.BAD_REQUEST);if(Xn.isEmptyOrZeroLength(e.s3.key))throw cr(new Error,bn.MISSING_VALUE("key"),lr.BAD_REQUEST);if(Xn.isEmptyOrZeroLength(e.s3.region))throw cr(new Error,bn.MISSING_VALUE("region"),lr.BAD_REQUEST);let t=vV(e);if(!Xn.isEmpty(t))throw cr(new Error,t,lr.BAD_REQUEST);Rs.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await UV(e)}catch(l){throw Rs.error(l),l}let n,s=await Rfe.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new lS.PassThrough;if(e.format===MV){i=e.s3.key+".csv";let l=Ife(r,r.getColumns?.());l.on("error",u=>{throw u}),l.pipe(o)}else if(e.format===LV){i=e.s3.key+".json";let l=new lS.Readable;l.pipe(o),l.on("error",d=>{throw d}),l.push("[");let u=r.length,f="";for(let[d,h]of r.entries()){let _=d===u-1?JSON.stringify(h):JSON.stringify(h)+",";f+=_,d!==0&&d%Dfe===0&&(l.push(f),f="")}f.length!==0&&l.push(f),l.push("]"),l.push(null)}else throw cr(new Error,bn.INVALID_VALUE("format"),lr.BAD_REQUEST);return new wfe({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(Hfe,"export_to_s3");function vV(e){if(Rs.trace("in exportCoreValidation"),Xn.isEmpty(e.format))return"format missing";if(PV.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${PV.join(", ")}`;let t=e.search_operation.operation;if(Xn.isEmpty(t))return"search_operation.operation missing";if(CV.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${CV.join(", ")}`}a(vV,"exportCoreValidation");async function UV(e){Rs.trace("in getRecords");let t,r;if(yh.isEmpty(e.search_operation)||yh.isEmptyOrZeroLength(e.search_operation.operation))throw cr(new Error,bn.INVALID_VALUE("Search operation"),lr.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=Mfe;break;case"search_by_hash":t=Lfe;break;case"search_by_conditions":t=Dw.searchByConditions;break;case"sql":{let n=Xg();t=DV(n.evaluateSQL);break}default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Rs.error(r),cr(new Error,r,lr.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(UV,"getRecords")});var HV=I((_De,BV)=>{"use strict";var Mw=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};BV.exports=Mw});var GV=I((pDe,FV)=>{"use strict";var kfe=(H(),D(q)),kV=require("moment"),Ffe=require("uuid").v4,vw=class{static{a(this,"JobObject")}constructor(){this.id=Ffe(),this.type=void 0,this.start_datetime=kV().valueOf(),this.created_datetime=kV().valueOf(),this.end_datetime=void 0,this.status=kfe.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};FV.exports=vw});var Uw=I((EDe,QV)=>{"use strict";var Gfe=require("uuid").v4,YV=hn(),WV=$r(),qfe=qs(),$fe=uu(),Vfe=HV(),yt=(H(),D(q)),Kfe=GV(),Yfe=uE(),ti=j(),Wfe=rf(),dd=oe(),{promisify:zfe}=require("util"),_l=require("moment"),Qfe=Xg(),uS=Ew(),qV=wR(),{deleteTransactionLogsBeforeValidator:jfe}=JN(),{handleHDBError:$V,hdb_errors:Jfe,ClientError:Xfe}=he(),{HTTP_STATUS_CODES:VV}=Jfe,KV=WV.searchByValue,Zfe=WV.searchByHash,e_e=YV.insert,t_e=zfe(Qfe.evaluateSQL),r_e=YV.update;QV.exports={addJob:i_e,updateJob:a_e,handleGetJob:n_e,handleGetJobsByStartDate:s_e,getJobById:zV};async function n_e(e){if(e.id===void 0)throw new Xfe("'id' is required");let t=await zV(e.id);return dd.isEmptyOrZeroLength(t)||(t[0]={...t[0]},t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}a(n_e,"handleGetJob");async function s_e(e){try{let t=await o_e(e);if(ti.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=_l(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=_l(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 ti.error(r),new Error(r)}}a(s_e,"handleGetJobsByStartDate");async function i_e(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||dd.isEmptyOrZeroLength(e.operation)){let f="job parameter is invalid";return ti.info(f),t.error=f,t}if(!yt.JOB_TYPE_ENUM[e.operation])return ti.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case yt.OPERATIONS_ENUM.CSV_FILE_LOAD:n=uS.fileObject(e);break;case yt.OPERATIONS_ENUM.CSV_URL_LOAD:n=uS.urlObject(e);break;case yt.OPERATIONS_ENUM.CSV_DATA_LOAD:n=uS.dataObject(e);break;case yt.OPERATIONS_ENUM.IMPORT_FROM_S3:n=uS.s3FileObject(e);break;case yt.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case yt.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=qV(e,"date");break;case yt.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=qV(e,"timestamp");break;case yt.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=jfe(e);break;case yt.OPERATIONS_ENUM.RESTART_SERVICE:if(yt.HDB_PROCESS_SERVICES[e.service]===void 0)throw $V(new Error,"Invalid service",VV.BAD_REQUEST,void 0,void 0,!0);break;default:break}if(n)throw $V(n,n.message,VV.BAD_REQUEST,void 0,void 0,!0);let s=new Kfe;s.type=e.operation===yt.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?yt.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user?.username;let i=new qfe(yt.SYSTEM_SCHEMA_NAME,yt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),o;try{o=Array.from(await KV(i))}catch(f){let d=`There was an error inserting a new job: ${f}`;return ti.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){s.id=Gfe();try{o=await KV(i)}catch(f){let d=`There was an error inserting a new job: ${f}`;return ti.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return ti.error("Error creating a job, could not find a unique job id."),t}s.request=e;let l=new Wfe(yt.SYSTEM_SCHEMA_NAME,yt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),u;try{u=await e_e(l)}catch(f){return ti.error(`There was an error inserting a job for job type: ${e.operation} -- ${f}`),t.success=!1,t}if(u.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${s.operation} and id ${s.id}`;else{let f=`Created a job with type ${s.type} and id ${s.id}`;t.message=f,t.createdJob=s,t.success=!0,ti.trace(f)}return t}a(i_e,"addJob");async function o_e(e){let t=_l(e.from_date,_l.ISO_8601),r=_l(e.to_date,_l.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 Vfe(n,e.hdb_user);try{return await t_e(s)}catch(i){throw ti.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(o_e,"getJobsInDateRange");async function zV(e){if(dd.isEmptyOrZeroLength(e))return dd.errorizeMessage("Invalid job ID specified.");let t=new $fe(yt.SYSTEM_SCHEMA_NAME,yt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await Zfe(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return ti.error(n),dd.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(zV,"getJobById");async function a_e(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(dd.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===yt.JOB_STATUS_ENUM.COMPLETE||e.status===yt.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=_l().valueOf());let t=new Yfe(yt.SYSTEM_SCHEMA_NAME,yt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await r_e(t),r}a(a_e,"updateJob")});var n1=I((SDe,r1)=>{"use strict";var jV=oe(),gr=(H(),D(q)),c_e=require("moment"),dS=Iw(),bh=j(),JV=Uw(),XV=Lw(),ZV=Tc(),e1=rt(),l_e=Yg(),u_e=rd(),{parentPort:d_e,isMainThread:t1}=require("worker_threads"),{onMessageByType:f_e}=rt(),xw=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function __e(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(jV.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(jV.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case gr.JOB_TYPE_ENUM.csv_file_load:await vi(e,dS.csvFileLoad);break;case gr.JOB_TYPE_ENUM.csv_url_load:await vi(e,dS.csvURLLoad);break;case gr.JOB_TYPE_ENUM.csv_data_load:await vi(e,dS.csvDataLoad);break;case gr.JOB_TYPE_ENUM.import_from_s3:await vi(e,dS.importFromS3);break;case gr.JOB_TYPE_ENUM.empty_trash:break;case gr.JOB_TYPE_ENUM.export_local:await vi(e,XV.export_local);break;case gr.JOB_TYPE_ENUM.export_to_s3:await vi(e,XV.export_to_s3);break;case gr.JOB_TYPE_ENUM.delete_files_before:case gr.JOB_TYPE_ENUM.delete_records_before:await vi(e,ZV.deleteFilesBefore);break;case gr.JOB_TYPE_ENUM.delete_audit_logs_before:await vi(e,ZV.deleteAuditLogsBefore);break;case gr.JOB_TYPE_ENUM.delete_transaction_logs_before:await vi(e,l_e.deleteTransactionLogsBefore);break;case gr.JOB_TYPE_ENUM.restart_service:return await vi(e,u_e.restartService),`Restarting ${e.json.service}`;break;default:return`Invalid operation ${e.json.operation} specified`}}a(__e,"parseMessage");async function vi(e,t){try{e.job.status=gr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=c_e().valueOf(),await JV.updateJob(e.job),await h_e(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):bh.error(`There was an error running ${t.name} job with id ${e.job.id}`),bh.error(n),e.job.message=n,e.job.status=gr.JOB_STATUS_ENUM.ERROR;try{await JV.updateJob(e.job)}catch(s){throw bh.error(`Unable to update job with id ${e.job.id}`),s}throw r}}a(vi,"runJob");async function h_e(e){bh.trace("launching job thread:",e),t1?e1.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[gr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`}}):d_e.postMessage({type:gr.ITC_EVENT_TYPES.START_JOB,jobId:e})}a(h_e,"launchJobThread");t1&&f_e(gr.ITC_EVENT_TYPES.START_JOB,async(e,t)=>{try{e1.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[gr.PROCESS_NAME_ENV_PROP]:`JOB-${e.jobId}`}})}catch(r){bh.error(r)}});r1.exports={parseMessage:__e,RunnerMessage:xw}});var i1=I((ADe,s1)=>{"use strict";var Bw=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};s1.exports=Bw});var jN=I((bDe,$w)=>{"use strict";var mS=$r(),Fw=Xg(),fS=Iw(),bo=ZE(),_S=no(),Nh=Tc(),p_e=yO(),Oh=Gn(),hS=a_(),Ct=QN(),pS=j(),m_e=IO(),E_e=dg(),o1=ZO(),g_e=_g(),S_e=rN(),T_e=nN(),A_e=oN(),R_e=cN(),Hw=gg(),a1=Lw(),y_e=jg(),Gw=Uw(),V=(H(),D(q)),{hdb_errors:Ih,handleHDBError:wh}=he(),{HTTP_STATUS_CODES:c1}=Ih,kw=AN(),l1=rd(),S1=require("util"),_d=hn(),b_e=Hs(),O_e=$u(),u1=n1(),d1=(Tu(),D(S_)),f1=(Hg(),D(ah)),_1=It(),h1=Yg(),p1=dh(),{setServerUtilities:N_e}=(uf(),D(Cw)),{CONTEXT:yDe}=(Jo(),D(TA)),{_assignPackageExport:w_e}=ci(),{transformReq:I_e}=oe(),{server:C_e}=(Gr(),D(Wl)),en=pS.loggerWithTag("operation"),fd=Qs(),m1=(jc(),D(Qc)),P_e=gw(),E1=mS.searchByHash,D_e=mS.searchByValue,L_e=S1.promisify(mS.search),M_e=S1.promisify(Fw.evaluateSQL),v_e={[V.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[V.OPERATIONS_ENUM.CREATE_TABLE]:!0,[V.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[V.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[V.OPERATIONS_ENUM.DROP_TABLE]:!0,[V.OPERATIONS_ENUM.DROP_SCHEMA]:!0},Z=i1();async function T1(e,t){try{if(e.body.operation!=="read_log"&&(pS.log_level===V.LOG_LEVELS.INFO||pS.log_level===V.LOG_LEVELS.DEBUG||pS.log_level===V.LOG_LEVELS.TRACE)){let{hdb_user:n,hdb_auth_header:s,password:i,payload:o,...c}=e.body;en.info(c)}}catch(n){en.error(n)}let r=await P_e.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return v_e[e.body.operation]&&b_e.setSchemaDataToGlobal(n=>{n&&en.error(n)}),r}a(T1,"processLocalTransaction");var g1=x_e();$w.exports={chooseOperation:A1,getOperationFunction:R1,operation:qw,processLocalTransaction:T1,executeJob:ys};N_e($w.exports);C_e.operation=qw;function A1(e){let t;try{t=R1(e)}catch(s){throw en.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=Fw.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let o=Fw.checkASTPermissions(e,i);if(o)throw en.error(`${c1.FORBIDDEN} from operation ${e.operation}`),en.warn(`User '${e.hdb_user?.username}' is not permitted to ${e.operation}`),wh(new Error,o,Ih.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==V.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==V.OPERATIONS_ENUM.LOGIN&&e.operation!==V.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=y_e.verifyPerms(i,s);if(o)throw en.error(`${c1.FORBIDDEN} from operation ${e.operation}`),en.warn(`User '${i.hdb_user?.username}' is not permitted to ${i.operation}`),wh(new Error,o,Ih.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw wh(s,"There was an error when trying to choose an operation path")}return r}a(A1,"chooseOperation");function R1(e){if(en.trace(`getOperationFunction with operation: ${e.operation}`),g1.has(e.operation))return g1.get(e.operation);throw wh(new Error,Ih.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),Ih.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(R1,"getOperationFunction");w_e("operation",qw);function qw(e,t,r){e.hdb_user=t?.user,e.bypass_auth=!r;let n=A1(e);return T1({body:e},n)}a(qw,"operation");async function U_e(e){en.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[V.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case V.OPERATIONS_ENUM.INSERT:o=await _d.insert(i);break;case V.OPERATIONS_ENUM.UPDATE:o=await _d.update(i);break;case V.OPERATIONS_ENUM.UPSERT:o=await _d.upsert(i);break;case V.OPERATIONS_ENUM.DELETE:o=await Nh.deleteRecord(i);break;default:en.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){en.info("Invalid operation in transaction"),en.error(o)}}a(U_e,"catchup");async function ys(e){I_e(e);let t,r;try{r=await Gw.addJob(e),t=r.createdJob,en.info("addJob result",r);let n=new u1.RunnerMessage(t,e);return{message:await u1.parseMessage(n)??`Starting job with id ${t.id}`,job_id:t.id}}catch(n){let s=`There was an error executing job: ${n.http_resp_msg?n.http_resp_msg:n}`;throw en.error(s),wh(n,s)}}a(ys,"executeJob");function x_e(){let e=new Map;return e.set(V.OPERATIONS_ENUM.INSERT,new Z(_d.insert)),e.set(V.OPERATIONS_ENUM.UPDATE,new Z(_d.update)),e.set(V.OPERATIONS_ENUM.UPSERT,new Z(_d.upsert)),e.set(V.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new Z(mS.searchByConditions)),e.set(V.OPERATIONS_ENUM.SEARCH_BY_HASH,new Z(E1)),e.set(V.OPERATIONS_ENUM.SEARCH_BY_ID,new Z(E1)),e.set(V.OPERATIONS_ENUM.SEARCH_BY_VALUE,new Z(D_e)),e.set(V.OPERATIONS_ENUM.SEARCH,new Z(L_e)),e.set(V.OPERATIONS_ENUM.SQL,new Z(M_e)),e.set(V.OPERATIONS_ENUM.CSV_DATA_LOAD,new Z(ys,fS.csvDataLoad)),e.set(V.OPERATIONS_ENUM.CSV_FILE_LOAD,new Z(ys,fS.csvFileLoad)),e.set(V.OPERATIONS_ENUM.CSV_URL_LOAD,new Z(ys,fS.csvURLLoad)),e.set(V.OPERATIONS_ENUM.IMPORT_FROM_S3,new Z(ys,fS.importFromS3)),e.set(V.OPERATIONS_ENUM.CREATE_SCHEMA,new Z(bo.createSchema)),e.set(V.OPERATIONS_ENUM.CREATE_DATABASE,new Z(bo.createSchema)),e.set(V.OPERATIONS_ENUM.CREATE_TABLE,new Z(bo.createTable)),e.set(V.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new Z(bo.createAttribute)),e.set(V.OPERATIONS_ENUM.DROP_SCHEMA,new Z(bo.dropSchema)),e.set(V.OPERATIONS_ENUM.DROP_DATABASE,new Z(bo.dropSchema)),e.set(V.OPERATIONS_ENUM.DROP_TABLE,new Z(bo.dropTable)),e.set(V.OPERATIONS_ENUM.DROP_ATTRIBUTE,new Z(bo.dropAttribute)),e.set(V.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new Z(_S.describeSchema)),e.set(V.OPERATIONS_ENUM.DESCRIBE_DATABASE,new Z(_S.describeSchema)),e.set(V.OPERATIONS_ENUM.DESCRIBE_TABLE,new Z(_S.describeTable)),e.set(V.OPERATIONS_ENUM.DESCRIBE_ALL,new Z(_S.describeAll)),e.set(V.OPERATIONS_ENUM.DELETE,new Z(Nh.deleteRecord)),e.set(V.OPERATIONS_ENUM.ADD_USER,new Z(Oh.addUser)),e.set(V.OPERATIONS_ENUM.ALTER_USER,new Z(Oh.alterUser)),e.set(V.OPERATIONS_ENUM.DROP_USER,new Z(Oh.dropUser)),e.set(V.OPERATIONS_ENUM.LIST_USERS,new Z(Oh.listUsersExternal)),e.set(V.OPERATIONS_ENUM.LIST_ROLES,new Z(hS.listRoles)),e.set(V.OPERATIONS_ENUM.ADD_ROLE,new Z(hS.addRole)),e.set(V.OPERATIONS_ENUM.ALTER_ROLE,new Z(hS.alterRole)),e.set(V.OPERATIONS_ENUM.DROP_ROLE,new Z(hS.dropRole)),e.set(V.OPERATIONS_ENUM.USER_INFO,new Z(Oh.userInfo)),e.set(V.OPERATIONS_ENUM.READ_LOG,new Z(m_e)),e.set(V.OPERATIONS_ENUM.ADD_NODE,new Z(E_e)),e.set(V.OPERATIONS_ENUM.UPDATE_NODE,new Z(o1)),e.set(V.OPERATIONS_ENUM.SET_NODE_REPLICATION,new Z(o1)),e.set(V.OPERATIONS_ENUM.REMOVE_NODE,new Z(g_e)),e.set(V.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new Z(S_e)),e.set(V.OPERATIONS_ENUM.PURGE_STREAM,new Z(T_e)),e.set(V.OPERATIONS_ENUM.SET_CONFIGURATION,new Z(_1.setConfiguration)),e.set(V.OPERATIONS_ENUM.CLUSTER_STATUS,new Z(A_e.clusterStatus)),e.set(V.OPERATIONS_ENUM.CLUSTER_NETWORK,new Z(R_e)),e.set(V.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new Z(Hw.setRoutes)),e.set(V.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new Z(Hw.getRoutes)),e.set(V.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new Z(Hw.deleteRoutes)),e.set(V.OPERATIONS_ENUM.EXPORT_TO_S3,new Z(ys,a1.export_to_s3)),e.set(V.OPERATIONS_ENUM.CREATE_CSR,new Z(fd.createCsr)),e.set(V.OPERATIONS_ENUM.SIGN_CERTIFICATE,new Z(fd.signCertificate)),e.set(V.OPERATIONS_ENUM.LIST_CERTIFICATES,new Z(fd.listCertificates)),e.set(V.OPERATIONS_ENUM.ADD_CERTIFICATES,new Z(fd.addCertificate)),e.set(V.OPERATIONS_ENUM.REMOVE_CERTIFICATE,new Z(fd.removeCertificate)),e.set(V.OPERATIONS_ENUM.GET_KEY,new Z(fd.getKey)),e.set(V.OPERATIONS_ENUM.ADD_NODE_BACK,new Z(m1.addNodeBack)),e.set(V.OPERATIONS_ENUM.REMOVE_NODE_BACK,new Z(m1.removeNodeBack)),e.set(V.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new Z(ys,Nh.deleteFilesBefore)),e.set(V.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new Z(ys,Nh.deleteFilesBefore)),e.set(V.OPERATIONS_ENUM.EXPORT_LOCAL,new Z(ys,a1.export_local)),e.set(V.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new Z(Gw.handleGetJobsByStartDate)),e.set(V.OPERATIONS_ENUM.GET_JOB,new Z(Gw.handleGetJob)),e.set(V.OPERATIONS_ENUM.GET_FINGERPRINT,new Z(kw.getFingerprint)),e.set(V.OPERATIONS_ENUM.SET_LICENSE,new Z(kw.setLicense)),e.set(V.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new Z(kw.getRegistrationInfo)),e.set(V.OPERATIONS_ENUM.RESTART,new Z(l1.restart)),e.set(V.OPERATIONS_ENUM.RESTART_SERVICE,new Z(ys,l1.restartService)),e.set(V.OPERATIONS_ENUM.CATCHUP,new Z(U_e)),e.set(V.OPERATIONS_ENUM.SYSTEM_INFORMATION,new Z(O_e.systemInformation)),e.set(V.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new Z(ys,Nh.deleteAuditLogsBefore)),e.set(V.OPERATIONS_ENUM.READ_AUDIT_LOG,new Z(p_e)),e.set(V.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new Z(d1.createTokens)),e.set(V.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new Z(d1.refreshOperationToken)),e.set(V.OPERATIONS_ENUM.LOGIN,new Z(f1.login)),e.set(V.OPERATIONS_ENUM.LOGOUT,new Z(f1.logout)),e.set(V.OPERATIONS_ENUM.GET_CONFIGURATION,new Z(_1.getConfiguration)),e.set(V.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new Z(Ct.customFunctionsStatus)),e.set(V.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new Z(Ct.getCustomFunctions)),e.set(V.OPERATIONS_ENUM.GET_COMPONENT_FILE,new Z(Ct.getComponentFile)),e.set(V.OPERATIONS_ENUM.GET_COMPONENTS,new Z(Ct.getComponents)),e.set(V.OPERATIONS_ENUM.SET_COMPONENT_FILE,new Z(Ct.setComponentFile)),e.set(V.OPERATIONS_ENUM.DROP_COMPONENT,new Z(Ct.dropComponent)),e.set(V.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new Z(Ct.getCustomFunction)),e.set(V.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new Z(Ct.setCustomFunction)),e.set(V.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new Z(Ct.dropCustomFunction)),e.set(V.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new Z(Ct.addComponent)),e.set(V.OPERATIONS_ENUM.ADD_COMPONENT,new Z(Ct.addComponent)),e.set(V.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new Z(Ct.dropCustomFunctionProject)),e.set(V.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new Z(Ct.packageComponent)),e.set(V.OPERATIONS_ENUM.PACKAGE_COMPONENT,new Z(Ct.packageComponent)),e.set(V.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new Z(Ct.deployComponent)),e.set(V.OPERATIONS_ENUM.DEPLOY_COMPONENT,new Z(Ct.deployComponent)),e.set(V.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new Z(h1.readTransactionLog)),e.set(V.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new Z(ys,h1.deleteTransactionLogsBefore)),e.set(V.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new Z(p1.installModules)),e.set(V.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new Z(p1.auditModules)),e.set(V.OPERATIONS_ENUM.GET_BACKUP,new Z(bo.getBackup)),e.set(V.OPERATIONS_ENUM.ADD_SSH_KEY,new Z(Ct.addSSHKey)),e.set(V.OPERATIONS_ENUM.UPDATE_SSH_KEY,new Z(Ct.updateSSHKey)),e.set(V.OPERATIONS_ENUM.DELETE_SSH_KEY,new Z(Ct.deleteSSHKey)),e.set(V.OPERATIONS_ENUM.LIST_SSH_KEYS,new Z(Ct.listSSHKeys)),e.set(V.OPERATIONS_ENUM.SET_SSH_KNOWN_HOSTS,new Z(Ct.setSSHKnownHosts)),e.set(V.OPERATIONS_ENUM.GET_SSH_KNOWN_HOSTS,new Z(Ct.getSSHKnownHosts)),e}a(x_e,"initializeOperationFunctionMap")});var SS=I((NDe,O1)=>{"use strict";var ES=(H(),D(q)),B_e=oe(),Ch=j(),{handleHDBError:Vw,hdb_errors:gS}=he(),{isMainThread:H_e}=require("worker_threads"),{Readable:k_e}=require("stream"),y1=require("os"),F_e=require("util"),G_e=bb(),q_e=F_e.promisify(G_e.authorize),b1=jN(),{createGzip:$_e,constants:V_e}=require("zlib"),K_e=[ES.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,ES.OPERATIONS_ENUM.LOGIN,ES.OPERATIONS_ENUM.LOGOUT];function Y_e(e){let t=`Found an uncaught exception with message: ${e.message}. ${y1.EOL}Stack: ${e.stack} ${y1.EOL}Terminating ${H_e?"HDB":"thread"}.`;console.error(t),Ch.fatal(t),process.exit(1)}a(Y_e,"handleServerUncaughtException");function W_e(e,t,r){if(Ch[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:gS.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(W_e,"serverErrorHandler");function z_e(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=Vw(new Error,"Invalid JSON.",gS.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(B_e.isEmpty(e.body.operation)){let n=Vw(new Error,"Request body must include an 'operation' property.",gS.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}a(z_e,"reqBodyValidationHandler");function Q_e(e,t,r){let n;!K_e.includes(e.body.operation)||e.body.operation===ES.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&!e.body.username&&!e.body.password?q_e(e,t).then(i=>{n=i,e.body.hdb_user=n,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(i=>{Ch.warn(i),Ch.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${i.stack}"`);let o=typeof i=="string"?{error:i}:{error:i.message};r(Vw(i,o,gS.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(Q_e,"authHandler");async function j_e(e,t,r=!1){let n;try{e.body.bypass_auth&&delete e.body.bypass_auth,n=b1.chooseOperation(e.body);let s=await b1.processLocalTransaction(e,n);if(s instanceof k_e&&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($_e({level:V_e.Z_BEST_SPEED})))}return s}catch(s){throw Ch.error(s),s}}a(j_e,"handlePostRequest");O1.exports={authHandler:Q_e,handlePostRequest:j_e,handleServerUncaughtException:Y_e,serverErrorHandler:W_e,reqBodyValidationHandler:z_e}});var C1=I((IDe,I1)=>{"use strict";var J_e=require("fastify-plugin"),{handlePostRequest:N1,authHandler:X_e,reqBodyValidationHandler:Z_e}=SS();async function ehe(e){e.decorate("hdbCore",{preValidation:[Z_e,X_e],request:a(t=>w1(N1(t,response)),"request"),requestWithoutAuthentication:a((t,r)=>w1(N1(t,r,!0)),"requestWithoutAuthentication")})}a(ehe,"hdbCore");async function w1(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(w1,"convertAsyncIterators");I1.exports=J_e(ehe)});var D1=I((DDe,P1)=>{"use strict";var PDe=require("fs"),TS=ce();TS.initSync();var{CONFIG_PARAMS:Kw}=(H(),D(q)),the=1024*1024*1024;function rhe(e){let t=TS.get(Kw.HTTP_TIMEOUT),r=TS.get(Kw.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:the,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,maxParamLength:TS.get(Kw.HTTP_MAXPARAMLENGTH)??1e3,https:e}}a(rhe,"getServerOptions");P1.exports=rhe});var v1=I((MDe,M1)=>{"use strict";var Yw=ce();Yw.initSync();var{CONFIG_PARAMS:L1}=(H(),D(q));function nhe(){let e=Yw.get(L1.HTTP_CORSACCESSLIST),t=Yw.get(L1.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(nhe,"getCORSOptions");M1.exports=nhe});var B1=I((UDe,x1)=>{"use strict";var U1=ce();U1.initSync();var she=(H(),D(q));function ihe(){return U1.get(she.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(ihe,"getHeaderTimeoutConfig");x1.exports=ihe});var zw={};ve(zw,{customFunctionsServer:()=>che,ready:()=>J1,start:()=>ahe});function ahe(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){Oo||(Oo=j1(t),Ye.http((await Oo).server));let o=await Oo,c=(0,Ww.dirname)(s),l=(0,Ww.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!H1.has(c)){H1.add(c);try{o.register(uhe(c,l))}catch(u){if(u.message==="Root plugin has already booted")ht.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw u}}},ready:J1}}async function che(){try{ht.info("In Custom Functions Fastify server"+process.cwd()),ht.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),ht.debug(`Custom Functions server process ${process.pid} starting up.`),await lhe();let e=V1.get(B.HTTP_SECUREPORT)>0,t;try{t=Oo=await j1(e)}catch(r){throw ht.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw ht.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){ht.error(`Custom Functions ${process.pid} Error: ${e}`),ht.error(e),process.exit(1)}}async function lhe(){try{ht.info("Custom Functions starting configuration."),await K1.setUsersWithRolesCache(),ht.info("Custom Functions completed configuration.")}catch(e){ht.error(e)}}function uhe(e,t){return async function(r){try{ht.info("Custom Functions starting buildRoutes"),ht.trace("Loading fastify routes folder "+e),(0,k1.existsSync)(e)&&r.register($1.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:ht.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,o)=>{s?.message?ht.error(s.message):s&&ht.error(s),o()})}catch(n){ht.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function j1(e){ht.info("Custom Functions starting buildServer.");let t=(0,Y1.default)(e),r=(0,F1.default)(t);r.server.headersTimeout=(0,z1.default)(),r.setErrorHandler(Q1.serverErrorHandler);let n=(0,W1.default)();return n&&r.register(G1.default,n),r.register(function(s,i,o){s.setNotFoundHandler(function(c,l){r.server.emit("unhandled",c.raw,l.raw)}),o()}),r.register(q1.default),await r.register(ohe),await r.after(),hf(r),ht.info("Custom Functions completed buildServer."),r}function J1(){if(Oo)return Oo.then?Oo.then(e=>e.ready()):Oo.ready()}var Ww,k1,F1,G1,q1,$1,V1,ht,ohe,K1,Y1,W1,z1,Q1,Oo,H1,X1=be(()=>{Ww=require("path"),k1=require("fs"),F1=M(require("fastify")),G1=M(require("@fastify/cors")),q1=M(Sb()),$1=M(require("@fastify/autoload")),V1=M(ce());H();ht=M(j()),ohe=M(C1()),K1=M(Gn()),Y1=M(D1()),W1=M(v1()),z1=M(B1()),Q1=M(SS());ji();Gr();H1=new Set;a(ahe,"start");a(che,"customFunctionsServer");a(lhe,"setUp");a(uhe,"buildRouteFolder");a(j1,"buildServer");a(J1,"ready")});var Qw={};ve(Qw,{start:()=>dhe});function dhe(e){return{handleDirectory(t,r){if(t==="/"){let n=(0,nK.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){eK||(eK=!0,e.server.http(async(s,i)=>{if(!s.isWebSocket){let o=Z1.get(s.pathname);if(o)return{handlesHeaders:!0,body:(0,tK.default)(s,(0,rK.realpathSync)(o))}}return i(s)},{runFirst:!0})),Z1.set(r,n)}}}var tK,rK,nK,Z1,eK,sK=be(()=>{tK=M(require("send")),rK=require("fs"),nK=M(require("serve-static")),Z1=new Map;a(dhe,"start")});var jw={};ve(jw,{start:()=>fhe});function fhe({override:e}){return{handleFile:a((t,r,n)=>{AS.default.debug(`Loading env file: ${n}`);for(let[s,i]of Object.entries((0,iK.parse)(t))){if(process.env[s]!==void 0)if(AS.default.warn(`Environment variable conflict: ${s} from ${n} is already set on process.env`),e)AS.default.debug(`override option enabled. overriding environment variable: ${s}`);else continue;process.env[s]=i}},"handleFile")}}var iK,AS,oK=be(()=>{iK=require("dotenv"),AS=M(j());a(fhe,"start")});var mK={};ve(mK,{startHTTPThreads:()=>hhe,startSocketServer:()=>tI,updateWorkerIdleness:()=>pK});async function hhe(e=2,t){try{if(t)Zw(0,1,!0);else{let{loadRootComponents:r}=NS();if(e===0)return(0,bs.setMainIsWorker)(!0),await sI().startServers(),Promise.resolve([]);await r()}hK();for(let r=0;r<e;r++)Zw(r,e);return Promise.all(_K)}finally{(0,bs.threadsHaveStarted)()}}function hK(){let e=(0,uK.checkMemoryLimit)();e&&!process.env.DEV_MODE&&(console.error(e),Xw=setInterval(()=>{bS.notify(e)},_he).unref())}function Zw(e,t=1,r){if(Jw++,(0,bs.startWorker)("server/threads/threadServer.js",{name:tA.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((o,c)=>{function l(u){u.type===XT.CHILD_STARTED&&(n.removeListener("message",l),o(n))}a(l,"onMessage"),n.on("message",l),n.on("error",c)});_K.push(s),await s,hd.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",o=>{if(o.requestId){let c=yS.get(o.requestId);c&&c(o)}}),n.on("exit",i),n.on("shutdown",i);function i(){let o=hd.indexOf(n);o>-1&&hd.splice(o,1)}if(a(i,"removeWorker"),pd){let o=pd;pd=[];for(let c of o)fK[c.localPort](null,c)}}}),r){let n=setInterval(()=>{eI?eI=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,bs.shutdownWorkers)(),Jw=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function tI(e=0,t){if(typeof e=="string")try{(0,OS.existsSync)(e)&&(0,OS.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=phe:r=mhe(t):r=rI;let n=(0,md.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);return n._handle&&(n._handle.onconnection=fK[e]=function(s,i){r.readsData||(i.reading=!1,i.readStop()),eI=!0,r(i,(o,c)=>{if(!o){if(aK){let u=i._socket||new md.Socket({handle:i,writable:!0,readable:!0});aK.deliverSocket(u,e,c),u.resume()}else Jw>0?(pd.length===0&&setTimeout(()=>{pd.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(),i.localPort=e,pd.push(i)):(console.log("start up a dynamic thread to handle request"),Zw(0));nr(!1,"socket-routed");return}o.requests++;let l=i.fd;if(l>=0)o.postMessage({port:e,fd:l,data:c});else{let u=i._socket||new md.Socket({handle:i,writable:!0,readable:!0});She(u,o,e)}nr(!0,"socket-routed")})},bS.info(`HarperDB ${dK.packageJson.version} Server running on port ${e}`)),n.on("error",s=>{console.error("Error in socket server",s)}),process.env._UNREF_SERVER&&n.unref(),n}function rI(e,t){let r,n=0;for(let s of hd){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=RS)return RS=i,t(r);n=i}RS=0,t(r)}function phe(e,t){let r={};e.getpeername(r);let n=r.address,s=Ed.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);rI(e,o=>{Ed.set(n,{worker:o,lastUsed:i}),t(o)})}function mhe(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new md.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",o=>{n.readStop();let l=o.toString("latin1").match(t)?.[1],u=Ed.get(l),f=Date.now();if(u&&u.worker.threadId!==-1)return u.lastUsed=f,s(u.worker);rI(n,d=>{Ed.set(l,{worker:d,lastUsed:f}),s(d,o)})})}a(r,"findByHeaderAffinity")}function pK(){RS=0;for(let e of hd)e.expectedIdle=e.recentELU.idle+Ehe,e.requests=1;hd.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function She(e,t,r){let n=ghe++;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(),yS.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")),yS.delete(n)),s.event=="destroy"&&(e.destroy(),yS.delete(n))})}var bs,md,bS,OS,lK,uK,dK,hd,pd,fK,aK,Jw,_K,Xw,_he,eI,RS,cK,Ed,Ehe,yS,ghe,nI=be(()=>{bs=M(rt()),md=require("net");H();bS=M(j()),OS=require("fs");Ii();lK=require("worker_threads"),uK=M(Qu()),dK=M(Et()),hd=[],pd=[],fK=[],Jw=0,_K=[];lK.isMainThread&&(process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)}),(0,bs.onMessageFromWorkers)(e=>{e.type===eA.RESTART&&Xw&&(clearInterval(Xw),hK())}));_he=6e5;a(hhe,"startHTTPThreads");a(hK,"licenseWarning");a(Zw,"startHTTPWorker");a(tI,"startSocketServer");RS=0;a(rI,"findMostIdleWorker");cK=36e5,Ed=new Map;a(phe,"findByRemoteAddressAffinity");a(mhe,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Ed)r.lastUsed+cK<e&&Ed.delete(t)},cK).unref();Ehe=1e3;a(pK,"updateWorkerIdleness");(0,bs.setMonitorListener)(pK);yS=new Map,ghe=1;a(She,"proxySocket")});var DK=I((zDe,PK)=>{var gK=M(require("cluster")),Da=M(ce());H();var Ui=M(j()),SK=M(require("fastify")),TK=M(require("@fastify/cors")),AK=M(require("@fastify/compress")),RK=M(require("@fastify/static")),yK=M(Sb()),bK=M(require("path")),OK=M(Et()),NK=M(Hs()),wK=M(oe()),IK=M(Gn()),CK=M(Qu());Gr();var La=M(SS());ji();Da.default.initSync();var The=6e4,Ahe=1024*1024*1024,Rhe="TRUE",{CONFIG_PARAMS:Ph}=q,gd;PK.exports={hdbServer:EK,start:EK};async function EK(e){try{Ui.default.debug("In Fastify server"+process.cwd()),Ui.default.debug(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Ui.default.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=gK.default.isMaster,await yhe();let t=e.securePort>0;gd=bhe(t),await gd.ready(),e||(e={}),e.isOperationsServer=!0;try{Ye.http(gd.server,e),gd.server.closeIdleConnections||await gd.listen({port:0,host:"::"})}catch(r){throw gd.close(),Ui.default.error(r),Ui.default.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),Ui.default.fatal(t),process.exit(1)}}a(EK,"operationsServer");async function yhe(){Ui.default.trace("Configuring HarperDB process."),NK.default.setSchemaDataToGlobal(),await IK.default.setUsersWithRolesCache(),await CK.default.getLicense()}a(yhe,"setUp");function bhe(e){Ui.default.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=Ohe(e),r=(0,SK.default)(t);r.server.headersTimeout=whe(),r.setErrorHandler(La.serverErrorHandler);let n=Nhe();n&&r.register(TK.default,n),r.register(function(i,o,c){i.setNotFoundHandler(function(l,u){r.server.emit("unhandled",l.raw,u.raw)}),c()}),r.register(yK.default),r.register(AK.default),r.register(RK.default,{root:bK.default.join(OK.PACKAGE_ROOT,"studio/build-local")}),hf(r);let s=Da.default.get(JT.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!wK.default.isEmpty(s)&&s.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[La.reqBodyValidationHandler,La.authHandler],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),(0,La.handlePostRequest)(i,o)}),r.get("/health",()=>"HarperDB is running."),Ui.default.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(bhe,"buildServer");function Ohe(e){let t=Da.default.get(Ph.OPERATIONSAPI_NETWORK_TIMEOUT),r=Da.default.get(Ph.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:Ahe,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}a(Ohe,"getServerOptions");function Nhe(){let e=Da.default.get(Ph.OPERATIONSAPI_NETWORK_CORS),t=Da.default.get(Ph.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===Rhe)&&(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(Nhe,"getCORSOpts");function whe(){return Da.default.get(Ph.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??The}a(whe,"getHeaderTimeoutConfig")});var uI={};ve(uI,{disableNATS:()=>Che,publishToStream:()=>CS,setNATSReplicator:()=>iI,setPublishToStream:()=>Phe,setSubscription:()=>lI,start:()=>Ihe});function Ihe(){Dh.default.get(B.CLUSTERING_ENABLED)&&Lhe()}function Che(e=!0){xK=e}function Phe(e,t){CS=e,lI=t}function Lhe(){if(xK||process.env._DISABLE_NATS)return;let e=Je(),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];iI(s,r,i)}}Yc((r,n)=>{iI(r.tableName,r.databaseName,r),n&&HK(r)}),!LK&&(LK=!0)}function iI(e,t,r){if(t==="system"&&Mhe.includes(e))return;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 Fr{static{a(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this.getId(),record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this.getId()})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this.getId(),record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this.getId(),record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this.getId()})}static defineSchema(i){HK(i)}static subscribe(){let i=new Pn;return lI(t,e,i),i}static subscribeOnThisThread(i){return i<(Dh.default.get(B.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??Dhe)}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 wS(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=BK;return i}a(n,"getNATSTransaction")}function HK(e){let t=Dh.default.get(B.CLUSTERING_NODENAME);CS(`${aI.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,cI.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 MK,aI,cI,vK,UK,Dh,IS,xK,CS,lI,Dhe,BK,LK,Mhe,wS,oI,kK=be(()=>{Me();Jo();MK=M(pr()),aI=M(Nt()),cI=M(ro());Fl();vK=M(Mb()),UK=M(an()),Dh=M(ce());H();IS=M(j());a(Ihe,"start");a(Che,"disableNATS");CS=MK.publishToStream,lI=vK.setSubscription;a(Phe,"setPublishToStream");Dhe=2;a(Lhe,"assignReplicationSource");Mhe=["hdb_job","hdb_analytics","hdb_raw_analytics","hdb_info","hdb_license"];a(iI,"setNATSReplicator");a(HK,"publishSchema");wS=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=Dh.default.get(B.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writes_by_db){let o=[],c=[],l,u;for(let f of i){let d=f.table,h=f.operation=="put"?"upsert":f.operation;l||(IS.trace(`Sending transaction event ${h}`),u=l={operation:h,schema:s,table:d,__origin:{user:this.user?.username,timestamp:t,node_name:r}},l.hash_values=c,h!=="delete"&&h!=="invalidate"&&(l.records=o)),l.table===d&&l.operation===h?(o.push(f.record),c.push(f.id)):u=u.next={operation:h,table:d,id:f.id,record:f.record},f.expiresAt&&(u.expiresAt=f.expiresAt)}l&&n.push(CS(`${aI.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,cI.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(f=>{throw IS.error("An error has occurred trying to replicate transaction",l,f),f.statusCode=504,f}))}return Promise.all(n)}},oI=class extends wS{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,UK.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};BK=new oI});async function VK({clientId:e,user:t,clean:r,will:n,keepalive:s}){let i;if(e&&!r){let o=await dI.get(e,{returnNonexistent:!0});i=new hI(e,t,o),o&&(i.sessionWasPresent=!0)}else{if(e){let o=await dI.get(e);o&&o.delete()}i=new DS(e,t)}return n&&(n.id=e,n.user={username:t?.username},Lh.put(n)),s&&(i.keepalive=s,i.receivedPacket()),i}function fI(){return PS++,PS>65500&&(PS=1),PS}function _I(e,t,r){let{topic:n,retain:s}=e;e.data=t,e.async=!0,r.authorize=!0;let i=_i.getMatch(n,"mqtt");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 bt(r,()=>s?t===void 0?o.delete(e,r):o.put(e,e.data,r):o.publish(e,e.data,r))}var GK,Ma,qK,$K,FK,dI,Lh,PS,DS,hI,KK=be(()=>{Me();Yl();GK=M(an()),Ma=M(j());rc();qK=M(rt()),$K=M(sI());Gr();FK=100,dI=ut({database:"system",table:"hdb_durable_session",attributes:[{name:"id",isPrimaryKey:!0},{name:"subscriptions",type:"array",elements:{attributes:[{name:"topic"},{name:"qos"},{name:"startTime"},{name:"acks"}]}}]}),Lh=ut({database:"system",table:"hdb_session_will",attributes:[{name:"id",isPrimaryKey:!0},{name:"topic",type:"string"},{name:"data"},{name:"qos",type:"number"},{name:"retain",type:"boolean"},{name:"user",type:"any"}]});(0,qK.getWorkerIndex)()===0&&(async()=>{await $K.when_components_loaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of Lh.search({})){let t=e.data,r={...e};r.user?.username&&(r.user=await Ye.getUser(r.user.username));try{await _I(r,t,r)}catch{(0,Ma.warn)("Failed to publish will",t)}Lh.delete(e.id)}})();a(VK,"getSession");PS=1;a(fI,"getNextMessageId");DS=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;request;socket;subscriptions=[];awaitingAcks;sessionWasPresent;keepalive;keepaliveTimer;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,n){let{topic:s,rh:i,startTime:o}=t,c=s.indexOf("?"),l,u;if(c>-1?(l=s.slice(c),u=s.slice(0,c)):u=s,!u)throw new Error("No topic provided");if(u.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");let f=this.subscriptions.find(R=>R.topic===s),d;f?(d=i>0,f.end(),this.subscriptions.splice(this.subscriptions.indexOf(f),1)):d=i===2;let h={search:l,async:!0,user:this.user,startTime:o,omitCurrent:d,url:""};o&&(0,Ma.trace)("Resuming subscription from",s,"from",o);let _=_i.getMatch(u,"mqtt");if(!_){let R=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw R.statusCode=404,R}if(h.url=_.relativeURL,h.url.indexOf("+")>-1||h.url.indexOf("#")>-1){let R=h.url.slice(1);if(R.indexOf("#")>-1&&R.indexOf("#")!==R.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(h.isCollection=!0,R.indexOf("+")===R.length-1)h.onlyChildren=!0,h.url="/"+R.slice(0,R.length-1);else{let E=R.split("/"),A;for(let F=0;F<E.length;F++)if(E[F].indexOf("+")>-1)if(E[F]==="+")A=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&A)throw new Error("Filters can not be combined");let O=!0;E[E.length-1]==="#"&&(E.length--,O=!1),A&&(n=a(F=>{let G=F.id;if(!Array.isArray(G))if(G?.indexOf?.("/")>-1)G=G.split("/");else return!1;if(O&&G.length!==E.length)return!1;for(let Y=0;Y<E.length;Y++)if(E[Y]!=="+"&&E[Y]!==G[Y])return!1;return!0},"filter"));let v=E.indexOf("+");h.url="/"+(v>-1?E.slice(0,v):E).concat("").join("/")}}let p=_.path,S=_.Resource,g=await bt(h,async()=>{let R=this.createContext();R.topic=s,R.retainHandling=i;let E=await S.subscribe(h,R);if(!E)return;if(!E[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);let A=(async()=>{for await(let O of E)try{let v;if(O.type&&O.type!=="put"&&O.type!=="delete"&&O.type!=="message"&&O.type!=="patch"||n&&!n(O))continue;r?(O.topic=s,v=this.needsAcknowledge(O)):(O.acknowledge?.(),v=fI());let F=O.id;if(Array.isArray(F)&&(F=Kl(F)),F==null&&(F=""),await this.listener(p+"/"+F,O.value,v,t)===!1)break;this.awaitingAcks?.size>FK?await new Promise(Y=>setTimeout(Y,this.awaitingAcks.size-FK)):await new Promise(setImmediate)}catch(v){(0,Ma.warn)(v)}})();return E});if(g)return g.topic=s,g.qos=t.qos,this.subscriptions.push(g),g}resume(){}needsAcknowledge(t){let r=fI();return t.acknowledge&&(this.awaitingAcks||(this.awaitingAcks=new Map),this.awaitingAcks.set(r,{acknowledge:t.acknowledge})),r}acknowledge(t){let r=this.awaitingAcks?.get(t);r&&(this.awaitingAcks.delete(t),r.acknowledge())}async removeSubscription(t){let r=this.subscriptions.find(n=>n.topic===t);if(r)return r.end(),this.subscriptions.splice(this.subscriptions.indexOf(r),1),!0}async publish(t,r){return _I(t,r,this.createContext())}createContext(){let t={session:this,socket:this.socket,user:this.user,authorize:!0};return this.request&&(t.request=this.request,t.url=this.request.url,t.headers=this.request.headers),t}setListener(t){this.listener=t}disconnect(t){this.keepaliveTimer&&clearTimeout(this.keepaliveTimer);let r=this.createContext();bt(r,async()=>{try{if(!t){let n=await Lh.get(this.sessionId);n?.doesExist()&&await _I(n,n.data,r)}}finally{await Lh.delete(this.sessionId)}}).catch(n=>{(0,Ma.warn)(`Error publishing MQTT will for ${this.sessionId}`,n)});for(let n of this.subscriptions)n.end();this.subscriptions=[]}receivedPacket(){this.keepalive&&(clearTimeout(this.keepaliveTimer),this.keepaliveTimer=setTimeout(()=>{this.socket?.destroy?this.socket.destroy(new Error("Keepalive timeout")):this.socket?.terminate()},this.keepalive*1500))}};a(_I,"publish");hI=class extends DS{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.localTime):null)}resumeSubscription(t,r,n){return super.addSubscription(t,r,n)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=fI(),n={topic:t.topic,timestamp:t.localTime};return t.acknowledge&&(n.acknowledge=t.acknowledge),this.awaitingAcks.set(r,n),r}acknowledge(t){let r=this.awaitingAcks?.get(t);if(!r)return;this.awaitingAcks?.delete(t),r.acknowledge?.();let n=r.topic;for(let[,s]of this.awaitingAcks)if(s.topic===n&&s.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===n){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,Ma.trace)("Received ack",n,r.timestamp),this.sessionRecord.update();return}}for(let s of this.sessionRecord.subscriptions)s.topic===n&&(s.startTime=r.timestamp);this.sessionRecord.update()}async addSubscription(t,r){await this.resumeSubscription(t,r);let{qos:n,startTime:s}=t;return n>0&&!s&&this.saveSubscriptions(),t.qos}removeSubscription(t){let r=this.subscriptions.find(s=>s.topic===t),n=super.removeSubscription(t);return r.qos>0&&this.saveSubscriptions(),n}saveSubscriptions(){this.sessionRecord.subscriptions=this.subscriptions.map(t=>{let r=t.startTime;return r||(r=t.startTime=(0,GK.getNextMonotonicTime)()),(0,Ma.trace)("Added durable subscription",t.topic,r),{qos:t.qos,topic:t.topic,startTime:r}}),dI.put(this.sessionRecord)}}});var mI={};ve(mI,{bypassAuth:()=>vhe,start:()=>Uhe});function vhe(){jK=!0}function Uhe({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){e.mqtt||(e.mqtt={requireAuthentication:i,sessions:new Set,events:new QK.EventEmitter},e.mqtt.events.on("error",()=>{}));let o=e.mqtt,c=[],l=r?.mtls;return n&&(c=e.ws((u,f,d,h)=>{if(f.headers.get("sec-websocket-protocol")!=="mqtt")return h(u,f,d);o.events.emit("connection",u),ur.debug?.("Received WebSocket connection for MQTT from",u._socket.remoteAddress);let{onMessage:_,onClose:p}=WK(u,S=>{u.send(S)},f,Promise.resolve(d).then(()=>f?.user),o);u.on("message",_),u.on("close",p),u.on("error",S=>{ur.info?.("WebSocket error",S)})},{...n})),(t||s)&&c.push(e.socket(async u=>{let f;if(o.events.emit("connection",u),ur.debug?.(`Received ${u.getCertificate?"SSL":"TCP"} connection for MQTT from ${u.remoteAddress}`),l){if(u.authorized)try{let _=l.user;if(_!==null){(_===void 0||_==="Common Name"||_==="CN")&&(_=u.getPeerCertificate().subject.CN);try{f=await e.getUser(_,null,null),(0,Sd.get)(B.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&MS.notify?.({username:f?.username,status:Ls.SUCCESS,type:Vo.AUTHENTICATION,auth_strategy:"MQTT mTLS",remote_address:u.remoteAddress})}catch(p){throw(0,Sd.get)(B.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&MS.error?.({username:_,status:Ls.FAILURE,type:Vo.AUTHENTICATION,auth_strategy:"mqtt",remote_address:u.remoteAddress}),p}}else ur.debug?.("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",u.remoteAddress)}catch(_){o.events.emit("error",_,u),ur.error?.(_)}else if(l.required)return ur.info?.(`Unauthorized connection attempt, no authorized client certificate provided, error: ${u.authorizationError}`),u.end()}!f&&jK&&u.remoteAddress.includes("127.0.0.1")&&(f=await(0,zK.getSuperUser)(),ur.debug?.("Auto-authorizing local connection",f?.username));let{onMessage:d,onClose:h}=WK(u,_=>u.write(_),null,f,o);u.on("data",d),u.on("close",h),u.on("error",_=>{ur.info?.("Socket error",_)})},{port:t,securePort:s,mtls:l})),c}function WK(e,t,r,n,s){YK||(YK=!0,__(d=>{LS>0&&d.push({metric:"mqtt-connections",connections:LS,byThread:!0})}));let i;LS++;let o,c={protocolVersion:4},l=(0,vS.parser)({protocolVersion:5});function u(d){l.parse(d)}a(u,"onMessage");function f(){LS--,i||(i=!0,o?.disconnect?.(),s.events.emit("disconnected",o,e),s.sessions.delete(o),Yn(!1,"connection","mqtt","disconnect"),ur.debug?.("MQTT connection was closed",e.remoteAddress))}return a(f,"onClose"),l.on("packet",async d=>{n?.then&&(n=await n);let h=d.cmd;if(o)o.then&&await o;else if(h!=="connect"){ur.info?.("Received packet before connection was established, closing connection"),e?.destroy?e.destroy():e?.terminate();return}let _=d.topic,p=_?.indexOf("/",1),S=p>0?_.slice(0,p):_;nr(d.length,"bytes-received",S,R(d),"mqtt");try{switch(o?.receivedPacket?.(),h){case"connect":if(c.protocolVersion=d.protocolVersion,d.username)try{n=await Ye.getUser(d.username,d.password.toString(),r),(0,Sd.get)(B.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&MS.notify?.({username:n?.username,status:Ls.SUCCESS,type:Vo.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch(se){return(0,Sd.get)(B.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&MS.error?.({username:d.username,status:Ls.FAILURE,type:Vo.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),s.events.emit("auth-failed",d,e,se),Yn(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return s.events.emit("auth-failed",d,e),Yn(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(d,n),d.will){let se=e.deserialize||(e.deserialize=Qi(r?.headers.get?.("content-type")));d.will.data=d.will.payload?.length>0?se(d.will.payload):void 0,delete d.will.payload}o=VK({user:n,...d}),o=await o,o.socket=e,r&&(o.request=r),s.sessions.add(o)}catch(se){return ur.error?.(se),s.events.emit("auth-failed",d,e,se),Yn(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:se.code||5,returnCode:se.code||128})}s.events.emit("connected",o,e),Yn(!0,"connection","mqtt","connect"),g({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0});let A=a(async(se,X,ne,Q)=>{try{if(i)throw new Error("Session disconnected while trying to send message to",se);let pe=se.indexOf("/",1),Re=pe>0?se.slice(0,pe):se;g({cmd:"publish",topic:se,payload:await E(X),messageId:ne||Math.floor(Math.random()*1e8),qos:Q.qos},Re);let Ce=e._socket??e;return Ce.writableNeedDrain?new Promise(me=>Ce.once("drain",me)):!Ce.closed}catch(pe){return ur.error?.(pe),o?.disconnect(),s.sessions.delete(o),!1}},"listener");o.setListener(A),o.sessionWasPresent&&await o.resume();break;case"subscribe":let O=[];for(let se of d.subscriptions){let X;try{let ne=await o.addSubscription(se,se.qos>=1);X=ne?ne.qos||0:c.protocolVersion<5?128:143}catch(ne){s.events.emit("error",ne,e,se,o),ne.statusCode?ne.statusCode===500?ur.warn?.(ne):ur.info?.(ne):ur.error?.(ne),X=c.protocolVersion<5?128:ne.statusCode===403?135:ne.statusCode===404?143:128}O.push(X)}await o.committed,g({cmd:"suback",granted:O,messageId:d.messageId});break;case"unsubscribe":{let se=[];for(let X of d.unsubscriptions)se.push(o.removeSubscription(X)?0:17);g({cmd:"unsuback",granted:se,messageId:d.messageId});break}case"pubrel":g({cmd:"pubcomp",messageId:d.messageId,reasonCode:0});return;case"publish":let v=d.qos===2?"pubrec":"puback",F=e.deserialize||(e.deserialize=Qi(r?.headers.get?.("content-type"))),Y=(d.payload?.length||0)>0?F(d.payload):void 0,te;try{te=await o.publish(d,Y)}catch(se){s.events.emit("error",se,e,d,o),ur.warn?.(se),d.qos>0&&g({cmd:v,messageId:d.messageId,reasonCode:128},d.topic);break}d.qos>0&&g({cmd:v,messageId:d.messageId,reasonCode:te===!1?144:0},d.topic);break;case"pubrec":g({cmd:"pubrel",messageId:d.messageId,reasonCode:0});break;case"pubcomp":case"puback":o.acknowledge(d.messageId);break;case"pingreq":g({cmd:"pingresp"});break;case"disconnect":i=!0,o?.disconnect(!0),s.events.emit("disconnected",o,e),s.sessions.delete(o),Yn(!0,"connection","mqtt","disconnect"),ur.debug?.("Received disconnect command, closing MQTT session",e.remoteAddress),e.close?e.close():e.end();break}}catch(A){s.events.emit("error",A,e,d,o),ur.error?.(A),g({cmd:"disconnect"})}function g(A,O){let v=(0,vS.generate)(A,c);t(v),nr(v.length,"bytes-sent",O,R(A),"mqtt")}a(g,"sendPacket");function R(A){return A.qos>0?A.cmd+",qos="+A.qos:A.cmd}a(R,"packetMethodName");function E(A){return Zo(A,r)}a(E,"serialize")}),l.on("error",d=>{ur.warn("MQTT parsing error, closing connection:",d.message),e?.destroy?e.destroy():e?.terminate()}),{onMessage:u,onClose:f}}var vS,zK,Sd,pI,QK,MS,ur,jK,YK,LS,JK=be(()=>{vS=require("mqtt-packet");KK();zK=M(Gn());ji();Ii();Gr();Sd=M(ce());H();pI=M(hi()),QK=require("events"),MS=(0,pI.loggerWithTag)("auth-event"),ur=(0,pI.loggerWithTag)("mqtt"),jK=(0,Sd.get)(B.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(vhe,"bypassAuth");a(Uhe,"start");LS=0;a(WK,"onSocket")});var ZK={};ve(ZK,{Request:()=>EI,createReuseportFd:()=>US});var XK,EI,gI,SI,US,TI=be(()=>{XK=require("os"),EI=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 SI(t.headers)}get absoluteURL(){return this.protocol+"://"+this.host+this.url}get pathname(){let t=this.url.indexOf("?");return t>-1?this.url.slice(0,t):this.url}set pathname(t){let r=this.url.indexOf("?");r>-1?this.url=t+this.url.slice(r):this.url=t}get protocol(){return this._nodeRequest.socket.encrypted?"https":"http"}get ip(){return this._nodeRequest.socket.remoteAddress}get authorized(){return this._nodeRequest.socket.authorized}get peerCertificate(){return this._nodeRequest.socket.getPeerCertificate()}get mtlsConfig(){return this._nodeRequest.socket.server.mtlsConfig}get body(){return this.#e||(this.#e=new gI(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}sendEarlyHints(t,r={}){r.link=t,this._nodeResponse.writeEarlyHints(r)}},gI=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}pipe(t,r){return this.#e.pipe(t,r)}},SI=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)}delete(t){delete this.asObject[t.toLowerCase()]}forEach(t){for(let[r,n]of this)t(n,r,this)}};(0,XK.platform)()!="win32"&&(US=require("node-unix-socket").createReuseportFd)});var hh={};ve(hh,{component_errors:()=>Ad,getComponentName:()=>Fhe,loadComponent:()=>HS,loadComponentDirectories:()=>sY,setErrorReporter:()=>khe});function sY(e,t){t&&(RI=t),e&&(NI=e);let r=[];if((0,at.existsSync)(AI)){let s=(0,at.readdirSync)(AI,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,St.join)(AI,o);r.push(HS(c,RI,WT,!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(HS(n,RI,n,!1,null,!!process.env.DEV_MODE)),Promise.all(r).then(()=>{nY=!0})}function khe(e){Mh=e}async function HS(e,t,r,n,s,i){let o=(0,at.realpathSync)(e);if(xS.has(o))return xS.get(o);xS.set(o,!0),s&&(NI=s);try{let c;n&&(Ad=new Map);let l=(0,St.join)(e,"harperdb-config.yaml");(0,at.existsSync)(l)?c=n?(0,kS.getConfigObj)():(0,yI.parseDocument)((0,at.readFileSync)(l,"utf8")).toJSON():!n&&(0,at.existsSync)(l=(0,St.join)(e,"config.yaml"))?c=(0,yI.parseDocument)((0,at.readFileSync)(l,"utf8")).toJSON():c=wI;let u=(0,St.join)(e,"node_modules","harperdb");try{hl.isMainThread&&(n||((0,at.existsSync)(u)||!e.startsWith((0,OI.getHdbBasePath)()))&&(!(0,at.existsSync)(u)||(0,at.realpathSync)(bI.PACKAGE_ROOT)!==(0,at.realpathSync)(u)))&&((0,at.rmSync)(u,{recursive:!0,force:!0}),(0,at.existsSync)((0,St.join)(e,"node_modules"))||(0,at.mkdirSync)((0,St.join)(e,"node_modules")),(0,at.symlinkSync)(bI.PACKAGE_ROOT,u,"dir"))}catch(h){Td.default.error("Error symlinking harperdb module",h)}let f=BS,d=n;for(let h in c){BS=h;let _=c[h];if(Ad.set(n?h:(0,St.basename)(e),!1),!_)continue;let p,S=_.package;try{if(S){let O=e,v;for(;!(0,at.existsSync)(v=(0,St.join)(O,"node_modules",h));)if(O=(0,St.dirname)(O),O.length<(0,OI.getHdbBasePath)().length){v=null;break}if(v)p=await HS(v,t,r,!1),d=!0;else throw new Error(`Unable to find package ${h}:${S}`)}else p=Hhe[h];if(!p)continue;let g=a(O=>(O.origin=r,ut(O)),"ensureTable"),R=_.network||(_.port||_.securePort)&&_,E=R?.securePort||R?.https&&R.port,A=!R?.https&&R?.port;if(hl.isMainThread&&(p=await p.startOnMainThread?.({server:Ye,ensureTable:g,port:A,securePort:E,resources:t,..._})||p,n&&R))for(let O of[A,E])try{if(+O&&!eY.includes(O)){let v=II.get(B.HTTP_SESSIONAFFINITY);v&&Td.default.warn("Session affinity is not recommended and may cause memory leaks"),(v||!US)&&(eY.push(O),tI(O,v))}}catch(v){console.error("Error listening on socket",O,v,h)}if(t.isWorker&&(p=await p.start?.({server:Ye,ensureTable:g,port:A,securePort:E,resources:t,..._})||p),NI.set(p,!0),(p.handleFile||p.handleDirectory||p.setupFile||p.setupDirectory)&&_.files!=null){if(_.files.includes(".."))throw(0,rY.handleHDBError)("Can not reference parent directories");let O=(0,St.join)(e,_.files).replace(/\\/g,"/"),v=O.indexOf("/*");if(v>-1&&_.files!==wI[h]?.files&&!(0,at.existsSync)(O.slice(0,v)))throw new Error(`The path '${O.slice(0,v)}' does not exist and cannot be used as the base of the resolved 'files' path value '${_.files}'`);let F=(0,St.basename)(e),G=_.path||"/";G=G.startsWith("/")?G:G.startsWith("./")?"/"+F+G.slice(2):G==="."?"/"+F:"/"+F+"/"+G;let Y,te,se;if(_.root){let ne=_.root;ne.startsWith("/")&&(ne=ne.slice(1)),ne.endsWith("/")&&(ne=ne.slice(0,-1)),ne+="/",te=(0,St.join)(e,ne)}else(se=O.indexOf("/*"))>-1?(te=O.slice(0,se+1),Y=(0,St.relative)(e,te)):_.files.indexOf("/")>-1&&(te=O.slice(0,O.lastIndexOf("/")+1),Y=(0,St.relative)(e,te));let X=!1;if(hl.isMainThread&&p.setupDirectory&&(X=await p.setupDirectory?.(G,te,t)),t.isWorker&&p.handleDirectory&&(X=await p.handleDirectory?.(G,te,t)),X){d=!0;continue}for(let ne of await(0,tY.default)(O,{onlyFiles:!1,objectMode:!0})){let{path:Q,dirent:pe}=ne;d=!0;let Re=(0,St.relative)(e,Q).replace(/\\/g,"/");if(Y)if(Re.startsWith(Y))Re=Re.slice(Y.length+1);else throw new Error(`The root path '${_.root}' does not reference a valid part of the file path '${Re}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`);let Ce=G+(G.endsWith("/")?"":"/")+Re;try{if(pe.isFile()){let me=await Bhe(Q);hl.isMainThread&&await p.setupFile?.(me,Ce,Q,t),t.isWorker&&await p.handleFile?.(me,Ce,Q,t)}else hl.isMainThread&&await p.setupDirectory?.(Ce,Q,t),t.isWorker&&await p.handleDirectory?.(Ce,Q,t)}catch(me){me.message=`Could not load ${pe.isFile()?"file":"directory"} '${Q}'${_.module?" using '"+_.module+"'":""} for application '${e}' due to: ${me.message}`,Mh?.(me),((0,Rd.getWorkerIndex)()===0?console:Td.default).error(me),t.set(_.path||"/",new Xo(me)),Ad.set(n?h:(0,St.basename)(e),me.message)}}}}catch(g){g.message=`Could not load component '${h}' for application '${(0,St.basename)(e)}' due to: ${g.message}`,Mh?.(g),((0,Rd.getWorkerIndex)()===0?console:Td.default).error(g),t.set(_.path||"/",new Xo(g),null,!0),Ad.set(n?h:(0,St.basename)(e),g.message)}}if(BS=f,hl.isMainThread&&!nY&&i&&(0,Rd.watchDir)(e,async()=>sY()),c.extensionModule){let h=await rE((0,St.join)(e,c.extensionModule));return xS.set(o,h),h}if(!d&&t.isWorker){let h=`${e} did not load any modules, resources, or files, is this a valid component?`;Mh?.(new Error(h)),((0,Rd.getWorkerIndex)()===0?console:Td.default).error(h),Ad.set((0,St.basename)(e),h)}}catch(c){console.error(`Could not load application directory ${e}`,c),c.message=`Could not load application due to ${c.message}`,Mh?.(c),t.set("",new Xo(c))}}var at,St,hl,yI,II,bI,tY,Rd,Td,rY,OI,xhe,kS,Bhe,AI,NI,nY,RI,Ad,Hhe,wI,eY,xS,Mh,BS,Fhe,ph=be(()=>{at=require("fs"),St=require("path"),hl=require("worker_threads"),yI=require("yaml"),II=M(ce()),bI=M(Et());H();ND();JD();Ix();Lx();Mx();pB();X1();sK();oK();tY=M(require("fast-glob")),Rd=M(rt()),Td=M(j());nb();Gr();rY=M(he());Me();nI();OI=M(ce()),xhe=M(DK());Hg();kK();fs();JK();kS=M(It());TI();AA();({readFile:Bhe}=at.promises),AI=(0,kS.resolvePath)(II.get(B.COMPONENTSROOT)),NI=new Map,Ad=new Map;a(sY,"loadComponentDirectories");Hhe={REST:cE,rest:cE,graphql:UA,graphqlSchema:bA,roles:rb,jsResource:ib,fastifyRoutes:zw,login:ab,static:Qw,operationsApi:xhe,customFunctions:{},http:{},clustering:uI,replication:ma,authentication:ah,mqtt:mI,loadEnv:jw},wI={rest:!0,graphqlSchema:{files:"*.graphql"},roles:{files:"roles.yaml"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(wI,"static",{value:{files:"web/**"}});eY=[],xS=new Map;a(khe,"setErrorReporter");Fhe=a(()=>BS,"getComponentName");a(HS,"loadComponent")});var NS=I((OLe,oY)=>{var{isMainThread:iY}=require("worker_threads"),{getTables:Ghe,getDatabases:yLe,table:bLe}=(Me(),D(st)),{loadComponentDirectories:qhe,loadComponent:$he}=(ph(),D(hh)),{resetResources:Vhe}=(Yl(),D(RD)),Khe=YN(),Yhe=It(),{dirname:Whe}=require("path"),{getConnection:zhe}=pr(),Qhe=ce(),{CONFIG_PARAMS:jhe}=(H(),D(q)),{loadCertificates:Jhe}=Qs(),CI=new Map;async function Xhe(e=!1){!iY&&Qhe.get(jhe.CLUSTERING_ENABLED)&&zhe();try{iY&&await Khe()}catch(n){console.error(n)}let t=Vhe();Ghe(),t.isWorker=e,await Jhe(),await $he(Whe(Yhe.getConfigFilePath()),t,"hdb",!0,CI),await qhe(CI,t);let r=[];for(let[n]of CI)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}a(Xhe,"loadRootComponents");oY.exports.loadRootComponents=Xhe});var rt=I((wLe,ni)=>{"use strict";KT();var{Worker:Zhe,MessageChannel:epe,parentPort:xi,isMainThread:vI,threadId:tpe,workerData:Bi}=require("worker_threads"),{PACKAGE_ROOT:rpe}=Et(),{join:uY,isAbsolute:npe,extname:spe}=require("path"),{server:dY}=(Gr(),D(Wl)),{watch:ipe,readdir:ope}=require("fs/promises"),{totalmem:aY}=require("os"),yd=(H(),D(q)),fY=ce(),ri=j(),{randomBytes:ape}=require("crypto"),{_assignPackageExport:cpe}=ci(),cY=1024*1024,va=[],Os=[],lpe=50,UI=1e4,upe="restart",_Y="request_thread_info",hY="resource_report",pY="thread_info",mY="added-port",dpe="ack",PI;cpe("threads",Os);ni.exports={startWorker:DI,restartWorkers:BI,shutdownWorkers:mpe,workers:va,setMonitorListener:bpe,onMessageFromWorkers:Epe,onMessageByType:yY,broadcast:Spe,broadcastWithAcknowledgement:Ape,setChildListenerByType:ppe,getWorkerIndex:EY,getWorkerCount:gY,getTicketKeys:TY,setMainIsWorker:_pe,setTerminateTimeout:fpe,restartNumber:Bi?.restartNumber||1};Os.onMessageByType=yY;Os.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=Os.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};ni.exports.whenThreadsStarted=new Promise(e=>{ni.exports.threadsHaveStarted=e});var xI;function fpe(e){UI=e}a(fpe,"setTerminateTimeout");function EY(){return Bi?Bi.workerIndex:xI?0:void 0}a(EY,"getWorkerIndex");function gY(){return Bi?Bi.workerCount:xI?1:void 0}a(gY,"getWorkerCount");function _pe(e){xI=e,ni.exports.threadsHaveStarted()}a(_pe,"setMainIsWorker");var SY=1,FS;function TY(){return FS||(FS=vI?ape(48):Bi.ticketKeys,FS)}a(TY,"getTicketKeys");Object.defineProperty(dY,"workerIndex",{get(){return EY()}});Object.defineProperty(dY,"workerCount",{get(){return gY()}});var AY={[_Y](e,t){Rpe(t)},[hY](e,t){ype(t,e)}};function DI(e,t={}){let r=process.constrainedMemory?.()||aY();r=Math.min(r,aY(),2e4*cY);let n=fY.get(yd.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/cY/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],o=[];for(let l of Os){let u=new epe;u.existingPort=l,i.push(u),o.push(u.port2)}spe(e)||(e+=".js");let c=new Zhe(npe(e)?e:uY(rpe,e),{resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:["--enable-source-maps"],argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(l=>l.existingPort.threadId),workerIndex:t.workerIndex,workerCount:SY=t.threadCount,name:t.name,restartNumber:ni.exports.restartNumber,ticketKeys:TY()},transferList:o,...t});for(let{port1:l,existingPort:u}of i)u.postMessage({type:mY,port:l,threadId:c.threadId},[l]);return qS(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>DI(e,t),c.on("error",l=>{ri.error(`Worker index ${t.workerIndex} error:`,l)}),c.on("exit",l=>{va.splice(va.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<lpe?(t.unexpectedRestarts=c.unexpectedRestarts+1,DI(e,t)):ri.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",l=>{AY[l.type]?.(l,c)}),va.push(c),Npe(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(DI,"startWorker");var hpe=[yd.THREAD_TYPES.HTTP];async function BI(e=null,t=Math.max(SY>3,1),r=!0){if(vI){try{process.chdir(process.cwd())}catch(o){ri.error("Unable to reestablish current working directory",o)}if(r){let{loadRootComponents:o}=NS();await o()}ni.exports.restartNumber++,t<1&&(t=t*va.length);let n=[],s=[];for(let o of va.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;ri.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:ni.exports.restartNumber,type:yd.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=hpe.indexOf(o.name)>-1,l=new Promise(u=>{let f=setTimeout(()=>{ri.warn("Thread did not voluntarily terminate, terminating from the outside",o.threadId),o.terminate()},UI*2).unref();o.on("exit",()=>{clearTimeout(f),n.splice(n.indexOf(l)),!c&&r&&o.startCopy(),u()})});if(n.push(l),c&&r){let u=o.startCopy(),f=new Promise(d=>{let h=a(_=>{_.type===yd.ITC_EVENT_TYPES.CHILD_STARTED&&(ri.trace("Worker has started",u.threadId),d(),s.splice(s.indexOf(f)),u.off("message",h))},"startListener");ri.trace("Waiting for worker to start",u.threadId),u.on("message",h)});s.push(f),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}=rd();r&&(e==="http"||!e)&&fY.get(yd.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else xi.postMessage({type:upe,workerType:e})}a(BI,"restartWorkers");function ppe(e,t){AY[e]=t}a(ppe,"setChildListenerByType");function mpe(e){return BI(e,1/0,!1)}a(mpe,"shutdownWorkers");var RY=[];function Epe(e){RY.push(e)}a(Epe,"onMessageFromWorkers");var LI=new Map;function yY(e,t){let r=LI.get(e);r||LI.set(e,r=[]),r.push(t)}a(yY,"onMessageByType");var gpe=10;async function Spe(e,t){let r=0;for(let n of Os)try{n.postMessage(e),r++>gpe&&(r=0,await new Promise(setImmediate))}catch(s){ri.error("Unable to send message to worker",s)}t&&OY(e,null)}a(Spe,"broadcast");var GS=new Map,Tpe=1;function Ape(e){return new Promise(t=>{let r=0;for(let n of Os)try{let s=Tpe++,i=a(()=>{GS.delete(s),--r===0&&t(),n!==xi&&--n.refCount===0&&n.unref()},"ack_handler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,GS.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,o]of GS)o.port===n&&o()})),n.postMessage(e),r++}catch(s){ri.error("Unable to send message to worker",s)}r===0&&t()})}a(Ape,"broadcastWithAcknowledgement");function Rpe(e){e.postMessage({type:pY,workers:bY()})}a(Rpe,"sendThreadInfo");function bY(){let e=Date.now();return va.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(bY,"getChildWorkerInfo");function ype(e,t){e.resources=t,e.resources.updated=Date.now()}a(ype,"recordResourceReport");var MI;function bpe(e){MI=e}a(bpe,"setMonitorListener");var Ope=1e3,lY=!1;function Npe(){lY||(lY=!0,setInterval(()=>{for(let e of va){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}MI&&MI()},Ope).unref())}a(Npe,"startMonitoring");var wpe=1e3;if(xi&&Bi?.addPorts){qS(xi);for(let e=0,t=Bi.addPorts.length;e<t;e++){let r=Bi.addPorts[e];r.threadId=Bi.addThreadIds[e],qS(r)}setInterval(()=>{let e=process.memoryUsage();xi.postMessage({type:hY,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},wpe).unref(),PI=a(()=>new Promise((e,t)=>{xi.on("message",r),xi.postMessage({type:_Y});function r(n){n.type===pY&&(xi.off("message",r),e(n.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else PI=bY;ni.exports.getThreadInfo=PI;function qS(e,t){Os.push(e),e.on("message",r=>{if(r.type===mY)r.port.threadId=r.threadId,qS(r.port);else if(r.type===dpe){let n=GS.get(r.id);n&&n()}else OY(r,e)}).on("close",()=>{Os.splice(Os.indexOf(e),1)}).on("exit",()=>{Os.splice(Os.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(qS,"addPort");function OY(e,t){for(let n of RY)n(e,t);let r=LI.get(e.type);if(r)for(let n of r)try{n(e,t)}catch(s){ri.error(s)}}a(OY,"notifyMessageListeners");if(vI){let e,t,r=new Set,n=a(async(s,i)=>{i&&(e=i);for(let o of await ope(s,{withFileTypes:!0}))o.isDirectory()&&o.name!=="node_modules"&&n(uY(s,o.name));try{for await(let{filename:o}of ipe(s,{persistent:!1}))r.add(o),t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await BI(),console.log("Reloaded HarperDB components, changed files:",Array.from(r)),r.clear()},100)}catch(o){console.warn("Error trying to watch component directory",s,o)}},"watch_dir");ni.exports.watchDir=n,process.env.WATCH_DIR&&n(process.env.WATCH_DIR)}else xi.on("message",async e=>{let{type:t}=e;t===yd.ITC_EVENT_TYPES.SHUTDOWN&&(ni.exports.restartNumber=e.restartNumber,xi.unref(),setTimeout(()=>{ri.warn("Thread did not voluntarily terminate",tpe),process.exit(0)},UI).unref())})});var PY={};ve(PY,{onStorageReclamation:()=>vh,runReclamationHandlers:()=>GI,setAvailableSpaceRatioGetter:()=>Cpe});function vh(e,t,r){(r||(0,VS.getWorkerIndex)()===(0,VS.getWorkerCount)()-1)&&($S.has(e)||$S.set(e,[]),$S.get(e).push({priority:0,handler:t}),FI||(FI=setTimeout(GI,wY).unref()))}async function GI(){for(let[e,t]of $S)try{let r=await CY(e),n=Ipe/r;for(let s of t){let{priority:i,handler:o}=s;if(s.priority=n,n>1||i>1){let c=o(n>1?n:0);c&&(kI.default.info?.(`Running storage reclamation handler for ${e} with priority ${n}`),await c)}}}catch(r){kI.default.error?.("Error running storage reclamation handlers",r)}FI=setTimeout(GI,wY).unref()}function Cpe(e){CY=e??IY}var HI,VS,kI,KS,NY,$S,Ipe,wY,FI,IY,CY,YS=be(()=>{HI=require("node:fs/promises"),VS=M(rt()),kI=M(hi());H();KS=M(ce()),NY=M(oe());KS.default.initSync();$S=new Map,Ipe=KS.default.get(B.STORAGE_RECLAMATION_THRESHOLD)??.4,wY=(0,NY.convertToMS)(KS.default.get(B.STORAGE_RECLAMATION_INTERVAL))||36e5;a(vh,"onStorageReclamation");IY=a(async e=>{if(HI.statfs){let t=await(0,HI.statfs)(e);return t.bavail/t.blocks}else return new Promise((t,r)=>{import("hdd-space").then(n=>{n.default(s=>{for(let i of s.parts)if(e.startsWith(i.place))return t(i.free/i.size);return t(1)})})})},"defaultGetAvailableSpaceRatio"),CY=IY;a(GI,"runReclamationHandlers");a(Cpe,"setAvailableSpaceRatioGetter")});var W0={};ve(W0,{ACTION_32_BIT:()=>Zp,ACTION_64_BIT:()=>Lpe,AUDIT_STORE_OPTIONS:()=>rh,Decoder:()=>Kc,HAS_BLOBS:()=>vn,HAS_CURRENT_RESIDENCY_ID:()=>fc,HAS_EXPIRATION_EXTENDED_TYPE:()=>Rf,HAS_ORIGINATING_OPERATION:()=>Af,HAS_PREVIOUS_RESIDENCY_ID:()=>_c,REMOTE_SEQUENCE_UPDATE:()=>qE,createAuditEntry:()=>jl,getLastRemoved:()=>EO,openAuditStore:()=>QS,readAuditEntry:()=>Ot,removeAuditEntry:()=>jS,setAuditRetention:()=>Dpe,transactionKeyEncoder:()=>kY});function QS(e){let t=e.auditStore=e.openDB(qI.AUDIT_STORE_NAME,{create:!1,...rh});t||(t=e.auditStore=e.openDB(qI.AUDIT_STORE_NAME,rh),LY(t,1)),t.rootStore=e,t.tableStores=[];let r=[];t.addDeleteRemovalCallback=function(l,u,f){return r[l]=f,t.tableStores[l]=u,t.deleteCallbacks=r,{remove(){delete r[l]}}};let n=null,s,i=0,o=VI;vh(t.env.path,l=>{if(i=l,l)return c(100)});function c(l){l&&(o=l),clearTimeout(n);let u=new Promise(f=>{n=setTimeout(async()=>{if(await s,s=u,t.rootStore.status==="closed"||t.rootStore.status==="closing")return;let d=0,h,_;try{for(let{key:p,value:S}of t.getRange({start:1,snapshot:!1,end:Date.now()-$I/(1+i*i)})){try{h=jS(t,p,S)}catch(g){bd.warn("Error removing audit entry",g)}if(_=p,await new Promise(setImmediate),++d>=Ppe){o=10;break}}await h}finally{d===0?o=Math.min(o<<1,$I/10):(LY(t,_),o>100&&(o=o>>1)),f(void 0),c()}},o).unref()});return u}if(a(c,"scheduleAuditCleanup"),t.scheduleAuditCleanup=c,(0,xh.getWorkerIndex)()===(0,xh.getWorkerCount)()-1&&c(),(0,xh.getWorkerIndex)()===0&&!DY)for(let l of t.getKeys({reverse:!0,limit:1}))l>Date.now()&&(DY=!0,bd.error("The current time is before the last recorded entry in the audit log. Time reversal can undermine the integrity of data tracking and certificate validation and the time must be corrected."));return t}function jS(e,t,r){let n=Mpe(r),s;if(n&vn){s=Ot(r);let i=e.tableStores[s.tableId],o=i.getEntry(s.recordId);(!o||o.version!==s.version||!o.value)&&uc(()=>ta(s.getValue(i)),i.rootStore)}if((n&15)===KI){s=s||Ot(r);let i=s.tableId;e.tableStores[s.tableId].getEntry(s.recordId).version===s.version&&e.deleteCallbacks?.[i]?.(s.recordId,s.version)}return e.remove(t)}function LY(e,t){YI[0]=t,e.put(Symbol.for("last-removed"),FY)}function EO(e){let t=e.get(Symbol.for("last-removed"));if(t)return FY.set(t),YI[0]}function Dpe(e,t=VI){$I=e,VI=t}function jl(e,t,r,n,s,i,o,c,l,u,f,d,h){let _=GY[o];if(!_)throw new Error(`Invalid audit entry type ${o}`);let p=1;if(n&&(n>1?Ua.setFloat64(0,n):Ns.set(KA),p=9),l){if(l&255)throw new Error("Illegal extended type");p+=3}R(s),R(t),g(r),Ua.setFloat64(p,e),p+=8,l&fc&&R(u),l&_c&&R(f),l&Rf&&(Ua.setFloat64(p,d),p+=8),l&Af&&R(qY[h]),i?g(i):Ns[p++]=0,l?Ua.setUint32(n?8:0,_|l|3221225472):Ns[n?8:0]=_;let S=Ns.subarray(0,p);if(c)return Buffer.concat([S,c]);return S;function g(E){let A=p;p+=1,p=(0,pl.writeKey)(E,Ns,p);let O=p-A-1;O>127?O>16383?(bd.error("Key or username was too large for audit entry",E),p=A+1,Ns[A]=0):(Ns.copyWithin(A+2,A+1,p),Ua.setUint16(A,O|32768),p++):Ns[A]=O}function R(E){E<128?Ns[p++]=E:E<16384?(Ua.setUint16(p,E|32768),p+=2):E<1056964608?(Ua.setUint32(p,E|3221225472),p+=4):(Ns[p]=255,Ua.setUint32(p+1,E),p+=5)}}function Mpe(e){let t=0;e[0]==66&&(t=8);let r=e[t];if(r<128)return r;let n=e.dataView||(e.dataView=new Kc(e.buffer,e.byteOffset,e.byteLength));return n.position=t,n.readInt()}function Ot(e,t=0,r=void 0){try{let n=e.dataView||(e.dataView=new Kc(e.buffer,e.byteOffset,e.byteLength));n.position=t;let s;e[n.position]==66&&(s=n.readFloat64());let i=n.readInt(),o=n.readInt(),c=n.readInt(),l=n.readInt(),u=n.position,f=n.position+=l,d=n.readFloat64(),h,_,p,S;if(i&fc&&(h=n.readInt()),i&_c&&(_=n.readInt()),i&Rf&&(p=n.readFloat64()),i&Af){let A=n.readInt();S=qY[A]}l=n.readInt();let g=n.position,R=n.position+=l,E;return{type:GY[i&7],tableId:c,nodeId:o,get recordId(){return(0,pl.readKey)(e,u,f)},getBinaryRecordId(){return e.subarray(u,f)},version:d,previousLocalTime:s,get user(){return R>g?(0,pl.readKey)(e,g,R):void 0},get encoded(){return t?e.subarray(t,r):e},getValue(A,O,v){if(i&WS||i&Uh&&!O)return E||(E=uc(()=>A.decoder.decode(e.subarray(n.position,r)),A.rootStore)),E;if(i&Uh&&v)return Gy(A.getEntry(this.recordId),v,A)},getBinaryValue(){return i&(WS|Uh)?e.subarray(n.position,r):void 0},extendedType:i,residencyId:h,previousResidencyId:_,expiresAt:p,originatingOperation:S}}catch(n){return bd.error("Reading audit entry error",n,e),{}}}var pl,zS,qI,xh,HY,bd,Ns,Ua,kY,rh,$I,Ppe,YI,FY,VI,DY,WS,Uh,MY,KI,vY,UY,xY,BY,Zp,Lpe,qE,fc,_c,Af,Rf,vn,GY,qY,Kc,Ji=be(()=>{pl=require("ordered-binary"),zS=M(ce()),qI=M(vt());H();xh=M(rt()),HY=M(oe());Jl();bd=M(j());$m();cs();YS();(0,zS.initSync)();Ns=Buffer.alloc(2816),Ua=new DataView(Ns.buffer,Ns.byteOffset,2816),kY={writeKey(e,t,r){return e===Tf?(t.set(Tf,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,pl.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,pl.readKey)(e,t,r)}},rh={encoding:"binary",keyEncoder:kY},$I=(0,HY.convertToMS)((0,zS.get)(B.LOGGING_AUDITRETENTION))||86400*3,Ppe=1e3,YI=new Float64Array(1),FY=new Uint8Array(YI.buffer),VI=1e4,DY=!1;a(QS,"openAuditStore");a(jS,"removeAuditEntry");a(LY,"updateLastRemoved");a(EO,"getLastRemoved");a(Dpe,"setAuditRetention");WS=16,Uh=32,MY=1,KI=2,vY=3,UY=4,xY=5,BY=6,Zp=14,Lpe=15,qE=11,fc=512,_c=1024,Af=2048,Rf=4096,vn=8192,GY={put:MY|WS,[MY]:"put",delete:KI,[KI]:"delete",message:vY|WS,[vY]:"message",invalidate:UY|Uh,[UY]:"invalidate",patch:xY|Uh,[xY]:"patch",relocate:BY,[BY]:"relocate"},qY={insert:1,update:2,upsert:3,1:"insert",2:"update",3:"upsert"};a(jl,"createAuditEntry");a(Mpe,"readAction");a(Ot,"readAuditEntry");Kc=class extends DataView{static{a(this,"Decoder")}position=0;readInt(){let t;return t=this.getUint8(this.position++),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(t){throw t.message=`Error reading float64: ${t.message} at position ${this.position}`,t}}}});function QI(e,t,r,n,s){let i=e.primaryStore.env.path,o=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=VY,vpe(e.primaryStore,e.auditStore)):(c=$Y,e.primaryStore.env.hasSubscriptionCommitListener||(e.primaryStore.env.hasSubscriptionCommitListener=!0,e.primaryStore.on("committed",()=>{KY($Y[i])})));let l=c[i]||(c[i]=[]);if(l.auditStore=e.auditStore,l.lastTxnTime==null&&(l.lastTxnTime=Date.now()),s?.scope==="full-database")return;let u=l[o];u||(u=l[o]=new Map,u.envs=l,u.tableId=o,u.store=e.primaryStore),t=Kl(t);let f=new zI(r);f.startTime=n;let d=u.get(t);return d?d.push(f):(u.set(t,d=[f]),d.tables=u,d.key=t),f.subscriptions=d,f}function KY(e){if(!e)return;let t=e.auditStore;t.resetReadTxn(),YY(e.auditStore);let r;for(let{key:n,value:s}of t.getRange({start:e.lastTxnTime,exclusiveStart:!0})){e.lastTxnTime=n;let i=Ot(s),o=e[i.tableId];if(!o)continue;let c=i.recordId,l=Kl(c),u=0;do{let f=o.get(l);if(f){for(let h of f)if(!(u>0&&!(h.includeDescendants&&!(h.onlyChildren&&u>1)))){if(h.startTime>=n){(0,WI.info)("omitting",c,h.startTime,n);continue}try{let _;h.supportsTransactions&&h.txnInProgress!==i.version&&(_=!0,h.txnInProgress||(r?r.push(h):r=[h]),h.txnInProgress=i.version),h.listener(c,i,n,_)}catch(_){console.error(_),(0,WI.info)(_)}}}if(l==null)break;let d=l.lastIndexOf?.("/",l.length-2);d!==l.length-1&&u++,d>-1?l=l.slice(0,d+1):l=null}while(!0)}if(r)for(let n of r)n.txnInProgress=null,n.listener(null,{type:"end_txn"},e.lastTxnTime,!0)}function vpe(e,t){let r=t||e,n=r.env;if(!n.hasAfterCommitListener){n.hasAfterCommitListener=!0;let s=n.path;r.on("aftercommit",({next:i,last:o,txnId:c})=>{let l=VY[s];if(!l)return;let u=a(()=>{r.threadLocalWrites||(r.threadLocalWrites=new Float64Array(r.getUserSharedBuffer("last-thread-local-write",new ArrayBuffer(8)))),l.txnTime=r.threadLocalWrites[0]||Date.now();try{KY(l)}finally{r.threadLocalWrites[0]=l.lastTxnTime,r.unlock("thread-local-writes")}},"acquiredLock");r.attemptLock("thread-local-writes",u)&&u()})}}function YY(e){e.nextTransaction?.resolve();let t;e.nextTransaction=new Promise(r=>{t=r}),e.nextTransaction.resolve=t}function mk(e){return e.nextTransaction||(QI({primaryStore:e,auditStore:e},null,null,0,{scope:"full-database"}),YY(e)),e.nextTransaction}var WI,$Y,VY,zI,gO=be(()=>{WI=M(j());Fl();Yl();Ji();$Y=Object.create(null),VY=Object.create(null);a(QI,"addSubscription");zI=class extends Pn{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;if(t){let 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(KY,"notifyFromTransactionData");a(vpe,"listenToCommits");a(YY,"nextTransaction");a(mk,"whenNextTransaction")});var Cw={};ve(Cw,{EVICTED:()=>jo,INVALIDATED:()=>Dn,coerceType:()=>ZS,makeTable:()=>tT,setServerUtilities:()=>qpe});function tT(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:o,databaseName:c,auditStore:l,schemaDefined:u,dbisDB:f,sealed:d,splitSegments:h,replicate:_}=e,{expirationMS:p,evictionMS:S,audit:g,trackDeletes:R}=e;S??=0;let{attributes:E}=e;E||(E=[]);let A=zA(i,n,l),O,v,F={},G=Promise.resolve(),Y,te,se;for(let K of E)(K.assignCreatedTime||K.name==="__createdtime__")&&(Y=K),(K.assignUpdatedTime||K.name==="__updatedtime__")&&(te=K),K.expiresAt&&(se=K),K.isPrimaryKey&&(F=K);let X,ne=[],Q=[],pe=1,Re=2,Ce={},me={},Jt=864e5,ct=0,Ar,is,In,Pl=!1,Dl,kT=new Map,FT=new Map,Lt,Hd,fp=El.get(B.REPLICATION_DATABASES);if(Array.isArray(fp)){for(let K of fp)if(K.name===c&&K.replicateTo>=0){Hd=K.replicateTo;break}}let _p=i.getRange({start:!1,end:!1}).constructor,kd=10,hp=6;g&&qd(),vh(i.env.path,K=>{if(v)return qo(K)});class Pe extends Fr{#e;#t;#n;#r;#s;#i;static name=s;static primaryStore=i;static auditStore=l;static primaryKey=t;static tableName=s;static tableId=n;static indices=r;static audit=g;static databasePath=o;static databaseName=c;static attributes=E;static replicate=_;static sealed=d;static splitSegments=h??!0;static createdTimeProperty=Y;static updatedTimeProperty=te;static propertyResolvers;static userResolvers={};static sources=[];static getResidencyById;static get expirationMS(){return p}static dbisDB=f;static schemaDefined=u;static sourcedFrom(m,T){if(T&&(this.sourceOptions=T,(T.expiration||T.eviction||T.scanInterval)&&this.setTTLExpiration(T)),T?.intermediateSource)m.intermediateSource=!0,this.sources.unshift(m);else{if(this.sources.some(N=>!N.intermediateSource)){if(this.sources.some(N=>N.name===m.name))return;throw new Error("Can not have multiple canonical (non-intermediate) sources")}this.sources.push(m)}v=v||m.get&&(!m.get.reliesOnPrototype||m.prototype.get),O=O||m.load;let w=a(N=>{let L=this.sources;if(L=L.filter(k=>k.intermediateSource&&k[N]&&(!k[N].reliesOnPrototype||k.prototype[N])),L.length>0)if(L.length===1){let k=L[0];return(P,x,$)=>{if(P?.source!==k)return k[N](x,$,P)}}else return(k,P,x)=>{let $=[];for(let z of L){if(k?.source===z)break;$.push(z[N](P,x,k))}return Promise.all($)}},"getApplyToIntermediateSource"),y=this.sources[this.sources.length-1];y.intermediateSource&&(y={});let b=a(N=>{if(y[N]&&(!y[N].reliesOnPrototype||y.prototype[N]))return(L,k,P)=>{if(!L?.source)return y[N](k,P,L)}},"getApplyToCanonicalSource");Ce={put:b("put"),patch:b("patch"),delete:b("delete"),publish:b("publish")},me={put:w("put"),patch:w("patch"),delete:w("delete"),publish:w("publish"),invalidate:w("invalidate")};let C=y.shouldRevalidateEvents;return(async()=>{let N=!1,L,k=a(async(P,x)=>{let $=P.value,z=P.table?qe[c][P.table]:Pe;if(c===Kd&&(P.table===Hl.ROLE_TABLE_NAME||P.table===Hl.USER_TABLE_NAME)&&(N=!0),P.id===void 0&&(P.id=$[z.primaryKey],P.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(P));P.source=m;let ie={residencyId:Bl(P.residencyList),isNotification:!0,ensureLoaded:!1,nodeId:P.nodeId},U=await z.getResource(P.id,x,ie);switch(P.finished&&await P.finished,P.type){case"put":return C?U._writeInvalidate($,ie):U._writeUpdate($,!0,ie);case"patch":return C?U._writeInvalidate($,ie):U._writeUpdate($,!1,ie);case"delete":return U._writeDelete(ie);case"publish":return U._writePublish($,ie);case"invalidate":return U._writeInvalidate($,ie);case"relocate":return U._writeRelocate(ie);default:xe.default.error?.("Unknown operation",P.type,P.id)}},"writeUpdate");try{let P=m.subscribe;P&&R==null&&(R=!0);let x={crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0},$=m.subscribeOnThisThread?m.subscribeOnThisThread((0,ml.getWorkerIndex)(),x):(0,ml.getWorkerIndex)()===0,z=P&&$&&await m.subscribe?.(x);if(z){let ie;for await(let U of z)try{if(!(U.type==="transaction"?U.writes[0]:U)){xe.default.error?.("Bad subscription event",U);continue}if(U.source=m,U.type==="end_txn"){if(ie?.resolve(),U.localTime&&L!==U.localTime){if(U.remoteNodeIds?.length>0){let fe=[Symbol.for("seq"),U.remoteNodeIds[0]],ee=f.get(fe),W=ee?.nodes;W||(W=[]);for(let Ae of U.remoteNodeIds.slice(1)){let ye=W.find(lt=>lt.id===Ae);W=W.filter(lt=>lt.id!==Ae||lt===ye),ye||(ye={id:Ae,seqId:0},W.push(ye)),ye.seqId=Math.max(ee?.seqId??1,U.localTime),Ae===ie?.nodeId&&(ye.lastTxnTime=U.timestamp)}let _e=Math.max(ee?.seqId??1,U.localTime);xe.default.trace?.("Received txn",c,new Date(_e),new Date(U.localTime),U.remoteNodeIds),f.put(fe,{seqId:_e,nodes:W})}L=U.localTime}U.onCommit&&ie?.committed.then(U.onCommit);continue}if(ie)if(U.beginTxn)ie.resolve();else{ie.write_promises.push(k(U,ie));continue}!U.timestamp&&U.version&&(U.timestamp=U.version);let ae=bt(U,()=>{if(U.type==="transaction"){let fe=[];for(let ee of U.writes)try{fe.push(k(ee,U))}catch(W){throw W.message+=" writing "+JSON.stringify(ee)+" of event "+JSON.stringify(U),W}return Promise.all(fe)}else if(U.type==="define_schema"){let fe=this.attributes.slice(0),ee;for(let W of U.attributes)fe.find(_e=>_e.name===W.name)||(fe.push(W),ee=!0);ee&&(ut({table:s,database:c,attributes:fe,origin:"cluster"}),Hh.signalSchemaChange(new kh.SchemaEventMsg(process.pid,$t.CREATE_TABLE,c,s)))}else return U.beginTxn?(ie=U,ie.write_promises=[k(U,U)],new Promise(fe=>{ie.resolve=()=>fe(Promise.all(ie.write_promises))})):k(U,U)});ie&&(ie.committed=ae),N&&ae&&!ae?.waitingForUserChange&&(ae.then(()=>Hh.signalUserChange(new kh.UserEventMsg(process.pid))),ae.waitingForUserChange=!0),U.onCommit&&(ae?ae.then(U.onCommit):U.onCommit())}catch(ue){xe.default.error?.("error in subscription handler",ue)}}}catch(P){xe.default.error?.(P)}})(),this}static get isCaching(){return v}static get shouldRevalidateEvents(){return this.prototype.get!==Pe.prototype.get}static getResource(m,T,w){let y=super.getResource(m,T,w);if(m!=null){Nr(m);try{if(y.getRecord?.())return y;if(typeof m=="object"&&m&&!Array.isArray(m))throw new Error(`Invalid id ${JSON.stringify(m)}`);let b=!w?.async||i.cache?.get?.(m),C=Br(T),N=C.getReadTxn();if(N?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return Ll(m,T,{transaction:N,ensureLoaded:w?.ensureLoaded},b,L=>{if(L?Pe._updateResource(y,L):y.#e=null,T.onlyIfCached&&T.noCacheStore){if(!y.doesExist())throw new Or.ServerError("Entry is not cached",504)}else if(w?.ensureLoaded){let k=nn(m,L,T,y);if(k)return C?.disregardReadTxn(),y.#i=!0,JI(k,P=>(Pe._updateResource(y,P),y))}return y})}catch(b){throw b.message.includes("Unable to serialize object")&&(b.message+=": "+JSON.stringify(m)),b}}return y}static _updateResource(m,T){m.#r=T,m.#e=T?.value??null,m.#n=T?.version}ensureLoaded(){let m=nn(this.getId(),this.#r,this.getContext());if(m)return this.#i=!0,JI(m,T=>{this.#r=T,this.#e=T.value,this.#n=T.version})}static getNewId(){let m=F?.type;if(m==="String"||m==="ID")return super.getNewId();if(!Lt){let b=i.getEntry(Symbol.for("id_allocation")),C=b?.value,N;if(C&&C.nodeName===server.hostname&&(!Vpe(i)||C.pid===process.pid)){let L=C.start,k=C.end;N=L;for(let P of i.getKeys({start:k,end:L,limit:1,reverse:!0}))N=P}else C=y(b?.version??null),N=C.start;Lt=new BigInt64Array([BigInt(N)+1n]),Lt=new BigInt64Array(i.getUserSharedBuffer("id",Lt.buffer)),Lt.maxSafeId=C.end}let T=Number(Atomics.add(Lt,0,1n)),w=m==="Int"?512:1048576;if(T+w>=Lt.maxSafeId){let b=a(C=>{Lt.maxSafeId=T+(m==="Int"?1023:4194303);let N=(m==="Int"?Math.pow(2,31):Math.pow(2,49))-1,L=C?void 0:i.useReadTransaction(),k=Number(Lt[0]);for(let $ of i.getKeys({start:k+1,end:N,limit:1,transaction:L}))N=$;L?.done();let{value:P,version:x}=i.getEntry(Symbol.for("id_allocation"));if(Lt.maxSafeId<N){if(P.end>Lt.maxSafeId-100)return;xe.default.info?.("New id allocation",T,Lt.maxSafeId,x),i.put(Symbol.for("id_allocation"),{start:P.start,end:Lt.maxSafeId,nodeName:server.hostname,pid:process.pid},Date.now(),x)}else{xe.default.warn?.(`Id conflict detected, starting new id allocation range, attempting to allocate to ${Lt.maxSafeId}, but id of ${N} detected`);let $=y(x);$.alreadyUpdated||Atomics.store(Lt,0,BigInt($.start+1)),Lt.maxSafeId=$.end}},"updateEnd");T+w===Lt.maxSafeId?setImmediate(b):T+100>=Lt.maxSafeId&&(xe.default.warn?.(`Synchronous id allocation required on table ${s}${m=="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`),i.transactionSync(()=>b(!0)))}return T;function y(b){let C=(m==="Int"?Math.pow(2,31):Math.pow(2,49))-1,N=C/4,L,k,P=!1,x,$;do{x=Math.floor(Math.random()*C),$={start:x,end:x+(m==="Int"?1024:4194304),nodeName:server.hostname,pid:process.pid},L=0;for(let z of i.getKeys({start:x,limit:1,reverse:!0}))L=z;k=C;for(let z of i.getKeys({start:x+1,end:C,limit:1}))k=z;N*=.875,N<1e3&&!P&&(P=!0,xe.default.error?.(`Id allocation in table ${s} is very dense, limited safe range of numbers to allocate ids in${m==="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`,x,L,k,N))}while(!(N<k-x&&(N<x-L||L===0)));return i.transactionSync(()=>{let z=i.getEntry(Symbol.for("id_allocation"));return(z?.version??null)==b?(xe.default.info?.("Allocated new id range",$),i.put(Symbol.for("id_allocation"),$,Date.now()),$):(xe.default.debug?.("Looks like ids were already allocated"),{alreadyUpdated:!0,...z.value})})}}static setTTLExpiration(m){if(typeof m=="number")p=m*1e3,S||(S=0);else if(m&&typeof m=="object")p=m.expiration*1e3,S=(m.eviction||0)*1e3,Jt=m.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(p<0)throw new Error("Expiration can not be negative");Jt=Jt||(p+S)/4,qo()}static getResidencyRecord(m){return f.get([Symbol.for("residency_by_id"),m])}static setResidency(m){Pe.getResidency=m}static setResidencyById(m){Pe.getResidencyById=m}static getResidency(m,T){if(Pe.getResidencyById)return Pe.getResidencyById(m[t]);let w=Hd;if(T.replicateTo!=null){if(Array.isArray(T.replicateTo))return T.replicateTo.includes(server.hostname)?T.replicateTo:[server.hostname,...T.replicateTo];T.replicateTo>=0&&(w=T.replicateTo)}if(w>=0&&server.nodes){let y=[server.hostname];if(T.previousResidency)y.push(...T.previousResidency.slice(0,w));else{let b=server.nodes.map(L=>L.name),C=Math.floor(b.length*Math.random());y.push(...b.slice(C,C+w));let N=C+w-b.length;N>0&&y.push(...b.slice(0,N))}return y}}static enableAuditing(m=!0){g=m,m&&qd(),Pe.audit=m}static coerceId(m){return m===""?null:ZS(m,F)}static async dropTable(){delete qe[c][s];for(let m of i.getRange({versions:!0,snapshot:!1,lazy:!0}))m.metadataFlags&vn&&m.value&&ta(m.value);if(c===o){for(let m of E)f.remove(Pe.tableName+"/"+m.name),r[m.name]?.drop();f.remove(Pe.tableName+"/"),i.drop(),await f.committed}else console.log("legacy dropTable"),await i.close(),await XS.default.remove(data_path),await XS.default.remove(data_path===standard_path?data_path+MDB_LOCK_FILE_SUFFIX:path.join(path.dirname(data_path),MDB_LEGACY_LOCK_FILE_NAME));Hh.signalSchemaChange(new kh.SchemaEventMsg(process.pid,$t.DROP_TABLE,c,s))}get(m){if(typeof m=="string")return this.getProperty(m);if(this.isCollection)return this.search(m);if(this.getId()===null)return m?.conditions?this.search(m):{records:"./",name:s,database:c,auditSize:l?.getStats().entryCount,attributes:E};if(m?.property)return this.getProperty(m.property);if(this.doesExist()||m?.ensureLoaded===!1||this.getContext()?.returnNonexistent)return this}allowRead(m,T){let w=Gd(m);if(w?.read){if(w.isSuperUser)return!0;let y=w.attribute_permissions,b=T?.select;if(y?.length>0||Pl&&b){if(T||(T={}),b){let C=y?.length>0&&jI(y,"read");T.select=b.map(N=>{let L=N.name||N;if(!C||C[L]){let k=In[L]?.definition?.tableClass;if(k){if(N.name||(N={name:N}),!k.prototype.allowRead.call(null,m,N))return!1;if(!N.select)return N.name}return N}}).filter(Boolean)}else T.select=y.filter(C=>C.read&&!In[C.attribute_name]).map(C=>C.attribute_name);return T}else return!0}}allowUpdate(m,T){let w=Gd(m);if(w?.update){let y=w.attribute_permissions;if(y?.length>0){let b=jI(y,"update");for(let C in T)if(!b[C])return!1;for(let C of y){let N=C.attribute_name;!C.update&&!(N in T)&&(T[N]=this.getProperty(N))}}return Go(this.getContext())}}allowCreate(m,T){if(this.isCollection){let w=Gd(m);if(w?.insert){let y=w.attribute_permissions;if(y?.length>0){let b=jI(y,"insert");for(let C in T)if(!b[C])return!1;return Go(this.getContext())}else return Go(this.getContext())}}else return this.allowUpdate(m,{})}allowDelete(m){return Gd(m)?.delete&&Go(this.getContext())}update(m,T){if(!Br(this.getContext()))throw new Error("Can not update a table resource outside of a transaction");if(m===!1)return this;let y;return typeof m=="object"&&m&&(T?(Object.isFrozen(m)&&(m={...m}),this.#e={},this.#t=m):(y=this.#t,y&&(m=Object.assign(y,m)),this.#t=m)),this._writeUpdate(this.#t,T),this}addTo(m,T){if(typeof T=="number"||typeof T=="bigint")this.#s===zY?this.set(m,(+this.getProperty(m)||0)+T):(this.#s||this.update(),this.set(m,new Ym(T)));else throw new Error("Can not add a non-numeric value")}subtractFrom(m,T){if(typeof T=="number")return this.addTo(m,-T);throw new Error("Can not subtract a non-numeric value")}getMetadata(){return this.#r}getRecord(){return this.#e}getChanges(){return this.#t}_setChanges(m){this.#t=m}setRecord(m){this.#e=m}invalidate(){this._writeInvalidate()}_writeInvalidate(m,T){let w=this.getContext(),y=this.getId();Nr(y),Br(this.getContext()).addWrite({key:y,store:i,invalidated:!0,entry:this.#r,before:Ce.invalidate?.bind(this,w,y),beforeIntermediate:me.invalidate?.bind(this,w,y),commit:a((C,N)=>{if(!(Fo(C,N,T?.nodeId)<=0)){m??=null;for(let L in r)m||(m={}),m[L]===void 0&&(m[L]=this.getProperty(L));xe.default.trace?.(`Invalidating entry id: ${y}, timestamp: ${new Date(C).toISOString()}`),A(y,m,this.#r,C,Dn,g,{user:w?.user,residencyId:T?.residencyId,nodeId:T?.nodeId},"invalidate")}},"commit")})}_writeRelocate(m){let T=this.getContext(),w=this.getId();Nr(w),Br(this.getContext()).addWrite({key:w,store:i,invalidated:!0,entry:this.#r,before:Ce.relocate?.bind(this,T,w),beforeIntermediate:me.relocate?.bind(this,T,w),commit:a((b,C)=>{if(Fo(b,C,m?.nodeId)<=0)return;let N=Pe.getResidencyRecord(m.residencyId),L=0,k=null,P=C?.value;if(N&&!N.includes(server.hostname)){for(let x in r)k||(k={}),k[x]=P(x);L=Dn}else k=P;xe.default.trace?.(`Relocating entry id: ${w}, timestamp: ${new Date(b).toISOString()}`),A(w,k,this.#r,b,L,g,{user:T.user,residencyId:m.residencyId,nodeId:m.nodeId,expiresAt:m.expiresAt},"relocate",!1,null)},"commit")})}static _recordRelocate(m,T){let w={previousResidency:this.getResidencyRecord(m.residencyId),isRelocation:!0},y=xl(this.getResidency(T.value,w)),b;if(y){if(!y.includes(server.hostname))return;b=Bl(y)}let N=A(m.key,T.value,m,m.version,0,!0,{residencyId:b,expiresAt:T.expiresAt},"relocate",!1,null)}static evict(m,T,w){let y=this.Source,b;if(!((v||g)&&(!T||(b=i.getEntry(m),!b||!T)||b.version!==w))){if(v){if(i.hasLock(m,b.version))return;let C;for(let N in r)C||(C={}),C[N]=T[N];if(C)return A(m,C,b,w,jo,null,null,null,!0)}if(i.ifVersion(m,w,()=>{rn(m,T,null)}),g)return A(m,null,b,w,jo,null,null,null,!0);dc(i,b??i.getEntry(m),w)}}lock(){throw new Error("Not yet implemented")}static operation(m,T){return m.table||=s,m.schema||=c,rW.operation(m,T)}put(m){this.update(m,!0)}patch(m){this.update(m,!1)}_writeUpdate(m,T,w){let y=this.getContext(),b=Br(y),C=this.getId();Nr(C);let N=this.#r;this.#s=T?zY:kpe;let L={key:C,store:i,entry:N,nodeName:y?.nodeName,validate:a(k=>{m||(m=this.#t),T||m&&Vm(this.#t===m?this:m)?y?.source||(b.checkOverloaded(),this.validate(m,!T),te&&(m[te.name]=te.type==="Date"?new Date(k):te.type==="String"?new Date(k).toISOString():k),T&&(t&&m[t]!==C&&(m[t]=C),Y&&(N?.value?m[Y.name]=N?.value[Y.name]:m[Y.name]=Y.type==="Date"?new Date(k):Y.type==="String"?new Date(k).toISOString():k),m=Pc(m))):b.removeWrite(L)},"validate"),before:T?Ce.put?()=>Ce.put(y,C,m):null:Ce.patch?()=>Ce.patch(y,C,m):Ce.put?()=>Ce.put(y,C,Pc(this)):null,beforeIntermediate:T?me.put?()=>me.put(y,C,m):null:me.patch?()=>me.patch(y,C,m):me.put?()=>me.put(y,C,Pc(this)):null,commit:a((k,P,x)=>{if(x){if(y&&P?.version>(y.lastModified||0)&&(y.lastModified=P.version),this.#r=P,P?.value&&P.value.getRecord)throw new Error("Can not assign a record to a record, check for circular references");T||(this.#e=P?.value??null)}this.#t=void 0,this.#n=k;let $=P?.value,z=m;this.#s=0;let ie=!1,U=Fo(k,P,w?.nodeId),ue;if(U<=0)if(g){let _e=P.localTime,Ae=P.version;xe.default.trace?.("Applying CRDT update to record with id: ",C,"applying later update:",Ae);let ye=[];for(;_e>k||Ae>=k&&_e>0;){let lt=l.get(_e);if(!lt)break;let et=Ot(lt);if(Ae=et.version,Ae>=k){if(Ae===k){if(U=Fo(k,{version:Ae,localTime:_e},w?.nodeId),U===0)return;if(U>0)continue}if(et.type==="patch")ye.push(et),ue=m;else if(et.type==="put"||et.type==="delete")return}_e=et.previousLocalTime}ye.sort((lt,et)=>lt.version-et.version);for(let lt of ye){let et=lt.getValue(i);if(z=qm(z,et,T),xe.default.debug?.("Rebuilding update with future patch:",z),!z)return}}else{if(T)return;z=qm(z,$,T),xe.default.debug?.("Rebuilding update without audit:",z)}let ae;if(T?ae=z:(this.#e=$,ae=Pc(this,z)),this.#e=ae,ae&&ae.getRecord)throw new Error("Can not assign a record to a record, check for circular references");let fe;if(w?.residencyId!=null)fe=w.residencyId;else{N?.residencyId&&(y.previousResidency=Pe.getResidencyRecord(N.residencyId));let _e=xl(Pe.getResidency(ae,y));if(_e&&!_e.includes(server.hostname))if(ue??=ae,ie=!0,Pe.getResidencyById)ae=void 0;else{ae=null;for(let Ae in r)ae||(ae={}),ae[Ae]=ue[Ae]}fe=Bl(_e)}T||(ue=m);let ee=y?.expiresAt??(p?p+Date.now():-1);xe.default.trace?.(`Saving record with id: ${C}, timestamp: ${new Date(k).toISOString()}${ee?", expires at: "+new Date(ee).toISOString():""}${P?", replaces entry from: "+new Date(P.version).toISOString():", new entry"}`,(()=>{try{return JSON.stringify(ae).slice(0,100)}catch{return""}})()),rn(C,$,ae);let W=T?"put":"patch";A(C,ae,P,k,ie?Dn:0,g,{omitLocalRecord:ie,user:y?.user,residencyId:fe,expiresAt:ee,nodeId:w?.nodeId,originatingOperation:y?.originatingOperation},W,!1,ue),y.expiresAt&&qo()},"commit")};b.addWrite(L)}async delete(m){if(typeof m=="string")return this.deleteProperty(m);if(this.isCollection){for await(let T of this.search(m))(await Pe.getResource(T[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(m);return}return this.#e?this._writeDelete(m):!1}_writeDelete(m){let T=Br(this.getContext()),w=this.getId();Nr(w);let y=this.getContext();return T.addWrite({key:w,store:i,entry:this.#r,nodeName:y?.nodeName,before:Ce.delete?.bind(this,y,w),beforeIntermediate:me.delete?.bind(this,y,w),commit:a((b,C,N)=>{let L=C?.value;N&&(y&&C?.version>(y.lastModified||0)&&(y.lastModified=C.version),Pe._updateResource(this,C)),!(Fo(b,C,m?.nodeId)<=0)&&(rn(this.getId(),L),xe.default.trace?.(`Deleting record with id: ${w}, txn timestamp: ${new Date(b).toISOString()}`),g||R?(A(w,null,this.#r,b,0,g,{user:y?.user,nodeId:m?.nodeId},"delete"),g||qo()):dc(i,C))},"commit")}),!0}search(m){let T=this.getContext(),w=Br(T);if(!m)throw new Error("No query provided");let y=m.conditions;y?y.length===void 0&&(y=y[Symbol.iterator]?Array.from(y):[y]):y=Array.isArray(m)?m:m[Symbol.iterator]?Array.from(m):[],this.getId()&&(y=[{attribute:null,comparator:Array.isArray(this.getId())?"prefix":"starts_with",value:this.getId()}].concat(y));let b,C={};function N(W,_e){let Ae;switch(_e){case"and":case void 0:if(W.length<1)throw new Error('An "and" operator requires at least one condition');Ae=!0;break;case"or":if(W.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+_e)}for(let ye of W){if(ye.conditions){ye.conditions=N(ye.conditions,ye.operator);continue}let lt=ye[0]??ye.attribute,et=lt==null?F:fi(E,lt);if(et)(et.type||mA[ye.comparator])&&(ye[1]===void 0?ye.value=k(ye.value,et):ye[1]=k(ye[1],et));else if(lt!=null)throw(0,Or.handleHDBError)(new Error,`${lt} is not a defined attribute`,404);if(ye.chainedConditions)if(ye.chainedConditions.length===1&&(!ye.operator||ye.operator=="and")){let Hr=ye.chainedConditions[0],Ee,je;if(Hr.comparator==="gt"||Hr.comparator==="greater_than"||Hr.comparator==="ge"||Hr.comparator==="greater_than_equal"?(Ee=ye,je=Hr):(Ee=Hr,je=ye),Ee.comparator!=="lt"&&Ee.comparator!=="less_than"&&Ee.comparator!=="le"&&Ee.comparator!=="less_than_equal")throw new Error("Invalid chained condition, only less than and greater than conditions can be chained together");let tt=je.comparator==="ge"||je.comparator==="greater_than_equal",Gt=Ee.comparator==="le"||Ee.comparator==="less_than_equal";ye.comparator=(tt?"ge":"gt")+(Gt?"le":"lt"),ye.value=[je.value,Ee.value]}else throw new Error("Multiple chained conditions are not currently supported")}return W}a(N,"prepareConditions");function L(W,_e){if(m.enforceExecutionOrder)return W;for(let Ae of W)Ae.conditions&&(Ae.conditions=L(Ae.conditions,Ae.operator));return W.length>1&&_e!=="or"?(0,eW.sortBy)(W,kp(Pe)):W}a(L,"orderConditions");function k(W,_e){return Array.isArray(W)?W.map(Ae=>ZS(Ae,_e)):ZS(W,_e)}a(k,"coerceTypedValues");let P=m.operator;(y.length>0||P)&&(y=N(y,P));let x=typeof m.sort=="object"&&m.sort,$;if(x&&P!=="or"){let W=x.attribute;if(W==null)throw new Or.ClientError("Sort requires an attribute");if(b=y.find(_e=>Vl(_e.attribute)===Vl(W)),!b){let _e=fi(E,W);if(!_e)throw(0,Or.handleHDBError)(new Error,`${Array.isArray(W)?W.join("."):W} is not a defined attribute`,404);if(_e.indexed)b={attribute:W,comparator:"sort"},y.push(b);else if(y.length===0&&!m.allowFullScan)throw(0,Or.handleHDBError)(new Error,`${Array.isArray(W)?W.join("."):W} is not indexed and not combined with any other conditions`,404)}b&&(b.descending=!!x.descending)}y=L(y,P),x&&(b&&y[0]===b?x.next&&($={dbOrderedAttribute:x.attribute,attribute:x.next.attribute,descending:x.next.descending,next:x.next.next}):(b&&y.splice(y.indexOf(b),1),$=x));let z=m.select;if(y.length===0&&(y=[{attribute:t,comparator:"greater_than",value:!0}]),m.explain)return{conditions:y,operator:P,postOrdering:$,selectApplied:!!z};let ie=w.useReadTxn(),U=EA(y,P,Pe,ie,m,T,(W,_e)=>vl(W,z,T,ie,_e),C),ue=m.ensureLoaded!==!1;$||(U=ee(U));let ae=Pe.transformEntryForSelect(z,T,ie,C,ue,!0),fe=Pe.transformToOrderedSelect(U,z,$,ie,T,ae);function ee(W){return m.offset||m.limit!==void 0?W.slice(m.offset,m.limit!==void 0?(m.offset||0)+m.limit:void 0):W}return a(ee,"applyOffset"),$&&(fe=ee(fe)),fe.onDone=()=>{fe.onDone=null,w.doneReadTxn()},fe.selectApplied=!0,fe.getColumns=()=>{if(z){let W=[];for(let _e of z)_e==="*"?W.push(...E.map(Ae=>Ae.name)):W.push(_e.name||_e);return W}return E.filter(W=>!W.computed&&!W.relationship).map(W=>W.name)},fe}static transformToOrderedSelect(m,T,w,y,b,C){let N=new _p;if(w){m=vl(m,T,y,b,null);let L;N.iterate=function(){let P,x=m[Symbol.asyncIterator]?m[Symbol.asyncIterator]():m[Symbol.iterator](),$,z=w.dbOrderedAttribute,ie,U,ue=!0;function ae(ee){let W=ee.next&&ae(ee.next),_e=ee.descending;return(Ae,ye)=>{let lt=Ml(Ae,ee.attribute,y),et=Ml(ye,ee.attribute,y),Hr=_e?(0,gl.compareKeys)(et,lt):(0,gl.compareKeys)(lt,et);return Hr===0?W?.(Ae,ye)||0:Hr}}a(ae,"createComparator");let fe=ae(w);return{async next(){let ee;if(P)if(ee=P.next(),ee.done){if($)return N.onDone&&N.onDone(),ee}else return{value:await C.call(this,ee.value)};L=[],ie&&L.push(ie);do if(ee=await x.next(),ee.done){if($=!0,L.length)break;return N.onDone&&N.onDone(),ee}else{let W=ee.value;if(W?.then&&(W=await W),z){let _e=Ml(W,z,y);if(ue)ue=!1,U=_e;else if(_e!==U){U=_e,ie=W;break}}L.push(W)}while(!0);return w.isGrouped,L.sort(fe),P=L[Symbol.iterator](),ee=P.next(),ee.done?(N.onDone&&N.onDone(),ee):{value:await C.call(this,ee.value)}},return(){N.onDone&&N.onDone(),x.return()},throw(){N.onDone&&N.onDone(),x.throw()}}};let k=a(P=>{if(typeof T=="object"&&Array.isArray(P.attribute))for(let x=0;x<T.length;x++){let $=T[x],z;if($.name===P.attribute[0]){for(z=$.sort||($.sort={});z.next;)z=z.next;z.attribute=P.attribute.slice(1),z.descending=P.descending}else $===P.attribute[0]&&(T[x]=z={name:$,sort:{attribute:P.attribute.slice(1),descending:P.descending}})}P.next&&k(P.next)},"applySortingOnSelect");k(w)}else N.iterate=(m[Symbol.asyncIterator]||m[Symbol.iterator]).bind(m),N=N.map(function(L){try{let k=C.call(this,L);return typeof k?.catch=="function"?k.catch(P=>{throw P.partialObject={[t]:L.key},P}):k}catch(k){throw k.partialObject={[t]:L.key},k}});return N}static transformEntryForSelect(m,T,w,y,b,C){if(m&&(m===t||m?.length===1&&m[0]===t&&Array.isArray(m))){let P=a(x=>(T?.transaction?.stale&&(T.transaction.stale=!1),x?.key??x),"transform");return m===t?P:m.asArray?x=>[P(x)]:x=>({[t]:P(x)})}let N;b&&v&&!(typeof m=="string"?[m]:m)?.every(P=>{let x;return typeof P=="object"?x=P.name:x=P,r[x]||x===t})&&(N=!0);let L,k=a(function(P){let x;if(T?.transaction?.stale&&(T.transaction.stale=!1),P!=null){if(x=P.value||P.deref?.()?.value,!x&&(P.key===void 0||P.deref)||P.metadataFlags&Dn){if(P.metadataFlags&Dn&&T.replicateFrom===!1&&C&&P.residencyId)return Ba.SKIP;if(P=Ll(P.key??P,T,{transaction:w,lazy:m?.length<4,ensureLoaded:b},this?.isSync,$=>$),P?.then)return P.then(k.bind(this));x=P?.value}if(N&&P?.metadataFlags&(Dn|jo)||P?.expiresAt!=null&&P?.expiresAt<Date.now()){if(T.onlyIfCached&&T.noCacheStore)return{[t]:P.key,message:"This entry has expired"};let $=nn(P.key??P,P,T);if($?.then)return $.then(k)}}if(x==null)return C?Ba.SKIP:x;if(m&&!(m[0]==="*"&&m.length===1)){let $,z=a((U,ue)=>{let ae;typeof U=="object"?ae=U.name:ae=U;let fe=In?.[ae],ee;if(fe){let W=y?.[ae];if(W)if(W.hasMappings){let Ae=fe.from?x[fe.from]:Vl(P.key);ee=W.get(Ae),ee||(ee=[])}else ee=W.fromRecord?.(x);else ee=fe(x,T,P);let _e=a(Ae=>{if(Ae&&typeof Ae=="object"){let ye=fe.definition?.tableClass||Pe;L||(L={});let lt=L[ae]||(L[ae]=ye.transformEntryForSelect(ae===U?null:U.select||(Array.isArray(U)?U:null),T,w,W,b));if(Array.isArray(Ae)){let et=[],Hr=ye.transformToOrderedSelect(Ae,U.select,typeof U.sort=="object"&&U.sort,T,w,lt)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),Ee=a(tt=>{for(;!tt.done;){if(tt?.then)return tt.then(Ee);et.push(tt.value),tt=Hr.next()}ue(et,ae)},"nextValue"),je=Ee(Hr.next());je&&($||($=[]),$.push(je));return}else if(Ae=lt.call(this,Ae),Ae?.then){$||($=[]),$.push(Ae.then(et=>ue(et,ae)));return}}ue(Ae,ae)},"handleResolvedValue");ee?.then?($||($=[]),$.push(ee.then(_e))):_e(ee);return}else ee=x[ae],ee&&typeof ee=="object"&&ae!==U&&(ee=Pe.transformEntryForSelect(U.select||U,T,w,null)({value:ee}));ue(ee,ae)},"selectAttribute"),ie;if(typeof m=="string")z(m,U=>{ie=U});else if(Array.isArray(m))if(m.asArray)ie=[],m.forEach((U,ue)=>{U==="*"?m[ue]=x:z(U,ae=>ie[ue]=ae)});else{ie={};let U=m.forceNulls;for(let ue of m)if(ue==="*")for(let ae in x)ie[ae]=x[ae];else z(ue,(ae,fe)=>{ae===void 0&&U&&(ae=null),ie[fe]=ae})}else throw new Or.ClientError("Invalid select"+m);return $?Promise.all($).then(()=>ie):ie}return x},"transform");return k}async subscribe(m){if(!l)throw new Error("Can not subscribe to a table without an audit log");g||ut({table:s,database:c,schemaDefined:u,attributes:E,audit:!0}),m||(m={});let T=!m.rawEvents,w=[],y=this,b=QI(Pe,this.getId()??null,function(N,L,k,P){try{let x=L.getValue?.(i,T),$=L.type;if(!x&&$==="patch"&&T){let ie=i.getEntry(N);ie?.version===L.version?x=ie.value:x=L.getValue?.(i,!0,k),$="put"}let z={id:N,localTime:k,value:x,version:L.version,type:$,beginTxn:P};w?w.push(z):this.send(z)}catch(x){xe.default.error?.(x)}},m.startTime||0,m),C=(async()=>{this.isCollection&&(b.includeDescendants=!0,m.onlyChildren&&(b.onlyChildren=!0)),m.supportsTransactions&&(b.supportsTransactions=!0);let N=this.getId(),L=m.previousCount;L>1e3&&(L=1e3);let k=m.startTime;if(this.isCollection){if(k){if(L)throw new Or.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:P,value:x}of l.getRange({start:k,exclusiveStart:!0,snapshot:!1})){let $=Ot(x);if($.tableId!==n)continue;let z=$.recordId;if(N==null||XY(N,z)){let ie=$.getValue(i,T,P);if(b.send({id:z,localTime:P,value:ie,version:$.version,type:$.type}),b.queue?.length>jY&&await b.waitForDrain()===!1)return}b.startTime=P}}else if(L){let P=[];for(let{key:x,value:$}of l.getRange({start:"z",end:!1,reverse:!0}))try{let z=Ot($);if(z.tableId!==n)continue;let ie=z.recordId;if(N==null||XY(N,ie)){let U=z.getValue(i,T,x);if(P.push({id:ie,localTime:x,value:U,version:z.version,type:z.type}),--L<=0)break}}catch(z){xe.default.error("Error getting history entry",x,z)}for(let x=P.length;x>0;)b.send(P[--x]);P[0]&&(b.startTime=P[0].localTime)}else if(!m.omitCurrent){for(let{key:P,value:x,version:$,localTime:z}of i.getRange({start:N??!1,end:N==null?void 0:[N,gl.MAXIMUM_KEY],versions:!0,snapshot:!1}))if(x&&(b.send({id:P,localTime:z,value:x,version:$,type:"put"}),b.queue?.length>jY&&await b.waitForDrain()===!1))return}}else{L&&!k&&(k=0);let P=this.#r?.localTime;if(P===WA&&(i.cache?.delete(N),this.#r=i.getEntry(N),xe.default.trace?.("re-retrieved record",P,this.#r?.localTime),P=this.#r?.localTime),xe.default.trace?.("Subscription from",k,"from",N,P),k<P){let x=[],$=P;do{let z=l.get($);if(z){m.omitCurrent=!0;let ie=Ot(z),U=ie.getValue(i,T,$);T&&(ie.type="put"),x.push({id:N,value:U,localTime:$,...ie}),$=ie.previousLocalTime}else break;L&&L--}while($>k&&L!==0);for(let z=x.length;z>0;)b.send(x[--z]);b.startTime=P}!m.omitCurrent&&this.doesExist()&&b.send({id:N,localTime:P,value:this.#e,version:this.#n,type:"put"})}for(let P of w)b.send(P);w=null})();return m.listener&&b.on("data",m.listener),b}static subscribeOnThisThread(m,T){return m===0||T?.crossThreads===!1}doesExist(){return!!(this.#e||this.#s)}publish(m,T){this._writePublish(m,T)}_writePublish(m,T){let w=Br(this.getContext()),y=this.getId()||null;y!=null&&Nr(y);let b=this.getContext();w.addWrite({key:y,store:i,entry:this.#r,nodeName:b?.nodeName,validate:a(()=>{b?.source||(w.checkOverloaded(),this.validate(m))},"validate"),before:Ce.publish?.bind(this,b,y,m),beforeIntermediate:me.publish?.bind(this,b,y,m),commit:a((C,N,L)=>{N===void 0&&R&&!g&&qo(),xe.default.trace?.(`Publishing message to id: ${y}, timestamp: ${new Date(C).toISOString()}`),A(y,N?.value??null,N,N?.version||C,0,!0,{user:b?.user,residencyId:T?.residencyId,expiresAt:b?.expiresAt,nodeId:T?.nodeId},"message",!1,m)},"commit")})}validate(m,T){let w,y=a((b,C,N)=>{if(C.type&&b!=null)if(T&&b.__op__&&(b=b.value),C.properties){typeof b!="object"&&(w||(w=[])).push(`Value ${ws(b)} in property ${N} must be an object${C.type?" ("+C.type+")":""}`);let L=C.properties;for(let k=0,P=L.length;k<P;k++){let x=L[k],$=y(b[x.name],x,N+"."+x.name);$&&(b[x.name]=$)}if(C.sealed&&b!=null&&typeof b=="object")for(let k in b)L.find(P=>P.name===k)||(w||(w=[])).push(`Property ${k} is not allowed within object in property ${N}`)}else switch(C.type){case"Int":(typeof b!="number"||b>>0!==b)&&(w||(w=[])).push(`Value ${ws(b)} in property ${N} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof b!="number"||!(Math.floor(b)===b&&Math.abs(b)<=9007199254740992))&&(w||(w=[])).push(`Value ${ws(b)} in property ${N} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof b!="number"&&(w||(w=[])).push(`Value ${ws(b)} in property ${N} must be a number`);break;case"ID":typeof b=="string"||b?.length>0&&b.every?.(L=>typeof L=="string")||(w||(w=[])).push(`Value ${ws(b)} in property ${N} must be a string, or an array of strings`);break;case"String":typeof b!="string"&&(w||(w=[])).push(`Value ${ws(b)} in property ${N} must be a string`);break;case"Boolean":typeof b!="boolean"&&(w||(w=[])).push(`Value ${ws(b)} in property ${N} must be a boolean`);break;case"Date":if(!(b instanceof Date)){if(typeof b=="string"||typeof b=="number")return new Date(b);(w||(w=[])).push(`Value ${ws(b)} in property ${N} must be a Date`)}break;case"BigInt":if(typeof b!="bigint"){if(typeof b=="string"||typeof b=="number")return BigInt(b);(w||(w=[])).push(`Value ${ws(b)} in property ${N} must be a bigint`)}break;case"Bytes":if(!(b instanceof Uint8Array)){if(typeof b=="string")return Buffer.from(b);(w||(w=[])).push(`Value ${ws(b)} in property ${N} must be a Buffer or Uint8Array`)}break;case"Blob":if(!(b instanceof mi)){if(typeof b=="string"&&(b=Buffer.from(b)),b instanceof Buffer)return createBlob(b,{type:"text/plain"});(w||(w=[])).push(`Value ${ws(b)} in property ${N} must be a Blob`)}break;case"array":if(Array.isArray(b)){if(C.elements)for(let L=0,k=b.length;L<k;L++){let P=b[L],x=y(P,C.elements,N+"[*]");x&&(b[L]=x)}}else(w||(w=[])).push(`Value ${ws(b)} in property ${N} must be an Array`);break}C.nullable===!1&&b==null&&(w||(w=[])).push(`Property ${N} is required (and not does not allow null values)`)},"validateValue");for(let b=0,C=E.length;b<C;b++){let N=E[b];if(!(N.relationship||N.computed)&&(!T||N.name in m)){let L=y(m[N.name],N,N.name);L&&(m[N.name]=L)}}if(d)for(let b in m)E.find(C=>C.name===b)||(w||(w=[])).push(`Property ${b} is not allowed`);if(w)throw new Or.ClientError(w.join(". "))}getUpdatedTime(){return this.#n}wasLoadedFromSource(){return v?!!this.#i:void 0}static async addAttributes(m){let T=E.slice(0);for(let w of m){if(!w.name)throw new Or.ClientError("Attribute name is required");if(w.name.match(/[`/]/))throw new Or.ClientError("Attribute names cannot include backticks or forward slashes");(0,tW.validateAttribute)(w.name),T.push(w)}return ut({table:s,database:c,schemaDefined:u,attributes:T}),Pe.indexingOperation}static async removeAttributes(m){let T=E.filter(w=>!m.includes(w.name));return ut({table:s,database:c,schemaDefined:u,attributes:T}),Pe.indexingOperation}static getSize(){let m=i.getStats();return(m.treeBranchPageCount+m.treeLeafPageCount+m.overflowPages)*m.pageSize}static getAuditSize(){let m=l?.getStats();return m&&(m.treeBranchPageCount+m.treeLeafPageCount+m.overflowPages)*m.pageSize}static getStorageStats(){let m=i.env.path,T=XS.default.statfsSync?.(m)??{};return{available:T.bavail*T.bsize,free:T.bfree*T.bsize,size:T.blocks*T.bsize}}static async getRecordCount(m){let T=i.getStats().entryCount,w=1e3/2,y=performance.now(),b=Math.floor(T/2),C=m?.exactCount,N=0,L=0,k;for(let{value:P}of i.getRange({start:!0,lazy:!0,snapshot:!1}))if(P!=null&&N++,L++,await xa(),!C&&L<b&&performance.now()-y>w){k=L;break}if(k){let P=N;N=0;for(let{value:ee}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:k,snapshot:!1}))ee!=null&&N++,await xa();let x=k*2,$=(N+P)/x,z=Math.pow((N-P+1)/k/2,2)+$*(1-$)/x,ie=Math.max(Math.sqrt(z)*T,1),U=Math.round($*T),ue=Math.max(U-1.96*ie,N+P),ae=Math.min(U+1.96*ie,T),fe=Math.pow(10,Math.round(Math.log10(ie)));return fe>U&&(fe=fe/10),N=Math.round(U/fe)*fe,{recordCount:N,estimatedRange:[Math.round(ue),Math.round(ae)]}}return{recordCount:N}}static updatedAttributes(){In=this.propertyResolvers={$id:a((m,T,w)=>({value:w.key}),"$id"),$updatedtime:a((m,T,w)=>w.version,"$updatedtime"),$record:a((m,T,w)=>w?{value:m}:m,"$record")};for(let m of this.attributes){m.resolve=null;let T=m.relationship,w=m.computed;if(T)if(m.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),w&&console.error("A relationship property is already computed and can not be combined with a computed function (the relationship will be given precedence)"),Pl=!0,T.to)m.elements?.definition?(In[m.name]=m.resolve=(y,b,C)=>{let N=y[T.from?T.from:t],L=m.elements.definition.tableClass;return C?$l({attribute:T.to,value:N},Br(b).getReadTxn(),!1,L,!1).asArray:L.search([{attribute:T.to,value:N}],b).asArray},m.set=()=>{throw new Error("Setting a one-to-many relationship property is not supported")},m.resolve.definition=m.elements.definition,T.from&&(m.resolve.from=T.from)):console.error(`The one-to-many/many-to-many relationship property "${m.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(T.from){let y=m.definition||m.elements?.definition;y?(In[m.name]=m.resolve=(b,C,N)=>{let L=b[T.from];if(L!==void 0){if(m.elements){let k,P=L?.map(x=>{let $=N?y.tableClass.primaryStore.getEntry(x,{transaction:Br(C).getReadTxn()}):y.tableClass.get(x,C);return $?.then&&(k=!0),$});return T.filterMissing?k?Promise.all(P).then(x=>x.filter(ZY)):P.filter(ZY):k?Promise.all(P):P}return N?y.tableClass.primaryStore.getEntry(L,{transaction:Br(C).getReadTxn()}):y.tableClass.get(L,C)}},m.set=(b,C)=>{if(Array.isArray(C)){let N=C.map(L=>L.getId?.()||L[y.tableClass.primaryKey]);b[T.from]=N}else{let N=C.getId?.()||C[y.tableClass.primaryKey];b[T.from]=N}},m.resolve.definition=m.definition||m.elements?.definition,m.resolve.from=T.from):console.error(`The relationship property "${m.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${m.name}" in table "${s}" must use either "from" or "to" arguments`);else w&&(typeof w.from=="function"&&this.setComputedAttribute(m.name,w.from),In[m.name]=m.resolve=(y,b,C)=>{let N=typeof w.from=="string"?y[w.from]:y,L=this.userResolvers[m.name];if(L)return L(N,b,C);xe.default.warn(`Computed attribute "${m.name}" does not have a function assigned to it. Please use setComputedAttribute('${m.name}', resolver) to assign a resolver function.`),this.userResolvers[m.name]=()=>{}})}Wm(this,this)}static setComputedAttribute(m,T){let w=fi(E,m);if(!w){console.error(`The attribute "${m}" does not exist in the table "${s}"`);return}if(!w.computed){console.error(`The attribute "${m}" is not defined as computed in the table "${s}"`);return}this.userResolvers[m]=T}static async deleteHistory(m=0,T=!1){let w;for(let{key:y,value:b}of l.getRange({start:0,end:m}))await xa(),Ot(b).tableId===n&&(w=jS(l,y,b));if(T)for(let y of i.getRange({start:0,versions:!0})){let{key:b,value:C,localTime:N}=y;await xa(),C===null&&N<m&&(w=dc(i,y))}await w}static async*getHistory(m=0,T=1/0){for(let{key:w,value:y}of l.getRange({start:m||1,end:T})){await xa();let b=Ot(y);b.tableId===n&&(yield{id:b.recordId,localTime:w,version:b.version,type:b.type,value:b.getValue(i,!0,w),user:b.user,operation:b.originatingOperation})}}static async getHistoryOfRecord(m){let T=[];if(m==null)throw new Error("An id is required");let w=i.getEntry(m);if(!w)return T;let y=w.localTime;if(!y)throw new Error("The entry does not have a local audit time");let b=0;do{await xa();let C=l.get(y);if(C){let N=Ot(C);T.push({id:N.recordId,localTime:y,version:N.version,type:N.type,value:N.getValue(i,!0,y),user:N.user}),y=N.previousLocalTime}else break}while(b<1e3&&y);return T.reverse()}static cleanup(){X?.remove()}}Pe.updatedAttributes();let Fd=Pe.prototype;return p&&Pe.setTTLExpiration(p/1e3),se&&Ul(),Pe;function rn(K,m,T){let w;for(let y in r){let b=r[y],C=b.isIndexing,N=In[y],L=T&&(N?N(T):T[y]),k=m&&(N?N(m):m[y]);if(L===k&&!C)continue;w=!0;let P=b.indexNulls,x=(0,Bh.getIndexedValues)(L,P),$=(0,Bh.getIndexedValues)(k,P);if($?.length>0){let z=new Set($);if(x=x?x.filter(ie=>{if(z.has(ie))z.delete(ie);else return!0}):[],$=Array.from(z),($.length>0||x.length>0)&&WY){let ie=$.concat(x).map(U=>({key:U,value:K}));b.prefetch(ie,JY)}for(let ie=0,U=$.length;ie<U;ie++)b.remove($[ie],K)}else x?.length>0&&WY&&b.prefetch(x.map(z=>({key:z,value:K})),JY);if(x)for(let z=0,ie=x.length;z<ie;z++)b.put(x[z],K)}return w}a(rn,"updateIndices");function Nr(K){switch(typeof K){case"number":return!0;case"string":if(K.length<659)return!0;if(K.length>QY)throw new Error("Primary key size is too large: "+K.length);break;case"object":if(K===null)throw new Error("Invalid primary key of null");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,gl.writeKey)(K,Fpe,0)>QY)throw new Error("Primary key size is too large: "+K.length);return!0}a(Nr,"checkValidId");function Ll(K,m,T,w,y){if(Pe.getResidencyById&&T.ensureLoaded&&m?.replicateFrom!==!1){let C=xl(Pe.getResidencyById(K));if(C&&!C.includes(server.hostname)&&O)return O({key:K,residency:C}).then(y)}let b=a(()=>{if(m?.transaction?.stale&&(m.transaction.stale=!1),T.transaction?.isDone)return y(null,K);let C=i.getEntry(K,T);return C?.residencyId&&C.metadataFlags&Dn&&O&&T.ensureLoaded&&m?.replicateFrom!==!1?O(C).then(N=>y(N,K),N=>(xe.default.error?.("Error loading remote record",K,C,T,N),y(null,K))):(C&&m&&(C?.version>(m.lastModified||0)&&(m.lastModified=C.version),C?.localTime&&!m.lastRefreshed&&(m.lastRefreshed=C.localTime)),y(C,K))},"whenPrefetched");return w?b():pe>0?(pe--,b()):new Promise((C,N)=>{pe===0?(pe--,i.prefetch([K],()=>{L(),k()})):(ne.push(K),Q.push(k),ne.length>hp&&(pe--,L()));function L(){if(ne.length>0){let P=Q;i.prefetch(ne,()=>{pe===-1?L():pe++;for(let x of P)x()}),ne=[],Q=[],Re>2&&Re--}else pe=Re,Re<kd&&Re++}a(L,"prefetch");function k(){try{C(b())}catch(P){N(P)}}a(k,"load")})}a(Ll,"loadLocalRecord");function Gd(K){if(!K?.role)return;let m=K.role.permission;if(m.super_user)return Gpe;let T=m[c],w,y=T?.tables;if(y)return y[s];if(c==="data"&&(w=m[s])&&!w.tables)return w}a(Gd,"getTablePermissions");function nn(K,m,T,w){if(v){let y=!1;if(T.noCache?y=!0:(m?(!m.value||m.metadataFlags&(Dn|jo)||m.expiresAt!=null&&m.expiresAt<Date.now())&&(y=!0):y=!0,Yn(!y,"cache-hit",s)),y){let b=pp(K,m,T).then(C=>(C?.value&&C?.value.getRecord?.()&&xe.default.error?.("Can not assign a record that is already a resource"),T&&(C?.version>(T.lastModified||0)&&(T.lastModified=C.version),T.lastRefreshed=Date.now()),C));if(T?.onlyIfCached||m?.value&&w?.allowStaleWhileRevalidate?.(m,K)){if(b.catch(C=>xe.default.warn?.(C)),T?.onlyIfCached&&!w.doesExist())throw new Or.ServerError("Entry is not cached",504);return}else return b}}else if(m?.value&&m.expiresAt!=null&&m.expiresAt<Date.now())return Pe.evict(m.key,m.value,m.version),m.value=null,{then(y){return y(m)}}}a(nn,"ensureLoadedFromSource");function Br(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 T=m.next;if(!T)return m=m.next=new tc,m.lmdbDb=i,m;m=T}while(!0)}else return new xp}a(Br,"txnForContext");function Ml(K,m,T){if(!K)return;let w=K.value||i.getEntry(K.key)?.value;if(typeof m=="object"){let b=In,C=w;for(let N=0,L=m.length;N<L;N++){let k=m[N],P=b?.[k];C=P&&C?P(C,T,!0)?.value:C?.[k],b=P?.definition?.tableClass?.propertyResolvers}return C}let y=In[m];return y?y(w,T):w[m]}a(Ml,"getAttributeValue");function vl(K,m,T,w,y){let b=y?.length,C={transaction:w,lazy:b>0||typeof m=="string"||m?.length<4,alwaysPrefetch:!0},N;function L(k,P){let x=k?.value;if(!x)return Ba.SKIP;for(let $=0;$<b;$++)if(!N?.includes($)&&!y[$](x,k))return Ba.SKIP;return P!==void 0&&(k.key=P),k}if(a(L,"processEntry"),b>0||!K.hasEntries){let k=K.map(P=>{if(N=null,typeof P=="object"&&P?.key!==void 0)return b>0?L(P):P;if(P==null)return Ba.SKIP;for(let x=0;x<b;x++){let z=y[x].idFilter;if(z){if(!z(P))return Ba.SKIP;N||(N=[]),N.push(x)}}return Ll(P,T,C,!1,L)});return Array.isArray(K)&&(k=k.filter(P=>P!==Ba.SKIP)),k.hasEntries=!0,k}return K}a(vl,"transformToEntries");function Fo(K,m,T=server.replication?.getThisNodeId(l)){if(K<=m?.version){if(m?.version===K&&T!==void 0){let w=server.replication?.exportIdMapping(l),y=m.localTime,b=y&&l.get(y);if(b){let C,N,L=Ot(b);for(let k in w)w[k]===T&&(C=k),w[k]===L.nodeId&&(N=k);if(C>N)return 1;if(C===N)return 0}}return-1}return 1}a(Fo,"precedesExistingVersion");async function pp(K,m,T){let w=m?.metadataFlags,y=m?.version,b,C;if(!i.attemptLock(K,y,()=>{clearTimeout(C);let P=i.getEntry(K);!P||!P.value||P.metadataFlags&(Dn|jo)?b(pp(K,i.getEntry(K),T)):b(P)}))return new Promise(P=>{b=P,C=setTimeout(()=>{i.unlock(K,y)},Hpe)});let N=m?.value,L={requestContext:T,replacingRecord:N,replacingEntry:m,replacingVersion:y,noCacheStore:!1,source:null,resourceCache:T?.resourceCache},k=T?.responseHeaders;return new Promise((P,x)=>{let $;JI(bt(L,async z=>{let ie=performance.now(),U,ue,ae;try{for(let _e of Pe.sources)if(_e.get&&(!_e.get.reliesOnPrototype||_e.prototype.get)){if(_e.available?.(m)===!1)continue;if(L.source=_e,U=await _e.get(K,L),U)break}ae=w&Dn;let ee=L.lastModified||ae&&y;ue=ae||ee>y||!N,ee||(ee=(0,Bh.getNextMonotonicTime)());let W=performance.now()-ie;if(nr(W,"cache-resolution",s,null,"success"),k&&oE(k,"Server-Timing",`cache-resolve;dur=${W.toFixed(2)}`,!0),z.timestamp=ee,p&&L.expiresAt==null&&(L.expiresAt=Date.now()+p),U){if(typeof U!="object")throw new Error("Only objects can be cached and stored in tables");if(U.status>0&&U.headers)if(U.status>=300)if(U.status===304)U=N,ee=y;else throw new Or.ServerError(U.body||"Error from source",U.status);else U=U.body;typeof U.toJSON=="function"&&(U=U.toJSON()),t&&U[t]!==K&&(U[t]=K)}$=!0,P({key:K,version:ee,value:U})}catch(ee){ee.message+=` while resolving record ${K} for ${s}`,N&&((ee.code==="ECONNRESET"||ee.code==="ECONNREFUSED"||ee.code==="EAI_AGAIN")&&!T?.mustRevalidate||T?.staleIfError&&(ee.statusCode===500||ee.statusCode===502||ee.statusCode===503||ee.statusCode===504))?(P({key:K,version:y,value:N}),xe.default.trace?.(ee.message,"(returned stale record)")):x(ee);let W=performance.now()-ie;nr(W,"cache-resolution",s,null,"fail"),k&&oE(k,"Server-Timing",`cache-resolve;dur=${W.toFixed(2)}`,!0),L.transaction.abort();return}if(T?.noCacheStore||L.noCacheStore){L.transaction.abort();return}Br(L).addWrite({key:K,store:i,entry:m,nodeName:"source",commit:a((ee,W)=>{if(W?.version!==y)return;let _e=rn(K,N,U);U?(me.put?.(L,K,U),xe.default.trace?.(`Writing resolved record from source with id: ${K}, timestamp: ${new Date(ee).toISOString()}`),A(K,U,W,ee,0,g&&ue||null,{user:L?.user,expiresAt:L.expiresAt},"put",!!ae)):W&&(me.delete?.(L,K),xe.default.trace?.(`Deleting resolved record from source with id: ${K}, timestamp: ${new Date(ee).toISOString()}`),g||R?A(K,null,W,ee,0,g&&ue||null,{user:L?.user},"delete",!!ae):dc(i,W,y))},"commit")})}),()=>{i.unlock(K,y)},z=>{i.unlock(K,y),$&&xe.default.error?.("Error committing cache update",z)})})}a(pp,"getFromSource");function Go(K){if(!K||K.user?.role?.permission?.super_user)return!0;if(K.replicateTo)throw new Or.ClientError("Can not specify replication parameters without super user permissions",403);if(K.replicatedConfirmation)throw new Or.ClientError("Can not specify replication confirmation without super user permissions",403);return!0}a(Go,"checkContextPermissions");function qo(K){let m=!1;if(K&&(K-ct>1&&(m=!0),ct=K),!(Jt===Ar&&!m)&&(Ar=Jt,(0,ml.getWorkerIndex)()===(0,ml.getWorkerCount)()-1))return is&&clearTimeout(is),Jt?new Promise(T=>{let w=new Date;w.setMonth(0),w.setDate(1),w.setHours(0),w.setMinutes(0),w.setSeconds(0);let y=Jt/(1+ct),b=m?Date.now():Math.ceil((Date.now()-w.getTime())/y)*y+w.getTime(),C=a(N=>{xe.default.trace?.(`Scheduled next cleanup scan at ${new Date(N)}`),is=setTimeout(()=>G=G.then(async()=>{if(C(Math.max(N+Jt,Date.now())),i.rootStore.status!=="open"){clearTimeout(is);return}let L=50,k=new Array(L),P=0,x=Math.pow(ct,8)*(El.get(B.STORAGE_RECLAMATION_EVICTIONFACTOR)??1e5),$=S/Math.pow(Math.max(ct,1),4);xe.default.info?.(`Starting cleanup scan for ${s}, evict threshold ${x}, adjusted eviction ${$}ms`);function z(ie,U,ue,ae){let fe=ie+$-Date.now();if(fe<0)return!0;if(ct){let ee=i.lastSize;return ue&vn&&Fh(ae,W=>{W.size&&(ee+=W.size)}),xe.default.trace?.(`shouldEvict adjusted ${fe} ${ee}, ${fe*(ie-U)/ee} < ${x}`),fe*(ie-U)/ee<x}return!1}a(z,"shouldEvict");try{let ie=0;for(let U of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let{key:ue,value:ae,version:fe,expiresAt:ee,metadataFlags:W}=U,_e;ae===null&&!g&&fe+Bpe<Date.now()?_e=dc(i,U,fe):ee!=null&&z(ee,fe,W,ae)&&(_e=Pe.evict(ue,ae,fe),ie++),_e&&(await k[P],k[P]=_e.catch(Ae=>{xe.default.error?.("Cleanup error",Ae)}),++P>=L&&(P=0)),await xa()}xe.default.info?.(`Finished cleanup scan for ${s}, evicted ${ie} entries`)}catch(ie){xe.default.warn?.(`Error in cleanup scan for ${s}:`,ie)}T(void 0),ct=0}),Math.min(N-Date.now(),2147483647)).unref()},"startNextTimer");C(b)}):void 0}a(qo,"scheduleCleanup");function qd(){X=l?.addDeleteRemovalCallback(n,i,(K,m)=>{i.remove(K,m)})}a(qd,"addDeleteRemoval");function Ul(){(0,ml.getWorkerIndex)()===0&&setInterval(async()=>{if(!Dl){Dl=!0;try{let K=se.name,m=r[K];if(!m)throw new Error(`expiresAt attribute ${se} must be indexed`);for(let T of m.getRange({start:!0,values:!1,end:Date.now(),snapshot:!1})){for(let w of m.getValues(T)){let y=i.getEntry(w);y?.value?y.value[K]<Date.now()&&Pe.evict(w,y.value,y.version):i.ifVersion(w,y?.version,()=>m.remove(T,w))}await xa()}}catch(K){xe.default.error?.("Error in evicting old records",K)}finally{Dl=!1}}},xpe).unref()}a(Ul,"runRecordExpirationEviction");function xl(K){if(K!=null){if(Array.isArray(K))return K;if(typeof K=="number"){if(K>=65536)throw new Error(`Shard id ${K} must be below 65536`);let m=server.shards.get?.(K);if(m)return m.map(T=>T.name);throw new Error(`Shard ${K} is not defined`)}throw new Error(`Shard or residency list ${K} is not a valid type, must be a shard number or residency list of node hostnames`)}}a(xl,"residencyFromFunction");function Bl(K){if(K){let m=K.join(","),T=f.get([Symbol.for("residency_by_set"),m]);return T||(f.put([Symbol.for("residency_by_set"),m],T=Math.floor(Math.random()*2147418112)+65535),f.put([Symbol.for("residency_by_id"),T],K),T)}}a(Bl,"getResidencyId")}function jI(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 JY(){}function qpe(e){rW=e}function ZS(e,t){let r=t?.type;if(e===null)return e;if(e===""&&r&&r!=="String"&&r!=="Any")return null;try{switch(r){case"Int":case"Long":if(e[0]==="$")return JS(parseInt(e.slice(1),36));if(e==="null")return null;if(!/^-?[0-9]+$/.test(e)&&!(e instanceof Date))throw new SyntaxError;return JS(+e);case"Float":return e==="null"?null:JS(+e);case"BigInt":return e==="null"?null:BigInt(e);case"Boolean":return e==="true"?!0:e==="false"?!1:e;case"Date":if(isNaN(e)){if(e==="null")return null;$pe.test(e)||(e+="Z");let n=new Date(e);return JS(n.getTime()),n}return new Date(+e);case void 0:case"Any":return(0,eT.autoCast)(e);default:return e}}catch(n){throw n.message=`Invalid value for attribute ${t.name}: "${e}", expecting ${r}`,n.statusCode=400,n}}function JS(e){if(isNaN(e))throw new SyntaxError;return e}function XY(e,t){if(e==null)return!0;if(!Array.isArray(t))return e===t||t.startsWith?.(e);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 JI(e,t,r){return e?.then?e.then(t,r):t(e)}function ZY(e){return e!=null}function ws(e){try{return JSON.stringify(e)}catch{return e}}function Vpe(e){let t=process.pid;return e.env.readerList().slice(1).some(r=>+r.match(/\d+/)?.[0]!=t)}var Ba,Bh,eW,tW,El,Or,Hh,kh,xe,gl,ml,eT,XS,Upe,rW,xpe,Bpe,WY,Hpe,zY,kpe,Dn,jo,Fpe,QY,jY,Gpe,oMe,$pe,xa,uf=be(()=>{H();Ba=require("lmdb"),Bh=M(an()),eW=require("lodash"),tW=M(nf());Jo();Bp();El=M(ce());gO();Or=M(he()),Hh=M(io()),kh=M(Gs());Me();lf();xe=M(hi());Vy();rc();gl=require("ordered-binary"),ml=M(rt());Ji();eT=M(oe());Jl();Ii();$m();p_();XS=M(require("node:fs"));cs();YS();Upe=new Uint8Array(9);Upe[8]=192;xpe=6e4,Bpe=864e5;El.initSync();WY=El.get(B.STORAGE_PREFETCHWRITES),Hpe=1e4,zY=1,kpe=2,Dn=1,jo=8,Fpe=Buffer.allocUnsafeSlow(8192),QY=1978,jY=100,Gpe={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},oMe=(0,eT.convertToMS)(El.get(B.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(tT,"makeTable");a(jI,"attributesAsObject");a(JY,"noop");a(qpe,"setServerUtilities");$pe=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(ZS,"coerceType");a(JS,"rejectNaN");a(XY,"isDescendantId");xa=a(()=>new Promise(setImmediate),"rest");a(JI,"when");a(ZY,"exists");a(ws,"stringify");a(Vpe,"hasOtherProcesses")});var st={};ve(st,{database:()=>fu,database_envs:()=>No,databases:()=>qe,dropDatabase:()=>Qy,dropTableMeta:()=>Qpe,getDatabases:()=>Je,getDefaultCompression:()=>Mg,getTables:()=>Kpe,onRemovedDB:()=>U_,onUpdatedTable:()=>Yc,readMetaDb:()=>Gh,resetDatabases:()=>ed,table:()=>ut,tables:()=>Kn});function Kpe(){return iT||Je(),Kn||{}}function Je(){if(iT)return qe;iT=!0,wd=new Map;let e=(0,Qt.getHdbBasePath)()&&(0,Pt.join)((0,Qt.getHdbBasePath)(),Za),t=(0,Qt.get)(B.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,Qt.get)(B.STORAGE_PATH)||e&&((0,Zn.existsSync)(e)?e:(0,Pt.join)((0,Qt.getHdbBasePath)(),Ap)),!e)return;if((0,Zn.existsSync)(e))for(let n of(0,Zn.readdirSync)(e,{withFileTypes:!0})){let s=(0,Pt.basename)(n.name,".mdb");n.isFile()&&(0,Pt.extname)(n.name).toLowerCase()===".mdb"&&!t[s]?.path&&Gh((0,Pt.join)(e,n.name),null,s)}if((0,Zn.existsSync)((0,Nd.getBaseSchemaPath)())){for(let n of(0,Zn.readdirSync)((0,Nd.getBaseSchemaPath)(),{withFileTypes:!0}))if(!n.isFile()){let s=(0,Pt.join)((0,Nd.getBaseSchemaPath)(),n.name),i=(0,Pt.join)((0,Nd.getTransactionAuditStoreBasePath)(),n.name);for(let o of(0,Zn.readdirSync)(s,{withFileTypes:!0}))if(o.isFile()&&(0,Pt.extname)(o.name).toLowerCase()===".mdb"){let c=(0,Pt.join)(i,o.name);Gh((0,Pt.join)(s,o.name),(0,Pt.basename)(o.name,".mdb"),n.name,c,!0)}}}if(t)for(let n in t){let s=t[n],i=s.path;if((0,Zn.existsSync)(i))for(let c of(0,Zn.readdirSync)(i,{withFileTypes:!0}))c.isFile()&&(0,Pt.extname)(c.name).toLowerCase()===".mdb"&&Gh((0,Pt.join)(i,c.name),(0,Pt.basename)(c.name,".mdb"),n);let o=s.tables;if(o)for(let c in o){let l=o[c],u=(0,Pt.join)(l.path,(0,Pt.basename)(c+".mdb"));(0,Zn.existsSync)(u)&&Gh(u,c,n,null,!0)}}for(let n in qe){let s=wd.get(n);if(s){let i=qe[n];n.includes("delete")&&kt.trace(`defined tables ${Array.from(s.keys())}`);for(let o in i)s.has(o)||(kt.trace(`delete table class ${o}`),delete i[o])}else if(delete qe[n],n==="data"){for(let i in Kn)delete Kn[i];delete Kn[oT]}}let r=["hdb_temp","hdb_certificate","hdb_analytics","hdb_raw_analytics","hdb_session_will","hdb_job","hdb_license","hdb_info"];if(qe.system)for(let n of r)qe.system[n]&&(qe.system[n].replicate=!1);return wd=null,qe}function ed(){iT=!1;for(let[,e]of No)e.needsDeletion=!0;Je();for(let[e,t]of No)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),No.delete(e),delete qe[t.databaseName],$h.forEach(r=>r(t.databaseName)));return qe}function Gh(e,t,r=eC,n,s){let i=new XI.default(e,!1);try{let o=No.get(e);o?o.needsDeletion=!1:(o=(0,Id.open)(i),No.set(e,o));let c=new Sl.default(!1),l=o.dbisDb||(o.dbisDb=o.openDB(rT.INTERNAL_DBIS_NAME,c)),u=o.auditStore;u||(n?(0,Zn.existsSync)(n)&&(i.path=n,u=(0,Id.open)(i),u.isLegacy=!0):u=QS(o));let f=oW(r),d=f[oT],h=new Map;for(let{key:_,value:p}of l.getRange({start:!1})){let[S,g]=_.toString().split("/");g===""?g=p.name:g||(g=S,S=t,p.name||(p.name=g,p.indexed=!p.is_hash_attribute)),d?.add(S);let R=h.get(S);R||h.set(S,R={attributes:[]}),(g==null||p.is_hash_attribute)&&(R.primary=p),g!=null&&R.attributes.push(p),Object.defineProperty(p,"key",{value:_,configurable:!0})}for(let[_,p]of h){let{attributes:S,primary:g}=p;if(!g){for(let Q of S)if(Q.is_hash_attribute||Q.isPrimaryKey){g=Q;break}if(!g){kt.warn(`Unable to find a primary key attribute on table ${_}, with attributes: ${JSON.stringify(S)}`);continue}}let R=f[_],E={},A=[],O,v,F=typeof g.audit=="boolean"?g.audit:(0,Qt.get)(B.LOGGING_AUDITLOG),G=g.trackDeletes,Y=g.expiration,te=g.eviction,se=g.sealed,X=g.splitSegments,ne=g.replicate;if(R)E=R.indices,A=R.attributes,R.schemaVersion++;else{O=g.tableId,O?O>=(l.get(Od)||0)&&(l.putSync(Od,O+1),kt.info(`Updating next table id (it was out of sync) to ${O+1} for ${_}`)):(g.tableId=O=l.get(Od),O||(O=1),kt.debug("Table {table_name} missing an id, assigning {table_id}"),l.putSync(Od,O+1),l.putSync(g.key,g));let Q=new Sl.default(!g.is_hash_attribute,g.is_hash_attribute);if(Q.compression=g.compression,Q.compression){let pe=(0,Qt.get)(B.STORAGE_COMPRESSION_THRESHOLD)||iW;Q.compression.threshold=pe}v=rm(o.openDB(g.key,Q),o),o.databaseName=r,v.tableId=O}for(let Q of S){Q.attribute=Q.name;try{if(!Q.is_hash_attribute&&(Q.indexed||Q.attribute&&!Q.name)){if(!E[Q.name]){let Re=new Sl.default(!Q.is_hash_attribute,Q.is_hash_attribute);E[Q.name]=o.openDB(Q.key,Re),E[Q.name].indexNulls=Q.indexNulls}let pe=A.find(Re=>Re.name===Q.name);pe?A.splice(A.indexOf(pe),1,Q):A.push(Q)}}catch(pe){kt.error("Error trying to update attribute",Q,A,E,pe)}}if(!R){R=aW(f,_,tT({primaryStore:v,auditStore:u,audit:F,sealed:se,splitSegments:X,replicate:ne,expirationMS:Y&&Y*1e3,evictionMS:te&&te*1e3,trackDeletes:G,tableName:_,tableId:O,primaryKey:g.name,databasePath:s?r+"/"+_:r,databaseName:r,indices:E,attributes:S,schemaDefined:g.schemaDefined,dbisDB:l})),R.schemaVersion=1;for(let Q of qh)Q(R)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function oW(e){let t=qe[e];if(t||(e==="data"?t=qe[e]=Kn:e==="system"?Object.defineProperty(qe,"system",{value:t=Object.create(null),configurable:!0}):t=qe[e]=Object.create(null)),wd&&!wd.has(e)){let r=new Set;t[oT]=r,wd.set(e,r)}return t}function aW(e,t,r){return e[t]=r,r}function fu({database:e,table:t}){e||(e=eC),Je();let r=oW(e),n=(0,Pt.join)((0,Qt.getHdbBasePath)(),Za),s=(0,Qt.get)(B.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,Qt.get)(B.STORAGE_PATH)||((0,Zn.existsSync)(n)?n:(0,Pt.join)((0,Qt.getHdbBasePath)(),Ap));let o=(0,Pt.join)(n,(i?t:e)+".mdb"),c=No.get(o);if(!c||c.status==="closed"){let l=new XI.default(o,!1);c=(0,Id.open)(l),No.set(o,c)}return c.auditStore||(c.auditStore=QS(c)),c}async function Qy(e){if(!qe[e])throw new Error("Schema does not exist");let t=qe[e],r;for(let n in t)r=t[n].primaryStore.rootStore,No.delete(r.path),r.status==="open"&&(await r.close(),await Vh.remove(r.path));if(r||(r=fu({database:e,table:null}),r.status==="open"&&(await r.close(),await Vh.remove(r.path))),e==="data"){for(let n in Kn)delete Kn[n];delete Kn[oT]}delete qe[e],$h.forEach(n=>n(e)),await tC(r)}function ut(e){let{table:t,database:r,expiration:n,eviction:s,scanInterval:i,attributes:o,audit:c,sealed:l,splitSegments:u,replicate:f,trackDeletes:d,schemaDefined:h,origin:_}=e;r||(r=eC);let p=fu({database:r,table:t}),S=qe[r];kt.trace(`Defining ${t} in ${r}`);let g=S?.[t];if(p.status==="closed")throw new Error(`Can not use a closed data store for ${t}`);let R,E,A;h==null&&(h=!0);let O=new Sl.default(!1);for(let X of o)X.attribute&&!X.name?(X.name=X.attribute,X.indexed=!0):X.attribute=X.name,X.expiresAt&&(X.indexed=!0);let v,F;if(g){if(R=g.primaryKey,g.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${t} class`);u==null&&(u=g.splitSegments),g.attributes.splice(0,g.attributes.length,...o)}else{let X=p.auditStore;E=o.find(Re=>Re.isPrimaryKey)||{},R=E.name,E.is_hash_attribute=E.isPrimaryKey=!0,E.schemaDefined=h,E.compression=Mg(),d&&(E.trackDeletes=!0),c=E.audit=typeof c=="boolean"?c:(0,Qt.get)(B.LOGGING_AUDITLOG),n&&(E.expiration=n),s&&(E.eviction=s),u??=!1,E.splitSegments=u,typeof l=="boolean"&&(E.sealed=l),typeof f=="boolean"&&(E.replicate=f),_&&(E.origins?E.origins.includes(_)||E.origins.push(_):E.origins=[_]),kt.trace(`${t} table loading, opening primary store`);let ne=new Sl.default(!1,!0);ne.compression=E.compression;let Q=t+"/";if(A=p.dbisDb=p.openDB(rT.INTERNAL_DBIS_NAME,O),se(),A.get(Q))return F&&F(),ed(),ut(e);let pe=rm(p.openDB(Q,ne),p);p.databaseName=r,pe.tableId=A.get(Od),kt.trace(`Assigning new table id ${pe.tableId} for ${t}`),pe.tableId||(pe.tableId=1),A.put(Od,pe.tableId+1),E.tableId=pe.tableId,g=aW(S,t,tT({primaryStore:pe,auditStore:X,audit:c,sealed:l,splitSegments:u,replicate:f,trackDeletes:d,expirationMS:n&&n*1e3,evictionMS:s&&s*1e3,primaryKey:R,tableName:t,tableId:pe.tableId,databasePath:r,databaseName:r,indices:{},attributes:o,schemaDefined:h,dbisDB:A})),g.schemaVersion=1,v=!0,A.put(Q,E)}let G=g.indices;A=A||(p.dbisDb=p.openDB(rT.INTERNAL_DBIS_NAME,O)),g.dbisDB=A;let Y=[];for(let{key:X,value:ne}of A.getRange({start:!0})){let[Q,pe]=X.toString().split("/");if(pe===""&&(pe=ne.name),pe){if(Q!==t)continue}else continue;let Re=o.find(me=>me.name===pe),Ce=!Re?.indexed&&ne.indexed&&!ne.isPrimaryKey;if((!Re||Ce)&&(se(),v=!0,Re||A.remove(X),Ce)){let me=g.indices[Q];me&&Y.push(me)}}let te=[];try{for(let X of o||[]){if((X.relationship||X.computed)&&(v=!0,X.relationship))continue;let ne=t+"/"+(X.name||"");Object.defineProperty(X,"key",{value:ne,configurable:!0});let Q=A.get(ne);if(X.isPrimaryKey){if(Q=Q||A.get(ne=t+"/")||{},c!==void 0&&c!==g.audit||l!==void 0&&l!==g.sealed||f!==void 0&&f!==g.replicate||(+n||void 0)!==(+Q.expiration||void 0)||(+s||void 0)!==(+Q.eviction||void 0)){let Re={...Q};typeof c=="boolean"&&(c&&g.enableAuditing(c),Re.audit=c),n&&(Re.expiration=+n),s&&(Re.eviction=+s),l!==void 0&&(Re.sealed=l),f!==void 0&&(Re.replicate=f),v=!0,se(),A.put(ne,Re)}continue}Q?.attribute&&!Q.name&&(Q.indexed=!0);let pe=!Q||Q.type!==X.type||Q.indexed!==X.indexed||Q.nullable!==X.nullable||Q.version!==X.version||JSON.stringify(Q.properties)!==JSON.stringify(X.properties)||JSON.stringify(Q.elements)!==JSON.stringify(X.elements);if(X.indexed){let Re=new Sl.default(!0,!1),Ce=p.openDB(ne,Re);(pe||Q.indexingPID&&Q.indexingPID!==process.pid||Q.restartNumber<Kh.workerData?.restartNumber)&&(v=!0,se(),Q=A.get(ne),(pe||Q.indexingPID&&Q.indexingPID!==process.pid||Q.restartNumber<Kh.workerData?.restartNumber)&&(v=!0,X.indexNulls===void 0&&(X.indexNulls=!0),g.primaryStore.getStats().entryCount>0&&(X.lastIndexedKey=Q?.lastIndexedKey??void 0,X.indexingPID=process.pid,Ce.isIndexing=!0,Object.defineProperty(X,"dbi",{value:Ce}),te.push(X))),A.put(ne,X)),Q?.indexNulls&&X.indexNulls===void 0&&(X.indexNulls=!0),Ce.indexNulls=X.indexNulls,G[X.name]=Ce}else pe&&(v=!0,se(),A.put(ne,X))}}finally{F&&F()}if(v&&(g.schemaVersion++,g.updatedAttributes()),kt.trace(`${t} table loading, running index`),te.length>0||Y.length>0?g.indexingOperation=zpe(g,te,Y):v&&nT.signalSchemaChange(new sT.SchemaEventMsg(process.pid,"schema-change",g.databaseName,g.tableName)),g.origin=_,v)for(let X of qh)X(g,_!=="cluster");return(n||s||i)&&g.setTTLExpiration({expiration:n,eviction:s,scanInterval:i}),kt.trace(`${t} table loaded`),g;function se(){F||p.transactionSync(()=>({then(X){F=X}}))}a(se,"startTxn")}async function zpe(e,t,r){try{kt.info(`Indexing ${e.tableName} attributes`,t);let n=e.schemaVersion;await nT.signalSchemaChange(new sT.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let u of r)s=u.drop();let i,o={},c=0,l=t.length;if(await new Promise(u=>setImmediate(u)),l>0){let u;for(let d of t)(0,Id.compareKeys)(d.lastIndexedKey,u)<0&&(u=d.lastIndexedKey),d.lastIndexedKey==null&&d.dbi.clearAsync();let f=0;for(let{key:d,value:h,version:_}of e.primaryStore.getRange({start:u,lazy:l<4,versions:!0,snapshot:!1}))if(h){if(f++,s=e.primaryStore.ifVersion(d,_,()=>{for(let p=0;p<l;p++){let S=t[p],g=S.name;try{let R=S.resolve,E=h&&(R?R(h):h[g]),A=(0,nW.getIndexedValues)(E);if(A)for(let O=0,v=A.length;O<v;O++)S.dbi.put(A[O],d)}catch(R){o[g]||(o[g]=!0,kt.error(`Error indexing attribute ${g}`,R))}}}),s.then(()=>f--,p=>{f--,kt.error(p)}),Kh.workerData&&Kh.workerData.restartNumber!==sW.restartNumber&&(i=!0),++c%100===0||i){for(let p of t)p.lastIndexedKey=d,e.dbisDB.put(p.key,p);if(i)return}f>Ype?await s:f>Wpe&&await new Promise(p=>setImmediate(p))}for(let d of t)delete d.lastIndexedKey,delete d.indexingPID,d.dbi.isIndexing=!1,s=e.dbisDB.put(d.key,d)}await s,await nT.signalSchemaChange(new sT.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName)),kt.info(`Finished indexing ${e.tableName} attributes`,t)}catch(n){kt.error("Error in indexing",n)}}function Qpe({table:e,database:t}){let r=fu({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 Yc(e){return qh.push(e),{remove(){let t=qh.indexOf(e);t>-1&&qh.splice(t,1)}}}function U_(e){return $h.push(e),{remove(){let t=$h.indexOf(e);t>-1&&$h.splice(t,1)}}}function Mg(){let e=(0,Qt.get)(B.STORAGE_COMPRESSION),t=(0,Qt.get)(B.STORAGE_COMPRESSION_DICTIONARY),r=(0,Qt.get)(B.STORAGE_COMPRESSION_THRESHOLD)||iW,n={startingOffset:32};return t&&(n.dictionary=Vh.readFileSync(t)),r&&(n.threshold=r),e&&n}var Qt,rT,Id,Pt,Zn,Nd,Sl,XI,Vh,ZI,nW,nT,sT,Kh,kt,sW,eC,oT,iW,Kn,qe,Od,qh,$h,iT,No,wd,Ype,Wpe,Me=be(()=>{Qt=M(ce()),rT=M(vt()),Id=require("lmdb"),Pt=require("path"),Zn=require("fs"),Nd=M(gt());uf();Sl=M(yf()),XI=M(bf());H();Vh=M(require("fs-extra")),ZI=M(ci()),nW=M(an()),nT=M(io()),sT=M(Gs()),Kh=require("worker_threads"),kt=M(j()),sW=M(rt());Ji();Jl();cs();eC="data",oT=Symbol("defined-tables"),iW=((0,Qt.get)(B.STORAGE_PAGESIZE)||4096)-60;(0,Qt.initSync)();Kn=Object.create(null),qe=Object.create(null);(0,ZI._assignPackageExport)("databases",qe);(0,ZI._assignPackageExport)("tables",Kn);Od=Symbol.for("next-table-id"),qh=[],$h=[],No=new Map;a(Kpe,"getTables");a(Je,"getDatabases");a(ed,"resetDatabases");a(Gh,"readMetaDb");a(oW,"ensureDB");a(aW,"setTable");a(fu,"database");a(Qy,"dropDatabase");a(ut,"table");Ype=1e3,Wpe=10;a(zpe,"runIndexing");a(Qpe,"dropTableMeta");a(Yc,"onUpdatedTable");a(U_,"onRemovedDB");a(Mg,"getDefaultCompression")});var oe=I((EMe,AW)=>{"use strict";var Ha=require("path"),fW=require("fs-extra"),On=j(),cW=require("fs-extra"),aT=require("os"),jpe=require("net"),Jpe=require("recursive-iterator"),Sr=(H(),D(q)),{PACKAGE_ROOT:Xpe}=Et(),Zpe=aA(),lW=require("papaparse"),cT=require("moment"),{inspect:eme}=require("util"),uW=require("is-number"),mMe=require("lodash"),tme=require("minimist"),rme=require("https"),nme=require("http"),{hdb_errors:lT}=he(),sme=/^((\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)))$/,_W=require("util").promisify(setTimeout),ime=100,ome=5,ame="",cme=4,dW={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};AW.exports={isEmpty:es,isEmptyOrZeroLength:Hi,arrayHasEmptyValues:dme,arrayHasEmptyOrZeroLengthValues:fme,buildFolderPath:_me,isBoolean:hW,errorizeMessage:lme,stripFileExtension:pme,autoCast:mme,autoCastJSON:pW,autoCastJSONDeep:nC,removeDir:Eme,compareVersions:gme,isCompatibleDataVersion:Sme,escapeRawValue:Tme,unescapeValue:Ame,stringifyProps:Rme,timeoutPromise:bme,isClusterOperation:Nme,getClusterUser:Ime,checkGlobalSchemaTable:wme,getHomeDir:EW,getPropsFilePath:yme,promisifyPapaParse:Cme,removeBOM:gW,createEventPromise:Pme,checkProcessRunning:Dme,checkSchemaTableExist:Lme,checkSchemaExists:SW,checkTableExists:TW,getStartOfTomorrowInSeconds:Mme,getLimitKey:vme,isObject:hme,isNotEmptyAndHasValue:ume,autoCasterIsNumberCheck:mW,backtickASTSchemaItems:Ume,isPortTaken:Ome,createForkArgs:xme,autoCastBoolean:Bme,async_set_timeout:_W,getTableHashAttribute:Hme,doesSchemaExist:kme,doesTableExist:Fme,stringifyObj:Gme,ms_to_time:qme,changeExtension:$me,getEnvCliRootPath:sC,noBootFile:Vme,httpRequest:Kme,transformReq:Yme,convertToMS:Wme,PACKAGE_ROOT:Xpe};function lme(e){return e instanceof Error?e:new Error(e)}a(lme,"errorizeMessage");function es(e){return e==null}a(es,"isEmpty");function ume(e){return!es(e)&&(e||e===0||e===""||hW(e))}a(ume,"isNotEmptyAndHasValue");function Hi(e){return es(e)||e.length===0||e.size===0}a(Hi,"isEmptyOrZeroLength");function dme(e){if(es(e))return!0;for(let t=0;t<e.length;t++)if(es(e[t]))return!0;return!1}a(dme,"arrayHasEmptyValues");function fme(e){if(Hi(e))return!0;for(let t=0;t<e.length;t++)if(Hi(e[t]))return!0;return!1}a(fme,"arrayHasEmptyOrZeroLengthValues");function _me(...e){try{return e.join(Ha.sep)}catch{console.error(e)}}a(_me,"buildFolderPath");function hW(e){return es(e)?!1:e===!0||e===!1}a(hW,"isBoolean");function hme(e){return es(e)?!1:typeof e=="object"}a(hme,"isObject");function pme(e){return Hi(e)?ame:e.slice(0,-cme)}a(pme,"stripFileExtension");function mme(e){return es(e)||e===""||typeof e!="string"?e:dW[e]!==void 0?dW[e]:mW(e)===!0?Number(e):sme.test(e)?new Date(e):e}a(mme,"autoCast");function pW(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(pW,"autoCastJSON");function nC(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=nC(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=nC(r);n!==r&&(e[t]=n)}return e}else return pW(e)}a(nC,"autoCastJSONDeep");function mW(e){if(e.startsWith("0.")&&uW(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&uW(e))}a(mW,"autoCasterIsNumberCheck");async function Eme(e){if(Hi(e))throw new Error(`Directory path: ${e} does not exist`);try{await cW.emptyDir(e),await cW.remove(e)}catch(t){throw On.error(`Error removing files in ${e} -- ${t}`),t}}a(Eme,"removeDir");function gme(e,t){if(Hi(e)){On.info("Invalid current version sent as parameter.");return}if(Hi(t)){On.info("Invalid upgrade version sent as parameter.");return}let r,n=/(\.0+)+$/,s=e.version?e.version:e,i=t.version?t.version:t,o=s.replace(n,"").split("."),c=i.replace(n,"").split("."),l=Math.min(o.length,c.length);for(let u=0;u<l;u++)if(r=parseInt(o[u],10)-parseInt(c[u],10),r)return r;return o.length-c.length}a(gme,"compareVersions");function Sme(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(Sme,"isCompatibleDataVersion");function Tme(e){if(es(e))return e;let t=String(e);return t==="."?Sr.UNICODE_PERIOD:t===".."?Sr.UNICODE_PERIOD+Sr.UNICODE_PERIOD:t.replace(Sr.FORWARD_SLASH_REGEX,Sr.UNICODE_FORWARD_SLASH)}a(Tme,"escapeRawValue");function Ame(e){if(es(e))return e;let t=String(e);return t===Sr.UNICODE_PERIOD?".":t===Sr.UNICODE_PERIOD+Sr.UNICODE_PERIOD?"..":String(e).replace(Sr.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(Ame,"unescapeValue");function Rme(e,t){if(es(e))return On.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+aT.EOL}!Hi(n)&&n[0]===";"?r+=" "+n+s+aT.EOL:Hi(n)||(r+=n+"="+s+aT.EOL)}catch{On.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(Rme,"stringifyProps");function EW(){let e;try{e=aT.homedir()}catch{e=process.env.HOME}return e}a(EW,"getHomeDir");function yme(){let e=Ha.join(EW(),Sr.HDB_HOME_DIR_NAME,Sr.BOOT_PROPS_FILE_NAME);return fW.existsSync(e)||(e=Ha.join(__dirname,"../","hdb_boot_properties.file")),e}a(yme,"getPropsFilePath");function bme(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:a(function(){clearTimeout(r)},"cancel")}}a(bme,"timeoutPromise");async function Ome(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=jpe.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a(Ome,"isPortTaken");function Nme(e){try{return Sr.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){On.error(`Error checking operation against cluster ops ${t}`)}return!1}a(Nme,"isClusterOperation");function wme(e,t){let r=(Me(),D(st)).getDatabases();if(!r[e])return lT.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return lT.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(wme,"checkGlobalSchemaTable");function Ime(e,t){if(es(t)){On.warn("No CLUSTERING_USER defined, clustering disabled");return}if(es(e)||Hi(e)){On.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){On.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){On.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(Ime,"getClusterUser");function Cme(){lW.parsePromise=function(e,t,r){return new Promise(function(n,s){lW.parse(e,{header:!0,transformHeader:gW,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(Cme,"promisifyPapaParse");function gW(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(gW,"removeBOM");function Pme(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;On.info(`Got cluster status event response: ${eme(s)}`);try{i.cancel()}catch{On.error("Error trying to cancel timeout.")}n(s)})})}a(Pme,"createEventPromise");async function Dme(e){let t=!0,r=0;do await _W(ime*r++),(await Zpe.findPs(e)).length>0&&(t=!1);while(t&&r<ome);if(t)throw new Error(`process ${e} was not started`)}a(Dme,"checkProcessRunning");function Lme(e,t){let r=SW(e);if(r)return r;let n=TW(e,t);if(n)return n}a(Lme,"checkSchemaTableExist");function SW(e){let{getDatabases:t}=(Me(),D(st));if(!t()[e])return lT.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(SW,"checkSchemaExists");function TW(e,t){let{getDatabases:r}=(Me(),D(st));if(!r()[e][t])return lT.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(TW,"checkTableExists");function Mme(){let e=cT().utc().add(1,"d").startOf("d").unix(),t=cT().utc().unix();return e-t}a(Mme,"getStartOfTomorrowInSeconds");function vme(){return cT().utc().format("DD-MM-YYYY")}a(vme,"getLimitKey");function Ume(e){try{let t=new Jpe(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){On.error("Got an error back ticking items."),On.error(t)}}a(Ume,"backtickASTSchemaItems");function xme(e){return[e]}a(xme,"createForkArgs");function Bme(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(Bme,"autoCastBoolean");function Hme(e,t){let{getDatabases:r}=(Me(),D(st)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(Hme,"getTableHashAttribute");function kme(e){let{getDatabases:t}=(Me(),D(st));return t()[e]!==void 0}a(kme,"doesSchemaExist");function Fme(e,t){let{getDatabases:r}=(Me(),D(st));return r()[e]?.[t]!==void 0}a(Fme,"doesTableExist");function Gme(e){try{return JSON.stringify(e)}catch{return e}}a(Gme,"stringifyObj");function qme(e){let t=cT.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(qme,"ms_to_time");function $me(e,t){let r=Ha.basename(e,Ha.extname(e));return Ha.join(Ha.dirname(e),r+t)}a($me,"changeExtension");function sC(){if(process.env[Sr.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Sr.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=tme(process.argv);if(e[Sr.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Sr.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(sC,"getEnvCliRootPath");var rC;function Vme(){if(rC)return rC;let e=sC();if(sC()&&fW.pathExistsSync(Ha.join(e,Sr.HDB_CONFIG_FILE)))return rC=!0,!0}a(Vme,"noBootFile");function Kme(e,t){let r;return e.protocol==="http:"?r=nme:r=rme,new Promise((n,s)=>{let i=r.request(e,o=>{o.setEncoding("utf8"),o.body="",o.on("data",c=>{o.body+=c}),o.on("end",()=>{n(o)})});i.on("error",o=>{s(o)}),i.write(t instanceof Buffer?t:JSON.stringify(t)),i.end()})}a(Kme,"httpRequest");function Yme(e){if(!e.schema&&!e.database){e.schema=Sr.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(Yme,"transformReq");function Wme(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(Wme,"convertToMS")});var ce=I((NW,wW)=>{"use strict";var iC=require("fs-extra"),Tl=require("path"),RW=require("os"),zme=require("properties-reader"),Wh=j(),Yh=oe(),Le=(H(),D(q)),uT=It(),Qme="Error initializing environment manager",dT="BOOT_PROPS_FILE_PATH",yW=!1,jme={[Le.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[Le.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[Le.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},wo={};Object.assign(NW,wW.exports={BOOT_PROPS_FILE_PATH:dT,getHdbBasePath:Jme,setHdbBasePath:Xme,get:bW,initSync:eEe,setProperty:Ke,initTestEnvironment:rEe,setCloneVar:tEe});function Jme(){return wo[Le.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(Jme,"getHdbBasePath");function Xme(e){wo[Le.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(Xme,"setHdbBasePath");function bW(e){let t=uT.getConfigValue(e);return t===void 0?wo[e]:t}a(bW,"get");function Ke(e,t){jme[e]&&(wo[e]=t),uT.updateConfigObject(e,t)}a(Ke,"setProperty");function Zme(){let e;try{e=Yh.getPropsFilePath(),iC.accessSync(e,iC.constants.F_OK|iC.constants.R_OK),yW=!0;let t=zme(e);return wo[Le.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(Le.HDB_SETTINGS_NAMES.INSTALL_USER),wo[Le.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(Le.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),wo[dT]=e,!0}catch{return Wh.trace(`Environment manager found no properties file at ${e}`),!1}}a(Zme,"doesPropFileExist");function eEe(e=!1){try{((yW||Zme()||Yh.noBootFile())&&!OW||e)&&(uT.initConfig(e),wo[Le.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=uT.getConfigValue(Le.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Wh.error(Qme),Wh.error(t),console.error(t),process.exit(1)}}a(eEe,"initSync");var OW=!1;function tEe(e){OW=e}a(tEe,"setCloneVar");function rEe(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:n,https_enabled:s,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,l=Tl.join(__dirname,"../../","unitTests");wo[dT]=Tl.join(l,"hdb_boot_properties.file"),Ke(Le.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Tl.join(l,"settings.test")),Ke(Le.HDB_SETTINGS_NAMES.INSTALL_USER,RW.userInfo()?RW.userInfo().username:void 0),Ke(Le.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Ke(Le.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Tl.join(l,"envDir","log")),Ke(Le.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Ke(Le.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Ke(Le.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Ke(Le.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Tl.join(l,"envDir")),Ke(Le.CONFIG_PARAMS.STORAGE_PATH,Tl.join(l,"envDir")),s&&(Ke(Le.CONFIG_PARAMS.HTTP_SECUREPORT,bW(Le.CONFIG_PARAMS.HTTP_PORT)),Ke(Le.CONFIG_PARAMS.HTTP_PORT,null)),Ke(Le.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),Ke(Le.CONFIG_PARAMS.HTTP_PORT,9926),Ke(Le.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Ke(Le.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT,9925),Ke(Le.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Yh.isEmpty(i)?!1:i),Ke(Le.CONFIG_PARAMS.HTTP_CORS,Yh.isEmpty(i)?!1:i),Ke(Le.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Ke(Le.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Ke(Le.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Ke(Le.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Ke(Le.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Tl.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Ke(Le.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Yh.isEmpty(c)?!1:c),o&&(Ke("CORS_ACCESSLIST",o),Ke(Le.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(Ke(Le.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),Ke(Le.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(Ke(Le.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Ke(Le.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(Ke(Le.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Ke(Le.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${dT}. Please check your boot props and settings files`;Wh.fatal(r),Wh.error(t)}}a(rEe,"initTestEnvironment")});var bE={};ve(bE,{Blob:()=>mi,blobsWereEncoded:()=>lc,databasePaths:()=>hT,decodeBlobsWithWrites:()=>SO,decodeFromDatabase:()=>uc,decodeWithBlobCallback:()=>TO,deleteBlob:()=>xW,deleteBlobsInObject:()=>ta,deleteRootBlobPathsForDB:()=>tC,encodeBlobsAsBuffers:()=>fEe,encodeBlobsWithFilePath:()=>em,findBlobsInObject:()=>Fh,getFileId:()=>$E,getFilePathForBlob:()=>HW,getRootBlobPathsForDB:()=>gT,setDeletionDelay:()=>oEe});function vW(){}function xW(e){let t=HW(e);t&&setTimeout(()=>{(0,Qe.unlink)(t,r=>{r&&ka.default.debug?.("Error trying to remove blob file",r)})},UW)}function oEe(e){UW=e}function BW(e){let t=Nn.get(e);if(!t)t={storageIndex:0,fileId:null,store:si},Nn.set(e,t);else{if(t.saving)return t;t.store=si}return cEe(t),t.source?oC(e,t.source,t):t.contentBuffer?aEe(e,t):oC(e,Qh.Readable.from(e.stream()),t),t}function oC(e,t,r){let{filePath:n,fileId:s,store:i,compress:o,flush:c}=r;return r.saving=new Promise((l,u)=>{let f=s+":blob";if(!i.attemptLock(f,0))throw new Error(`Unable to get lock for blob file ${s}`);let d=(0,Qe.createWriteStream)(n,{autoClose:!1,flags:"w"});if(t.errored){let g=Buffer.from(t.errored.toString());d.end(Buffer.concat([p(BigInt(g.length)+0xff000000000000n),g]));return}let h=!1;e.size!==void 0&&(d.write(p(e.size)),h=!0);let _;o?(h||d.write(sEe),_=(0,mT.createDeflate)(),t.pipe(_).pipe(d)):(h||d.write(nEe),t.pipe(d)),t.on("error",S);function p(g){let R=BigInt(g),E=new Uint8Array(Tr),A=new DataView(E.buffer);return R|=BigInt(o?aC:MW)<<48n,A.setBigInt64(0,R),E}a(p,"createHeader");function S(g){i.unlock(f,0);let R=d.fd;g?(R&&(0,Qe.close)(R),u(g)):c?(0,Qe.fdatasync)(R,E=>{E&&u(E),l(),(0,Qe.close)(R)}):(l(),(0,Qe.close)(R))}a(S,"finished"),d.on("error",S).on("finish",()=>{if(h)S();else{let g=_?_.bytesWritten:d.bytesWritten-Tr;e.size=g,(0,Qe.write)(d.fd,p(g),0,Tr,0,S)}})}),e}function $E(e){return Nn.get(e)?.fileId}function HW(e){let t=Nn.get(e);return t?.fileId&&jh(t)}function gT(e){if(!e)throw new Error("No store specified, can not determine blob storage path");let t=hT.get(e);if(!t){if(!e.databaseName)throw new Error("No database name specified, can not determine blob storage path");let r=(0,ET.get)(B.STORAGE_BLOBPATHS);r?t=r.map(n=>(0,Co.join)(n,e.databaseName)):t=[(0,Co.join)((0,ET.getHdbBasePath)(),"blobs",e.databaseName)],hT.set(e,t)}return t}async function tC(e){let t=hT.get(e);t&&await Promise.all(t.map(r=>kW(r)))}async function kW(e){for(let t of await(0,ii.readdir)(e,{withFileTypes:!0}))if(t.isDirectory())await kW((0,Co.join)(e,t.name));else try{await(0,ii.unlink)((0,Co.join)(e,t.name))}catch(r){ka.default.warn?.("Error deleting file",r)}try{await(0,ii.rmdir)(e)}catch(t){ka.default.warn?.("Error deleting directory",t)}}function jh({storageIndex:e,fileId:t,store:r}){let n=gT(r);return(0,Co.join)(n[e],t.slice(-9,-6)||"0",t.slice(-6,-3)||"0",t.length<=9?t.slice(-3):t.slice(0,-9)+t.slice(-3))}function aEe(e,t){let r=t.contentBuffer,n=r.length;if(!(n<LW))return e.size=n,oC(e,Qh.Readable.from([r]),t)}function cEe(e){let t=gT(e.store),r=lEe(),n=t?.length>1?uEe(t,r):0,s=r.toString(16);e.storageIndex=n,e.fileId=s;let i=jh(e),o=(0,Co.dirname)(i);(0,Qe.existsSync)(o)||(0,DW.ensureDirSync)(o),e.filePath=i}function lEe(){let e=PW.get(si);if(!e){let t=0,r=gT(si);for(let n of r){let s=0;for(let i=0;i<3;i++){s=s*4096;let o=0;if((0,Qe.existsSync)(n))for(let c of(0,Qe.readdirSync)(n)){let l=parseInt(c,16);i===2&&c.length>3&&(l=parseInt(c.slice(-3),16),l+=parseInt(c.slice(0,-3),16)*68719476736),l>o&&(o=l)}s+=o,n=(0,Co.join)(n,o.toString(16))}t=Math.max(t,s)}e=new BigInt64Array([BigInt(t)+1n]),e=new BigInt64Array(si.getUserSharedBuffer("blob-file-id",e.buffer)),PW.set(si,e)}return Number(Atomics.add(e,0,1n))}function uEe(e,t){let r=Date.now();if(!e.frequencyTable){e.lastUpdated=0;let s=new Array(pT);for(let i=0;i<s.length;i++)s[i]=i%e.length;e.frequencyTable=s}return(e.lastUpdated??0)+6e4<r&&(e.lastUpdated=r,dEe(e)),e.frequencyTable[t%pT]}async function dEe(e){if(!ii.statfs)return;let t=await Promise.all(e.map(async(s,i)=>{let o=await(0,ii.statfs)(s),c=o.bavail*o.bsize;return Math.pow(c,.8)})),r=new Array(pT),n=t.map(s=>1/s);for(let s=0;s<pT;s++){let i=1/0,o=0;for(let c=0;c<n.length;c++)n[c]<i&&(o=c,i=n[c]);n[o]+=1/t[o],r[s]=o}e.frequencyTable=r}function em(e,t,r){Cd=t,si=r,lc=!1;try{return e()}finally{Cd=void 0,si=void 0}}function fEe(e){vr=[];let t;try{t=e()}catch(n){throw vr=void 0,n}let r=vr.length<2?vr[0]:Promise.all(vr);return vr=void 0,r?r.then(()=>e()):t}function SO(e,t){try{vr=[],Al=t,e()}catch(n){throw Al=void 0,vr=void 0,n}Al=void 0;let r=vr.length<2?vr[0]:Promise.all(vr);return vr=void 0,r}function TO(e,t){try{return Al=t,e()}finally{Al=void 0}}function uc(e,t){return si=t,e()}function ta(e){Fh(e,t=>{xW(t)})}function Fh(e,t){if(e instanceof mi)t(e);else if(e.constructor===Object||Array.isArray(e))for(let r in e)typeof e[r]=="object"&&Fh(e[r],t)}function _Ee(){return class{static{a(this,"Blob")}content;constructor(t){this.content=t[0]}stream(){return new ReadableStream({start(t){t.enqueue(this.content),t.close()}})}text(){return Promise.resolve(this.content.toString())}arrayBuffer(){return Promise.resolve(this.content.buffer)}get size(){return this.content.length}slice(){throw new Error("Not implemented")}bytes(){return Promise.resolve(this.content)}get type(){return""}}}var Io,ii,Qe,mT,Qh,DW,ET,Co,ka,LW,Tr,MW,aC,IW,nEe,sEe,CW,Nn,Al,mi,Cd,vr,si,lc,zh,fT,iEe,_T,UW,hT,PW,pT,cs=be(()=>{Io=require("msgpackr"),ii=require("node:fs/promises"),Qe=require("node:fs"),mT=require("node:zlib"),Qh=require("node:stream"),DW=require("fs-extra"),ET=M(ce());H();Co=require("path"),ka=M(hi());ji();LW=8192,Tr=8,MW=0,aC=1,IW=255,nEe=new Uint8Array([0,MW,255,255,255,255,255,255]),sEe=new Uint8Array([0,aC,255,255,255,255,255,255]),CW=0xffffffffffff,Nn=new WeakMap,mi=global.Blob||_Ee(),lc=!1,zh=new Uint8Array(8),fT=new DataView(zh.buffer),iEe=6e4;a(vW,"InstanceOfBlobWithNoConstructor");vW.prototype=mi.prototype;_T=class e extends vW{static{a(this,"FileBackedBlob")}type="";size;#e;#t;constructor(t){super(),t?.type&&(this.type=t.type),t?.size!=null&&(this.size=t.size)}on(t,r){if(t==="error")this.#e??=[],this.#e.push(r);else if(t==="size")this.#t??=[],this.#t.push(r);else throw new Error("Only 'error' and 'size' events are supported")}toJSON(){if(this.type?.startsWith("text")){let t=Nn.get(this),{start:r,end:n,contentBuffer:s,asString:i}=t;return i||(s&&(n!==void 0||r!==void 0)&&(s=s.subarray(r??0,n??t.contentBuffer.length)),s?(t.asString=s.toString(),t.asString):(MA()&&LA(this.bytes().then(o=>t.contentBuffer=o)),`[blob: ${this.type}, ${this.size} bytes]`))}return{description:"Blobs that are not of type text/* can not be directly serialized as JSON, use as the body of a response or convert to another type"}}async text(){return(await this.bytes()).toString()}bytes(){let t=Nn.get(this),{start:r,end:n,contentBuffer:s}=t;if(s)return(n!==void 0||r!==void 0)&&(s=s.subarray(r??0,n??t.contentBuffer.length)),Promise.resolve(s);let i=jh(t),o,c=a(async()=>{let l,u=Tr;try{if(l=await(0,ii.readFile)(i),l.length>=Tr){l.copy(zh,0,0,Tr);let d=fT.getBigUint64(0);if(Number(d>>48n)===IW)throw new Error("Error in blob: "+buffer.subarray(Tr));if(u=Number(d&0xffffffffffffn),u<n&&(u=n),u<CW&&(this.size=u,this.#t))for(let h of this.#t)h(u)}}catch(d){if(d.code!=="ENOENT")throw d;l=Buffer.alloc(0)}function f(d){if(u>d.length){let h=t.store,_=t.fileId+":blob";if(o)throw new Error("Incomplete blob");return new Promise((p,S)=>{if(h.attemptLock(_,0,()=>(o=!0,h.unlock(_,0),p(c()))))return o=!0,h.unlock(_,0),p(c())})}return(n!=null||r!=null)&&(d=d.subarray(r??0,n??d.length)),d}return a(f,"checkCompletion"),l[1]===aC?new Promise((d,h)=>{(0,mT.deflate)(l.subarray(Tr),(_,p)=>{_?h(_):d(f(p))})}):f(l.subarray(Tr))},"readContents");return c()}async arrayBuffer(){let t=await this.bytes(),r=new ArrayBuffer(t.length);return new Uint8Array(r).set(t),r}stream(){let t=Nn.get(this),{contentBuffer:r,start:n,end:s}=t;if(r)return(s!=null||n!=null)&&(r=r.subarray(n??0,s??t.contentBuffer.length)),new ReadableStream({pull(p){p.enqueue(r),p.close()}});let i=jh(t),o,c=0,l=0,u,f,d,h=this;return new ReadableStream({start(){let p=1e3,S=a((g,R)=>{(0,Qe.open)(i,"r",(E,A)=>{if(E){if(E.code==="ENOENT"&&d!==!1&&(ka.default.debug?.("File does not exist yet, waiting for it to be created",i,p),p-- >0))return setTimeout(()=>{_(),S(g,R)},20).unref();R(E),h.#e?.forEach(O=>O(E))}else o=A,g(A)})},"openFile");return new Promise(S)},pull:a(p=>{let S=0,g=100;return new Promise(a(function R(E,A){function O(F){(0,Qe.close)(o),u&&u.close(),A(F),h.#e?.forEach(G=>G(F))}a(O,"onError");let v=Buffer.allocUnsafe(262144);(0,Qe.read)(o,v,0,v.length,c,(F,G,Y)=>{if(l+=G,F)return O(F);if(c===0){if(G<Tr){g-- >0&&d!==!1?(_(),ka.default.debug?.("File was empty, waiting for data to be written",i,g),setTimeout(()=>R(E,A),20).unref()):(ka.default.debug?.("File was empty, throwing error",i,g),A(new Error(`Blob ${t.fileId} was empty`)));return}Y.copy(zh,0,0,Tr);let te=fT.getBigUint64(0);if(Number(te>>48n)===IW)return O(new Error("Error in blob: "+Y.subarray(Tr)));if(S=Number(te&0xffffffffffffn),S<CW&&h.size!==S&&(h.size=S,h.#t))for(let se of h.#t)se(S);Y=Y.subarray(Tr,G),l-=Tr}else if(G===0){let te=Buffer.allocUnsafe(8);return(0,Qe.read)(o,te,0,Tr,0,se=>{if(se)return O(se);if(zh.set(te),S=Number(fT.getBigUint64(0)&0xffffffffffffn),S>l){d!==!1?(f=setTimeout(()=>{O(new Error("File read timed out"))},iEe).unref(),u=(0,Qe.watch)(i,{persistent:!1},()=>{clearTimeout(f),u.close(),_(),R(E,A)})):O(new Error("Blob is incomplete"));return}(0,Qe.close)(o),p.close(),E()})}else Y=Y.subarray(0,G);if(n!==void 0||s!==void 0){if(n&&l<n)return c+=G,R(E,A);s&&l>=s&&(l>s&&(Y=Y.subarray(0,s-c)),l=S=s),n&&n>c&&(Y=Y.subarray(n-c))}c+=G;try{p.enqueue(Y)}catch(te){return ka.default.debug?.("Error enqueuing chunk",te),E()}l===S&&((0,Qe.close)(o),p.close()),E()})},"readMore"))},"pull"),cancel(){(0,Qe.close)(o),clearTimeout(f),u&&u.close()}});function _(){if(d===void 0){let p=t.store,S=t.fileId+":blob";d=!p.attemptLock(S,0,()=>{d=!1,p.unlock(S,0)}),d||p.unlock(S,0)}return d}}slice(t,r,n){let s=Nn.get(this),i=new e(n&&{type:n});if(s?.fileId){let o={...s,start:t,end:r};Nn.set(i,o),this.size!=null&&(i.size=(r==null?this.size:Math.min(r,this.size))-(t??0))}else if(s?.contentBuffer&&!s.storageBuffer){let o={...s,contentBuffer:s.contentBuffer.subarray(t,r)};Nn.set(i,o),i.size=(r??this.size)-t}else throw new Error("Can not slice a streaming blob that is not backed by a file");return i}save(t){if(!t?.primaryStore?.rootStore)throw new Error("No target table specified");return BW(this).saving??Promise.resolve()}},UW=500;a(xW,"deleteBlob");a(oEe,"setDeletionDelay");global.createBlob=function(e,t){let r=new _T(t),n={storageIndex:0,fileId:null,flush:t?.flush,compress:t?.compress};if(Nn.set(r,n),e instanceof Uint8Array)r.size=e.length,n.contentBuffer=e;else if(e instanceof Qh.Readable)n.source=e;else if(typeof e=="string")n.contentBuffer=Buffer.from(e);else if(e?.[Symbol.asyncIterator]||e?.[Symbol.iterator])n.source=Qh.Readable.from(e);else throw new Error("Invalid source type");return r};a(BW,"saveBlob");a(oC,"writeBlobWithStream");a($E,"getFileId");a(HW,"getFilePathForBlob");hT=new Map;a(gT,"getRootBlobPathsForDB");a(tC,"deleteRootBlobPathsForDB");a(kW,"rimrafSteadily");a(jh,"getFilePath");a(aEe,"writeBlobWithBuffer");a(cEe,"generateFilePath");PW=new Map;a(lEe,"getNextFileId");pT=128;a(uEe,"getNextStorageIndex");a(dEe,"createFrequencyTableForStoragePaths");a(em,"encodeBlobsWithFilePath");a(fEe,"encodeBlobsAsBuffers");a(SO,"decodeBlobsWithWrites");a(TO,"decodeWithBlobCallback");a(uc,"decodeFromDatabase");a(ta,"deleteBlobsInObject");a(Fh,"findBlobsInObject");(0,Io.addExtension)({Class:mi,type:11,unpack:a(function(e){let t=(0,Io.unpack)(e),r=new _T;if(Object.assign(r,t[0]),typeof t[1]!="object"){if(!si)throw new Error("No store specified, can not load blob from storage");if(Nn.set(r,{storageIndex:t[1],fileId:t[2],store:si}),Al)return Al(r)??r}else Nn.set(r,{storageIndex:0,fileId:null,storageBuffer:e,contentBuffer:t[1]}),r.size=t[1]?.length;return r},"unpack"),pack:a(function(e){let t=Nn.get(e);if(Cd!==void 0&&(lc=!0,t?.recordId!==void 0&&t.recordId!==Cd))throw new Error("Cannot use the same blob in two different records");let r={...e};if(e.type&&(r.type=e.type),e.size!==void 0&&(r.size=e.size),t){if(t.storageBuffer)return t.storageBuffer;if(t.contentBuffer?.length<LW)return r.size=t.contentBuffer.length,(0,Io.pack)([r,t.contentBuffer])}if(Cd!==void 0){if(t=BW(e),!t.fileId)throw new Error("Unable to save blob without file id");return t.recordId=Cd,(0,Io.pack)([r,t.storageIndex,t.fileId])}if(t)try{let n=(0,Qe.readFileSync)(jh(t));if(n.length>=Tr&&(n.copy(zh,0,0,Tr),Number(fT.getBigUint64(0)&0xffffffffffffn)===n.length-Tr))return Buffer.concat([(0,Io.pack)([r]),n]);if(vr)vr.push(e.bytes());else throw new Error("Incomplete blob");return Buffer.alloc(0)}catch(n){if(n.code==="ENOENT"&&vr)return vr.push(e.bytes()),Buffer.alloc(0);throw n}else throw new Error("Blob has no storage info or buffer attached to it")},"pack")});(0,Io.addExtension)({Class:Promise,type:12,pack(){throw new Error("Cannot encode a promise")}});a(_Ee,"polyfillBlob")});var lC=I((bMe,FW)=>{"use strict";var Jh=ce();Jh.initSync();var Pd=require("fs-extra"),cC=require("path"),Dd=(H(),D(q)),hEe=require("crypto"),pEe=require("uuid").v4;FW.exports=mEe;function mEe(){if(Jh.getHdbBasePath()!==void 0){let e=cC.join(Jh.getHdbBasePath(),Dd.LICENSE_KEY_DIR_NAME,Dd.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=cC.join(Jh.getHdbBasePath(),Dd.LICENSE_KEY_DIR_NAME,Dd.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=cC.join(Jh.getHdbBasePath(),Dd.LICENSE_KEY_DIR_NAME,Dd.JWT_ENUM.JWT_PASSPHRASE_NAME);try{Pd.accessSync(r),Pd.accessSync(e),Pd.accessSync(t)}catch(n){if(n.code==="ENOENT"){let s=pEe(),i=hEe.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:s}});Pd.writeFileSync(r,s),Pd.writeFileSync(e,i.privateKey),Pd.writeFileSync(t,i.publicKey)}else throw n}}}a(mEe,"checkJWTTokenExist")});var qW=I((NMe,GW)=>{"use strict";var uC=class{static{a(this,"HdbInfoInsertObject")}constructor(t,r,n){this.info_id=t,this.data_version_num=r,this.hdb_version_num=n}};GW.exports={HdbInfoInsertObject:uC}});var KW=I((IMe,VW)=>{"use strict";var $W=(H(),D(q)),dC=class{static{a(this,"UpgradeObject")}constructor(t,r){this[$W.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[$W.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};VW.exports={UpgradeObject:dC}});var ST=I((PMe,WW)=>{"use strict";var Is=require("prompt"),Ld=require("chalk"),YW=j(),oi=require("os"),fC=ec(),_C=["yes","y"];async function EEe(e){let t=`${oi.EOL}`+Ld.bold.green("Your current HarperDB version requires that we complete an update process.")+`${oi.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${oi.EOL}${oi.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${oi.EOL}`;Is.override=fC(["CONFIRM_UPGRADE"]),Is.start(),Is.message=t;let r={properties:{CONFIRM_UPGRADE:{description:Ld.magenta(`${oi.EOL}[CONFIRM_UPGRADE] Do you want to upgrade your HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n;try{n=await Is.get([r])}catch(s){return YW.error("There was an error when prompting user about an upgrade."),YW.error(s),!1}return _C.includes(n.CONFIRM_UPGRADE)}a(EEe,"forceUpdatePrompt");async function gEe(e){let t=`${oi.EOL}`+Ld.bold.green(`Your installed HarperDB version is older than the version used to create your data. Downgrading is not recommended as it is not tested and guaranteed to work. However, if you need to downgrade, and a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${oi.EOL}`);Is.override=fC(["CONFIRM_DOWNGRADE"]),Is.start(),Is.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:Ld.magenta(`${oi.EOL}[CONFIRM_DOWNGRADE] Do you want to proceed with using your downgraded HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n=await Is.get([r]);return _C.includes(n.CONFIRM_DOWNGRADE)}a(gEe,"forceDowngradePrompt");async function SEe(){let e=`${oi.EOL}`+Ld.bold.green("We now require a Certifacte Authority certificate. HarperDB can generate all new certificates for you (your existing certificates will be backed up) or you can keep any existing certificates and add your own CA certificate. To add your own CA certificate set the <certificateAuthority> parameter in harperdb-config.yaml");Is.override=fC(["GENERATE_CERTS"]),Is.start(),Is.message=e;let t={properties:{GENERATE_CERTS:{description:Ld.magenta(`${oi.EOL}[GENERATE_CERTS] Do you want HarperDB to generate all new certificates? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"yes",required:!0}}},r=await Is.get([t]);return _C.includes(r.GENERATE_CERTS)}a(SEe,"upgradeCertsPrompt");WW.exports={forceUpdatePrompt:EEe,forceDowngradePrompt:gEe,upgradeCertsPrompt:SEe}});var pC=I((LMe,zW)=>{"use strict";var hC=class{static{a(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};zW.exports=hC});var jW=I((HMe,QW)=>{"use strict";var TEe=oe(),AEe=It(),vMe=j(),UMe=require("path"),xMe=require("fs"),BMe=(H(),D(q));QW.exports={getOldPropsValue:REe};function REe(e,t,r=!1){let n=t.getRaw(e);return TEe.isNotEmptyAndHasValue(n)?n:r?AEe.getDefaultConfig(e):""}a(REe,"getOldPropsValue")});var ez=I((FMe,ZW)=>{"use strict";var Fa=require("path"),Ga=require("fs-extra"),yEe=require("properties-reader"),bEe=pC(),dr=j(),{getOldPropsValue:pt}=jW(),{HDB_SETTINGS_NAMES:ge,CONFIG_PARAMS:Rl}=(H(),D(q)),yl=It(),TT=ce(),JW=oe(),ki=(H(),D(q)),mC=new bEe("3.1.0"),XW=[];function OEe(){let e=yEe(TT.get(ge.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),dr.info(t);let r=` ;Settings for the HarperDB process.
41
41
 
42
42
  ;The directory selected during install where the database files reside.
43
- ${me.HDB_ROOT_KEY} = ${dt(me.HDB_ROOT_KEY,e)}
43
+ ${ge.HDB_ROOT_KEY} = ${pt(ge.HDB_ROOT_KEY,e)}
44
44
  ;The port the HarperDB REST interface will listen on.
45
- ${me.SERVER_PORT_KEY} = ${dt(me.SERVER_PORT_KEY,e)}
45
+ ${ge.SERVER_PORT_KEY} = ${pt(ge.SERVER_PORT_KEY,e)}
46
46
  ;Set to true to enable HTTPS on the HarperDB REST endpoint. Requires a valid certificate and key.
47
- ${me.HTTP_SECURE_ENABLED_KEY} = ${dt(me.HTTP_SECURE_ENABLED_KEY,e)}
47
+ ${ge.HTTP_SECURE_ENABLED_KEY} = ${pt(ge.HTTP_SECURE_ENABLED_KEY,e)}
48
48
  ;The path to the SSL certificate used when running with HTTPS enabled.
49
- ${me.CERT_KEY} = ${dt(me.CERT_KEY,e)}
49
+ ${ge.CERT_KEY} = ${pt(ge.CERT_KEY,e)}
50
50
  ;The path to the SSL private key used when running with HTTPS enabled.
51
- ${me.PRIVATE_KEY_KEY} = ${dt(me.PRIVATE_KEY_KEY,e)}
51
+ ${ge.PRIVATE_KEY_KEY} = ${pt(ge.PRIVATE_KEY_KEY,e)}
52
52
  ;Set to true to enable Cross Origin Resource Sharing, which allows requests across a domain.
53
- ${me.CORS_ENABLED_KEY} = ${dt(me.CORS_ENABLED_KEY,e)}
53
+ ${ge.CORS_ENABLED_KEY} = ${pt(ge.CORS_ENABLED_KEY,e)}
54
54
  ;Allows for setting allowable domains with CORS. Comma separated list.
55
- ${me.CORS_WHITELIST_KEY} = ${dt(me.CORS_WHITELIST_KEY,e)}
55
+ ${ge.CORS_WHITELIST_KEY} = ${pt(ge.CORS_WHITELIST_KEY,e)}
56
56
  ;Length of time in milliseconds after which a request will timeout. Defaults to 120,000 ms (2 minutes).
57
- ${me.SERVER_TIMEOUT_KEY} = ${dt(me.SERVER_TIMEOUT_KEY,e,!0)}
57
+ ${ge.SERVER_TIMEOUT_KEY} = ${pt(ge.SERVER_TIMEOUT_KEY,e,!0)}
58
58
  ;The number of milliseconds of inactivity a server needs to wait for additional incoming data, after it has finished writing the last response. Defaults to 5,000 ms (5 seconds).
59
- ${me.SERVER_KEEP_ALIVE_TIMEOUT_KEY} = ${dt(me.SERVER_KEEP_ALIVE_TIMEOUT_KEY,e,!0)}
59
+ ${ge.SERVER_KEEP_ALIVE_TIMEOUT_KEY} = ${pt(ge.SERVER_KEEP_ALIVE_TIMEOUT_KEY,e,!0)}
60
60
  ;Limit the amount of time the parser will wait to receive the complete HTTP headers.. Defaults to 60,000 ms (1 minute).
61
- ${me.SERVER_HEADERS_TIMEOUT_KEY} = ${dt(me.SERVER_HEADERS_TIMEOUT_KEY,e,!0)}
61
+ ${ge.SERVER_HEADERS_TIMEOUT_KEY} = ${pt(ge.SERVER_HEADERS_TIMEOUT_KEY,e,!0)}
62
62
  ;Define whether to log to file or not.
63
- ${me.LOG_TO_FILE} = ${yl.getDefaultConfig(Rl.LOGGING_FILE)}
63
+ ${ge.LOG_TO_FILE} = ${yl.getDefaultConfig(Rl.LOGGING_FILE)}
64
64
  ;Define whether to log to stdout/stderr or not. NOTE HarperDB must run in foreground in order to receive the std stream from HarperDB.
65
- ${me.LOG_TO_STDSTREAMS} = ${yl.getDefaultConfig(Rl.LOGGING_STDSTREAMS)}
65
+ ${ge.LOG_TO_STDSTREAMS} = ${yl.getDefaultConfig(Rl.LOGGING_STDSTREAMS)}
66
66
  ;Set to control amount of logging generated. Accepted levels are trace, debug, warn, error, fatal.
67
- ${me.LOG_LEVEL_KEY} = ${dt(me.LOG_LEVEL_KEY,e)}
67
+ ${ge.LOG_LEVEL_KEY} = ${pt(ge.LOG_LEVEL_KEY,e)}
68
68
  ;The path where log files will be written. If there is no file name included in the path, the log file will be created by default as 'hdb_log.log'
69
- ${me.LOG_PATH_KEY} = ${dt(me.LOG_PATH_KEY,e)}
69
+ ${ge.LOG_PATH_KEY} = ${pt(ge.LOG_PATH_KEY,e)}
70
70
  ;Set to true to enable daily log file rotations - each log file name will be prepended with YYYY-MM-DD.
71
- ${me.LOG_DAILY_ROTATE_KEY} = ${dt(me.LOG_DAILY_ROTATE_KEY,e)}
71
+ ${ge.LOG_DAILY_ROTATE_KEY} = ${pt(ge.LOG_DAILY_ROTATE_KEY,e)}
72
72
  ;Set the number of daily log files to maintain when LOG_DAILY_ROTATE is enabled. If no integer value is set, no limit will be set for
73
73
  ;daily log files which may consume a large amount of storage depending on your log settings.
74
- ${me.LOG_MAX_DAILY_FILES_KEY} = ${dt(me.LOG_MAX_DAILY_FILES_KEY,e)}
74
+ ${ge.LOG_MAX_DAILY_FILES_KEY} = ${pt(ge.LOG_MAX_DAILY_FILES_KEY,e)}
75
75
  ;The environment used by NodeJS. Setting to production will be the most performant, settings to development will generate more logging.
76
- ${me.PROPS_ENV_KEY} = ${dt(me.PROPS_ENV_KEY,e)}
76
+ ${ge.PROPS_ENV_KEY} = ${pt(ge.PROPS_ENV_KEY,e)}
77
77
  ;This allows self signed certificates to be used in clustering. This is a security risk
78
78
  ;as clustering will not validate the cert, so should only be used internally.
79
79
  ;The HDB install creates a self signed certificate, if you use that cert this must be set to true.
80
- ${me.ALLOW_SELF_SIGNED_SSL_CERTS} = ${dt(me.ALLOW_SELF_SIGNED_SSL_CERTS,e,!0)}
80
+ ${ge.ALLOW_SELF_SIGNED_SSL_CERTS} = ${pt(ge.ALLOW_SELF_SIGNED_SSL_CERTS,e,!0)}
81
81
  ;Set the max number of processes HarperDB will start. This can also be limited by number of cores and licenses.
82
- ${me.MAX_HDB_PROCESSES} = ${dt(me.MAX_HDB_PROCESSES,e)}
82
+ ${ge.MAX_HDB_PROCESSES} = ${pt(ge.MAX_HDB_PROCESSES,e)}
83
83
  ;Set to true to enable clustering. Requires a valid enterprise license.
84
- ${me.CLUSTERING_ENABLED_KEY} = ${dt(me.CLUSTERING_ENABLED_KEY,e,!0)}
84
+ ${ge.CLUSTERING_ENABLED_KEY} = ${pt(ge.CLUSTERING_ENABLED_KEY,e,!0)}
85
85
  ;The port that will be used for HarperDB clustering.
86
- ${me.CLUSTERING_PORT_KEY} = ${dt(me.CLUSTERING_PORT_KEY,e)}
86
+ ${ge.CLUSTERING_PORT_KEY} = ${pt(ge.CLUSTERING_PORT_KEY,e)}
87
87
  ;The name of this node in your HarperDB cluster topology. This must be a value unique from the rest of your cluster node names.
88
- ${me.CLUSTERING_NODE_NAME_KEY} = ${dt(me.CLUSTERING_NODE_NAME_KEY,e)}
88
+ ${ge.CLUSTERING_NODE_NAME_KEY} = ${pt(ge.CLUSTERING_NODE_NAME_KEY,e)}
89
89
  ;The user used to connect to other instances of HarperDB, this user must have a role of cluster_user.
90
- ${me.CLUSTERING_USER_KEY} = ${dt(me.CLUSTERING_USER_KEY,e)}
90
+ ${ge.CLUSTERING_USER_KEY} = ${pt(ge.CLUSTERING_USER_KEY,e)}
91
91
  ;Defines if this instance does not record transactions. Note, if Clustering is enabled and Transaction Log is disabled your nodes will not catch up.
92
- ${me.DISABLE_TRANSACTION_LOG_KEY} = ${dt(me.DISABLE_TRANSACTION_LOG_KEY,e,!0)}
92
+ ${ge.DISABLE_TRANSACTION_LOG_KEY} = ${pt(ge.DISABLE_TRANSACTION_LOG_KEY,e,!0)}
93
93
  ;Defines the length of time an operation token will be valid until it expires. Example values: https://github.com/vercel/ms
94
- ${me.OPERATION_TOKEN_TIMEOUT_KEY} = ${dt(me.OPERATION_TOKEN_TIMEOUT_KEY,e,!0)}
94
+ ${ge.OPERATION_TOKEN_TIMEOUT_KEY} = ${pt(ge.OPERATION_TOKEN_TIMEOUT_KEY,e,!0)}
95
95
  ;Defines the length of time a refresh token will be valid until it expires. Example values: https://github.com/vercel/ms
96
- ${me.REFRESH_TOKEN_TIMEOUT_KEY} = ${dt(me.REFRESH_TOKEN_TIMEOUT_KEY,e,!0)}
96
+ ${ge.REFRESH_TOKEN_TIMEOUT_KEY} = ${pt(ge.REFRESH_TOKEN_TIMEOUT_KEY,e,!0)}
97
97
  ;The port the IPC server will run on.
98
- ${me.IPC_SERVER_PORT} = ${yl.getDefaultConfig(Rl.IPC_NETWORK_PORT)}
98
+ ${ge.IPC_SERVER_PORT} = ${yl.getDefaultConfig(Rl.IPC_NETWORK_PORT)}
99
99
  ;Run HDB in the foreground.
100
- ${me.RUN_IN_FOREGROUND} = ${yl.getDefaultConfig(Rl.OPERATIONSAPI_FOREGROUND)}
100
+ ${ge.RUN_IN_FOREGROUND} = ${yl.getDefaultConfig(Rl.OPERATIONSAPI_FOREGROUND)}
101
101
  ;Set to true to enable custom API endpoints. Requires a valid enterprise license.
102
- ${me.CUSTOM_FUNCTIONS_ENABLED_KEY} = ${yl.getDefaultConfig(Rl.CUSTOMFUNCTIONS_ENABLED)}
102
+ ${ge.CUSTOM_FUNCTIONS_ENABLED_KEY} = ${yl.getDefaultConfig(Rl.CUSTOMFUNCTIONS_ENABLED)}
103
103
  ;The port used to access the custom functions server.
104
- ${me.CUSTOM_FUNCTIONS_PORT_KEY} = ${yl.getDefaultConfig(Rl.HTTP_PORT)}
104
+ ${ge.CUSTOM_FUNCTIONS_PORT_KEY} = ${yl.getDefaultConfig(Rl.HTTP_PORT)}
105
105
  ;The path to the folder containing HarperDB custom function files.
106
- ${me.CUSTOM_FUNCTIONS_DIRECTORY_KEY} = ${Fa.join(dt(me.HDB_ROOT_KEY,e),"custom_functions")}
106
+ ${ge.CUSTOM_FUNCTIONS_DIRECTORY_KEY} = ${Fa.join(pt(ge.HDB_ROOT_KEY,e),"custom_functions")}
107
107
  ;Set the max number of processes HarperDB will start for the Custom Functions server
108
- ${me.MAX_CUSTOM_FUNCTION_PROCESSES} = ${yl.getDefaultConfig(Rl.HTTP_THREADS)}
109
- `,n=sT.get("settings_path"),s=Fa.dirname(n),i=Fa.join(s,"3_1_0_upgrade_settings.bak");try{ur.info(`Backing up old settings file to: ${i}`),Ga.copySync(n,i)}catch(c){throw ur.error(c),console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),c}try{ur.info("New settings file values for 3.1.0 upgrade:",r),ur.info(`Creating new/upgraded settings file at '${n}'`),Ga.writeFileSync(n,r),ur.info("Updating env variables with new settings values")}catch(c){throw console.error("There was a problem writing the new settings file. Please check the log for details."),ur.error("Attempting to reset the settings file to its original state. Use the '.bak' file if this fails."),ur.error(c),Ga.copySync(i,n),c}sT.initSync();let o="New settings file for 3.1.0 upgrade successfully created.";return console.log(o),ur.info(o),o}a(Eme,"updateSettingsFile_3_1_0");function mme(){let e=Fa.join(_W.getHomeDir(),ki.HDB_HOME_DIR_NAME,ki.LICENSE_KEY_DIR_NAME,ki.LICENSE_FILE_NAME),t=Fa.join(_W.getHomeDir(),ki.HDB_HOME_DIR_NAME,ki.LICENSE_KEY_DIR_NAME,ki.REG_KEY_FILE_NAME),r=Fa.join(sT.getHdbBasePath(),ki.LICENSE_KEY_DIR_NAME,ki.LICENSE_FILE_NAME),n=Fa.join(r,ki.LICENSE_FILE_NAME),s=Fa.join(r,ki.REG_KEY_FILE_NAME),i="Move license files for version 3.1.0";console.log(i),ur.info(i);let o="Creating .license directory";console.log(o),ur.info(o),Ga.mkdirpSync(r);try{Ga.accessSync(e);try{let c="Moving licence file";console.log(c),ur.info(c),Ga.moveSync(e,n);let l="License file successfully moved.";console.log(l),ur.info(l)}catch{let l="moving license file failed";console.error(l),ur.error(l)}}catch{let l=`license file '${e}' does not exist.`;console.warn(l),ur.warn(l)}try{Ga.accessSync(t);try{let c="Moving registration file";console.log(c),ur.info(c),Ga.moveSync(t,s);let l="Registration file successfully moved.";console.log(l),ur.info(l)}catch{let l="moving registration file failed";console.error(l),ur.error(l)}}catch{let l=`registration file '${t}' does not exist.`;console.warn(l),ur.warn(l)}}a(mme,"moveLicenseFiles");JI.sync_functions.push(Eme);JI.sync_functions.push(mme);hW.push(JI);pW.exports=hW});var AW=P((OMe,TW)=>{"use strict";var ts=at(),{insertRecords:gme}=pc(),Sme=an(),qa=Mt(),Tme=ae(),Uo=j(),Ame=ae(),Fi=require("fs-extra"),xo=require("path"),Rme=require("cli-progress"),Gh=require("assert"),yme=require("pino"),bme=ce();TW.exports=Ome;var iT,mW,oT,XI,nn,qh=!1;async function Ome(e=!0){return iT=bme.getHdbBasePath(),mW=xo.join(iT,"schema"),oT=xo.join(iT,"4_0_0_upgrade_tmp"),XI=xo.join(iT,"transactions"),console.info("Reindexing upgrade started for schemas"),Uo.notify("Reindexing upgrade started for schemas"),await gW(mW,!1,e),await Fi.pathExists(XI)&&(console.info(`
108
+ ${ge.MAX_CUSTOM_FUNCTION_PROCESSES} = ${yl.getDefaultConfig(Rl.HTTP_THREADS)}
109
+ `,n=TT.get("settings_path"),s=Fa.dirname(n),i=Fa.join(s,"3_1_0_upgrade_settings.bak");try{dr.info(`Backing up old settings file to: ${i}`),Ga.copySync(n,i)}catch(c){throw dr.error(c),console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),c}try{dr.info("New settings file values for 3.1.0 upgrade:",r),dr.info(`Creating new/upgraded settings file at '${n}'`),Ga.writeFileSync(n,r),dr.info("Updating env variables with new settings values")}catch(c){throw console.error("There was a problem writing the new settings file. Please check the log for details."),dr.error("Attempting to reset the settings file to its original state. Use the '.bak' file if this fails."),dr.error(c),Ga.copySync(i,n),c}TT.initSync();let o="New settings file for 3.1.0 upgrade successfully created.";return console.log(o),dr.info(o),o}a(OEe,"updateSettingsFile_3_1_0");function NEe(){let e=Fa.join(JW.getHomeDir(),ki.HDB_HOME_DIR_NAME,ki.LICENSE_KEY_DIR_NAME,ki.LICENSE_FILE_NAME),t=Fa.join(JW.getHomeDir(),ki.HDB_HOME_DIR_NAME,ki.LICENSE_KEY_DIR_NAME,ki.REG_KEY_FILE_NAME),r=Fa.join(TT.getHdbBasePath(),ki.LICENSE_KEY_DIR_NAME,ki.LICENSE_FILE_NAME),n=Fa.join(r,ki.LICENSE_FILE_NAME),s=Fa.join(r,ki.REG_KEY_FILE_NAME),i="Move license files for version 3.1.0";console.log(i),dr.info(i);let o="Creating .license directory";console.log(o),dr.info(o),Ga.mkdirpSync(r);try{Ga.accessSync(e);try{let c="Moving licence file";console.log(c),dr.info(c),Ga.moveSync(e,n);let l="License file successfully moved.";console.log(l),dr.info(l)}catch{let l="moving license file failed";console.error(l),dr.error(l)}}catch{let l=`license file '${e}' does not exist.`;console.warn(l),dr.warn(l)}try{Ga.accessSync(t);try{let c="Moving registration file";console.log(c),dr.info(c),Ga.moveSync(t,s);let l="Registration file successfully moved.";console.log(l),dr.info(l)}catch{let l="moving registration file failed";console.error(l),dr.error(l)}}catch{let l=`registration file '${t}' does not exist.`;console.warn(l),dr.warn(l)}}a(NEe,"moveLicenseFiles");mC.sync_functions.push(OEe);mC.sync_functions.push(NEe);XW.push(mC);ZW.exports=XW});var iz=I((qMe,sz)=>{"use strict";var ts=ft(),{insertRecords:wEe}=pc(),IEe=an(),qa=vt(),CEe=oe(),Po=j(),PEe=oe(),Fi=require("fs-extra"),Do=require("path"),DEe=require("cli-progress"),Xh=require("assert"),LEe=require("pino"),MEe=ce();sz.exports=vEe;var AT,tz,RT,EC,tn,Zh=!1;async function vEe(e=!0){return AT=MEe.getHdbBasePath(),tz=Do.join(AT,"schema"),RT=Do.join(AT,"4_0_0_upgrade_tmp"),EC=Do.join(AT,"transactions"),console.info("Reindexing upgrade started for schemas"),Po.notify("Reindexing upgrade started for schemas"),await rz(tz,!1,e),await Fi.pathExists(EC)&&(console.info(`
110
110
 
111
- Reindexing upgrade started for transaction logs`),Uo.notify("Reindexing upgrade started for transaction logs"),await gW(XI,!0,e)),Uo.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(qh?", but errors occurred":"")}a(Ome,"reindexUpgrade");async function gW(e,t,r){let n=await Fi.readdir(e),s=n.length;for(let i=0;i<s;i++){let o=n[i],c=xo.join(e,o.toString());if(o===".DS_Store")continue;let l=await Fi.readdir(c),u=l.length;for(let f=0;f<u;f++){let d=l[f];if(d!==".DS_Store"&&Fi.statSync(xo.join(c,d)).isDirectory())try{await Nme(o,d,t),nn.info(`Reindexing started for ${o}.${d}`),Uo.notify(`${t?"Transaction":"Schema"} reindexing started for ${o}.${d}`),await Ime(o,d,c,t,r),nn.info(`Reindexing completed for ${o}.${d}`),Uo.notify(`Reindexing completed for ${o}.${d}`)}catch(h){qh=!0,h.schema_path=c,h.table_name=d,Uo.error("There was an error with the reindex upgrade, check the logs in hdb/3_0_0_upgrade_tmp for more details"),Uo.error(h),nn.error(h),console.error(h)}}}if(!qh)try{await Fi.rm(oT,{recursive:!0})}catch{}}a(gW,"processTables");async function Nme(e,t,r){let s=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=xo.join(oT,s);await Fi.ensureDir(oT),await Fi.writeFile(i,""),nn=yme({level:"debug",formatters:{bindings(){}}},i)}a(Nme,"initPinoLogger");var wme=20;async function Ime(e,t,r,n,s){let i;try{i=await ts.openEnvironment(r,t,n)}catch(m){if(m.message==="MDB_INVALID: File is not an LMDB file"){Uo.notify(`${e}.${t} file is not from the old environment and has been skipped`),console.info(`${e}.${t} file is not from the old environment and has been skipped`),nn.error(m);return}throw m}let o=Dme(i.dbis),c=ts.openDBI(i,o),l=Object.keys(i.dbis),u=ts.statDBI(i,o);nn.info(`Old environment stats: ${JSON.stringify(u)}`);let f=new Rme.SingleBar({format:`${e}.${t} |{bar}| {percentage}% || {value}/{total} records`,barCompleteChar:"\u2588",barIncompleteChar:"\u2591",hideCursor:!0,clearOnComplete:!1});f.start(u.entryCount,0,{});let d=await ts.createEnvironment(r,t,!1);ts.createDBI(d,o,!1,!0);let h=[];try{for(let m of c.getRange({start:!1}))m.value={...m.value},h.push(m),n||e==="system"&&(t==="hdb_schema"&&(m.key=m.key.toString(),m.value.name=m.value.name.toString()),t==="hdb_table"&&(m.key=m.key.toString(),m.value.schema=m.value.schema.toString(),m.value.name=m.value.name.toString()),t==="hdb_attribute"&&(m.key=m.key.toString(),m.value.schema=m.value.schema.toString(),m.value.table=m.value.table.toString(),m.value.attribute=m.value.attribute.toString())),h.length>wme&&await _();await _()}catch(m){throw qh=!0,nn.error(m),m}async function _(){let m,A=h.map(({value:M})=>M);n?m=await Promise.all(A.map(M=>Cme(d,M))):m=await gme(d,o,l.filter(M=>M!=="__blob__"),A,!1);for(let M=0,F=h.length;M<F;M++){let{key:G,value:K}=h[M];nn.info(`Record hash value: ${G} hash: ${o}`);let ee;n?ee=m[M]:ee=m.written_hashes.indexOf(G)>-1,Gh(ee,!0),Pme(d,o,K[o],n),nn.info(`Insert success, written hashes: ${m.written_hashes}`),f.increment()}h=[],f.value/f.total*100%10===0&&Uo.notify(`${e}.${t} ${f.value}/${f.total} records inserted`),nn.info(`${f.value}/${f.total} records inserted`)}a(_,"finishOutstanding"),f.stop();let p=ts.statDBI(i,o),S=ts.statDBI(d,o);if(nn.info(`Old stats entry count: ${p.entryCount}. New stats entry count: ${S.entryCount}`),Gh.deepStrictEqual(p.entryCount,S.entryCount),await ts.closeEnvironment(i),await ts.closeEnvironment(d),delete global.lmdb_map[`${e}.${t}`],s){let m=xo.join(r,t),A=xo.join(m,"data.mdb"),w=xo.join(m,"lock.mdb");await Fi.unlink(A),await Fi.unlink(w),await Fi.rmdir(m),nn.info(`Deleted old environment files from schema folder: ${A}, ${w}`)}let g=await ts.openEnvironment(r,t),T=ts.statDBI(g,o);nn.info(`New stats: ${JSON.stringify(S)}. New stats after move: ${JSON.stringify(T)}`),Gh.deepStrictEqual(T.entryCount,S.entryCount),await ts.closeEnvironment(g),delete global.lmdb_map[`${e}.${t}`]}a(Ime,"processTable");async function Cme(e,t){ts.initializeDBIs(e,qa.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,qa.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[qa.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[qa.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),Ame.isEmpty(t.user_name)||e.dbis[qa.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let n of t.hash_values)e.dbis[qa.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n,r)})}a(Cme,"insertTransaction");function Pme(e,t,r,n){let i=e.dbis[t].get(r);Gh.deepStrictEqual(typeof i,"object");let o;if(n){let c={[qa.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[qa.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE]:i.hash_values};o=Object.entries(c)}else o=Object.entries(i);for(let[c,l]of o)if(c!==t&&e.dbis[c]!==void 0&&!Tme.isEmptyOrZeroLength(l))if(n&&c==="hash_value")for(let u=0,f=l.length;u<f;u++){let d=l[u];SW(e,c,d,r)}else SW(e,c,l,r)}a(Pme,"validateIndices");function SW(e,t,r,n){try{let s=!1,i=Sme.getIndexedValues(r);if(!i)return;for(let o of i)s=e.dbis[t].doesExist(o,n),s||nn.info(`Validate indices did not find value in new DBI: ${o}. Hash: ${n}`),Gh.deepStrictEqual(s,!0)}catch(s){qh=!0,nn.error(s),console.error(s)}}a(SW,"validateIndex");function Dme(e){let t;for(let[r,n]of Object.entries(e))if(n.__dbi_defintion__.is_hash_attribute===!0){t=r;break}return t}a(Dme,"getHashDBI")});var NW=P((IMe,OW)=>{"use strict";var aT=require("path"),$a=require("fs-extra"),Lme=jI(),bl=j(),RW=wt(),ZI=ce(),ci=(H(),D(q)),cT=ae(),Mme=require("properties-reader"),vme=Ks(),Ume=tm(),xme=Kr(),wMe=require("util"),Bme=xme.searchByValue,Hme=hn(),kme=og(),Fme=Ot(),Gme=AW(),yW=Js(),qme=nT(),Kh=new Lme("4.0.0"),bW=[],$h,Vh;async function $me(){try{if(await qme.upgradeCertsPrompt()){if(console.log("Generating new certificates."),$h){let t=cT.changeExtension($h,".bak");await $a.move($h,t)}if(Vh){let t=cT.changeExtension(Vh,".bak");await $a.move(Vh,t)}await yW.generateKeys()}else console.log("Using existing certificates."),yW.updateConfigCert($h,Vh,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}a($me,"generateNewKeys");async function Vme(){console.log("Updating HarperDB nodes."),bl.info("Updating HarperDB nodes.");let e=[];try{let t=new vme(ci.SYSTEM_SCHEMA_NAME,ci.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=Array.from(await Bme(t)),n=[];for(let i=0,o=r.length;i<o;i++){let c=r[i];if(!Fme.NATS_TERM_CONSTRAINTS_RX.test(c.name)){let f=`Node name '${c.name}' is invalid, must not contain ., * or >. Please change name and try again.`;throw console.error(f),f}let l={host:c.host,port:c.port};e.push(l);let u=[];for(let f=0,d=c.subscriptions.length;f<d;f++){let h=c.subscriptions[f],_=h.channel.split(":");u.push({schema:_[0],table:_[1],publish:h.publish,subscribe:h.subscribe})}n.push({name:c.name,subscriptions:u,system_info:{hdb_version:ci.PRE_4_0_0_VERSION,node_version:void 0,platform:void 0}})}if(cT.isEmptyOrZeroLength(n))return;let s=new Ume(ci.SYSTEM_SCHEMA_NAME,ci.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,n);await Hme.update(s)}catch(t){throw console.error("There was a problem updating the hdb_nodes table. Please check the log for details."),t}try{kme.setRoutes({server:"hub",routes:e})}catch(t){throw console.error("There was a problem setting the clustering routes. Please check the log for details."),t}}a(Vme,"updateNodes");async function Kme(){let e=ZI.get(ci.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(aT.join("config","settings.js"))){bl.info("pre 4.0.0 settings.js file not found, skipping settings file update");return}let t="Updating settings file for version 4.0.0";console.log(t),bl.info(t);let r=aT.dirname(e),n=ZI.get(ci.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),s=aT.join(n,"backup","4_0_0_upgrade_settings.bak"),i=aT.join(n,ci.HDB_CONFIG_FILE);try{bl.info(`Backing up old settings file to: ${s}`),console.log(`Backing up old settings file to: ${s}`),$a.copySync(e,s)}catch(d){throw console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),d}try{bl.info(`Creating new/upgraded settings file at '${i}'`),console.log(`Creating new/upgraded settings file at '${i}'`),bl.info("Updating env variables with new settings values");let d=RW.initOldConfig(e);$h=d[ci.CONFIG_PARAMS.TLS_CERTIFICATE.toLowerCase()],Vh=d[ci.CONFIG_PARAMS.TLS_PRIVATEKEY.toLowerCase()],RW.createConfigFile(d)}catch(d){throw console.log("There was a problem creating the new HarperDB config file. Please check the log for details."),d}let o=cT.getPropsFilePath();$a.accessSync(o,$a.constants.F_OK|$a.constants.R_OK);let l=Mme(o).get(ci.HDB_SETTINGS_NAMES.INSTALL_USER),u=`settings_path = ${i}
112
- install_user = ${l}`;try{$a.writeFileSync(o,u)}catch(d){throw console.log("There was a problem updating the HarperDB boot properties file. Please check the log for details."),d}try{ZI.initSync(!0)}catch(d){throw console.error("Unable to initialize new properties. Please check the log for details."),d}let f="New settings file for 4.0.0 upgrade successfully created.";try{$a.removeSync(r),console.log(f),bl.info(f)}catch(d){throw console.error("There was a problem deleting the old settings file and directory. Please check the log for details."),d}}a(Kme,"updateSettingsFile_4_0_0");Kh.async_functions.push(Kme);Kh.async_functions.push($me);Kh.async_functions.push(Gme);Kh.async_functions.push(Vme);bW.push(Kh);OW.exports=bW});var eC=P((PMe,PW)=>{"use strict";var Ol=ae(),Yme=(H(),D(q)),wW=j(),{DATA_VERSION:Wme,UPGRADE_VERSION:zme}=Yme.UPGRADE_JSON_FIELD_NAMES_ENUM,IW=EW(),lT=NW(),Nl=new Map;IW&&IW.forEach(e=>{Nl.set(e.version,e)});lT&&lT.forEach(e=>{Nl.set(e.version,e)});lT&&lT.forEach(e=>{Nl.set(e.version,e)});function Qme(){return[...Nl.keys()].sort(Ol.compareVersions)}a(Qme,"getSortedVersions");function CW(e){let t=e[Wme],r=e[zme];return Ol.isEmptyOrZeroLength(t)||Ol.isEmptyOrZeroLength(r)?(wW.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),wW.error("There was an error when trying to evaluate the version information for your instance. Trying to start the server anyways but it may fail. If you continue to have this problem, please contact support@harperdb.io."),[]):[...Nl.keys()].sort(Ol.compareVersions).filter(function(n){return Ol.compareVersions(n,t)>0&&Ol.compareVersions(n,r)<=0})}a(CW,"getVersionsForUpgrade");function jme(e){return CW(e).length>0}a(jme,"hasUpgradesRequired");function Jme(e){return Ol.isEmptyOrZeroLength(e)?null:Nl.has(e)?Nl.get(e):null}a(Jme,"getDirectiveByVersion");PW.exports={getSortedVersions:Qme,getDirectiveByVersion:Jme,getVersionsForUpgrade:CW,hasUpgradesRequired:jme}});var dT=P((LMe,UW)=>{"use strict";var Xme=require("util"),tC=require("chalk"),Zme=require("os"),LW=hn(),ege=Kr(),rs=(H(),D(q)),MW=sW(),nC=mR(),{UpgradeObject:DW}=aW(),{forceDowngradePrompt:tge}=nT(),{packageJson:rge}=_t(),uT=j(),Pd=ae(),sC=Gs(),nge=(De(),D(nt)),sge=eC(),ige=Xme.promisify(sC.setSchemaDataToGlobal),oge=ege.searchByValue,age="info_id",cge="2.9.9",lge="3.0.0";async function uge(e){let t=new MW.HdbInfoInsertObject(1,e,e),r=new nC.InsertObject(rs.OPERATIONS_ENUM.INSERT,rs.SYSTEM_SCHEMA_NAME,rs.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,rs.INFO_TABLE_HASH_ATTRIBUTE,[t]);return sC.setSchemaDataToGlobal(),LW.insert(r)}a(uge,"insertHdbInstallInfo");async function rC(e){let t,r=await vW(),n=new Map([[0,{}]]);for(let c of r)n.set(c.info_id,c);let i=Math.max.apply(null,[...n.keys()])+1;t=new MW.HdbInfoInsertObject(i,e,e);let o=new nC.InsertObject(rs.OPERATIONS_ENUM.INSERT,rs.SYSTEM_SCHEMA_NAME,rs.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,rs.INFO_TABLE_HASH_ATTRIBUTE,[t]);return await ige(),LW.insert(o)}a(rC,"insertHdbUpgradeInfo");async function vW(){let e=new nC.NoSQLSeachObject(rs.SYSTEM_SCHEMA_NAME,rs.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,age,rs.INFO_TABLE_HASH_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await oge(e))}catch(r){console.error(r)}return t}a(vW,"getAllHdbInfoRecords");async function dge(){let e=await vW();if(e.length===0)return;let t,r=new Map;for(let s of e)r.set(s.info_id,s);let n=Math.max.apply(null,[...r.keys()]);return t=r.get(n),t}a(dge,"getLatestHdbInfoRecord");async function fge(){uT.info("Checking if HDB software has been updated");try{let e=rge.version;if(!e)throw new Error("Could not find the version number in the package.json file");let t=await dge(),r;if(Pd.isEmpty(t))r=cge;else if(r=t.data_version_num,Pd.compareVersions(r.toString(),e.toString())>0){if(!Pd.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(tC.yellow(`This instance's data was last run on version ${r}`)),console.error(tC.red(`You have installed a version lower than the version that your data was created on or was upgraded to. This may cause issues and is currently not supported.${Zme.EOL}${rs.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");Pd.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(tC.yellow(`This instance's data was last run on version ${r}`)),await tge(new DW(r,e))?await rC(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(sC.setSchemaDataToGlobal(),_ge(r),e.toString()===r.toString())return;let n=new DW(r,e);if(sge.hasUpgradesRequired(n))return n;Pd.compareVersions(n.data_version.toString(),n.upgrade_version.toString())<0&&(await rC(n.upgrade_version),uT.notify(`HarperDB running on upgraded version: ${n.upgrade_version}`))}catch(e){throw uT.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),uT.fatal(e),e}}a(fge,"getVersionUpdateInfo");function _ge(e){let t=`You are attempting to upgrade from an old instance of HarperDB that is no longer supported. In order to upgrade to this version, you must do a fresh install. If you need support, please contact ${rs.HDB_SUPPORT_ADDRESS}`;if(!("hdb_info"in nge.databases.system))throw console.log(t),new Error(t);if(!Pd.isEmpty(e)&&e<lge)throw console.log(t),new Error(t)}a(_ge,"checkIfInstallIsSupported");UW.exports={insertHdbInstallInfo:uge,insertHdbUpgradeInfo:rC,getVersionUpdateInfo:fge}});var kW=P((vMe,HW)=>{"use strict";var fT=require("joi"),{boolean:hge,string:iC,number:pge}=fT.types(),xW=require("fs-extra"),Yh=(H(),D(q)),BW=require("path"),Ege=pt();HW.exports=mge;function mge(e){let t=iC.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=fT.object({[Yh.INSTALL_PROMPTS.ROOTPATH]:fT.custom(gge),[Yh.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:fT.alternatives([pge.min(0),iC]).allow("null",null),[Yh.INSTALL_PROMPTS.TC_AGREEMENT]:iC.valid("yes","YES","Yes"),[Yh.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[Yh.INSTALL_PROMPTS.CLUSTERING_ENABLED]:hge});return Ege.validateBySchema(e,r)}a(mge,"installValidator");function gge(e,t){if(xW.existsSync(BW.join(e,"system/hdb_user/data.mdb"))||xW.existsSync(BW.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}a(gge,"validateRootAvailable")});var GW=P((xMe,FW)=>{"use strict";var{mkdirpSync:Sge,copySync:Tge}=require("fs-extra"),Va=require("path"),Wh=(H(),D(q)),{PACKAGE_ROOT:Age}=_t(),aC=j(),Rge=kn(),oC=ro(),yge=ht();FW.exports=bge;async function bge(e){aC.trace("Mounting HarperDB"),wl(e),wl(Va.join(e,"backup")),wl(Va.join(e,"keys")),wl(Va.join(e,"keys",Wh.LICENSE_FILE_NAME)),wl(Va.join(e,"log")),wl(Va.join(e,"database")),wl(Va.join(e,"components")),Tge(Va.resolve(Age,"./utility/install/README.md"),Va.join(e,"README.md")),await Oge()}a(bge,"mountHdb");async function Oge(){let e=zf(),t=Object.keys(oC);for(let r=0;r<t.length;r++){let n=t[r],s=oC[n].hash_attribute;try{yge.initSystemSchemaPaths(Wh.SYSTEM_SCHEMA_NAME,n);let i=new e(Wh.SYSTEM_SCHEMA_NAME,n,s);i.attributes=oC[n].attributes;let o=i.attributes.find(({attribute:c})=>c===s);o.isPrimaryKey=!0,["hdb_user","hdb_role"].includes(n)&&(i.audit=!0),await Rge.createTable(n,i)}catch(i){throw aC.error(`issue creating environment for ${Wh.SYSTEM_SCHEMA_NAME}.${n}: ${i}`),i}}}a(Oge,"createLMDBTables");function wl(e){Sge(e,{mode:Wh.HDB_FILE_PERMISSIONS}),aC.info(`Directory ${e} created`)}a(wl,"makeDirectory")});var tz=P((FMe,ez)=>{"use strict";var lC=require("os"),YW=require("inquirer"),Ls=require("fs-extra"),Nge=require("properties-reader"),Cl=require("chalk"),qi=require("path"),wge=require("human-readable-ids").hri,Ige=require("ora"),Cge=require("yaml"),dr=j(),Ka=ce(),zh=ae(),hT=ec(),WW=dT(),{packageJson:zW}=_t(),de=(H(),D(q)),{CONFIG_PARAM_MAP:HMe,CONFIG_PARAMS:Pt}=de,Pge=kW(),Dge=GW(),uC=wt(),Lge=qn(),Mge=e_(),vge=VI(),Uge=Gs(),xge=require("util").promisify,Bge=xge(Uge.setSchemaDataToGlobal),qW=Js(),Il=a(e=>e,"PROMPT_ANSWER_TRANSFORMER"),kr=a(e=>Cl.magenta.bold(e),"HDB_PROMPT_MSG"),Hge="https://harperdb.io/legal/end-user-license-agreement",Ya=lC.EOL,Bo="",kge="yes",$W="Starting HarperDB install...",VW="HarperDB installation was successful.",KW="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",Fge="An out of date version of HarperDB is already installed.",cC="It appears that HarperDB is already installed. Exiting install...",Gge="Aborting install",kMe=new RegExp(/^([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$/),qge=new RegExp(/^[^\s.,*>]+$/),$ge=lC.homedir(),Vge=qi.join($ge,de.HDB_ROOT_DIR_NAME),Kge="HDB_ADMIN",Yge="CLUSTER_USER",Wge="dev",zge="localhost",_T={[Pt.HTTP_CORS]:!0,[Pt.HTTP_CORSACCESSLIST]:["*"],[Pt.HTTP_PORT]:9926,[Pt.AUTHENTICATION_AUTHORIZELOCAL]:!0,[Pt.THREADS_COUNT]:1,[Pt.THREADS_DEBUG]:!0,[Pt.LOGGING_STDSTREAMS]:!0,[Pt.LOGGING_LEVEL]:"info",[Pt.OPERATIONSAPI_NETWORK_PORT]:9925,[Pt.LOCALSTUDIO_ENABLED]:!0},Hr={DESTINATION:"Please enter a destination for HarperDB:",HDB_USERNAME:"Please enter a username for the administrative user:",HDB_PASS:"Please enter a password for the administrative user:",NODE_NAME:"Please enter a unique name for this node:",CLUSTER_USERNAME:"Please enter a username for the CLUSTER_USER:",CLUSTER_PASS:"Please enter a password for the CLUSTER_USER:",DEFAULTS_MODE:"Default Config - dev (easy access/debugging) or prod (security/performance): (dev/prod)",REPLICATION_HOSTNAME:"Please enter the hostname for this server:"},Wa=hT([de.INSTALL_PROMPTS.HDB_CONFIG]),Gi,QW=!1,dC=!1,jW=!1;ez.exports={install:JW,updateConfigEnv:iSe,setIgnoreExisting:oSe};JW.createSuperUser=ZW;async function JW(){console.log(kr(Ya+$W+Ya)),dr.notify($W);let e;Wa[de.INSTALL_PROMPTS.HDB_CONFIG]&&(e=Qge());let t=Jge();Object.assign(t,e),t[de.INSTALL_PROMPTS.TC_AGREEMENT]&&t[de.INSTALL_PROMPTS.ROOTPATH]&&t[de.INSTALL_PROMPTS.HDB_ADMIN_USERNAME]&&t[de.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]&&t[de.INSTALL_PROMPTS.DEFAULTS_MODE]===void 0&&(jW=!0,t[de.INSTALL_PROMPTS.DEFAULTS_MODE]="prod");let r=Pge(t);if(r)throw r.message;await Xge(),await Zge(t);let n=await jge(t);Gi=n[de.INSTALL_PROMPTS.ROOTPATH],Wa[de.INSTALL_PROMPTS.HDB_CONFIG]&&qi.dirname(Wa[de.INSTALL_PROMPTS.HDB_CONFIG])===Gi&&(QW=!0),!dC&&!Wa[de.INSTALL_PROMPTS.HDB_CONFIG]&&await Ls.pathExists(qi.join(Gi,de.HDB_CONFIG_FILE))&&(console.error(cC),process.exit());let s=Ige({prefixText:kr("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),zh.isEmpty(Gi))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");Ka.setHdbBasePath(Gi),await Dge(Gi),await eSe(),await tSe(n),dr.initLogSettings(!0),await ZW(n),await nSe(n),await qW.updateConfigCert(),await qW.generateCertsKeys(),await sSe(),vge(),s.stop(),console.log(kr(Ya+VW+Ya)),dr.notify(VW)}a(JW,"install");function Qge(){let e=Cge.parseDocument(Ls.readFileSync(Wa[de.INSTALL_PROMPTS.HDB_CONFIG],"utf8"),{simpleKeys:!0}),t=uC.flattenConfig(e.toJSON());return t[de.CONFIG_PARAMS.ROOTPATH.toLowerCase()]&&(t.ROOTPATH=t[de.CONFIG_PARAMS.ROOTPATH.toLowerCase()]),t}a(Qge,"getConfigFromFile");async function jge(e){dr.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:Il,when:Ho(e[de.INSTALL_PROMPTS.ROOTPATH],Hr.DESTINATION),name:de.INSTALL_PROMPTS.ROOTPATH,prefix:Bo,default:Vge,validate:a(async s=>Ds(s)?Ds(s):await Ls.pathExists(qi.join(s,"system","hdb_user.mdb"))?`'${s}' is already in use. Please enter a different path.`:!0,"validate"),message:kr(Hr.DESTINATION)},{type:"input",transformer:Il,when:Ho(e[de.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],Hr.HDB_USERNAME),name:de.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:Bo,default:Kge,validate:a(s=>Ds(s)?Ds(s):(t=s,!0),"validate"),message:kr(Hr.HDB_USERNAME)},{type:"password",when:Ho(e[de.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],Hr.HDB_PASS),name:de.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:Bo,validate:a(s=>Ds(s)?Ds(s):!0,"validate"),message:kr(Hr.HDB_PASS)},{type:"input",transformer:Il,when:Ho(e[de.INSTALL_PROMPTS.DEFAULTS_MODE],Hr.DEFAULTS_MODE),name:de.INSTALL_PROMPTS.DEFAULTS_MODE,prefix:Bo,default:Wge,validate:a(s=>Ds(s)?Ds(s):s!=="dev"&&s!=="prod"?`Invalid response '${s}', options are 'dev' or 'prod'.`:!0,"validate"),message:kr(Hr.DEFAULTS_MODE)}];if(jW||r.push({type:"input",name:de.INSTALL_PROMPTS.REPLICATION_HOSTNAME,transformer:Il,when:Ho(e[de.INSTALL_PROMPTS.REPLICATION_HOSTNAME],Hr.REPLICATION_HOSTNAME),prefix:Bo,default:zge,message:kr(Hr.REPLICATION_HOSTNAME)}),zh.autoCastBoolean(e[de.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let s=[{type:"input",transformer:Il,when:Ho(e[de.INSTALL_PROMPTS.CLUSTERING_NODENAME],Hr.NODE_NAME),name:de.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:Bo,default:wge.random(),validate:a(i=>qge.test(i)?!0:"Invalid node name, must not contain ., * or >","validate"),message:kr(Hr.NODE_NAME)},{type:"input",transformer:Il,when:Ho(e[de.INSTALL_PROMPTS.CLUSTERING_USER],Hr.CLUSTER_USERNAME),name:de.INSTALL_PROMPTS.CLUSTERING_USER,prefix:Bo,default:Yge,validate:a(i=>Ds(i)?Ds(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,"validate"),message:kr(Hr.CLUSTER_USERNAME)},{type:"password",when:Ho(e[de.INSTALL_PROMPTS.CLUSTERING_PASSWORD],Hr.CLUSTER_PASS),name:de.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:Bo,validate:a(i=>Ds(i)?Ds(i):!0,"validate"),message:kr(Hr.CLUSTER_PASS)}];r.push(...s)}let n=await YW.prompt(r);if(Object.keys(n).length===0)return e;for(let s in n)e[s]===void 0&&(e[s]=n[s]);return e}a(jge,"installPrompts");function Ho(e,t){return e!==void 0?(t.includes("password")?(console.log(`${kr(t)} ${Cl.gray("[hidden]")}`),dr.trace(`${kr(t)} [hidden]`)):(console.log(`${kr(t)} ${e}`),dr.trace(`${kr(t)} ${e}`)),!1):!0}a(Ho,"displayCmdEnvVar");function Ds(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}a(Ds,"checkForEmptyValue");function Jge(){let e=Object.keys(de.INSTALL_PROMPTS),t=hT(e),r=hT(Object.keys(de.CONFIG_PARAM_MAP),!0),n={};for(let s of e){let i=de.CONFIG_PARAM_MAP[s.toLowerCase()];t[s]?i===void 0?n[s]=t[s]:n[i.toUpperCase()]=t[s]:i!==void 0&&r[i.toLowerCase()]&&(n[s]=r[i.toLowerCase()])}return n}a(Jge,"checkForPromptOverride");async function Xge(){dr.trace("Checking for existing install.");let e=zh.getPropsFilePath(),t=await Ls.pathExists(e),r;if(t){dr.trace(`Install found an existing boot prop file at:${e}`);let n=Nge(e),s=uC.getConfigValue(de.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||n.get(de.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await Ls.pathExists(s)}if(!t&&zh.noBootFile()&&(r=!0),r&&!dC){if(dr.trace(`Install found existing HDB config at:${e}`),await WW.getVersionUpdateInfo()){let s=`Please use \`harperdb upgrade\` to update to ${zW.version}. Exiting install...`;console.log(Ya+Cl.magenta.bold(Fge)),console.log(Cl.magenta.bold(s)),dr.error(s)}else console.log(Ya+Cl.magenta.bold(cC)),dr.error(cC);process.exit(0)}}a(Xge,"checkForExistingInstall");async function Zge(e){dr.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${Hge}${Ya}and can be viewed by typing or copying and pasting the URL into your web browser.${Ya}I agree to the HarperDB Terms and Conditions: (yes/no)`,r={prefix:Bo,transformer:Il,when:Ho(e[de.INSTALL_PROMPTS.TC_AGREEMENT],t),name:de.INSTALL_PROMPTS.TC_AGREEMENT,message:kr(t),validate:a(s=>s.toLowerCase()==="yes"||s.toLowerCase()==="no"?!0:Cl.yellow("Please enter 'yes' or 'no'"),"validate")},n=await YW.prompt([r]);n[de.INSTALL_PROMPTS.TC_AGREEMENT]&&n[de.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==kge&&(console.log(Cl.yellow(KW)),dr.error(KW),process.exit(0))}a(Zge,"termsAgreement");async function eSe(){let e=qi.join(Gi,de.HDB_CONFIG_FILE),t;try{t=lC.userInfo().username}catch{t=process.env.USERNAME||process.env.USER||process.env.LOGNAME||process.env.LNAME||process.env.SUDO_USER}if(t){let r=`settings_path = ${e}
113
- install_user = ${t}`,n=zh.getHomeDir(),s=qi.join(n,de.HDB_HOME_DIR_NAME),i=qi.join(s,de.LICENSE_KEY_DIR_NAME);try{Ls.mkdirpSync(s,{mode:de.HDB_FILE_PERMISSIONS}),Ls.mkdirpSync(i,{mode:de.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${de.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let o=qi.join(s,de.BOOT_PROPS_FILE_NAME);try{await Ls.writeFile(o,r)}catch(c){throw dr.error(`There was an error creating the boot file at path: ${o}`),c}Ka.setProperty(de.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),Ka.setProperty(de.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),Ka.setProperty(Ka.BOOT_PROPS_FILE_PATH,o)}}a(eSe,"createBootPropertiesFile");async function tSe(e){dr.trace("Creating HarperDB config file");let t=hT(Object.keys(de.CONFIG_PARAM_MAP),!0);if(Object.assign(t,e),e[de.INSTALL_PROMPTS.DEFAULTS_MODE]==="dev"){process.env.DEV_MODE="true";for(let r in _T){if(r===Pt.HTTP_PORT&&t[Pt.HTTP_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??_T[r],t[Pt.HTTP_SECUREPORT]=null;continue}else if(r===Pt.HTTP_PORT)continue;if(r===Pt.OPERATIONSAPI_NETWORK_PORT&&t[Pt.OPERATIONSAPI_NETWORK_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??_T[r],t[Pt.OPERATIONSAPI_NETWORK_SECUREPORT]=null;continue}else if(r===Pt.OPERATIONSAPI_NETWORK_PORT)continue;t[r.toLowerCase()]===void 0&&(t[r]=_T[r])}}else t[Pt.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]&&(t[Pt.OPERATIONSAPI_NETWORK_SECUREPORT]=null),t[Pt.HTTP_PORT.toLowerCase()]&&(t[Pt.HTTP_SECUREPORT]=null);try{Wa[de.INSTALL_PROMPTS.HDB_CONFIG]||uC.createConfigFile(t),Ka.initSync()}catch(r){rSe(r)}}a(tSe,"createConfigFile");function rSe(e){dr.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(Gge);let t=qi.resolve(Ka.get(Ka.BOOT_PROPS_FILE_PATH),"../");t&&Ls.removeSync(t),Gi&&(QW?Ls.readdirSync(Gi,{withFileTypes:!0}).forEach(n=>{let s=qi.join(n.path,n.name);s!==Wa[de.INSTALL_PROMPTS.HDB_CONFIG]&&Ls.removeSync(s)}):Ls.removeSync(Gi)),process.exit(1)}a(rSe,"rollbackInstall");async function XW(e,t){dr.trace("Creating admin user"),await Bge();let r;try{r=await Mge.addRole(e)}catch(n){if(n.message.includes("already exists"))t=void 0;else throw n.message+="Error creating role",n}if(t)try{t.role=r.role,await Lge.addUser(t)}catch(n){throw n.message=`Error creating user - ${n}`,n}}a(XW,"createAdminUser");async function ZW(e){dr.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[de.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[de.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await XW(t,r),delete e[de.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[de.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}a(ZW,"createSuperUser");async function nSe(e){dr.trace("Creating Cluster user.");let t;e[de.INSTALL_PROMPTS.CLUSTERING_USER]&&e[de.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[de.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[de.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await XW({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[de.INSTALL_PROMPTS.CLUSTERING_USER],delete e[de.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}a(nSe,"createClusterUser");async function sSe(){let e=zW.version;if(e)await WW.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}a(sSe,"insertHdbVersionInfo");function iSe(e){Wa[de.INSTALL_PROMPTS.HDB_CONFIG]=e}a(iSe,"updateConfigEnv");function oSe(e){dC=e}a(oSe,"setIgnoreExisting")});var sz=P((qMe,nz)=>{"use strict";var fC=ae(),ns=j(),rz=eC();nz.exports={processDirectives:aSe};async function aSe(e){console.log("Starting upgrade process...");let t=rz.getVersionsForUpgrade(e),r=uSe(t),n=[],s=r.length;for(let i=0;i<s;i++){let o=r[i],c=`Running upgrade for version ${o.version}`;ns.notify(c),console.log(c);let l=[],u=[];try{l=cSe(o.sync_functions)}catch(f){throw ns.error(`Error while running an upgrade script for ${o.version}`),f}try{u=await lSe(o.async_functions)}catch(f){throw ns.error(`Error while running an upgrade script for ${o.version}`),f}n.push(...l,...u)}return n}a(aSe,"processDirectives");function cSe(e){if(fC.isEmptyOrZeroLength(e))return ns.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return ns.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(ns.info(`Running function ${r.name}`),!(r instanceof Function)){ns.info("Variable being processed is not a function");continue}let n=r();ns.info(n),t.push(n)}return t}a(cSe,"runSyncFunctions");async function lSe(e){if(fC.isEmptyOrZeroLength(e))return ns.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return ns.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let n=0;n<r;n++){let s=e[n];if(ns.info(`Running function ${s.name}`),!(s instanceof Function)){ns.info("Variable being processed is not a function");continue}let i=await s();ns.info(i),t.push(i)}return t}a(lSe,"runAsyncFunctions");function uSe(e){if(fC.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let n=rz.getDirectiveByVersion(r);n&&t.push(n)}return t}a(uSe,"getUpgradeDirectivesToInstall")});var dz=P((VMe,uz)=>{"use strict";var pT=ce();pT.initSync();var cz=require("chalk"),iz=require("fs-extra"),Fo=j(),ko=(H(),D(q)),dSe=sz(),_C=ae(),lz=dT(),fSe=nT(),oz=KT(),_Se=Gs(),{packageJson:az}=_t(),hSe=require("util").promisify,pSe=hSe(_Se.setSchemaDataToGlobal),hC,{UPGRADE_VERSION:pC}=ko.UPGRADE_JSON_FIELD_NAMES_ENUM;uz.exports={upgrade:ESe};async function ESe(e){await pSe(),hC===void 0&&(hC=z_()),iz.existsSync(pT.get(pT.BOOT_PROPS_FILE_PATH))||(Qh("The hdb_boot_properties file was not found. Please install HDB.",ko.LOG_LEVELS.ERROR),process.exit(1)),iz.existsSync(pT.get(ko.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))||(Qh("The hdb settings file was not found. Please make sure HDB is installed.",ko.LOG_LEVELS.ERROR),process.exit(1));let t=e;t||(t=await lz.getVersionUpdateInfo(),t||(console.log("HarperDB version is current"),process.exit(0))),Qh(`This version of HarperDB is ${az.version}`,ko.LOG_LEVELS.INFO);let r=t[pC]??az.version;r||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${ko.HDB_SUPPORT_ADDRESS}`),Fo.notify("Missing new version field from upgrade info object"),process.exit(1)),await mSe();let n,s=0;try{n=await fSe.forceUpdatePrompt(t)}catch(i){Fo.error("There was an error when prompting user about upgrade."),Fo.error(i),n=!1,s=1}n||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(s)),Fo.info(`Starting upgrade to version ${r}`),await gSe(t),Qh(`HarperDB was successfully upgraded to version ${t[pC]}`,ko.LOG_LEVELS.INFO)}a(ESe,"upgrade");async function mSe(){let e=!1,t=await oz.findPs(ko.HDB_PROC_NAME);if(_C.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await oz.findPs("hdb_express");_C.isEmptyOrZeroLength(r)||(e=!0)}if(!e){let r=await hC.list();_C.isEmptyOrZeroLength(r)||(e=!0)}if(e){let r="HarperDB is running, please stop all HarperDB services with 'harperdb stop' and run the upgrade command again.";console.log(cz.red(r)),Fo.error(r),process.exit(1)}}a(mSe,"checkIfRunning");async function gSe(e){try{await dSe.processDirectives(e)}catch(t){throw Qh("There was an error during the data upgrade. Please check the logs.",ko.LOG_LEVELS.ERROR),t}try{await lz.insertHdbUpgradeInfo(e[pC])}catch(t){Fo.error("Error updating the 'hdb_info' system table."),Fo.error(t)}}a(gSe,"runUpgrade");function Qh(e,t=void 0){t||(t=Fo.info),Fo[t](e),console.log(cz.magenta(e))}a(Qh,"printToLogAndConsole")});var Ez=P((YMe,pz)=>{"use strict";var{promises:mC,createReadStream:SSe,createWriteStream:TSe}=require("fs"),{createGzip:ASe}=require("zlib"),{promisify:RSe}=require("util"),{pipeline:ySe}=require("stream"),bSe=RSe(ySe),OSe=require("path"),Dl=ce();Dl.initSync();var Pl=j(),{CONFIG_PARAMS:jh,ITC_EVENT_TYPES:NSe}=(H(),D(q)),{onMessageFromWorkers:wSe}=rt(),ISe=6e4,CSe="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",PSe="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",EC,_z;pz.exports=hz;wSe(e=>{e.type===NSe.RESTART&&(Dl.initSync(!0),clearInterval(_z),Dl.get(jh.LOGGING_ROTATION_ENABLED)&&hz())});async function hz(){try{let e=Pl.getLogFilePath(),t=Dl.get(jh.LOGGING_ROTATION_MAXSIZE),r=Dl.get(jh.LOGGING_ROTATION_INTERVAL);if(!t&&!r){Pl.error(CSe);return}let n=Dl.get(jh.LOGGING_ROTATION_PATH);if(!n){Pl.error(PSe);return}let s;if(t){let o=t.slice(-1),c=t.slice(0,-1);o==="G"?s=c*1e9:o==="M"?s=c*1e6:s=c*1e3}let i;if(r){let o=r.slice(-1),c=r.slice(0,-1);o==="D"?i=c*1440:o==="H"?i=c*60:i=c}EC=Date.now()/6e4,Pl.trace("Log rotate enabled, maxSize:",t,"interval:",r),_z=setInterval(async()=>{if(s){let o;o=await mC.stat(e),o.size>=s&&await fz(e,n)}i&&Date.now()/6e4-EC>=i&&(await fz(e,n),EC=Date.now()/6e4)},ISe).unref()}catch(e){Pl.error(e)}}a(hz,"logRotator");async function fz(e,t){let r=Dl.get(jh.LOGGING_ROTATION_COMPRESS),n=OSe.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.${r?"log.gz":"log"}`);r?(await bSe(SSe(e),ASe(),TSe(n)),await mC.unlink(e)):await mC.rename(e,n),Pl.closeLogFile(),Pl.notify(`hdb.log rotated, old log moved to ${n}`)}a(fz,"moveLogFile")});var bz=P(yz=>{"use strict";var ge=ce();ge.initSync();Qu();var kt=(H(),D(q)),{CONFIG_PARAMS:we}=kt,ss=j(),Go=require("fs-extra"),qo=require("path"),DSe=VI(),{install:LSe}=tz(),gC=require("chalk"),{packageJson:MSe,PACKAGE_ROOT:vSe}=_t(),$o=ae(),SC=wt(),gz=ec(),mz=hg(),USe=dz(),xSe=Ez(),{compactOnStart:BSe}=(AN(),D(TN)),HSe=require("minimist"),kSe=Js(),{startHTTPThreads:FSe}=(Vw(),D(W1)),GSe=dT(),{isMainThread:qSe}=require("worker_threads"),zMe=ro(),QMe=oo(),jMe=uy(),JMe=zf(),ET=(H(),D(q)),$i,Dd,Sz=!1,$Se="Upgrade complete. Starting HarperDB.",VSe="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",KSe="HarperDB not found, starting install process.",YSe="There was an error during install, check install_log.log for more details. Exiting.",WSe="HarperDB successfully started.";function zSe(){if(!Sz){let e=a(()=>{Go.removeSync(qo.join(ge.get(kt.CONFIG_PARAMS.ROOTPATH),kt.HDB_PID_FILE)),process.exit(0)},"remove_hdb_pid");process.on("exit",()=>{e()}),process.on("SIGINT",()=>{e()}),process.on("SIGQUIT",()=>{e()}),process.on("SIGTERM",()=>{e()})}}a(zSe,"addExitListeners");async function Tz(e=!1,t=!1){if(console.log(gC.magenta("Starting HarperDB...")),ss.suppressLogging?.(()=>{console.log(gC.magenta(""+Go.readFileSync(qo.join(vSe,"utility/install/ascii_logo.txt"))))}),await Rz()===!1){console.log(KSe);try{await LSe()}catch(l){console.error(YSe,l),ss.error(l),process.exit(1)}}if(!e){let l=gz(Object.keys(kt.CONFIG_PARAM_MAP),!0);!$o.isEmpty(l)&&!$o.isEmptyOrZeroLength(Object.keys(l))&&SC.updateConfigValue(void 0,void 0,l,!0,!0)}let r,n=Dd?.service==="clustering";Dd?.service&&!n&&(console.error("Unrecognized service argument"),process.exit(1));let s=qo.join(ge.get(kt.CONFIG_PARAMS.ROOTPATH),kt.HDB_PID_FILE),i=ZSe(s);i&&i!==1&&eTe(i)&&(n?r=!0:(console.error(`Error: HarperDB is already running (pid: ${i})`),process.exit(4))),$i===void 0&&($i=z_()),n&&(r||(console.error("HarperDB must be running to start clustering."),process.exit()),ge.get(kt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY)||(console.error("Clustering must be setup and enabled in harperdb-config."),process.exit()),console.log("Starting clustering."),await mz.generateNatsConfig(),await $i.startClusteringProcesses(!0),process.exit()),zSe(),await Go.writeFile(qo.join(ge.get(ET.CONFIG_PARAMS.ROOTPATH),ET.HDB_PID_FILE),`${process.pid}`),ss.info("HarperDB PID",process.pid);let o;try{let l=await GSe.getVersionUpdateInfo();l!==void 0&&(o=l[kt.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await USe.upgrade(l),console.log($Se))}catch(l){o?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${o}. Exiting HarperDB.`,l),ss.error(l)):(console.error(VSe,l),ss.error(l)),process.exit(1)}DSe(),JSe(),await kSe.reviewSelfSignedCert(),$o.autoCastBoolean(ge.get(kt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&qSe&&await mz.generateNatsConfig(t)}a(Tz,"initialize");async function QSe(e=!1){try{Dd=HSe(process.argv),Dd.ROOTPATH&&SC.updateConfigObject("settings_path",qo.join(Dd.ROOTPATH,kt.HDB_CONFIG_FILE)),await Tz(e,!0),ge.get(kt.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await BSe();let t=process.env.IS_SCRIPTED_SERVICE&&!Dd.service;$o.autoCastBoolean(ge.get(kt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&(t||await $i.startClusteringProcesses(),await $i.startClusteringThreads()),await FSe(process.env.DEV_MODE?1:ge.get(ET.CONFIG_PARAMS.THREADS_COUNT)??ge.get(ET.CONFIG_PARAMS.THREADS)),ge.get(kt.CONFIG_PARAMS.LOGGING_ROTATION_ENABLED)&&await xSe(),t||Az()}catch(t){console.error(t),ss.error(t),process.exit(1)}}a(QSe,"main");function Az(){ss.suppressLogging(()=>{console.log(gC.magenta(`HarperDB ${MSe.version} successfully started`))}),ss.notify(WSe)}a(Az,"started");async function jSe(e=!0){Sz=!e;try{$i===void 0&&($i=z_()),$i.enterPM2Mode(),await Tz(),$o.autoCastBoolean(ge.get(kt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&await $i.startClusteringProcesses(),await $i.startService(kt.PROCESS_DESCRIPTORS.HDB),Az(),e&&process.exit(0)}catch(t){console.error(t),ss.error(t),process.exit(1)}}a(jSe,"launch");function JSe(){let e=qo.join(ge.get(kt.CONFIG_PARAMS.ROOTPATH),kt.LICENSE_KEY_DIR_NAME,kt.LICENSE_FILE_NAME),t=qo.join(e,kt.LICENSE_FILE_NAME),r=qo.join(e,kt.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:n,HARPERDB_LICENSE:s}=gz(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if($o.isEmpty(n)||$o.isEmpty(s))return;Go.mkdirpSync(e),Go.writeFileSync(r,n),Go.writeFileSync(t,s)}catch(n){let s=`Failed to write license & fingerprint due to: ${n.message}`;console.error(s),ss.error(s)}}a(JSe,"writeLicenseFromVars");Object.assign(yz,{launch:jSe,main:QSe,isHdbInstalled:Rz,startupLog:XSe});async function Rz(){try{await Go.stat($o.getPropsFilePath()),await Go.stat(ge.get(kt.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}catch(e){if($o.noBootFile())return!0;if(e.code==="ENOENT")return!1;throw ss.error(`Error checking for HDB install - ${e}`),e}return!0}a(Rz,"isHdbInstalled");function XSe(e){let r=a(_=>_.padEnd(20),"pad"),n=`
114
- `;ge.get(we.REPLICATION_HOSTNAME)&&(n+=`${r("Hostname:")}${ge.get(we.REPLICATION_HOSTNAME)}
115
- `),ge.get(we.REPLICATION_URL)&&(n+=`${r("Replication Url:")}${ge.get(we.REPLICATION_URL)}
116
- `),n+=`${r("Worker Threads:")}${ge.get(we.THREADS_COUNT)}
117
- `,n+=`${r("Root Path:")}${ge.get(we.ROOTPATH)}
118
- `,ge.get(we.THREADS_DEBUG)!==!1&&(n+=`${r("Debugging:")}enabled: true`,n+=ge.get(we.THREADS_DEBUG_PORT)?`, TCP: ${ge.get(we.THREADS_DEBUG_PORT)}
111
+ Reindexing upgrade started for transaction logs`),Po.notify("Reindexing upgrade started for transaction logs"),await rz(EC,!0,e)),Po.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(Zh?", but errors occurred":"")}a(vEe,"reindexUpgrade");async function rz(e,t,r){let n=await Fi.readdir(e),s=n.length;for(let i=0;i<s;i++){let o=n[i],c=Do.join(e,o.toString());if(o===".DS_Store")continue;let l=await Fi.readdir(c),u=l.length;for(let f=0;f<u;f++){let d=l[f];if(d!==".DS_Store"&&Fi.statSync(Do.join(c,d)).isDirectory())try{await UEe(o,d,t),tn.info(`Reindexing started for ${o}.${d}`),Po.notify(`${t?"Transaction":"Schema"} reindexing started for ${o}.${d}`),await BEe(o,d,c,t,r),tn.info(`Reindexing completed for ${o}.${d}`),Po.notify(`Reindexing completed for ${o}.${d}`)}catch(h){Zh=!0,h.schema_path=c,h.table_name=d,Po.error("There was an error with the reindex upgrade, check the logs in hdb/3_0_0_upgrade_tmp for more details"),Po.error(h),tn.error(h),console.error(h)}}}if(!Zh)try{await Fi.rm(RT,{recursive:!0})}catch{}}a(rz,"processTables");async function UEe(e,t,r){let s=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=Do.join(RT,s);await Fi.ensureDir(RT),await Fi.writeFile(i,""),tn=LEe({level:"debug",formatters:{bindings(){}}},i)}a(UEe,"initPinoLogger");var xEe=20;async function BEe(e,t,r,n,s){let i;try{i=await ts.openEnvironment(r,t,n)}catch(E){if(E.message==="MDB_INVALID: File is not an LMDB file"){Po.notify(`${e}.${t} file is not from the old environment and has been skipped`),console.info(`${e}.${t} file is not from the old environment and has been skipped`),tn.error(E);return}throw E}let o=FEe(i.dbis),c=ts.openDBI(i,o),l=Object.keys(i.dbis),u=ts.statDBI(i,o);tn.info(`Old environment stats: ${JSON.stringify(u)}`);let f=new DEe.SingleBar({format:`${e}.${t} |{bar}| {percentage}% || {value}/{total} records`,barCompleteChar:"\u2588",barIncompleteChar:"\u2591",hideCursor:!0,clearOnComplete:!1});f.start(u.entryCount,0,{});let d=await ts.createEnvironment(r,t,!1);ts.createDBI(d,o,!1,!0);let h=[];try{for(let E of c.getRange({start:!1}))E.value={...E.value},h.push(E),n||e==="system"&&(t==="hdb_schema"&&(E.key=E.key.toString(),E.value.name=E.value.name.toString()),t==="hdb_table"&&(E.key=E.key.toString(),E.value.schema=E.value.schema.toString(),E.value.name=E.value.name.toString()),t==="hdb_attribute"&&(E.key=E.key.toString(),E.value.schema=E.value.schema.toString(),E.value.table=E.value.table.toString(),E.value.attribute=E.value.attribute.toString())),h.length>xEe&&await _();await _()}catch(E){throw Zh=!0,tn.error(E),E}async function _(){let E,A=h.map(({value:v})=>v);n?E=await Promise.all(A.map(v=>HEe(d,v))):E=await wEe(d,o,l.filter(v=>v!=="__blob__"),A,!1);for(let v=0,F=h.length;v<F;v++){let{key:G,value:Y}=h[v];tn.info(`Record hash value: ${G} hash: ${o}`);let te;n?te=E[v]:te=E.written_hashes.indexOf(G)>-1,Xh(te,!0),kEe(d,o,Y[o],n),tn.info(`Insert success, written hashes: ${E.written_hashes}`),f.increment()}h=[],f.value/f.total*100%10===0&&Po.notify(`${e}.${t} ${f.value}/${f.total} records inserted`),tn.info(`${f.value}/${f.total} records inserted`)}a(_,"finishOutstanding"),f.stop();let p=ts.statDBI(i,o),S=ts.statDBI(d,o);if(tn.info(`Old stats entry count: ${p.entryCount}. New stats entry count: ${S.entryCount}`),Xh.deepStrictEqual(p.entryCount,S.entryCount),await ts.closeEnvironment(i),await ts.closeEnvironment(d),delete global.lmdb_map[`${e}.${t}`],s){let E=Do.join(r,t),A=Do.join(E,"data.mdb"),O=Do.join(E,"lock.mdb");await Fi.unlink(A),await Fi.unlink(O),await Fi.rmdir(E),tn.info(`Deleted old environment files from schema folder: ${A}, ${O}`)}let g=await ts.openEnvironment(r,t),R=ts.statDBI(g,o);tn.info(`New stats: ${JSON.stringify(S)}. New stats after move: ${JSON.stringify(R)}`),Xh.deepStrictEqual(R.entryCount,S.entryCount),await ts.closeEnvironment(g),delete global.lmdb_map[`${e}.${t}`]}a(BEe,"processTable");async function HEe(e,t){ts.initializeDBIs(e,qa.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,qa.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[qa.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[qa.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),PEe.isEmpty(t.user_name)||e.dbis[qa.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let n of t.hash_values)e.dbis[qa.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n,r)})}a(HEe,"insertTransaction");function kEe(e,t,r,n){let i=e.dbis[t].get(r);Xh.deepStrictEqual(typeof i,"object");let o;if(n){let c={[qa.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[qa.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE]:i.hash_values};o=Object.entries(c)}else o=Object.entries(i);for(let[c,l]of o)if(c!==t&&e.dbis[c]!==void 0&&!CEe.isEmptyOrZeroLength(l))if(n&&c==="hash_value")for(let u=0,f=l.length;u<f;u++){let d=l[u];nz(e,c,d,r)}else nz(e,c,l,r)}a(kEe,"validateIndices");function nz(e,t,r,n){try{let s=!1,i=IEe.getIndexedValues(r);if(!i)return;for(let o of i)s=e.dbis[t].doesExist(o,n),s||tn.info(`Validate indices did not find value in new DBI: ${o}. Hash: ${n}`),Xh.deepStrictEqual(s,!0)}catch(s){Zh=!0,tn.error(s),console.error(s)}}a(nz,"validateIndex");function FEe(e){let t;for(let[r,n]of Object.entries(e))if(n.__dbi_defintion__.is_hash_attribute===!0){t=r;break}return t}a(FEe,"getHashDBI")});var uz=I((KMe,lz)=>{"use strict";var yT=require("path"),$a=require("fs-extra"),GEe=pC(),bl=j(),oz=It(),gC=ce(),ai=(H(),D(q)),bT=oe(),qEe=require("properties-reader"),$Ee=qs(),VEe=uE(),KEe=$r(),VMe=require("util"),YEe=KEe.searchByValue,WEe=hn(),zEe=gg(),QEe=Nt(),jEe=iz(),az=Qs(),JEe=ST(),rp=new GEe("4.0.0"),cz=[],ep,tp;async function XEe(){try{if(await JEe.upgradeCertsPrompt()){if(console.log("Generating new certificates."),ep){let t=bT.changeExtension(ep,".bak");await $a.move(ep,t)}if(tp){let t=bT.changeExtension(tp,".bak");await $a.move(tp,t)}await az.generateKeys()}else console.log("Using existing certificates."),az.updateConfigCert(ep,tp,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}a(XEe,"generateNewKeys");async function ZEe(){console.log("Updating HarperDB nodes."),bl.info("Updating HarperDB nodes.");let e=[];try{let t=new $Ee(ai.SYSTEM_SCHEMA_NAME,ai.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=Array.from(await YEe(t)),n=[];for(let i=0,o=r.length;i<o;i++){let c=r[i];if(!QEe.NATS_TERM_CONSTRAINTS_RX.test(c.name)){let f=`Node name '${c.name}' is invalid, must not contain ., * or >. Please change name and try again.`;throw console.error(f),f}let l={host:c.host,port:c.port};e.push(l);let u=[];for(let f=0,d=c.subscriptions.length;f<d;f++){let h=c.subscriptions[f],_=h.channel.split(":");u.push({schema:_[0],table:_[1],publish:h.publish,subscribe:h.subscribe})}n.push({name:c.name,subscriptions:u,system_info:{hdb_version:ai.PRE_4_0_0_VERSION,node_version:void 0,platform:void 0}})}if(bT.isEmptyOrZeroLength(n))return;let s=new VEe(ai.SYSTEM_SCHEMA_NAME,ai.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,n);await WEe.update(s)}catch(t){throw console.error("There was a problem updating the hdb_nodes table. Please check the log for details."),t}try{zEe.setRoutes({server:"hub",routes:e})}catch(t){throw console.error("There was a problem setting the clustering routes. Please check the log for details."),t}}a(ZEe,"updateNodes");async function ege(){let e=gC.get(ai.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(yT.join("config","settings.js"))){bl.info("pre 4.0.0 settings.js file not found, skipping settings file update");return}let t="Updating settings file for version 4.0.0";console.log(t),bl.info(t);let r=yT.dirname(e),n=gC.get(ai.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),s=yT.join(n,"backup","4_0_0_upgrade_settings.bak"),i=yT.join(n,ai.HDB_CONFIG_FILE);try{bl.info(`Backing up old settings file to: ${s}`),console.log(`Backing up old settings file to: ${s}`),$a.copySync(e,s)}catch(d){throw console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),d}try{bl.info(`Creating new/upgraded settings file at '${i}'`),console.log(`Creating new/upgraded settings file at '${i}'`),bl.info("Updating env variables with new settings values");let d=oz.initOldConfig(e);ep=d[ai.CONFIG_PARAMS.TLS_CERTIFICATE.toLowerCase()],tp=d[ai.CONFIG_PARAMS.TLS_PRIVATEKEY.toLowerCase()],oz.createConfigFile(d)}catch(d){throw console.log("There was a problem creating the new HarperDB config file. Please check the log for details."),d}let o=bT.getPropsFilePath();$a.accessSync(o,$a.constants.F_OK|$a.constants.R_OK);let l=qEe(o).get(ai.HDB_SETTINGS_NAMES.INSTALL_USER),u=`settings_path = ${i}
112
+ install_user = ${l}`;try{$a.writeFileSync(o,u)}catch(d){throw console.log("There was a problem updating the HarperDB boot properties file. Please check the log for details."),d}try{gC.initSync(!0)}catch(d){throw console.error("Unable to initialize new properties. Please check the log for details."),d}let f="New settings file for 4.0.0 upgrade successfully created.";try{$a.removeSync(r),console.log(f),bl.info(f)}catch(d){throw console.error("There was a problem deleting the old settings file and directory. Please check the log for details."),d}}a(ege,"updateSettingsFile_4_0_0");rp.async_functions.push(ege);rp.async_functions.push(XEe);rp.async_functions.push(jEe);rp.async_functions.push(ZEe);cz.push(rp);lz.exports=cz});var SC=I((WMe,hz)=>{"use strict";var Ol=oe(),tge=(H(),D(q)),dz=j(),{DATA_VERSION:rge,UPGRADE_VERSION:nge}=tge.UPGRADE_JSON_FIELD_NAMES_ENUM,fz=ez(),OT=uz(),Nl=new Map;fz&&fz.forEach(e=>{Nl.set(e.version,e)});OT&&OT.forEach(e=>{Nl.set(e.version,e)});OT&&OT.forEach(e=>{Nl.set(e.version,e)});function sge(){return[...Nl.keys()].sort(Ol.compareVersions)}a(sge,"getSortedVersions");function _z(e){let t=e[rge],r=e[nge];return Ol.isEmptyOrZeroLength(t)||Ol.isEmptyOrZeroLength(r)?(dz.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),dz.error("There was an error when trying to evaluate the version information for your instance. Trying to start the server anyways but it may fail. If you continue to have this problem, please contact support@harperdb.io."),[]):[...Nl.keys()].sort(Ol.compareVersions).filter(function(n){return Ol.compareVersions(n,t)>0&&Ol.compareVersions(n,r)<=0})}a(_z,"getVersionsForUpgrade");function ige(e){return _z(e).length>0}a(ige,"hasUpgradesRequired");function oge(e){return Ol.isEmptyOrZeroLength(e)?null:Nl.has(e)?Nl.get(e):null}a(oge,"getDirectiveByVersion");hz.exports={getSortedVersions:sge,getDirectiveByVersion:oge,getVersionsForUpgrade:_z,hasUpgradesRequired:ige}});var wT=I((QMe,Sz)=>{"use strict";var age=require("util"),TC=require("chalk"),cge=require("os"),mz=hn(),lge=$r(),rs=(H(),D(q)),Ez=qW(),RC=LR(),{UpgradeObject:pz}=KW(),{forceDowngradePrompt:uge}=ST(),{packageJson:dge}=Et(),NT=j(),Md=oe(),yC=Hs(),fge=(Me(),D(st)),_ge=SC(),hge=age.promisify(yC.setSchemaDataToGlobal),pge=lge.searchByValue,mge="info_id",Ege="2.9.9",gge="3.0.0";async function Sge(e){let t=new Ez.HdbInfoInsertObject(1,e,e),r=new RC.InsertObject(rs.OPERATIONS_ENUM.INSERT,rs.SYSTEM_SCHEMA_NAME,rs.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,rs.INFO_TABLE_HASH_ATTRIBUTE,[t]);return yC.setSchemaDataToGlobal(),mz.insert(r)}a(Sge,"insertHdbInstallInfo");async function AC(e){let t,r=await gz(),n=new Map([[0,{}]]);for(let c of r)n.set(c.info_id,c);let i=Math.max.apply(null,[...n.keys()])+1;t=new Ez.HdbInfoInsertObject(i,e,e);let o=new RC.InsertObject(rs.OPERATIONS_ENUM.INSERT,rs.SYSTEM_SCHEMA_NAME,rs.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,rs.INFO_TABLE_HASH_ATTRIBUTE,[t]);return await hge(),mz.insert(o)}a(AC,"insertHdbUpgradeInfo");async function gz(){let e=new RC.NoSQLSeachObject(rs.SYSTEM_SCHEMA_NAME,rs.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,mge,rs.INFO_TABLE_HASH_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await pge(e))}catch(r){console.error(r)}return t}a(gz,"getAllHdbInfoRecords");async function Tge(){let e=await gz();if(e.length===0)return;let t,r=new Map;for(let s of e)r.set(s.info_id,s);let n=Math.max.apply(null,[...r.keys()]);return t=r.get(n),t}a(Tge,"getLatestHdbInfoRecord");async function Age(){NT.info("Checking if HDB software has been updated");try{let e=dge.version;if(!e)throw new Error("Could not find the version number in the package.json file");let t=await Tge(),r;if(Md.isEmpty(t))r=Ege;else if(r=t.data_version_num,Md.compareVersions(r.toString(),e.toString())>0){if(!Md.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(TC.yellow(`This instance's data was last run on version ${r}`)),console.error(TC.red(`You have installed a version lower than the version that your data was created on or was upgraded to. This may cause issues and is currently not supported.${cge.EOL}${rs.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");Md.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(TC.yellow(`This instance's data was last run on version ${r}`)),await uge(new pz(r,e))?await AC(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(yC.setSchemaDataToGlobal(),Rge(r),e.toString()===r.toString())return;let n=new pz(r,e);if(_ge.hasUpgradesRequired(n))return n;Md.compareVersions(n.data_version.toString(),n.upgrade_version.toString())<0&&(await AC(n.upgrade_version),NT.notify(`HarperDB running on upgraded version: ${n.upgrade_version}`))}catch(e){throw NT.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),NT.fatal(e),e}}a(Age,"getVersionUpdateInfo");function Rge(e){let t=`You are attempting to upgrade from an old instance of HarperDB that is no longer supported. In order to upgrade to this version, you must do a fresh install. If you need support, please contact ${rs.HDB_SUPPORT_ADDRESS}`;if(!("hdb_info"in fge.databases.system))throw console.log(t),new Error(t);if(!Md.isEmpty(e)&&e<gge)throw console.log(t),new Error(t)}a(Rge,"checkIfInstallIsSupported");Sz.exports={insertHdbInstallInfo:Sge,insertHdbUpgradeInfo:AC,getVersionUpdateInfo:Age}});var yz=I((JMe,Rz)=>{"use strict";var IT=require("joi"),{boolean:yge,string:bC,number:bge}=IT.types(),Tz=require("fs-extra"),np=(H(),D(q)),Az=require("path"),Oge=dt();Rz.exports=Nge;function Nge(e){let t=bC.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=IT.object({[np.INSTALL_PROMPTS.ROOTPATH]:IT.custom(wge),[np.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:IT.alternatives([bge.min(0),bC]).allow("null",null),[np.INSTALL_PROMPTS.TC_AGREEMENT]:bC.valid("yes","YES","Yes"),[np.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[np.INSTALL_PROMPTS.CLUSTERING_ENABLED]:yge});return Oge.validateBySchema(e,r)}a(Nge,"installValidator");function wge(e,t){if(Tz.existsSync(Az.join(e,"system/hdb_user/data.mdb"))||Tz.existsSync(Az.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}a(wge,"validateRootAvailable")});var Oz=I((ZMe,bz)=>{"use strict";var{mkdirpSync:Ige,copySync:Cge}=require("fs-extra"),Va=require("path"),sp=(H(),D(q)),{PACKAGE_ROOT:Pge}=Et(),NC=j(),Dge=Hn(),OC=Zi(),Lge=gt();bz.exports=Mge;async function Mge(e){NC.trace("Mounting HarperDB"),wl(e),wl(Va.join(e,"backup")),wl(Va.join(e,"keys")),wl(Va.join(e,"keys",sp.LICENSE_FILE_NAME)),wl(Va.join(e,"log")),wl(Va.join(e,"database")),wl(Va.join(e,"components")),Cge(Va.resolve(Pge,"./utility/install/README.md"),Va.join(e,"README.md")),await vge()}a(Mge,"mountHdb");async function vge(){let e=t_(),t=Object.keys(OC);for(let r=0;r<t.length;r++){let n=t[r],s=OC[n].hash_attribute;try{Lge.initSystemSchemaPaths(sp.SYSTEM_SCHEMA_NAME,n);let i=new e(sp.SYSTEM_SCHEMA_NAME,n,s);i.attributes=OC[n].attributes;let o=i.attributes.find(({attribute:c})=>c===s);o.isPrimaryKey=!0,["hdb_user","hdb_role"].includes(n)&&(i.audit=!0),await Dge.createTable(n,i)}catch(i){throw NC.error(`issue creating environment for ${sp.SYSTEM_SCHEMA_NAME}.${n}: ${i}`),i}}}a(vge,"createLMDBTables");function wl(e){Ige(e,{mode:sp.HDB_FILE_PERMISSIONS}),NC.info(`Directory ${e} created`)}a(wl,"makeDirectory")});var kz=I((nve,Hz)=>{"use strict";var IC=require("os"),Pz=require("inquirer"),Ps=require("fs-extra"),Uge=require("properties-reader"),Cl=require("chalk"),qi=require("path"),xge=require("human-readable-ids").hri,Bge=require("ora"),Hge=require("yaml"),fr=j(),Ka=ce(),ip=oe(),PT=ec(),Dz=wT(),{packageJson:Lz}=Et(),de=(H(),D(q)),{CONFIG_PARAM_MAP:tve,CONFIG_PARAMS:Dt}=de,kge=yz(),Fge=Oz(),CC=It(),Gge=Gn(),qge=a_(),$ge=lC(),Vge=Hs(),Kge=require("util").promisify,Yge=Kge(Vge.setSchemaDataToGlobal),Nz=Qs(),Il=a(e=>e,"PROMPT_ANSWER_TRANSFORMER"),xr=a(e=>Cl.magenta.bold(e),"HDB_PROMPT_MSG"),Wge="https://harperdb.io/legal/end-user-license-agreement",Ya=IC.EOL,Lo="",zge="yes",wz="Starting HarperDB install...",Iz="HarperDB installation was successful.",Cz="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",Qge="An out of date version of HarperDB is already installed.",wC="It appears that HarperDB is already installed. Exiting install...",jge="Aborting install",rve=new RegExp(/^([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$/),Jge=new RegExp(/^[^\s.,*>]+$/),Xge=IC.homedir(),Zge=qi.join(Xge,de.HDB_ROOT_DIR_NAME),eSe="HDB_ADMIN",tSe="CLUSTER_USER",rSe="dev",nSe="localhost",CT={[Dt.HTTP_CORS]:!0,[Dt.HTTP_CORSACCESSLIST]:["*"],[Dt.HTTP_PORT]:9926,[Dt.AUTHENTICATION_AUTHORIZELOCAL]:!0,[Dt.THREADS_COUNT]:1,[Dt.THREADS_DEBUG]:!0,[Dt.LOGGING_STDSTREAMS]:!0,[Dt.LOGGING_LEVEL]:"info",[Dt.OPERATIONSAPI_NETWORK_PORT]:9925,[Dt.LOCALSTUDIO_ENABLED]:!0},Ur={DESTINATION:"Please enter a destination for HarperDB:",HDB_USERNAME:"Please enter a username for the administrative user:",HDB_PASS:"Please enter a password for the administrative user:",NODE_NAME:"Please enter a unique name for this node:",CLUSTER_USERNAME:"Please enter a username for the CLUSTER_USER:",CLUSTER_PASS:"Please enter a password for the CLUSTER_USER:",DEFAULTS_MODE:"Default Config - dev (easy access/debugging) or prod (security/performance): (dev/prod)",REPLICATION_HOSTNAME:"Please enter the hostname for this server:"},Wa=PT([de.INSTALL_PROMPTS.HDB_CONFIG]),Gi,Mz=!1,PC=!1,vz=!1;Hz.exports={install:Uz,updateConfigEnv:hSe,setIgnoreExisting:pSe};Uz.createSuperUser=Bz;async function Uz(){console.log(xr(Ya+wz+Ya)),fr.notify(wz);let e;Wa[de.INSTALL_PROMPTS.HDB_CONFIG]&&(e=sSe());let t=oSe();Object.assign(t,e),t[de.INSTALL_PROMPTS.TC_AGREEMENT]&&t[de.INSTALL_PROMPTS.ROOTPATH]&&t[de.INSTALL_PROMPTS.HDB_ADMIN_USERNAME]&&t[de.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]&&t[de.INSTALL_PROMPTS.DEFAULTS_MODE]===void 0&&(vz=!0,t[de.INSTALL_PROMPTS.DEFAULTS_MODE]="prod");let r=kge(t);if(r)throw r.message;await aSe(),await cSe(t);let n=await iSe(t);Gi=n[de.INSTALL_PROMPTS.ROOTPATH],Wa[de.INSTALL_PROMPTS.HDB_CONFIG]&&qi.dirname(Wa[de.INSTALL_PROMPTS.HDB_CONFIG])===Gi&&(Mz=!0),!PC&&!Wa[de.INSTALL_PROMPTS.HDB_CONFIG]&&await Ps.pathExists(qi.join(Gi,de.HDB_CONFIG_FILE))&&(console.error(wC),process.exit());let s=Bge({prefixText:xr("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),ip.isEmpty(Gi))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");Ka.setHdbBasePath(Gi),await Fge(Gi),await lSe(),await uSe(n),fr.initLogSettings(!0),await Bz(n),await fSe(n),await Nz.updateConfigCert(),await Nz.generateCertsKeys(),await _Se(),$ge(),s.stop(),console.log(xr(Ya+Iz+Ya)),fr.notify(Iz)}a(Uz,"install");function sSe(){let e=Hge.parseDocument(Ps.readFileSync(Wa[de.INSTALL_PROMPTS.HDB_CONFIG],"utf8"),{simpleKeys:!0}),t=CC.flattenConfig(e.toJSON());return t[de.CONFIG_PARAMS.ROOTPATH.toLowerCase()]&&(t.ROOTPATH=t[de.CONFIG_PARAMS.ROOTPATH.toLowerCase()]),t}a(sSe,"getConfigFromFile");async function iSe(e){fr.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:Il,when:Mo(e[de.INSTALL_PROMPTS.ROOTPATH],Ur.DESTINATION),name:de.INSTALL_PROMPTS.ROOTPATH,prefix:Lo,default:Zge,validate:a(async s=>Cs(s)?Cs(s):await Ps.pathExists(qi.join(s,"system","hdb_user.mdb"))?`'${s}' is already in use. Please enter a different path.`:!0,"validate"),message:xr(Ur.DESTINATION)},{type:"input",transformer:Il,when:Mo(e[de.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],Ur.HDB_USERNAME),name:de.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:Lo,default:eSe,validate:a(s=>Cs(s)?Cs(s):(t=s,!0),"validate"),message:xr(Ur.HDB_USERNAME)},{type:"password",when:Mo(e[de.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],Ur.HDB_PASS),name:de.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:Lo,validate:a(s=>Cs(s)?Cs(s):!0,"validate"),message:xr(Ur.HDB_PASS)},{type:"input",transformer:Il,when:Mo(e[de.INSTALL_PROMPTS.DEFAULTS_MODE],Ur.DEFAULTS_MODE),name:de.INSTALL_PROMPTS.DEFAULTS_MODE,prefix:Lo,default:rSe,validate:a(s=>Cs(s)?Cs(s):s!=="dev"&&s!=="prod"?`Invalid response '${s}', options are 'dev' or 'prod'.`:!0,"validate"),message:xr(Ur.DEFAULTS_MODE)}];if(vz||r.push({type:"input",name:de.INSTALL_PROMPTS.REPLICATION_HOSTNAME,transformer:Il,when:Mo(e[de.INSTALL_PROMPTS.REPLICATION_HOSTNAME],Ur.REPLICATION_HOSTNAME),prefix:Lo,default:nSe,message:xr(Ur.REPLICATION_HOSTNAME)}),ip.autoCastBoolean(e[de.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let s=[{type:"input",transformer:Il,when:Mo(e[de.INSTALL_PROMPTS.CLUSTERING_NODENAME],Ur.NODE_NAME),name:de.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:Lo,default:xge.random(),validate:a(i=>Jge.test(i)?!0:"Invalid node name, must not contain ., * or >","validate"),message:xr(Ur.NODE_NAME)},{type:"input",transformer:Il,when:Mo(e[de.INSTALL_PROMPTS.CLUSTERING_USER],Ur.CLUSTER_USERNAME),name:de.INSTALL_PROMPTS.CLUSTERING_USER,prefix:Lo,default:tSe,validate:a(i=>Cs(i)?Cs(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,"validate"),message:xr(Ur.CLUSTER_USERNAME)},{type:"password",when:Mo(e[de.INSTALL_PROMPTS.CLUSTERING_PASSWORD],Ur.CLUSTER_PASS),name:de.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:Lo,validate:a(i=>Cs(i)?Cs(i):!0,"validate"),message:xr(Ur.CLUSTER_PASS)}];r.push(...s)}let n=await Pz.prompt(r);if(Object.keys(n).length===0)return e;for(let s in n)e[s]===void 0&&(e[s]=n[s]);return e}a(iSe,"installPrompts");function Mo(e,t){return e!==void 0?(t.includes("password")?(console.log(`${xr(t)} ${Cl.gray("[hidden]")}`),fr.trace(`${xr(t)} [hidden]`)):(console.log(`${xr(t)} ${e}`),fr.trace(`${xr(t)} ${e}`)),!1):!0}a(Mo,"displayCmdEnvVar");function Cs(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}a(Cs,"checkForEmptyValue");function oSe(){let e=Object.keys(de.INSTALL_PROMPTS),t=PT(e),r=PT(Object.keys(de.CONFIG_PARAM_MAP),!0),n={};for(let s of e){let i=de.CONFIG_PARAM_MAP[s.toLowerCase()];t[s]?i===void 0?n[s]=t[s]:n[i.toUpperCase()]=t[s]:i!==void 0&&r[i.toLowerCase()]&&(n[s]=r[i.toLowerCase()])}return n}a(oSe,"checkForPromptOverride");async function aSe(){fr.trace("Checking for existing install.");let e=ip.getPropsFilePath(),t=await Ps.pathExists(e),r;if(t){fr.trace(`Install found an existing boot prop file at:${e}`);let n=Uge(e),s=CC.getConfigValue(de.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||n.get(de.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await Ps.pathExists(s)}if(!t&&ip.noBootFile()&&(r=!0),r&&!PC){if(fr.trace(`Install found existing HDB config at:${e}`),await Dz.getVersionUpdateInfo()){let s=`Please use \`harperdb upgrade\` to update to ${Lz.version}. Exiting install...`;console.log(Ya+Cl.magenta.bold(Qge)),console.log(Cl.magenta.bold(s)),fr.error(s)}else console.log(Ya+Cl.magenta.bold(wC)),fr.error(wC);process.exit(0)}}a(aSe,"checkForExistingInstall");async function cSe(e){fr.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${Wge}${Ya}and can be viewed by typing or copying and pasting the URL into your web browser.${Ya}I agree to the HarperDB Terms and Conditions: (yes/no)`,r={prefix:Lo,transformer:Il,when:Mo(e[de.INSTALL_PROMPTS.TC_AGREEMENT],t),name:de.INSTALL_PROMPTS.TC_AGREEMENT,message:xr(t),validate:a(s=>s.toLowerCase()==="yes"||s.toLowerCase()==="no"?!0:Cl.yellow("Please enter 'yes' or 'no'"),"validate")},n=await Pz.prompt([r]);n[de.INSTALL_PROMPTS.TC_AGREEMENT]&&n[de.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==zge&&(console.log(Cl.yellow(Cz)),fr.error(Cz),process.exit(0))}a(cSe,"termsAgreement");async function lSe(){let e=qi.join(Gi,de.HDB_CONFIG_FILE),t;try{t=IC.userInfo().username}catch{t=process.env.USERNAME||process.env.USER||process.env.LOGNAME||process.env.LNAME||process.env.SUDO_USER}if(t){let r=`settings_path = ${e}
113
+ install_user = ${t}`,n=ip.getHomeDir(),s=qi.join(n,de.HDB_HOME_DIR_NAME),i=qi.join(s,de.LICENSE_KEY_DIR_NAME);try{Ps.mkdirpSync(s,{mode:de.HDB_FILE_PERMISSIONS}),Ps.mkdirpSync(i,{mode:de.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${de.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let o=qi.join(s,de.BOOT_PROPS_FILE_NAME);try{await Ps.writeFile(o,r)}catch(c){throw fr.error(`There was an error creating the boot file at path: ${o}`),c}Ka.setProperty(de.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),Ka.setProperty(de.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),Ka.setProperty(Ka.BOOT_PROPS_FILE_PATH,o)}}a(lSe,"createBootPropertiesFile");async function uSe(e){fr.trace("Creating HarperDB config file");let t=PT(Object.keys(de.CONFIG_PARAM_MAP),!0);if(Object.assign(t,e),e[de.INSTALL_PROMPTS.DEFAULTS_MODE]==="dev"){process.env.DEV_MODE="true";for(let r in CT){if(r===Dt.HTTP_PORT&&t[Dt.HTTP_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??CT[r],t[Dt.HTTP_SECUREPORT]=null;continue}else if(r===Dt.HTTP_PORT)continue;if(r===Dt.OPERATIONSAPI_NETWORK_PORT&&t[Dt.OPERATIONSAPI_NETWORK_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??CT[r],t[Dt.OPERATIONSAPI_NETWORK_SECUREPORT]=null;continue}else if(r===Dt.OPERATIONSAPI_NETWORK_PORT)continue;t[r.toLowerCase()]===void 0&&(t[r]=CT[r])}}else t[Dt.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]&&(t[Dt.OPERATIONSAPI_NETWORK_SECUREPORT]=null),t[Dt.HTTP_PORT.toLowerCase()]&&(t[Dt.HTTP_SECUREPORT]=null);try{Wa[de.INSTALL_PROMPTS.HDB_CONFIG]||CC.createConfigFile(t),Ka.initSync()}catch(r){dSe(r)}}a(uSe,"createConfigFile");function dSe(e){fr.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(jge);let t=qi.resolve(Ka.get(Ka.BOOT_PROPS_FILE_PATH),"../");t&&Ps.removeSync(t),Gi&&(Mz?Ps.readdirSync(Gi,{withFileTypes:!0}).forEach(n=>{let s=qi.join(n.path,n.name);s!==Wa[de.INSTALL_PROMPTS.HDB_CONFIG]&&Ps.removeSync(s)}):Ps.removeSync(Gi)),process.exit(1)}a(dSe,"rollbackInstall");async function xz(e,t){fr.trace("Creating admin user"),await Yge();let r;try{r=await qge.addRole(e)}catch(n){if(n.message.includes("already exists"))t=void 0;else throw n.message+="Error creating role",n}if(t)try{t.role=r.role,await Gge.addUser(t)}catch(n){throw n.message=`Error creating user - ${n}`,n}}a(xz,"createAdminUser");async function Bz(e){fr.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[de.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[de.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await xz(t,r),delete e[de.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[de.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}a(Bz,"createSuperUser");async function fSe(e){fr.trace("Creating Cluster user.");let t;e[de.INSTALL_PROMPTS.CLUSTERING_USER]&&e[de.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[de.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[de.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await xz({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[de.INSTALL_PROMPTS.CLUSTERING_USER],delete e[de.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}a(fSe,"createClusterUser");async function _Se(){let e=Lz.version;if(e)await Dz.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}a(_Se,"insertHdbVersionInfo");function hSe(e){Wa[de.INSTALL_PROMPTS.HDB_CONFIG]=e}a(hSe,"updateConfigEnv");function pSe(e){PC=e}a(pSe,"setIgnoreExisting")});var qz=I((ive,Gz)=>{"use strict";var DC=oe(),ns=j(),Fz=SC();Gz.exports={processDirectives:mSe};async function mSe(e){console.log("Starting upgrade process...");let t=Fz.getVersionsForUpgrade(e),r=SSe(t),n=[],s=r.length;for(let i=0;i<s;i++){let o=r[i],c=`Running upgrade for version ${o.version}`;ns.notify(c),console.log(c);let l=[],u=[];try{l=ESe(o.sync_functions)}catch(f){throw ns.error(`Error while running an upgrade script for ${o.version}`),f}try{u=await gSe(o.async_functions)}catch(f){throw ns.error(`Error while running an upgrade script for ${o.version}`),f}n.push(...l,...u)}return n}a(mSe,"processDirectives");function ESe(e){if(DC.isEmptyOrZeroLength(e))return ns.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return ns.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(ns.info(`Running function ${r.name}`),!(r instanceof Function)){ns.info("Variable being processed is not a function");continue}let n=r();ns.info(n),t.push(n)}return t}a(ESe,"runSyncFunctions");async function gSe(e){if(DC.isEmptyOrZeroLength(e))return ns.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return ns.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let n=0;n<r;n++){let s=e[n];if(ns.info(`Running function ${s.name}`),!(s instanceof Function)){ns.info("Variable being processed is not a function");continue}let i=await s();ns.info(i),t.push(i)}return t}a(gSe,"runAsyncFunctions");function SSe(e){if(DC.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let n=Fz.getDirectiveByVersion(r);n&&t.push(n)}return t}a(SSe,"getUpgradeDirectivesToInstall")});var Qz=I((ave,zz)=>{"use strict";var DT=ce();DT.initSync();var Yz=require("chalk"),$z=require("fs-extra"),Uo=j(),vo=(H(),D(q)),TSe=qz(),LC=oe(),Wz=wT(),ASe=ST(),Vz=aA(),RSe=Hs(),{packageJson:Kz}=Et(),ySe=require("util").promisify,bSe=ySe(RSe.setSchemaDataToGlobal),MC,{UPGRADE_VERSION:vC}=vo.UPGRADE_JSON_FIELD_NAMES_ENUM;zz.exports={upgrade:OSe};async function OSe(e){await bSe(),MC===void 0&&(MC=th()),$z.existsSync(DT.get(DT.BOOT_PROPS_FILE_PATH))||(op("The hdb_boot_properties file was not found. Please install HDB.",vo.LOG_LEVELS.ERROR),process.exit(1)),$z.existsSync(DT.get(vo.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))||(op("The hdb settings file was not found. Please make sure HDB is installed.",vo.LOG_LEVELS.ERROR),process.exit(1));let t=e;t||(t=await Wz.getVersionUpdateInfo(),t||(console.log("HarperDB version is current"),process.exit(0))),op(`This version of HarperDB is ${Kz.version}`,vo.LOG_LEVELS.INFO);let r=t[vC]??Kz.version;r||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${vo.HDB_SUPPORT_ADDRESS}`),Uo.notify("Missing new version field from upgrade info object"),process.exit(1)),await NSe();let n,s=0;try{n=await ASe.forceUpdatePrompt(t)}catch(i){Uo.error("There was an error when prompting user about upgrade."),Uo.error(i),n=!1,s=1}n||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(s)),Uo.info(`Starting upgrade to version ${r}`),await wSe(t),op(`HarperDB was successfully upgraded to version ${t[vC]}`,vo.LOG_LEVELS.INFO)}a(OSe,"upgrade");async function NSe(){let e=!1,t=await Vz.findPs(vo.HDB_PROC_NAME);if(LC.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await Vz.findPs("hdb_express");LC.isEmptyOrZeroLength(r)||(e=!0)}if(!e){let r=await MC.list();LC.isEmptyOrZeroLength(r)||(e=!0)}if(e){let r="HarperDB is running, please stop all HarperDB services with 'harperdb stop' and run the upgrade command again.";console.log(Yz.red(r)),Uo.error(r),process.exit(1)}}a(NSe,"checkIfRunning");async function wSe(e){try{await TSe.processDirectives(e)}catch(t){throw op("There was an error during the data upgrade. Please check the logs.",vo.LOG_LEVELS.ERROR),t}try{await Wz.insertHdbUpgradeInfo(e[vC])}catch(t){Uo.error("Error updating the 'hdb_info' system table."),Uo.error(t)}}a(wSe,"runUpgrade");function op(e,t=void 0){t||(t=Uo.info),Uo[t](e),console.log(Yz.magenta(e))}a(op,"printToLogAndConsole")});var eQ=I((lve,Zz)=>{"use strict";var{promises:vd,createReadStream:ISe,createWriteStream:CSe}=require("fs"),{createGzip:PSe}=require("zlib"),{promisify:DSe}=require("util"),{pipeline:LSe}=require("stream"),MSe=DSe(LSe),xC=require("path"),Qa=ce();Qa.initSync();var za=j(),{CONFIG_PARAMS:Ud,ITC_EVENT_TYPES:vSe}=(H(),D(q)),{onMessageFromWorkers:USe}=rt(),{convertToMS:xSe}=oe(),{onStorageReclamation:BSe}=(YS(),D(PY)),HSe=6e4,kSe="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",FSe="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",UC,Jz;Zz.exports=Xz;USe(e=>{e.type===vSe.RESTART&&(Qa.initSync(!0),clearInterval(Jz),Qa.get(Ud.LOGGING_ROTATION_ENABLED)&&Xz())});async function Xz(){try{let e=za.getLogFilePath(),t=Qa.get(Ud.LOGGING_ROTATION_MAXSIZE),r=Qa.get(Ud.LOGGING_ROTATION_INTERVAL),n=Qa.get(Ud.LOGGING_ROTATION_RETENTION),s=0;if(BSe(e,l=>{s=l},!0),!t&&!r){za.error(kSe);return}let i=Qa.get(Ud.LOGGING_ROTATION_PATH);if(!i){za.error(FSe);return}let o;if(t){let l=t.slice(-1),u=t.slice(0,-1);l==="G"?o=u*1e9:l==="M"?o=u*1e6:o=u*1e3}let c;if(r){let l=r.slice(-1),u=r.slice(0,-1);l==="D"?c=u*1440:l==="H"?c=u*60:c=u}UC=Date.now()/6e4,za.trace("Log rotate enabled, maxSize:",t,"interval:",r),Jz=setInterval(async()=>{if(o){let l;l=await vd.stat(e),l.size>=o&&await jz(e,i)}if(c&&Date.now()/6e4-UC>=c&&(await jz(e,i),UC=Date.now()/6e4),n||s){let l=xSe(n??"1M")/(1+s);s=0;let u=await vd.readdir(i);for(let f of u)try{let d=await vd.stat(xC.join(i,f));Date.now()-d.mtimeMs>l&&await vd.unlink(xC.join(i,f))}catch(d){za.error("Error trying to remove log",f,d)}}},HSe).unref()}catch(e){za.error(e)}}a(Xz,"logRotator");async function jz(e,t){let r=Qa.get(Ud.LOGGING_ROTATION_COMPRESS),n=xC.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.log`);await vd.rename(e,n),r&&(e=n,n+=".gz",await MSe(ISe(e),PSe(),CSe(n)),await vd.unlink(e)),za.closeLogFile(),za.notify(`hdb.log rotated, old log moved to ${n}`)}a(jz,"moveLogFile")});var cQ=I(aQ=>{"use strict";var Se=ce();Se.initSync();rd();var Ft=(H(),D(q)),{CONFIG_PARAMS:Ie}=Ft,ss=j(),xo=require("fs-extra"),Bo=require("path"),GSe=lC(),{install:qSe}=kz(),BC=require("chalk"),{packageJson:$Se,PACKAGE_ROOT:VSe}=Et(),Ho=oe(),HC=It(),rQ=ec(),tQ=Ng(),KSe=Qz(),YSe=eQ(),{compactOnStart:WSe}=(vN(),D(MN)),zSe=require("minimist"),QSe=Qs(),{startHTTPThreads:jSe}=(nI(),D(mK)),JSe=wT(),{isMainThread:XSe}=require("worker_threads"),dve=Zi(),fve=no(),_ve=wy(),hve=t_(),LT=(H(),D(q)),$i,xd,nQ=!1,ZSe="Upgrade complete. Starting HarperDB.",eTe="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",tTe="HarperDB not found, starting install process.",rTe="There was an error during install, check install_log.log for more details. Exiting.",nTe="HarperDB successfully started.";function sTe(){if(!nQ){let e=a(()=>{xo.removeSync(Bo.join(Se.get(Ft.CONFIG_PARAMS.ROOTPATH),Ft.HDB_PID_FILE)),process.exit(0)},"remove_hdb_pid");process.on("exit",()=>{e()}),process.on("SIGINT",()=>{e()}),process.on("SIGQUIT",()=>{e()}),process.on("SIGTERM",()=>{e()})}}a(sTe,"addExitListeners");async function sQ(e=!1,t=!1){if(console.log(BC.magenta("Starting HarperDB...")),ss.suppressLogging?.(()=>{console.log(BC.magenta(""+xo.readFileSync(Bo.join(VSe,"utility/install/ascii_logo.txt"))))}),await oQ()===!1){console.log(tTe);try{await qSe()}catch(l){console.error(rTe,l),ss.error(l),process.exit(1)}}if(!e){let l=rQ(Object.keys(Ft.CONFIG_PARAM_MAP),!0);!Ho.isEmpty(l)&&!Ho.isEmptyOrZeroLength(Object.keys(l))&&HC.updateConfigValue(void 0,void 0,l,!0,!0)}let r,n=xd?.service==="clustering";xd?.service&&!n&&(console.error("Unrecognized service argument"),process.exit(1));let s=Bo.join(Se.get(Ft.CONFIG_PARAMS.ROOTPATH),Ft.HDB_PID_FILE),i=lTe(s);i&&i!==1&&uTe(i)&&(n?r=!0:(console.error(`Error: HarperDB is already running (pid: ${i})`),process.exit(4))),$i===void 0&&($i=th()),n&&(r||(console.error("HarperDB must be running to start clustering."),process.exit()),Se.get(Ft.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY)||(console.error("Clustering must be setup and enabled in harperdb-config."),process.exit()),console.log("Starting clustering."),await tQ.generateNatsConfig(),await $i.startClusteringProcesses(!0),process.exit()),sTe(),await xo.writeFile(Bo.join(Se.get(LT.CONFIG_PARAMS.ROOTPATH),LT.HDB_PID_FILE),`${process.pid}`),ss.info("HarperDB PID",process.pid);let o;try{let l=await JSe.getVersionUpdateInfo();l!==void 0&&(o=l[Ft.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await KSe.upgrade(l),console.log(ZSe))}catch(l){o?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${o}. Exiting HarperDB.`,l),ss.error(l)):(console.error(eTe,l),ss.error(l)),process.exit(1)}GSe(),aTe(),await QSe.reviewSelfSignedCert(),Ho.autoCastBoolean(Se.get(Ft.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&XSe&&await tQ.generateNatsConfig(t)}a(sQ,"initialize");async function iTe(e=!1){try{xd=zSe(process.argv),xd.ROOTPATH&&HC.updateConfigObject("settings_path",Bo.join(xd.ROOTPATH,Ft.HDB_CONFIG_FILE)),await sQ(e,!0),Se.get(Ft.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await WSe();let t=process.env.IS_SCRIPTED_SERVICE&&!xd.service;Ho.autoCastBoolean(Se.get(Ft.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&(t||await $i.startClusteringProcesses(),await $i.startClusteringThreads()),await jSe(process.env.DEV_MODE?1:Se.get(LT.CONFIG_PARAMS.THREADS_COUNT)??Se.get(LT.CONFIG_PARAMS.THREADS)),Se.get(Ft.CONFIG_PARAMS.LOGGING_ROTATION_ENABLED)&&await YSe(),t||iQ()}catch(t){console.error(t),ss.error(t),process.exit(1)}}a(iTe,"main");function iQ(){ss.suppressLogging(()=>{console.log(BC.magenta(`HarperDB ${$Se.version} successfully started`))}),ss.notify(nTe)}a(iQ,"started");async function oTe(e=!0){nQ=!e;try{$i===void 0&&($i=th()),$i.enterPM2Mode(),await sQ(),Ho.autoCastBoolean(Se.get(Ft.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&await $i.startClusteringProcesses(),await $i.startService(Ft.PROCESS_DESCRIPTORS.HDB),iQ(),e&&process.exit(0)}catch(t){console.error(t),ss.error(t),process.exit(1)}}a(oTe,"launch");function aTe(){let e=Bo.join(Se.get(Ft.CONFIG_PARAMS.ROOTPATH),Ft.LICENSE_KEY_DIR_NAME,Ft.LICENSE_FILE_NAME),t=Bo.join(e,Ft.LICENSE_FILE_NAME),r=Bo.join(e,Ft.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:n,HARPERDB_LICENSE:s}=rQ(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(Ho.isEmpty(n)||Ho.isEmpty(s))return;xo.mkdirpSync(e),xo.writeFileSync(r,n),xo.writeFileSync(t,s)}catch(n){let s=`Failed to write license & fingerprint due to: ${n.message}`;console.error(s),ss.error(s)}}a(aTe,"writeLicenseFromVars");Object.assign(aQ,{launch:oTe,main:iTe,isHdbInstalled:oQ,startupLog:cTe});async function oQ(){try{await xo.stat(Ho.getPropsFilePath()),await xo.stat(Se.get(Ft.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}catch(e){if(Ho.noBootFile())return!0;if(e.code==="ENOENT")return!1;throw ss.error(`Error checking for HDB install - ${e}`),e}return!0}a(oQ,"isHdbInstalled");function cTe(e){let r=a(_=>_.padEnd(20),"pad"),n=`
114
+ `;Se.get(Ie.REPLICATION_HOSTNAME)&&(n+=`${r("Hostname:")}${Se.get(Ie.REPLICATION_HOSTNAME)}
115
+ `),Se.get(Ie.REPLICATION_URL)&&(n+=`${r("Replication Url:")}${Se.get(Ie.REPLICATION_URL)}
116
+ `),n+=`${r("Worker Threads:")}${Se.get(Ie.THREADS_COUNT)}
117
+ `,n+=`${r("Root Path:")}${Se.get(Ie.ROOTPATH)}
118
+ `,Se.get(Ie.THREADS_DEBUG)!==!1&&(n+=`${r("Debugging:")}enabled: true`,n+=Se.get(Ie.THREADS_DEBUG_PORT)?`, TCP: ${Se.get(Ie.THREADS_DEBUG_PORT)}
119
119
  `:`
120
- `);let s=qo.join(ge.get(we.LOGGING_ROOT),"hdb.log");n+=`${r("Logging:")}level: ${ge.get(we.LOGGING_LEVEL)}, location: ${s+(ge.get(we.LOGGING_STDSTREAMS)?", stdout/err":"")}
121
- `,n+=r("Default:"),n+=ge.get(we.HTTP_PORT)?`HTTP (and WS): ${ge.get(we.HTTP_PORT)}, `:"",n+=ge.get(we.HTTP_SECUREPORT)?`HTTPS (and WS): ${ge.get(we.HTTP_SECUREPORT)}, `:"",n+=`CORS: ${ge.get(we.HTTP_CORS)?`enabled for ${ge.get(we.HTTP_CORSACCESSLIST)}`:"disabled"}
122
- `,n+=r("Operations API:"),n+=ge.get(we.OPERATIONSAPI_NETWORK_PORT)?`HTTP: ${ge.get(we.OPERATIONSAPI_NETWORK_PORT)}, `:"",n+=ge.get(we.OPERATIONSAPI_NETWORK_SECUREPORT)?`HTTPS: ${ge.get(we.OPERATIONSAPI_NETWORK_SECUREPORT)}, `:"",n+=`CORS: ${ge.get(we.OPERATIONSAPI_NETWORK_CORS)?`enabled for ${ge.get(we.OPERATIONSAPI_NETWORK_CORSACCESSLIST)}`:"disabled"}`,n+=`, unix socket: ${ge.get(we.OPERATIONSAPI_NETWORK_DOMAINSOCKET)}
123
- `,n+=r("MQTT:"),n+=ge.get(we.MQTT_NETWORK_PORT)?`TCP: ${ge.get(we.MQTT_NETWORK_PORT)}, `:"",n+=ge.get(we.MQTT_NETWORK_SECUREPORT)?`TLS: ${ge.get(we.MQTT_NETWORK_SECUREPORT)}`:"",n+=ge.get(we.MQTT_WEBSOCKET)&&ge.get(we.HTTP_PORT)?`, WS: ${ge.get(we.HTTP_PORT)}`:"",n+=ge.get(we.MQTT_WEBSOCKET)&&ge.get(we.HTTP_SECUREPORT)?`, WSS: ${ge.get(we.HTTP_SECUREPORT)}
120
+ `);let s=Bo.join(Se.get(Ie.LOGGING_ROOT),"hdb.log");n+=`${r("Logging:")}level: ${Se.get(Ie.LOGGING_LEVEL)}, location: ${s+(Se.get(Ie.LOGGING_STDSTREAMS)?", stdout/err":"")}
121
+ `,n+=r("Default:"),n+=Se.get(Ie.HTTP_PORT)?`HTTP (and WS): ${Se.get(Ie.HTTP_PORT)}, `:"",n+=Se.get(Ie.HTTP_SECUREPORT)?`HTTPS (and WS): ${Se.get(Ie.HTTP_SECUREPORT)}, `:"",n+=`CORS: ${Se.get(Ie.HTTP_CORS)?`enabled for ${Se.get(Ie.HTTP_CORSACCESSLIST)}`:"disabled"}
122
+ `,n+=r("Operations API:"),n+=Se.get(Ie.OPERATIONSAPI_NETWORK_PORT)?`HTTP: ${Se.get(Ie.OPERATIONSAPI_NETWORK_PORT)}, `:"",n+=Se.get(Ie.OPERATIONSAPI_NETWORK_SECUREPORT)?`HTTPS: ${Se.get(Ie.OPERATIONSAPI_NETWORK_SECUREPORT)}, `:"",n+=`CORS: ${Se.get(Ie.OPERATIONSAPI_NETWORK_CORS)?`enabled for ${Se.get(Ie.OPERATIONSAPI_NETWORK_CORSACCESSLIST)}`:"disabled"}`,n+=`, unix socket: ${Se.get(Ie.OPERATIONSAPI_NETWORK_DOMAINSOCKET)}
123
+ `,n+=r("MQTT:"),n+=Se.get(Ie.MQTT_NETWORK_PORT)?`TCP: ${Se.get(Ie.MQTT_NETWORK_PORT)}, `:"",n+=Se.get(Ie.MQTT_NETWORK_SECUREPORT)?`TLS: ${Se.get(Ie.MQTT_NETWORK_SECUREPORT)}`:"",n+=Se.get(Ie.MQTT_WEBSOCKET)&&Se.get(Ie.HTTP_PORT)?`, WS: ${Se.get(Ie.HTTP_PORT)}`:"",n+=Se.get(Ie.MQTT_WEBSOCKET)&&Se.get(Ie.HTTP_SECUREPORT)?`, WSS: ${Se.get(Ie.HTTP_SECUREPORT)}
124
124
  `:`
125
- `;let i=ge.get(we.REPLICATION_PORT)??ge.get(we.OPERATIONSAPI_NETWORK_PORT),o=ge.get(we.REPLICATION_SECUREPORT)??ge.get(we.OPERATIONSAPI_NETWORK_SECUREPORT),c=r("Replication:");c+=i?`WS: ${i}, `:"",c+=o?`WSS: ${o} `:"",n+=`${c.slice(0,-2)}
126
- `;let l=[],u=SC.getConfigObj();for(let _ in u)u[_].package&&l.push(_);let f={},d=`${r("REST:")}`;for(let[_,p]of e)for(let S of p){let g=S.name;g==="rest"&&(d+=`${S.protocol_name}: ${_}, `),l.includes(g)&&(f[g]?f[g]+=`${S.protocol_name}: ${_}, `:f[g]=`${S.protocol_name}: ${_}, `)}d.length>21&&(d=d.slice(0,-2),n+=`${d}
127
- `);let h=ge.get(we.HTTP_PORT)?`HTTP: ${ge.get(we.HTTP_PORT)}, `:"";h+=ge.get(we.HTTP_SECUREPORT)?`HTTPS: ${ge.get(we.HTTP_SECUREPORT)}, `:"",h.length>21&&(h=h.slice(0,-2));for(let _ of l)f[_]?n+=`${r(_+": ")}${f[_].slice(0,-2)}
125
+ `;let i=Se.get(Ie.REPLICATION_PORT)??Se.get(Ie.OPERATIONSAPI_NETWORK_PORT),o=Se.get(Ie.REPLICATION_SECUREPORT)??Se.get(Ie.OPERATIONSAPI_NETWORK_SECUREPORT),c=r("Replication:");c+=i?`WS: ${i}, `:"",c+=o?`WSS: ${o} `:"",n+=`${c.slice(0,-2)}
126
+ `;let l=[],u=HC.getConfigObj();for(let _ in u)u[_].package&&l.push(_);let f={},d=`${r("REST:")}`;for(let[_,p]of e)for(let S of p){let g=S.name;g==="rest"&&(d+=`${S.protocol_name}: ${_}, `),l.includes(g)&&(f[g]?f[g]+=`${S.protocol_name}: ${_}, `:f[g]=`${S.protocol_name}: ${_}, `)}d.length>21&&(d=d.slice(0,-2),n+=`${d}
127
+ `);let h=Se.get(Ie.HTTP_PORT)?`HTTP: ${Se.get(Ie.HTTP_PORT)}, `:"";h+=Se.get(Ie.HTTP_SECUREPORT)?`HTTPS: ${Se.get(Ie.HTTP_SECUREPORT)}, `:"",h.length>21&&(h=h.slice(0,-2));for(let _ of l)f[_]?n+=`${r(_+": ")}${f[_].slice(0,-2)}
128
128
  `:n+=`${r(_+": ")}${h}
129
- `;console.log(n),ge.get(we.LOGGING_STDSTREAMS)&&ss.logsAtLevel("info")&&ss.suppressLogging(()=>{console.log(`Note that log messages are being sent to the console (stdout and stderr) in addition to the log file ${s}. This can be disabled by setting logging.stdStreams to false, and the log file can be directly monitored/tailed.`)})}a(XSe,"startupLog");function ZSe(e){try{return Number.parseInt(Go.readFileSync(e,"utf8"),10)}catch{return null}}a(ZSe,"readPidFile");function eTe(e){try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}a(eTe,"isProcessRunning")});var Kw=P(Vo=>{PT();var{isMainThread:TC,parentPort:ep,threadId:gT,workerData:tTe}=require("node:worker_threads"),{Socket:rTe,createServer:nTe}=require("node:net"),{createServer:sTe,IncomingMessage:iTe}=require("node:http"),{createServer:oTe}=require("node:https"),{createSecureServer:aTe}=require("node:http2"),{Blob:cTe}=(cs(),D(fm)),{unlinkSync:Lz,existsSync:lTe}=require("fs"),Pn=j(),ft=ce(),jt=(H(),D(q)),{server:tp}=($r(),D(ic)),{WebSocketServer:uTe}=require("ws"),{createServer:dTe}=require("node:tls"),{getTicketKeys:fTe,restartNumber:_Te,getWorkerIndex:Ld}=rt(),{Headers:AC,appendHeader:hTe}=(c_(),D(kx)),{recordAction:Jh,recordActionBinary:Oz}=(Ci(),D(a_)),{Request:Mz,createReuseportFd:Zh}=(aI(),D(SK)),{checkMemoryLimit:pTe}=qu(),{createTLSSelector:vz}=Js(),{resolvePath:Uz}=wt(),{startupLog:ETe}=bz(),{Readable:Nz}=require("node:stream"),mTe=ui(),xz=ft.get(jt.CONFIG_PARAMS.THREADS_DEBUG);if(xz){let e;if(TC)e=ft.get(jt.CONFIG_PARAMS.THREADS_DEBUG_PORT)??9229,process.on(["SIGINT","SIGTERM","SIGQUIT","exit"],()=>{try{require("inspector").close()}catch(t){Pn.info("Could not close debugger",t)}});else{let t=ft.get(jt.CONFIG_PARAMS.THREADS_DEBUG_STARTINGPORT);t&&Ld()>=0&&(e=t+Ld())}if(e){let t=ft.get(jt.CONFIG_PARAMS.THREADS_DEBUG_HOST),r=ft.get(jt.CONFIG_PARAMS.THREADS_DEBUG_WAITFORDEBUGGER);try{require("inspector").open(e,t,r)}catch(n){Pn.trace(`Could not start debugging on port ${e}, you may already be debugging:`,n.message)}}}else if(process.env.DEV_MODE&&TC)try{require("inspector").open(9229)}catch(e){_Te<=1&&Pn.trace("Could not start debugging on port 9229, you may already be debugging:",e.message)}process.on("uncaughtException",e=>{e.isHandled||e.code==="ECONNRESET"||e.code==="ECONNREFUSED"||e.message!=="write EIO"&&console.error("uncaughtException",e)});var{HDB_SETTINGS_NAMES:eve,CONFIG_PARAMS:gTe}=jt;ft.initSync();var STe=ft.get(gTe.HTTP_SESSIONAFFINITY),Vi={},RC=new Map;Vo.registerServer=NC;Vo.httpServer=IC;Vo.deliverSocket=OC;Vo.startServers=Bz;Vo.listenOnPorts=Hz;Vo.globals=mTe;Vo.when_components_loaded=null;tp.http=IC;tp.request=ATe;tp.socket=RTe;tp.ws=yTe;tp.upgrade=Gz;var Xh={},mT={},ST={},yC=[];function Bz(){return Vo.when_components_loaded=_S().loadRootComponents(!0).then(()=>{ep?.on("message",t=>{let{port:r,fd:n,data:s}=t;if(n)OC(n,r,s);else if(t.requestId)TTe(t);else if(t.type===jt.ITC_EVENT_TYPES.SHUTDOWN){Pn.trace("received shutdown request",gT);for(let i in Vi){let o=Vi[i],c;if(o.closeIdleConnections){let u=Object.getOwnPropertySymbols(o).find(h=>h.description.includes("connections")),f=0,d=setInterval(()=>{f++;let h=f>=100,_=o[u][h?"all":"idle"]();if(_.length===0){h&&clearInterval(d);return}f===1?Pn.info(`Closing ${_.length} idle connections`):h&&Pn.warn(`Forcefully closing ${_.length} active connections`);for(let p=0,S=_.length;p<S;p++){let g=_[p].socket;g._httpMessage&&!g._httpMessage.finished&&!h||(h?g.destroySoon():g.end(`HTTP/1.1 408 Request Timeout\r
129
+ `;console.log(n),Se.get(Ie.LOGGING_STDSTREAMS)&&ss.logsAtLevel("info")&&ss.suppressLogging(()=>{console.log(`Note that log messages are being sent to the console (stdout and stderr) in addition to the log file ${s}. This can be disabled by setting logging.stdStreams to false, and the log file can be directly monitored/tailed.`)})}a(cTe,"startupLog");function lTe(e){try{return Number.parseInt(xo.readFileSync(e,"utf8"),10)}catch{return null}}a(lTe,"readPidFile");function uTe(e){try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}a(uTe,"isProcessRunning")});var sI=I(ko=>{KT();var{isMainThread:kC,parentPort:up,threadId:vT,workerData:dTe}=require("node:worker_threads"),{Socket:fTe,createServer:_Te}=require("node:net"),{createServer:hTe,IncomingMessage:pTe}=require("node:http"),{createServer:mTe}=require("node:https"),{createSecureServer:ETe}=require("node:http2"),{Blob:gTe}=(cs(),D(bE)),{unlinkSync:mQ,existsSync:STe}=require("fs"),wn=j(),mt=ce(),jt=(H(),D(q)),{server:dp}=(Gr(),D(Wl)),{WebSocketServer:TTe}=require("ws"),{createServer:ATe}=require("node:tls"),{getTicketKeys:RTe,restartNumber:yTe,getWorkerIndex:Bd}=rt(),{Headers:FC,appendHeader:bTe}=(p_(),D(iB)),{recordAction:ap,recordActionBinary:lQ}=(Ii(),D(h_)),{Request:EQ,createReuseportFd:lp}=(TI(),D(ZK)),{checkMemoryLimit:OTe}=Qu(),{createTLSSelector:gQ}=Qs(),{resolvePath:SQ}=It(),{startupLog:NTe}=cQ(),{Readable:uQ}=require("node:stream"),wTe=ci(),TQ=mt.get(jt.CONFIG_PARAMS.THREADS_DEBUG);if(TQ){let e;if(kC)e=mt.get(jt.CONFIG_PARAMS.THREADS_DEBUG_PORT)??9229,process.on(["SIGINT","SIGTERM","SIGQUIT","exit"],()=>{try{require("inspector").close()}catch(t){wn.info("Could not close debugger",t)}});else{let t=mt.get(jt.CONFIG_PARAMS.THREADS_DEBUG_STARTINGPORT);t&&Bd()>=0&&(e=t+Bd())}if(e){let t=mt.get(jt.CONFIG_PARAMS.THREADS_DEBUG_HOST),r=mt.get(jt.CONFIG_PARAMS.THREADS_DEBUG_WAITFORDEBUGGER);try{require("inspector").open(e,t,r)}catch(n){wn.trace(`Could not start debugging on port ${e}, you may already be debugging:`,n.message)}}}else if(process.env.DEV_MODE&&kC)try{require("inspector").open(9229)}catch(e){yTe<=1&&wn.trace("Could not start debugging on port 9229, you may already be debugging:",e.message)}process.on("uncaughtException",e=>{e.isHandled||e.code==="ECONNRESET"||e.code==="ECONNREFUSED"||e.message!=="write EIO"&&console.error("uncaughtException",e)});var{HDB_SETTINGS_NAMES:Eve,CONFIG_PARAMS:ITe}=jt;mt.initSync();var CTe=mt.get(ITe.HTTP_SESSIONAFFINITY),Vi={},GC=new Map;ko.registerServer=KC;ko.httpServer=WC;ko.deliverSocket=VC;ko.startServers=AQ;ko.listenOnPorts=RQ;ko.globals=wTe;ko.when_components_loaded=null;dp.http=WC;dp.request=DTe;dp.socket=LTe;dp.ws=MTe;dp.upgrade=OQ;var cp={},MT={},UT={},qC=[];function AQ(){return ko.when_components_loaded=NS().loadRootComponents(!0).then(()=>{up?.on("message",t=>{let{port:r,fd:n,data:s}=t;if(n)VC(n,r,s);else if(t.requestId)PTe(t);else if(t.type===jt.ITC_EVENT_TYPES.SHUTDOWN){wn.trace("received shutdown request",vT);for(let i in Vi){let o=Vi[i],c;if(o.closeIdleConnections){let u=Object.getOwnPropertySymbols(o).find(h=>h.description.includes("connections")),f=0,d=setInterval(()=>{f++;let h=f>=100,_=o[u][h?"all":"idle"]();if(_.length===0){h&&clearInterval(d);return}f===1?wn.info(`Closing ${_.length} idle connections`):h&&wn.warn(`Forcefully closing ${_.length} active connections`);for(let p=0,S=_.length;p<S;p++){let g=_[p].socket;g._httpMessage&&!g._httpMessage.finished&&!h||(h?g.destroySoon():g.end(`HTTP/1.1 408 Request Timeout\r
130
130
  Connection: close\r
131
131
  \r
132
- `))}},25).unref()}o.close?.(()=>{if(ft.get(jt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&Ld()==0)try{Lz(Uz(ft.get(jt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)))}catch{}clearInterval(c),setTimeout(()=>{console.log("forced close server",i,gT),o.cantCleanupProperly||Pn.warn("Had to forcefully exit the thread",gT),process.exit(0)},5e3).unref()})}if(xz||process.env.DEV_MODE)try{require("inspector").close()}catch(i){Pn.info("Could not close debugger",i)}}}).ref();let e;Zh&&!STe&&(e=Hz()),Promise.resolve(e).then(()=>{if(Ld()===0)try{ETe(RC)}catch(t){console.error("Error displaying start-up log",t)}ep?.postMessage({type:jt.ITC_EVENT_TYPES.CHILD_STARTED})})})}a(Bz,"startServers");function Hz(){let e=[];for(let t in Vi){let r=Vi[t];if(t.includes?.("/")&&Ld()==0){lTe(t)&&Lz(t),e.push(new Promise((o,c)=>{r.listen({path:t},()=>{o({port:t,name:r.name,protocol_name:r.protocol_name}),Pn.info("Domain socket listening on "+t)}).on("error",c)}));continue}let n,s=ft.get(jt.CONFIG_PARAMS.HTTP_THREADRANGE);if(s){let o=typeof s=="string"?s.split("-"):s,c=Ld();if(c<o[0]||c>o[1])continue}let i;try{let o=t.lastIndexOf(":");o>0?Zh?n={fd:Zh(+t.slice(o+1).replace(/[\[\]]/g,""),t.slice(0,o))}:n={host:+t.slice(o+1).replace(/[\[\]]/g,""),port:t.slice(0,o)}:Zh?n={fd:Zh(+t,"::")}:n={port:t}}catch(o){console.error(`Unable to bind to port ${t}`,o);continue}e.push(new Promise((o,c)=>{r.listen(n,()=>{o({port:t,name:r.name,protocol_name:r.protocol_name}),Pn.trace("Listening on port "+t,gT)}).on("error",c)}))}return Promise.all(e)}a(Hz,"listenOnPorts");!TC&&!tTe?.noServerStart&&Bz();function OC(e,t,r){let n=e?.read?e:new rTe({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=Vi[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=Vi[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):o<5?i(o+1):(Pn.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}a(OC,"deliverSocket");var wz=new Map;function TTe(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=wz.get(s),r){case"connection":i=OC(void 0,t),wz.set(s,i),i.write=(c,l,u)=>(ep.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),u&&u(),!0),i.end=(c,l,u)=>(ep.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),u&&u(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),ep.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(TTe,"proxyRequest");var{getComponentName:TT}=(oh(),D(ih));function NC(e,t,r=!0){t||(t=ft.get(jt.CONFIG_PARAMS.HTTP_PORT));let n=Vi[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",Dz),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else Vi[t]=e;e.on("unhandled",Dz)}a(NC,"registerServer");function wC(e){let t=[],r=e?.securePort;return r&&t.push({port:r,secure:!0}),r=e?.port,r&&t.push({port:r,secure:!1}),t.length===0&&(t=[],ft.get(jt.CONFIG_PARAMS.HTTP_PORT)!=null&&t.push({port:ft.get(jt.CONFIG_PARAMS.HTTP_PORT),secure:ft.get(jt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),ft.get(jt.CONFIG_PARAMS.HTTP_SECUREPORT)!=null&&t.push({port:ft.get(jt.CONFIG_PARAMS.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&ft.get(jt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:Uz(ft.get(jt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)),secure:!1}),t}a(wC,"getPorts");function IC(e,t){let r=[];for(let{port:n,secure:s}of wC(t))r.push(kz(n,s,t?.isOperationsServer,t?.mtls)),typeof e=="function"?yC[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||n}):(e.isSecure=s,NC(e,n,!1)),ST[n]=RT(yC,n);return r}a(IC,"httpServer");function AT(e,t){let r=RC.get(e)??[];RC.set(e,[...r,t])}a(AT,"setPortServerMap");function kz(e,t,r,n){if(AT(e,{protocol_name:t?"HTTPS":"HTTP",name:TT()}),!mT[e]){let s=r?"operationsApi_network":"http",i=ft.get(s+"_keepAliveTimeout"),o=ft.get(s+"_timeout"),c=ft.get(s+"_headersTimeout"),l={keepAliveTimeout:i,headersTimeout:c,requestTimeout:o,highWaterMark:128*1024,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,maxHeaderSize:ft.get(jt.CONFIG_PARAMS.HTTP_MAXHEADERSIZE)},u=ft.get(s+"_mtls"),f=ft.get(s+"_mtls_required"),d;t&&(d=ft.get(s+"_http2")??!r,Object.assign(l,{allowHTTP1:!0,rejectUnauthorized:!!f,requestCert:!!(u||n),ticketKeys:fTe(),SNICallback:vz(r?"operations-api":"server",u)}));let h=pTe(),_=mT[e]=(t?d?aTe:oTe:sTe)(l,async(p,S)=>{try{let T=performance.now(),m=new Mz(p,S);r&&(m.isOperationsServer=!0);let A=await ST[e](m);if(!A){if(m._nodeResponse.statusCode)return;A=Fz(m)}if(A.headers?.set||(A.headers=new AC(A.headers)),h?A.headers?.set?.("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"):A.headers?.set?.("Server","HarperDB"),A.status===-1){for(let re of A.headers||[])S.setHeader(re[0],re[1]);return p.baseRequest=m,S.baseResponse=A,mT[e].emit("unhandled",p,S)}let w=A.status||200,M=performance.now(),F=M-T,G=A.body,K,ee=!1;if(!A.handlesHeaders){let re=A.headers||new AC;G?G.length>=0?(typeof G=="string"?re.set("Content-Length",Buffer.byteLength(G)):re.set("Content-Length",G.length),K=!0):G instanceof cTe&&(G.size?re.set("Content-Length",G.size):G.on&&(ee=!0,G.on("size",he=>{S.headersSent||S.setHeader("Content-Length",he)})),G=G.stream()):(re.set("Content-Length","0"),K=!0);let z=`hdb;dur=${F.toFixed(2)}`;if(A.wasCacheMiss&&(z+=", miss"),hTe(re,"Server-Timing",z,!0),!S.headersSent)if(ee){if(S.statusCode=w,re)if(re[Symbol.iterator])for(let[he,Te]of re)S.setHeader(he,Te);else for(let he in re)S.setHeader(he,re[he])}else S.writeHead(w,re&&(re[Symbol.iterator]?Array.from(re):re));K&&S.end(G)}let ie=m.handlerPath,X=m.method;if(Jh(F,"duration",ie,X,A.wasCacheMiss==null?void 0:A.wasCacheMiss?"cache-miss":"cache-hit"),Oz(w<400,"success",ie,X),Oz(1,"response_"+w,ie,X),!K)if(G instanceof ReadableStream&&(G=Nz.fromWeb(G)),(G[Symbol.iterator]||G[Symbol.asyncIterator])&&(G=Nz.from(G)),G?.pipe){G.pipe(S),G.destroy&&S.on("close",()=>{G.destroy()});let re=0;G.on("data",z=>{re+=z.length}),G.on("end",()=>{Jh(performance.now()-M,"transfer",ie,X),Jh(re,"bytes-sent",ie,X)})}else G?.then?G.then(re=>{S.end(re)},g):S.end(G)}catch(T){g(T)}function g(T){let m=T.headers;S.writeHead(T.statusCode||500,m&&(m[Symbol.iterator]?Array.from(m):m)),S.end(T.toString()),T.statusCode?T.statusCode===500?Pn.warn(T):Pn.info(T):Pn.error(T)}a(g,"onError")});i>=0&&(_.keepAliveTimeout=i),c>=0&&(_.headersTimeout=c),t&&(_.ports||(_.ports=[]),_.ports.push(e),l.SNICallback.initialize(_),u&&(_.mtlsConfig=u),_.on("secureConnection",p=>{p._parent.startTime&&Jh(performance.now()-p._parent.startTime,"tls-handshake",e),Jh(p.isSessionReused(),"tls-reused",e)}),_.isSecure=!0),NC(_,e)}return mT[e]}a(kz,"getHTTPServer");function RT(e,t){let r=Fz;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(RT,"makeCallbackChain");function Fz(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new AC}}a(Fz,"unhandled");function ATe(e,t){IC(e,{requestOnly:!0,...t})}a(ATe,"onRequest");function RTe(e,t){let r;if(t.securePort){AT(t.securePort,{protocol_name:"TLS",name:TT()});let n=vz("server",t.mtls);r=dTe({rejectUnauthorized:!!t.mtls?.required,requestCert:!!t.mtls,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,SNICallback:n},e),n.initialize(r),Vi[t.securePort]=r}return t.port&&(AT(t.port,{protocol_name:"TCP",name:TT()}),r=nTe(e,{noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600}),Vi[t.port]=r),r}a(RTe,"onSocket");Object.defineProperty(iTe.prototype,"upgrade",{get(){return"connection"in this.headers&&"upgrade"in this.headers&&this.headers.connection.includes("Upgrade")&&this.headers.upgrade.toLowerCase()=="websocket"},set(e){}});var Iz=[],bC={};function Gz(e,t){for(let{port:r}of wC(t))Iz[t?.runFirst?"unshift":"push"]({listener:e,port:r}),bC[r]=RT(Iz,r)}a(Gz,"onUpgrade");var Cz=[],Pz={};function yTe(e,t){let r=[];for(let{port:n,secure:s}of wC(t)){AT(n,{protocol_name:s?"WSS":"WS",name:TT()});let i=kz(n,s,t?.isOperationsServer,t?.mtls);Xh[n]||(Xh[n]=new uTe({noServer:!0,maxPayload:t.maxPayload??100*1024*1024}),Xh[n].on("connection",(o,c)=>{let l=new Mz(c);l.isWebSocket=!0;let u=ST[n](l);Pz[n](o,l,u)}),Gz((o,c,l,u)=>o.__harperdb_request_upgraded?u(o,c,l):Xh[n].handleUpgrade(o,c,l,f=>{o.__harperdb_request_upgraded=!0,u(o,c,l),Xh[n].emit("connection",f,o)}),{port:n}),i.on("upgrade",(o,c,l)=>{bC[n]&&bC[n](o,c,l)})),r.push(i),Cz[t?.runFirst?"unshift":"push"]({listener:e,port:n}),Pz[n]=RT(Cz,n),ST[n]=RT(yC,n)}return r}a(yTe,"onWebSocket");function Dz(e,t){t.writeHead(404),t.end(`Not found
133
- `)}a(Dz,"defaultNotFound")});module.exports=Kw();
132
+ `))}},25).unref()}o.close?.(()=>{if(mt.get(jt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&Bd()==0)try{mQ(SQ(mt.get(jt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)))}catch{}clearInterval(c),setTimeout(()=>{console.log("forced close server",i,vT),o.cantCleanupProperly||wn.warn("Had to forcefully exit the thread",vT),process.exit(0)},5e3).unref()})}if(TQ||process.env.DEV_MODE)try{require("inspector").close()}catch(i){wn.info("Could not close debugger",i)}}}).ref();let e;lp&&!CTe&&(e=RQ()),Promise.resolve(e).then(()=>{if(Bd()===0)try{NTe(GC)}catch(t){console.error("Error displaying start-up log",t)}up?.postMessage({type:jt.ITC_EVENT_TYPES.CHILD_STARTED})})})}a(AQ,"startServers");function RQ(){let e=[];for(let t in Vi){let r=Vi[t];if(t.includes?.("/")&&Bd()==0){STe(t)&&mQ(t),e.push(new Promise((o,c)=>{r.listen({path:t},()=>{o({port:t,name:r.name,protocol_name:r.protocol_name}),wn.info("Domain socket listening on "+t)}).on("error",c)}));continue}let n,s=mt.get(jt.CONFIG_PARAMS.HTTP_THREADRANGE);if(s){let o=typeof s=="string"?s.split("-"):s,c=Bd();if(c<o[0]||c>o[1])continue}let i;try{let o=t.lastIndexOf(":");o>0?lp?n={fd:lp(+t.slice(o+1).replace(/[\[\]]/g,""),t.slice(0,o))}:n={host:+t.slice(o+1).replace(/[\[\]]/g,""),port:t.slice(0,o)}:lp?n={fd:lp(+t,"::")}:n={port:t}}catch(o){console.error(`Unable to bind to port ${t}`,o);continue}e.push(new Promise((o,c)=>{r.listen(n,()=>{o({port:t,name:r.name,protocol_name:r.protocol_name}),wn.trace("Listening on port "+t,vT)}).on("error",c)}))}return Promise.all(e)}a(RQ,"listenOnPorts");!kC&&!dTe?.noServerStart&&AQ();function VC(e,t,r){let n=e?.read?e:new fTe({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=Vi[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=Vi[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):o<5?i(o+1):(wn.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}a(VC,"deliverSocket");var dQ=new Map;function PTe(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=dQ.get(s),r){case"connection":i=VC(void 0,t),dQ.set(s,i),i.write=(c,l,u)=>(up.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),u&&u(),!0),i.end=(c,l,u)=>(up.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),u&&u(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),up.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(PTe,"proxyRequest");var{getComponentName:xT}=(ph(),D(hh));function KC(e,t,r=!0){t||(t=mt.get(jt.CONFIG_PARAMS.HTTP_PORT));let n=Vi[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",pQ),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else Vi[t]=e;e.on("unhandled",pQ)}a(KC,"registerServer");function YC(e){let t=[],r=e?.securePort;return r&&t.push({port:r,secure:!0}),r=e?.port,r&&t.push({port:r,secure:!1}),t.length===0&&(t=[],mt.get(jt.CONFIG_PARAMS.HTTP_PORT)!=null&&t.push({port:mt.get(jt.CONFIG_PARAMS.HTTP_PORT),secure:mt.get(jt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),mt.get(jt.CONFIG_PARAMS.HTTP_SECUREPORT)!=null&&t.push({port:mt.get(jt.CONFIG_PARAMS.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&mt.get(jt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:SQ(mt.get(jt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)),secure:!1}),t}a(YC,"getPorts");function WC(e,t){let r=[];for(let{port:n,secure:s}of YC(t))r.push(yQ(n,s,t?.isOperationsServer,t?.mtls)),typeof e=="function"?qC[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||n}):(e.isSecure=s,KC(e,n,!1)),UT[n]=HT(qC,n);return r}a(WC,"httpServer");function BT(e,t){let r=GC.get(e)??[];GC.set(e,[...r,t])}a(BT,"setPortServerMap");function yQ(e,t,r,n){if(BT(e,{protocol_name:t?"HTTPS":"HTTP",name:xT()}),!MT[e]){let s=r?"operationsApi_network":"http",i=mt.get(s+"_keepAliveTimeout"),o=mt.get(s+"_timeout"),c=mt.get(s+"_headersTimeout"),l={keepAliveTimeout:i,headersTimeout:c,requestTimeout:o,highWaterMark:128*1024,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,maxHeaderSize:mt.get(jt.CONFIG_PARAMS.HTTP_MAXHEADERSIZE)},u=mt.get(s+"_mtls"),f=mt.get(s+"_mtls_required"),d;t&&(d=mt.get(s+"_http2")??!r,Object.assign(l,{allowHTTP1:!0,rejectUnauthorized:!!f,requestCert:!!(u||n),ticketKeys:RTe(),SNICallback:gQ(r?"operations-api":"server",u)}));let h=OTe(),_=MT[e]=(t?d?ETe:mTe:hTe)(l,async(p,S)=>{try{let R=performance.now(),E=new EQ(p,S);r&&(E.isOperationsServer=!0);let A=await UT[e](E);if(!A){if(E._nodeResponse.statusCode)return;A=bQ(E)}if(A.headers?.set||(A.headers=new FC(A.headers)),h?A.headers?.set?.("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"):A.headers?.set?.("Server","HarperDB"),A.status===-1){for(let ne of A.headers||[])S.setHeader(ne[0],ne[1]);return p.baseRequest=E,S.baseResponse=A,MT[e].emit("unhandled",p,S)}let O=A.status||200,v=performance.now(),F=v-R,G=A.body,Y,te=!1;if(!A.handlesHeaders){let ne=A.headers||new FC;G?G.length>=0?(typeof G=="string"?ne.set("Content-Length",Buffer.byteLength(G)):ne.set("Content-Length",G.length),Y=!0):G instanceof gTe&&(G.size?ne.set("Content-Length",G.size):G.on&&(te=!0,G.on("size",pe=>{S.headersSent||S.setHeader("Content-Length",pe)})),G=G.stream()):(ne.set("Content-Length","0"),Y=!0);let Q=`hdb;dur=${F.toFixed(2)}`;if(A.wasCacheMiss&&(Q+=", miss"),bTe(ne,"Server-Timing",Q,!0),!S.headersSent)if(te){if(S.statusCode=O,ne)if(ne[Symbol.iterator])for(let[pe,Re]of ne)S.setHeader(pe,Re);else for(let pe in ne)S.setHeader(pe,ne[pe])}else S.writeHead(O,ne&&(ne[Symbol.iterator]?Array.from(ne):ne));Y&&S.end(G)}let se=E.handlerPath,X=E.method;if(ap(F,"duration",se,X,A.wasCacheMiss==null?void 0:A.wasCacheMiss?"cache-miss":"cache-hit"),lQ(O<400,"success",se,X),lQ(1,"response_"+O,se,X),!Y)if(G instanceof ReadableStream&&(G=uQ.fromWeb(G)),(G[Symbol.iterator]||G[Symbol.asyncIterator])&&(G=uQ.from(G)),G?.pipe){G.pipe(S),G.destroy&&S.on("close",()=>{G.destroy()});let ne=0;G.on("data",Q=>{ne+=Q.length}),G.on("end",()=>{ap(performance.now()-v,"transfer",se,X),ap(ne,"bytes-sent",se,X)})}else G?.then?G.then(ne=>{S.end(ne)},g):S.end(G)}catch(R){g(R)}function g(R){let E=R.headers;S.writeHead(R.statusCode||500,E&&(E[Symbol.iterator]?Array.from(E):E)),S.end(R.toString()),R.statusCode?R.statusCode===500?wn.warn(R):wn.info(R):wn.error(R)}a(g,"onError")});i>=0&&(_.keepAliveTimeout=i),c>=0&&(_.headersTimeout=c),t&&(_.ports||(_.ports=[]),_.ports.push(e),l.SNICallback.initialize(_),u&&(_.mtlsConfig=u),_.on("secureConnection",p=>{p._parent.startTime&&ap(performance.now()-p._parent.startTime,"tls-handshake",e),ap(p.isSessionReused(),"tls-reused",e)}),_.isSecure=!0),KC(_,e)}return MT[e]}a(yQ,"getHTTPServer");function HT(e,t){let r=bQ;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(HT,"makeCallbackChain");function bQ(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new FC}}a(bQ,"unhandled");function DTe(e,t){WC(e,{requestOnly:!0,...t})}a(DTe,"onRequest");function LTe(e,t){let r;if(t.securePort){BT(t.securePort,{protocol_name:"TLS",name:xT()});let n=gQ("server",t.mtls);r=ATe({rejectUnauthorized:!!t.mtls?.required,requestCert:!!t.mtls,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,SNICallback:n},e),n.initialize(r),Vi[t.securePort]=r}return t.port&&(BT(t.port,{protocol_name:"TCP",name:xT()}),r=_Te(e,{noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600}),Vi[t.port]=r),r}a(LTe,"onSocket");Object.defineProperty(pTe.prototype,"upgrade",{get(){return"connection"in this.headers&&"upgrade"in this.headers&&this.headers.connection.toLowerCase().includes("upgrade")&&this.headers.upgrade.toLowerCase()=="websocket"},set(e){}});var fQ=[],$C={};function OQ(e,t){for(let{port:r}of YC(t))fQ[t?.runFirst?"unshift":"push"]({listener:e,port:r}),$C[r]=HT(fQ,r)}a(OQ,"onUpgrade");var _Q=[],hQ={};function MTe(e,t){let r=[];for(let{port:n,secure:s}of YC(t)){BT(n,{protocol_name:s?"WSS":"WS",name:xT()});let i=yQ(n,s,t?.isOperationsServer,t?.mtls);cp[n]||(cp[n]=new TTe({noServer:!0,maxPayload:t.maxPayload??100*1024*1024}),cp[n].on("connection",(o,c)=>{let l=new EQ(c);l.isWebSocket=!0;let u=UT[n](l);hQ[n](o,l,u)}),OQ((o,c,l,u)=>o.__harperdb_request_upgraded?u(o,c,l):cp[n].handleUpgrade(o,c,l,f=>{o.__harperdb_request_upgraded=!0,u(o,c,l),cp[n].emit("connection",f,o)}),{port:n}),i.on("upgrade",(o,c,l)=>{$C[n]&&$C[n](o,c,l)})),r.push(i),_Q[t?.runFirst?"unshift":"push"]({listener:e,port:n}),hQ[n]=HT(_Q,n),UT[n]=HT(qC,n)}return r}a(MTe,"onWebSocket");function pQ(e,t){t.writeHead(404),t.end(`Not found
133
+ `)}a(pQ,"defaultNotFound")});module.exports=sI();