harperdb 4.4.19 → 4.4.21

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.
@@ -8,14 +8,14 @@ Caused by:`));else if(typeof u=="object")try{n+=JSON.stringify(u)}catch{n+="Obje
8
8
  `).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:A2.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(N2,"findPs")});var xt=O((tAe,FC)=>{"use strict";var I2="__dbis__",w2="__txns__",C2="__environment_name__",P2="__dbi_defintion__",D2={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"},L2=["__createdtime__","__updatedtime__"],M2="\uFFFF",kC={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},U2=Object.values(kC);FC.exports={AUDIT_STORE_NAME:w2,INTERNAL_DBIS_NAME:I2,DBI_DEFINITION_NAME:P2,SEARCH_TYPES:D2,TIMESTAMP_NAMES:L2,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:C2,TRANSACTIONS_DBI_NAMES_ENUM:kC,TRANSACTIONS_DBIS:U2,OVERFLOW_MARKER:M2}});var Pn=O((rAe,zC)=>{"use strict";var GC=L(),qC=xt(),$C={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},VC=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),KC={500:VC("There was an error processing your request."),400:"Invalid request"},v2=KC[$C.INTERNAL_SERVER_ERROR],B2={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")},x2={CONFIG_VALIDATION:a(e=>`HarperDB config file validation error: ${e}`,"CONFIG_VALIDATION")},H2={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 ${qC.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${qC.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"},F2={ATTR_NAME_LENGTH_ERR:a(e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${GC.INSERT_MODULE_ENUM.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 ${GC.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE} bytes, check log for more info`,INVALID_FORWARD_SLASH_IN_HASH_ERR:"transaction aborted due to record(s) with a hash value that contains a forward slash, check log for more info",RECORD_MISSING_HASH_ERR:"transaction aborted due to record(s) with no hash value, check log for more info"},YC={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"},G2={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."},q2={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")},$2={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"},V2={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},K2={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")},WC={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")},jC={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")},Y2={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"},W2={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},j2={...YC,...H2,...B2,...G2,...q2,...$2,...V2,...K2,...F2,...WC,...jC,...Y2,...W2,...x2};zC.exports={CHECK_LOGS_WRAPPER:VC,HDB_ERROR_MSGS:j2,DEFAULT_ERROR_MSGS:KC,DEFAULT_ERROR_RESP:v2,HTTP_STATUS_CODES:$C,LMDB_ERRORS_ENUM:k2,AUTHENTICATION_ERROR_MSGS:YC,VALIDATION_ERROR_MSGS:WC,ITC_ERRORS:jC}});var _e=O((sAe,XC)=>{"use strict";var Dl=Pn(),z2=K(),Q2=L(),fh=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,QC),this.statusCode=n||Dl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Dl.DEFAULT_ERROR_MSGS[n]?Dl.DEFAULT_ERROR_MSGS[n]:Dl.DEFAULT_ERROR_MSGS[Dl.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&&z2[s](i)}},Og=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}},Ng=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function QC(e,t,r,n=Q2.LOG_LEVELS.ERROR,s=null,i=!1){if(JC(e))return e;let o=new fh(e,t,r,n,s);return i&&delete o.stack,o}a(QC,"handleHDBError");function JC(e){return e.__proto__.constructor.name===fh.name}a(JC,"isHDBError");XC.exports={isHDBError:JC,handleHDBError:QC,ClientError:Og,ServerError:Ng,hdb_errors:Dl}});var Rt=O((oAe,iP)=>{"use strict";var zd=L(),J2=te(),sn=ne(),Qd=require("path"),X2=require("minimist"),ZC=require("fs-extra"),eP=require("lodash");sn.initSync();var{CONFIG_PARAMS:Vo,DATABASES_PARAM_CONFIG:Kd,SYSTEM_SCHEMA_NAME:Eh}=zd,Yd,Wd,jd;function tP(){if(Yd!==void 0)return Yd;if(sn.getHdbBasePath()!==void 0)return Yd=sn.get(Vo.STORAGE_PATH)||Qd.join(sn.getHdbBasePath(),zd.DATABASES_DIR_NAME),Yd}a(tP,"getBaseSchemaPath");function rP(){if(Wd!==void 0)return Wd;if(sn.getHdbBasePath()!==void 0)return Wd=sP(Eh),Wd}a(rP,"getSystemSchemaPath");function nP(){if(jd!==void 0)return jd;if(sn.getHdbBasePath()!==void 0)return jd=sn.get(zd.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||Qd.join(sn.getHdbBasePath(),zd.TRANSACTIONS_DIR_NAME),jd}a(nP,"getTransactionAuditStoreBasePath");function Z2(e,t){let r=sn.get(Vo.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||Qd.join(nP(),e.toString())}a(Z2,"getTransactionAuditStorePath");function sP(e,t){e=e.toString(),t=t&&t.toString();let r=sn.get(zd.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||Qd.join(tP(),e)}a(sP,"getSchemaPath");function e4(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,X2(process.argv));let n=r[Vo.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!J2.isObject(n))throw o;i=n}for(let o of i){let c=o[Eh];if(!c)continue;let l=sn.get(Vo.DATABASES);l=l??{};let u=c?.tables?.[t]?.[Kd.PATH];if(u)return eP.set(l,[Eh,Kd.TABLES,t,Kd.PATH],u),sn.setProperty(Vo.DATABASES,l),u;let d=c?.[Kd.PATH];if(d)return eP.set(l,[Eh,Kd.PATH],d),sn.setProperty(Vo.DATABASES,l),d}}let s=r[Vo.STORAGE_PATH.toUpperCase()];if(s){if(!ZC.pathExistsSync(s))throw new Error(s+" does not exist");let i=Qd.join(s,e);return ZC.mkdirsSync(i),sn.setProperty(Vo.STORAGE_PATH,s),i}return rP()}a(e4,"initSystemSchemaPaths");function t4(){Yd=void 0,Wd=void 0,jd=void 0}a(t4,"resetPaths");iP.exports={getBaseSchemaPath:tP,getSystemSchemaPath:rP,getTransactionAuditStorePath:Z2,getTransactionAuditStoreBasePath:nP,getSchemaPath:sP,initSystemSchemaPaths:e4,resetPaths:t4}});var on=O((uAe,uP)=>{"use strict";var r4=Pn().LMDB_ERRORS_ENUM,cAe=require("lmdb"),n4=xt(),lAe=require("buffer").Buffer,{OVERFLOW_MARKER:oP,MAX_SEARCH_KEY_LENGTH:hh}=n4,aP=["number","string","symbol","boolean","bigint"];function s4(e){if(e=e?.primaryStore||e,!e)throw new Error(r4.ENV_REQUIRED)}a(s4,"validateEnv");function i4(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(i4,"stringifyData");function o4(e){return e instanceof Date?e.valueOf():e}a(o4,"convertKeyValueToWrite");function a4(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(aP.includes(typeof e))return e.length>hh?[e.slice(0,hh)+oP]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(aP.includes(typeof i))i.length>hh?r.push(i.slice(0,hh)+oP):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(a4,"getIndexedValues");var ph=0,cP=0;function lP(){cP=Date.now()-performance.now()}a(lP,"adjustStartTime");lP();var c4=6e4;setInterval(lP,c4).unref();function l4(){let e=performance.now()+cP;return e>ph?(ph=e,e):(ph+=488e-6,ph)}a(l4,"getNextMonotonicTime");uP.exports={validateEnv:s4,stringifyData:i4,convertKeyValueToWrite:o4,getNextMonotonicTime:l4,getIndexedValues:a4}});var Jd=O((_Ae,dP)=>{"use strict";var u4=L().OPERATIONS_ENUM,Ig=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=u4.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};dP.exports=Ig});var Xd=O((hAe,hP)=>{"use strict";var EAe=Jd(),mh=L(),wg=te(),_P=K(),d4=require("uuid"),{handleHDBError:Sh,hdb_errors:_4}=_e(),{HDB_ERROR_MSGS:Th,HTTP_STATUS_CODES:gh}=_4;hP.exports=fP;function fP(e,t,r){for(let s=0;s<t.length;s++)EP(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];f4(i,r,e.operation)}}a(fP,"processRows");fP.validateAttribute=EP;function EP(e){if(Buffer.byteLength(String(e))>mh.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Sh(new Error,Th.ATTR_NAME_LENGTH_ERR(e),gh.BAD_REQUEST,void 0,void 0,!0);if(wg.isEmptyOrZeroLength(e)||wg.isEmpty(e.trim()))throw Sh(new Error,Th.ATTR_NAME_NULLISH_ERR,gh.BAD_REQUEST,void 0,void 0,!0)}a(EP,"validateAttribute");function f4(e,t,r){if(!e.hasOwnProperty(t)||wg.isEmptyOrZeroLength(e[t])){if(r===mh.OPERATIONS_ENUM.INSERT||r===mh.OPERATIONS_ENUM.UPSERT){e[t]=d4.v4();return}throw _P.error("Update transaction aborted due to record with no hash value:",e),Sh(new Error,Th.RECORD_MISSING_HASH_ERR,gh.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>mh.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw _P.error(e),Sh(new Error,Th.HASH_VAL_LENGTH_ERR,gh.BAD_REQUEST,void 0,void 0,!0)}a(f4,"validateHash")});var pP,Dn,Cg,Ll=Ie(()=>{pP=require("events"),Dn=class extends pP.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;drainCloseListener;currentDrainResolver;[Symbol.asyncIterator](){let t=new Cg;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)}},Cg=class{static{a(this,"EventQueueIterator")}queue;push(t){this.queue.send(t)}next(){let t=this.queue.getNextMessage();return t?{value:t}:new Promise(r=>this.queue.resolveNext=r)}return(t){return this.queue.emit("close"),{value:t,done:!0}}throw(t){return this.queue.emit("close",t),{done:!0}}}});var Ja={};je(Ja,{server:()=>it});var mP,it,qr=Ie(()=>{mP=M(fi()),it={};(0,mP._assignPackageExport)("server",it)});var Lg={};je(Lg,{loadGQLSchema:()=>p4,start:()=>Dg,startOnMainThread:()=>h4});function Dg({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:l,NamedTypeNode:u,StringValueNode:d}=await import("graphql"),_=o(new c(r.toString(),s)),E=new Map,f=[],h;for(let g of _.definitions)switch(g.kind){case l.OBJECT_TYPE_DEFINITION:let x=function(W){if(W.kind==="NonNullType"){let Q=x(W.type);return Q.nullable=!1,Q}if(W.kind==="ListType")return{type:"array",elements:x(W.type)};let se={type:W.name?.value};return Object.defineProperty(se,"location",{value:W.loc.startToken}),se};a(x,"getProperty");let S=g.name.value,y=[],I={table:null,database:null,properties:y};E.set(S,I);for(let W of g.directives){if(W.name.value==="table"){for(let se of W.arguments)I[se.name.value]=se.value.value;I.schema&&(I.database=I.schema),I.table||(I.table=S),I.audit&&(I.audit=I.audit!=="false"),I.attributes=I.properties,f.push(I)}if(W.name.value==="sealed"&&(I.sealed=!0),W.name.value==="splitSegments"&&(I.splitSegments=!0),W.name.value==="replicate"&&(I.replicate=!0),W.name.value==="export"){I.export=!0;for(let se of W.arguments)typeof I.export!="object"&&(I.export={}),I.export[se.name.value]=se.value.value}}let U=!1,X={};for(let W of g.fields){let V=x(W.type);V.name=W.name.value,y.push(V),X[V.name]=void 0;for(let se of W.directives){let Q=se.name.value;if(Q==="primaryKey")U?console.warn("Can not define two attributes as a primary key at",se.loc):(V.isPrimaryKey=!0,U=!0);else if(Q==="indexed")V.indexed=!0;else if(Q==="computed"){for(let de of se.arguments||[])if(de.name.value==="from"){let j=de.value.value;V.computed={from:m(j,de,X)},V.version==null&&(V.version=j)}else de.name.value==="version"&&(V.version=de.value.value);V.computed=V.computed||!0}else if(Q==="relationship"){let de={};for(let j of se.arguments)de[j.name.value]=j.value.value;V.relationship=de}else if(Q==="createdTime")V.assignCreatedTime=!0;else if(Q==="updatedTime")V.assignUpdatedTime=!0;else if(Q==="expiresAt")V.expiresAt=!0;else if(Q==="allow"){let de=V.authorizedRoles=[];for(let j of se.arguments)j.name.value==="role"&&de.push(j.value.value)}else server.knownGraphQLDirectives.includes(Q)&&console.warn(`@${Q} is an unknown directive, at`,se.loc)}}I.type=S,S==="Query"&&(h=I)}function T(g){let S=E.get(g.type);S?(Object.defineProperty(g,"properties",{value:S.properties}),Object.defineProperty(g,"definition",{value:S})):g.type==="array"?T(g.elements):E4.includes(g.type)||(0,TP.getWorkerIndex)()===0&&console.error(`The type ${g.type} is unknown at line ${g.location.line}, column ${g.location.column}, in ${s}`)}a(T,"connectPropertyType");for(let g of E.values())for(let S of g.properties)T(S);for(let g of f)g.tableClass=e(g),g.export&&(g.export.name===""?i.set((0,Pg.dirname)(n),g.tableClass):i.set((0,Pg.dirname)(n)+"/"+(g.export.name||g.type),g.tableClass,g.export));function m(g,S,y){return new SP.Script(`function computed(attributes) { return function(record) { with(attributes) { with (record) { return ${g}; } } } } computed;`,{filename:s,lineOffset:S.loc.startToken.line-1,columnOffset:S.loc.startToken.column}).runInThisContext()(y)}a(m,"createComputedFrom")}}var Pg,SP,TP,E4,h4,p4,gP=Ie(()=>{Pg=require("path"),SP=require("node:vm");Pe();TP=M(ot()),E4=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];server.knownGraphQLDirectives&&(server.knownGraphQLDirectives=["table","sealed","export","primaryKey","indexed","computed","relationship","createdTime","updatedTime","expiresAt","allow"]);a(Dg,"start");h4=Dg,p4=Dg({ensureTable:pt}).handleFile});var IP={};je(IP,{parse:()=>Ug,streamAsJSON:()=>Zd,stringify:()=>Xa});function Zd(e){return new Mg({value:e})}function RP(e){return console.error(e),JSON.stringify(e.toString())}function AP(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function Xa(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===OP)return NP(e);if(t.resolution)return t.resolution.then(()=>Xa(e));throw t}}function NP(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+=NP(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+Xa(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function Ug(e){return e?.length>0?(typeof e!="string"&&(e=e.toString()),T4.test(e)?m4.parse(e):JSON.parse(e)):null}var yP,bP,m4,S4,OP,Mg,T4,vg=Ie(()=>{yP=require("stream"),bP=M(require("json-bigint-fixes")),m4=(0,bP.default)({useNativeBigInt:!0}),S4=1e4,OP={message:"Cannot serialize BigInt to JSON"};BigInt.prototype.toJSON=function(){throw OP};a(Zd,"streamAsJSON");Mg=class extends yP.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),RP)}catch(s){yield RP(s)}else yield Xa(t)}else yield Xa(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);AP(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>S4?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 AP(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(RP,"handleError");a(AP,"when");a(Xa,"stringify");a(NP,"jsStringify");T4=/[[,:]\s*-?\d{16,}/;a(Ug,"parse")});var FP=O((yAe,kP)=>{"use strict";var Bg=require("recursive-iterator"),g4=require("alasql"),xg=require("clone"),wP=te(),{handleHDBError:CP,hdb_errors:R4}=_e(),{HDB_ERROR_MSGS:PP,HTTP_STATUS_CODES:DP}=R4,{getDatabases:A4}=(Pe(),oe(ut)),y4=["DISTINCT_ARRAY"],LP=Symbol("validateTables"),Hg=Symbol("validateTable"),AAe=Symbol("getAllColumns"),MP=Symbol("validateAllColumns"),Rh=Symbol("findColumn"),UP=Symbol("validateOrderBy"),e_=Symbol("validateSegment"),kg=Symbol("validateColumn"),vP=Symbol("setColumnsForTable"),BP=Symbol("checkColumnsForAsterisk"),xP=Symbol("validateGroupBy"),HP=Symbol("hasColumns"),Fg=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[LP](),this[BP](),this[MP]()}[LP](){if(this[HP]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Hg](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Hg](t.table)})}}[HP](){let t=!1,r=new Bg(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[Hg](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=A4();if(!r[t.databaseid])throw CP(new Error,PP.SCHEMA_NOT_FOUND(t.databaseid),DP.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw CP(new Error,PP.TABLE_NOT_FOUND(t.databaseid,t.tableid),DP.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=xg(s);i.table=xg(t),this.attributes.push(i)})}[Rh](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)}[BP](){let t=new Bg(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[vP](r.tableid)}[vP](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new g4.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[MP](){this[e_](this.statement.columns,!1),this[e_](this.statement.joins,!1),this[e_](this.statement.where,!1),this[xP](this.statement.group,!1),this[e_](this.statement.order,!0)}[e_](t,r){if(!t)return;let n=new Bg(t),s=[];for(let{node:i,path:o}of n)!wP.isEmpty(i)&&!wP.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[UP](i):s.push(this[kg](i)));return s}[xP](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&y4.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=xg(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[Rh](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[Rh](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`}[UP](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[kg](t)}[kg](t){let r=this[Rh](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]}};kP.exports=Fg});var qP=O((OAe,GP)=>{"use strict";var Gg=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")}};GP.exports=Gg});var VP=O((IAe,$P)=>{"use strict";var qg=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};$P.exports=qg});var jP={};je(jP,{HAS_EXPIRATION:()=>bh,HAS_RESIDENCY_ID:()=>Qg,HAS_STRUCTURE_UPDATE:()=>Oh,LAST_TIMESTAMP_PLACEHOLDER:()=>s_,LOCAL_TIMESTAMP:()=>b4,METADATA:()=>t_,NO_TIMESTAMP:()=>Vg,PENDING_LOCAL_TIME:()=>Jg,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>zg,RecordEncoder:()=>jg,TIMESTAMP_ASSIGN_LAST:()=>N4,TIMESTAMP_ASSIGN_NEW:()=>YP,TIMESTAMP_ASSIGN_PREVIOUS:()=>WP,TIMESTAMP_PLACEHOLDER:()=>Ah,TIMESTAMP_RECORD_PREVIOUS:()=>Kg,getUpdateRecord:()=>Xg,handleLocalTimeForGets:()=>Nh});function w4(){return n_[0]=n_[0]^64,O4.getFloat64(0)}function Nh(e){let t=e.getEntry;e.readCount=0,e.cachePuts=!1,e.getEntry=function(i,o){e.readCount++;let c=t.call(this,i,o),l=c?.value,u=l?.[t_];return u>=0&&(c.metadataFlags=u,c.localTime=l.localTime,c.value=l.value,c.residencyId=l.residencyId,l.expiresAt>=0&&(c.expiresAt=l.expiresAt)),c&&(c.key=i),c};let r=e.get;e.get=function(i,o){let c=r.call(this,i,o);return c?.[t_]>=0?c.value:c};let n=e.getRange;e.getRange=function(i){let o=n.call(this,i);return i.valuesForKey?o.map(c=>c?.value):i.values===!1||i.onlyCount?o:o.map(c=>{let l=c.value,u=l[t_];return u>=0&&(c.metadataFlags=u,c.localTime=l.localTime,c.value=l.value,c.residencyId=l.residencyId,l.expiresAt>=0&&(c.expiresAt=l.expiresAt)),c})};let s=e.useReadTransaction();if(s.done(),!s.done.isTracked){let i=s.constructor,o=s.use,c=s.done;i.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,Za.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let l=0;l<Za.length;l++){let u=Za[l].deref();(!u||u.isDone||u.isCommitted)&&Za.splice(l--,1)}},i.prototype.done.isTracked=!0}return e}function Xg(e,t,r){return function(n,s,i,o,c=-1,l,u,d="put",_,E){_||l==null?Ml=i?.localTime?Kg|WP:Vg:Ml=l?i?.localTime?Kg|16384:YP|16384:Vg;let f=u?.expiresAt;if(f>=0&&(c|=bh),r_=c,Yg=f,i?.version===o&&l===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:Ml>0},T,m=0;try{let g=i?.residencyId,S=u?.residencyId;S&&(Wg=S,r_|=Qg,m|=ec),g!==S&&(m|=tc,g||(g=0)),c&bh&&(m|=o_),u?.originatingOperation&&(m|=i_),_&&(h.ifVersion=T=i?.version??null);let y=e.put(n,s,h);if(l){let I=u?.user?.username;if(E&&(yh=e.encoder.encode(E)),e.encoder.hasStructureUpdate&&(m|=Oh,e.encoder.hasStructureUpdate=!1),_&&i?.localTime){let U=i?.localTime,x=r.get(U);if(x){let X=Ht(x).previousLocalTime;return r.put(U,Ul(o,t,n,X,u?.nodeId??server.replication.getThisNodeId(r)??0,I,d,yh,m,S,g,f),{ifVersion:T}),y}}r.put(s_,Ul(o,t,n,i?.localTime?1:0,u?.nodeId??server.replication?.getThisNodeId(r)??0,I,d,yh,m,S,g,f,u?.originatingOperation),{append:d!=="invalidate",instructedWrite:!0,ifVersion:T})}return y}catch(g){throw g.message+=" id: "+n+" options: "+h,g}}}var KP,$g,Ah,s_,zg,b4,t_,n_,O4,Vg,YP,N4,WP,Kg,bh,Qg,Jg,Oh,I4,yh,Ml,r_,Yg,Wg,jg,Za,vl=Ie(()=>{KP=require("msgpackr");Qi();$g=M(K()),Ah=new Uint8Array([1,1,1,1,4,64,0,0]),s_=new Uint8Array([1,1,1,1,1,0,0,0]),zg=new Uint8Array([1,1,1,1,3,64,0,0]),b4=Symbol("local-timestamp"),t_=Symbol("metadata"),n_=new Uint8Array(8),O4=new DataView(n_.buffer,0,8),Vg=0,YP=0,N4=1,WP=3,Kg=4,bh=16,Qg=32,Jg=1,Oh=256,Ml=0,r_=-1,Yg=-1,Wg=0,jg=class extends KP.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(s,i){if(Ml||r_>=0){let o=0,c=Ml;c&&(o+=8,Ml=0);let l=r_,u=Yg,d=Wg;l>=0&&(o+=2,r_=-1,u>=0&&(o+=8,Yg=-1),d&&(o+=4,Wg=0));let _=I4=r.call(this,s,i|2048|o);yh=_.subarray((_.start||0)+o,_.end);let E=_.start||0;return c&&(Ah[4]=c,Ah[5]=c>>8,_.set(Ah,E),E+=8),l>=0&&(_[E++]=l&31,_[E++]=l>>5,u>=0&&((_.dataView||(_.dataView=new DataView(_.buffer,_.byteOffset,_.byteLength))).setFloat64(E,u),E+=8),d&&(_.dataView||(_.dataView=new DataView(_.buffer,_.byteOffset,_.byteLength))).setUint32(E,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(n_,0,c),c+=8;else for(let E=0;E<8;E++)n_[E]=t[c++];l=w4(),i=t[c]}let u,d;i<32&&(o=i|t[c+1]<<5,c+=2,o&bh&&(u=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8),o&Qg&&(d=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4));let _=r?.valueAsBuffer?t.subarray(c,s):super.decode(t.subarray(c,s),s-c);return{localTime:l,value:_,[t_]:o,expiresAt:u,residencyId:d}}return r?.valueAsBuffer?t:super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(w4,"getTimestamp");a(Nh,"handleLocalTimeForGets");Za=[];setInterval(()=>{for(let e=0;e<Za.length;e++){let t=Za[e].deref();!t||t.isDone||t.isCommitted?Za.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?($g.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):$g.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(Xg,"getUpdateRecord")});var a_=O((LAe,QP)=>{"use strict";var zP=ne(),C4=L(),{RecordEncoder:P4}=(vl(),oe(jP)),DAe=require("fs");zP.initSync();var D4=zP.get(C4.CONFIG_PARAMS.STORAGE_CACHING)!==!1,Zg=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=D4&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:P4})}};QP.exports=Zg});var c_=O((UAe,JP)=>{"use strict";var Ln=ne(),as=L();Ln.initSync();var Ih=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=Ln.get(as.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Ln.get(as.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Ln.get(as.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",Ln.get(as.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=Ln.get(as.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),Ln.get(as.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=Ln.get(as.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),Ln.get(as.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=Ln.get(as.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),Ln.get(as.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=Ln.get(as.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=Ln.get(as.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};JP.exports=Ih;Ih.MAX_DBS=1e4});var mt=O((BAe,aD)=>{"use strict";var tR=require("lmdb"),Fs=require("fs-extra"),Mn=require("path"),wh=on(),eD=K(),an=Pn().LMDB_ERRORS_ENUM,Ch=VP(),rR=a_(),tD=c_(),Ko=xt(),XP=L(),{table:L4,resetDatabases:M4}=(Pe(),oe(ut)),ZP=ne(),Gs=Ko.INTERNAL_DBIS_NAME,rD=Ko.DBI_DEFINITION_NAME,U4="data.mdb",v4="lock.mdb",l_=".mdb",B4="-lock",eR=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=cs(t,r),this.key_type=this.dbi[Ko.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Ko.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new tR.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Ph(e,t){if(e===void 0)throw new Error(an.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(an.ENV_NAME_REQUIRED)}a(Ph,"pathEnvNameValidation");async function nR(e,t,r=!0){try{await Fs.access(e)}catch(n){throw n.code==="ENOENT"?new Error(an.INVALID_BASE_PATH):n}try{let n=Mn.join(e,t+l_);return await Fs.access(n,Fs.constants.R_OK|Fs.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await Fs.access(Mn.join(e,t,U4),Fs.constants.R_OK|Fs.constants.F_OK),Mn.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(an.INVALID_ENVIRONMENT)}else throw new Error(an.INVALID_ENVIRONMENT);throw n}}a(nR,"validateEnvironmentPath");function Dh(e,t){if(wh.validateEnv(e),t===void 0)throw new Error(an.DBI_NAME_REQUIRED)}a(Dh,"validateEnvDBIName");async function x4(e,t,r=!1,n=!1){Ph(e,t);let s=Mn.basename(e);t=t.toString();let i=ZP.get(XP.CONFIG_PARAMS.DATABASES);i||ZP.setProperty(XP.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await nR(e,t,n),nD(e,t,r)}catch(o){if(o.message===an.INVALID_ENVIRONMENT){let c=Mn.join(e,t);await Fs.mkdirp(n?c:e);let l=new tD(n?c:c+l_,!1),u=tR.open(l);u.dbis=Object.create(null);let d=new rR(!1);u.openDB(Gs,d),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let _=sR(e,t,r);return u[Ko.ENVIRONMENT_NAME_KEY]=_,global.lmdb_map[_]=u,u}throw o}}a(x4,"createEnvironment");async function H4(e,t,r,n=!0){Ph(e,t),t=t.toString();let s=Mn.join(e,t);return L4({table:t,database:Mn.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(H4,"copyEnvironment");async function nD(e,t,r=!1){Ph(e,t),t=t.toString();let n=sR(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 nR(e,t),i=Mn.join(e,t+l_),o=s!=i,c=new tD(s,o),l=tR.open(c);l.dbis=Object.create(null);let u=iD(l);for(let d=0;d<u.length;d++)cs(l,u[d]);return l[Ko.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}a(nD,"openEnvironment");async function k4(e,t,r=!1){Ph(e,t),t=t.toString();let n=Mn.join(e,t+l_),s=await nR(e,t);if(global.lmdb_map!==void 0){let i=sR(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await sD(o),delete global.lmdb_map[i]}}await Fs.remove(s),await Fs.remove(s===n?s+B4:Mn.join(Mn.dirname(s),v4))}a(k4,"deleteEnvironment");async function sD(e){wh.validateEnv(e);let t=e[Ko.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(sD,"closeEnvironment");function sR(e,t,r=!1){let s=`${Mn.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(sR,"getCachedEnvironmentName");function F4(e){wh.validateEnv(e);let t=Object.create(null),r=cs(e,Gs);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==Gs)try{t[n]=Object.assign(new Ch,s)}catch{eD.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(F4,"listDBIDefinitions");function iD(e){wh.validateEnv(e);let t=[],r=cs(e,Gs);for(let{key:n}of r.getRange({start:!1}))n!==Gs&&t.push(n);return t}a(iD,"listDBIs");function G4(e,t){let n=cs(e,Gs).getEntry(t),s=new Ch;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{eD.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(G4,"getDBIDefinition");function oD(e,t,r,n=!r){if(Dh(e,t),t=t.toString(),t===Gs)throw new Error(an.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return cs(e,t)}catch(s){if(s.message===an.DBI_DOES_NOT_EXIST){let i=new rR(r,n===!0),o=e.openDB(t,i),c=new Ch(r===!0,n);return o[rD]=c,cs(e,Gs).putSync(t,c),e.dbis[t]=o,o}throw s}}a(oD,"createDBI");function cs(e,t){if(Dh(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Gs?r=G4(e,t):r=new Ch,r===void 0)throw new Error(an.DBI_DOES_NOT_EXIST);let n;try{let s=new rR(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(an.DBI_DOES_NOT_EXIST):s}return n[rD]=r,e.dbis[t]=n,n}a(cs,"openDBI");function q4(e,t){Dh(e,t),t=t.toString();let r=cs(e,t),n=r.getStats();return r[Ko.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(q4,"statDBI");async function $4(e,t){try{let r=Mn.join(e,t+l_);return(await Fs.stat(r)).size}catch{throw new Error(an.INVALID_ENVIRONMENT)}}a($4,"environmentDataSize");function V4(e,t){if(Dh(e,t),t=t.toString(),t===Gs)throw new Error(an.CANNOT_DROP_INTERNAL_DBIS_NAME);cs(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],cs(e,Gs).removeSync(t)}a(V4,"dropDBI");function K4(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{cs(e,i)}catch(o){if(o.message===an.DBI_DOES_NOT_EXIST)oD(e,i,i!==t,i===t),n=!0;else throw o}}n&&M4()}a(K4,"initializeDBIs");aD.exports={openDBI:cs,openEnvironment:nD,createEnvironment:x4,listDBIs:iD,listDBIDefinitions:F4,createDBI:oD,dropDBI:V4,statDBI:q4,deleteEnvironment:k4,initializeDBIs:K4,TransactionCursor:eR,environmentDataSize:$4,copyEnvironment:H4,closeEnvironment:sD}});var lD=O((HAe,cD)=>{"use strict";var iR=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};cD.exports=iR});var dD=O((FAe,uD)=>{"use strict";var oR=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}};uD.exports=oR});var fD=O((qAe,_D)=>{"use strict";var aR=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};_D.exports=aR});var nc=O((WAe,pD)=>{"use strict";var Y4=mt(),W4=lD(),j4=dD(),z4=fD(),pi=on(),u_=Pn().LMDB_ERRORS_ENUM,Q4=xt(),Ji=L(),J4=te(),X4=require("uuid"),VAe=require("lmdb"),{handleHDBError:Z4,hdb_errors:eJ}=_e(),{OVERFLOW_MARKER:KAe,MAX_SEARCH_KEY_LENGTH:YAe}=Q4,ED=ne();ED.initSync();var Lh=ED.get(Ji.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),cR=Ji.TIME_STAMP_NAMES_ENUM.CREATED_TIME,rc=Ji.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function tJ(e,t,r,n,s=pi.getNextMonotonicTime()){_R(e,t,r,n),lR(e,t,r);let i=new W4,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l];hD(u,!0,s);let d=rJ(e,t,r,u),_=u[t];o.push(d),c.push(_)}return uR(o,c,n,i,s)}a(tJ,"insertRecords");function rJ(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 d=c([[{}]]);Array.isArray(d)&&(c=d[0][Ji.FUNC_VAL],n[o]=c)}let l=pi.getIndexedValues(c),u=e.dbis[o];if(l){Lh&&u.prefetch(l.map(d=>({key:d,value:s})),Mh);for(let d=0,_=l.length;d<_;d++)u.put(l[d],s)}}Lh&&e.dbis[t].prefetch([s],Mh),e.dbis[t].put(s,n,n[rc])})}a(rJ,"insertRecord");function nJ(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(nJ,"removeSkippedRecords");function hD(e,t,r){let n=r>0;(n||!Number.isInteger(e[rc]))&&(e[rc]=r||(r=pi.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[cR]))&&(e[cR]=r||pi.getNextMonotonicTime()):delete e[cR]}a(hD,"setTimestamps");function lR(e,t,r){r.indexOf(Ji.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Ji.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Ji.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Ji.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),Y4.initializeDBIs(e,t,r)}a(lR,"initializeTransaction");async function sJ(e,t,r,n,s=pi.getNextMonotonicTime()){_R(e,t,r,n),lR(e,t,r);let i=new j4,o=[],c=[],l=[];for(let u=0;u<n.length;u++){let d=n[u],_=d[t],E;try{E=dR(e,t,d,_,i,!0,s)}catch{i.skipped_hashes.push(_),o.push(u);continue}c.push(E),l.push(_)}return uR(c,l,n,i,s,o)}a(sJ,"updateRecords");async function iJ(e,t,r,n,s=pi.getNextMonotonicTime()){try{_R(e,t,r,n)}catch(l){throw Z4(l,l.message,eJ.HTTP_STATUS_CODES.BAD_REQUEST)}lR(e,t,r);let i=new z4,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l],d;J4.isEmpty(u[t])?(d=X4.v4(),u[t]=d):d=u[t];let _=dR(e,t,u,d,i,!1,s);o.push(_),c.push(d)}return uR(o,c,n,i,s)}a(iJ,"upsertRecords");async function uR(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||pi.getNextMonotonicTime(),nJ(r,i),n}a(uR,"finalizeWrite");function dR(e,t,r,n,s,i=!1,o){let c=e.dbis[t],l=c.getEntry(n),u=l?.value,d=u;if(!u){if(i)return!1;u={}}if(hD(r,!d,o),Number.isInteger(r[rc])&&u[rc]>r[rc])return!1;d&&s.original_records.push(u);let _,E=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let T=r[h],m=e.dbis[h];if(m===void 0)continue;let g=u[h];if(typeof T=="function"){let y=T([[u]]);Array.isArray(y)&&(T=y[0][Ji.FUNC_VAL],r[h]=T)}if(T===g)continue;let S=pi.getIndexedValues(g);if(S){Lh&&m.prefetch(S.map(y=>({key:y,value:n})),Mh);for(let y=0,I=S.length;y<I;y++)m.remove(S[y],n)}if(S=pi.getIndexedValues(T),S){Lh&&m.prefetch(S.map(y=>({key:y,value:n})),Mh);for(let y=0,I=S.length;y<I;y++)m.put(S[y],n)}}let f={...u,...r};c.put(n,f,f[rc])},"do_put");return l?_=c.ifVersion(n,l.version,E):_=c.ifNoExists(n,E),_.then(f=>f?!0:dR(e,t,r,n,s,i,o))}a(dR,"updateUpsertRecord");function oJ(e,t,r){if(pi.validateEnv(e),t===void 0)throw new Error(u_.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(u_.WRITE_ATTRIBUTES_REQUIRED):new Error(u_.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(oJ,"validateBasic");function _R(e,t,r,n){if(oJ(e,t,r),!Array.isArray(n))throw n===void 0?new Error(u_.RECORDS_REQUIRED):new Error(u_.RECORDS_MUST_BE_ARRAY)}a(_R,"validateWrite");function Mh(){}a(Mh,"noop");pD.exports={insertRecords:tJ,updateRecords:sJ,upsertRecords:iJ}});var Xi=O((zAe,aJ)=>{aJ.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:"__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 Si=O((QAe,TD)=>{"use strict";var SD=te(),mD=L(),Bl=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,mi=require("joi"),Yo={schema_format:{pattern:Bl,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},cJ=mi.alternatives(mi.string().min(1).max(Yo.schema_length.maximum).pattern(Bl).messages({"string.pattern.base":"{:#label} "+Yo.schema_format.message}),mi.number(),mi.array()).required(),lJ=mi.alternatives(mi.string().min(1).max(Yo.schema_length.maximum).pattern(Bl).messages({"string.pattern.base":"{:#label} "+Yo.schema_format.message}),mi.number()),uJ=mi.alternatives(mi.string().min(1).max(Yo.schema_length.maximum).pattern(Bl).messages({"string.pattern.base":"{:#label} "+Yo.schema_format.message}),mi.number()).required();function dJ(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Yo.schema_length.maximum?`'${e}' maximum of 250 characters`:Bl.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(dJ,"checkValidTable");function _J(e,t){return SD.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(_J,"validateSchemaExists");function fJ(e,t){let r=t.state.ancestors[0].schema;return SD.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(fJ,"validateTableExists");function EJ(e,t){return e.toLowerCase()===mD.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${mD.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(EJ,"validateSchemaName");TD.exports={common_validators:Yo,schema_regex:Bl,hdb_schema_table:cJ,validateSchemaExists:_J,validateTableExists:fJ,validateSchemaName:EJ,checkValidTable:dJ,hdb_database:lJ,hdb_table:uJ}});var _t=O((XAe,gD)=>{"use strict";var cn=require("validate.js");cn.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||cn.validators.type.checks[t](e)?null:` must be a '${t}' value`};cn.validators.type.checks={Object:a(function(e){return cn.isObject(e)&&!cn.isArray(e)},"Object"),Array:cn.isArray,Integer:cn.isInteger,Number:cn.isNumber,String:cn.isString,Date:cn.isDate,Boolean:a(function(e){return typeof e=="boolean"},"Boolean")};cn.validators.hasValidFileExt=function(e,t){return cn.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};gD.exports={validateObject:hJ,validateObjectAsync:pJ,validateBySchema:mJ};function hJ(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=cn(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 cn.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(pJ,"validateObjectAsync");function mJ(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(mJ,"validateBySchema")});var Uh=O((eye,RD)=>{var{common_validators:Ti}=Si(),__=_t(),d_="is required",rr={database:{presence:!1,format:Ti.schema_format,length:Ti.schema_length},schema:{presence:!1,format:Ti.schema_format,length:Ti.schema_length},table:{presence:!0,format:Ti.schema_format,length:Ti.schema_length},attribute:{presence:!0,format:Ti.schema_format,length:Ti.schema_length},hash_attribute:{presence:!0,format:Ti.schema_format,length:Ti.schema_length}};function f_(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(f_,"makeAttributesStrings");function SJ(e){return e=f_(e),rr.table.presence=!1,rr.attribute.presence=!1,rr.hash_attribute.presence=!1,__.validateObject(e,rr)}a(SJ,"schema_object");function TJ(e){return e=f_(e),rr.table.presence={message:d_},rr.attribute.presence=!1,rr.hash_attribute.presence=!1,__.validateObject(e,rr)}a(TJ,"table_object");function gJ(e){return e=f_(e),rr.table.presence={message:d_},rr.attribute.presence=!1,__.validateObject(e,rr)}a(gJ,"create_table_object");function RJ(e){return e=f_(e),rr.table.presence={message:d_},rr.attribute.presence={message:d_},rr.hash_attribute.presence=!1,__.validateObject(e,rr)}a(RJ,"attribute_object");function AJ(e){return e=f_(e),rr.table.presence={message:d_},rr.attribute.presence=!1,rr.hash_attribute.presence=!1,__.validateObject(e,rr)}a(AJ,"describe_table");function yJ(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(yJ,"validateTableResidence");RD.exports={schema_object:SJ,create_table_object:gJ,table_object:TJ,attribute_object:RJ,describe_table:AJ,validateTableResidence:yJ}});var yD=O((rye,AD)=>{"use strict";var bJ=require("uuid"),fR=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||bJ.v4(),this.schema_table=`${this.schema}.${this.table}`}};AD.exports=fR});var vh=O((sye,bD)=>{"use strict";var OJ=yD(),ER=class extends OJ{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}};bD.exports=ER});var ND=O((oye,OD)=>{"use strict";OD.exports=IJ;var NJ="inserted";function IJ(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===NJ?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(IJ,"returnObject")});var Bh=O((lye,PD)=>{"use strict";var wJ=L(),hR=mt(),CJ=nc(),{getSystemSchemaPath:PJ,getSchemaPath:DJ}=Rt(),cye=Xi(),LJ=Uh(),MJ=vh(),UJ=ND(),{handleHDBError:ID,hdb_errors:CD}=_e(),wD=te(),{HTTP_STATUS_CODES:vJ}=CD,BJ="inserted";PD.exports=xJ;async function xJ(e){let t=LJ.attribute_object(e);if(t)throw ID(new Error,t.message,CD.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&wD.checkGlobalSchemaTable(e.schema,e.table);if(r)throw ID(new Error,r,vJ.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=wD.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 MJ(e.schema,e.table,e.attribute,e.id);try{let i=await hR.openEnvironment(DJ(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}`);hR.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await hR.openEnvironment(PJ(),wJ.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await CJ.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdb_attribute_attributes,[s]);return UJ(BJ,c,{records:[s]},l)}catch(i){throw i}}a(xJ,"lmdbCreateAttribute")});var mR=O((dye,LD)=>{var{hdb_table:HJ,hdb_database:DD}=Si(),kJ=_t(),pR=require("joi"),FJ={undefined:"undefined",null:"null"},GJ=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||FJ[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"),qJ=pR.object({database:DD,schema:DD,table:HJ,records:pR.array().items(pR.object().custom(GJ)).required()});LD.exports=function(e){return kJ.validateBySchema(e,qJ)}});var E_=O((Eye,UD)=>{"use strict";var Zi=te(),MD=K(),fye=mR(),{getDatabases:$J}=(Pe(),oe(ut)),{ClientError:sc}=_e();UD.exports=VJ;function VJ(e){if(Zi.isEmpty(e))throw new sc("invalid update parameters defined.");if(Zi.isEmptyOrZeroLength(e.schema))throw new sc("invalid schema specified.");if(Zi.isEmptyOrZeroLength(e.table))throw new sc("invalid table specified.");if(!Array.isArray(e.records))throw new sc("records must be an array");let t=$J()[e.schema]?.[e.table];if(Zi.isEmpty(t))throw new sc(`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&&Zi.isEmptyOrZeroLength(o[r]))throw MD.error("a valid hash attribute must be provided with update record:",o),new sc("a valid hash attribute must be provided with update record, check log for more info");if(!Zi.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw MD.error(`a valid hash value must be provided with ${e.operation} record:`,o),new sc(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!Zi.isEmpty(o[r])&&o[r]!==""&&n.has(Zi.autoCast(o[r]))&&(o.skip=!0),n.add(Zi.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(VJ,"insertUpdateValidate")});var BD=O((pye,vD)=>{"use strict";var SR=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};vD.exports=SR});var kD=O((Sye,HD)=>{"use strict";var TR=mt(),KJ=K(),xD=Pn().LMDB_ERRORS_ENUM;HD.exports=YJ;async function YJ(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 TR.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==xD.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await TR.closeEnvironment(global.lmdb_map[n]),await TR.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==xD.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){KJ.error(t)}}a(YJ,"cleanLMDBMap")});var eo=O((gye,$D)=>{"use strict";var h_=require("crypto"),WJ=ne(),{CONFIG_PARAMS:jJ}=L(),GD="aes-256-cbc",zJ=32,QJ=16,gR=64,qD=32,JJ=gR+qD,FD=new Map;$D.exports={encrypt:XJ,decrypt:ZJ,createNatsTableStreamName:e3};function XJ(e){let t=h_.randomBytes(zJ),r=h_.randomBytes(QJ),n=h_.createCipheriv(GD,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(XJ,"encrypt");function ZJ(e){let t=e.substr(0,gR),r=e.substr(gR,qD),n=e.substr(JJ,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=h_.createDecipheriv(GD,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(ZJ,"decrypt");function e3(e,t){let r=WJ.get(jJ.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=FD.get(r);return n||(n=h_.createHash("md5").update(r).digest("hex"),FD.set(r,n)),n}a(e3,"createNatsTableStreamName")});var gi=O((yye,YD)=>{"use strict";var Aye=$r(),p_=K(),VD=Uh(),t3=eo(),xh=te(),{handleHDBError:Hh,hdb_errors:r3}=_e(),{HDB_ERROR_MSGS:kh,HTTP_STATUS_CODES:RR}=r3,KD=ne();KD.initSync();var{getDatabases:AR}=(Pe(),oe(ut)),n3=require("fs-extra"),s3=L();YD.exports={describeAll:i3,describeTable:Fh,describeSchema:o3};async function i3(e={}){try{let t=xh.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=AR(),o={},c={},l=[],u=e?.exact_count;for(let _ in i){o[_]=!0,!t&&!s&&!r&&(c[_]=e.hdb_user?.role?.permission[_]?.describe);let E=i[_];for(let f in E)try{let h;if(t||s||r)h=await Fh({schema:_,table:f,exact_count:u});else if(n&&n[_].describe&&n[_].tables[f].describe){let T=n[_].tables[f].attribute_permissions;h=await Fh({schema:_,table:f,exact_count:u},T)}h&&l.push(h)}catch(h){p_.error(h)}}let d={};for(let _ in l)t||s||r?(d[l[_].schema]==null&&(d[l[_].schema]={}),d[l[_].schema][l[_].name]=l[_],o[l[_].schema]&&delete o[l[_].schema]):c[l[_].schema]&&(d[l[_].schema]==null&&(d[l[_].schema]={}),d[l[_].schema][l[_].name]=l[_],o[l[_].schema]&&delete o[l[_].schema]);for(let _ in o)t||s||r?d[_]={}:c[_]&&(d[_]={});return d}catch(t){return p_.error("Got an error in describeAll"),p_.error(t),Hh(new Error,kh.DESCRIBE_ALL_ERR)}}a(i3,"describeAll");async function Fh(e,t){xh.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=VD.describe_table(e);if(i)throw i;let c=AR()[r];if(!c)throw Hh(new Error,kh.SCHEMA_NOT_FOUND(e.schema),RR.NOT_FOUND);let l=c[n];if(!l)throw Hh(new Error,kh.TABLE_NOT_FOUND(e.schema,e.table),RR.NOT_FOUND);function u(f){d.push({attribute:f.attribute,type:f.type,elements:f.elements?.type,indexed:f.indexed,is_primary_key:f.isPrimaryKey,assigned_created_time:f.assignCreatedTime,assigned_updated_time:f.assignUpdatedTime,nullable:f.nullable,properties:f.properties?f.properties.map(h=>({type:h.type,name:h.name})):void 0})}a(u,"pushAtt");let d=[];if(s){let f={};s.forEach(h=>{h.describe&&(f[h.attribute_name]=!0)}),l.attributes.forEach(h=>{f[h.name]&&u(h)})}else l.attributes?.forEach(f=>u(f));let _;try{_=(await n3.stat(l.primaryStore.env.path)).size}catch(f){p_.warn("unable to get database size",f)}let E={schema:r,name:l.tableName,hash_attribute:l.attributes.find(f=>f.isPrimaryKey||f.is_hash_attribute)?.name,audit:l.audit,schema_defined:l.schemaDefined,attributes:d,db_size:_};l.replicate!==void 0&&(E.replicate=l.replicate),l.expirationMS!==void 0&&(E.expiration=l.expirationMS/1e3+"s"),l.sealed!==void 0&&(E.sealed=l.sealed),l.sources?.length>0&&(E.sources=l.sources.map(f=>f.name).filter(f=>f&&f!=="NATSReplicator"&&f!=="Replicator")),KD.get(s3.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(E.clustering_stream_name=t3.createNatsTableStreamName(E.schema,E.name));try{let f=l.getRecordCount({exactCount:e.exact_count==="true"});E.record_count=f.recordCount,E.table_size=l.getSize(),E.db_audit_size=l.getAuditSize(),E.estimated_record_range=f.estimatedRange;let h=l.auditStore;if(h)for(let T of h.getKeys({reverse:!0,limit:1}))E.last_updated_record=T[0];if(!E.last_updated_record&&l.indices.__updatedtime__)for(let T of l.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))E.last_updated_record=T}catch(f){p_.warn(`unable to stat table dbi due to ${f}`)}return E}a(Fh,"descTable");async function o3(e){xh.transformReq(e);let t=VD.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=AR()[n];if(!i)throw Hh(new Error,kh.SCHEMA_NOT_FOUND(e.schema),RR.NOT_FOUND);let o={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),xh.isEmpty(l)||l.describe){let u=await Fh({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);u&&(o[u.name]=u)}}return o}a(o3,"describeSchema")});var ls=O((Iye,JD)=>{var a3=Xi(),{callbackify:jD,promisify:c3}=require("util"),{getDatabases:zD}=(Pe(),oe(ut));JD.exports={setSchemaDataToGlobal:WD,getTableSchema:l3,getSystemSchema:u3,setSchemaDataToGlobalAsync:c3(WD)};var QD=gi(),Oye=jD(QD.describeAll),Nye=jD(QD.describeTable);function WD(e){global.hdb_schema=zD(),e&&e()}a(WD,"setSchemaDataToGlobal");function l3(e,t,r){let n=zD()[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(l3,"getTableSchema");function u3(){return a3}a(u3,"getSystemSchema")});var Vr=O((Cye,tL)=>{"use strict";var qh=mR(),Cr=te(),d3=require("util"),$h=Un(),_3=ls(),XD=K(),{handleHDBError:ic,hdb_errors:f3}=_e(),{HTTP_STATUS_CODES:oc}=f3,E3=d3.promisify(_3.getTableSchema),h3="updated",ZD="inserted",eL="upserted";tL.exports={insert:m3,update:S3,upsert:T3,validation:p3,flush:g3};async function p3(e){if(Cr.isEmpty(e))throw new Error("invalid update parameters defined.");if(Cr.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Cr.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await E3(e.schema,e.table),r=qh(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&&Cr.isEmptyOrZeroLength(c[n]))throw XD.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(!Cr.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw XD.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!Cr.isEmpty(c[n])&&c[n]!==""&&s.has(Cr.autoCast(c[n]))&&(c.skip=!0),s.add(Cr.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(p3,"validation");async function m3(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=qh(e);if(t)throw ic(new Error,t.message,oc.BAD_REQUEST);Cr.transformReq(e);let r=Cr.checkSchemaTableExist(e.schema,e.table);if(r)throw ic(new Error,r,oc.BAD_REQUEST);let n=await $h.createRecords(e);return Gh(ZD,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(m3,"insertData");async function S3(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=qh(e);if(t)throw ic(new Error,t.message,oc.BAD_REQUEST);Cr.transformReq(e);let r=Cr.checkSchemaTableExist(e.schema,e.table);if(r)throw ic(new Error,r,oc.BAD_REQUEST);let n=await $h.updateRecords(e);return Cr.isEmpty(n.existing_rows)?Gh(h3,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):Gh(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(S3,"updateData");async function T3(e){if(e.operation!=="upsert")throw ic(new Error,"invalid operation, must be upsert",oc.INTERNAL_SERVER_ERROR);let t=qh(e);if(t)throw ic(new Error,t.message,oc.BAD_REQUEST);Cr.transformReq(e);let r=Cr.checkSchemaTableExist(e.schema,e.table);if(r)throw ic(new Error,r,oc.BAD_REQUEST);let n=await $h.upsertRecords(e);return Gh(eL,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(T3,"upsertData");function Gh(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===ZD?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===eL?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(Gh,"returnObject");function g3(e){return Cr.transformReq(e),$h.flush(e.schema,e.table)}a(g3,"flush")});var bR=O((Dye,sL)=>{var R3=_t(),yR=require("joi"),{hdb_table:A3,hdb_database:rL}=Si(),nL={schema:rL,database:rL,table:A3},y3={date:yR.date().iso().required()},b3={timestamp:yR.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};sL.exports=function(e,t){let r=t==="timestamp"?{...nL,...b3}:{...nL,...y3},n=yR.object(r);return R3.validateBySchema(e,n)}});var aL=O((Lye,oL)=>{var O3=_t(),OR=require("joi"),{hdb_table:N3,hdb_database:iL}=Si(),I3=OR.object({schema:iL,database:iL,table:N3,hash_values:OR.array().required(),ids:OR.array()});oL.exports=function(e){return O3.validateBySchema(e,I3)}});var CR=O((Mye,cL)=>{"use strict";var NR=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}},IR=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}},wR=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};cL.exports={InsertObject:NR,NoSQLSeachObject:IR,DeleteResponseObject:wR}});var zo=O((vye,fL)=>{"use strict";var uL=bR(),w3=aL(),ac=te(),lL=require("moment"),dL=K(),{promisify:C3,callbackify:P3}=require("util"),cc=L(),D3=ls(),PR=C3(D3.getTableSchema),DR=Un(),{DeleteResponseObject:L3}=CR(),{handleHDBError:Wo,hdb_errors:M3}=_e(),{HDB_ERROR_MSGS:Vh,HTTP_STATUS_CODES:jo}=M3,U3="records successfully deleted",v3=P3(_L);fL.exports={delete:v3,deleteRecord:_L,deleteFilesBefore:B3,deleteAuditLogsBefore:x3};async function B3(e){let t=uL(e,"date");if(t)throw Wo(t,t.message,jo.BAD_REQUEST,void 0,void 0,!0);if(ac.transformReq(e),!lL(e.date,lL.ISO_8601).isValid())throw Wo(new Error,Vh.INVALID_DATE,jo.BAD_REQUEST,cc.LOG_LEVELS.ERROR,Vh.INVALID_DATE,!0);let n=ac.checkSchemaTableExist(e.schema,e.table);if(n)throw Wo(new Error,n,jo.NOT_FOUND,cc.LOG_LEVELS.ERROR,n,!0);let s=await DR.deleteRecordsBefore(e);if(await PR(e.schema,e.table),dL.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(B3,"deleteFilesBefore");async function x3(e){let t=uL(e,"timestamp");if(t)throw Wo(t,t.message,jo.BAD_REQUEST,void 0,void 0,!0);if(ac.transformReq(e),isNaN(e.timestamp))throw Wo(new Error,Vh.INVALID_VALUE("Timestamp"),jo.BAD_REQUEST,cc.LOG_LEVELS.ERROR,Vh.INVALID_VALUE("Timestamp"),!0);let r=ac.checkSchemaTableExist(e.schema,e.table);if(r)throw Wo(new Error,r,jo.NOT_FOUND,cc.LOG_LEVELS.ERROR,r,!0);let n=await DR.deleteAuditLogsBefore(e);return await PR(e.schema,e.table),dL.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(x3,"deleteAuditLogsBefore");async function _L(e){e.ids&&(e.hash_values=e.ids);let t=w3(e);if(t)throw Wo(t,t.message,jo.BAD_REQUEST,void 0,void 0,!0);ac.transformReq(e);let r=ac.checkSchemaTableExist(e.schema,e.table);if(r)throw Wo(new Error,r,jo.NOT_FOUND,cc.LOG_LEVELS.ERROR,r,!0);try{await PR(e.schema,e.table);let n=await DR.deleteRecords(e);return ac.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${U3}`),n}catch(n){if(n.message===cc.SEARCH_NOT_FOUND_MESSAGE){let s=new L3;return s.message=cc.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(_L,"deleteRecord")});var Kh=O((xye,pL)=>{var H3=require("crypto"),EL=9;function k3(e){let t=G3(EL),r=hL(e+t);return t+r}a(k3,"createHash");function F3(e,t){let r=e?.substr(0,EL),n=r+hL(t+r);return e===n}a(F3,"validateHash");function G3(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,n="";for(let s=0;s<e;s++){let i=Math.floor(Math.random()*r);n+=t[i]}return n}a(G3,"generateSalt");function hL(e){return H3.createHash("md5").update(e).digest("hex")}a(hL,"md5");pL.exports={hash:k3,validate:F3}});var SL=O((kye,mL)=>{var LR=_t(),Kr={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 q3(e){return Kr.password.presence=!0,Kr.username.presence=!0,Kr.role.presence=!0,Kr.active.presence=!0,LR.validateObject(e,Kr)}a(q3,"addUserValidation");function $3(e){return Kr.password.presence=!1,Kr.username.presence=!0,Kr.role.presence=!1,Kr.active.presence=!1,LR.validateObject(e,Kr)}a($3,"alterUserValidation");function V3(e){return Kr.password.presence=!1,Kr.username.presence=!0,Kr.role.presence=!1,Kr.active.presence=!1,LR.validateObject(e,Kr)}a(V3,"dropUserValidation");mL.exports={addUserValidation:q3,alterUserValidation:$3,dropUserValidation:V3}});var ft=O((qye,gL)=>{"use strict";var{platform:Gye}=require("os"),K3="nats-server.zip",MR="nats-server",Y3=process.platform==="win32"?`${MR}.exe`:MR,W3=/^[^\s.,*>]+$/,TL="__request__",j3=a(e=>`${e}.${TL}`,"REQUEST_SUBJECT"),z3={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},Q3={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},J3={HUB:"hub.pid",LEAF:"leaf.pid"},X3={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},Z3={SUCCESS:"success",ERROR:"error"},eX={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},tX={TXN:"txn",MSGID:"msgid"},xl={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},rX={[xl.ERR]:1,[xl.WRN]:2,[xl.INF]:3,[xl.DBG]:4,[xl.TRC]:5},nX={debug:"-D",trace:"-DVV"};gL.exports={NATS_SERVER_ZIP:K3,NATS_SERVER_NAME:MR,NATS_BINARY_NAME:Y3,PID_FILES:J3,NATS_CONFIG_FILES:Q3,SERVER_SUFFIX:X3,NATS_TERM_CONSTRAINTS_RX:W3,REQUEST_SUFFIX:TL,UPDATE_REMOTE_RESPONSE_STATUSES:Z3,CLUSTER_STATUS_STATUSES:eX,REQUEST_SUBJECT:j3,SUBJECT_PREFIXES:tX,MSG_HEADERS:z3,LOG_LEVELS:xl,LOG_LEVEL_FLAGS:nX,LOG_LEVEL_HIERARCHY:rX}});var UR=O(RL=>{"use strict";var sX={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
9
9
  `),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
10
10
  `)},iX="certificate.pem",oX="privateKey.pem",aX="caCertificate.pem",cX="natsCertificate.pem",lX="natsCaCertificate.pem",yt={DEFAULT:"default","DEFAULT-CA":"default-ca",SERVER:"server",CA:"ca","OPERATIONS-API":"operations-api","OPERATIONS-CA":"operations-ca"},uX={tls_certificate:yt.SERVER,tls_certificateAuthority:yt.CA,customFunctions_tls_certificate:yt.SERVER,customFunctions_tls_certificateAuthority:yt.CA,operationsApi_tls_certificate:yt["OPERATIONS-API"],operationsApi_tls_certificateAuthority:yt["OPERATIONS-CA"]},dX={[yt.SERVER]:2,[yt.DEFAULT]:1},_X={[yt["OPERATIONS-API"]]:3,[yt.SERVER]:2,[yt.DEFAULT]:1},fX={[yt["OPERATIONS-API"]]:3,[yt.SERVER]:2,[yt.DEFAULT]:1},EX={[yt["OPERATIONS-CA"]]:3,[yt.CA]:2,[yt["DEFAULT-CA"]]:1},hX={[yt["OPERATIONS-CA"]]:3,[yt.CA]:2,[yt["DEFAULT-CA"]]:1},pX={[yt.CA]:2,[yt["DEFAULT-CA"]]:1};Object.assign(RL,{CERTIFICATE_PEM_NAME:iX,PRIVATEKEY_PEM_NAME:oX,CA_PEM_NAME:aX,CERT_NAME:yt,CERT_CONFIG_NAME_MAP:uX,CERT_PREFERENCE_APP:dX,CERT_PREFERENCE_OPS:_X,CERT_PREFERENCE_REP:fX,CA_CERT_PREFERENCE_REP:EX,CA_CERT_PREFERENCE_OPS:hX,CA_CERT_PREFERENCE_APP:pX,CERTIFICATE_VALUES:sX,NATS_CERTIFICATE_PEM_NAME:cX,NATS_CA_PEM_NAME:lX})});var BR=O((Yye,IL)=>{"use strict";var OL=require("fs-extra"),me=require("joi"),mX=require("os"),{boolean:xe,string:wt,number:nr,array:uc}=me.types(),{totalmem:AL}=require("os"),lc=require("path"),SX=K(),vR=te(),Kye=UR(),yL=L(),TX=_t(),bL="log",gX="components",RX="Invalid logging.rotation.maxSize unit. Available units are G, M or K",AX="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",yX="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",bX="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",OX="rootPath config parameter is undefined",ln=me.alternatives([nr.min(0),wt]).optional().empty(null),Yh=me.alternatives([uc.items(wt,{host:wt.required(),port:ln},{hostname:wt.required(),port:ln}).empty(null),uc.items(wt)]),Ri,NL=!1;IL.exports={configValidator:NX,routesValidator:LX,route_constraints:Yh};function NX(e,t=!1){if(NL=t,Ri=e.rootPath,vR.isEmpty(Ri))throw OX;let r=xe.optional(),n=nr.min(0).max(1e3).empty(null).default(DX),s=wt.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(m_),i=wt.optional().empty(null),o=wt.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=me.string().empty(null).default(m_),l=me.custom(wX).empty(null).default(m_),u=e.clustering?.enabled,d=me.object({certificate:i,certificateAuthority:i,privateKey:i}),_;return u===!0?_=me.object({enabled:r,hubServer:me.object({cluster:me.object({name:me.required().empty(null),network:me.object({port:ln,routes:Yh}).required()}).required(),leafNodes:me.object({network:me.object({port:ln}).required()}).required(),network:me.object({port:ln}).required()}).required(),leafServer:me.object({network:me.object({port:ln,routes:Yh}).required(),streams:me.object({maxAge:nr.min(120).allow(null).optional(),maxBytes:nr.min(1).allow(null).optional(),maxMsgs:nr.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:me.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:xe.optional(),databaseLevel:xe.optional(),tls:me.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:xe.required(),verify:xe.optional()}),user:wt.optional().empty(null)}).optional():_=me.object({enabled:r,tls:me.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:xe.optional()})}).optional(),me.object({authentication:me.alternatives(me.object({authorizeLocal:xe,cacheTTL:nr.required(),enableSessions:xe}),xe).optional(),analytics:me.object({aggregatePeriod:nr}),replication:me.object({hostname:me.alternatives(wt,nr).optional().empty(null),url:wt.optional().empty(null),port:ln,securePort:ln,routes:uc.optional().empty(null),databases:me.alternatives(wt,uc),enableRootCAs:xe.optional(),copyTablesToCatchUp:xe.optional()}).optional(),componentsRoot:s.optional(),clustering:_,localStudio:me.object({enabled:r}).required(),logging:me.object({auditAuthEvents:me.object({logFailed:xe,logSuccessful:xe}),file:xe.required(),level:me.valid("notify","fatal","error","warn","info","debug","trace"),rotation:me.object({enabled:xe.optional(),compress:xe.optional(),interval:wt.custom(PX).optional().empty(null),maxSize:wt.custom(CX).optional().empty(null),path:wt.optional().empty(null).default(m_)}).required(),root:s,stdStreams:xe.required(),auditLog:xe.required()}).required(),operationsApi:me.object({network:me.object({cors:xe.optional(),corsAccessList:uc.optional(),headersTimeout:nr.min(1).optional(),keepAliveTimeout:nr.min(1).optional(),port:ln,domainSocket:me.optional().empty("hdb/operations-server").default(m_),securePort:ln,timeout:nr.min(1).optional()}).optional(),tls:me.alternatives([me.array().items(d),d])}).required(),rootPath:wt.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:me.object({network:me.object({port:ln,securePort:ln,mtls:me.alternatives([xe.optional(),me.object({user:wt.optional(),certificateAuthority:i,required:xe.optional()})])}).required(),webSocket:xe.optional(),requireAuthentication:xe.optional()}),http:me.object({compressionThreshold:nr.optional(),cors:xe.optional(),corsAccessList:uc.optional(),headersTimeout:nr.min(1).optional(),port:ln,securePort:ln,maxHeaderSize:nr.optional(),mtls:me.alternatives([xe.optional(),me.object({user:wt.optional(),certificateAuthority:i,required:xe.optional()})]),threadRange:me.alternatives([uc.optional(),wt.optional()])}).required(),threads:me.alternatives(n.optional(),me.object({count:n.optional(),debug:me.alternatives(xe.optional(),me.object({startingPort:nr.min(1).optional(),host:wt.optional(),waitForDebugger:xe.optional()})),maxHeapMemory:nr.min(0).optional()})),storage:me.object({writeAsync:xe.required(),overlappingSync:xe.optional(),caching:xe.optional(),compression:me.alternatives([xe.optional(),me.object({dictionary:wt.optional(),threshold:nr.optional()})]),compactOnStart:xe.optional(),compactOnStartKeepBackup:xe.optional(),noReadAhead:xe.optional(),path:l,prefetchWrites:xe.optional(),maxFreeSpaceToLoad:nr.optional(),maxFreeSpaceToRetain:nr.optional()}).required(),ignoreScripts:xe.optional(),tls:me.alternatives([me.array().items(d),d])}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(NX,"configValidator");function IX(e){return NL||OL.existsSync(e)?null:`Specified path ${e} does not exist.`}a(IX,"doesPathExist");function wX(e,t){me.assert(e,wt.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=IX(e);if(r)return t.message(r)}a(wX,"validatePath");function CX(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(RX);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(yX):e}a(CX,"validateRotationMaxSize");function PX(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(AX);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(bX):e}a(PX,"validateRotationInterval");function DX(e,t){let r=t.state.path.join("."),n=mX.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||AL();return i=Math.round(Math.min(i,AL())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),SX.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(DX,"setDefaultThreads");function m_(e,t){let r=t.state.path.join(".");if(!vR.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(vR.isEmpty(Ri))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return lc.join(Ri,gX);case"logging.root":return lc.join(Ri,bL);case"clustering.leafServer.streams.path":return lc.join(Ri,"clustering","leaf");case"storage.path":let n=lc.join(Ri,yL.LEGACY_DATABASES_DIR_NAME);return OL.existsSync(n)?n:lc.join(Ri,yL.DATABASES_DIR_NAME);case"logging.rotation.path":return lc.join(Ri,bL);case"operationsApi.network.domainSocket":return r==null?null:lc.join(Ri,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(m_,"setDefaultRoot");function LX(e){let t=me.object({routes:Yh});return TX.validateBySchema({routes:e},t)}a(LX,"routesValidator")});var Ct=O(xL=>{"use strict";var un=L(),hr=te(),pr=K(),{configValidator:MX,routesValidator:wL}=BR(),Yr=require("fs-extra"),PL=require("yaml"),Bn=require("path"),UX=require("is-number"),DL=require("properties-reader"),vX=require("lodash"),{handleHDBError:BX}=_e(),{HTTP_STATUS_CODES:xX,HDB_ERROR_MSGS:Hl}=Pn(),{server:HX}=(qr(),oe(Ja)),{DATABASES_PARAM_CONFIG:S_,CONFIG_PARAMS:vn,CONFIG_PARAM_MAP:qs}=un,kX="Unable to get config value because config is uninitialized",FX="Config successfully initialized",GX="Error backing up config file",qX="Empty parameter sent to getConfigValue",LL=Bn.join(un.PACKAGE_ROOT,"config","yaml",un.HDB_DEFAULT_CONFIG_FILE),$X=Bn.join(un.PACKAGE_ROOT,"config","yaml","defaultNatsConfig.yaml"),VX="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",CL={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"},Wh,zt,jh;Object.assign(xL,{createConfigFile:KX,getDefaultConfig:YX,getConfigValue:UL,initConfig:zh,flattenConfig:kl,updateConfigValue:vL,updateConfigObject:jX,getConfiguration:JX,setConfiguration:XX,readConfigFile:FR,getClusteringRoutes:ZX,initOldConfig:BL,getConfigFromFile:eZ,getConfigFilePath:dc,addConfig:tZ,deleteConfigFromFile:rZ,getConfigObj:nZ,resolvePath:xR,getFlatConfigObj:sZ});function xR(e){if(e?.startsWith("~/"))return Bn.join(hr.getHomeDir(),e.slice(1));let t=ne();return Bn.resolve(t.getHdbBasePath(),e)}a(xR,"resolvePath");function KX(e,t=!1){let r=Qo(LL);if(e.clustering_enabled||e.CLUSTERING_ENABLED||e.clustering){let c=PL.parseDocument(Yr.readFileSync($X,"utf8"),{simpleKeys:!0});r.addIn(["clustering"],c.toJSON().clustering)}Wh=kl(r.toJSON());let n;for(let c in e){let l=qs[c.toLowerCase()];if(l===vn.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("_"),d=HR(l,e[c]);l==="rootPath"&&d?.endsWith("/")&&(d=d.slice(0,-1));try{r.setIn([...u],d)}catch(_){pr.error(_)}}}n&&ML(r,n),kR(r,t);let s=r.toJSON();zt=kl(s);let i=r.getIn(["rootPath"]),o=Bn.join(i,un.HDB_CONFIG_FILE);Yr.createFileSync(o),Yr.writeFileSync(o,String(r)),pr.trace(`Config file written to ${o}`)}a(KX,"createConfigFile");function ML(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(S_.TABLES))for(let i in n[s][S_.TABLES])for(let o in n[s][S_.TABLES][i]){let c=n[s][S_.TABLES][i][o],l=[vn.DATABASES,s,S_.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=[vn.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){pr.error("Error parsing schemas CLI/env config arguments",n)}}a(ML,"setSchemasConfig");function YX(e){if(Wh===void 0){let r=Qo(LL);Wh=kl(r.toJSON())}let t=qs[e.toLowerCase()];if(t!==void 0)return Wh[t.toLowerCase()]}a(YX,"getDefaultConfig");function UL(e){if(e==null){pr.info(qX);return}if(zt===void 0){pr.trace(kX);return}let t=qs[e.toLowerCase()];if(t!==void 0)return zt[t.toLowerCase()]}a(UL,"getConfigValue");function dc(e=hr.getPropsFilePath()){let t=hr.getEnvCliRootPath();if(t)return xR(Bn.join(t,un.HDB_CONFIG_FILE));let r=DL(e);return xR(r.get(un.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}a(dc,"getConfigFilePath");function zh(e=!1){if(zt===void 0||e){let t;if(!hr.noBootFile()){t=hr.getPropsFilePath();try{Yr.accessSync(t,Yr.constants.F_OK|Yr.constants.R_OK)}catch(i){throw pr.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=dc(t),n;if(r.includes("config/settings.js"))try{BL(r);return}catch(i){if(i.code!==un.NODE_ERROR_CODES.ENOENT)throw i}try{n=Qo(r)}catch(i){if(i.code===un.NODE_ERROR_CODES.ENOENT){pr.trace(`HarperDB config file not found at ${r}.
11
- This can occur during early stages of install where the config file has not yet been created`);return}else throw pr.error(i),new Error(`Error reading HarperDB config file at ${r}`)}WX(n,r),kR(n);let s=n.toJSON();if(HX.config=s,zt=kl(s),zt.logging_rotation_rotate)for(let i in CL)zt[i]&&pr.error(`Config ${CL[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);pr.trace(FX)}}a(zh,"initConfig");function WX(e,t){let r=e.getIn(["rootPath"]),n=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Bn.join(r,"database")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Bn.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&&(pr.trace("Updating config file with missing config params"),Yr.writeFileSync(t,String(e)))}a(WX,"checkForUpdatedConfig");function kR(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 Hl.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 Hl.CONFIG_VALIDATION("operationsApi.network.port and operationsApi.network.securePort cannot be the same value");let n=MX(r,t);if(n.error)throw Hl.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(kR,"validateConfig");function jX(e,t){zt===void 0&&(zt={});let r=qs[e.toLowerCase()];if(r===void 0){pr.trace(`Unable to update config object because config param '${e}' does not exist`);return}zt[r.toLowerCase()]=t}a(jX,"updateConfigObject");function vL(e,t,r=void 0,n=!1,s=!1,i=!1){zt===void 0&&zh();let o=UL(qs.hdb_root),c=Bn.join(o,un.HDB_CONFIG_FILE),l=Qo(c),u;if(r===void 0&&e.toLowerCase()===vn.DATABASES)u=t;else if(r===void 0){let E;if(i)E=e;else if(E=qs[e.toLowerCase()],E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let f=E.split("_"),h=HR(E,t);l.setIn([...f],h)}else for(let E in r){let f=qs[E.toLowerCase()];if(f===vn.HTTP_SECUREPORT&&r[E]===zt[vn.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),f===vn.OPERATIONSAPI_NETWORK_SECUREPORT&&r[E]===zt[vn.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),f===vn.DATABASES){u=r[E];continue}if(f?.startsWith("threads_")){let h=l.getIn(["threads"]);h>=0&&(l.deleteIn(["threads"]),l.setIn(["threads","count"],h))}if(!f&&(E.endsWith("_package")||E.endsWith("_port"))&&(f=E),f!==void 0){let h=f.split("_"),T=un.LEGACY_CONFIG_PARAMS[E.toUpperCase()];T&&T.startsWith("customFunctions")&&l.hasIn(T.split("_"))&&(f=T,h=T.split("_"));let m=HR(f,r[E]);f==="rootPath"&&m?.endsWith("/")&&(m=m.slice(0,-1));try{h.length>1&&typeof l.getIn(h.slice(0,-1))=="boolean"&&l.deleteIn(h.slice(0,-1)),l.setIn([...h],m)}catch(g){pr.error(g)}}}u&&ML(l,u),kR(l);let d=l.getIn(["rootPath"]),_=Bn.join(d,un.HDB_CONFIG_FILE);n===!0&&zX(c,d),Yr.writeFileSync(_,String(l)),s&&(zt=kl(l.toJSON())),pr.trace(`Config parameter: ${e} updated with value: ${t}`)}a(vL,"updateConfigValue");function zX(e,t){try{let r=Bn.join(t,"backup",`${new Date(Date.now()).toISOString().replaceAll(":","-")}-${un.HDB_CONFIG_FILE}.bak`);Yr.copySync(e,r),pr.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){pr.error(GX),pr.error(r)}}a(zX,"backupConfigFile");var QX=["databases"];function kl(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}),jh=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])&&!QX.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;!vn[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(kl,"flattenConfig");function HR(e,t){if(e===vn.CLUSTERING_NODENAME||e===vn.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(UX(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(HR,"castConfigValue");function JX(){let e=hr.getPropsFilePath(),t=dc(e);return Qo(t).toJSON()}a(JX,"getConfiguration");async function XX(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return vL(void 0,void 0,s,!0),VX}catch(i){throw typeof i=="string"||i instanceof String?BX(i,i,xX.BAD_REQUEST,void 0,void 0,!0):i}}a(XX,"setConfiguration");function FR(){let e=hr.getPropsFilePath();try{Yr.accessSync(e,Yr.constants.F_OK|Yr.constants.R_OK)}catch(n){if(!hr.noBootFile())throw pr.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=dc(e);return Qo(t).toJSON()}a(FR,"readConfigFile");function Qo(e){return PL.parseDocument(Yr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Qo,"parseYamlDoc");function ZX(){let e=FR(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=hr.isEmptyOrZeroLength(t)?[]:t;let r=wL(t);if(r)throw Hl.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=hr.isEmptyOrZeroLength(n)?[]:n;let s=wL(n);if(s)throw Hl.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 Hl.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(ZX,"getClusteringRoutes");function BL(e){let t=DL(e);zt={};for(let r in qs){let n=t.get(r.toUpperCase());if(hr.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=qs[r].toLowerCase();s===vn.LOGGING_ROOT?zt[s]=Bn.dirname(n):zt[s]=n}return zt}a(BL,"initOldConfig");function eZ(e){let t=FR();return vX.get(t,e.replaceAll("_","."))}a(eZ,"getConfigFromFile");async function tZ(e,t){let r=Qo(dc());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await Yr.writeFile(dc(),String(r))}a(tZ,"addConfig");function rZ(e){let t=dc(hr.getPropsFilePath()),r=Qo(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=Bn.join(n,un.HDB_CONFIG_FILE);Yr.writeFileSync(s,String(r))}a(rZ,"deleteConfigFromFile");function nZ(){return jh||(zh(),jh)}a(nZ,"getConfigObj");function sZ(){return zt||zh(),zt}a(sZ,"getFlatConfigObj")});var kL=O((Qye,HL)=>{"use strict";var Qh=L(),Jh=class{static{a(this,"BaseLicense")}constructor(t=0,r=Qh.RAM_ALLOCATION_ENUM.DEFAULT,n=Qh.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},GR=class extends Jh{static{a(this,"ExtendedLicense")}constructor(t=0,r=Qh.RAM_ALLOCATION_ENUM.DEFAULT,n=Qh.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};HL.exports={BaseLicense:Jh,ExtendedLicense:GR}});var _c=O((Xye,YL)=>{"use strict";var Gl=require("fs-extra"),GL=Kh(),qL=require("crypto"),iZ=require("moment"),oZ=require("uuid").v4,Wr=K(),$R=require("path"),aZ=te(),Jo=L(),{totalmem:FL}=require("os"),cZ=kL().ExtendedLicense,Fl="invalid license key format",lZ="061183",uZ="mofi25",dZ="aes-256-cbc",_Z=16,fZ=32,$L=ne(),{resolvePath:VL}=Ct();$L.initSync();var qR;YL.exports={validateLicense:KL,generateFingerPrint:hZ,licenseSearch:YR,getLicense:SZ,checkMemoryLimit:TZ};function VR(){return $R.join($L.getHdbBasePath(),Jo.LICENSE_KEY_DIR_NAME,Jo.LICENSE_FILE_NAME)}a(VR,"getLicenseDirPath");function EZ(){let e=VR();return VL($R.join(e,Jo.LICENSE_FILE_NAME))}a(EZ,"getLicenseFilePath");function KR(){let e=VR();return VL($R.join(e,Jo.REG_KEY_FILE_NAME))}a(KR,"getFingerPrintFilePath");async function hZ(){let e=KR();try{return await Gl.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await pZ();throw Wr.error(`Error writing fingerprint file to ${e}`),Wr.error(t),new Error("There was an error generating the fingerprint")}}a(hZ,"generateFingerPrint");async function pZ(){let e=oZ(),t=GL.hash(e),r=KR();try{await Gl.mkdirp(VR()),await Gl.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw Wr.error(`Error writing fingerprint file to ${r}`),Wr.error(n),new Error("There was an error generating the fingerprint")}return t}a(pZ,"writeFingerprint");function KL(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:Jo.RAM_ALLOCATION_ENUM.DEFAULT,version:Jo.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Wr.error("empty license key passed to validate."),r;let n=KR(),s=!1;try{s=Gl.statSync(n)}catch(i){Wr.error(i)}if(s){let i;try{i=Gl.readFileSync(n,"utf8")}catch{Wr.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(uZ),c=o[1];c=Buffer.concat([Buffer.from(c)],_Z);let l=Buffer.concat([Buffer.from(i)],fZ),u=qL.createDecipheriv(dZ,l,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let d=null;try{d=u.update(o[0],"hex","utf8"),d.trim(),d+=u.final("utf8")}catch{let f=mZ(o[0],i);if(f)d=f;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Fl),Wr.error(Fl),new Error(Fl)}let _;if(isNaN(d))try{_=JSON.parse(d),r.version=_.version,r.exp_date=_.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),_.ram_allocation&&(r.ram_allocation=_.ram_allocation)}catch{throw console.error(Fl),Wr.error(Fl),new Error(Fl)}else r.exp_date=d;r.exp_date<iZ().valueOf()&&(r.valid_date=!1),GL.validate(o[1],`${lZ}${i}${t}`)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||Wr.error("Invalid licence"),r}a(KL,"validateLicense");function mZ(e,t){try{let r=qL.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{Wr.warn("Check old license failed")}}a(mZ,"checkOldLicense");function YR(){let e=new cZ,t=[];try{t=Gl.readFileSync(EZ(),"utf-8").split(Jo.NEW_LINE)}catch(r){r.code==="ENOENT"?Wr.debug("no license file found"):Wr.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(aZ.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=KL(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){Wr.error("There was an error parsing the license string."),Wr.error(s),e.ram_allocation=Jo.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return qR=e,e}a(YR,"licenseSearch");async function SZ(){return qR||await YR(),qR}a(SZ,"getLicense");function TZ(){let e=YR().ram_allocation,t=process.constrainedMemory?.()||FL();if(t=Math.round(Math.min(t,FL())/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(TZ,"checkMemoryLimit")});var Hn=O((nbe,cM)=>{"use strict";var QL="username is required",JL="nothing to update, must supply active, role or password to update",XL="password cannot be an empty string",ZL="If role is specified, it cannot be empty.",eM="active must be true or false";cM.exports={addUser:wZ,alterUser:CZ,dropUser:DZ,getSuperUser:vZ,userInfo:LZ,listUsers:Zh,listUsersExternal:MZ,setUsersToGlobal:$l,findAndValidateUser:oM,getClusterUser:BZ,USERNAME_REQUIRED:QL,ALTERUSER_NOTHING_TO_UPDATE:JL,EMPTY_PASSWORD:XL,EMPTY_ROLE:ZL,ACTIVE_BOOLEAN:eM};var tM=Vr(),gZ=zo(),zR=Kh(),rM=SL(),nM=$r(),QR=to(),xn=te(),sM=require("validate.js"),Ke=K(),{promisify:RZ}=require("util"),JR=eo(),WL=L(),jL=ft(),AZ=Ct(),ebe=ne(),tbe=_c(),yZ=Xi(),{table:rbe}=(Pe(),oe(ut)),{handleHDBError:Ai,hdb_errors:bZ}=_e(),{HTTP_STATUS_CODES:yi,AUTHENTICATION_ERROR_MSGS:WR,HDB_ERROR_MSGS:ql}=bZ,{UserEventMsg:XR}=$s(),jR=require("lodash"),{server:ZR}=(qr(),oe(Ja)),OZ=K();ZR.getUser=(e,t)=>oM(e,t,t!=null);var iM={username:!0,active:!0,role:!0,password:!0},zL=new Map,Xh=nM.searchByValue,NZ=nM.searchByHash,IZ=RZ(gZ.delete);async function wZ(e){let t=sM.cleanAttributes(e,iM),r=rM.addUserValidation(t);if(r)throw Ai(new Error,r.message,yi.BAD_REQUEST,void 0,void 0,!0);let n={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},s;try{s=await Xh(n),s=s&&Array.from(s)}catch(l){throw Ke.error("There was an error searching for a role in add user"),Ke.error(l),l}if(!s||s.length<1)throw Ai(new Error,ql.ROLE_NAME_NOT_FOUND(t.role),yi.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw Ai(new Error,ql.DUP_ROLES_FOUND(t.role),yi.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=JR.encrypt(t.password)),t.password=zR.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await tM.insert(i)}catch(l){throw Ke.error("There was an error searching for a user."),Ke.error(l),l}Ke.debug(o);try{await $l()}catch(l){throw Ke.error("Got an error setting users to global"),Ke.error(l),l}if(o.skipped_hashes.length===1)throw Ai(new Error,ql.USER_ALREADY_EXISTS(t.username),yi.CONFLICT,void 0,void 0,!0);let c={...t};return c.role=s[0],QR.signalUserChange(new XR(process.pid)),`${c.username} successfully added`}a(wZ,"addUser");async function CZ(e){let t=sM.cleanAttributes(e,iM);if(xn.isEmptyOrZeroLength(t.username))throw new Error(QL);if(xn.isEmptyOrZeroLength(t.password)&&xn.isEmptyOrZeroLength(t.role)&&xn.isEmptyOrZeroLength(t.active))throw new Error(JL);if(!xn.isEmpty(t.password)&&xn.isEmptyOrZeroLength(t.password.trim()))throw new Error(XL);if(!xn.isEmpty(t.active)&&!xn.isBoolean(t.active))throw new Error(eM);let r=PZ(t.username);if(!xn.isEmpty(t.password)&&!xn.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=JR.encrypt(t.password)),t.password=zR.hash(t.password)),t.role==="")throw new Error(ZL);if(t.role){let i={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},o;try{o=Array.from(await Xh(i)||[])}catch(c){throw Ke.error("Got an error searching for a role."),Ke.error(c),c}if(!o||o.length===0){let c=ql.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Ke.error(c),Ai(new Error,c,yi.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=ql.ALTER_USER_DUP_ROLES(t.role);throw Ke.error(c),Ai(new Error,c,yi.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let n={operation:"update",schema:"system",table:"hdb_user",records:[t]},s;try{s=await tM.update(n)}catch(i){throw Ke.error("Error during update."),Ke.error(i),i}try{await $l()}catch(i){throw Ke.error("Got an error setting users to global"),Ke.error(i),i}return QR.signalUserChange(new XR(process.pid)),s}a(CZ,"alterUser");function PZ(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(PZ,"isClusterUser");async function DZ(e){try{let t=rM.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(xn.isEmpty(global.hdb_users.get(e.username)))throw Ai(new Error,ql.USER_NOT_EXIST(e.username),yi.NOT_FOUND,void 0,void 0,!0);let n;try{n=await IZ(r)}catch(s){throw Ke.error("Got an error deleting a user."),Ke.error(s),s}Ke.debug(n);try{await $l()}catch(s){throw Ke.error("Got an error setting users to global."),Ke.error(s),s}return QR.signalUserChange(new XR(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(DZ,"dropUser");async function LZ(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=jR.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await NZ(r)}catch(s){throw Ke.error("Got an error searching for a role."),Ke.error(s),s}t.role=n[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Ke.error(r),r}return t}a(LZ,"userInfo");async function MZ(){let e;try{e=await Zh()}catch(t){throw Ke.error("Got an error listing users."),Ke.error(t),t}try{e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token})}catch{throw new Error("there was an error massaging the user data")}return[...e.values()]}a(MZ,"listUsersExternal");async function Zh(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await Xh(e)}catch(o){throw Ke.error("Got an error searching for roles."),Ke.error(o),o}let r={};for(let o of t)r[o.id]=jR.cloneDeep(o);if(Object.keys(r).length===0)return null;let n={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},s;try{s=await Xh(n)}catch(o){throw Ke.error("Got an error searching for users."),Ke.error(o),o}let i=new Map;for(let o of s)o=jR.cloneDeep(o),o.role=r[o.role],UZ(o.role),i.set(o.username,o);return i}catch(e){throw Ke.error("got an error listing users"),Ke.error(e),xn.errorizeMessage(e)}return null}a(Zh,"listUsers");function UZ(e){try{if(!e){Ke.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(yZ)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Ke.error("Got an error trying to set system permissions."),Ke.error(t)}}a(UZ,"appendSystemTablesToRole");async function $l(){try{let e=await Zh();global.hdb_users=e}catch(e){throw Ke.error(e),e}}a($l,"setUsersToGlobal");async function oM(e,t,r=!0){global.hdb_users||await $l();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw Ai(new Error,WR.GENERIC_AUTH_FAIL,yi.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw Ai(new Error,WR.USER_INACTIVE,yi.UNAUTHORIZED,void 0,void 0,!0);let s={active:n.active,username:n.username};if(n.refresh_token&&(s.refresh_token=n.refresh_token),n.role&&(s.role=n.role),r===!0){if(zL.get(t)===n.password)return s;if(zR.validate(n.password,t))zL.set(t,n.password);else throw Ai(new Error,WR.GENERIC_AUTH_FAIL,yi.UNAUTHORIZED,void 0,void 0,!0)}return s}a(oM,"findAndValidateUser");async function vZ(){global.hdb_users||await $l();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(vZ,"getSuperUser");async function BZ(){let e=await Zh(),t=AZ.getConfigFromFile(WL.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!xn.isEmpty(r)&&r?.role?.role===WL.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=JR.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+jL.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+jL.SERVER_SUFFIX.ADMIN,r}a(BZ,"getClusterUser");var aM=[];ZR.invalidateUser=function(e){for(let t of aM)try{t(e)}catch(r){OZ.error("Error invalidating user",r)}};ZR.onInvalidatedUser=function(e){aM.push(e)}});var g_=O((abe,_M)=>{"use strict";var fc=K(),kn=L(),xZ=kD(),ibe=ls(),obe=gi(),HZ=Hn(),{validateEvent:lM}=$s(),T_=Un(),kZ=require("process"),{resetDatabases:FZ}=(Pe(),oe(ut)),GZ={[kn.ITC_EVENT_TYPES.SCHEMA]:qZ,[kn.ITC_EVENT_TYPES.USER]:dM};async function qZ(e){let t=lM(e);if(t){fc.error(t);return}fc.trace("ITC schemaHandler received schema event:",e),await xZ(e.message),await $Z(e.message)}a(qZ,"schemaHandler");async function $Z(e){try{T_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),T_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),T_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=FZ();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){fc.error(t)}}a($Z,"syncSchemaMetadata");var uM=[];async function dM(e){try{try{T_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),T_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){fc.warn(r)}let t=lM(e);if(t){fc.error(t);return}fc.trace(`ITC userHandler ${kn.HDB_ITC_CLIENT_PREFIX}${kZ.pid} received user event:`,e),await HZ.setUsersToGlobal();for(let r of uM)r()}catch(t){fc.error(t)}}a(dM,"userHandler");dM.addListener=function(e){uM.push(e)};_M.exports=GZ});var $s=O((fbe,EM)=>{"use strict";var lbe=K(),eA=te(),VZ=L(),{ITC_ERRORS:R_}=Pn(),{parentPort:ube,threadId:KZ,isMainThread:YZ,workerData:dbe}=require("worker_threads"),{onMessageFromWorkers:WZ,broadcast:_be,broadcastWithAcknowledgement:jZ}=ot();EM.exports={sendItcEvent:zZ,validateEvent:fM,SchemaEventMsg:QZ,UserEventMsg:JZ};var ep;WZ(async(e,t)=>{ep=ep||g_(),fM(e),ep[e.type]&&await ep[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function zZ(e){return!YZ&&e.message&&(e.message.originator=KZ),jZ(e)}a(zZ,"sendItcEvent");function fM(e){if(typeof e!="object")return R_.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||eA.isEmpty(e.type))return R_.MISSING_TYPE;if(!e.hasOwnProperty("message")||eA.isEmpty(e.message))return R_.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||eA.isEmpty(e.message.originator))return R_.MISSING_ORIGIN;if(VZ.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return R_.INVALID_EVENT(e.type)}a(fM,"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 JZ(e){this.originator=e}a(JZ,"UserEventMsg")});var to=O((pbe,SM)=>{"use strict";var hM=L(),hbe=te(),tp=K(),pM=BD(),Vl,{sendItcEvent:mM}=$s();function XZ(e){try{tp.info("signalSchemaChange called with message:",e),Vl=Vl||g_();let t=new pM(hM.ITC_EVENT_TYPES.SCHEMA,e);return Vl.schema(t),mM(t)}catch(t){tp.error(t)}}a(XZ,"signalSchemaChange");function ZZ(e){try{tp.trace("signalUserChange called with message:",e),Vl=Vl||g_();let t=new pM(hM.ITC_EVENT_TYPES.USER,e);return Vl.user(t),mM(t)}catch(t){tp.error(t)}}a(ZZ,"signalUserChange");SM.exports={signalSchemaChange:XZ,signalUserChange:ZZ}});var rp=O((Sbe,gM)=>{"use strict";var TM=te(),e5=L(),t5=K(),r5=Bh(),n5=vh(),s5=to(),{SchemaEventMsg:i5}=$s(),o5="already exists in";gM.exports=a5;async function a5(e,t,r){if(TM.isEmptyOrZeroLength(r))return r;let n=[];TM.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 c5(e,t.schema,t.name,i)})),s}a(a5,"lmdbCheckForNewAttributes");async function c5(e,t,r,n){let s=new n5(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await l5(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(o5))t5.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(c5,"createNewAttribute");async function l5(e){let t;return t=await r5(e),s5.signalSchemaChange(new i5(process.pid,e5.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(l5,"createAttribute")});var Kl=O((gbe,RM)=>{"use strict";var tA=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}};RM.exports=tA});var yM=O((Abe,AM)=>{"use strict";var u5=Kl(),d5=L().OPERATIONS_ENUM,rA=class extends u5{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(d5.INSERT,r,n,s,i),this.records=t}};AM.exports=rA});var OM=O((bbe,bM)=>{"use strict";var _5=Kl(),f5=L().OPERATIONS_ENUM,nA=class extends _5{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(f5.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};bM.exports=nA});var IM=O((Nbe,NM)=>{"use strict";var E5=Kl(),h5=L().OPERATIONS_ENUM,sA=class extends E5{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(h5.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};NM.exports=sA});var CM=O((wbe,wM)=>{"use strict";var p5=Kl(),m5=L().OPERATIONS_ENUM,iA=class extends p5{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(m5.DELETE,n,s,t,i),this.original_records=r}};wM.exports=iA});var A_=O((Dbe,MM)=>{"use strict";var Pbe=require("path"),PM=mt(),S5=yM(),T5=OM(),g5=IM(),R5=CM(),Yl=xt(),DM=te(),{CONFIG_PARAMS:A5}=L(),LM=ne();LM.initSync();var np=L().OPERATIONS_ENUM,{getTransactionAuditStorePath:y5}=Rt();MM.exports=b5;async function b5(e,t){if(LM.get(A5.LOGGING_AUDITLOG)===!1)return;let r=y5(e.schema,e.table),n=await PM.openEnvironment(r,e.table,!0),s=O5(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){PM.initializeDBIs(n,Yl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Yl.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[Yl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[Yl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),DM.isEmpty(s.user_name)||n.dbis[Yl.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[Yl.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(b5,"writeTransaction");function O5(e,t){let r=DM.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===np.INSERT)return new S5(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===np.UPDATE)return new T5(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===np.UPSERT)return new g5(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===np.DELETE)return new R5(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(O5,"createTransactionObject")});var oA=O((Ube,UM)=>{"use strict";var N5=E_(),Mbe=Jd(),y_=L(),I5=Xd(),w5=nc().insertRecords,C5=mt(),P5=K(),D5=rp(),{getSchemaPath:L5}=Rt(),M5=A_();UM.exports=U5;async function U5(e){try{let{schema_table:t,attributes:r}=N5(e);I5(e,r,t.hash_attribute),e.schema!==y_.SYSTEM_SCHEMA_NAME&&(r.includes(y_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(y_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(y_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(y_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await D5(e.hdb_auth_header,t,r),s=L5(e.schema,e.table),i=await C5.openEnvironment(s,e.table),o=await w5(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await M5(e,o)}catch(c){P5.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(U5,"lmdbCreateRecords")});var xM=O((Bbe,BM)=>{"use strict";var vM=L(),v5=oA(),B5=Jd(),x5=require("fs-extra"),{getSchemaPath:H5}=Rt();BM.exports=k5;async function k5(e){let t=[{name:e.schema,createddate:Date.now()}],r=new B5(vM.SYSTEM_SCHEMA_NAME,vM.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await v5(r),await x5.mkdirp(H5(e.schema))}a(k5,"lmdbCreateSchema")});var kM=O((Hbe,HM)=>{"use strict";var aA=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}};HM.exports=aA});var $M=O(($be,qM)=>{"use strict";var FM=mt(),cA=on(),lA=Pn().LMDB_ERRORS_ENUM,F5=xt(),GM=K(),Fbe=te(),G5=require("lmdb"),q5=kM(),$5=L(),{OVERFLOW_MARKER:Gbe,MAX_SEARCH_KEY_LENGTH:qbe}=F5,V5=$5.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function K5(e,t,r,n){if(cA.validateEnv(e),t===void 0)throw new Error(lA.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(lA.IDS_REQUIRED):new Error(lA.IDS_MUST_BE_ITERABLE);try{let s=FM.listDBIs(e);FM.initializeDBIs(e,t,s);let i=new q5,o,c=[],l=[];for(let E=0,f=r.length;E<f;E++)try{o=r[E];let h=e.dbis[t].get(o);if(!h||n&&h[V5]>n){i.skipped.push(o);continue}let T=e.dbis[t].ifVersion(o,G5.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let m=0;m<s.length;m++){let g=s[m];if(!h.hasOwnProperty(g)||g===t)continue;let S=e.dbis[g],y=h[g];if(y!=null)try{let I=cA.getIndexedValues(y);if(I)for(let U=0,x=I.length;U<x;U++)S.remove(I[U],o)}catch{GM.warn(`cannot delete from attribute: ${g}, ${y}:${o}`)}}});c.push(T),l.push(o),i.original_records.push(h)}catch(h){GM.warn(h),i.skipped.push(o)}let u=[],d=await Promise.all(c);for(let E=0,f=d.length;E<f;E++)d[E]===!0?i.deleted.push(l[E]):(i.skipped.push(l[E]),u.push(E));let _=0;for(let E=0;E<u.length;E++){let f=u[E];i.original_records.splice(f-_,1),_++}return i.txn_time=cA.getNextMonotonicTime(),i}catch(s){throw s}}a(K5,"deleteRecords");qM.exports={deleteRecords:K5}});var b_=O((Kbe,KM)=>{"use strict";var Wl=te(),Y5=$M(),W5=mt(),{getSchemaPath:j5}=Rt(),z5=A_(),Q5=K();KM.exports=J5;async function J5(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(Wl.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Wl.isEmptyOrZeroLength(e.hash_values)&&!Wl.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];Wl.isEmpty(l)||e.hash_values.push(l)}}if(Wl.isEmptyOrZeroLength(e.hash_values))return VM([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Wl.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=j5(e.schema,e.table),i=await W5.openEnvironment(s,e.table),o=await Y5.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await z5(e,o)}catch(c){Q5.error(`unable to write transaction due to ${c.message}`)}return VM(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(J5,"lmdbDeleteRecords");function VM(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(VM,"createDeleteResponse")});var dA=O((jbe,YM)=>{"use strict";var X5=L(),Wbe=on();function uA(e,t){let r=Object.create(null);if(t.length===1&&X5.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(uA,"parseRow");function Z5(e,t,r,n){let s=uA(r,e);n.push(s)}a(Z5,"searchAll");function e8(e,t,r,n){let s=uA(r,e);n[t]=s}a(e8,"searchAllToMap");function t8(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(t8,"iterateDBI");function Ec(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(Ec,"pushResults");function r8(e,t,r,n,s,i){t.toString().endsWith(e)&&Ec(t,r,n,s,i)}a(r8,"endsWith");function n8(e,t,r,n,s,i){t.toString().includes(e)&&Ec(t,r,n,s,i)}a(n8,"contains");function s8(e,t,r,n,s,i){t>e&&Ec(t,r,n,s,i)}a(s8,"greaterThanCompare");function i8(e,t,r,n,s,i){t>=e&&Ec(t,r,n,s,i)}a(i8,"greaterThanEqualCompare");function o8(e,t,r,n,s,i){t<e&&Ec(t,r,n,s,i)}a(o8,"lessThanCompare");function a8(e,t,r,n,s,i){t<=e&&Ec(t,r,n,s,i)}a(a8,"lessThanEqualCompare");YM.exports={parseRow:uA,searchAll:Z5,searchAllToMap:e8,iterateDBI:t8,endsWith:r8,contains:n8,greaterThanCompare:s8,greaterThanEqualCompare:i8,lessThanCompare:o8,lessThanEqualCompare:a8,pushResults:Ec}});var jl=O((Zbe,ZM)=>{"use strict";var Xo=mt(),Qbe=K(),Fn=on(),sp=xt(),Qt=Pn().LMDB_ERRORS_ENUM,Jbe=te(),c8=L(),ip=dA(),{parseRow:l8}=ip,Xbe=require("lmdb"),{OVERFLOW_MARKER:WM,MAX_SEARCH_KEY_LENGTH:u8}=sp;function jM(e,t,r,n=!1,s=void 0,i=void 0){return hc(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(jM,"iterateFullIndex");function O_(e,t,r,n,s,i=!1,o=void 0,c=void 0,l=!1,u=!1){return hc(e,t,r,(d,_,E,f)=>{let S={transaction:d,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 f===r?(S.values=!1,_.getRange(S).map(y=>({value:y}))):_.getRange(S)})}a(O_,"iterateRangeBetween");function hc(e,t,r,n){let s=e.database||e,i=Xo.openDBI(s,r);i[sp.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Xo.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(hc,"setupTransaction");function zM(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(WM)){if(!s)if(r)s=Xo.openDBI(e,r);else{let l=Xo.listDBIs(e);for(let u=0,d=l.length;u<d&&(s=Xo.openDBI(e,l[u]),!s[sp.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(zM,"getOverflowCheck");function d8(e,t,r,n=!1,s=void 0,i=void 0){if(Fn.validateEnv(e),t===void 0)throw new Error(Qt.HASH_ATTRIBUTE_REQUIRED);return hc(e,t,t,(o,c,l)=>(op(r),r=N_(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(u=>l8(u.value,r))))}a(d8,"searchAll");function _8(e,t,r,n=!1,s=void 0,i=void 0){if(Fn.validateEnv(e),t===void 0)throw new Error(Qt.HASH_ATTRIBUTE_REQUIRED);op(r),r=N_(e.database||e,r);let o=new Map;for(let{key:c,value:l}of jM(e,t,t,n,s,i))o.set(c,ip.parseRow(l,r));return o}a(_8,"searchAllToMap");function f8(e,t,r=!1,n=void 0,s=void 0){if(Fn.validateEnv(e),t===void 0)throw new Error(Qt.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=jM(e,void 0,t,r,n,s),c=o.transaction,l=zM(c.database,c,void 0,t);for(let{key:u,value:d}of o){let _=l(u,d);i[_]===void 0&&(i[_]=[]),i[_].push(d)}return i}a(f8,"iterateDBI");function E8(e,t){if(Fn.validateEnv(e),t===void 0)throw new Error(Qt.HASH_ATTRIBUTE_REQUIRED);return Xo.statDBI(e,t).entryCount}a(E8,"countAll");function h8(e,t,r,n,s=!1,i=void 0,o=void 0){return Zo(e,r,n),hc(e,t,r,(c,l,u,d)=>(n=Fn.convertKeyValueToWrite(n),d===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(_=>({key:n,value:_}))))}a(h8,"equals");function p8(e,t,r){return Zo(e,t,r),Xo.openDBI(e,t).getValuesCount(r)}a(p8,"count");function m8(e,t,r,n,s=!1,i=void 0,o=void 0){return Zo(e,r,n),hc(e,null,r,(c,l)=>{n=Fn.convertKeyValueToWrite(n);let u=!0;typeof n=="number"&&(u=!1);let d;if(s===!0){let _;for(let E of l.getKeys({transaction:c,start:n}))if(!E.startsWith(n)){_=E;break}return _!==void 0&&(Number.isInteger(o)?o++:i++),d=l.getRange({transaction:c,start:_,end:void 0,reverse:s,limit:i,offset:o}).map(E=>{let{key:f}=E;if(f!==_){if(f.toString().startsWith(n))return E;if(u===!0)return d.DONE}}),d.filter(E=>E)}else return d=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(_=>{if(_.key.toString().startsWith(n))return _;if(u===!0)return d.DONE}),u?d:d.filter(_=>_)})}a(m8,"startsWith");function S8(e,t,r,n,s=!1,i=void 0,o=void 0){return QM(e,t,r,n,s,i,o,!0)}a(S8,"endsWith");function QM(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return Zo(e,r,n),hc(e,null,r,(l,u,d,_)=>{let E=zM(d,l,_,r);return o=Number.isInteger(o)?o:0,u.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(f=>{let h=f.toString();return h.endsWith(WM)?u.getValues(f,{transaction:l}).map(T=>{let m=E(f,T);if(c?m.endsWith(n):m.includes(n))return{key:m,value:T}}).filter(T=>T):(c?h.endsWith(n):h.includes(n))?u[sp.DBI_DEFINITION_NAME].is_hash_attribute?{key:f,value:f}:u.getValues(f,{transaction:l}).map(T=>({key:f,value:T})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(QM,"contains");function T8(e,t,r,n,s=!1,i=void 0,o=void 0){Zo(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),O_(e,t,r,n,l,s,i,o,!0,!1)}a(T8,"greaterThan");function g8(e,t,r,n,s=!1,i=void 0,o=void 0){Zo(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),O_(e,t,r,n,l,s,i,o,!1,!1)}a(g8,"greaterThanEqual");function R8(e,t,r,n,s=!1,i=void 0,o=void 0){Zo(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),O_(e,t,r,l,n,s,i,o,!1,!0)}a(R8,"lessThan");function A8(e,t,r,n,s=!1,i=void 0,o=void 0){Zo(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),O_(e,t,r,l,n,s,i,o,!1,!1)}a(A8,"lessThanEqual");function y8(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(Fn.validateEnv(e),r===void 0)throw new Error(Qt.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(Qt.START_VALUE_REQUIRED);if(s===void 0)throw new Error(Qt.END_VALUE_REQUIRED);if(n=Fn.convertKeyValueToWrite(n),s=Fn.convertKeyValueToWrite(s),n>s)throw new Error(Qt.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return O_(e,t,r,n,s,i,o,c)}a(y8,"between");function b8(e,t,r,n){Fn.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(Qt.HASH_ATTRIBUTE_REQUIRED);if(op(r),r=N_(s,r),n===void 0)throw new Error(Qt.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=ip.parseRow(c,r)),o}a(b8,"searchByHash");function O8(e,t,r){Fn.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(Qt.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Qt.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(O8,"checkHashExists");function N8(e,t,r,n,s=[]){return XM(e,t,r,n,s),JM(e,t,r,n,s).map(i=>i[1])}a(N8,"batchSearchByHash");function I8(e,t,r,n,s=[]){XM(e,t,r,n,s);let i=new Map;for(let[o,c]of JM(e,t,r,n,s))i.set(o,c);return i}a(I8,"batchSearchByHashToMap");function JM(e,t,r,n,s=[]){return hc(e,t,t,(i,o,c)=>{r=N_(c,r);let l=r.length<3;return n.map(u=>{let d=c.dbis[t].get(u,{transaction:i,lazy:l});if(d)return[u,ip.parseRow(d,r)];s.push(u)}).filter(u=>u)})}a(JM,"batchHashSearch");function XM(e,t,r,n,s){if(Fn.validateEnv(e),t===void 0)throw new Error(Qt.HASH_ATTRIBUTE_REQUIRED);if(op(r),n==null)throw new Error(Qt.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(Qt.IDS_MUST_BE_ITERABLE)}a(XM,"initializeBatchSearchByHash");function op(e){if(!Array.isArray(e))throw e===void 0?new Error(Qt.FETCH_ATTRIBUTES_REQUIRED):new Error(Qt.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(op,"validateFetchAttributes");function Zo(e,t,r){if(Fn.validateEnv(e),t===void 0)throw new Error(Qt.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Qt.SEARCH_VALUE_REQUIRED);if(r?.length>u8)throw new Error(Qt.SEARCH_VALUE_TOO_LARGE)}a(Zo,"validateComparisonFunctions");function N_(e,t){return t.length===1&&c8.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Xo.listDBIs(e)),t}a(N_,"setGetWholeRowAttributes");ZM.exports={searchAll:d8,searchAllToMap:_8,count:p8,countAll:E8,equals:h8,startsWith:m8,endsWith:S8,contains:QM,searchByHash:b8,setGetWholeRowAttributes:N_,batchSearchByHash:N8,batchSearchByHashToMap:I8,checkHashExists:O8,iterateDBI:f8,greaterThan:T8,greaterThanEqual:g8,lessThan:R8,lessThanEqual:A8,between:y8}});var zl=O((tOe,sU)=>{var eU=require("lodash"),tU=_t(),He=require("joi"),w8=te(),{hdb_schema_table:I_,checkValidTable:rU,hdb_table:nU,hdb_database:ap}=Si(),{handleHDBError:C8,hdb_errors:P8}=_e(),{getDatabases:D8}=(Pe(),oe(ut)),{HTTP_STATUS_CODES:L8}=P8,M8=He.object({database:ap,schema:ap,table:nU,search_attribute:I_,search_value:He.any().required(),get_attributes:He.array().min(1).items(He.alternatives(I_,He.object())).optional(),desc:He.bool(),limit:He.number().integer().min(1),offset:He.number().integer().min(0)}),U8=He.object({database:ap,schema:ap,table:nU,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(I_,He.object())).optional(),sort:He.object({attribute:He.alternatives(I_,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(I_,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()});sU.exports=function(e,t){let r=null;switch(t){case"value":r=tU.validateBySchema(e,M8);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(rU("database",e.schema)),i(rU("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=tU.validateBySchema(e,U8);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=w8.checkGlobalSchemaTable(e.schema,e.table);if(s)return C8(new Error,s,L8.NOT_FOUND);let o=D8()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let l=a(d=>{for(let _=0,E=d.conditions.length;_<E;_++){let f=d.conditions[_];f.conditions?l(f):c.push(f.search_attribute)}},"addConditions");t==="conditions"&&l(e);let u=eU.filter(c,d=>d!=="*"&&!d.startsWith?.("$")&&d.attribute!=="*"&&!Array.isArray(d)&&!d.name&&!eU.some(o,_=>_===d||_.attribute===d||_.attribute===d.attribute));if(u&&u.length>0){let d=u.join(", ");return d=d.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${d}'`)}}return r}});var _A=O((nOe,iU)=>{"use strict";var v8=mt(),B8=zl(),{getSchemaPath:x8}=Rt();iU.exports=H8;function H8(e){let t=B8(e,"hashes");if(t)throw t;let r=x8(e.schema,e.table);return v8.openEnvironment(r,e.table)}a(H8,"initialize")});var fA=O((iOe,oU)=>{"use strict";var k8=jl(),F8=_A();oU.exports=G8;async function G8(e){let t=await F8(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return k8.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(G8,"lmdbGetDataByHash")});var Ql=O((aOe,aU)=>{"use strict";var EA=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};aU.exports=EA});var lU=O((uOe,cU)=>{"use strict";var lOe=Ql(),q8=jl(),$8=_A();cU.exports=V8;async function V8(e){let t=await $8(e),r=global.hdb_schema[e.schema][e.table];return q8.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(V8,"lmdbSearchByHash")});var Vs=O((_Oe,uU)=>{"use strict";var hA=class{static{a(this,"SearchObject")}constructor(t,r,n,s,i,o,c,l=!1,u=void 0,d=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=d}};uU.exports=hA});var cp=O((EOe,pU)=>{"use strict";var jr=jl(),K8=mt(),Y8=te(),ke=xt(),pc=L(),W8=Xi(),dU=Pn().LMDB_ERRORS_ENUM,{getSchemaPath:j8}=Rt(),ro=pc.SEARCH_WILDCARDS;async function z8(e,t,r){let n;e.schema===pc.SYSTEM_SCHEMA_NAME?n=W8[e.table]:n=global.hdb_schema[e.schema][e.table];let s=hU(e,n.hash_attribute,r,t);return fU(e,s,n.hash_attribute,r)}a(z8,"prepSearch");async function fU(e,t,r,n){let s=j8(e.schema,e.table),i=await K8.openEnvironment(s,e.table),o=EU(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(Q8(e,r)===!1){let d=e.search_attribute;if(d===r)return n?_U(o,()=>!0):o.map(E=>({[r]:E.key}));let _=a(E=>({[r]:E.value,[d]:E.key}),"toObject");return n?_U(o,_):o.map(_)}let u=e.search_attribute===r?o.map(d=>d.key):o.map(d=>d.value);return n===!0?jr.batchSearchByHashToMap(c,r,e.get_attributes,u):jr.batchSearchByHash(c,r,e.get_attributes,u)}a(fU,"executeSearch");function EU(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=jr.equals(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.CONTAINS:s=jr.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=jr.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=jr.startsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return jr.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return jr.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case ke.SEARCH_TYPES.SEARCH_ALL:return jr.searchAll(e,n,t.get_attributes,o,c,l);case ke.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return jr.searchAllToMap(e,n,t.get_attributes,o,c,l);case ke.SEARCH_TYPES.BETWEEN:s=jr.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=jr.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=jr.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=jr.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=jr.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;default:return Object.create(null)}return s}a(EU,"searchByType");function _U(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(_U,"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 hU(e,t,r,n){if(Y8.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),ro.indexOf(s)>-1)return r===!0?ke.SEARCH_TYPES.SEARCH_ALL_TO_MAP:ke.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(ro[0])<0&&s.indexOf(ro[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(ro.indexOf(i)>=0&&ro.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),ke.SEARCH_TYPES.CONTAINS;if(ro.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),ke.SEARCH_TYPES.ENDS_WITH;if(ro.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),ke.SEARCH_TYPES.STARTS_WITH;if(s.includes(ro[0])||s.includes(ro[1]))return ke.SEARCH_TYPES.EQUALS;throw new Error(dU.UNKNOWN_SEARCH_TYPE)}else switch(n){case pc.VALUE_SEARCH_COMPARATORS.BETWEEN:return ke.SEARCH_TYPES.BETWEEN;case pc.VALUE_SEARCH_COMPARATORS.GREATER:return ke.SEARCH_TYPES.GREATER_THAN;case pc.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return ke.SEARCH_TYPES.GREATER_THAN_EQUAL;case pc.VALUE_SEARCH_COMPARATORS.LESS:return ke.SEARCH_TYPES.LESS_THAN;case pc.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return ke.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(dU.UNKNOWN_SEARCH_TYPE)}}a(hU,"createSearchTypeFromSearchObject");pU.exports={executeSearch:fU,createSearchTypeFromSearchObject:hU,prepSearch:z8,searchByType:EU}});var SU=O((mOe,mU)=>{"use strict";var pOe=Vs(),J8=zl(),X8=te(),Z8=L(),e6=cp();mU.exports=t6;function t6(e,t){if(!X8.isEmpty(t)&&Z8.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=J8(e,"value");if(n)throw n;return e6.prepSearch(e,t,!0)}a(t6,"lmdbGetDataByValue")});var w_=O((gOe,TU)=>{"use strict";var TOe=Vs(),r6=zl(),n6=te(),s6=L(),i6=cp();TU.exports=o6;async function o6(e,t){if(!n6.isEmpty(t)&&s6.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=r6(e,"value");if(n)throw n;return i6.prepSearch(e,t,!1)}a(o6,"lmdbSearchByValue")});var RU=O((yOe,gU)=>{"use strict";var AOe=xt(),pA=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}},mA=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},SA=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};gU.exports={SearchByConditionsObject:pA,SearchCondition:mA,SortAttribute:SA}});var NU=O((IOe,OU)=>{"use strict";var OOe=RU().SearchByConditionsObject,a6=Vs(),c6=zl(),TA=jl(),lp=xt(),{Resource:NOe}=(Ks(),oe(gA)),bU=cp(),l6=dA(),u6=require("lodash"),{getSchemaPath:d6}=Rt(),AU=mt(),{handleHDBError:_6,hdb_errors:f6}=_e(),{HTTP_STATUS_CODES:E6}=f6,h6=1e8;OU.exports=p6;async function p6(e){let t=c6(e,"conditions");if(t)throw _6(t,t.message,E6.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=d6(e.schema,e.table),n=await AU.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)AU.openDBI(n,u.search_attribute);let i=u6.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let d=u.search_type;d===lp.SEARCH_TYPES.EQUALS?u.estimated_count=TA.count(n,u.search_attribute,u.search_value):d===lp.SEARCH_TYPES.CONTAINS||d===lp.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=h6}return u.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await yU(o,e,i[0],s.hash_attribute),l;if(!e.operator||e.operator.toLowerCase()==="and"){let u=n.dbis[s.hash_attribute],d=i.slice(1).map(bU.filterByType),_=d.length,E=TA.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(f=>u.get(f,{transaction:o,lazy:!0})),_>0&&(l=l.filter(f=>{for(let h=0;h<_;h++)if(!d[h](f))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(f=>l6.parseRow(f,E))}else{for(let _=1;_<i.length;_++){let E=i[_],f=await yU(o,e,E,s.hash_attribute);c=c.concat(f)}let u=new Set,d=e.offset||0;c=c.filter(_=>u.has(_)?!1:(u.add(_),!0)).slice(d,e.limit&&e.limit+d),l=TA.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(p6,"lmdbSearchByConditions");async function yU(e,t,r,n){let s=new a6(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===lp.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,bU.searchByType(e,s,i,n).map(o=>o.value)}a(yU,"executeConditionSearch")});var Jl=O((COe,IU)=>{"use strict";var m6=L().OPERATIONS_ENUM,RA=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=m6.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};IU.exports=RA});var AA=O((DOe,vU)=>{"use strict";var DU=Vs(),LU=Jl(),MU=w_(),UU=b_(),dn=L(),wU=te(),CU=mt(),{getTransactionAuditStorePath:S6,getSchemaPath:T6}=Rt(),PU=K();vU.exports=g6;async function g6(e){try{if(wU.isEmpty(global.hdb_schema[e.schema])||wU.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await R6(e),await A6(e);let t=T6(e.schema,e.table);try{await CU.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")PU.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=S6(e.schema,e.table);await CU.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")PU.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(g6,"lmdbDropTable");async function R6(e){let t=new DU(dn.SYSTEM_SCHEMA_NAME,dn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,dn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[dn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await MU(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 LU(dn.SYSTEM_SCHEMA_NAME,dn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await UU(s)}a(R6,"deleteAttributesFromSystem");async function A6(e){let t=new DU(dn.SYSTEM_SCHEMA_NAME,dn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,dn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[dn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,dn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,dn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await MU(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 LU(dn.SYSTEM_SCHEMA_NAME,dn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await UU(s)}catch(i){throw i}}a(A6,"dropTableFromSystem")});var xU=O((MOe,BU)=>{"use strict";var y6=require("fs-extra"),b6=Vs(),O6=Ql(),N6=Jl(),I6=AA(),w6=b_(),C6=fA(),P6=w_(),no=L(),{getSchemaPath:D6}=Rt(),{handleHDBError:L6,hdb_errors:M6}=_e(),{HDB_ERROR_MSGS:U6,HTTP_STATUS_CODES:v6}=M6;BU.exports=B6;async function B6(e){let t;try{t=await x6(e.schema);let r=new b6(no.SYSTEM_SCHEMA_NAME,no.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,no.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[no.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await P6(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await I6(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new N6(no.SYSTEM_SCHEMA_NAME,no.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await w6(s);let i=D6(t);await y6.remove(i)}catch(r){throw r}}a(B6,"lmdbDropSchema");async function x6(e){let t=new O6(no.SYSTEM_SCHEMA_NAME,no.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[no.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await C6(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw L6(new Error,U6.SCHEMA_NOT_FOUND(e),v6.NOT_FOUND,void 0,void 0,!0);return n}a(x6,"validateDropSchema")});var Xl=O((vOe,HU)=>{"use strict";var yA=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};HU.exports=yA});var OA=O((HOe,kU)=>{"use strict";var H6=require("fs-extra"),up=mt(),{getTransactionAuditStorePath:k6}=Rt(),bA=xt(),xOe=Xl();kU.exports=F6;async function F6(e){let t;try{let r=k6(e.schema,e.table);await H6.mkdirp(r),t=await up.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{up.createDBI(t,bA.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),up.createDBI(t,bA.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),up.createDBI(t,bA.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(F6,"createTransactionsAuditEnvironment")});var qU=O((GOe,GU)=>{"use strict";var NA=L(),FU=mt(),G6=nc(),{getSystemSchemaPath:q6,getSchemaPath:$6}=Rt(),FOe=Xi(),V6=Bh(),IA=vh(),K6=K(),Y6=OA();GU.exports=W6;async function W6(e,t){let r=$6(t.schema,t.table),n=new IA(t.schema,t.table,NA.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new IA(t.schema,t.table,NA.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new IA(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await FU.createEnvironment(r,t.table),e!==void 0){let o=await FU.openEnvironment(q6(),NA.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await G6.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 wA(n),await wA(s),await wA(i)}await Y6(t)}catch(o){throw o}}a(W6,"lmdbCreateTable");async function wA(e){try{await V6(e)}catch(t){K6.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(wA,"createAttribute")});var VU=O(($Oe,$U)=>{"use strict";var j6=E_(),z6=Xd(),Q6=rp(),C_=L(),J6=nc().updateRecords,X6=mt(),{getSchemaPath:Z6}=Rt(),e9=A_(),t9=K();$U.exports=r9;async function r9(e){try{let{schema_table:t,attributes:r}=j6(e);z6(e,r,t.hash_attribute),e.schema!==C_.SYSTEM_SCHEMA_NAME&&(r.includes(C_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(C_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(C_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(C_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await Q6(e.hdb_auth_header,t,r),s=Z6(e.schema,e.table),i=await X6.openEnvironment(s,e.table),o=await J6(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await e9(e,o)}catch(c){t9.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(r9,"lmdbUpdateRecords")});var YU=O((KOe,KU)=>{"use strict";var n9=L().OPERATIONS_ENUM,CA=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=n9.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};KU.exports=CA});var jU=O((jOe,WU)=>{"use strict";var WOe=YU(),s9=E_(),i9=Xd(),o9=rp(),P_=L(),a9=nc().upsertRecords,c9=mt(),{getSchemaPath:l9}=Rt(),u9=A_(),d9=K(),{handleHDBError:_9,hdb_errors:f9}=_e();WU.exports=E9;async function E9(e){let t;try{t=s9(e)}catch(l){throw _9(l,l.message,f9.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;i9(e,n,r.hash_attribute),e.schema!==P_.SYSTEM_SCHEMA_NAME&&(n.includes(P_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(P_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(P_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(P_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await o9(e.hdb_auth_header,r,n),i=l9(e.schema,e.table),o=await c9.openEnvironment(i,e.table),c=await a9(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await u9(e,c)}catch(l){d9.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(E9,"lmdbUpsertRecords")});var QU=O((QOe,zU)=>{"use strict";var PA=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};zU.exports=PA});var XU=O((XOe,JU)=>{"use strict";var DA=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}};JU.exports=DA});var tv=O((tNe,ev)=>{"use strict";var LA=mt(),{getTransactionAuditStorePath:h9}=Rt(),eNe=QU(),D_=xt(),p9=te(),ZU=XU(),m9=require("util").promisify,S9=m9(setTimeout),T9=1e4,g9=100;ev.exports=R9;async function R9(e){let t=h9(e.schema,e.table),r=await LA.openEnvironment(t,e.table,!0),n=LA.listDBIs(r);LA.initializeDBIs(r,D_.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new ZU;do s=await A9(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 S9(g9);while(s.transactions_deleted>0);return i}a(R9,"deleteAuditLogsBefore");async function A9(e,t){let r=new ZU;try{let n=e.dbis[D_.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[D_.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];p9.isEmpty(c)||(s=e.dbis[D_.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[D_.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>T9)break}return await s,r}catch(n){throw n}}a(A9,"deleteTransactions")});var nv=O((nNe,rv)=>{"use strict";var MA=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};rv.exports=MA});var iv=O((oNe,sv)=>{"use strict";var y9=Vs(),b9=Jl(),iNe=nv(),bi=L(),O9=te(),UA=mt(),N9=Xi(),I9=w_(),w9=b_(),{getSchemaPath:C9}=Rt();sv.exports=P9;async function P9(e,t=!0){let r;e.schema===bi.SYSTEM_SCHEMA_NAME?r=N9[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await L9(e),s=C9(e.schema,e.table),i=await UA.openEnvironment(s,e.table);return t===!0&&await D9(e,i,r.hash_attribute),UA.dropDBI(i,e.attribute),n}a(P9,"lmdbDropAttribute");async function D9(e,t,r){let n=UA.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 d in c)d!==i&&(u[d]=c[d]);s=t.dbis[r].put(o,u,l)}await s}a(D9,"removeAttributeFromAllObjects");async function L9(e){let t=new y9(bi.SYSTEM_SCHEMA_NAME,bi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,bi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[bi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,bi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await I9(t)).filter(o=>o[bi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(O9.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[bi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new b9(bi.SYSTEM_SCHEMA_NAME,bi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return w9(i)}a(L9,"dropAttributeFromSystem")});var dv=O((lNe,uv)=>{"use strict";var vA=mt(),Zl=xt(),cNe=on(),BA=L(),ov=te(),{getTransactionAuditStorePath:M9}=Rt(),U9=jl(),dp=Kl(),v9=K();uv.exports=B9;async function B9(e){let t=M9(e.schema,e.table),r=await vA.openEnvironment(t,e.table,!0),n=vA.listDBIs(r);vA.initializeDBIs(r,Zl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case BA.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return av(r,e.search_values);case BA.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,H9(r,e.search_values,s);case BA.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return x9(r,e.search_values);default:return av(r)}}a(B9,"readAuditLog");function av(e,t=[0,Date.now()]){ov.isEmpty(t[0])&&(t[0]=0),ov.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Zl.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 dp,s))}a(av,"searchTransactionsByTimestamp");function x9(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[Zl.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,lv(e,i))}return Object.fromEntries(r)}a(x9,"searchTransactionsByUsername");function H9(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let u=t[c],d=U9.equals(e,Zl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Zl.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let{value:_}of d){let E=Number(_);n.has(E)?n.get(E).push(u.toString()):n.set(E,[u.toString()])}}let s=Array.from(n.keys()),i=lv(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],u=l.timestamp,d=n.get(u);cv(l,"records",r,d,o),cv(l,"original_records",r,d,o)}return Object.fromEntries(o)}a(H9,"searchTransactionsByHashValues");function cv(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),d=u[u.length-1];if(d.timestamp===i)d[t]=[c];else{let _=new dp(e.operation,e.user_name,i,void 0);_[t]=[c],u.push(_)}}else{let u=new dp(e.operation,e.user_name,i,void 0);u[t]=[c],s.set(l,[u])}}}a(cv,"loopRecords");function lv(e,t){let r=[];try{let n=e.dbis[Zl.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 dp,i);r.push(o)}}catch(i){v9.warn(i)}return r}catch(n){throw n}}a(lv,"batchSearchTransactions")});var fv=O((fNe,_v)=>{"use strict";var{getSchemaPath:dNe}=Rt(),_Ne=mt(),{database:k9}=(Pe(),oe(ut));_v.exports={writeTransaction:F9};async function F9(e,t,r){return k9({database:e,table:t}).transaction(r)}a(F9,"writeTransaction")});var mv=O((hNe,pv)=>{"use strict";var{getSchemaPath:Ev}=Rt(),hv=mt();pv.exports={flush:G9,resetReadTxn:q9};async function G9(e,t){return(await hv.openEnvironment(Ev(e,t),t.toString())).flushed}a(G9,"flush");async function q9(e,t){try{(await hv.openEnvironment(Ev(e,t),t.toString())).resetReadTxn()}catch{}}a(q9,"resetReadTxn")});var Rv=O((mNe,gv)=>{"use strict";var{Readable:$9}=require("stream"),{getDatabases:V9}=(Pe(),oe(ut)),{readSync:K9,openSync:Y9,createReadStream:Sv}=require("fs"),{open:W9}=require("lmdb"),Tv=a_(),j9=c_(),{AUDIT_STORE_OPTIONS:z9}=(Qi(),oe(Av)),{INTERNAL_DBIS_NAME:Q9,AUDIT_STORE_NAME:J9}=xt();gv.exports=Z9;var xA=32768,X9=100;async function Z9(e){let t=e.database||e.schema||"data",r=V9()[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 d=u.dbisDB,_=W9({noSync:!0,maxDbs:j9.MAX_DBS}),E,f=_.openDB(Q9,new Tv(!1)),h=d.useReadTransaction(),T=0,m=a(async function(S,y){y.encoding="binary",y.encoder=void 0;let I=_.openDB(S,y),U=d.openDB(S,y);for(let{key:x,version:X,value:W}of U.getRange({start:null,transaction:h,versions:U.useVersions}))E=I.put(x,W,X),T++%X9===0&&(await new Promise(V=>setTimeout(V,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:S,value:y}of d.getRange({transaction:h,start:!1}))if(s.some(I=>S.startsWith?.(I+"/"))){f.put(S,y);let[,I]=S.split("/"),U=!I,x=new Tv(!U,U);await m(S,x)}e.include_audit&&await m(J9,{...z9}),await E;let g=Sv(_.path);return g.headers=l(),g.on("close",()=>{h.done(),_.close()}),g}let o=r[Object.keys(r)[0]].primaryStore,c=Y9(o.path);return o.transaction(()=>{let u=Buffer.alloc(xA);K9(c,u,0,xA),o.resetReadTxn();let d=o.useReadTransaction();d.renew();let _=Sv(null,{fd:c,start:xA}),E=new $9.from(async function*(){yield u;for await(let f of _)d.openTimer&&(d.openTimer=0),yield f;d.done()}());return E.headers=l(),E});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(Z9,"getBackup")});var Ov=O((TNe,bv)=>{"use strict";var e7=K(),{handleHDBError:t7}=_e(),r7=qP(),n7=Bh(),s7=oA(),i7=xM(),o7=b_(),a7=fA(),c7=lU(),l7=SU(),u7=w_(),d7=NU(),_7=xU(),f7=qU(),E7=VU(),h7=jU(),p7=tv(),m7=AA(),S7=iv(),T7=dv(),g7=fv(),yv=mv(),R7=Rv(),HA=class extends r7{static{a(this,"LMDBBridge")}async searchByConditions(t){return d7(t)}async getDataByHash(t){return await a7(t)}async searchByHash(t){return await c7(t)}async getDataByValue(t,r){return await l7(t,r)}async searchByValue(t){return await u7(t)}async createSchema(t){return await i7(t)}async dropSchema(t){return await _7(t)}async createTable(t,r){return await f7(t,r)}async dropTable(t){return await m7(t)}async createAttribute(t){return await n7(t)}async createRecords(t){return await s7(t)}async updateRecords(t){return await E7(t)}async upsertRecords(t){try{return await h7(t)}catch(r){throw t7(r,null,null,e7.ERR,r)}}async deleteRecords(t){return await o7(t)}async dropAttribute(t){return await S7(t)}async deleteAuditLogsBefore(t){return await p7(t)}async readAuditLog(t){return await T7(t)}writeTransaction(t,r,n){return g7.writeTransaction(t,r,n)}flush(t,r){return yv.flush(t,r)}resetReadTxn(t,r){return yv.resetReadTxn(t,r)}getBackup(t){return R7(t)}};bv.exports=HA});function Mv(e){FA=e}function O7(){b7=setInterval(function(){for(let e of kA)if(e.stale){let t=e[Fe]?.url;Cv.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},y7).unref()}var GA,wv,Cv,Pv,Dv,Lv,Nv,kA,A7,L_,Iv,FA,mc,_p,y7,b7,fp=Ie(()=>{GA=M(on()),wv=M(_e()),Cv=M(K());Ks();Pv=M(ne()),Dv=M(L()),Lv=M(te()),Nv=100,kA=new Set,A7=(0,Lv.convertToMS)(Pv.get(Dv.CONFIG_PARAMS.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3;a(Mv,"replicationConfirmation");mc=class e{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;overloadChecked;open=1;getReadTxn(){if(this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn)return this.readTxn.openTimer&&(this.readTxn.openTimer=0),this.readTxn;if(this.open===1)return this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxnsUsed=1,this.readTxn.openTimer&&(this.readTxn.openTimer=0),kA.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(kA.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(L_&&!this.overloadChecked&&performance.now()-Iv>A7)throw new wv.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,GA.getNextMonotonicTime)()),t.timestamp||(t.timestamp=r);let n=t.retries||0;if(this.validated<this.writes.length)try{let _=this.validated;this.validated=this.writes.length;for(let f=_;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let E;for(let f=_;f<this.validated;f++){let h=this.writes[f];h&&(h.before||h.beforeIntermediate)&&(E=!0)}if(E)return(async()=>{try{for(let f=0;f<2;f++){let h;for(let T=_;T<this.validated;T++){let m=this.writes[T];if(!m)continue;let g=m[f===0?"before":"beforeIntermediate"];if(g){let S=g();h?h.push?h.push(S):h=[h,S]:h=S}}h&&await(h.push?Promise.all(h):h)}}catch(f){throw this.abort(),f}return this.commit(t)})()}catch(_){throw this.abort(),_}n||this.doneReadTxn(),this.open=t?.letItLinger?2:0;let s,i=[],o=0;this.writes=this.writes.filter(_=>_);let c=a(_=>{_.commit(r,_.entry,n)},"doWrite"),l=a(()=>{let _=this.writes[o++];if(_)if(_.key){n>0&&(_.entry=_.store.getEntry(_.key));let E=_.store.ifVersion(_.key,_.entry?.version??null,l);s=s||E}else l();else for(let E of this.writes)c(E)},"nextCondition"),u=this.lmdbDb;if(this.writes.length>0&&(u?.retryRisk&&(u.retryRisk*=.99),this.writes.length+(u?.retryRisk||0)<Nv>>n?l():s=this.writes[0].store.transaction(()=>{for(let _ of this.writes)_.entry=_.store.getEntry(_.key),c(_);return!0})),s)return L_||(L_=s,Iv=performance.now(),L_.then(()=>{L_=null})),s.then(_=>{if(_){if(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.replicatedConfirmation){let E=this.writes[0].store.rootStore.databaseName,f=this.writes[this.writes.length-1];FA&&f&&i.push(FA(E,f.store.getEntry(f.key).localTime,this.replicatedConfirmation))}return this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))}else return u&&(u.retryRisk=(u.retryRisk||0)+Nv/2),t?t.retries=n+1:t={retries:1},this.commit(t)});let d={txnTime:r};if(this.next){let _=this.next?.commit(t);if(_?.then)return _?.then(E=>({txnTime:r,next:E}));d.next=_}return d}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=0,this.writes=[]}},_p=class extends mc{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,GA.getNextMonotonicTime)())}getReadTxn(){}},y7=3e4;a(O7,"startMonitoringTxns");O7()});function Pt(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 mc;e.timestamp&&(n.timestamp=e.timestamp),e.replicatedConfirmation&&(n.replicatedConfirmation=e.replicatedConfirmation),n[Fe]=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 Uv,Sc=Ie(()=>{Uv=M(fi());Ks();fp();a(Pt,"transaction");(0,Uv._assignPackageExport)("transaction",Pt);Pt.commit=function(e){let t=(e[Fe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Pt.abort=function(e){let t=(e[Fe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var qv={};je(qv,{ResourceBridge:()=>VA});function KA({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 Bv(e,t){let r=Oi(e),n=KA(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;Pt(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++],d;try{d=await r.get({id:u,lazy:s,select:n},i),d=d&&hp(d)}catch(_){d={message:_.toString()}}return t?{value:{key:u,value:d}}:{value:d}}else return o(),{done:!0}},return(u){return o(),{value:u,done:!0}},throw(u){return o(),{done:!0}}}}}}function Oi(e){let t=e.database||e.schema||I7,r=dt()[t];if(!r)throw(0,Ys.handleHDBError)(new Error,N7.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function xv(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*Hv(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:d}=o;if(s?.timestamp===u)s.hash_values.push(l),s.records.push(d);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:[d]}}}s&&(yield s)}var kv,Ep,Ys,Fv,Ws,qA,$A,Gv,N7,I7,w7,C7,vv,VA,$v=Ie(()=>{"use strict";kv=M(Ov()),Ep=M(zl()),Ys=M(_e());Pe();Fv=M(E_()),Ws=M(L()),qA=M(to()),$A=M($s()),Gv=M(te());Sc();pp();({HDB_ERROR_MSGS:N7}=Ys.hdb_errors),I7="data",w7=1e4,C7=10,VA=class extends kv.default{static{a(this,"ResourceBridge")}constructor(t){super(t),vv=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,Ep.default)(t,"conditions");if(r)throw(0,Ys.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=Oi(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:KA(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}]}pt({database:r.database??r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration,audit:r.audit})}async createAttribute(t){return await Oi(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Oi(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:d,version:_}=r.primaryStore.getEntry(o);return i(o,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){Oi(t).dropTable()}createSchema(t){return eu({database:t.schema,table:null}),qA.signalSchemaChange(new $A.SchemaEventMsg(process.pid,Ws.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await YA(t.schema),qA.signalSchemaChange(new $A.SchemaEventMsg(process.pid,Ws.OPERATIONS_ENUM.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,vv.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,Fv.default)(t),s,i=dt()[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),Pt(o,async c=>{if(!i.schemaDefined){s=[];for(let d of n)i.attributes.find(E=>E.name==d)||s.push(d);s.length>0&&await i.addAttributes(s.map(d=>({name:d,indexed:!0})))}let l=[],u=[];for(let d of t.records){let _=d[i.primaryKey],E=_!=null&&await i.get(_,o);if(t.requires_existing&&!E||t.requires_no_existing&&E){u.push(d[i.primaryKey]);continue}E&&(E=hp(E));for(let f in d)if(Object.prototype.hasOwnProperty.call(d,f)){let h=d[f];if(typeof h=="function")try{let T=h([[E]]);Array.isArray(T)&&(h=T[0].func_val,d[f]=h)}catch(T){throw T.message+="Trying to set key "+f+" on object"+JSON.stringify(d),T}}if(E)for(let f in E)Object.prototype.hasOwnProperty.call(d,f)||(d[f]=E[f]);await(_==null?i.create(d,o):i.put(d,o)),l.push(d[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:l,new_attributes:s,skipped_hashes:u}})}async deleteRecords(t){let r=dt()[t.schema][t.table],n={user:t.hdb_user};return t.replicateTo&&(n.replicateTo=t.replicateTo),t.replicatedConfirmation&&(n.replicatedConfirmation=t.replicatedConfirmation),Pt(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 xv(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=dt()[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:Ws.VALUE_SEARCH_COMPARATORS.LESS}]}),s=!1,i=[],o=[],c=0,l=[],u=a(async()=>{let d=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:l});i.push(...d.deleted_hashes),o.push(...d.skipped_hashes),await(0,Gv.async_set_timeout)(C7),l=[],s=!0},"chunkDelete");for await(let d of n)l.push(d[r.primaryKey]),c++,c%w7===0&&await u();return l.length>0&&await u(),s?xv(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,Ep.default)(t,"hashes");if(r)throw r;return Bv(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of Bv(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&Ws.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);t.select!==void 0&&(t.get_attributes=t.select),t.attribute!==void 0&&(t.search_attribute=condition.attribute),t.value!==void 0&&(t.search_value=condition.value);let n=(0,Ep.default)(t,"value");if(n)throw n;let s=Oi(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===Ws.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return s.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,sort:t.sort,select:KA(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=Oi(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){Oi({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Oi(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=Oi(t),n={};switch(t.search_type){case Ws.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)n[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.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 Ws.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let s=t.search_values;for await(let i of Hv(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return Hv(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};a(KA,"getSelect");a(Bv,"getRecords");a(Oi,"getTable");a(xv,"createDeleteResponse");a(Hv,"groupRecordsInHistory")});var Un=O((UNe,Vv)=>{"use strict";var{ResourceBridge:P7}=($v(),oe(qv)),D7=ne();D7.initSync();var mp;function L7(){return mp||(mp=new P7,mp)}a(L7,"getBridge");Vv.exports=L7()});var jv=O((BNe,Wv)=>{"use strict";var Kv=require("lodash"),M_=require("mathjs"),M7=require("jsonata"),Yv=te();Wv.exports={distinct_array:a(e=>Array.isArray(e)&&e.length>1?Kv.uniqWith(e,Kv.isEqual):e,"distinct_array"),searchJSON:U7,mad:U_.bind(null,M_.mad),mean:U_.bind(null,M_.mean),mode:U_.bind(null,M_.mode),prod:U_.bind(null,M_.prod),median:U_.bind(null,M_.median)};function U_(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(U_,"aggregateFunction");function U7(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(Yv.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),Yv.isEmpty(this.__ala__.res[r])){let n=M7(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(U7,"searchJSON")});var Qv=O((HNe,zv)=>{"use strict";var sr=require("moment"),WA="YYYY-MM-DDTHH:mm:ss.SSSZZ";sr.suppressDeprecationWarnings=!0;zv.exports={current_date:a(()=>sr().utc().format("YYYY-MM-DD"),"current_date"),current_time:a(()=>sr().utc().format("HH:mm:ss.SSS"),"current_time"),extract:a((e,t)=>{switch(t.toLowerCase()){case"year":return sr(e).utc().format("YYYY");case"month":return sr(e).utc().format("MM");case"day":return sr(e).utc().format("DD");case"hour":return sr(e).utc().format("HH");case"minute":return sr(e).utc().format("mm");case"second":return sr(e).utc().format("ss");case"millisecond":return sr(e).utc().format("SSS");default:break}},"extract"),date:a(e=>sr(e).utc().format(WA),"date"),date_format:a((e,t)=>sr(e).utc().format(t),"date_format"),date_add:a((e,t,r)=>sr(e).utc().add(t,r).valueOf(),"date_add"),date_sub:a((e,t,r)=>sr(e).utc().subtract(t,r).valueOf(),"date_sub"),date_diff:a((e,t,r)=>{let n=sr(e).utc(),s=sr(t).utc();return r?n.diff(s,r,!0):n.diff(s)},"date_diff"),now:a(()=>sr().utc().valueOf(),"now"),get_server_time:a(()=>sr().format(WA),"get_server_time"),offset_utc:a((e,t)=>sr(e).utc().utcOffset(t).format(WA),"offset_utc")}});var e0=O((FNe,Zv)=>{"use strict";var v7=require("@turf/area"),B7=require("@turf/length"),x7=require("@turf/circle"),H7=require("@turf/difference"),k7=require("@turf/distance"),F7=require("@turf/boolean-contains"),G7=require("@turf/boolean-equal"),q7=require("@turf/boolean-disjoint"),$7=require("@turf/helpers"),Jv=L(),$e=te(),so=K();Zv.exports={geoArea:V7,geoLength:K7,geoCircle:Y7,geoDifference:W7,geoDistance:Xv,geoNear:j7,geoContains:z7,geoEqual:Q7,geoCrosses:J7,geoConvert:X7};function V7(e){if($e.isEmpty(e))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e));try{return v7.default(e)}catch(t){return so.trace(t,e),NaN}}a(V7,"geoArea");function K7(e,t){if($e.isEmpty(e))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e));try{return B7.default(e,{units:t||"kilometers"})}catch(r){return so.trace(r,e),NaN}}a(K7,"geoLength");function Y7(e,t,r){if($e.isEmpty(e))return NaN;if($e.isEmpty(t))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e));try{return x7.default(e,t,{units:r||"kilometers"})}catch(n){return so.trace(n,e,t),NaN}}a(Y7,"geoCircle");function W7(e,t){if($e.isEmpty(e))return NaN;if($e.isEmpty(t))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return H7(e,t)}catch(r){return so.trace(r,e,t),NaN}}a(W7,"geoDifference");function Xv(e,t,r){if($e.isEmpty(e))return NaN;if($e.isEmpty(t))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return k7.default(e,t,{units:r||"kilometers"})}catch(n){return so.trace(n,e,t),NaN}}a(Xv,"geoDistance");function j7(e,t,r,n){if($e.isEmpty(e)||$e.isEmpty(t))return!1;if($e.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return Xv(e,t,n)<=r}catch(s){return so.trace(s,e,t),!1}}a(j7,"geoNear");function z7(e,t){if($e.isEmpty(e)||$e.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return F7.default(e,t)}catch(r){return so.trace(r,e,t),!1}}a(z7,"geoContains");function Q7(e,t){if($e.isEmpty(e)||$e.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return G7.default(e,t)}catch(r){return so.trace(r,e,t),!1}}a(Q7,"geoEqual");function J7(e,t){if($e.isEmpty(e)||$e.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return!q7.default(e,t)}catch(r){return so.trace(r,e,t),!1}}a(J7,"geoCrosses");function X7(e,t,r){if($e.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if($e.isEmpty(t))throw new Error("geo_type is required");if($e.isEmpty(Jv.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(Jv.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=$e.autoCastJSON(e)),$7[t](e,r)}a(X7,"geoConvert")});var Sp=O((qNe,t0)=>{var Tc=jv(),Gn=Qv(),Ni=e0();t0.exports=e=>{e.aggr.mad=e.aggr.MAD=Tc.mad,e.aggr.mean=e.aggr.MEAN=Tc.mean,e.aggr.mode=e.aggr.MODE=Tc.mode,e.aggr.prod=e.aggr.PROD=Tc.prod,e.aggr.median=e.aggr.MEDIAN=Tc.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Tc.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Tc.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Gn.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Gn.current_time,e.fn.extract=e.fn.EXTRACT=Gn.extract,e.fn.date=e.fn.DATE=Gn.date,e.fn.date_format=e.fn.DATE_FORMAT=Gn.date_format,e.fn.date_add=e.fn.DATE_ADD=Gn.date_add,e.fn.date_sub=e.fn.DATE_SUB=Gn.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Gn.date_diff,e.fn.now=e.fn.NOW=Gn.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Gn.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Gn.get_server_time,e.fn.getdate=e.fn.GETDATE=Gn.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Gn.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Ni.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Ni.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Ni.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Ni.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Ni.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Ni.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Ni.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Ni.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Ni.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Ni.geoNear}});var i0=O(($Ne,s0)=>{"use strict";var v_=require("lodash"),_n=require("alasql");_n.options.cache=!1;var Z7=Sp(),r0=require("clone"),Tp=require("recursive-iterator"),Ue=K(),et=te(),tu=Un(),eee=L(),{hdb_errors:tee}=_e(),{getDatabases:n0}=(Pe(),oe(ut)),ree="IS NULL",js="There was a problem performing this search. Please check the logs and try again.";Z7(_n);var jA=class{static{a(this,"SQLSearch")}constructor(t,r){if(et.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(),et.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!et.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(js)}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(js)}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(js)}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(js)}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(js)}}_getColumns(){let t=new Tp(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(r0(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=v_.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=n0()[r.databaseid][r.tableid].primaryKey,this.data[n].__merged_data={},this.data[n].__merged_attributes=[],this.data[n].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(et.isEmpty(this.statement.where)){Ue.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Tp(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!et.isEmpty(r)&&r.right)if(et.isNotEmptyAndHasValue(r.right.value)){let n=et.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new _n.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=et.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new _n.yy.LogicValue({value:i}):n instanceof _n.yy.StringValue&&et.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new _n.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 Tp(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(!et.isEmpty(eee.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(et.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(et.isEmptyOrZeroLength(r.left.columnid)||et.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(et.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"=":!et.isEmpty(r.right.value)||!et.isEmpty(r.left.value)?n.add(et.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(et.isEmptyOrZeroLength(this.all_table_attributes)&&et.isEmptyOrZeroLength(this.statement.from)&&et.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&&v_.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(et.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);et.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(et.isEmptyOrZeroLength(this.all_table_attributes)&&!et.isEmptyOrZeroLength(this.columns.columns))return t;if(et.isEmptyOrZeroLength(this.all_table_attributes)&&et.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await _n.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(r0(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(et.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(ree)>-1&&this.tables.forEach(s=>{let i={columnid:n0()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=v_.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),!et.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!et.isEmptyOrZeroLength(this.exact_search_values[u].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[u].values);let d=await tu.getDataByHash(c);for(let _ of c.hash_values)d.get(_)&&!this.data[i].__merged_data[_]&&(this.data[i].__merged_data[_]=[...n[i]],this._setMergedHashAttribute(i,_))}catch(d){throw Ue.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),Ue.error(d),new Error(js)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async d=>{let _={...c};_.search_value=d;let E=await tu.getDataByValue(_);for(let[f,h]of E)this.data[i].__merged_data[f]?this._updateMergedAttribute(i,f,s.attribute,h[s.attribute]):(this.data[i].__merged_data[f]=[...n[i]],this._updateMergedAttribute(i,f,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,f))}))}catch(d){throw Ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),Ue.error(d),new Error(js)}else if(!et.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!et.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let d=this.comparator_search_values[u].comparators;for(let _=0,E=d.length;_<E;_++){let f=d[_];c.search_attribute=f.attribute,c.search_value=f.search_value;let h=await tu.getDataByValue(c,f.operation);if(l)for(let[T]of h)this.data[i].__merged_data[T]||(this.data[i].__merged_data[T]=[...n[i]],this._setMergedHashAttribute(i,T));else for(let[T,m]of h)this.data[i].__merged_data[T]?this._updateMergedAttribute(i,T,s.attribute,m[s.attribute]):(this.data[i].__merged_data[T]=[...n[i]],this._updateMergedAttribute(i,T,s.attribute,m[s.attribute]),this._setMergedHashAttribute(i,T))}}catch(d){throw Ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),Ue.error(d),new Error(js)}else try{c.search_attribute=s.attribute,c.search_value="*";let d=await tu.getDataByValue(c);if(l)for(let[_]of d)this.data[i].__merged_data[_]||(this.data[i].__merged_data[_]=[...n[i]],this._setMergedHashAttribute(i,_));else for(let[_,E]of d)this.data[i].__merged_data[_]?this._updateMergedAttribute(i,_,s.attribute,E[s.attribute]):(this.data[i].__merged_data[_]=[...n[i]],this._updateMergedAttribute(i,_,s.attribute,E[s.attribute]),this._setMergedHashAttribute(i,_))}catch(d){throw Ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),Ue.error(d),new Error(js)}}}_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 _n.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 _n.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new _n.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 _n.yy.FuncValue:new _n.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(f=>{f.joinmode&&f.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(f.table);let h=f.joinmode+" JOIN ? AS "+(f.as?f.as:f.table.tableid);f.on&&(h+=" ON "+f.on.toString()),i.push(h),t.push(Object.values(this.data[`${f.table.databaseid_orig}_${f.table.as?f.table.as_orig:f.table.tableid_orig}`].__merged_data))});let o=[],c={};s.forEach(f=>{let h=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__hash_name,T=f.as?f.as_orig:f.tableid_orig;o.push({key:`'${T}.${h}'`,schema:f.databaseid_orig,table:f.as?f.as_orig:f.tableid_orig,keys:new Set}),r.push(`${f.as?f.as:f.tableid}.\`${h}\` AS "${T}.${h}"`),c[f.as?f.as_orig:f.tableid_orig]=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__merged_attributes});let 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(f=>{f.is_func?r.push(f.initial_select_column.toString()):f.initial_select_column.tableid?r.push(`${f.initial_select_column.tableid}.${f.initial_select_column.columnid} AS ${f.expression.columnid}`):r.push(`${f.initial_select_column.columnid} AS ${f.expression.columnid}`)}));let d="",_="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(d=this.statement.limit?"LIMIT "+this.statement.limit:"",_=this.statement.offset?"OFFSET "+this.statement.offset:"");let E=[];try{let f=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${l} ${u} ${d} ${_}`,h=this._convertColumnsToIndexes(f,s);E=await _n.promise(h,t),t=null}catch(f){throw Ue.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),Ue.error(f),new Error("There was a problem processing the data.")}if(E&&E.length>0){for(let f=0,h=E.length;f<h;f++){let T=E[f];o.forEach(m=>{T[m.key]!==null&&T[m.key]!==void 0&&m.keys.add(T[m.key])})}o.forEach(f=>{let h=Object.keys(this.data[`${f.schema}_${f.table}`].__merged_data),T=v_.difference(h,[...f.keys].map(m=>m.toString()));for(let m=0,g=T.length;m<g;m++){let S=T[m];delete this.data[`${f.schema}_${f.table}`].__merged_data[S]}})}return{existing_attributes:c,joined_length:E?E.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new Tp(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=v_.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(js)}}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 d in i)o.push(i[d][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 tu.getDataByHash(c),u=s.columns.length;for(let d=0,_=o.length;d<_;d++){let E=o[d],f=l.get(E);for(let h=0;h<u;h++){let T=s.columns[h],m=f[T]===void 0?null:f[T];this.data[n].__merged_data[E].push(m)}}}}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 _n.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(tee.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"),d=`${l}.[${c}]`;n=n.replace(u,d)});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 tu.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(js)}}return Object.values(Object.values(this.data)[0].__merged_data)}};s0.exports=jA});var $r=O((KNe,o0)=>{"use strict";var nee=FP();o0.exports={searchByConditions:iee,searchByHash:oee,searchByValue:aee,search:cee};var zA=Un(),{transformReq:QA}=te(),see=i0();async function iee(e){return QA(e),zA.searchByConditions(e)}a(iee,"searchByConditions");async function oee(e){QA(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of zA.searchByHash(e))r&&t.push(r);return t}a(oee,"searchByHash");async function aee(e){QA(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of zA.searchByValue(e))t.push(r);return t}a(aee,"searchByValue");function cee(e,t){try{let r=new nee(e);r.validate(),new see(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(cee,"search")});var gp=O((WNe,a0)=>{"use strict";var lee=Un();a0.exports={writeTransaction:uee};function uee(e,t,r){return lee.writeTransaction(e,t,r)}a(uee,"writeTransaction")});var d0=O((QNe,u0)=>{"use strict";var dee=$r(),_ee=ls(),c0=K(),fee=Vr(),zNe=gp(),Eee=require("clone"),XA=require("alasql"),hee=Sp(),l0=require("util"),pee=l0.promisify(_ee.getTableSchema),mee=l0.promisify(dee.search),See=L(),JA=te();hee(XA);u0.exports={update:gee};var Tee="There was a problem performing this update. Please check the logs and try again.";async function gee({statement:e,hdb_user:t}){let r=await pee(e.table.databaseid,e.table.tableid),n=Ree(e.columns);JA.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=Eee(s),c=JA.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,u=XA.parse(l).statements[0],d=await mee(u),_=Aee(n,d);return yee(o,_,t)}a(gee,"update");function Ree(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=XA.compile(`SELECT ${r.expression.toString()} AS [${See.FUNC_VAL}] FROM ?`)}),t}catch(t){throw c0.error(t),new Error(Tee)}}a(Ree,"createUpdateRecord");function Aee(e,t){return JA.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(Aee,"buildUpdateRecords");async function yee(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await fee.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){c0.error(`Error delete new_attributes from update response: ${i}`)}return s}a(yee,"updateRecords")});var f0=O((eIe,_0)=>{var bee=require("alasql"),Oee=$r(),Nee=K(),Iee=Un(),ey=require("util"),ZA=te(),wee=L(),Cee=ls(),XNe=gp(),ZNe=Vr(),Pee="record",Dee="successfully deleted",Lee=ey.callbackify(Bee),Mee=ey.promisify(Oee.search),Uee=ey.promisify(Cee.getTableSchema);_0.exports={convertDelete:Lee};function vee(e){return`${e.deleted_hashes.length} ${Pee}${e.deleted_hashes.length===1?"":"s"} ${Dee}`}a(vee,"generateReturnMessage");async function Bee({statement:e,hdb_user:t}){let r=await Uee(e.table.databaseid,e.table.tableid);ZA.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=ZA.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=bee.parse(o).statements[0],l={operation:wee.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await Mee(c);let u=await Iee.deleteRecords(l);return ZA.isEmptyOrZeroLength(u.message)&&(u.message=vee(u)),delete u.txn_time,u}catch(u){throw Nee.error(u),u.hdb_code?u.message:u}}a(Bee,"convertDelete")});var S0=O((rIe,m0)=>{"use strict";var xee=gi(),{hdb_errors:E0}=_e(),{getDatabases:h0}=(Pe(),oe(ut));m0.exports={checkSchemaExists:p0,checkSchemaTableExists:Hee,schema_describe:xee};async function p0(e){if(!h0()[e])return E0.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(p0,"checkSchemaExists");async function Hee(e,t){let r=await p0(e);if(r)return r;if(!h0()[e][t])return E0.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Hee,"checkSchemaTableExists")});var ru=O((sIe,kee)=>{kee.exports={name:"harperdb",version:"4.4.19",description:"HarperDB is a distributed database, caching service, streaming broker, and application development platform focused on performance and ease of use.",keywords:["database","nosql","api","distributed","broker","mqtt","real-time","enterprise","Fastify","NATS","HarperDB","Harper","clustering","replication","REST","WebSockets","decentralized","server-sent events","document store"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{"minimum-node":"16.0.0","go-lang":"1.21.7","nats-server":"2.10.11"},exports:{".":"./index.js"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"SEE LICENSE IN LICENSE",scripts:{submodules:"git submodule update --init --recursive","cover:test":"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && nyc --no-clean --reporter=lcovonly npm run test:replication && nyc --no-clean --reporter=lcovonly npm run test:apitests && nyc --no-clean --reporter=lcovonly npm run test:resources && nyc --no-clean --reporter=lcovonly npm run test:logging && nyc --no-clean --reporter=lcovonly npm run test:upgrade && nyc --no-clean --reporter=lcovonly npm run test:nats && nyc --no-clean --reporter=lcovonly npm run test:cfserver && nyc --no-clean --reporter=lcovonly npm run test:hdbserver && nyc --no-clean --reporter=lcovonly npm run test:bin && nyc --no-clean --reporter=lcovonly npm run test:main && nyc --no-clean --reporter=lcovonly npm run test:security && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license",test:"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && npm run test:replication && npm run test:apitests && npm run test:resources && npm run test:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:bin && npm run test:main && npm run test:security && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:resources":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/resources/**/*.js' --config '../unitTests/.mocharc.json'","test:bin":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/bin/**/*.js' --config '../unitTests/.mocharc.json'","test:main":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","test:lmdbbridge":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","test:lmdbutility":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","test:hdbserver":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","test:cfserver":"npm run submodules && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/fastifyRoutes/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","test:nats":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","test:upgrade":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","test:apitests":"pm2 kill && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*-test.mjs' --config '../unitTests/.mocharc.json'","test:logging":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","test:security":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/security/**/*.js' --config '../unitTests/.mocharc.json'","test:replication":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/replication/**/*.js' --config '../unitTests/.mocharc.json'","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test",format:"prettier .","format:fix":"npm run format -- --write",lint:"eslint .","lint:fix":"npm run lint -- --fix"},dependencies:{"@aws-sdk/client-s3":"3.717.0","@aws-sdk/lib-storage":"3.717.0","@endo/static-module-record":"^1.0.4","@fastify/autoload":"5.10.0","@fastify/compress":"~6.5.0","@fastify/cors":"~9.0.1","@fastify/static":"~7.0.4","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"4.1.10","cbor-x":"1.6.0",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2","fast-glob":"3.3.2",fastify:"~4.29.0","fastify-plugin":"~4.5.1","fs-extra":"11.2.0",graphql:"^16.10.0","gunzip-maybe":"1.4.2","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.12.2","json-bigint-fixes":"1.1.0",json2csv:"5.0.7",jsonata:"1.8.7",jsonwebtoken:"9.0.2",lmdb:"3.2.5",lodash:"4.17.21",mathjs:"11.12.0",minimist:"1.2.8",moment:"2.30.1","mqtt-packet":"~9.0.0",msgpackr:"1.11.2",nats:"2.19.0",needle:"3.3.1","node-forge":"^1.3.1","node-stream-zip":"1.15.0","node-unix-socket":"0.2.5","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.5.3",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.16.0",pm2:"5.4.1",prompt:"1.3.0","properties-reader":"2.3.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^1.1.0","serve-static":"2.1.0",ses:"1.1.0","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.24.5","tar-fs":"3.0.6",ulidx:"0.5.0",uuid:"10.0.0","validate.js":"0.13.1",ws:"8.18.0",yaml:"2.7.0"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"20.14.8","@typescript-eslint/eslint-plugin":"^7.18.0","@typescript-eslint/parser":"^7.18.0",axios:"1.7.5",chai:"4.4.1","chai-integer":"0.1.0",esbuild:"^0.24.2",eslint:"^8.57.1","eslint-config-prettier":"^9.1.0","eslint-plugin-sonarjs":"^3.0.1",eventsource:"^2.0.2","graphql-http":"^1.22.3","hook-std":"3.0.0","intercept-stdout":"0.1.2",mkcert:"1.5.1",mocha:"^11.0.1","mocha-teamcity-reporter":"^4.2.0","mock-require":"3.0.3","mock-stdin":"1.0.0",mqtt:"~4.3.8",newman:"6.1.3","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"3.3.3",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0","source-map-support":"^0.5.21",typescript:"^5.7.2",undici:"^6.19.8","why-is-node-still-running":"^1.0.0"},overrides:{alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","segfault-handler":"^1.3.0","utf-8-validate":"^5.0.10"}}});var F_={};je(F_,{addAnalyticsListener:()=>k_,recordAction:()=>mr,recordActionBinary:()=>qn,setAnalyticsEnabled:()=>Fee});function Fee(e){I0=e}function mr(e,t,r,n,s){if(!I0)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=yp.get(i);if(o)if(typeof e=="number"){let c=o.values,l=c.index++;if(l>=c.length){let u=c;o.values=c=new Float32Array(l*2),c.set(u),c.index=l+1}c[l]=e,o.total+=e}else if(typeof e=="boolean")e&&o.total++,o.count++;else if(typeof e=="function")o.count++;else throw new TypeError("Invalid metric value type "+typeof e);else{if(typeof e=="number")o={total:e,values:new Float32Array(4)},o.values.index=1,o.values[0]=e,o.total=e;else if(typeof e=="boolean")o={},o.total=e?1:0,o.count=1;else if(typeof e=="function")o={},o.count=1,o.callback=e;else throw new TypeError("Invalid metric value type "+typeof e);o.description={metric:t,path:r,method:n,type:s},yp.set(i,o)}Rp||Gee()}function qn(e,t,r,n,s){mr(!!e,t,r,n,s)}function k_(e){P0.push(e)}function Gee(){Rp=performance.now(),setTimeout(async()=>{let e=performance.now()-Rp;Rp=0;let t=[],r={time:Date.now(),period:e,threadId:gc.threadId,metrics:t};for(let[s,i]of yp){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,l=0,u=[],d;for(let _ of D0){let E=Math.floor(c*_),f=o[E-1];if(E>l){let h=E-l;if(f===d){let T=u[u.length-1];typeof T=="number"?u[u.length-1]={value:T,count:1+h}:T.count+=h}else u.push(h>1?{value:f,count:h}:f),d=f;l=E}}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 L0()}let n=process.memoryUsage();t.push({metric:"memory",threadId:gc.threadId,byThread:!0,...n});for(let s of P0)s(t);yp=new Map,gc.parentPort?gc.parentPort.postMessage({type:C0,report:r}):v0({report:r})},w0).unref()}async function qee(e,t=6e4){let r=ny(),n=M0(),s=new Promise(T=>{let m=performance.now();setImmediate(()=>{let g=performance.now();g-m>5e3&&(0,B_.warn)("Unusually high event queue latency on the main thread of "+Math.round(g-m)+"ms"),m=performance.now()}),n.primaryStore.prefetch([1],()=>{let g=performance.now();g-m>5e3&&(0,B_.warn)("Unusually high task queue latency on the main thread of "+Math.round(g-m)+"ms"),T(g-m)})}),i;for(let T of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(T.value?.time){i=T.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,l=new Map,u=[],d;for(let{key:T,value:m}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!m)continue;if(o){if(T>o+t)break}else o=T;d=T;let{metrics:g,threadId:S}=m;for(let y of g||[]){let{path:I,method:U,type:x,metric:X,count:W,total:V,distribution:se,threads:Q,...de}=y;W||(W=1);let j=X+(I?"-"+I:"");U!==void 0&&(j+="-"+U),x!==void 0&&(j+="-"+x);let ae=c.get(j);if(ae){if(ae.threads){let Ne=ae.threads[S];if(Ne)ae=Ne;else{ae.threads[S]={...de};continue}}ae.count||(ae.count=1);let Oe=ae.count;for(let Ne in de){let Me=de[Ne];typeof Me=="number"&&(ae[Ne]=(ae[Ne]*Oe+Me*W)/(Oe+W))}ae.count+=W,V>=0&&(ae.total+=V,ae.ratio=ae.total/ae.count)}else ae={period:t,...y},delete ae.distribution,c.set(j,ae),ae.byThread&&(ae.threads=[],ae.threads[S]={...de},u.push(ae));if(se){se=se.map(Ne=>typeof Ne=="number"?{value:Ne,count:1}:Ne);let Oe=l.get(j);Oe?Oe.push(...se):l.set(j,se)}}await L0()}for(let T of u){let{path:m,method:g,type:S,metric:y,count:I,total:U,distribution:x,threads:X,...W}=T;X=X.filter(V=>V);for(let V in W){if(typeof T[V]!="number")continue;let se=0;for(let Q of X){let de=Q[V];typeof de=="number"&&(se+=de)}T[V]=se}T.count=X.length,delete T.threads,delete T.byThread}for(let[T,m]of l){let g=c.get(T);m.sort((Ne,Me)=>Ne.value>Me.value?1:-1);let S=g.count-1,y=[],I=0,U=0,x;for(let Ne of D0){let Me=S*Ne;for(;I<Me;)x=m[U++],I+=x.count,U===1&&I--;let Gr=m[U>1?U-2:0];x||(x=m[0]),y.push(x.value-(x.value-Gr.value)*(I-Me)/x.count)}let[X,W,V,se,Q,de,j,ae,Oe]=y;Object.assign(g,{p1:X,p10:W,p25:V,median:se,p75:Q,p90:de,p95:j,p99:ae,p999:Oe})}let _;for(let[T,m]of c)m.id=(0,Ap.getNextMonotonicTime)(),m.time=d,n.primaryStore.put(m.id,m,{append:!0}).then(g=>{g||n.primaryStore.put(m.id,m)}),_=!0;let E=Date.now(),{idle:f,active:h}=performance.eventLoopUtilization();if(_||h*10>f){let T=(0,Ap.getNextMonotonicTime)(),m={id:T,metric:"main-thread-utilization",idle:f-T0,active:h-g0,taskQueueLatency:await s,time:E,...process.memoryUsage()};n.primaryStore.put(T,m,{append:!0}).then(g=>{g||n.primaryStore.put(T,m)})}T0=f,g0=h}async function R0(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function ny(){return A0||(A0=pt({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function M0(){return y0||(y0=pt({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function Kee(){U0=!0;let e=(0,H_.get)(ry.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await qee(w0,e),await R0(ny(),$ee),await R0(M0(),Vee)},Math.min(e/2,2147483647)).unref()}function v0(e,t){let r=e.report;r.threadId=t?.threadId||gc.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(b0+=n.mean*n.count);r.totalBytesProcessed=b0,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(O0.get(t))}),O0.set(t,t.performance.eventLoopUtilization())),r.id=(0,Ap.getNextMonotonicTime)(),ny().primaryStore.put(r.id,r),U0||Kee(),Yee&&(B0=jee(r))}async function jee(e){if(await B0,!ea){let r=(0,x_.dirname)((0,B_.getLogFilePath)());try{ea=await(0,ty.open)((0,x_.join)(r,"analytics.log"),"r+")}catch{ea=await(0,ty.open)((0,x_.join)(r,"analytics.log"),"w+")}}let t=(await ea.stat()).size;if(t>Wee){let r=Buffer.alloc(t);await ea.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await ea.write(r,{position:0}),await ea.truncate(r.length),t=r.length}await ea.write(JSON.stringify(e)+`
11
+ This can occur during early stages of install where the config file has not yet been created`);return}else throw pr.error(i),new Error(`Error reading HarperDB config file at ${r}`)}WX(n,r),kR(n);let s=n.toJSON();if(HX.config=s,zt=kl(s),zt.logging_rotation_rotate)for(let i in CL)zt[i]&&pr.error(`Config ${CL[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);pr.trace(FX)}}a(zh,"initConfig");function WX(e,t){let r=e.getIn(["rootPath"]),n=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Bn.join(r,"database")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Bn.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&&(pr.trace("Updating config file with missing config params"),Yr.writeFileSync(t,String(e)))}a(WX,"checkForUpdatedConfig");function kR(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 Hl.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 Hl.CONFIG_VALIDATION("operationsApi.network.port and operationsApi.network.securePort cannot be the same value");let n=MX(r,t);if(n.error)throw Hl.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(kR,"validateConfig");function jX(e,t){zt===void 0&&(zt={});let r=qs[e.toLowerCase()];if(r===void 0){pr.trace(`Unable to update config object because config param '${e}' does not exist`);return}zt[r.toLowerCase()]=t}a(jX,"updateConfigObject");function vL(e,t,r=void 0,n=!1,s=!1,i=!1){zt===void 0&&zh();let o=UL(qs.hdb_root),c=Bn.join(o,un.HDB_CONFIG_FILE),l=Qo(c),u;if(r===void 0&&e.toLowerCase()===vn.DATABASES)u=t;else if(r===void 0){let E;if(i)E=e;else if(E=qs[e.toLowerCase()],E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let f=E.split("_"),h=HR(E,t);l.setIn([...f],h)}else for(let E in r){let f=qs[E.toLowerCase()];if(f===vn.HTTP_SECUREPORT&&r[E]===zt[vn.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),f===vn.OPERATIONSAPI_NETWORK_SECUREPORT&&r[E]===zt[vn.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),f===vn.DATABASES){u=r[E];continue}if(f?.startsWith("threads_")){let h=l.getIn(["threads"]);h>=0&&(l.deleteIn(["threads"]),l.setIn(["threads","count"],h))}if(!f&&(E.endsWith("_package")||E.endsWith("_port"))&&(f=E),f!==void 0){let h=f.split("_"),T=un.LEGACY_CONFIG_PARAMS[E.toUpperCase()];T&&T.startsWith("customFunctions")&&l.hasIn(T.split("_"))&&(f=T,h=T.split("_"));let m=HR(f,r[E]);f==="rootPath"&&m?.endsWith("/")&&(m=m.slice(0,-1));try{h.length>1&&typeof l.getIn(h.slice(0,-1))=="boolean"&&l.deleteIn(h.slice(0,-1)),l.setIn([...h],m)}catch(g){pr.error(g)}}}u&&ML(l,u),kR(l);let d=l.getIn(["rootPath"]),_=Bn.join(d,un.HDB_CONFIG_FILE);n===!0&&zX(c,d),Yr.writeFileSync(_,String(l)),s&&(zt=kl(l.toJSON())),pr.trace(`Config parameter: ${e} updated with value: ${t}`)}a(vL,"updateConfigValue");function zX(e,t){try{let r=Bn.join(t,"backup",`${new Date(Date.now()).toISOString().replaceAll(":","-")}-${un.HDB_CONFIG_FILE}.bak`);Yr.copySync(e,r),pr.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){pr.error(GX),pr.error(r)}}a(zX,"backupConfigFile");var QX=["databases"];function kl(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}),jh=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])&&!QX.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;!vn[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(kl,"flattenConfig");function HR(e,t){if(e===vn.CLUSTERING_NODENAME||e===vn.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(UX(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(HR,"castConfigValue");function JX(){let e=hr.getPropsFilePath(),t=dc(e);return Qo(t).toJSON()}a(JX,"getConfiguration");async function XX(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return vL(void 0,void 0,s,!0),VX}catch(i){throw typeof i=="string"||i instanceof String?BX(i,i,xX.BAD_REQUEST,void 0,void 0,!0):i}}a(XX,"setConfiguration");function FR(){let e=hr.getPropsFilePath();try{Yr.accessSync(e,Yr.constants.F_OK|Yr.constants.R_OK)}catch(n){if(!hr.noBootFile())throw pr.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=dc(e);return Qo(t).toJSON()}a(FR,"readConfigFile");function Qo(e){return PL.parseDocument(Yr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Qo,"parseYamlDoc");function ZX(){let e=FR(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=hr.isEmptyOrZeroLength(t)?[]:t;let r=wL(t);if(r)throw Hl.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=hr.isEmptyOrZeroLength(n)?[]:n;let s=wL(n);if(s)throw Hl.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 Hl.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(ZX,"getClusteringRoutes");function BL(e){let t=DL(e);zt={};for(let r in qs){let n=t.get(r.toUpperCase());if(hr.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=qs[r].toLowerCase();s===vn.LOGGING_ROOT?zt[s]=Bn.dirname(n):zt[s]=n}return zt}a(BL,"initOldConfig");function eZ(e){let t=FR();return vX.get(t,e.replaceAll("_","."))}a(eZ,"getConfigFromFile");async function tZ(e,t){let r=Qo(dc());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await Yr.writeFile(dc(),String(r))}a(tZ,"addConfig");function rZ(e){let t=dc(hr.getPropsFilePath()),r=Qo(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=Bn.join(n,un.HDB_CONFIG_FILE);Yr.writeFileSync(s,String(r))}a(rZ,"deleteConfigFromFile");function nZ(){return jh||(zh(),jh)}a(nZ,"getConfigObj");function sZ(){return zt||zh(),zt}a(sZ,"getFlatConfigObj")});var kL=O((Qye,HL)=>{"use strict";var Qh=L(),Jh=class{static{a(this,"BaseLicense")}constructor(t=0,r=Qh.RAM_ALLOCATION_ENUM.DEFAULT,n=Qh.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},GR=class extends Jh{static{a(this,"ExtendedLicense")}constructor(t=0,r=Qh.RAM_ALLOCATION_ENUM.DEFAULT,n=Qh.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};HL.exports={BaseLicense:Jh,ExtendedLicense:GR}});var _c=O((Xye,YL)=>{"use strict";var Gl=require("fs-extra"),GL=Kh(),qL=require("crypto"),iZ=require("moment"),oZ=require("uuid").v4,Wr=K(),$R=require("path"),aZ=te(),Jo=L(),{totalmem:FL}=require("os"),cZ=kL().ExtendedLicense,Fl="invalid license key format",lZ="061183",uZ="mofi25",dZ="aes-256-cbc",_Z=16,fZ=32,$L=ne(),{resolvePath:VL}=Ct();$L.initSync();var qR;YL.exports={validateLicense:KL,generateFingerPrint:hZ,licenseSearch:YR,getLicense:SZ,checkMemoryLimit:TZ};function VR(){return $R.join($L.getHdbBasePath(),Jo.LICENSE_KEY_DIR_NAME,Jo.LICENSE_FILE_NAME)}a(VR,"getLicenseDirPath");function EZ(){let e=VR();return VL($R.join(e,Jo.LICENSE_FILE_NAME))}a(EZ,"getLicenseFilePath");function KR(){let e=VR();return VL($R.join(e,Jo.REG_KEY_FILE_NAME))}a(KR,"getFingerPrintFilePath");async function hZ(){let e=KR();try{return await Gl.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await pZ();throw Wr.error(`Error writing fingerprint file to ${e}`),Wr.error(t),new Error("There was an error generating the fingerprint")}}a(hZ,"generateFingerPrint");async function pZ(){let e=oZ(),t=GL.hash(e),r=KR();try{await Gl.mkdirp(VR()),await Gl.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw Wr.error(`Error writing fingerprint file to ${r}`),Wr.error(n),new Error("There was an error generating the fingerprint")}return t}a(pZ,"writeFingerprint");function KL(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:Jo.RAM_ALLOCATION_ENUM.DEFAULT,version:Jo.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Wr.error("empty license key passed to validate."),r;let n=KR(),s=!1;try{s=Gl.statSync(n)}catch(i){Wr.error(i)}if(s){let i;try{i=Gl.readFileSync(n,"utf8")}catch{Wr.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(uZ),c=o[1];c=Buffer.concat([Buffer.from(c)],_Z);let l=Buffer.concat([Buffer.from(i)],fZ),u=qL.createDecipheriv(dZ,l,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let d=null;try{d=u.update(o[0],"hex","utf8"),d.trim(),d+=u.final("utf8")}catch{let f=mZ(o[0],i);if(f)d=f;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Fl),Wr.error(Fl),new Error(Fl)}let _;if(isNaN(d))try{_=JSON.parse(d),r.version=_.version,r.exp_date=_.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),_.ram_allocation&&(r.ram_allocation=_.ram_allocation)}catch{throw console.error(Fl),Wr.error(Fl),new Error(Fl)}else r.exp_date=d;r.exp_date<iZ().valueOf()&&(r.valid_date=!1),GL.validate(o[1],`${lZ}${i}${t}`)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||Wr.error("Invalid licence"),r}a(KL,"validateLicense");function mZ(e,t){try{let r=qL.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{Wr.warn("Check old license failed")}}a(mZ,"checkOldLicense");function YR(){let e=new cZ,t=[];try{t=Gl.readFileSync(EZ(),"utf-8").split(Jo.NEW_LINE)}catch(r){r.code==="ENOENT"?Wr.debug("no license file found"):Wr.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(aZ.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=KL(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){Wr.error("There was an error parsing the license string."),Wr.error(s),e.ram_allocation=Jo.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return qR=e,e}a(YR,"licenseSearch");async function SZ(){return qR||await YR(),qR}a(SZ,"getLicense");function TZ(){let e=YR().ram_allocation,t=process.constrainedMemory?.()||FL();if(t=Math.round(Math.min(t,FL())/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(TZ,"checkMemoryLimit")});var Hn=O((nbe,cM)=>{"use strict";var QL="username is required",JL="nothing to update, must supply active, role or password to update",XL="password cannot be an empty string",ZL="If role is specified, it cannot be empty.",eM="active must be true or false";cM.exports={addUser:wZ,alterUser:CZ,dropUser:DZ,getSuperUser:vZ,userInfo:LZ,listUsers:Zh,listUsersExternal:MZ,setUsersToGlobal:$l,findAndValidateUser:oM,getClusterUser:BZ,USERNAME_REQUIRED:QL,ALTERUSER_NOTHING_TO_UPDATE:JL,EMPTY_PASSWORD:XL,EMPTY_ROLE:ZL,ACTIVE_BOOLEAN:eM};var tM=Vr(),gZ=zo(),zR=Kh(),rM=SL(),nM=$r(),QR=to(),xn=te(),sM=require("validate.js"),Ke=K(),{promisify:RZ}=require("util"),JR=eo(),WL=L(),jL=ft(),AZ=Ct(),ebe=ne(),tbe=_c(),yZ=Xi(),{table:rbe}=(Pe(),oe(ut)),{handleHDBError:Ai,hdb_errors:bZ}=_e(),{HTTP_STATUS_CODES:yi,AUTHENTICATION_ERROR_MSGS:WR,HDB_ERROR_MSGS:ql}=bZ,{UserEventMsg:XR}=$s(),jR=require("lodash"),{server:ZR}=(qr(),oe(Ja)),OZ=K();ZR.getUser=(e,t)=>oM(e,t,t!=null);var iM={username:!0,active:!0,role:!0,password:!0},zL=new Map,Xh=nM.searchByValue,NZ=nM.searchByHash,IZ=RZ(gZ.delete);async function wZ(e){let t=sM.cleanAttributes(e,iM),r=rM.addUserValidation(t);if(r)throw Ai(new Error,r.message,yi.BAD_REQUEST,void 0,void 0,!0);let n={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},s;try{s=await Xh(n),s=s&&Array.from(s)}catch(l){throw Ke.error("There was an error searching for a role in add user"),Ke.error(l),l}if(!s||s.length<1)throw Ai(new Error,ql.ROLE_NAME_NOT_FOUND(t.role),yi.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw Ai(new Error,ql.DUP_ROLES_FOUND(t.role),yi.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=JR.encrypt(t.password)),t.password=zR.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await tM.insert(i)}catch(l){throw Ke.error("There was an error searching for a user."),Ke.error(l),l}Ke.debug(o);try{await $l()}catch(l){throw Ke.error("Got an error setting users to global"),Ke.error(l),l}if(o.skipped_hashes.length===1)throw Ai(new Error,ql.USER_ALREADY_EXISTS(t.username),yi.CONFLICT,void 0,void 0,!0);let c={...t};return c.role=s[0],QR.signalUserChange(new XR(process.pid)),`${c.username} successfully added`}a(wZ,"addUser");async function CZ(e){let t=sM.cleanAttributes(e,iM);if(xn.isEmptyOrZeroLength(t.username))throw new Error(QL);if(xn.isEmptyOrZeroLength(t.password)&&xn.isEmptyOrZeroLength(t.role)&&xn.isEmptyOrZeroLength(t.active))throw new Error(JL);if(!xn.isEmpty(t.password)&&xn.isEmptyOrZeroLength(t.password.trim()))throw new Error(XL);if(!xn.isEmpty(t.active)&&!xn.isBoolean(t.active))throw new Error(eM);let r=PZ(t.username);if(!xn.isEmpty(t.password)&&!xn.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=JR.encrypt(t.password)),t.password=zR.hash(t.password)),t.role==="")throw new Error(ZL);if(t.role){let i={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},o;try{o=Array.from(await Xh(i)||[])}catch(c){throw Ke.error("Got an error searching for a role."),Ke.error(c),c}if(!o||o.length===0){let c=ql.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Ke.error(c),Ai(new Error,c,yi.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=ql.ALTER_USER_DUP_ROLES(t.role);throw Ke.error(c),Ai(new Error,c,yi.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let n={operation:"update",schema:"system",table:"hdb_user",records:[t]},s;try{s=await tM.update(n)}catch(i){throw Ke.error("Error during update."),Ke.error(i),i}try{await $l()}catch(i){throw Ke.error("Got an error setting users to global"),Ke.error(i),i}return QR.signalUserChange(new XR(process.pid)),s}a(CZ,"alterUser");function PZ(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(PZ,"isClusterUser");async function DZ(e){try{let t=rM.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(xn.isEmpty(global.hdb_users.get(e.username)))throw Ai(new Error,ql.USER_NOT_EXIST(e.username),yi.NOT_FOUND,void 0,void 0,!0);let n;try{n=await IZ(r)}catch(s){throw Ke.error("Got an error deleting a user."),Ke.error(s),s}Ke.debug(n);try{await $l()}catch(s){throw Ke.error("Got an error setting users to global."),Ke.error(s),s}return QR.signalUserChange(new XR(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(DZ,"dropUser");async function LZ(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=jR.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await NZ(r)}catch(s){throw Ke.error("Got an error searching for a role."),Ke.error(s),s}t.role=n[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Ke.error(r),r}return t}a(LZ,"userInfo");async function MZ(){let e;try{e=await Zh()}catch(t){throw Ke.error("Got an error listing users."),Ke.error(t),t}try{e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token})}catch{throw new Error("there was an error massaging the user data")}return[...e.values()]}a(MZ,"listUsersExternal");async function Zh(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await Xh(e)}catch(o){throw Ke.error("Got an error searching for roles."),Ke.error(o),o}let r={};for(let o of t)r[o.id]=jR.cloneDeep(o);if(Object.keys(r).length===0)return null;let n={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},s;try{s=await Xh(n)}catch(o){throw Ke.error("Got an error searching for users."),Ke.error(o),o}let i=new Map;for(let o of s)o=jR.cloneDeep(o),o.role=r[o.role],UZ(o.role),i.set(o.username,o);return i}catch(e){throw Ke.error("got an error listing users"),Ke.error(e),xn.errorizeMessage(e)}return null}a(Zh,"listUsers");function UZ(e){try{if(!e){Ke.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(yZ)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Ke.error("Got an error trying to set system permissions."),Ke.error(t)}}a(UZ,"appendSystemTablesToRole");async function $l(){try{let e=await Zh();global.hdb_users=e}catch(e){throw Ke.error(e),e}}a($l,"setUsersToGlobal");async function oM(e,t,r=!0){global.hdb_users||await $l();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw Ai(new Error,WR.GENERIC_AUTH_FAIL,yi.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw Ai(new Error,WR.USER_INACTIVE,yi.UNAUTHORIZED,void 0,void 0,!0);let s={active:n.active,username:n.username};if(n.refresh_token&&(s.refresh_token=n.refresh_token),n.role&&(s.role=n.role),r===!0){if(zL.get(t)===n.password)return s;if(zR.validate(n.password,t))zL.set(t,n.password);else throw Ai(new Error,WR.GENERIC_AUTH_FAIL,yi.UNAUTHORIZED,void 0,void 0,!0)}return s}a(oM,"findAndValidateUser");async function vZ(){global.hdb_users||await $l();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(vZ,"getSuperUser");async function BZ(){let e=await Zh(),t=AZ.getConfigFromFile(WL.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!xn.isEmpty(r)&&r?.role?.role===WL.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=JR.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+jL.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+jL.SERVER_SUFFIX.ADMIN,r}a(BZ,"getClusterUser");var aM=[];ZR.invalidateUser=function(e){for(let t of aM)try{t(e)}catch(r){OZ.error("Error invalidating user",r)}};ZR.onInvalidatedUser=function(e){aM.push(e)}});var g_=O((abe,_M)=>{"use strict";var fc=K(),kn=L(),xZ=kD(),ibe=ls(),obe=gi(),HZ=Hn(),{validateEvent:lM}=$s(),T_=Un(),kZ=require("process"),{resetDatabases:FZ}=(Pe(),oe(ut)),GZ={[kn.ITC_EVENT_TYPES.SCHEMA]:qZ,[kn.ITC_EVENT_TYPES.USER]:dM};async function qZ(e){let t=lM(e);if(t){fc.error(t);return}fc.trace("ITC schemaHandler received schema event:",e),await xZ(e.message),await $Z(e.message)}a(qZ,"schemaHandler");async function $Z(e){try{T_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),T_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),T_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=FZ();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){fc.error(t)}}a($Z,"syncSchemaMetadata");var uM=[];async function dM(e){try{try{T_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),T_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){fc.warn(r)}let t=lM(e);if(t){fc.error(t);return}fc.trace(`ITC userHandler ${kn.HDB_ITC_CLIENT_PREFIX}${kZ.pid} received user event:`,e),await HZ.setUsersToGlobal();for(let r of uM)r()}catch(t){fc.error(t)}}a(dM,"userHandler");dM.addListener=function(e){uM.push(e)};_M.exports=GZ});var $s=O((fbe,EM)=>{"use strict";var lbe=K(),eA=te(),VZ=L(),{ITC_ERRORS:R_}=Pn(),{parentPort:ube,threadId:KZ,isMainThread:YZ,workerData:dbe}=require("worker_threads"),{onMessageFromWorkers:WZ,broadcast:_be,broadcastWithAcknowledgement:jZ}=ot();EM.exports={sendItcEvent:zZ,validateEvent:fM,SchemaEventMsg:QZ,UserEventMsg:JZ};var ep;WZ(async(e,t)=>{ep=ep||g_(),fM(e),ep[e.type]&&await ep[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function zZ(e){return!YZ&&e.message&&(e.message.originator=KZ),jZ(e)}a(zZ,"sendItcEvent");function fM(e){if(typeof e!="object")return R_.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||eA.isEmpty(e.type))return R_.MISSING_TYPE;if(!e.hasOwnProperty("message")||eA.isEmpty(e.message))return R_.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||eA.isEmpty(e.message.originator))return R_.MISSING_ORIGIN;if(VZ.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return R_.INVALID_EVENT(e.type)}a(fM,"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 JZ(e){this.originator=e}a(JZ,"UserEventMsg")});var to=O((pbe,SM)=>{"use strict";var hM=L(),hbe=te(),tp=K(),pM=BD(),Vl,{sendItcEvent:mM}=$s();function XZ(e){try{tp.info("signalSchemaChange called with message:",e),Vl=Vl||g_();let t=new pM(hM.ITC_EVENT_TYPES.SCHEMA,e);return Vl.schema(t),mM(t)}catch(t){tp.error(t)}}a(XZ,"signalSchemaChange");function ZZ(e){try{tp.trace("signalUserChange called with message:",e),Vl=Vl||g_();let t=new pM(hM.ITC_EVENT_TYPES.USER,e);return Vl.user(t),mM(t)}catch(t){tp.error(t)}}a(ZZ,"signalUserChange");SM.exports={signalSchemaChange:XZ,signalUserChange:ZZ}});var rp=O((Sbe,gM)=>{"use strict";var TM=te(),e5=L(),t5=K(),r5=Bh(),n5=vh(),s5=to(),{SchemaEventMsg:i5}=$s(),o5="already exists in";gM.exports=a5;async function a5(e,t,r){if(TM.isEmptyOrZeroLength(r))return r;let n=[];TM.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 c5(e,t.schema,t.name,i)})),s}a(a5,"lmdbCheckForNewAttributes");async function c5(e,t,r,n){let s=new n5(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await l5(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(o5))t5.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(c5,"createNewAttribute");async function l5(e){let t;return t=await r5(e),s5.signalSchemaChange(new i5(process.pid,e5.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(l5,"createAttribute")});var Kl=O((gbe,RM)=>{"use strict";var tA=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}};RM.exports=tA});var yM=O((Abe,AM)=>{"use strict";var u5=Kl(),d5=L().OPERATIONS_ENUM,rA=class extends u5{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(d5.INSERT,r,n,s,i),this.records=t}};AM.exports=rA});var OM=O((bbe,bM)=>{"use strict";var _5=Kl(),f5=L().OPERATIONS_ENUM,nA=class extends _5{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(f5.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};bM.exports=nA});var IM=O((Nbe,NM)=>{"use strict";var E5=Kl(),h5=L().OPERATIONS_ENUM,sA=class extends E5{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(h5.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};NM.exports=sA});var CM=O((wbe,wM)=>{"use strict";var p5=Kl(),m5=L().OPERATIONS_ENUM,iA=class extends p5{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(m5.DELETE,n,s,t,i),this.original_records=r}};wM.exports=iA});var A_=O((Dbe,MM)=>{"use strict";var Pbe=require("path"),PM=mt(),S5=yM(),T5=OM(),g5=IM(),R5=CM(),Yl=xt(),DM=te(),{CONFIG_PARAMS:A5}=L(),LM=ne();LM.initSync();var np=L().OPERATIONS_ENUM,{getTransactionAuditStorePath:y5}=Rt();MM.exports=b5;async function b5(e,t){if(LM.get(A5.LOGGING_AUDITLOG)===!1)return;let r=y5(e.schema,e.table),n=await PM.openEnvironment(r,e.table,!0),s=O5(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){PM.initializeDBIs(n,Yl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Yl.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[Yl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[Yl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),DM.isEmpty(s.user_name)||n.dbis[Yl.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[Yl.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(b5,"writeTransaction");function O5(e,t){let r=DM.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===np.INSERT)return new S5(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===np.UPDATE)return new T5(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===np.UPSERT)return new g5(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===np.DELETE)return new R5(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(O5,"createTransactionObject")});var oA=O((Ube,UM)=>{"use strict";var N5=E_(),Mbe=Jd(),y_=L(),I5=Xd(),w5=nc().insertRecords,C5=mt(),P5=K(),D5=rp(),{getSchemaPath:L5}=Rt(),M5=A_();UM.exports=U5;async function U5(e){try{let{schema_table:t,attributes:r}=N5(e);I5(e,r,t.hash_attribute),e.schema!==y_.SYSTEM_SCHEMA_NAME&&(r.includes(y_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(y_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(y_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(y_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await D5(e.hdb_auth_header,t,r),s=L5(e.schema,e.table),i=await C5.openEnvironment(s,e.table),o=await w5(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await M5(e,o)}catch(c){P5.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(U5,"lmdbCreateRecords")});var xM=O((Bbe,BM)=>{"use strict";var vM=L(),v5=oA(),B5=Jd(),x5=require("fs-extra"),{getSchemaPath:H5}=Rt();BM.exports=k5;async function k5(e){let t=[{name:e.schema,createddate:Date.now()}],r=new B5(vM.SYSTEM_SCHEMA_NAME,vM.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await v5(r),await x5.mkdirp(H5(e.schema))}a(k5,"lmdbCreateSchema")});var kM=O((Hbe,HM)=>{"use strict";var aA=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}};HM.exports=aA});var $M=O(($be,qM)=>{"use strict";var FM=mt(),cA=on(),lA=Pn().LMDB_ERRORS_ENUM,F5=xt(),GM=K(),Fbe=te(),G5=require("lmdb"),q5=kM(),$5=L(),{OVERFLOW_MARKER:Gbe,MAX_SEARCH_KEY_LENGTH:qbe}=F5,V5=$5.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function K5(e,t,r,n){if(cA.validateEnv(e),t===void 0)throw new Error(lA.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(lA.IDS_REQUIRED):new Error(lA.IDS_MUST_BE_ITERABLE);try{let s=FM.listDBIs(e);FM.initializeDBIs(e,t,s);let i=new q5,o,c=[],l=[];for(let E=0,f=r.length;E<f;E++)try{o=r[E];let h=e.dbis[t].get(o);if(!h||n&&h[V5]>n){i.skipped.push(o);continue}let T=e.dbis[t].ifVersion(o,G5.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let m=0;m<s.length;m++){let g=s[m];if(!h.hasOwnProperty(g)||g===t)continue;let S=e.dbis[g],y=h[g];if(y!=null)try{let I=cA.getIndexedValues(y);if(I)for(let U=0,x=I.length;U<x;U++)S.remove(I[U],o)}catch{GM.warn(`cannot delete from attribute: ${g}, ${y}:${o}`)}}});c.push(T),l.push(o),i.original_records.push(h)}catch(h){GM.warn(h),i.skipped.push(o)}let u=[],d=await Promise.all(c);for(let E=0,f=d.length;E<f;E++)d[E]===!0?i.deleted.push(l[E]):(i.skipped.push(l[E]),u.push(E));let _=0;for(let E=0;E<u.length;E++){let f=u[E];i.original_records.splice(f-_,1),_++}return i.txn_time=cA.getNextMonotonicTime(),i}catch(s){throw s}}a(K5,"deleteRecords");qM.exports={deleteRecords:K5}});var b_=O((Kbe,KM)=>{"use strict";var Wl=te(),Y5=$M(),W5=mt(),{getSchemaPath:j5}=Rt(),z5=A_(),Q5=K();KM.exports=J5;async function J5(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(Wl.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Wl.isEmptyOrZeroLength(e.hash_values)&&!Wl.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];Wl.isEmpty(l)||e.hash_values.push(l)}}if(Wl.isEmptyOrZeroLength(e.hash_values))return VM([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Wl.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=j5(e.schema,e.table),i=await W5.openEnvironment(s,e.table),o=await Y5.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await z5(e,o)}catch(c){Q5.error(`unable to write transaction due to ${c.message}`)}return VM(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(J5,"lmdbDeleteRecords");function VM(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(VM,"createDeleteResponse")});var dA=O((jbe,YM)=>{"use strict";var X5=L(),Wbe=on();function uA(e,t){let r=Object.create(null);if(t.length===1&&X5.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(uA,"parseRow");function Z5(e,t,r,n){let s=uA(r,e);n.push(s)}a(Z5,"searchAll");function e6(e,t,r,n){let s=uA(r,e);n[t]=s}a(e6,"searchAllToMap");function t6(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(t6,"iterateDBI");function Ec(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(Ec,"pushResults");function r6(e,t,r,n,s,i){t.toString().endsWith(e)&&Ec(t,r,n,s,i)}a(r6,"endsWith");function n6(e,t,r,n,s,i){t.toString().includes(e)&&Ec(t,r,n,s,i)}a(n6,"contains");function s6(e,t,r,n,s,i){t>e&&Ec(t,r,n,s,i)}a(s6,"greaterThanCompare");function i6(e,t,r,n,s,i){t>=e&&Ec(t,r,n,s,i)}a(i6,"greaterThanEqualCompare");function o6(e,t,r,n,s,i){t<e&&Ec(t,r,n,s,i)}a(o6,"lessThanCompare");function a6(e,t,r,n,s,i){t<=e&&Ec(t,r,n,s,i)}a(a6,"lessThanEqualCompare");YM.exports={parseRow:uA,searchAll:Z5,searchAllToMap:e6,iterateDBI:t6,endsWith:r6,contains:n6,greaterThanCompare:s6,greaterThanEqualCompare:i6,lessThanCompare:o6,lessThanEqualCompare:a6,pushResults:Ec}});var jl=O((Zbe,ZM)=>{"use strict";var Xo=mt(),Qbe=K(),Fn=on(),sp=xt(),Qt=Pn().LMDB_ERRORS_ENUM,Jbe=te(),c6=L(),ip=dA(),{parseRow:l6}=ip,Xbe=require("lmdb"),{OVERFLOW_MARKER:WM,MAX_SEARCH_KEY_LENGTH:u6}=sp;function jM(e,t,r,n=!1,s=void 0,i=void 0){return hc(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(jM,"iterateFullIndex");function O_(e,t,r,n,s,i=!1,o=void 0,c=void 0,l=!1,u=!1){return hc(e,t,r,(d,_,E,f)=>{let S={transaction:d,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 f===r?(S.values=!1,_.getRange(S).map(y=>({value:y}))):_.getRange(S)})}a(O_,"iterateRangeBetween");function hc(e,t,r,n){let s=e.database||e,i=Xo.openDBI(s,r);i[sp.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Xo.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(hc,"setupTransaction");function zM(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(WM)){if(!s)if(r)s=Xo.openDBI(e,r);else{let l=Xo.listDBIs(e);for(let u=0,d=l.length;u<d&&(s=Xo.openDBI(e,l[u]),!s[sp.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(zM,"getOverflowCheck");function d6(e,t,r,n=!1,s=void 0,i=void 0){if(Fn.validateEnv(e),t===void 0)throw new Error(Qt.HASH_ATTRIBUTE_REQUIRED);return hc(e,t,t,(o,c,l)=>(op(r),r=N_(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(u=>l6(u.value,r))))}a(d6,"searchAll");function _6(e,t,r,n=!1,s=void 0,i=void 0){if(Fn.validateEnv(e),t===void 0)throw new Error(Qt.HASH_ATTRIBUTE_REQUIRED);op(r),r=N_(e.database||e,r);let o=new Map;for(let{key:c,value:l}of jM(e,t,t,n,s,i))o.set(c,ip.parseRow(l,r));return o}a(_6,"searchAllToMap");function f6(e,t,r=!1,n=void 0,s=void 0){if(Fn.validateEnv(e),t===void 0)throw new Error(Qt.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=jM(e,void 0,t,r,n,s),c=o.transaction,l=zM(c.database,c,void 0,t);for(let{key:u,value:d}of o){let _=l(u,d);i[_]===void 0&&(i[_]=[]),i[_].push(d)}return i}a(f6,"iterateDBI");function E6(e,t){if(Fn.validateEnv(e),t===void 0)throw new Error(Qt.HASH_ATTRIBUTE_REQUIRED);return Xo.statDBI(e,t).entryCount}a(E6,"countAll");function h6(e,t,r,n,s=!1,i=void 0,o=void 0){return Zo(e,r,n),hc(e,t,r,(c,l,u,d)=>(n=Fn.convertKeyValueToWrite(n),d===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(_=>({key:n,value:_}))))}a(h6,"equals");function p6(e,t,r){return Zo(e,t,r),Xo.openDBI(e,t).getValuesCount(r)}a(p6,"count");function m6(e,t,r,n,s=!1,i=void 0,o=void 0){return Zo(e,r,n),hc(e,null,r,(c,l)=>{n=Fn.convertKeyValueToWrite(n);let u=!0;typeof n=="number"&&(u=!1);let d;if(s===!0){let _;for(let E of l.getKeys({transaction:c,start:n}))if(!E.startsWith(n)){_=E;break}return _!==void 0&&(Number.isInteger(o)?o++:i++),d=l.getRange({transaction:c,start:_,end:void 0,reverse:s,limit:i,offset:o}).map(E=>{let{key:f}=E;if(f!==_){if(f.toString().startsWith(n))return E;if(u===!0)return d.DONE}}),d.filter(E=>E)}else return d=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(_=>{if(_.key.toString().startsWith(n))return _;if(u===!0)return d.DONE}),u?d:d.filter(_=>_)})}a(m6,"startsWith");function S6(e,t,r,n,s=!1,i=void 0,o=void 0){return QM(e,t,r,n,s,i,o,!0)}a(S6,"endsWith");function QM(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return Zo(e,r,n),hc(e,null,r,(l,u,d,_)=>{let E=zM(d,l,_,r);return o=Number.isInteger(o)?o:0,u.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(f=>{let h=f.toString();return h.endsWith(WM)?u.getValues(f,{transaction:l}).map(T=>{let m=E(f,T);if(c?m.endsWith(n):m.includes(n))return{key:m,value:T}}).filter(T=>T):(c?h.endsWith(n):h.includes(n))?u[sp.DBI_DEFINITION_NAME].is_hash_attribute?{key:f,value:f}:u.getValues(f,{transaction:l}).map(T=>({key:f,value:T})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(QM,"contains");function T6(e,t,r,n,s=!1,i=void 0,o=void 0){Zo(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),O_(e,t,r,n,l,s,i,o,!0,!1)}a(T6,"greaterThan");function g6(e,t,r,n,s=!1,i=void 0,o=void 0){Zo(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),O_(e,t,r,n,l,s,i,o,!1,!1)}a(g6,"greaterThanEqual");function R6(e,t,r,n,s=!1,i=void 0,o=void 0){Zo(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),O_(e,t,r,l,n,s,i,o,!1,!0)}a(R6,"lessThan");function A6(e,t,r,n,s=!1,i=void 0,o=void 0){Zo(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),O_(e,t,r,l,n,s,i,o,!1,!1)}a(A6,"lessThanEqual");function y6(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(Fn.validateEnv(e),r===void 0)throw new Error(Qt.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(Qt.START_VALUE_REQUIRED);if(s===void 0)throw new Error(Qt.END_VALUE_REQUIRED);if(n=Fn.convertKeyValueToWrite(n),s=Fn.convertKeyValueToWrite(s),n>s)throw new Error(Qt.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return O_(e,t,r,n,s,i,o,c)}a(y6,"between");function b6(e,t,r,n){Fn.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(Qt.HASH_ATTRIBUTE_REQUIRED);if(op(r),r=N_(s,r),n===void 0)throw new Error(Qt.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=ip.parseRow(c,r)),o}a(b6,"searchByHash");function O6(e,t,r){Fn.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(Qt.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Qt.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(O6,"checkHashExists");function N6(e,t,r,n,s=[]){return XM(e,t,r,n,s),JM(e,t,r,n,s).map(i=>i[1])}a(N6,"batchSearchByHash");function I6(e,t,r,n,s=[]){XM(e,t,r,n,s);let i=new Map;for(let[o,c]of JM(e,t,r,n,s))i.set(o,c);return i}a(I6,"batchSearchByHashToMap");function JM(e,t,r,n,s=[]){return hc(e,t,t,(i,o,c)=>{r=N_(c,r);let l=r.length<3;return n.map(u=>{let d=c.dbis[t].get(u,{transaction:i,lazy:l});if(d)return[u,ip.parseRow(d,r)];s.push(u)}).filter(u=>u)})}a(JM,"batchHashSearch");function XM(e,t,r,n,s){if(Fn.validateEnv(e),t===void 0)throw new Error(Qt.HASH_ATTRIBUTE_REQUIRED);if(op(r),n==null)throw new Error(Qt.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(Qt.IDS_MUST_BE_ITERABLE)}a(XM,"initializeBatchSearchByHash");function op(e){if(!Array.isArray(e))throw e===void 0?new Error(Qt.FETCH_ATTRIBUTES_REQUIRED):new Error(Qt.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(op,"validateFetchAttributes");function Zo(e,t,r){if(Fn.validateEnv(e),t===void 0)throw new Error(Qt.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Qt.SEARCH_VALUE_REQUIRED);if(r?.length>u6)throw new Error(Qt.SEARCH_VALUE_TOO_LARGE)}a(Zo,"validateComparisonFunctions");function N_(e,t){return t.length===1&&c6.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Xo.listDBIs(e)),t}a(N_,"setGetWholeRowAttributes");ZM.exports={searchAll:d6,searchAllToMap:_6,count:p6,countAll:E6,equals:h6,startsWith:m6,endsWith:S6,contains:QM,searchByHash:b6,setGetWholeRowAttributes:N_,batchSearchByHash:N6,batchSearchByHashToMap:I6,checkHashExists:O6,iterateDBI:f6,greaterThan:T6,greaterThanEqual:g6,lessThan:R6,lessThanEqual:A6,between:y6}});var zl=O((tOe,sU)=>{var eU=require("lodash"),tU=_t(),He=require("joi"),w6=te(),{hdb_schema_table:I_,checkValidTable:rU,hdb_table:nU,hdb_database:ap}=Si(),{handleHDBError:C6,hdb_errors:P6}=_e(),{getDatabases:D6}=(Pe(),oe(ut)),{HTTP_STATUS_CODES:L6}=P6,M6=He.object({database:ap,schema:ap,table:nU,search_attribute:I_,search_value:He.any().required(),get_attributes:He.array().min(1).items(He.alternatives(I_,He.object())).optional(),desc:He.bool(),limit:He.number().integer().min(1),offset:He.number().integer().min(0)}),U6=He.object({database:ap,schema:ap,table:nU,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(I_,He.object())).optional(),sort:He.object({attribute:He.alternatives(I_,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(I_,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()});sU.exports=function(e,t){let r=null;switch(t){case"value":r=tU.validateBySchema(e,M6);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(rU("database",e.schema)),i(rU("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=tU.validateBySchema(e,U6);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=w6.checkGlobalSchemaTable(e.schema,e.table);if(s)return C6(new Error,s,L6.NOT_FOUND);let o=D6()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let l=a(d=>{for(let _=0,E=d.conditions.length;_<E;_++){let f=d.conditions[_];f.conditions?l(f):c.push(f.search_attribute)}},"addConditions");t==="conditions"&&l(e);let u=eU.filter(c,d=>d!=="*"&&!d.startsWith?.("$")&&d.attribute!=="*"&&!Array.isArray(d)&&!d.name&&!eU.some(o,_=>_===d||_.attribute===d||_.attribute===d.attribute));if(u&&u.length>0){let d=u.join(", ");return d=d.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${d}'`)}}return r}});var _A=O((nOe,iU)=>{"use strict";var v6=mt(),B6=zl(),{getSchemaPath:x6}=Rt();iU.exports=H6;function H6(e){let t=B6(e,"hashes");if(t)throw t;let r=x6(e.schema,e.table);return v6.openEnvironment(r,e.table)}a(H6,"initialize")});var fA=O((iOe,oU)=>{"use strict";var k6=jl(),F6=_A();oU.exports=G6;async function G6(e){let t=await F6(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return k6.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(G6,"lmdbGetDataByHash")});var Ql=O((aOe,aU)=>{"use strict";var EA=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};aU.exports=EA});var lU=O((uOe,cU)=>{"use strict";var lOe=Ql(),q6=jl(),$6=_A();cU.exports=V6;async function V6(e){let t=await $6(e),r=global.hdb_schema[e.schema][e.table];return q6.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(V6,"lmdbSearchByHash")});var Vs=O((_Oe,uU)=>{"use strict";var hA=class{static{a(this,"SearchObject")}constructor(t,r,n,s,i,o,c,l=!1,u=void 0,d=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=d}};uU.exports=hA});var cp=O((EOe,pU)=>{"use strict";var jr=jl(),K6=mt(),Y6=te(),ke=xt(),pc=L(),W6=Xi(),dU=Pn().LMDB_ERRORS_ENUM,{getSchemaPath:j6}=Rt(),ro=pc.SEARCH_WILDCARDS;async function z6(e,t,r){let n;e.schema===pc.SYSTEM_SCHEMA_NAME?n=W6[e.table]:n=global.hdb_schema[e.schema][e.table];let s=hU(e,n.hash_attribute,r,t);return fU(e,s,n.hash_attribute,r)}a(z6,"prepSearch");async function fU(e,t,r,n){let s=j6(e.schema,e.table),i=await K6.openEnvironment(s,e.table),o=EU(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(Q6(e,r)===!1){let d=e.search_attribute;if(d===r)return n?_U(o,()=>!0):o.map(E=>({[r]:E.key}));let _=a(E=>({[r]:E.value,[d]:E.key}),"toObject");return n?_U(o,_):o.map(_)}let u=e.search_attribute===r?o.map(d=>d.key):o.map(d=>d.value);return n===!0?jr.batchSearchByHashToMap(c,r,e.get_attributes,u):jr.batchSearchByHash(c,r,e.get_attributes,u)}a(fU,"executeSearch");function EU(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=jr.equals(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.CONTAINS:s=jr.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=jr.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=jr.startsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return jr.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return jr.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case ke.SEARCH_TYPES.SEARCH_ALL:return jr.searchAll(e,n,t.get_attributes,o,c,l);case ke.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return jr.searchAllToMap(e,n,t.get_attributes,o,c,l);case ke.SEARCH_TYPES.BETWEEN:s=jr.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=jr.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=jr.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=jr.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=jr.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;default:return Object.create(null)}return s}a(EU,"searchByType");function _U(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(_U,"createMapFromIterable");function Q6(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(Q6,"checkToFetchMore");function hU(e,t,r,n){if(Y6.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),ro.indexOf(s)>-1)return r===!0?ke.SEARCH_TYPES.SEARCH_ALL_TO_MAP:ke.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(ro[0])<0&&s.indexOf(ro[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(ro.indexOf(i)>=0&&ro.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),ke.SEARCH_TYPES.CONTAINS;if(ro.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),ke.SEARCH_TYPES.ENDS_WITH;if(ro.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),ke.SEARCH_TYPES.STARTS_WITH;if(s.includes(ro[0])||s.includes(ro[1]))return ke.SEARCH_TYPES.EQUALS;throw new Error(dU.UNKNOWN_SEARCH_TYPE)}else switch(n){case pc.VALUE_SEARCH_COMPARATORS.BETWEEN:return ke.SEARCH_TYPES.BETWEEN;case pc.VALUE_SEARCH_COMPARATORS.GREATER:return ke.SEARCH_TYPES.GREATER_THAN;case pc.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return ke.SEARCH_TYPES.GREATER_THAN_EQUAL;case pc.VALUE_SEARCH_COMPARATORS.LESS:return ke.SEARCH_TYPES.LESS_THAN;case pc.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return ke.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(dU.UNKNOWN_SEARCH_TYPE)}}a(hU,"createSearchTypeFromSearchObject");pU.exports={executeSearch:fU,createSearchTypeFromSearchObject:hU,prepSearch:z6,searchByType:EU}});var SU=O((mOe,mU)=>{"use strict";var pOe=Vs(),J6=zl(),X6=te(),Z6=L(),e8=cp();mU.exports=t8;function t8(e,t){if(!X6.isEmpty(t)&&Z6.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=J6(e,"value");if(n)throw n;return e8.prepSearch(e,t,!0)}a(t8,"lmdbGetDataByValue")});var w_=O((gOe,TU)=>{"use strict";var TOe=Vs(),r8=zl(),n8=te(),s8=L(),i8=cp();TU.exports=o8;async function o8(e,t){if(!n8.isEmpty(t)&&s8.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=r8(e,"value");if(n)throw n;return i8.prepSearch(e,t,!1)}a(o8,"lmdbSearchByValue")});var RU=O((yOe,gU)=>{"use strict";var AOe=xt(),pA=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}},mA=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},SA=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};gU.exports={SearchByConditionsObject:pA,SearchCondition:mA,SortAttribute:SA}});var NU=O((IOe,OU)=>{"use strict";var OOe=RU().SearchByConditionsObject,a8=Vs(),c8=zl(),TA=jl(),lp=xt(),{Resource:NOe}=(Ks(),oe(gA)),bU=cp(),l8=dA(),u8=require("lodash"),{getSchemaPath:d8}=Rt(),AU=mt(),{handleHDBError:_8,hdb_errors:f8}=_e(),{HTTP_STATUS_CODES:E8}=f8,h8=1e8;OU.exports=p8;async function p8(e){let t=c8(e,"conditions");if(t)throw _8(t,t.message,E8.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=d8(e.schema,e.table),n=await AU.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)AU.openDBI(n,u.search_attribute);let i=u8.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let d=u.search_type;d===lp.SEARCH_TYPES.EQUALS?u.estimated_count=TA.count(n,u.search_attribute,u.search_value):d===lp.SEARCH_TYPES.CONTAINS||d===lp.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=h8}return u.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await yU(o,e,i[0],s.hash_attribute),l;if(!e.operator||e.operator.toLowerCase()==="and"){let u=n.dbis[s.hash_attribute],d=i.slice(1).map(bU.filterByType),_=d.length,E=TA.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(f=>u.get(f,{transaction:o,lazy:!0})),_>0&&(l=l.filter(f=>{for(let h=0;h<_;h++)if(!d[h](f))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(f=>l8.parseRow(f,E))}else{for(let _=1;_<i.length;_++){let E=i[_],f=await yU(o,e,E,s.hash_attribute);c=c.concat(f)}let u=new Set,d=e.offset||0;c=c.filter(_=>u.has(_)?!1:(u.add(_),!0)).slice(d,e.limit&&e.limit+d),l=TA.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(p8,"lmdbSearchByConditions");async function yU(e,t,r,n){let s=new a8(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===lp.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,bU.searchByType(e,s,i,n).map(o=>o.value)}a(yU,"executeConditionSearch")});var Jl=O((COe,IU)=>{"use strict";var m8=L().OPERATIONS_ENUM,RA=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=m8.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};IU.exports=RA});var AA=O((DOe,vU)=>{"use strict";var DU=Vs(),LU=Jl(),MU=w_(),UU=b_(),dn=L(),wU=te(),CU=mt(),{getTransactionAuditStorePath:S8,getSchemaPath:T8}=Rt(),PU=K();vU.exports=g8;async function g8(e){try{if(wU.isEmpty(global.hdb_schema[e.schema])||wU.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await R8(e),await A8(e);let t=T8(e.schema,e.table);try{await CU.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")PU.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=S8(e.schema,e.table);await CU.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")PU.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(g8,"lmdbDropTable");async function R8(e){let t=new DU(dn.SYSTEM_SCHEMA_NAME,dn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,dn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[dn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await MU(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 LU(dn.SYSTEM_SCHEMA_NAME,dn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await UU(s)}a(R8,"deleteAttributesFromSystem");async function A8(e){let t=new DU(dn.SYSTEM_SCHEMA_NAME,dn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,dn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[dn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,dn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,dn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await MU(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 LU(dn.SYSTEM_SCHEMA_NAME,dn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await UU(s)}catch(i){throw i}}a(A8,"dropTableFromSystem")});var xU=O((MOe,BU)=>{"use strict";var y8=require("fs-extra"),b8=Vs(),O8=Ql(),N8=Jl(),I8=AA(),w8=b_(),C8=fA(),P8=w_(),no=L(),{getSchemaPath:D8}=Rt(),{handleHDBError:L8,hdb_errors:M8}=_e(),{HDB_ERROR_MSGS:U8,HTTP_STATUS_CODES:v8}=M8;BU.exports=B8;async function B8(e){let t;try{t=await x8(e.schema);let r=new b8(no.SYSTEM_SCHEMA_NAME,no.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,no.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[no.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await P8(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await I8(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new N8(no.SYSTEM_SCHEMA_NAME,no.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await w8(s);let i=D8(t);await y8.remove(i)}catch(r){throw r}}a(B8,"lmdbDropSchema");async function x8(e){let t=new O8(no.SYSTEM_SCHEMA_NAME,no.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[no.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await C8(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw L8(new Error,U8.SCHEMA_NOT_FOUND(e),v8.NOT_FOUND,void 0,void 0,!0);return n}a(x8,"validateDropSchema")});var Xl=O((vOe,HU)=>{"use strict";var yA=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};HU.exports=yA});var OA=O((HOe,kU)=>{"use strict";var H8=require("fs-extra"),up=mt(),{getTransactionAuditStorePath:k8}=Rt(),bA=xt(),xOe=Xl();kU.exports=F8;async function F8(e){let t;try{let r=k8(e.schema,e.table);await H8.mkdirp(r),t=await up.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{up.createDBI(t,bA.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),up.createDBI(t,bA.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),up.createDBI(t,bA.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(F8,"createTransactionsAuditEnvironment")});var qU=O((GOe,GU)=>{"use strict";var NA=L(),FU=mt(),G8=nc(),{getSystemSchemaPath:q8,getSchemaPath:$8}=Rt(),FOe=Xi(),V8=Bh(),IA=vh(),K8=K(),Y8=OA();GU.exports=W8;async function W8(e,t){let r=$8(t.schema,t.table),n=new IA(t.schema,t.table,NA.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new IA(t.schema,t.table,NA.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new IA(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await FU.createEnvironment(r,t.table),e!==void 0){let o=await FU.openEnvironment(q8(),NA.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await G8.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 wA(n),await wA(s),await wA(i)}await Y8(t)}catch(o){throw o}}a(W8,"lmdbCreateTable");async function wA(e){try{await V8(e)}catch(t){K8.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(wA,"createAttribute")});var VU=O(($Oe,$U)=>{"use strict";var j8=E_(),z8=Xd(),Q8=rp(),C_=L(),J8=nc().updateRecords,X8=mt(),{getSchemaPath:Z8}=Rt(),e9=A_(),t9=K();$U.exports=r9;async function r9(e){try{let{schema_table:t,attributes:r}=j8(e);z8(e,r,t.hash_attribute),e.schema!==C_.SYSTEM_SCHEMA_NAME&&(r.includes(C_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(C_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(C_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(C_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await Q8(e.hdb_auth_header,t,r),s=Z8(e.schema,e.table),i=await X8.openEnvironment(s,e.table),o=await J8(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await e9(e,o)}catch(c){t9.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(r9,"lmdbUpdateRecords")});var YU=O((KOe,KU)=>{"use strict";var n9=L().OPERATIONS_ENUM,CA=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=n9.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};KU.exports=CA});var jU=O((jOe,WU)=>{"use strict";var WOe=YU(),s9=E_(),i9=Xd(),o9=rp(),P_=L(),a9=nc().upsertRecords,c9=mt(),{getSchemaPath:l9}=Rt(),u9=A_(),d9=K(),{handleHDBError:_9,hdb_errors:f9}=_e();WU.exports=E9;async function E9(e){let t;try{t=s9(e)}catch(l){throw _9(l,l.message,f9.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;i9(e,n,r.hash_attribute),e.schema!==P_.SYSTEM_SCHEMA_NAME&&(n.includes(P_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(P_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(P_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(P_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await o9(e.hdb_auth_header,r,n),i=l9(e.schema,e.table),o=await c9.openEnvironment(i,e.table),c=await a9(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await u9(e,c)}catch(l){d9.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(E9,"lmdbUpsertRecords")});var QU=O((QOe,zU)=>{"use strict";var PA=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};zU.exports=PA});var XU=O((XOe,JU)=>{"use strict";var DA=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}};JU.exports=DA});var tv=O((tNe,ev)=>{"use strict";var LA=mt(),{getTransactionAuditStorePath:h9}=Rt(),eNe=QU(),D_=xt(),p9=te(),ZU=XU(),m9=require("util").promisify,S9=m9(setTimeout),T9=1e4,g9=100;ev.exports=R9;async function R9(e){let t=h9(e.schema,e.table),r=await LA.openEnvironment(t,e.table,!0),n=LA.listDBIs(r);LA.initializeDBIs(r,D_.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new ZU;do s=await A9(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 S9(g9);while(s.transactions_deleted>0);return i}a(R9,"deleteAuditLogsBefore");async function A9(e,t){let r=new ZU;try{let n=e.dbis[D_.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[D_.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];p9.isEmpty(c)||(s=e.dbis[D_.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[D_.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>T9)break}return await s,r}catch(n){throw n}}a(A9,"deleteTransactions")});var nv=O((nNe,rv)=>{"use strict";var MA=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};rv.exports=MA});var iv=O((oNe,sv)=>{"use strict";var y9=Vs(),b9=Jl(),iNe=nv(),bi=L(),O9=te(),UA=mt(),N9=Xi(),I9=w_(),w9=b_(),{getSchemaPath:C9}=Rt();sv.exports=P9;async function P9(e,t=!0){let r;e.schema===bi.SYSTEM_SCHEMA_NAME?r=N9[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await L9(e),s=C9(e.schema,e.table),i=await UA.openEnvironment(s,e.table);return t===!0&&await D9(e,i,r.hash_attribute),UA.dropDBI(i,e.attribute),n}a(P9,"lmdbDropAttribute");async function D9(e,t,r){let n=UA.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 d in c)d!==i&&(u[d]=c[d]);s=t.dbis[r].put(o,u,l)}await s}a(D9,"removeAttributeFromAllObjects");async function L9(e){let t=new y9(bi.SYSTEM_SCHEMA_NAME,bi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,bi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[bi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,bi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await I9(t)).filter(o=>o[bi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(O9.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[bi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new b9(bi.SYSTEM_SCHEMA_NAME,bi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return w9(i)}a(L9,"dropAttributeFromSystem")});var dv=O((lNe,uv)=>{"use strict";var vA=mt(),Zl=xt(),cNe=on(),BA=L(),ov=te(),{getTransactionAuditStorePath:M9}=Rt(),U9=jl(),dp=Kl(),v9=K();uv.exports=B9;async function B9(e){let t=M9(e.schema,e.table),r=await vA.openEnvironment(t,e.table,!0),n=vA.listDBIs(r);vA.initializeDBIs(r,Zl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case BA.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return av(r,e.search_values);case BA.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,H9(r,e.search_values,s);case BA.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return x9(r,e.search_values);default:return av(r)}}a(B9,"readAuditLog");function av(e,t=[0,Date.now()]){ov.isEmpty(t[0])&&(t[0]=0),ov.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Zl.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 dp,s))}a(av,"searchTransactionsByTimestamp");function x9(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[Zl.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,lv(e,i))}return Object.fromEntries(r)}a(x9,"searchTransactionsByUsername");function H9(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let u=t[c],d=U9.equals(e,Zl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Zl.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let{value:_}of d){let E=Number(_);n.has(E)?n.get(E).push(u.toString()):n.set(E,[u.toString()])}}let s=Array.from(n.keys()),i=lv(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],u=l.timestamp,d=n.get(u);cv(l,"records",r,d,o),cv(l,"original_records",r,d,o)}return Object.fromEntries(o)}a(H9,"searchTransactionsByHashValues");function cv(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),d=u[u.length-1];if(d.timestamp===i)d[t]=[c];else{let _=new dp(e.operation,e.user_name,i,void 0);_[t]=[c],u.push(_)}}else{let u=new dp(e.operation,e.user_name,i,void 0);u[t]=[c],s.set(l,[u])}}}a(cv,"loopRecords");function lv(e,t){let r=[];try{let n=e.dbis[Zl.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 dp,i);r.push(o)}}catch(i){v9.warn(i)}return r}catch(n){throw n}}a(lv,"batchSearchTransactions")});var fv=O((fNe,_v)=>{"use strict";var{getSchemaPath:dNe}=Rt(),_Ne=mt(),{database:k9}=(Pe(),oe(ut));_v.exports={writeTransaction:F9};async function F9(e,t,r){return k9({database:e,table:t}).transaction(r)}a(F9,"writeTransaction")});var mv=O((hNe,pv)=>{"use strict";var{getSchemaPath:Ev}=Rt(),hv=mt();pv.exports={flush:G9,resetReadTxn:q9};async function G9(e,t){return(await hv.openEnvironment(Ev(e,t),t.toString())).flushed}a(G9,"flush");async function q9(e,t){try{(await hv.openEnvironment(Ev(e,t),t.toString())).resetReadTxn()}catch{}}a(q9,"resetReadTxn")});var Rv=O((mNe,gv)=>{"use strict";var{Readable:$9}=require("stream"),{getDatabases:V9}=(Pe(),oe(ut)),{readSync:K9,openSync:Y9,createReadStream:Sv}=require("fs"),{open:W9}=require("lmdb"),Tv=a_(),j9=c_(),{AUDIT_STORE_OPTIONS:z9}=(Qi(),oe(Av)),{INTERNAL_DBIS_NAME:Q9,AUDIT_STORE_NAME:J9}=xt();gv.exports=Z9;var xA=32768,X9=100;async function Z9(e){let t=e.database||e.schema||"data",r=V9()[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 d=u.dbisDB,_=W9({noSync:!0,maxDbs:j9.MAX_DBS}),E,f=_.openDB(Q9,new Tv(!1)),h=d.useReadTransaction(),T=0,m=a(async function(S,y){y.encoding="binary",y.encoder=void 0;let I=_.openDB(S,y),U=d.openDB(S,y);for(let{key:x,version:X,value:W}of U.getRange({start:null,transaction:h,versions:U.useVersions}))E=I.put(x,W,X),T++%X9===0&&(await new Promise(V=>setTimeout(V,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:S,value:y}of d.getRange({transaction:h,start:!1}))if(s.some(I=>S.startsWith?.(I+"/"))){f.put(S,y);let[,I]=S.split("/"),U=!I,x=new Tv(!U,U);await m(S,x)}e.include_audit&&await m(J9,{...z9}),await E;let g=Sv(_.path);return g.headers=l(),g.on("close",()=>{h.done(),_.close()}),g}let o=r[Object.keys(r)[0]].primaryStore,c=Y9(o.path);return o.transaction(()=>{let u=Buffer.alloc(xA);K9(c,u,0,xA),o.resetReadTxn();let d=o.useReadTransaction();d.renew();let _=Sv(null,{fd:c,start:xA}),E=new $9.from(async function*(){yield u;for await(let f of _)d.openTimer&&(d.openTimer=0),yield f;d.done()}());return E.headers=l(),E});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(Z9,"getBackup")});var Ov=O((TNe,bv)=>{"use strict";var e7=K(),{handleHDBError:t7}=_e(),r7=qP(),n7=Bh(),s7=oA(),i7=xM(),o7=b_(),a7=fA(),c7=lU(),l7=SU(),u7=w_(),d7=NU(),_7=xU(),f7=qU(),E7=VU(),h7=jU(),p7=tv(),m7=AA(),S7=iv(),T7=dv(),g7=fv(),yv=mv(),R7=Rv(),HA=class extends r7{static{a(this,"LMDBBridge")}async searchByConditions(t){return d7(t)}async getDataByHash(t){return await a7(t)}async searchByHash(t){return await c7(t)}async getDataByValue(t,r){return await l7(t,r)}async searchByValue(t){return await u7(t)}async createSchema(t){return await i7(t)}async dropSchema(t){return await _7(t)}async createTable(t,r){return await f7(t,r)}async dropTable(t){return await m7(t)}async createAttribute(t){return await n7(t)}async createRecords(t){return await s7(t)}async updateRecords(t){return await E7(t)}async upsertRecords(t){try{return await h7(t)}catch(r){throw t7(r,null,null,e7.ERR,r)}}async deleteRecords(t){return await o7(t)}async dropAttribute(t){return await S7(t)}async deleteAuditLogsBefore(t){return await p7(t)}async readAuditLog(t){return await T7(t)}writeTransaction(t,r,n){return g7.writeTransaction(t,r,n)}flush(t,r){return yv.flush(t,r)}resetReadTxn(t,r){return yv.resetReadTxn(t,r)}getBackup(t){return R7(t)}};bv.exports=HA});function Mv(e){FA=e}function O7(){b7=setInterval(function(){for(let e of kA)if(e.stale){let t=e[Fe]?.url;Cv.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},y7).unref()}var GA,wv,Cv,Pv,Dv,Lv,Nv,kA,A7,L_,Iv,FA,mc,_p,y7,b7,fp=Ie(()=>{GA=M(on()),wv=M(_e()),Cv=M(K());Ks();Pv=M(ne()),Dv=M(L()),Lv=M(te()),Nv=100,kA=new Set,A7=(0,Lv.convertToMS)(Pv.get(Dv.CONFIG_PARAMS.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3;a(Mv,"replicationConfirmation");mc=class e{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;overloadChecked;open=1;getReadTxn(){if(this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn)return this.readTxn.openTimer&&(this.readTxn.openTimer=0),this.readTxn;if(this.open===1)return this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxnsUsed=1,this.readTxn.openTimer&&(this.readTxn.openTimer=0),kA.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(kA.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(L_&&!this.overloadChecked&&performance.now()-Iv>A7)throw new wv.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,GA.getNextMonotonicTime)()),t.timestamp||(t.timestamp=r);let n=t.retries||0;if(this.validated<this.writes.length)try{let _=this.validated;this.validated=this.writes.length;for(let f=_;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let E;for(let f=_;f<this.validated;f++){let h=this.writes[f];h&&(h.before||h.beforeIntermediate)&&(E=!0)}if(E)return(async()=>{try{for(let f=0;f<2;f++){let h;for(let T=_;T<this.validated;T++){let m=this.writes[T];if(!m)continue;let g=m[f===0?"before":"beforeIntermediate"];if(g){let S=g();h?h.push?h.push(S):h=[h,S]:h=S}}h&&await(h.push?Promise.all(h):h)}}catch(f){throw this.abort(),f}return this.commit(t)})()}catch(_){throw this.abort(),_}n||this.doneReadTxn(),this.open=t?.letItLinger?2:0;let s,i=[],o=0;this.writes=this.writes.filter(_=>_);let c=a(_=>{_.commit(r,_.entry,n)},"doWrite"),l=a(()=>{let _=this.writes[o++];if(_)if(_.key){n>0&&(_.entry=_.store.getEntry(_.key));let E=_.store.ifVersion(_.key,_.entry?.version??null,l);s=s||E}else l();else for(let E of this.writes)c(E)},"nextCondition"),u=this.lmdbDb;if(this.writes.length>0&&(u?.retryRisk&&(u.retryRisk*=.99),this.writes.length+(u?.retryRisk||0)<Nv>>n?l():s=this.writes[0].store.transaction(()=>{for(let _ of this.writes)_.entry=_.store.getEntry(_.key),c(_);return!0})),s)return L_||(L_=s,Iv=performance.now(),L_.then(()=>{L_=null})),s.then(_=>{if(_){if(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.replicatedConfirmation){let E=this.writes[0].store.rootStore.databaseName,f=this.writes[this.writes.length-1];FA&&f&&i.push(FA(E,f.store.getEntry(f.key).localTime,this.replicatedConfirmation))}return this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))}else return u&&(u.retryRisk=(u.retryRisk||0)+Nv/2),t?t.retries=n+1:t={retries:1},this.commit(t)});let d={txnTime:r};if(this.next){let _=this.next?.commit(t);if(_?.then)return _?.then(E=>({txnTime:r,next:E}));d.next=_}return d}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=0,this.writes=[]}},_p=class extends mc{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,GA.getNextMonotonicTime)())}getReadTxn(){}},y7=3e4;a(O7,"startMonitoringTxns");O7()});function Pt(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 mc;e.timestamp&&(n.timestamp=e.timestamp),e.replicatedConfirmation&&(n.replicatedConfirmation=e.replicatedConfirmation),n[Fe]=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 Uv,Sc=Ie(()=>{Uv=M(fi());Ks();fp();a(Pt,"transaction");(0,Uv._assignPackageExport)("transaction",Pt);Pt.commit=function(e){let t=(e[Fe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Pt.abort=function(e){let t=(e[Fe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var qv={};je(qv,{ResourceBridge:()=>VA});function KA({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 Bv(e,t){let r=Oi(e),n=KA(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;Pt(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++],d;try{d=await r.get({id:u,lazy:s,select:n},i),d=d&&hp(d)}catch(_){d={message:_.toString()}}return t?{value:{key:u,value:d}}:{value:d}}else return o(),{done:!0}},return(u){return o(),{value:u,done:!0}},throw(u){return o(),{done:!0}}}}}}function Oi(e){let t=e.database||e.schema||I7,r=dt()[t];if(!r)throw(0,Ys.handleHDBError)(new Error,N7.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function xv(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*Hv(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:d}=o;if(s?.timestamp===u)s.hash_values.push(l),s.records.push(d);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:[d]}}}s&&(yield s)}var kv,Ep,Ys,Fv,Ws,qA,$A,Gv,N7,I7,w7,C7,vv,VA,$v=Ie(()=>{"use strict";kv=M(Ov()),Ep=M(zl()),Ys=M(_e());Pe();Fv=M(E_()),Ws=M(L()),qA=M(to()),$A=M($s()),Gv=M(te());Sc();pp();({HDB_ERROR_MSGS:N7}=Ys.hdb_errors),I7="data",w7=1e4,C7=10,VA=class extends kv.default{static{a(this,"ResourceBridge")}constructor(t){super(t),vv=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,Ep.default)(t,"conditions");if(r)throw(0,Ys.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=Oi(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:KA(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}]}pt({database:r.database??r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration,audit:r.audit})}async createAttribute(t){return await Oi(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Oi(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:d,version:_}=r.primaryStore.getEntry(o);return i(o,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){Oi(t).dropTable()}createSchema(t){return eu({database:t.schema,table:null}),qA.signalSchemaChange(new $A.SchemaEventMsg(process.pid,Ws.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await YA(t.schema),qA.signalSchemaChange(new $A.SchemaEventMsg(process.pid,Ws.OPERATIONS_ENUM.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,vv.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,Fv.default)(t),s,i=dt()[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),Pt(o,async c=>{if(!i.schemaDefined){s=[];for(let d of n)i.attributes.find(E=>E.name==d)||s.push(d);s.length>0&&await i.addAttributes(s.map(d=>({name:d,indexed:!0})))}let l=[],u=[];for(let d of t.records){let _=d[i.primaryKey],E=_!=null&&await i.get(_,o);if(t.requires_existing&&!E||t.requires_no_existing&&E){u.push(d[i.primaryKey]);continue}E&&(E=hp(E));for(let f in d)if(Object.prototype.hasOwnProperty.call(d,f)){let h=d[f];if(typeof h=="function")try{let T=h([[E]]);Array.isArray(T)&&(h=T[0].func_val,d[f]=h)}catch(T){throw T.message+="Trying to set key "+f+" on object"+JSON.stringify(d),T}}if(E)for(let f in E)Object.prototype.hasOwnProperty.call(d,f)||(d[f]=E[f]);await(_==null?i.create(d,o):i.put(d,o)),l.push(d[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:l,new_attributes:s,skipped_hashes:u}})}async deleteRecords(t){let r=dt()[t.schema][t.table],n={user:t.hdb_user};return t.replicateTo&&(n.replicateTo=t.replicateTo),t.replicatedConfirmation&&(n.replicatedConfirmation=t.replicatedConfirmation),Pt(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 xv(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=dt()[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:Ws.VALUE_SEARCH_COMPARATORS.LESS}]}),s=!1,i=[],o=[],c=0,l=[],u=a(async()=>{let d=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:l});i.push(...d.deleted_hashes),o.push(...d.skipped_hashes),await(0,Gv.async_set_timeout)(C7),l=[],s=!0},"chunkDelete");for await(let d of n)l.push(d[r.primaryKey]),c++,c%w7===0&&await u();return l.length>0&&await u(),s?xv(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,Ep.default)(t,"hashes");if(r)throw r;return Bv(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of Bv(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&Ws.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);t.select!==void 0&&(t.get_attributes=t.select),t.attribute!==void 0&&(t.search_attribute=condition.attribute),t.value!==void 0&&(t.search_value=condition.value);let n=(0,Ep.default)(t,"value");if(n)throw n;let s=Oi(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===Ws.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return s.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,sort:t.sort,select:KA(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=Oi(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){Oi({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Oi(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=Oi(t),n={};switch(t.search_type){case Ws.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)n[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.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 Ws.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let s=t.search_values;for await(let i of Hv(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return Hv(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};a(KA,"getSelect");a(Bv,"getRecords");a(Oi,"getTable");a(xv,"createDeleteResponse");a(Hv,"groupRecordsInHistory")});var Un=O((UNe,Vv)=>{"use strict";var{ResourceBridge:P7}=($v(),oe(qv)),D7=ne();D7.initSync();var mp;function L7(){return mp||(mp=new P7,mp)}a(L7,"getBridge");Vv.exports=L7()});var jv=O((BNe,Wv)=>{"use strict";var Kv=require("lodash"),M_=require("mathjs"),M7=require("jsonata"),Yv=te();Wv.exports={distinct_array:a(e=>Array.isArray(e)&&e.length>1?Kv.uniqWith(e,Kv.isEqual):e,"distinct_array"),searchJSON:U7,mad:U_.bind(null,M_.mad),mean:U_.bind(null,M_.mean),mode:U_.bind(null,M_.mode),prod:U_.bind(null,M_.prod),median:U_.bind(null,M_.median)};function U_(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(U_,"aggregateFunction");function U7(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(Yv.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),Yv.isEmpty(this.__ala__.res[r])){let n=M7(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(U7,"searchJSON")});var Qv=O((HNe,zv)=>{"use strict";var sr=require("moment"),WA="YYYY-MM-DDTHH:mm:ss.SSSZZ";sr.suppressDeprecationWarnings=!0;zv.exports={current_date:a(()=>sr().utc().format("YYYY-MM-DD"),"current_date"),current_time:a(()=>sr().utc().format("HH:mm:ss.SSS"),"current_time"),extract:a((e,t)=>{switch(t.toLowerCase()){case"year":return sr(e).utc().format("YYYY");case"month":return sr(e).utc().format("MM");case"day":return sr(e).utc().format("DD");case"hour":return sr(e).utc().format("HH");case"minute":return sr(e).utc().format("mm");case"second":return sr(e).utc().format("ss");case"millisecond":return sr(e).utc().format("SSS");default:break}},"extract"),date:a(e=>sr(e).utc().format(WA),"date"),date_format:a((e,t)=>sr(e).utc().format(t),"date_format"),date_add:a((e,t,r)=>sr(e).utc().add(t,r).valueOf(),"date_add"),date_sub:a((e,t,r)=>sr(e).utc().subtract(t,r).valueOf(),"date_sub"),date_diff:a((e,t,r)=>{let n=sr(e).utc(),s=sr(t).utc();return r?n.diff(s,r,!0):n.diff(s)},"date_diff"),now:a(()=>sr().utc().valueOf(),"now"),get_server_time:a(()=>sr().format(WA),"get_server_time"),offset_utc:a((e,t)=>sr(e).utc().utcOffset(t).format(WA),"offset_utc")}});var e0=O((FNe,Zv)=>{"use strict";var v7=require("@turf/area"),B7=require("@turf/length"),x7=require("@turf/circle"),H7=require("@turf/difference"),k7=require("@turf/distance"),F7=require("@turf/boolean-contains"),G7=require("@turf/boolean-equal"),q7=require("@turf/boolean-disjoint"),$7=require("@turf/helpers"),Jv=L(),$e=te(),so=K();Zv.exports={geoArea:V7,geoLength:K7,geoCircle:Y7,geoDifference:W7,geoDistance:Xv,geoNear:j7,geoContains:z7,geoEqual:Q7,geoCrosses:J7,geoConvert:X7};function V7(e){if($e.isEmpty(e))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e));try{return v7.default(e)}catch(t){return so.trace(t,e),NaN}}a(V7,"geoArea");function K7(e,t){if($e.isEmpty(e))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e));try{return B7.default(e,{units:t||"kilometers"})}catch(r){return so.trace(r,e),NaN}}a(K7,"geoLength");function Y7(e,t,r){if($e.isEmpty(e))return NaN;if($e.isEmpty(t))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e));try{return x7.default(e,t,{units:r||"kilometers"})}catch(n){return so.trace(n,e,t),NaN}}a(Y7,"geoCircle");function W7(e,t){if($e.isEmpty(e))return NaN;if($e.isEmpty(t))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return H7(e,t)}catch(r){return so.trace(r,e,t),NaN}}a(W7,"geoDifference");function Xv(e,t,r){if($e.isEmpty(e))return NaN;if($e.isEmpty(t))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return k7.default(e,t,{units:r||"kilometers"})}catch(n){return so.trace(n,e,t),NaN}}a(Xv,"geoDistance");function j7(e,t,r,n){if($e.isEmpty(e)||$e.isEmpty(t))return!1;if($e.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return Xv(e,t,n)<=r}catch(s){return so.trace(s,e,t),!1}}a(j7,"geoNear");function z7(e,t){if($e.isEmpty(e)||$e.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return F7.default(e,t)}catch(r){return so.trace(r,e,t),!1}}a(z7,"geoContains");function Q7(e,t){if($e.isEmpty(e)||$e.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return G7.default(e,t)}catch(r){return so.trace(r,e,t),!1}}a(Q7,"geoEqual");function J7(e,t){if($e.isEmpty(e)||$e.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return!q7.default(e,t)}catch(r){return so.trace(r,e,t),!1}}a(J7,"geoCrosses");function X7(e,t,r){if($e.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if($e.isEmpty(t))throw new Error("geo_type is required");if($e.isEmpty(Jv.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(Jv.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=$e.autoCastJSON(e)),$7[t](e,r)}a(X7,"geoConvert")});var Sp=O((qNe,t0)=>{var Tc=jv(),Gn=Qv(),Ni=e0();t0.exports=e=>{e.aggr.mad=e.aggr.MAD=Tc.mad,e.aggr.mean=e.aggr.MEAN=Tc.mean,e.aggr.mode=e.aggr.MODE=Tc.mode,e.aggr.prod=e.aggr.PROD=Tc.prod,e.aggr.median=e.aggr.MEDIAN=Tc.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Tc.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Tc.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Gn.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Gn.current_time,e.fn.extract=e.fn.EXTRACT=Gn.extract,e.fn.date=e.fn.DATE=Gn.date,e.fn.date_format=e.fn.DATE_FORMAT=Gn.date_format,e.fn.date_add=e.fn.DATE_ADD=Gn.date_add,e.fn.date_sub=e.fn.DATE_SUB=Gn.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Gn.date_diff,e.fn.now=e.fn.NOW=Gn.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Gn.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Gn.get_server_time,e.fn.getdate=e.fn.GETDATE=Gn.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Gn.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Ni.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Ni.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Ni.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Ni.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Ni.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Ni.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Ni.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Ni.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Ni.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Ni.geoNear}});var i0=O(($Ne,s0)=>{"use strict";var v_=require("lodash"),_n=require("alasql");_n.options.cache=!1;var Z7=Sp(),r0=require("clone"),Tp=require("recursive-iterator"),Ue=K(),et=te(),tu=Un(),eee=L(),{hdb_errors:tee}=_e(),{getDatabases:n0}=(Pe(),oe(ut)),ree="IS NULL",js="There was a problem performing this search. Please check the logs and try again.";Z7(_n);var jA=class{static{a(this,"SQLSearch")}constructor(t,r){if(et.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(),et.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!et.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(js)}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(js)}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(js)}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(js)}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(js)}}_getColumns(){let t=new Tp(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(r0(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=v_.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=n0()[r.databaseid][r.tableid].primaryKey,this.data[n].__merged_data={},this.data[n].__merged_attributes=[],this.data[n].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(et.isEmpty(this.statement.where)){Ue.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Tp(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!et.isEmpty(r)&&r.right)if(et.isNotEmptyAndHasValue(r.right.value)){let n=et.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new _n.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=et.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new _n.yy.LogicValue({value:i}):n instanceof _n.yy.StringValue&&et.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new _n.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 Tp(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(!et.isEmpty(eee.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(et.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(et.isEmptyOrZeroLength(r.left.columnid)||et.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(et.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"=":!et.isEmpty(r.right.value)||!et.isEmpty(r.left.value)?n.add(et.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(et.isEmptyOrZeroLength(this.all_table_attributes)&&et.isEmptyOrZeroLength(this.statement.from)&&et.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&&v_.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(et.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);et.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(et.isEmptyOrZeroLength(this.all_table_attributes)&&!et.isEmptyOrZeroLength(this.columns.columns))return t;if(et.isEmptyOrZeroLength(this.all_table_attributes)&&et.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await _n.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(r0(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(et.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(ree)>-1&&this.tables.forEach(s=>{let i={columnid:n0()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=v_.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),!et.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!et.isEmptyOrZeroLength(this.exact_search_values[u].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[u].values);let d=await tu.getDataByHash(c);for(let _ of c.hash_values)d.get(_)&&!this.data[i].__merged_data[_]&&(this.data[i].__merged_data[_]=[...n[i]],this._setMergedHashAttribute(i,_))}catch(d){throw Ue.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),Ue.error(d),new Error(js)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async d=>{let _={...c};_.search_value=d;let E=await tu.getDataByValue(_);for(let[f,h]of E)this.data[i].__merged_data[f]?this._updateMergedAttribute(i,f,s.attribute,h[s.attribute]):(this.data[i].__merged_data[f]=[...n[i]],this._updateMergedAttribute(i,f,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,f))}))}catch(d){throw Ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),Ue.error(d),new Error(js)}else if(!et.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!et.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let d=this.comparator_search_values[u].comparators;for(let _=0,E=d.length;_<E;_++){let f=d[_];c.search_attribute=f.attribute,c.search_value=f.search_value;let h=await tu.getDataByValue(c,f.operation);if(l)for(let[T]of h)this.data[i].__merged_data[T]||(this.data[i].__merged_data[T]=[...n[i]],this._setMergedHashAttribute(i,T));else for(let[T,m]of h)this.data[i].__merged_data[T]?this._updateMergedAttribute(i,T,s.attribute,m[s.attribute]):(this.data[i].__merged_data[T]=[...n[i]],this._updateMergedAttribute(i,T,s.attribute,m[s.attribute]),this._setMergedHashAttribute(i,T))}}catch(d){throw Ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),Ue.error(d),new Error(js)}else try{c.search_attribute=s.attribute,c.search_value="*";let d=await tu.getDataByValue(c);if(l)for(let[_]of d)this.data[i].__merged_data[_]||(this.data[i].__merged_data[_]=[...n[i]],this._setMergedHashAttribute(i,_));else for(let[_,E]of d)this.data[i].__merged_data[_]?this._updateMergedAttribute(i,_,s.attribute,E[s.attribute]):(this.data[i].__merged_data[_]=[...n[i]],this._updateMergedAttribute(i,_,s.attribute,E[s.attribute]),this._setMergedHashAttribute(i,_))}catch(d){throw Ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),Ue.error(d),new Error(js)}}}_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 _n.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 _n.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new _n.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 _n.yy.FuncValue:new _n.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(f=>{f.joinmode&&f.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(f.table);let h=f.joinmode+" JOIN ? AS "+(f.as?f.as:f.table.tableid);f.on&&(h+=" ON "+f.on.toString()),i.push(h),t.push(Object.values(this.data[`${f.table.databaseid_orig}_${f.table.as?f.table.as_orig:f.table.tableid_orig}`].__merged_data))});let o=[],c={};s.forEach(f=>{let h=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__hash_name,T=f.as?f.as_orig:f.tableid_orig;o.push({key:`'${T}.${h}'`,schema:f.databaseid_orig,table:f.as?f.as_orig:f.tableid_orig,keys:new Set}),r.push(`${f.as?f.as:f.tableid}.\`${h}\` AS "${T}.${h}"`),c[f.as?f.as_orig:f.tableid_orig]=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__merged_attributes});let 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(f=>{f.is_func?r.push(f.initial_select_column.toString()):f.initial_select_column.tableid?r.push(`${f.initial_select_column.tableid}.${f.initial_select_column.columnid} AS ${f.expression.columnid}`):r.push(`${f.initial_select_column.columnid} AS ${f.expression.columnid}`)}));let d="",_="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(d=this.statement.limit?"LIMIT "+this.statement.limit:"",_=this.statement.offset?"OFFSET "+this.statement.offset:"");let E=[];try{let f=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${l} ${u} ${d} ${_}`,h=this._convertColumnsToIndexes(f,s);E=await _n.promise(h,t),t=null}catch(f){throw Ue.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),Ue.error(f),new Error("There was a problem processing the data.")}if(E&&E.length>0){for(let f=0,h=E.length;f<h;f++){let T=E[f];o.forEach(m=>{T[m.key]!==null&&T[m.key]!==void 0&&m.keys.add(T[m.key])})}o.forEach(f=>{let h=Object.keys(this.data[`${f.schema}_${f.table}`].__merged_data),T=v_.difference(h,[...f.keys].map(m=>m.toString()));for(let m=0,g=T.length;m<g;m++){let S=T[m];delete this.data[`${f.schema}_${f.table}`].__merged_data[S]}})}return{existing_attributes:c,joined_length:E?E.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new Tp(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=v_.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(js)}}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 d in i)o.push(i[d][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 tu.getDataByHash(c),u=s.columns.length;for(let d=0,_=o.length;d<_;d++){let E=o[d],f=l.get(E);for(let h=0;h<u;h++){let T=s.columns[h],m=f[T]===void 0?null:f[T];this.data[n].__merged_data[E].push(m)}}}}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 _n.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(tee.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"),d=`${l}.[${c}]`;n=n.replace(u,d)});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 tu.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(js)}}return Object.values(Object.values(this.data)[0].__merged_data)}};s0.exports=jA});var $r=O((KNe,o0)=>{"use strict";var nee=FP();o0.exports={searchByConditions:iee,searchByHash:oee,searchByValue:aee,search:cee};var zA=Un(),{transformReq:QA}=te(),see=i0();async function iee(e){return QA(e),zA.searchByConditions(e)}a(iee,"searchByConditions");async function oee(e){QA(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of zA.searchByHash(e))r&&t.push(r);return t}a(oee,"searchByHash");async function aee(e){QA(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of zA.searchByValue(e))t.push(r);return t}a(aee,"searchByValue");function cee(e,t){try{let r=new nee(e);r.validate(),new see(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(cee,"search")});var gp=O((WNe,a0)=>{"use strict";var lee=Un();a0.exports={writeTransaction:uee};function uee(e,t,r){return lee.writeTransaction(e,t,r)}a(uee,"writeTransaction")});var d0=O((QNe,u0)=>{"use strict";var dee=$r(),_ee=ls(),c0=K(),fee=Vr(),zNe=gp(),Eee=require("clone"),XA=require("alasql"),hee=Sp(),l0=require("util"),pee=l0.promisify(_ee.getTableSchema),mee=l0.promisify(dee.search),See=L(),JA=te();hee(XA);u0.exports={update:gee};var Tee="There was a problem performing this update. Please check the logs and try again.";async function gee({statement:e,hdb_user:t}){let r=await pee(e.table.databaseid,e.table.tableid),n=Ree(e.columns);JA.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=Eee(s),c=JA.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,u=XA.parse(l).statements[0],d=await mee(u),_=Aee(n,d);return yee(o,_,t)}a(gee,"update");function Ree(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=XA.compile(`SELECT ${r.expression.toString()} AS [${See.FUNC_VAL}] FROM ?`)}),t}catch(t){throw c0.error(t),new Error(Tee)}}a(Ree,"createUpdateRecord");function Aee(e,t){return JA.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(Aee,"buildUpdateRecords");async function yee(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await fee.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){c0.error(`Error delete new_attributes from update response: ${i}`)}return s}a(yee,"updateRecords")});var f0=O((eIe,_0)=>{var bee=require("alasql"),Oee=$r(),Nee=K(),Iee=Un(),ey=require("util"),ZA=te(),wee=L(),Cee=ls(),XNe=gp(),ZNe=Vr(),Pee="record",Dee="successfully deleted",Lee=ey.callbackify(Bee),Mee=ey.promisify(Oee.search),Uee=ey.promisify(Cee.getTableSchema);_0.exports={convertDelete:Lee};function vee(e){return`${e.deleted_hashes.length} ${Pee}${e.deleted_hashes.length===1?"":"s"} ${Dee}`}a(vee,"generateReturnMessage");async function Bee({statement:e,hdb_user:t}){let r=await Uee(e.table.databaseid,e.table.tableid);ZA.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=ZA.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=bee.parse(o).statements[0],l={operation:wee.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await Mee(c);let u=await Iee.deleteRecords(l);return ZA.isEmptyOrZeroLength(u.message)&&(u.message=vee(u)),delete u.txn_time,u}catch(u){throw Nee.error(u),u.hdb_code?u.message:u}}a(Bee,"convertDelete")});var S0=O((rIe,m0)=>{"use strict";var xee=gi(),{hdb_errors:E0}=_e(),{getDatabases:h0}=(Pe(),oe(ut));m0.exports={checkSchemaExists:p0,checkSchemaTableExists:Hee,schema_describe:xee};async function p0(e){if(!h0()[e])return E0.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(p0,"checkSchemaExists");async function Hee(e,t){let r=await p0(e);if(r)return r;if(!h0()[e][t])return E0.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Hee,"checkSchemaTableExists")});var ru=O((sIe,kee)=>{kee.exports={name:"harperdb",version:"4.4.21",description:"HarperDB is a distributed database, caching service, streaming broker, and application development platform focused on performance and ease of use.",keywords:["database","nosql","api","distributed","broker","mqtt","real-time","enterprise","Fastify","NATS","HarperDB","Harper","clustering","replication","REST","WebSockets","decentralized","server-sent events","document store"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{"minimum-node":"16.0.0","go-lang":"1.21.7","nats-server":"2.10.11"},exports:{".":"./index.js"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"SEE LICENSE IN LICENSE",scripts:{submodules:"git submodule update --init --recursive","cover:test":"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && nyc --no-clean --reporter=lcovonly npm run test:replication && nyc --no-clean --reporter=lcovonly npm run test:apitests && nyc --no-clean --reporter=lcovonly npm run test:resources && nyc --no-clean --reporter=lcovonly npm run test:logging && nyc --no-clean --reporter=lcovonly npm run test:upgrade && nyc --no-clean --reporter=lcovonly npm run test:nats && nyc --no-clean --reporter=lcovonly npm run test:cfserver && nyc --no-clean --reporter=lcovonly npm run test:hdbserver && nyc --no-clean --reporter=lcovonly npm run test:bin && nyc --no-clean --reporter=lcovonly npm run test:main && nyc --no-clean --reporter=lcovonly npm run test:security && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license",test:"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && npm run test:replication && npm run test:apitests && npm run test:resources && npm run test:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:bin && npm run test:main && npm run test:security && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:resources":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/resources/**/*.js' --config '../unitTests/.mocharc.json'","test:bin":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/bin/**/*.js' --config '../unitTests/.mocharc.json'","test:main":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","test:lmdbbridge":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","test:lmdbutility":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","test:hdbserver":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","test:cfserver":"npm run submodules && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/fastifyRoutes/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","test:nats":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","test:upgrade":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","test:apitests":"pm2 kill && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*-test.mjs' --config '../unitTests/.mocharc.json'","test:logging":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","test:security":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/security/**/*.js' --config '../unitTests/.mocharc.json'","test:replication":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/replication/**/*.js' --config '../unitTests/.mocharc.json'","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test",format:"prettier .","format:fix":"npm run format -- --write",lint:"eslint .","lint:fix":"npm run lint -- --fix"},dependencies:{"@aws-sdk/client-s3":"3.717.0","@aws-sdk/lib-storage":"3.717.0","@endo/static-module-record":"^1.0.4","@fastify/autoload":"5.10.0","@fastify/compress":"~6.5.0","@fastify/cors":"~9.0.1","@fastify/static":"~7.0.4","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"4.1.10","cbor-x":"1.6.0",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2","fast-glob":"3.3.2",fastify:"~4.29.0","fastify-plugin":"~4.5.1","fs-extra":"11.2.0",graphql:"^16.10.0","gunzip-maybe":"1.4.2","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.12.2","json-bigint-fixes":"1.1.0",json2csv:"5.0.7",jsonata:"1.8.7",jsonwebtoken:"9.0.2",lmdb:"3.2.6",lodash:"4.17.21",mathjs:"11.12.0",minimist:"1.2.8",moment:"2.30.1","mqtt-packet":"~9.0.0",msgpackr:"1.11.2",nats:"2.19.0",needle:"3.3.1","node-forge":"^1.3.1","node-stream-zip":"1.15.0","node-unix-socket":"0.2.5","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.5.3",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.16.0",pm2:"5.4.1",prompt:"1.3.0","properties-reader":"2.3.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^1.1.0","serve-static":"2.1.0",ses:"1.1.0","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.24.5","tar-fs":"3.0.6",ulidx:"0.5.0",uuid:"10.0.0","validate.js":"0.13.1",ws:"8.18.0",yaml:"2.7.0"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"20.14.8","@typescript-eslint/eslint-plugin":"^7.18.0","@typescript-eslint/parser":"^7.18.0",axios:"1.7.5",chai:"4.4.1","chai-integer":"0.1.0",esbuild:"^0.24.2",eslint:"^8.57.1","eslint-config-prettier":"^9.1.0","eslint-plugin-sonarjs":"^3.0.1",eventsource:"^2.0.2","graphql-http":"^1.22.3","hook-std":"3.0.0","intercept-stdout":"0.1.2",mkcert:"1.5.1",mocha:"^11.0.1","mocha-teamcity-reporter":"^4.2.0","mock-require":"3.0.3","mock-stdin":"1.0.0",mqtt:"~4.3.8",newman:"6.1.3","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"3.3.3",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0","source-map-support":"^0.5.21",typescript:"^5.7.2",undici:"^6.19.8","why-is-node-still-running":"^1.0.0"},overrides:{alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","segfault-handler":"^1.3.0","utf-8-validate":"^5.0.10"}}});var F_={};je(F_,{addAnalyticsListener:()=>k_,recordAction:()=>mr,recordActionBinary:()=>qn,setAnalyticsEnabled:()=>Fee});function Fee(e){I0=e}function mr(e,t,r,n,s){if(!I0)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=yp.get(i);if(o)if(typeof e=="number"){let c=o.values,l=c.index++;if(l>=c.length){let u=c;o.values=c=new Float32Array(l*2),c.set(u),c.index=l+1}c[l]=e,o.total+=e}else if(typeof e=="boolean")e&&o.total++,o.count++;else if(typeof e=="function")o.count++;else throw new TypeError("Invalid metric value type "+typeof e);else{if(typeof e=="number")o={total:e,values:new Float32Array(4)},o.values.index=1,o.values[0]=e,o.total=e;else if(typeof e=="boolean")o={},o.total=e?1:0,o.count=1;else if(typeof e=="function")o={},o.count=1,o.callback=e;else throw new TypeError("Invalid metric value type "+typeof e);o.description={metric:t,path:r,method:n,type:s},yp.set(i,o)}Rp||Gee()}function qn(e,t,r,n,s){mr(!!e,t,r,n,s)}function k_(e){P0.push(e)}function Gee(){Rp=performance.now(),setTimeout(async()=>{let e=performance.now()-Rp;Rp=0;let t=[],r={time:Date.now(),period:e,threadId:gc.threadId,metrics:t};for(let[s,i]of yp){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,l=0,u=[],d;for(let _ of D0){let E=Math.floor(c*_),f=o[E-1];if(E>l){let h=E-l;if(f===d){let T=u[u.length-1];typeof T=="number"?u[u.length-1]={value:T,count:1+h}:T.count+=h}else u.push(h>1?{value:f,count:h}:f),d=f;l=E}}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 L0()}let n=process.memoryUsage();t.push({metric:"memory",threadId:gc.threadId,byThread:!0,...n});for(let s of P0)s(t);yp=new Map,gc.parentPort?gc.parentPort.postMessage({type:C0,report:r}):v0({report:r})},w0).unref()}async function qee(e,t=6e4){let r=ny(),n=M0(),s=new Promise(T=>{let m=performance.now();setImmediate(()=>{let g=performance.now();g-m>5e3&&(0,B_.warn)("Unusually high event queue latency on the main thread of "+Math.round(g-m)+"ms"),m=performance.now()}),n.primaryStore.prefetch([1],()=>{let g=performance.now();g-m>5e3&&(0,B_.warn)("Unusually high task queue latency on the main thread of "+Math.round(g-m)+"ms"),T(g-m)})}),i;for(let T of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(T.value?.time){i=T.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,l=new Map,u=[],d;for(let{key:T,value:m}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!m)continue;if(o){if(T>o+t)break}else o=T;d=T;let{metrics:g,threadId:S}=m;for(let y of g||[]){let{path:I,method:U,type:x,metric:X,count:W,total:V,distribution:se,threads:Q,...de}=y;W||(W=1);let j=X+(I?"-"+I:"");U!==void 0&&(j+="-"+U),x!==void 0&&(j+="-"+x);let ae=c.get(j);if(ae){if(ae.threads){let Ne=ae.threads[S];if(Ne)ae=Ne;else{ae.threads[S]={...de};continue}}ae.count||(ae.count=1);let Oe=ae.count;for(let Ne in de){let Me=de[Ne];typeof Me=="number"&&(ae[Ne]=(ae[Ne]*Oe+Me*W)/(Oe+W))}ae.count+=W,V>=0&&(ae.total+=V,ae.ratio=ae.total/ae.count)}else ae={period:t,...y},delete ae.distribution,c.set(j,ae),ae.byThread&&(ae.threads=[],ae.threads[S]={...de},u.push(ae));if(se){se=se.map(Ne=>typeof Ne=="number"?{value:Ne,count:1}:Ne);let Oe=l.get(j);Oe?Oe.push(...se):l.set(j,se)}}await L0()}for(let T of u){let{path:m,method:g,type:S,metric:y,count:I,total:U,distribution:x,threads:X,...W}=T;X=X.filter(V=>V);for(let V in W){if(typeof T[V]!="number")continue;let se=0;for(let Q of X){let de=Q[V];typeof de=="number"&&(se+=de)}T[V]=se}T.count=X.length,delete T.threads,delete T.byThread}for(let[T,m]of l){let g=c.get(T);m.sort((Ne,Me)=>Ne.value>Me.value?1:-1);let S=g.count-1,y=[],I=0,U=0,x;for(let Ne of D0){let Me=S*Ne;for(;I<Me;)x=m[U++],I+=x.count,U===1&&I--;let Gr=m[U>1?U-2:0];x||(x=m[0]),y.push(x.value-(x.value-Gr.value)*(I-Me)/x.count)}let[X,W,V,se,Q,de,j,ae,Oe]=y;Object.assign(g,{p1:X,p10:W,p25:V,median:se,p75:Q,p90:de,p95:j,p99:ae,p999:Oe})}let _;for(let[T,m]of c)m.id=(0,Ap.getNextMonotonicTime)(),m.time=d,n.primaryStore.put(m.id,m,{append:!0}).then(g=>{g||n.primaryStore.put(m.id,m)}),_=!0;let E=Date.now(),{idle:f,active:h}=performance.eventLoopUtilization();if(_||h*10>f){let T=(0,Ap.getNextMonotonicTime)(),m={id:T,metric:"main-thread-utilization",idle:f-T0,active:h-g0,taskQueueLatency:await s,time:E,...process.memoryUsage()};n.primaryStore.put(T,m,{append:!0}).then(g=>{g||n.primaryStore.put(T,m)})}T0=f,g0=h}async function R0(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function ny(){return A0||(A0=pt({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function M0(){return y0||(y0=pt({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function Kee(){U0=!0;let e=(0,H_.get)(ry.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await qee(w0,e),await R0(ny(),$ee),await R0(M0(),Vee)},Math.min(e/2,2147483647)).unref()}function v0(e,t){let r=e.report;r.threadId=t?.threadId||gc.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(b0+=n.mean*n.count);r.totalBytesProcessed=b0,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(O0.get(t))}),O0.set(t,t.performance.eventLoopUtilization())),r.id=(0,Ap.getNextMonotonicTime)(),ny().primaryStore.put(r.id,r),U0||Kee(),Yee&&(B0=jee(r))}async function jee(e){if(await B0,!ea){let r=(0,x_.dirname)((0,B_.getLogFilePath)());try{ea=await(0,ty.open)((0,x_.join)(r,"analytics.log"),"r+")}catch{ea=await(0,ty.open)((0,x_.join)(r,"analytics.log"),"w+")}}let t=(await ea.stat()).size;if(t>Wee){let r=Buffer.alloc(t);await ea.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await ea.write(r,{position:0}),await ea.truncate(r.length),t=r.length}await ea.write(JSON.stringify(e)+`
12
12
  `,t)}var gc,N0,B_,x_,ty,Ap,H_,ry,yp,I0,Rp,w0,C0,P0,D0,T0,g0,L0,$ee,Vee,A0,y0,U0,b0,O0,Yee,B0,ea,Wee,Ii=Ie(()=>{gc=require("worker_threads"),N0=M(ot());Pe();B_=M(K()),x_=require("path"),ty=require("fs/promises"),Ap=M(on()),H_=M(ne()),ry=M(L());qr();(0,H_.initSync)();yp=new Map,I0=(0,H_.get)(ry.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(Fee,"setAnalyticsEnabled");a(mr,"recordAction");it.recordAnalytics=mr;a(qn,"recordActionBinary");Rp=0,w0=1e3,C0="analytics-report",P0=[];a(k_,"addAnalyticsListener");D0=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(Gee,"sendAnalytics");a(qee,"aggregation");T0=0,g0=0,L0=a(()=>new Promise(setImmediate),"rest");a(R0,"cleanup");$ee=36e5,Vee=31536e6;a(ny,"getRawAnalyticsTable");a(M0,"getAnalyticsTable");(0,N0.setChildListenerByType)(C0,v0);a(Kee,"startScheduledTasks");b0=0,O0=new Map,Yee=!1;a(v0,"recordAnalytics");Wee=1e6;a(jee,"logAnalytics")});var cy=O((mIe,j0)=>{"use strict";var{decode:zee}=require("msgpackr"),{isMainThread:EIe,parentPort:hIe,threadId:pIe}=require("worker_threads"),Np=kt(),nu=ft(),oy=L(),zr=K(),iy=ne(),Qee=L(),{onMessageByType:Jee}=ot(),F0=eo(),{recordAction:x0,recordActionBinary:Xee}=(Ii(),oe(F_)),{publishToStream:Zee}=Np,{ConsumerEvents:H0}=require("nats"),ete=$r(),{promisify:tte}=require("util"),G0=tte(setTimeout),Ip=1e4,wp,Op,rte,nte,q0,G_=new Map,su=new Map;j0.exports={initialize:$0,ingestConsumer:ay,setSubscription:ste,setIgnoreOrigin:ate,getDatabaseSubscriptions:ote,updateConsumer:V0};async function $0(){Jee(oy.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await V0(n)}),q0=!0,zr.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await Np.getNATSReferences();wp=e,Op=e.info.server_name,rte=t,nte=r}a($0,"initialize");async function V0(e){if(e.status==="start"){let{js:t,jsm:r}=await K0(e.node_domain_name);ay(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=G_.get(e.stream_name+e.node_domain_name);t&&(zr.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),G_.set(e.stream_name+e.node_domain_name,"close")),su.get(e.node_domain_name)==="failed"&&su.set(e.node_domain_name,"close")}}a(V0,"updateConsumer");var Cp=new Map;function ste(e,t,r){let n=Cp.get(e);n||Cp.set(e,n=new Map),n.set(t,r),q0||$0().then(ite)}a(ste,"setSubscription");async function ite(){let e=await ete.searchByValue({database:"system",table:"hdb_nodes",search_attribute:"name",search_value:"*"});for await(let t of e){let r=t.name+nu.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions||[])if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await K0(r),!n))break;let{schema:o,table:c}=i,l=F0.createNatsTableStreamName(o,c);ay(l,n,s,r)}}}a(ite,"accessConsumers");async function K0(e){let t,r,n=1;for(;!r;)try{t=await wp.jetstream({domain:e}),r=await wp.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(su.get(e)==="close")break;su.set(e,"failed"),n%10===1&&zr.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<Ip?n++*100:Ip;await G0(i)}return{js:t,jsm:r}}a(K0,"connectToRemoteJS");function ote(){return Cp}a(ote,"getDatabaseSubscriptions");var Y0;function ate(e){Y0=e}a(ate,"setIgnoreOrigin");var W0=100,k0=new Array(W0),bp=0;async function ay(e,t,r,n){let{connection:s}=await Np.getNATSReferences();wp=s,Op=s.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,Op),zr.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(u){if(su.get(n)==="close")break;o%10===1&&zr.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",u.message),u.code==="404"&&(zr.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await Np.createConsumer(r,e,Op,new Date(Date.now()).toISOString()));let d=o++*100<Ip?o++*100:Ip;await G0(d)}let c=!1,l;for(;!c;){if(G_.get(e+n)==="close"||su.get(n)==="close"){G_.delete(e+n),c=!0;continue}l=await i.consume({max_messages:iy.get(oy.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),G_.set(e+n,l);let u=!1;(async()=>{for await(let d of await l.status())if(d.type===H0.ConsumerDeleted&&(await l.close(),c=!0),d.type===H0.HeartbeatsMissed){let _=d.data;zr.trace(`${_} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),_===100&&(zr.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 d of l)await k0[bp],k0[bp]=cte(d).catch(_=>{zr.error(_)}),++bp>=W0&&(bp=0)}catch(d){d.message==="consumer deleted"?(zr.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):zr.error("Error consuming clustering ingest, restarting consumer",d)}}}a(ay,"ingestConsumer");async function cte(e){let t=zee(e.data);x0(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),zr.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=iy.get(oy.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(nu.MSG_HEADERS.TRANSACTED_NODES)&&r.values(nu.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(nu.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!Y0),Xee(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(nu.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:l,table:u,records:d,hash_values:_,__origin:E,expiresAt:f}=t;zr.trace("processing message:",o,c,u,(d?"records: "+d.map(U=>U?.id):"")+(_?"ids: "+_:""),"with sequence:",e.seq),zr.trace(`messageProcessor nats msg id: ${e.headers.get(nu.MSG_HEADERS.NATS_MSG_ID)}`);let h;d||(d=_);let T=new Promise(U=>h=U),{timestamp:m,user:g,node_name:S}=E||{},y=Cp.get(c)?.get(u);if(!y)throw new Error(`Missing table for replication message: ${u}`);if(o==="define_schema")t.type=o,t.onCommit=h,y.send(t);else if(d.length===1&&!l)y.send({type:sy(o),value:d[0],id:_?.[0],expiresAt:f,timestamp:m,table:u,onCommit:h,user:g,nodeName:S});else{let U=d.map((x,X)=>({type:sy(o),value:x,expiresAt:f,id:_?.[X],table:u}));for(;l;)U.push({type:sy(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;y.send({type:"transaction",writes:U,table:u,timestamp:m,onCommit:h,user:g,nodeName:S})}iy.get(Qee.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&Zee(e.subject.split(".").slice(0,-1).join("."),F0.createNatsTableStreamName(c,u),e.headers,e.data),await T;let I=Date.now()-m;m&&x0(I,"replication-latency",e.subject,o,"ingest")}catch(o){zr.error(o)}e.ack()}a(cte,"messageProcessor");function sy(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(sy,"convertOperation")});var kt=O((bIe,dB)=>{"use strict";var br=ne();br.initSync();var lte=require("fs-extra"),ute=require("semver"),V_=require("path"),{monotonicFactory:dte}=require("ulidx"),Q0=dte(),_te=require("util"),J0=require("child_process"),fte=_te.promisify(J0.exec),Ete=J0.spawn,Pr=ft(),Qe=L(),Pp=te(),zs=K(),Dp=eo(),hte=gp(),q_=Ct(),{broadcast:pte,onMessageByType:mte,getWorkerIndex:Ste}=ot(),{isMainThread:X0}=require("worker_threads"),{Encoder:Tte,decode:_y}=require("msgpackr"),Z0=new Tte,{isEmpty:bc}=Pp,eB=Hn(),TIe=48*36e11;X0&&mte(Qe.ITC_EVENT_TYPES.RESTART,()=>{Qr=void 0,yc=void 0});var{connect:gte,StorageType:Rte,RetentionPolicy:Ate,AckPolicy:fy,DeliverPolicy:Ey,DiscardPolicy:yte,NatsConnection:gIe,JetStreamManager:RIe,JetStreamClient:AIe,StringCodec:yIe,JSONCodec:bte,createInbox:hy,headers:Ote,ErrorCode:z0}=require("nats"),{PACKAGE_ROOT:Nte}=L(),Ite=ru(),{recordAction:wte}=(Ii(),oe(F_)),tB=bte(),Cte="clustering",Pte=Ite.engines[Pr.NATS_SERVER_NAME],Dte=V_.join(Nte,"dependencies"),dy=V_.join(Dte,`${process.platform}-${process.arch}`,Pr.NATS_BINARY_NAME),ly,uy,$_,Rc,Ac;dB.exports={runCommand:rB,checkNATSServerInstalled:Lte,createConnection:py,getConnection:K_,getJetStreamManager:Y_,getJetStream:sB,getNATSReferences:wi,getServerList:Ute,createLocalStream:my,listStreams:iB,deleteLocalStream:vte,getServerConfig:iu,listRemoteStreams:Bte,viewStream:xte,viewStreamIterator:Hte,publishToStream:kte,request:qte,reloadNATS:Sy,reloadNATSHub:$te,reloadNATSLeaf:Vte,extractServerName:Gte,requestErrorHandler:Kte,createLocalTableStream:lB,createTableStreams:jte,purgeTableStream:uB,purgeSchemaTableStreams:zte,getStreamInfo:Qte,updateLocalStreams:Xte,closeConnection:Mte,getJsmServerName:Lp,addNatsMsgHeader:oB,clearClientCache:nB,updateRemoteConsumer:Yte,createConsumer:aB,updateConsumerIterator:Wte};async function rB(e,t=void 0){let{stdout:r,stderr:n}=await fte(e,{cwd:t});if(n)throw new Error(n.replace(`
13
13
  `,""));return r.replace(`
14
14
  `,"")}a(rB,"runCommand");async function Lte(){try{await lte.access(dy)}catch{return!1}let e=await rB(`${dy} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return ute.eq(t,Pte)}a(Lte,"checkNATSServerInstalled");async function py(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await eB.getClusterUser();if(bc(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}zs.trace("create nats connection called");let i=await gte({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:br.get(Qe.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:br.get(Qe.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:br.get(Qe.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),zs.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&zs.error("Error with Nats client connection, connection closed",o),i===Qr&&nB()}),i}a(py,"createConnection");function nB(){Qr=void 0,Rc=void 0,Ac=void 0,yc=void 0}a(nB,"clearClientCache");async function Mte(){Qr&&(await Qr.drain(),Qr=void 0,Rc=void 0,Ac=void 0,yc=void 0)}a(Mte,"closeConnection");var Qr,yc;async function K_(){return yc||(yc=py(br.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),Qr=await yc),Qr||yc}a(K_,"getConnection");async function Y_(){if(Rc)return Rc;bc(Qr)&&await K_();let{domain:e}=iu(Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(bc(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Rc=await Qr.jetstreamManager({domain:e,timeout:6e4}),Rc}a(Y_,"getJetStreamManager");async function sB(){if(Ac)return Ac;bc(Qr)&&await K_();let{domain:e}=iu(Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(bc(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Ac=Qr.jetstream({domain:e,timeout:6e4}),Ac}a(sB,"getJetStream");async function wi(){let e=Qr||await K_(),t=Rc||await Y_(),r=Ac||await sB();return{connection:e,jsm:t,js:r}}a(wi,"getNATSReferences");async function Ute(e){let t=br.get(Qe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await eB.getClusterUser(),s=await py(t,r,n),i=hy(),o=s.subscribe(i),c=[],l,u=(async()=>{for await(let d of o){let _=tB.decode(d.data);_.response_time=Date.now()-l,c.push(_)}})();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 Pp.async_set_timeout(e),await o.drain(),await s.close(),await u,c}a(Ute,"getServerList");async function my(e,t){let{jsm:r}=await wi(),n=br.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=br.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=br.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:Rte.File,retention:Ate.Limits,subjects:t,discard:yte.Old,max_msgs:s,max_bytes:i,max_age:n})}a(my,"createLocalStream");async function iB(){let{jsm:e}=await wi(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(iB,"listStreams");async function vte(e){let{jsm:t}=await wi();await t.streams.delete(e)}a(vte,"deleteLocalStream");async function Bte(e){let{connection:t}=await wi(),r=[],n=hy(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(tB.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(Bte,"listRemoteStreams");async function xte(e,t=void 0,r=void 0){let{jsm:n,js:s}=await wi(),i=Q0(),o={durable_name:i,ack_policy:fy.Explicit};t&&(o.deliver_policy=Ey.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 d of l){let _=_y(d.data),E={nats_timestamp:d.info.timestampNanos,nats_sequence:d.info.streamSequence,entry:_};if(d.headers&&(E.origin=d.headers.get(Pr.MSG_HEADERS.ORIGIN)),u.push(E),d.ack(),d.info.pending===0)break}return await c.delete(),u}a(xte,"viewStream");async function*Hte(e,t=void 0,r=void 0){let{jsm:n,js:s}=await wi(),i=Q0(),o={durable_name:i,ack_policy:fy.Explicit};t&&(o.deliver_policy=Ey.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 d=_y(u.data);d[0]||(d=[d]);for(let _ of d){let E={nats_timestamp:u.info.timestampNanos,nats_sequence:u.info.streamSequence,entry:_};u.headers&&(E.origin=u.headers.get(Pr.MSG_HEADERS.ORIGIN)),yield E}if(u.ack(),u.info.pending===0)break}await c.delete()}a(Hte,"viewStreamIterator");async function kte(e,t,r,n){zs.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=oB(n,r);let{js:s}=await wi(),i=await Lp(),o=`${e}.${i}`,c=n instanceof Uint8Array?n:Z0.encode(n);try{zs.trace(`publishToStream publishing to subject: ${o}`),wte(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 cB(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){zs.trace(`publishToStream creating stream: ${t}`);let d=o.split(".");d[2]="*",await my(t,[o]),await s.publish(o,c,{headers:r})}else throw l}});throw l}}a(kte,"publishToStream");function oB(e,t){t===void 0&&(t=Ote());let r=br.get(Qe.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Pr.MSG_HEADERS.ORIGIN)&&r&&t.append(Pr.MSG_HEADERS.ORIGIN,r),t}a(oB,"addNatsMsgHeader");function iu(e){e=e.toLowerCase();let t=V_.join(br.get(Qe.CONFIG_PARAMS.ROOTPATH),Cte);if(e===Qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return bc(uy)&&(uy={port:q_.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:q_.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_NODENAME)+Pr.SERVER_SUFFIX.HUB,config_file:Pr.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:V_.join(t,Pr.PID_FILES.HUB),hdb_nats_path:t}),uy;if(e===Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return bc(ly)&&(ly={port:q_.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:q_.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_NODENAME)+Pr.SERVER_SUFFIX.LEAF,config_file:Pr.NATS_CONFIG_FILES.LEAF_SERVER,domain:q_.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_NODENAME)+Pr.SERVER_SUFFIX.LEAF,pid_file_path:V_.join(t,Pr.PID_FILES.LEAF),hdb_nats_path:t}),ly;zs.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(iu,"getServerConfig");async function aB(e,t,r,n){try{await e.consumers.add(t,{ack_policy:fy.Explicit,durable_name:r,deliver_policy:Ey.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(aB,"createConsumer");async function Fte(e,t,r){await e.consumers.delete(t,r)}a(Fte,"removeConsumer");function Gte(e){return e.split(".")[1]}a(Gte,"extractServerName");async function qte(e,t,r=6e4,n=hy()){if(!Pp.isObject(t))throw new Error("data param must be an object");let s=Z0.encode(t),{connection:i}=await wi(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return _y(c.data)}a(qte,"request");function Sy(e){return new Promise(async(t,r)=>{let n=Ete(dy,["--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(Sy,"reloadNATS");async function $te(){let{pid_file_path:e}=iu(Qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await Sy(e)}a($te,"reloadNATSHub");async function Vte(){let{pid_file_path:e}=iu(Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await Sy(e)}a(Vte,"reloadNATSLeaf");function Kte(e,t,r){let n;switch(e.code){case z0.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case z0.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(Kte,"requestErrorHandler");async function Yte(e,t){let r=t+Pr.SERVER_SUFFIX.LEAF,{connection:n}=await wi(),{jsm:s}=await ere(r),{schema:i,table:o}=e,c=Dp.createNatsTableStreamName(i,o),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await cB(async()=>{if(e.subscribe===!0)await aB(s,c,n.info.server_name,l);else try{await Fte(s,c,n.info.server_name)}catch(u){zs.trace(u)}})}a(Yte,"updateRemoteConsumer");async function Wte(e,t,r,n){let s=Dp.createNatsTableStreamName(e,t),i=r+Pr.SERVER_SUFFIX.LEAF,o={type:Qe.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!X0&&Ste()<br.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=cy();await c(o)}await pte(o),n==="stop"&&await Pp.async_set_timeout(1e3)}a(Wte,"updateConsumerIterator");function cB(e){return hte.writeTransaction(Qe.SYSTEM_SCHEMA_NAME,Qe.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(cB,"exclusiveLock");async function lB(e,t){let r=Dp.createNatsTableStreamName(e,t),n=await Lp(),s=Jte(e,t,n);await my(r,[s])}a(lB,"createLocalTableStream");async function jte(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await lB(n,s)}}a(jte,"createTableStreams");async function uB(e,t,r=void 0){if(br.get(Qe.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=Dp.createNatsTableStreamName(e,t),{domain:s}=iu(Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await K_()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")zs.warn(n);else throw n}}a(uB,"purgeTableStream");async function zte(e,t){if(br.get(Qe.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await uB(e,t[r])}a(zte,"purgeSchemaTableStreams");async function Qte(e){return(await Y_()).streams.info(e)}a(Qte,"getStreamInfo");function Jte(e,t,r){return`${Pr.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(Jte,"createSubjectName");async function Lp(){if($_)return $_;if($_=(await Y_())?.nc?.info?.server_name,$_===void 0)throw new Error("Unable to get jetstream manager server name");return $_}a(Lp,"getJsmServerName");async function Xte(){let e=await Y_(),t=await Lp(),r=await iB();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=Zte(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 d=u.join(".");zs.trace(`Updating stream subject name from: ${i} to: ${d}`),s.subjects[0]=d,await e.streams.update(s.name,s)}}a(Xte,"updateLocalStreams");function Zte(e){let{config:t}=e,r=!1,n=br.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=br.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=br.get(Qe.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(Zte,"updateStreamLimits");async function ere(e){let t,r;try{t=await Qr.jetstream({domain:e}),r=await Qr.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw zs.error("Unable to connect to:",e),n}return{js:t,jsm:r}}a(ere,"connectToRemoteJS")});var Oc=O(Up=>{var Mp=K();for(let e of["trace","debug","info","warn","error","fatal","notify"])Mp.logsAtLevel(e)&&(Up[e]=Mp[e]);Up.loggerWithTag=e=>Mp.loggerWithTag(e,!0);Up.setLogLevel=Mp.setLogLevel});function Ty(e){let t=e.get(vp),r=t?(0,ou.unpack)(t):null;r||(r={remoteNameToId:{}});let n=at(),s=!1;r.nodeName=at();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:j_(e)??1,nodes:[]})})}i[n]=0,e.putSync(vp,(0,ou.pack)(r))}return r}function W_(e){return Ty(e).remoteNameToId}function fB(e,t,r){let n=Ty(r),s=n.remoteNameToId,i=new Map,o=!1;for(let c in t){let l=t[c],u=s[c];if(u==null){let d=0;for(let _ in s){let E=s[_];E>d&&(d=E)}u=d+1,s[c]=u,o=!0}i.set(l,u)}return o&&r.putSync(vp,(0,ou.pack)(n)),i}function Bp(e,t){let r=Ty(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(vp,(0,ou.pack)(r))}return _B.info?.("The remote node name map",e,n,s),s}var _B,ou,vp,gy=Ie(()=>{_B=M(Oc());us();ou=require("msgpackr"),vp=Symbol.for("remote-ids");a(Ty,"getIdMappingRecord");a(W_,"exportIdMapping");a(fB,"remoteToLocalNodeId");a(Bp,"getIdOfRemoteNode")});var ta,Ry=Ie(()=>{ta=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 pB={};je(pB,{Resources:()=>xp,keyArrayToString:()=>au,resetResources:()=>tre,resources:()=>Ci});function tre(){return Ci=new xp}function au(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var EB,hB,xp,Ci,cu=Ie(()=>{Sc();Ry();EB=M(K()),hB=M(_e()),xp=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 hB.ServerError(`Conflicting paths for ${t}`);EB.default.error(c),i.Resource=new ta(c)}super.set(t,i);for(let[c,l]of this){let u=2;for(;(u=c.indexOf("/",u))>-1;){let d=this.get(c.slice(0,u));d&&(d.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 Pt(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};a(tre,"resetResources");a(au,"keyArrayToString")});function by(e,t,r,n,s){let i=e.primaryStore.env.path,o=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=SB,rre(e.primaryStore,e.auditStore)):(c=mB,e.primaryStore.env.hasSubscriptionCommitListener||(e.primaryStore.env.hasSubscriptionCommitListener=!0,e.primaryStore.on("committed",()=>{TB(mB[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=au(t);let d=new yy(r);d.startTime=n;let _=u.get(t);return _?_.push(d):(u.set(t,_=[d]),_.tables=u,_.key=t),d.subscriptions=_,d}function TB(e){if(!e)return;let t=e.auditStore;t.resetReadTxn(),gB(e.auditStore);let r;for(let{key:n,value:s}of t.getRange({start:e.lastTxnTime,exclusiveStart:!0})){e.lastTxnTime=n;let i=Ht(s),o=e[i.tableId];if(!o)continue;let c=i.recordId,l=au(c),u=0;do{let d=o.get(l);if(d){for(let E of d)if(!(u>0&&!(E.includeDescendants&&!(E.onlyChildren&&u>1)))){if(E.startTime>=n){(0,Ay.info)("omitting",c,E.startTime,n);continue}try{let f;E.supportsTransactions&&E.txnInProgress!==i.version&&(f=!0,E.txnInProgress||(r?r.push(E):r=[E]),E.txnInProgress=i.version),E.listener(c,i,n,f)}catch(f){console.error(f),(0,Ay.info)(f)}}}if(l==null)break;let _=l.lastIndexOf?.("/",l.length-2);_>-1?l=l.slice(0,_):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 rre(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=SB[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{TB(l)}finally{r.threadLocalWrites[0]=l.lastTxnTime,r.unlock("thread-local-writes")}},"acquiredLock");r.attemptLock("thread-local-writes",u)&&u()})}}function gB(e){e.nextTransaction?.resolve();let t;e.nextTransaction=new Promise(r=>{t=r}),e.nextTransaction.resolve=t}function RB(e){return e.nextTransaction||(by({primaryStore:e,auditStore:e},null,null,0,{scope:"full-database"}),gB(e)),e.nextTransaction}var Ay,mB,SB,yy,Oy=Ie(()=>{Ay=M(K());Ll();cu();Qi();mB=Object.create(null),SB=Object.create(null);a(by,"addSubscription");yy=class extends Dn{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(TB,"notifyFromTransactionData");a(rre,"listenToCommits");a(gB,"nextTransaction");a(RB,"whenNextTransaction")});var IB={};je(IB,{commits_awaiting_replication:()=>du,getHDBNodeTable:()=>Sr,iterateRoutes:()=>Q_,shouldReplicateToNode:()=>z_,subscribeToNodeUpdates:()=>_u});function Sr(){return AB||(AB=pt({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 _u(e){Sr().subscribe({}).then(async t=>{for await(let r of t){let n=r?.value?.name;NB.debug?.("adding node",n,"on node",at()," on process",process.pid),server.nodes=server.nodes.filter(s=>s.name!==n),r.type==="put"&&n!==at()&&(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 z_(e,t){return(e.replicates===!0||e.replicates?.sends)&&databases[t]&&Sr().primaryStore.get(at())?.replicates||e.subscriptions?.some(r=>(r.database||r.schema)===t&&r.subscribe)}function nre(){_u(e=>{ra({},(t,r)=>{let n=e.name,s=yB.get(n);if(s||yB.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=new Float64Array(i.getUserSharedBuffer(["replicated",r,n],new ArrayBuffer(8),{callback:a(()=>{let c=o[0],l=o.lastTime;for(let{txnTime:u,onConfirm:d}of du.get(r)||[])u>l&&u<=c&&d();o.lastTime=c},"callback")}));o.lastTime=0,s.set(r,o)}})})}function*Q_(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=lu.default.get(uu.CONFIG_PARAMS.REPLICATION_SECUREPORT)??(!lu.default.get(uu.CONFIG_PARAMS.REPLICATION_PORT)&&lu.default.get(uu.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_SECUREPORT)),i;(i=n.match(/:(\d+)$/)?.[1])?n=n.slice(0,-i[0].length-1):t.port?i=t.port:i=s||lu.default.get(uu.CONFIG_PARAMS.REPLICATION_PORT)||lu.default.get(uu.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT);let o=i?.lastIndexOf?.(":");o>0&&(i=+i.slice(o+1).replace(/[\[\]]/g,"")),r=(s?"wss://":"ws://")+n+":"+i}if(!r){bB.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 bB,OB,lu,uu,NB,AB,yB,du,fu=Ie(()=>{Pe();us();fp();bB=require("worker_threads"),OB=M(_e()),lu=M(ne()),uu=M(L()),NB=M(Oc());server.nodes=[];a(Sr,"getHDBNodeTable");a(_u,"subscribeToNodeUpdates");a(z_,"shouldReplicateToNode");yB=new Map;Mv((e,t,r)=>{if(r>server.nodes.length)throw new OB.ClientError(`Cannot confirm replication to more nodes (${r}) than are in the network (${server.nodes.length})`);du||(du=new Map,nre());let n=du.get(e);return n||(n=[],du.set(e,n)),new Promise(s=>{let i=0;n.push({txnTime:t,onConfirm:a(()=>{++i===r&&s()},"onConfirm")})})});a(nre,"startSubscriptionToReplications");a(Q_,"iterateRoutes")});var LB={};je(LB,{connectedToNode:()=>Nc,disconnectedFromNode:()=>pu,ensureNode:()=>oo,requestClusterStatus:()=>DB,startOnMainThread:()=>Iy});async function Iy(e){let t=0,r=dt();for(let i of Object.getOwnPropertyNames(r)){let o=r[i];for(let c in o){let l=o[c];if(l.auditStore){Hp.set(i,j_(l.auditStore));break}}}Pi.whenThreadsStarted.then(async()=>{let i=[];for await(let o of r.system.hdb_nodes.search([]))i.push(o);for(let o of Q_(e))try{let c=!o.subscriptions;if(c){let u=at();Sr().primaryStore.get(u)===void 0&&await oo(u,{name:u,url:e.url??na(),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)}_u(s)});let n;function s(i,o=i?.name){let c=at()&&o===at()||na()&&i?.url===na();if(c){let _=!!i?.replicates;if(n!==void 0&&n!==_)for(let E of Sr().search([]))E.replicates&&E.name!==o&&s(E,E.name);n=_}if(Et.trace("Setting up node replication for",i),!i){for(let[_,E]of io){let f;for(let[h,{worker:T,nodes:m}]of E){let g=m[0];if(g&&g.name==o){f=!0;for(let[S,{worker:y}]of E)E.delete(S),Et.warn("Node was deleted, unsubscribing from node",o,S,_),y?.postMessage({type:"unsubscribe-from-node",node:o,database:S,url:_});break}}if(f){io.get(_).iterator.remove(),io.delete(_);return}}return}if(c)return;if(!i.url){Et.info(`Node ${i.name} is missing url`);return}let l=io.get(i.url);if(l&&l.iterator.remove(),!(i.replicates===!0||i.replicates?.sends)&&!i.subscriptions?.length&&!l)return;if(Et.info(`Added node ${i.name} at ${i.url} for process ${at()}`),i.replicates&&i.subscriptions&&(i={...i,subscriptions:null}),i.name){for(let[_,E]of Eu)if(i.url===E.url){Eu.delete(_);break}Eu.set(i.name,i)}let u=dt();if(l||(l=new Map,io.set(i.url,l)),l.iterator=ra(e,(_,E,f)=>{f?d(E,!0):d(E,!1)}),i.subscriptions)for(let _ of i.subscriptions){let E=_.database||_.schema;u[E]||(Et.warn(`Database ${E} not found for node ${i.name}, making a subscription anyway`),d(E,!1))}function d(_,E){Et.trace("Setting up replication for database",_,"on node",i.name);let f=l.get(_),h,T=[{replicateByDefault:E,...i}];Hp.has(_)&&(T.push({replicateByDefault:E,name:at(),start_time:Hp.get(_),end_time:Date.now(),replicates:!0}),Hp.delete(_));let m=z_(i,_),g=Pi.workers.filter(S=>S.name==="http");if(f?(h=f.worker,f.nodes=T):m&&(t=t%g.length,h=g[t++],l.set(_,{worker:h,nodes:T,url:i.url}),h?.on("exit",()=>{l.get(_)?.worker===h&&(l.delete(_),d(_,E))})),m)setTimeout(()=>{let S={type:"subscribe-to-node",database:_,nodes:T};h?h.postMessage(S):hu(S)},sre);else{Et.info("Node no longer should be used, unsubscribing from node",i.replicates,!!u[_],Sr().primaryStore.get(at())?.replicates),Sr().primaryStore.get(at())?.replicates||(n=!1);let S={type:"unsubscribe-from-node",database:_,url:i.url,name:i.name};h?h.postMessage(S):Fp(S)}}a(d,"onDatabase")}a(s,"onNodeUpdate"),pu=a(function(i){try{Et.info("Disconnected from node",i.name,i.url,"finished",!!i.finished);let o=Array.from(Eu.keys()),c=o.sort(),l=c.indexOf(i.name||Qs(i.url));if(l===-1){Et.warn("Disconnected node not found in node map",i.name,o);return}let u=io.get(i.url),d=u?.get(i.database);if(!d){Et.warn("Disconnected node not found in replication map",i.database,u);return}if(d.connected=!1,i.finished)return;let _=d.nodes[0];if(!(_.replicates===!0||_.replicates?.sends||_.subscriptions?.length))return;let E=(l+1)%c.length;for(;l!==E;){let f=c[E],h=Eu.get(f);u=io.get(h.url);let T=u?.get(i.database);if(!T){E=(E+1)%c.length;continue}let{worker:m,nodes:g}=T,S=!1;for(let y of d.nodes){if(g.some(I=>I.name===y.name)){Et.info(`Disconnected node is already failing over to ${f} for ${i.database}`);continue}g.push(y),S=!0}if(!S){Et.info(`Disconnected node ${i.name} has no nodes to fail over to ${f}`);return}d.redirectingTo=T,Et.info(`Failing over ${i.database} from ${i.name} to ${f}`),m?m.postMessage({type:"subscribe-to-node",database:i.database,nodes:g}):hu({database:i.database,nodes:g});return}Et.warn("Unable to find any other node to fail over to",i.name,i.url)}catch(o){Et.error("Error failing over node",o)}},"disconnectedFromNode"),Nc=a(function(i){let o=io.get(i.url),c=o?.get(i.database);if(!c){Et.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.catchingUpFrom=i.lastSendTime,c.redirectingTo){let{worker:l,nodes:u}=c.redirectingTo,d=u.find(_=>_.name===i.name);c.redirectingTo=null,d&&(u.splice(u.indexOf(d),1),l?l.postMessage({type:"subscribe-to-node",database:i.database,nodes:u}):hu({database:i.database,nodes:u}))}},"connectedToNode"),(0,Pi.onMessageByType)("disconnected-from-node",pu),(0,Pi.onMessageByType)("connected-to-node",Nc),(0,Pi.onMessageByType)("request-cluster-status",DB)}function DB(e,t){let r=[];for(let[n,s]of Eu)try{let i=io.get(s.url);Et.info("Getting cluster status for",n,s.url,"has dbs",i?.size);let o=[];if(i){for(let[l,{worker:u,connected:d,nodes:_,latency:E,catchingUpFrom:f}]of i)o.push({database:l,connected:d,latency:E,catching_up_from:f?new Date(f).toISOString():"up-to-date",thread_id:u?.threadId,nodes:_.map(h=>h.name)});let c=(0,Ny.cloneDeep)(s);c.database_sockets=o,delete c.ca,delete c.node_name,delete c.__updatedtime__,delete c.__createdtime__,r.push(c)}}catch(i){Et.warn("Error getting cluster status for",s?.url,i)}return t?.postMessage({type:"cluster-status",connections:r}),{connections:r}}async function oo(e,t){let r=Sr();e=e??Qs(t.url),t.name=e;try{if(t.ca){let s=new PB.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){Et.error("Error parsing replication CA info for hdb_nodes table",s.message)}let n=r.primaryStore.get(e);if(Et.debug(`Ensuring node ${e} at ${t.url}, existing record:`,n,"new record:",t),!n)await r.put(t);else{t.replicates&&!wB.default.get(CB.CONFIG_PARAMS.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,Ny.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}Et.info(`Updating node ${e} at ${t.url}`),await r.patch(t)}}var Pi,kp,Et,Ny,wB,CB,PB,sre,io,pu,Nc,Eu,Hp,J_=Ie(()=>{Pe();Pi=M(ot());us();kp=require("worker_threads");fu();Et=M(K()),Ny=require("lodash"),wB=M(ne()),CB=M(L()),PB=require("crypto"),sre=200,io=new Map,Eu=new Map,Hp=new Map;a(Iy,"startOnMainThread");a(DB,"requestClusterStatus");kp.parentPort&&(pu=a(e=>{kp.parentPort.postMessage({type:"disconnected-from-node",...e})},"disconnectedFromNode"),Nc=a(e=>{kp.parentPort.postMessage({type:"connected-to-node",...e})},"connectedToNode"),(0,Pi.onMessageByType)("subscribe-to-node",e=>{hu(e)}),(0,Pi.onMessageByType)("unsubscribe-from-node",e=>{Fp(e)}));a(oo,"ensureNode")});var X_=O((XIe,MB)=>{"use strict";var ire=L().OPERATIONS_ENUM,wy=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=ire.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};MB.exports=wy});var vB=O((ewe,UB)=>{"use strict";var ore={OPERATION:"operation",REFRESH:"refresh"},Cy=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},Py=class{static{a(this,"JWTRSAKeys")}constructor(t,r,n){this.public_key=t,this.private_key=r,this.passphrase=n}};UB.exports={JWTTokens:Cy,TOKEN_TYPE_ENUM:ore,JWTRSAKeys:Py}});var mu=O((rwe,kB)=>{"use strict";var ef=require("jsonwebtoken"),Dy=require("fs-extra"),Ly=te(),ds=L(),{handleHDBError:fn,hdb_errors:are}=_e(),{HTTP_STATUS_CODES:En,AUTHENTICATION_ERROR_MSGS:hn}=are,Z_=K(),BB=Kh(),vy=Hn(),cre=Vr().update,lre=X_(),ure=to(),{UserEventMsg:dre}=$s(),sa=ne();sa.initSync();var My=require("path"),{JWTTokens:_re,JWTRSAKeys:fre,TOKEN_TYPE_ENUM:Gp}=vB(),Ere=sa.get(ds.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?sa.get(ds.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",hre=sa.get(ds.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?sa.get(ds.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",qp="RS256",Uy;kB.exports={createTokens:pre,validateOperationToken:Sre,refreshOperationToken:mre,validateRefreshToken:HB,getJWTRSAKeys:tf};async function pre(e){if(Ly.isEmpty(e)||typeof e!="object")throw fn(new Error,hn.INVALID_AUTH_OBJECT,En.BAD_REQUEST,void 0,void 0,!0);if(Ly.isEmpty(e.username))throw fn(new Error,hn.USERNAME_REQUIRED,En.BAD_REQUEST,void 0,void 0,!0);if(Ly.isEmpty(e.password))throw fn(new Error,hn.PASSWORD_REQUIRED,En.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await vy.findAndValidateUser(e.username,e.password),!t)throw fn(new Error,hn.INVALID_CREDENTIALS,En.UNAUTHORIZED,void 0,void 0,!0)}catch(E){throw Z_.error(E),fn(new Error,hn.INVALID_CREDENTIALS,En.UNAUTHORIZED,void 0,void 0,!0)}let r=await tf(),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 xB(i,r.private_key,r.passphrase),c=await ef.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:hre,algorithm:qp,subject:Gp.REFRESH}),l=BB.hash(c),u=new lre(ds.SYSTEM_SCHEMA_NAME,ds.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:l}]),d,_;try{d=await cre(u)}catch(E){Z_.error(E),_=E}if(_!==void 0||d.skipped_hashes.length>0)throw fn(new Error,hn.REFRESH_TOKEN_SAVE_FAILED,En.INTERNAL_SERVER_ERROR);return ure.signalUserChange(new dre(process.pid)),new _re(o,c)}a(pre,"createTokens");async function xB(e,t,r){return await ef.sign(e,{key:t,passphrase:r},{expiresIn:Ere,algorithm:qp,subject:Gp.OPERATION})}a(xB,"signOperationToken");async function tf(){if(Uy===void 0)try{let e=My.join(sa.getHdbBasePath(),ds.LICENSE_KEY_DIR_NAME,ds.JWT_ENUM.JWT_PASSPHRASE_NAME),t=My.join(sa.getHdbBasePath(),ds.LICENSE_KEY_DIR_NAME,ds.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=My.join(sa.getHdbBasePath(),ds.LICENSE_KEY_DIR_NAME,ds.JWT_ENUM.JWT_PUBLIC_KEY_NAME),n=(await Dy.readFile(e)).toString(),s=(await Dy.readFile(t)).toString(),i=(await Dy.readFile(r)).toString();Uy=new fre(i,s,n)}catch(e){throw Z_.error(e),fn(new Error,hn.NO_ENCRYPTION_KEYS,En.INTERNAL_SERVER_ERROR)}return Uy}a(tf,"getJWTRSAKeys");async function mre(e){if(!e)throw fn(new Error,hn.INVALID_BODY,En.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw fn(new Error,hn.REFRESH_TOKEN_REQUIRED,En.BAD_REQUEST,void 0,void 0,!0);await HB(e.refresh_token);let t=await tf(),r=await ef.decode(e.refresh_token);return{operation_token:await xB({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(mre,"refreshOperationToken");async function Sre(e){try{let t=await tf(),r=await ef.verify(e,t.public_key,{algorithms:qp,subject:Gp.OPERATION});return await vy.findAndValidateUser(r.username,void 0,!1)}catch(t){throw Z_.warn(t),t.name&&t.name==="TokenExpiredError"?fn(new Error,hn.TOKEN_EXPIRED,En.FORBIDDEN):fn(new Error,hn.INVALID_TOKEN,En.UNAUTHORIZED)}}a(Sre,"validateOperationToken");async function HB(e){let t;try{let r=await tf(),n=await ef.verify(e,r.public_key,{algorithms:qp,subject:Gp.REFRESH});t=await vy.findAndValidateUser(n.username,void 0,!1)}catch(r){throw Z_.warn(r),r.name&&r.name==="TokenExpiredError"?fn(new Error,hn.TOKEN_EXPIRED,En.FORBIDDEN):fn(new Error,hn.INVALID_TOKEN,En.UNAUTHORIZED)}if(!BB.validate(t.refresh_token,e))throw fn(new Error,hn.INVALID_TOKEN,En.UNAUTHORIZED);return t}a(HB,"validateRefreshToken")});var Zs=O(ux=>{"use strict";var ir=require("path"),pn=require("fs-extra"),Su=require("node-forge"),YB=require("net"),{generateKeyPair:xy,X509Certificate:ao,createPrivateKey:WB}=require("crypto"),Tre=require("util");xy=Tre.promisify(xy);var bt=Su.pki,Js=require("joi"),{v4:jB}=require("uuid"),{validateBySchema:Gy}=_t(),St=K(),_s=ne(),Es=L(),{CONFIG_PARAMS:Tu}=Es,Xs=UR(),{ClientError:oa}=_e(),wc=require("node:tls"),{relative:zB,join:gre}=require("node:path"),{CERT_PREFERENCE_APP:swe,CERTIFICATE_VALUES:FB}=Xs,Rre=Qa(),Hy=Ct(),GB=parseInt(process.version.slice(1))<20,{table:Are,getDatabases:yre,databases:By}=(Pe(),oe(ut)),{getJWTRSAKeys:qB}=mu();Object.assign(ux,{generateKeys:Vy,updateConfigCert:nx,createCsr:Dre,signCertificate:Lre,setCertTable:gu,loadCertificates:ex,reviewSelfSignedCert:Yy,createTLSSelector:ox,listCertificates:cx,addCertificate:Hre,removeCertificate:Fre,createNatsCerts:vre,generateCertsKeys:Ure,getReplicationCert:nf,getReplicationCertAuth:Pre,renewSelfSigned:Bre,hostnamesFromCert:lx,getKey:Gre});var{urlToNodeName:QB,getThisNodeUrl:bre,getThisNodeName:Vp,clearThisNodeName:Ore}=(us(),oe(la)),{readFileSync:Nre,watchFile:Ire,statSync:JB}=require("node:fs"),iwe=ne(),{getTicketKeys:wre,onMessageFromWorkers:Cre}=ot(),ia=K(),{isMainThread:XB}=require("worker_threads"),{TLSSocket:ZB,createSecureContext:owe}=require("node:tls"),qy=3650,rf=["127.0.0.1","localhost","::1"],$y=[{name:"countryName",value:"USA"},{name:"stateOrProvinceName",value:"Colorado"},{name:"localityName",value:"Denver"},{name:"organizationName",value:"HarperDB, Inc."}];Cre(async e=>{e.type===Es.ITC_EVENT_TYPES.RESTART&&(_s.initSync(!0),await Yy())});var Dr;function ca(){return Dr||(Dr=yre().system.hdb_certificate,Dr||(Dr=Are({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(ca,"getCertTable");async function nf(){let e=ox("operations-api"),t={secureContexts:null,setSecureContext:a(s=>{},"setSecureContext")};await e.initialize(t);let r=t.secureContexts.get(Vp());if(!r)return;let n=new ao(r.options.cert);return r.cert_parsed=n,r.issuer=n.issuer,r}a(nf,"getReplicationCert");async function Pre(){ca();let e=(await nf()).options.cert,r=new ao(e).issuer.match(/CN=(.*)/)?.[1];return Dr.get(r)}a(Pre,"getReplicationCertAuth");var $B,aa=new Map;function ex(){if($B)return;$B=!0;let e=[{configKey:Tu.TLS},{configKey:Tu.OPERATIONSAPI_TLS}];ca();let t=ir.dirname(Hy.getConfigFilePath()),r;for(let{configKey:n}of e){let s=Hy.getConfigFromFile(n);if(s){Array.isArray(s)||(s=[s]);for(let i of s){let o=i.privateKey,c=o&&zB(gre(t,"keys"),o);c&&VB(o,l=>{aa.set(c,l)},"private key");for(let l of[!1,!0]){let u=i[l?"certificateAuthority":"certificate"];if(u&&XB){let d;VB(u,_=>{if(FB.cert===_)return;let E=i.hostname??i.hostnames??i.host??i.hosts;E&&!Array.isArray(E)&&(E=[E]);let f=sx(u),h=new ao(f),T;try{T=Wy(h)}catch(y){St.error("error extracting common name from certificate",y);return}if(T==null){St.error("error extracting common name from certificate");return}if(h.checkIssued(new ao(FB.cert)))return;let m=Dr.primaryStore.get(T),g=JB(u).mtimeMs,S=!m||m.is_self_signed?1:m.file_timestamp??m.__updatedtime__;if(m&&g<=S){g<S&&St.info(`Certificate ${T} at ${u} is older (${new Date(g)}) than the certificate in the database (${S>1?new Date(S):"only self signed certificate available"})`);return}r=Dr.put({name:T,uses:["https",...n.includes("operations")?["operations"]:[]],ciphers:i.ciphers,certificate:f,private_key_name:c,is_authority:l,hostnames:E,file_timestamp:g,details:{issuer:h.issuer.replace(/\n/g," "),subject:h.subject.replace(/\n/g," "),subject_alt_name:h.subjectAltName,serial_number:h.serialNumber,valid_from:h.validFrom,valid_to:h.validTo}})},l?"certificate authority":"certificate")}}}}}return r}a(ex,"loadCertificates");function VB(e,t,r){let n,s=a((i,o)=>{try{let c=i.mtimeMs;c&&c!==n&&(o&&XB&&St.warn(`Reloading ${r}:`,e),n=c,t(sx(e)))}catch(c){St.error(`Error loading ${r}:`,e,c)}},"loadFile");pn.existsSync(e)?s(JB(e)):St.error(`${r} file not found:`,e),Ire(e,{persistent:!1},s)}a(VB,"loadAndWatch");function ky(){let e=bre();if(e==null){let t=rf[0];return St.info("replication url is missing from harperdb-config.yaml, using default host"+t),t}return QB(e)}a(ky,"getHost");function $p(){let e=Vp();if(e==null){let t=rf[0];return St.info("replication url is missing from harperdb-config.yaml, using default host"+t),t}return e}a($p,"getCommonName");async function Dre(){let e=await nf(),t=bt.certificateFromPem(e.options.cert),r=bt.privateKeyFromPem(e.options.key);St.info("Creating CSR with cert named:",e.name);let n=bt.createCertificationRequest();n.publicKey=t.publicKey;let s=[{name:"commonName",value:$p()},...$y];St.info("Creating CSR with subject",s),n.setSubject(s);let i=[{name:"unstructuredName",value:"HarperDB, Inc."},{name:"extensionRequest",extensions:tx()}];return St.info("Creating CSR with attributes",i),n.setAttributes(i),n.sign(r),Su.pki.certificationRequestToPem(n)}a(Dre,"createCsr");function tx(){let e=rf.includes($p())?rf:[...rf,$p()];return e.includes(ky())||e.push(ky()),[{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=>YB.isIP(t)?{type:7,ip:t}:{type:2,value:t})}]}a(tx,"certExtensions");async function Lre(e){let t={},r=ir.join(_s.getHdbBasePath(),Es.LICENSE_KEY_DIR_NAME);if(e.csr){let n,s;ca();for await(let d of Dr.search([]))if(d.is_authority&&!d.details.issuer.includes("HarperDB-Certificate-Authority")){if(aa.has(d.private_key_name)){n=aa.get(d.private_key_name),s=d;break}else if(d.private_key_name&&await pn.exists(ir.join(r,d.private_key_name))){n=pn.readFile(ir.join(r,d.private_key_name)),s=d;break}}if(!n){let d=await Fy();s=d.ca,n=d.private_key}n=bt.privateKeyFromPem(n),t.signingCA=s.certificate;let i=bt.certificateFromPem(s.certificate);St.info("Signing CSR with cert named",s.name);let o=bt.certificationRequestFromPem(e.csr);try{o.verify()}catch(d){return St.error(d),new Error("Error verifying CSR: "+d.message)}let c=Su.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()+qy),St.info("sign cert setting validity:",c.validity),St.info("sign cert setting subject from CSR:",o.subject.attributes),c.setSubject(o.subject.attributes),St.info("sign cert setting issuer:",i.subject.attributes),c.setIssuer(i.subject.attributes);let u=o.getAttribute({name:"extensionRequest"}).extensions;St.info("sign cert adding extensions from CSR:",u),c.setExtensions(u),c.publicKey=o.publicKey,c.sign(n,Su.md.sha256.create()),t.certificate=bt.certificateToPem(c)}else St.info("Sign cert did not receive a CSR from:",e.url,"only the CA will be returned");return t}a(Lre,"signCertificate");async function Mre(e,t){await gu({name:Vp(),uses:["https","wss"],certificate:e,private_key_name:"privateKey.pem",is_authority:!1,is_self_signed:!0}),await gu({name:t.subject.getField("CN").value,uses:["https","wss"],certificate:bt.certificateToPem(t),private_key_name:"privateKey.pem",is_authority:!0,is_self_signed:!0})}a(Mre,"createCertificateTable");async function gu(e){let t=new ao(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},ca(),await Dr.patch(e)}a(gu,"setCertTable");async function Vy(){let e=await xy("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}});return{public_key:bt.publicKeyFromPem(e.publicKey),private_key:bt.privateKeyFromPem(e.privateKey)}}a(Vy,"generateKeys");async function Ky(e,t,r){let n=bt.createCertificate();if(!t){let o=await nf();t=bt.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()+qy);let i=[{name:"commonName",value:$p()},...$y];return n.setSubject(i),n.setIssuer(r.subject.attributes),n.setExtensions(tx()),n.sign(e,Su.md.sha256.create()),bt.certificateToPem(n)}a(Ky,"generateCertificates");async function Fy(){let e=await cx(),t;for(let r of e){if(!r.is_authority)continue;let n=await ax(r.private_key_name);if(r.private_key_name&&n&&new ao(r.certificate).checkPrivateKey(WB(n))){St.trace(`CA named: ${r.name} found with matching private key`),t={ca:r,private_key:n};break}}if(t)return t;St.trace("No CA found with matching private key")}a(Fy,"getCertAuthority");async function rx(e,t,r=!0){let n=bt.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()+qy);let i=[{name:"commonName",value:`HarperDB-Certificate-Authority-${_s.get(Tu.REPLICATION_HOSTNAME)??QB(_s.get(Tu.REPLICATION_URL))??jB().split("-")[0]}`},...$y];n.setSubject(i),n.setIssuer(i),n.setExtensions([{name:"basicConstraints",cA:!0,critical:!0},{name:"keyUsage",keyCertSign:!0,critical:!0}]),n.sign(e,Su.md.sha256.create());let o=ir.join(_s.getHdbBasePath(),Es.LICENSE_KEY_DIR_NAME),c=ir.join(o,Xs.PRIVATEKEY_PEM_NAME);return r&&await pn.writeFile(c,bt.privateKeyToPem(e)),n}a(rx,"generateCertAuthority");async function Ure(){let{private_key:e,public_key:t}=await Vy(),r=await rx(e,t),n=await Ky(e,t,r);await Mre(n,r),nx()}a(Ure,"generateCertsKeys");async function vre(){let e=await Ky(bt.privateKeyFromPem(Xs.CERTIFICATE_VALUES.key),void 0,bt.certificateFromPem(Xs.CERTIFICATE_VALUES.cert)),t=ir.join(_s.getHdbBasePath(),Es.LICENSE_KEY_DIR_NAME),r=ir.join(t,Xs.NATS_CERTIFICATE_PEM_NAME);await pn.exists(r)||await pn.writeFile(r,e);let n=ir.join(t,Xs.NATS_CA_PEM_NAME);await pn.exists(n)||await pn.writeFile(n,Xs.CERTIFICATE_VALUES.cert)}a(vre,"createNatsCerts");async function Bre(){ca();for await(let e of Dr.search([{attribute:"is_self_signed",value:!0}]))await Dr.delete(e.name);await Yy()}a(Bre,"renewSelfSigned");async function Yy(){Ore(),await ex(),ca();let e=await Fy();if(!e){St.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(Tu.TLS_PRIVATEKEY),n=ir.join(_s.getHdbBasePath(),Es.LICENSE_KEY_DIR_NAME),s,i=zB(n,r);try{s=bt.privateKeyFromPem(await pn.readFile(r))}catch(c){St.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 Vy(),await pn.exists(ir.join(n,Xs.PRIVATEKEY_PEM_NAME))&&(i=`privateKey${jB().split("-")[0]}.pem`),await pn.writeFile(ir.join(n,i),bt.privateKeyToPem(s))}let o=await rx(s,bt.setRsaPublicKey(s.n,s.e),!1);await gu({name:o.subject.getField("CN").value,uses:["https"],certificate:bt.certificateToPem(o),private_key_name:i,is_authority:!0,is_self_signed:!0})}if(!await nf()){let r=Vp();St.notify(`A suitable replication certificate was not found, creating new self singed cert named: ${r}`),e=e??await Fy();let n=bt.certificateFromPem(e.ca.certificate),s=n.publicKey,i=await Ky(bt.privateKeyFromPem(e.private_key),s,n);await gu({name:r,uses:["https","operations","wss"],certificate:i,is_authority:!1,private_key_name:e.ca.private_key_name,is_self_signed:!0})}}a(Yy,"reviewSelfSignedCert");function nx(){let e=Rre(Object.keys(Es.CONFIG_PARAM_MAP),!0),t=ir.join(_s.getHdbBasePath(),Es.LICENSE_KEY_DIR_NAME),r=ir.join(t,Xs.PRIVATEKEY_PEM_NAME),n=ir.join(t,Xs.NATS_CERTIFICATE_PEM_NAME),s=ir.join(t,Xs.NATS_CA_PEM_NAME),i=Es.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),Hy.updateConfigValue(void 0,void 0,o,!1,!0)}a(nx,"updateConfigCert");function sx(e){return e.startsWith("-----BEGIN")?e:Nre(e,"utf8")}a(sx,"readPEM");var KB=wc.createSecureContext;wc.createSecureContext=function(e){if(!e.cert||!e.key)return KB(e);let t={...e};delete t.key,delete t.cert;let r=KB(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var ix=wc.Server;wc.Server=function(e,t){return e.ALPNCallback&&(e.ALPNProtocols=null),ix.call(this,e,t)};wc.Server.prototype=ix.prototype;var xre=ZB.prototype._init;ZB.prototype._init=function(e,t){xre.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 Ic=new Map;function ox(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(),Ic.clear();let d=0;for await(let _ of By.system.hdb_certificate.search([])){let E=_.certificate,f=new ao(E);_.is_authority&&(f.asString=E,Ic.set(f.subject,E))}for await(let _ of By.system.hdb_certificate.search([]))try{if(_.is_authority)continue;let E=e==="operations-api",f=_.is_self_signed?1:2;E&&_.uses?.includes?.("operations")&&(f+=1);let h=await ax(_.private_key_name),T=_.certificate,m=new ao(T);if(Ic.has(m.issuer)&&(T+=`
15
15
  `+Ic.get(m.issuer)),!h||!T)throw new Error("Missing private key or certificate for secure server");let g={ciphers:_.ciphers,ticketKeys:wre(),availableCAs:Ic,ca:t&&Array.from(Ic.values()),cert:T,key:h,key_file:_.private_key_name,is_self_signed:_.is_self_signed};o&&(g.sessionIdContext=o.sessionIdContext);let S=wc.createSecureContext(g);S.name=_.name,S.options=g,S.quality=f,S.certificateAuthorities=Array.from(Ic),S.certStart=T.toString().slice(0,100);let y=_.hostnames??lx(m);Array.isArray(y)||(y=[y]);let I;for(let U of y)if(U){U[0]==="*"&&(s=!0,U=U.slice(1)),U===ky()&&(f+=2),YB.isIP(U)&&(I=!0);let x=r.get(U)?.quality??0;f>x&&r.set(U,S)}else ia.error("No hostname found for certificate at",wc.certificate);ia.trace("Adding TLS",S.name,"for",o.ports||"client","cert named",_.name,"hostnames",y,"quality",f,"best quality",d),f>d&&(i.defaultContext=n=S,d=f,o&&(o.defaultContext=S))}catch(E){ia.error("Error applying TLS for",_.name,E)}o?.secureContextsListeners.forEach(_=>_()),c(n)}catch(d){l(d)}}a(u,"updateTLS"),By.system.hdb_certificate.subscribe({listener:a(()=>setTimeout(()=>u(),1500).unref(),"listener"),omitCurrent:!0}),u()})),i;function i(o,c){ia.info("TLS requested for",o||"(no SNI)",this.isReplicationConnection);let l=o;for(;;){let d=r.get(l);if(d)return ia.debug("Found certificate for",o,d.certStart),d.replicationContext&&(this.isReplicationConnection||GB)&&(d=d.replicationContext),c(null,d);if(s&&l){let _=l.indexOf(".",1);_<0?l="":l=l.slice(_)}else break}o?ia.debug("No certificate found to match",o,"using the default certificate"):ia.debug("No SNI, using the default certificate",n?.name);let u=n;u?u.replicationContext&&(this.isReplicationConnection||GB)&&(u=u.replicationContext):ia.info("No default certificate found"),c(null,u)}a(i,"SNICallback")}a(ox,"createTLSSelector");async function ax(e){let t=aa.get(e);return!t&&e?await pn.readFile(ir.join(_s.get(Tu.ROOTPATH),Es.LICENSE_KEY_DIR_NAME,e),"utf8"):t}a(ax,"getPrivateKeyByName");async function cx(){ca();let e=[];for await(let t of Dr.search([]))e.push(t);return e}a(cx,"listCertificates");async function Hre(e){let t=Gy(e,Js.object({name:Js.string().required(),certificate:Js.string().required(),is_authority:Js.boolean().required(),private_key:Js.string(),hosts:Js.array(),uses:Js.array()}));if(t)throw new oa(t.message);let{name:r,certificate:n,private_key:s,is_authority:i}=e,o=new ao(n),c=!1,l=!1,u;for(let[f,h]of aa)!s&&!c&&o.checkPrivateKey(WB(h))&&(c=!0,u=f),s&&s===h&&(l=!0,u=f);if(!i&&!s&&!c)throw new oa("A suitable private key was not found for this certificate");let d;if(!r){try{d=Wy(o)}catch(f){St.error(f)}if(d==null)throw new oa("Error extracting certificate common name, please provide a name parameter")}let _=kre(r??d);s&&!c&&!l&&(await pn.writeFile(ir.join(_s.getHdbBasePath(),Es.LICENSE_KEY_DIR_NAME,_+".pem"),s),aa.set(_,s));let E={name:r??d,certificate:n,is_authority:i,hosts:e.hosts,uses:e.uses};return(!i||i&&u||i&&s)&&(E.private_key_name=u??_+".pem"),await gu(E),"Successfully added certificate: "+_}a(Hre,"addCertificate");function kre(e){return e.replace(/[^a-z0-9\.]/gi,"-")}a(kre,"sanitizeName");async function Fre(e){let t=Gy(e,Js.object({name:Js.string().required()}));if(t)throw new oa(t.message);let{name:r}=e;ca();let n=await Dr.get(r);if(!n)throw new oa(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&&(St.info("Removing private key named",s),await pn.remove(ir.join(_s.getHdbBasePath(),Es.LICENSE_KEY_DIR_NAME,s)))}return await Dr.delete(r),"Successfully removed "+r}a(Fre,"removeCertificate");function Wy(e){return e.subject.match(/CN=(.*)/)?.[1]}a(Wy,"extractCommonName");function lx(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):[Wy(e)]}a(lx,"hostnamesFromCert");async function Gre(e){if(e.bypass_auth!==!0)throw new oa("Unauthorized","401");let t=Gy(e,Js.object({name:Js.string().required()}));if(t)throw new oa(t.message);let{name:r}=e;if(r===".jwtPrivate")return(await qB()).private_key;if(r===".jwtPublic")return(await qB()).public_key;if(aa.get(r))return aa.get(e.name);throw new oa("Key not found")}a(Gre,"getKey")});async function Zy(e,t){let{authorization:r,rejectUnauthorized:n}=t||{},s=at(),i;if(e.includes("wss://")){if(!zy){let l=(0,Ix.createTLSSelector)("operations-api"),u={secureContexts:null};await l.initialize(u),zy=u.secureContexts}if(i=zy.get(s),i&&fe.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,Cx.isIP)(t?.serverName)?void 0:t?.serverName,noDelay:!0,highWaterMark:128*1024,ALPNProtocols:["http/1.1","harperdb-replication"],rejectUnauthorized:n!==!1,secureContext:void 0};return i&&(c.secureContext=wx.createSecureContext({...i.options,ca:Array.from(Pc)})),new Ox.WebSocket(e,"harperdb-replication-v1",c)}function zp(e,t,r){let n=t.port||t.securePort,s=Xy.pid%1e3+"-"+Nx.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,d=t.databaseSubscriptions||Cc,_,E,f=!1,h=t.subscription;h?.then&&h.then(ie=>h=ie);let T=t.tables||u&&dt()[u];if(!r){fe.error?.("No authorization provided"),ss(1008,"Unauthorized");return}let m=new Map,g=[],S=r.name;S&&t.connection&&(t.connection.nodeName=S);let y,I,U,x,X,W,V=1e3,se,Q=0,de=0,j=0,ae=0;if(t.url){let ie=a(()=>{X&&j===e._socket?.bytesRead&&ae===e._socket?.bytesWritten?e.terminate():(X=performance.now(),e.ping(),j=e._socket?.bytesRead,ae=e._socket?.bytesWritten)},"send_ping");U=setInterval(ie,Rx).unref(),ie()}else Oe();function Oe(){clearTimeout(x),j=e._socket?.bytesRead,ae=e._socket?.bytesWritten,x=setTimeout(()=>{j===e._socket?.bytesRead&&ae===e._socket?.bytesWritten&&(fe.warn?.(`Timeout waiting for ping from ${S}, terminating connection and reconnecting`),e.terminate())},Rx*2).unref()}a(Oe,"resetPingTimer"),u&&Wa(u);let Ne,Me,Gr=[],Md=[],qa,wn=[],Ud=[],wl=[],Xw=150,eh=0,vt=0,$a,Va,Bs,xs,th;e.on("message",ie=>{Q=performance.now();try{let Se=ie.dataView=new Dc(ie.buffer,ie.byteOffset,ie.byteLength);if(ie[0]>127){let R=(0,lt.decode)(ie),[w,A,b]=R;switch(w){case _x:{if(A){if(S){if(S!==A){fe.error?.(s,`Node name mismatch, expecting to connect to ${S}, but peer reported name as ${A}, disconnecting`),e.send((0,lt.encode)([Ru])),ss(1008,"Node name mismatch");return}}else if(S=A,t.connection?.tentativeNode){let H=t.connection.tentativeNode;H.name=S,t.connection.tentativeNode=null,oo(S,H)}if(t.connection&&(t.connection.nodeName=S),fe.debug?.(s,"received node name:",S,"db:",u),!u)try{Wa(u=R[2]),u==="system"&&(Ne=ra(t,(H,q)=>{Ya(q)&&Ir(q)}),e.on("close",()=>{Ne?.remove()}))}catch(H){fe.warn?.(s,"Error setting database",H),e.send((0,lt.encode)([Ru])),ss(1008,H.message);return}Ka()}break}case Tx:{fe.debug?.(s,"Received table definitions for",A.map(H=>H.table));for(let H of A){let q=R[2];H.database=q;let ee;Ya(q)&&(q==="system"?We[q]?.[H.table]||(ee=Qy(H,We[q]?.[H.table])):ee=Qy(H,We[q]?.[H.table]),_||(_=ee?.auditStore),T||(T=dt()?.[q]))}break}case Ru:ss();break;case px:try{let H=r?.replicates||r?.subscribers||r?.name;server.operation(A,{user:r},!H).then(q=>{Array.isArray(q)&&(q={results:q}),q.requestId=A.requestId,e.send((0,lt.encode)([Yp,q]))},q=>{e.send((0,lt.encode)([Yp,{requestId:A.requestId,error:q instanceof Error?q.toString():q}]))})}catch(H){e.send((0,lt.encode)([Yp,{requestId:A.requestId,error:H instanceof Error?H.toString():H}]))}break;case Yp:let{resolve:P,reject:N}=m.get(A.requestId);A.error?N(new Error(A.error)):P(A),m.delete(A.requestId);break;case jy:let B=R[3];T||(u?fe.error?.(s,"No tables found for",u):fe.error?.(s,"Database name never received"));let k=T[B];k=Qy({table:B,database:u,attributes:A.attributes,schemaDefined:A.schemaDefined},k),Gr[b]={name:B,decoder:new lt.Packr({useBigIntExtension:!0,randomAccessStructure:!0,freezeData:!0,typedStructs:A.typedStructs,structures:A.structures}),getEntry(H){return k.primaryStore.getEntry(H)},rootStore:k.primaryStore.rootStore};break;case fx:th=_?fB(S,A,_):new Map,qa=R[2],fe.debug?.(s,`Acknowledged subscription request, receiving messages for nodes: ${qa}`);break;case Ex:let C=b;wl[C]=A;break;case Sx:let F=["replicated",u,S];E||(E=new Float64Array(_.getUserSharedBuffer(F,new ArrayBuffer(8)))),E[0]=A,fe.trace?.(s,"received and broadcasting committed update",A),E.buffer.notify();break;case mx:y=A,h.send({type:"end_txn",localTime:y,remoteNodeIds:g});break;case hx:{let H=A,q;try{let ee=R[3],G=Md[b]||(Md[b]=T[R[4]]);if(!G)return fe.warn?.("Unknown table id trying to handle record request",b);let Ae=G.primaryStore.getBinaryFast(Symbol.for("structures")),Ee=Ae.length;if(Ee!==vt){vt=Ee;let re=(0,lt.decode)(Ae);e.send((0,lt.encode)([jy,{typedStructs:re.typed,structures:re.named},b,G.tableName]))}let Re=G.primaryStore.getBinaryFast(ee);if(Re){let re=G.primaryStore.decoder.decode(Re,{valueAsBuffer:!0});q=(0,lt.encode)([Kp,H,{value:re.value,expiresAt:re.expiresAt,version:re.version,residencyId:re.residencyId,nodeId:re.nodeId,user:re.user}])}else q=(0,lt.encode)([Kp,H])}catch(ee){q=(0,lt.encode)([Kp,H,{error:ee.message}])}e.send(q);break}case Kp:{let{resolve:H,reject:q,tableId:ee,key:G}=m.get(R[1]),Ae=R[2];if(Ae?.error)q(new Error(Ae.error));else if(Ae){let Ee=Gr[ee].decoder.decode(Ae.value);Ae.value=Ee,Ae.key=G,H(Ae)}else H();m.delete(R[1]);break}case dx:{xs=A;let H,q,ee=!1;if(h){if(u!==h.databaseName&&!h.then){fe.error?.("Subscription request for wrong database",u,h.databaseName);return}}else h=d.get(u);if(fe.debug?.(s,"received subscription request for",u,"at",xs),!h){let ce;h=new Promise(Ye=>{fe.debug?.("Waiting for subscription to database "+u),ce=Ye}),h.ready=ce,Cc.set(u,h)}if(r.name)q=Sr().subscribe(r.name),q.then(async ce=>{H=ce;for await(let Ye of H){let rt=Ye.value;if(!(rt?.replicates===!0||rt?.replicates?.receives||rt?.subscriptions?.some(Ze=>(Ze.database||Ze.schema)===u&&Ze.publish!==!1))){ee=!0,e.send((0,lt.encode)([Ru])),ss(1008,`Unauthorized database subscription to ${u}`);return}}},ce=>{fe.error?.(s,"Error subscribing to HDB nodes",ce)});else if(!(r?.role?.permission?.super_user||r.replicates)){e.send((0,lt.encode)([Ru])),ss(1008,`Unauthorized database subscription to ${u}`);return}if(Bs&&(fe.debug?.(s,"stopping previous subscription",u),Bs.emit("close")),xs.length===0)return;let G=xs[0],Ae=a(ce=>{if(ce&&(G.replicateByDefault?!G.tables.includes(ce.tableName):G.tables.includes(ce.tableName)))return{table:ce}},"tableToTableEntry"),Ee={txnTime:0},Re,re,Y=1/0,ge,Be=a((ce,Ye)=>{if(Y=Ye,ce.type==="end_txn"){Ee.txnTime&&(o[i]!==66&&fe.error?.("Invalid encoding of message"),di(9),di(jp),ja(ge=Ye),we()),i=c,Ee.txnTime=0;return}let rt=ce.nodeId,Ze=ce.tableId,st=re[Ze];if(!st&&(st=re[Ze]=Ae(h.tableById[Ze]),!st))return fe.debug?.("Not subscribed to table",Ze);let Bt=st.table,ko=Bt.primaryStore,Wt=ko.encoder;(ce.extendedType&Oh||!Wt.typedStructs)&&(Wt._mergeStructures(Wt.getStructures()),Wt.typedStructs&&(Wt.lastTypedStructuresLength=Wt.typedStructs.length));let rh=Re[rt];if(!(rh&&rh.startTime<Ye&&(!rh.endTime||rh.endTime>Ye)))return sf&&fe.trace?.(s,"skipping replication update",ce.recordId,"to:",S,"from:",rt,"subscribed:",Re),Zw();sf&&fe.trace?.(s,"sending replication update",ce.recordId,"to:",S,"from:",rt,"subscribed:",Re);let cg=ce.version;Ee.txnTime!==cg&&(Ee.txnTime&&(sf&&fe.trace?.(s,"new txn time, sending queued txn",Ee.txnTime),o[i]!==66&&fe.error?.("Invalid encoding of message"),we()),Ee.txnTime=cg,i=c,ja(cg));let za=ce.residencyId,lg=ji(za,Bt),nh;if(lg&&!lg.includes(S)){let Pl=ji(ce.previousResidencyId,Bt);if(Pl&&!Pl.includes(S)&&(ce.type==="put"||ce.type==="patch")||Bt.getResidencyById)return Zw();let Hd=ce.recordId;fe.trace?.(s,"sending invalidation",Hd,S,"from",rt);let _g=0;za&&(_g|=ec),ce.previousResidencyId&&(_g|=tc);let fg,sh=null;for(let eC in Bt.indices){if(!sh){if(fg=ce.getValue(ko,!0),!fg)break;sh={}}sh[eC]=fg[eC]}nh=Ul(ce.version,Ze,Hd,null,rt,ce.user,ce.type==="put"||ce.type==="patch"?"invalidate":ce.type,Wt.encode(sh),_g,za,ce.previousResidencyId,ce.expiresAt)}function Zw(){fe.trace?.(s,"skipping audit record",ce.recordId),W||(W=setTimeout(()=>{W=null,(ge||0)+gx/2<Y&&(sf&&fe.trace?.(s,"sending skipped sequence update",Y),e.send((0,lt.encode)([mx,Y])))},gx).unref())}a(Zw,"skipAuditRecord");let ug=Wt.typedStructs,dg=Wt.structures;if((ug?.length!=st.typed_length||dg?.length!=st.structure_length)&&(st.typed_length=ug?.length,st.structure_length=dg.length,fe.debug?.(s,"send table struct",st.typed_length,st.structure_length),st.sentName||(st.sentName=!0),e.send((0,lt.encode)([jy,{typedStructs:ug,structures:dg,attributes:Bt.attributes,schemaDefined:Bt.schemaDefined},Ze,st.table.tableName]))),za&&!Ud[za]&&(e.send((0,lt.encode)([Ex,lg,za])),Ud[za]=!0),nh)di(nh.length),xd(nh);else{let Pl=ce.encoded,Hd=Pl[0]===66?8:0;di(Pl.length-Hd),xd(Pl,Hd)}},"sendAuditRecord"),we=a(()=>{c-i>8?(e.send(o.subarray(i,c)),fe.debug?.(s,"Sent message, size:",c-i)):fe.debug?.(s,"skipping empty transaction")},"sendQueuedData");Bs=new Jy.EventEmitter,Bs.once("close",()=>{ee=!0,H?.end()});for(let{startTime:ce}of xs)ce<Y&&(Y=ce);(q||Promise.resolve()).then(async()=>{h=await h,_=h.auditStore,re=h.tableById.map(Ae),Re=[];for(let{name:Ye,startTime:rt,endTime:Ze}of xs){let st=Bp(Ye,_);fe.debug?.("subscription to",Ye,"using local id",st,"starting",rt),Re[st]={startTime:rt,endTime:Ze}}Ir(u),Ne||(Ne=Lc(Ye=>{Ye.databaseName===u&&Ir(u)}),Me=of(Ye=>{Ye===u&&(e.send((0,lt.encode)([Ru])),ss())}),e.on("close",()=>{Ne?.remove(),Me?.remove()})),e.send((0,lt.encode)([fx,W_(h.auditStore),xs.map(({name:Ye})=>Ye)]));let ce=!0;do{isFinite(Y)||(fe.warn?.("Invalid sequence id "+Y),ss(1008,"Invalid sequence id"+Y));let Ye;if(ce&&!ee&&(ce=!1,!(eb(_)<=Y)&&yx.default.get(bx.CONFIG_PARAMS.REPLICATION_COPYTABLESTOCATCHUP)!==!1&&server.nodes[0]?.name===S)){fe.info?.("Replicating all tables to",S);let Ze=Y,st=Qp(_);for(let Bt in T){if(!Ae(Bt))continue;let ko=T[Bt];for(let Wt of ko.primaryStore.getRange({snapshot:!1})){if(ee)return;Wt.localTime>=Y&&(fe.trace?.(s,"Copying record from",u,Bt,Wt.key,Wt.localTime),Ze=Math.max(Wt.localTime,Ze),Ye=!0,Be({recordId:Wt.key,tableId:ko.tableId,type:"put",getValue(){return Wt.value},encoded:ko.primaryStore.getBinary(Wt.key),version:Wt.version,residencyId:Wt.residencyId,nodeId:st},Wt.localTime))}}Y=Ze}for(let{key:rt,value:Ze}of _.getRange({start:Y||1,exclusiveStart:!0,snapshot:!1})){if(ee)return;de=rt;let st=Ht(Ze);Be(st,rt),e._socket.writableNeedDrain?await new Promise(Bt=>e._socket.once("drain",Bt)):await new Promise(setImmediate),Bs.startTime=rt,Ye=!0}Ye&&Be({type:"end_txn"},Y),de=0,await RB(_)}while(!ee)}).catch(ce=>{fe.error?.(s,"Error handling subscription to node",ce),ss(1008,"Error handling subscription to node")});break}}return}Se.position=8;let tt=!0,v,p;do{let R=Se.readInt();if(R===9&&Se.getUint8(Se.position)==jp){Se.position++,y=p=Se.readFloat64(),fe.trace?.("received remote sequence update",y,u);break}let w=Se.position,A=Ht(ie,w,w+R),b=Gr[A.tableId];b||fe.error?.(`No table found with an id of ${A.tableId}`);let P;A.residencyId&&(P=wl[A.residencyId],fe.trace?.(s,"received residency list",P,A.type,A.recordId));try{v={table:b.name,id:A.recordId,type:A.type,nodeId:th.get(A.nodeId),residencyList:P,timestamp:A.version,value:A.getValue(b),user:A.user,beginTxn:tt,expiresAt:A.expiresAt}}catch(N){throw N.message+="typed structures for current decoder"+JSON.stringify(b.decoder.typedStructs),N}tt=!1,sf&&fe.trace?.(s,"received replication message",A.type,"id",v.id,"version",A.version,"nodeId",v.nodeId,"value",v.value),h.send(v),Se.position=w+R}while(Se.position<ie.byteLength);eh++,mr(ie.byteLength,"bytes-received",S+"."+u+"."+v.table,"replication","ingest"),eh>Xw&&!$a&&($a=!0,e.pause()),h.send({type:"end_txn",localTime:y,remoteNodeIds:g,onCommit(){if(v){let R=Date.now()-v.timestamp;mr(R,"replication-latency",S+"."+u+"."+v.table,v.type,"ingest")}eh--,$a&&($a=!1,e.resume()),!I&&p&&(fe.trace?.(s,"queuing confirmation of a commit at",p),setTimeout(()=>{e.send((0,lt.encode)([Sx,I])),fe.trace?.(s,"sent confirmation of a commit at",I),I=null},qre)),I=p}})}catch(Se){fe.error?.(s,"Error handling incoming replication message",Se)}}),e.on("ping",Oe),e.on("pong",()=>{t.connection&&(t.connection.latency=performance.now()-X,Nc({name:S,database:u,url:t.url,lastSendTime:de,latency:t.connection.latency})),X=null}),e.on("close",(ie,Se)=>{clearInterval(U),clearTimeout(x),Bs&&Bs.emit("close"),Va&&Va.end();for(let[tt,{reject:v}]of m)v(new Error(`Connection closed ${Se?.toString()} ${ie}`));fe.debug?.(s,"closed",ie,Se?.toString())});function Ve(){}a(Ve,"recordRemoteNodeSequence");function ss(ie,Se){e.isFinished=!0,e.close(ie,Se)}a(ss,"close");function Ka(){if(f||(f=!0,t.connection?.on("subscriptions-updated",Ka)),t.connection?.isFinished)throw new Error("Can not make a subscription request on a connection that is already closed");let ie=new Map;try{for(let v of h?.dbisDB?.getRange({start:Symbol.for("seq"),end:[Symbol.for("seq"),Buffer.from([255])]})||[])for(let p of v.value.nodes||[])p.lastTxnTime>(ie.get(p.id)??0)&&ie.set(p.id,p.lastTxnTime)}catch(v){if(!v.message.includes("Can not re"))throw v}let Se=t.connection?.nodeSubscriptions?.[0];g=[];let tt=t.connection?.nodeSubscriptions.map((v,p)=>{let R=[],{replicateByDefault:w}=v;if(v.subscriptions){for(let N of v.subscriptions)if(N.subscribe&&(N.schema||N.database)===u){let B=N.table;T?.[B]?.replicate!==!1&&R.push(B)}w=!1}else for(let N in T)(w?T[N].replicate===!1:T[N].replicate)&&R.push(N);let A=_&&Bp(v.name,_),b=h?.dbisDB?.get([Symbol.for("seq"),A])??1,P=Math.max(b?.seqId??1,(typeof v.start_time=="string"?new Date(v.start_time).getTime():v.start_time)??1);if(fe.debug?.("Starting time recorded in db",v.name,A,u,b?.seqId,"start time:",P),Se!==v){P>5e3&&(P-=5e3);let N=_&&Bp(Se.name,_),B=h?.dbisDB?.get([Symbol.for("seq"),N])??1;for(let k of B?.nodes||[])k.name===v.name&&(P=k.seqId,fe.debug?.("Using sequence id from proxy node",Se.name,P))}return g.push(A),ie.get(A)>P&&(P=ie.get(A),fe.debug?.("Updating start time from more recent txn recorded",Se.name,P)),{name:v.name,replicateByDefault:w,tables:R,startTime:P,endTime:v.end_time}});if(tt)if(fe.debug?.(s,"sending subscription request",tt,h?.dbisDB?.path),clearTimeout(se),tt.length>0)e.send((0,lt.encode)([dx,tt]));else{let v=a(()=>{let p=performance.now();se=setTimeout(()=>{Q<=p?ss(1008,"No nodes to subscribe to"):v()},V)},"schedule_close");v()}}a(Ka,"sendSubscriptionRequestUpdate");function ji(ie,Se){if(!ie)return;let tt=wn[ie];return tt||(tt=Se.getResidencyRecord(ie),wn[ie]=tt),tt}a(ji,"getResidence");function Ya(ie){return!(ua&&ua!="*"&&!ua[ie]&&!ua.includes?.(ie)&&!ua.some?.(Se=>Se.name===ie))}a(Ya,"checkDatabaseAccess");function Wa(ie){if(h=h||d.get(ie),!Ya(ie))throw new Error(`Access to database "${ie}" is not permitted`);h||fe.warn?.(`No database named "${ie}" was declared and registered`),_=h?.auditStore,T||(T=dt()?.[ie]);let Se=at();if(Se===S)throw Se?new Error("Should not connect to self",Se):new Error("Node name not defined");return vd(Se,ie),!0}a(Wa,"setDatabase");function vd(ie,Se){let tt=dt()?.[Se],v=[];for(let p in tt){let R=tt[p];v.push({table:p,schemaDefined:R.schemaDefined,attributes:R.attributes.map(w=>({name:w.name,type:w.type,isPrimaryKey:w.isPrimaryKey}))})}fe.trace?.("Sending database info for node",ie,"database name",Se),e.send((0,lt.encode)([_x,ie,Se,v]))}a(vd,"sendNodeDBName");function Ir(ie){let Se=dt()?.[ie],tt=[];for(let v in Se){if(xs&&!xs.some(R=>R.replicateByDefault?!R.tables.includes(v):R.tables.includes(v)))continue;let p=Se[v];tt.push({table:v,schemaDefined:p.schemaDefined,attributes:p.attributes.map(R=>({name:R.name,type:R.type,isPrimaryKey:R.isPrimaryKey}))})}e.send((0,lt.encode)([Tx,tt,ie]))}a(Ir,"sendDBSchema");let Cl=1,Bd=[];return{end(){Va&&Va.end(),Bs&&Bs.emit("close")},getRecord(ie){let Se=Cl++;return new Promise((tt,v)=>{let p=[hx,Se,ie.table.tableId,ie.id];Bd[ie.table.tableId]||(p.push(ie.table.tableName),Bd[ie.table.tableId]=!0),e.send((0,lt.encode)(p)),m.set(Se,{tableId:ie.table.tableId,key:ie.id,resolve(R){let{table:w,entry:A}=ie;tt(R),R&&w._recordRelocate(A,R)},reject:v})})},sendOperation(ie){let Se=Cl++;return ie.requestId=Se,e.send((0,lt.encode)([px,ie])),new Promise((tt,v)=>{m.set(Se,{resolve:tt,reject:v})})}};function di(ie){Ho(5),ie<128?o[c++]=ie:ie<16384?(l.setUint16(c,ie|32768),c+=2):ie<1056964608?(l.setUint32(c,ie|3221225472),c+=4):(o[c]=255,l.setUint32(c+1,ie),c+=5)}function xd(ie,Se=0,tt=ie.length){let v=tt-Se;Ho(v),ie.copy(o,c,Se,tt),c+=v}function ja(ie){Ho(8),l.setFloat64(c,ie),c+=8}function Ho(ie){if(ie+16>o.length-c){let Se=Buffer.allocUnsafeSlow(c+ie-i+65536>>10<<11);o.copy(Se,0,i,c),c=c-i,i=0,o=Se,l=new DataView(o.buffer,0,o.length)}}}function Qy(e,t){let r=e.database??"data";if(r!=="data"&&!We[r]){fe.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?(fe.debug?.("(Re)creating",e),pt({table:e.table,database:e.database,schemaDefined:e.schemaDefined,attributes:i,...t})):t}var yx,bx,lt,Ox,Nx,fe,Jy,Ix,wx,Xy,Cx,dx,_x,fx,Ru,Ex,jy,hx,Kp,px,Yp,mx,Sx,Tx,Px,Cc,sf,gx,qre,Rx,zy,Ax,Wp,Dx=Ie(()=>{Pe();Qi();gy();Oy();us();yx=M(ne()),bx=M(L());vl();lt=require("msgpackr"),Ox=require("ws"),Nx=require("worker_threads"),fe=M(Oc());J_();Jy=require("events"),Ix=M(Zs()),wx=M(require("node:tls"));fu();Xy=M(require("node:process")),Cx=require("node:net");Ii();dx=129,_x=140,fx=141,Ru=142,Ex=130,jy=132,hx=133,Kp=134,px=136,Yp=137,mx=143,Sx=144,Tx=145,Px=new Map,Cc=new Map,sf=!0,gx=300,qre=2,Rx=3e4;a(Zy,"createWebSocket");Ax=1e3,Wp=class extends Jy.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??Qs(r)}static{a(this,"NodeReplicationConnection")}socket;startTime;retryTime=Ax;retries=0;isConnected=!0;isFinished=!1;nodeSubscriptions=[];latency=0;replicateTablesByDefault;session;sessionResolve;sessionReject;async connect(){this.session||this.resetSession();let r=[];this.socket=await Zy(this.url,{serverName:this.nodeName,authorization:this.authorization});let n;fe.debug?.(`Connecting to ${this.url}, db: ${this.databaseName}, process ${Xy.pid}`),this.socket.on("open",()=>{this.socket._socket.unref(),fe.info?.(`Connected to ${this.url}, db: ${this.databaseName}`),this.retries=0,this.retryTime=Ax,Nc({name:this.nodeName,database:this.databaseName,url:this.url}),this.isConnected=!0,n=zp(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"?(fe.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"?fe.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`):fe.error?.(`Error in connection to ${this.url} due to ${s.message}`)),this.sessionReject(s)}),this.socket.on("close",(s,i)=>{if(this.isConnected&&(pu({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();fe.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(zp,"replicateOverWS");a(Qy,"ensureTableIfChanged")});var la={};je(la,{clearThisNodeName:()=>Qre,disableReplication:()=>Yre,enabled_databases:()=>ua,forEachReplicatedDatabase:()=>ra,getThisNodeId:()=>Qp,getThisNodeName:()=>at,getThisNodeUrl:()=>na,hostnameToUrl:()=>em,lastTimeInAuditStore:()=>j_,monitorNodeCAs:()=>kx,replicateOperation:()=>Xre,replication_certificate_authorities:()=>Pc,sendOperationToNode:()=>cf,servers:()=>Vre,setReplicator:()=>Gx,start:()=>Kre,startOnMainThread:()=>Iy,subscribeToNode:()=>hu,unsubscribeFromNode:()=>Fp,urlToNodeName:()=>Qs});function Kre(e){if(e.port||(e.port=hs.default.get(Mc.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT)),e.securePort||(e.securePort=hs.default.get(Mc.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_SECUREPORT)),!at())throw new Error("Can not load replication without a url (see replication.url in the config)");let t=new Map;for(let n of Q_(e))t.set(Qs(n.url),n);Wre(e),e={mtls:!0,isOperationsServer:!0,maxPayload:10*1024*1024*1024,...e};let r=it.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(),zp(n,e,s?.user),n.on("error",c=>{c.code!=="ECONNREFUSED"&&Tr.error("Error in connection to "+this.url,c.message)})},e);e.runFirst=!0,it.http((n,s)=>{if(n.isWebSocket&&n.headers.get("Sec-WebSocket-Protocol")==="harperdb-replication-v1"){!n.authorized&&n._nodeRequest.socket.authorizationError&&Tr.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));c?n.user=c:Tr.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:Tr.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(Pc);o.options.availableCAs&&c.push(...o.options.availableCAs.values());let l={...o.options,ca:c};o.replicationContext=Zp.createSecureContext(l)}catch(c){Tr.error("Error creating replication TLS config",c)}},"updateContexts");n.secureContextsListeners.push(s),kx(s),hs.default.get(Mc.CONFIG_PARAMS.REPLICATION_ENABLEROOTCAS)!==!1&&s()}}function kx(e){let t=0;_u(r=>{r?.ca&&(Pc.add(r.ca),Pc.size!==t&&(t=Pc.size,e?.()))})}function Yre(e=!0){Hx=e}function Wre(e){Hx||(dt(),ua=e.databases,ra(e,(t,r)=>{if(!t){let n=e.databaseSubscriptions||Cc;for(let[s,i]of af){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];Gx(r,s,e),Px.get(s)?.forEach(i=>i(s))}}))}function Gx(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 Fx extends Lr{static{a(this,"Replicator")}static connection;static subscription;static async subscribe(){let i=r.databaseSubscriptions||Cc,o=i.get(e),c=o?.tableById||[];c[t.tableId]=t;let l=o?.ready;if(Tr.trace("Setting up replicator subscription to database",e),!o?.auditStore)return this.subscription=o=new Dn,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 d;for(let E of c){let f=jre(E,Fx.subscription,e);f?.isConnected&&!u.has(f)&&(!d||f.latency<d.latency)&&(d=f)}if(!d)throw l||new Bx.ServerError("No connection to any other nodes are available",502);let _={requestId:$re++,table:t,entry:i,id:i.key};u.add(d);try{return await d.getRecord(_)}catch(E){if(d.isConnected)throw E;Tr.warn("Error in load from node",Xp,E),l||(l=E)}}while(!0)}}}static isReplicator=!0},{intermediateSource:!0})}function qx(e,t,r,n,s){let i=af.get(e);i||af.set(e,i=new Map);let o=i.get(r);if(o)return o;if(t)return i.set(r,o=new Wp(e,t,r,n,s)),o.connect(),o.once("finished",()=>i.delete(r)),o}function jre(e,t,r){let n=Lx.get(e)?.get(r);if(n)return n;let s=Sr().primaryStore.get(e);return s?.url&&(n=qx(s.url,t,r,e,s.authorization),Lx.set(e,af.get(s.url))),n}async function cf(e,t,r){r||(r={}),r.serverName=e.name;let n=await Zy(e.url,r),s=zp(n,{},{});return new Promise((i,o)=>{n.on("open",()=>{i(s.sendOperation(t))}),n.on("error",c=>{o(c)}),n.on("close",c=>{Tr.info("Sending operation connection to "+e.url+" closed",c)})}).finally(()=>{n.close()})}function hu(e){try{xx.isMainThread&&Tr.trace("Subscribing on main thread (should not happen in multi-threaded instance)",e.nodes[0].url,e.database);let t=Cc.get(e.database);if(!t){let n;t=new Promise(s=>{Tr.info("Waiting for subscription to database "+e.database),n=s}),t.ready=n,Cc.set(e.database,t)}let r=qx(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=>z_(n,e.database)),e.replicateByDefault)}catch(t){Tr.error("Error in subscription to node",e.nodes[0]?.url,t)}}async function Fp({name:e,url:t,database:r}){Tr.trace("Unsubscribing from node",e,t,r,"nodes",Array.from(Sr().primaryStore.getRange({})));let n=af.get(t);if(n){let s=n.get(r);s&&(s.unsubscribe(),n.delete(r))}}function zre(){if(tb!==void 0)return tb;let e=hs.default.get(Mc.CONFIG_PARAMS.OPERATIONSAPI_TLS_CERTIFICATE)||hs.default.get(Mc.CONFIG_PARAMS.TLS_CERTIFICATE);if(e)return tb=new Ux.X509Certificate((0,vx.readFileSync)(e)).subject.match(/CN=(.*)/)?.[1]??null}function at(){return Xp||(Xp=hs.default.get("replication_hostname")??Qs(hs.default.get("replication_url"))??zre()??Mx("operationsapi_network_secureport")??Mx("operationsapi_network_port")??"127.0.0.1")}function Qre(){Xp=void 0}function Mx(e){let t=hs.default.get(e),r=t?.lastIndexOf?.(":");if(r>0)return t.slice(0,r)}function Jp(e){let t=hs.default.get(e),r=t?.lastIndexOf?.(":");return r>0?+t.slice(r+1).replace(/[\[\]]/g,""):+t}function Qp(e){return W_(e)?.[at()]}function na(){let e=hs.default.get("replication_url");return e||em(at())}function em(e){let t=Jp("replication_port");if(t)return`ws://${e}:${t}`;if(t=Jp("replication_secureport"),t)return`wss://${e}:${t}`;if(t=Jp("operationsapi_network_port"),t)return`ws://${e}:${t}`;if(t=Jp("operationsapi_network_secureport"),t)return`wss://${e}:${t}`}function Qs(e){if(e)return new URL(e).hostname}function ra(e,t){for(let n of Object.getOwnPropertyNames(We))r(n);return of(n=>{r(n)}),Lc((n,s)=>{r(n.databaseName)});function r(n){let s=We[n];Tr.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):Jre(n)&&t(s,n,!1)}a(r,"forDatabase")}function Jre(e){let t=We[e];for(let r in t)if(t[r].replicate)return!0}function j_(e){for(let t of e.getKeys({limit:1,reverse:!0}))return t}async function Xre(e){let t={message:""};if(e.replicated){e.replicated=!1,Tr.trace?.("Replicating operation",e.operation,"to nodes",it.nodes.map(n=>n.name));let r=await Promise.allSettled(it.nodes.map(n=>cf(n,e)));t.replicated=r.map((n,s)=>{let i=n.status==="rejected"?{status:"failed",reason:n.reason.toString()}:n.value;return i.node=it.nodes[s]?.name,i})}return t}var hs,Tr,Ux,vx,Mc,Zp,Bx,xx,Hx,$re,Vre,Pc,ua,af,Lx,tb,Xp,us=Ie(()=>{Pe();Ks();Ll();Dx();qr();hs=M(ne()),Tr=M(K()),Ux=require("crypto"),vx=require("fs");J_();fu();Mc=M(L());gy();Zp=M(require("node:tls")),Bx=M(_e()),xx=require("worker_threads"),$re=1,Vre=[],Pc=hs.default.get(Mc.CONFIG_PARAMS.REPLICATION_ENABLEROOTCAS)!==!1?new Set(Zp.rootCertificates):new Set;a(Kre,"start");a(kx,"monitorNodeCAs");a(Yre,"disableReplication");a(Wre,"assignReplicationSource");a(Gx,"setReplicator");af=new Map;a(qx,"getConnection");Lx=new Map;a(jre,"getConnectionByName");a(cf,"sendOperationToNode");a(hu,"subscribeToNode");a(Fp,"unsubscribeFromNode");a(zre,"getCommonNameFromCert");a(at,"getThisNodeName");a(Qre,"clearThisNodeName");Object.defineProperty(it,"hostname",{get(){return at()}});a(Mx,"getHostFromListeningPort");a(Jp,"getPortFromListeningPort");a(Qp,"getThisNodeId");it.replication={getThisNodeId:Qp,exportIdMapping:W_};a(na,"getThisNodeUrl");a(em,"hostnameToUrl");a(Qs,"urlToNodeName");a(ra,"forEachReplicatedDatabase");a(Jre,"hasExplicitlyReplicatedTable");a(j_,"lastTimeInAuditStore");a(Xre,"replicateOperation")});var lf=O((vwe,Wx)=>{"use strict";var Au=Uh(),yu=S0(),Zre=K(),ene=require("uuid").v4,Uwe=require("clone"),rm=to(),bu=L(),tne=require("util"),da=Un(),{handleHDBError:mn,hdb_errors:rne}=_e(),{HDB_ERROR_MSGS:tm,HTTP_STATUS_CODES:Sn}=rne,{SchemaEventMsg:nm}=$s(),$x=kt(),{getDatabases:nne}=(Pe(),oe(ut)),{transformReq:Ou}=te(),{replicateOperation:Vx}=(us(),oe(la));Wx.exports={createSchema:sne,createSchemaStructure:Kx,createTable:ine,createTableStructure:Yx,createAttribute:une,dropSchema:one,dropTable:ane,dropAttribute:cne,getBackup:dne};async function sne(e){let t=await Kx(e);return rm.signalSchemaChange(new nm(process.pid,e.operation,e.schema)),t}a(sne,"createSchema");async function Kx(e){let t=Au.schema_object(e);if(t)throw mn(t,t.message,Sn.BAD_REQUEST,void 0,void 0,!0);if(Ou(e),!await yu.checkSchemaExists(e.schema))throw mn(new Error,tm.SCHEMA_EXISTS_ERR(e.schema),Sn.BAD_REQUEST,bu.LOG_LEVELS.ERROR,tm.SCHEMA_EXISTS_ERR(e.schema),!0);return await da.createSchema(e),`database '${e.schema}' successfully created`}a(Kx,"createSchemaStructure");async function ine(e){return Ou(e),e.hash_attribute=e.primary_key??e.hash_attribute,await Yx(e)}a(ine,"createTable");async function Yx(e){let t=Au.create_table_object(e);if(t)throw mn(t,t.message,Sn.BAD_REQUEST,void 0,void 0,!0);if(Au.validateTableResidence(e.residence),!await yu.checkSchemaTableExists(e.schema,e.table))throw mn(new Error,tm.TABLE_EXISTS_ERR(e.schema,e.table),Sn.BAD_REQUEST,bu.LOG_LEVELS.ERROR,tm.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:ene(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await da.createTable(n,e);else throw mn(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Sn.BAD_REQUEST);else await da.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(Yx,"createTableStructure");async function one(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=Au.schema_object(e),n=t??r;if(n)throw mn(n,n.message,Sn.BAD_REQUEST,void 0,void 0,!0);Ou(e);let s=await yu.checkSchemaExists(e.schema);if(s)throw mn(new Error,s,Sn.NOT_FOUND,bu.LOG_LEVELS.ERROR,s,!0);let i=await yu.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);await da.dropSchema(e),rm.signalSchemaChange(new nm(process.pid,e.operation,e.schema)),await $x.purgeSchemaTableStreams(e.schema,o);let c=await Vx(e);return c.message=`successfully deleted '${e.schema}'`,c}a(one,"dropSchema");async function ane(e){let t=Au.table_object(e);if(t)throw mn(t,t.message,Sn.BAD_REQUEST,void 0,void 0,!0);Ou(e);let r=await yu.checkSchemaTableExists(e.schema,e.table);if(r)throw mn(new Error,r,Sn.NOT_FOUND,bu.LOG_LEVELS.ERROR,r,!0);await da.dropTable(e),await $x.purgeTableStream(e.schema,e.table);let n=await Vx(e);return n.message=`successfully deleted table '${e.schema}.${e.table}'`,n}a(ane,"dropTable");async function cne(e){let t=Au.attribute_object(e);if(t)throw mn(t,t.message,Sn.BAD_REQUEST,void 0,void 0,!0);Ou(e);let r=await yu.checkSchemaTableExists(e.schema,e.table);if(r)throw mn(new Error,r,Sn.NOT_FOUND,bu.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw mn(new Error,"You cannot drop a hash attribute",Sn.BAD_REQUEST,void 0,void 0,!0);if(bu.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw mn(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Sn.BAD_REQUEST,void 0,void 0,!0);try{return await da.dropAttribute(e),lne(e),rm.signalSchemaChange(new nm(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw Zre.error(`Got an error deleting attribute ${tne.inspect(e)}.`),n}}a(cne,"dropAttribute");function lne(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(lne,"dropAttributeFromGlobal");async function une(e){Ou(e);let t=nne()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw mn(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Sn.BAD_REQUEST,void 0,void 0,!0);return await da.createAttribute(e),rm.signalSchemaChange(new nm(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(une,"createAttribute");function dne(e){return da.getBackup(e)}a(dne,"getBackup")});var zx=O((xwe,jx)=>{"use strict";var{OPERATIONS_ENUM:_ne}=L(),rb=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=_ne.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};jx.exports=rb});var nb=O((Fwe,eH)=>{"use strict";var fne=Un(),kwe=zx(),sm=te(),im=L(),Ene=ne(),{handleHDBError:Qx,hdb_errors:hne}=_e(),{HDB_ERROR_MSGS:Jx,HTTP_STATUS_CODES:Xx}=hne,pne=Object.values(im.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),Zx="To use this operation audit log must be enabled in harperdb-config.yaml";eH.exports=mne;async function mne(e){if(sm.isEmpty(e.schema))throw new Error(Jx.SCHEMA_REQUIRED_ERR);if(sm.isEmpty(e.table))throw new Error(Jx.TABLE_REQUIRED_ERR);if(!Ene.get(im.CONFIG_PARAMS.LOGGING_AUDITLOG))throw Qx(new Error,Zx,Xx.BAD_REQUEST,im.LOG_LEVELS.ERROR,Zx,!0);let t=sm.checkSchemaTableExist(e.schema,e.table);if(t)throw Qx(new Error,t,Xx.NOT_FOUND,im.LOG_LEVELS.ERROR,t,!0);if(!sm.isEmpty(e.search_type)&&pne.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await fne.readAuditLog(e)}a(mne,"readAuditLog")});var rH=O((qwe,tH)=>{"use strict";var{OPERATIONS_ENUM:Sne}=L(),sb=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Sne.GET_BACKUP,this.schema=t,this.table=r}};tH.exports=sb});var iH=O((Ywe,sH)=>{"use strict";var Tne=Un(),Vwe=rH(),ib=te(),gne=L(),Kwe=ne(),{handleHDBError:Rne,hdb_errors:Ane}=_e(),{HDB_ERROR_MSGS:nH,HTTP_STATUS_CODES:yne}=Ane;sH.exports=bne;async function bne(e){if(ib.isEmpty(e.schema))throw new Error(nH.SCHEMA_REQUIRED_ERR);if(ib.isEmpty(e.table))throw new Error(nH.TABLE_REQUIRED_ERR);let t=ib.checkSchemaTableExist(e.schema,e.table);if(t)throw Rne(new Error,t,yne.NOT_FOUND,gne.LOG_LEVELS.ERROR,t,!0);return await Tne.getBackup(read_audit_log_object)}a(bne,"getBackup")});var dH=O((jwe,uH)=>{var Nu=require("validate.js"),aH=_t(),Iu=L(),{handleHDBError:One,hdb_errors:Nne}=_e(),{HDB_ERROR_MSGS:Jt,HTTP_STATUS_CODES:Ine}=Nne,ob=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),wne={STRUCTURE_USER:"structure_user"},oH=Object.values(Iu.ROLE_TYPES_ENUM),Cne="attribute_permissions",Pne="attribute_name",{PERMS_CRUD_ENUM:wu}=Iu,Dne=[Cne,...Object.values(wu)],cH=[wu.READ,wu.INSERT,wu.UPDATE],Lne=[Pne,...cH];function Mne(e){let t=ob();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,lH(e,t)}a(Mne,"addRoleValidation");function Une(e){let t=ob();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,lH(e,t)}a(Une,"alterRoleValidation");function vne(e){let t=ob();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,aH.validateObject(e,t)}a(vne,"dropRoleValidation");var Bne=["operation","role","id","permission","hdb_user","hdb_auth_header","access"];function lH(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)Bne.includes(n[o])||s.push(n[o]);s.length>0&&or(Jt.INVALID_ROLE_JSON_KEYS(s),r);let i=aH.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{or(o,r)}),e.permission){let o=xne(e);o&&or(o,r),oH.forEach(c=>{e.permission[c]&&!Nu.isBoolean(e.permission[c])&&or(Jt.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(oH.indexOf(o)<0){if(o===wne.STRUCTURE_USER){let l=e.permission[o];if(typeof l=="boolean")continue;if(Array.isArray(l)){for(let u=0,d=l.length;u<d;u++){let _=l[u];global.hdb_schema[_]||or(Jt.SCHEMA_NOT_FOUND(_),r)}continue}or(Jt.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){or(Jt.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]){or(Jt.TABLE_NOT_FOUND(o,l),r);continue}if(Object.keys(u).forEach(d=>{Dne.includes(d)||or(Jt.INVALID_PERM_KEY(d),r,o,l)}),Object.values(wu).forEach(d=>{Nu.isDefined(u[d])?Nu.isBoolean(u[d])||or(Jt.TABLE_PERM_NOT_BOOLEAN(d),r,o,l):or(Jt.TABLE_PERM_MISSING(d),r,o,l)}),u.attribute_permissions===void 0){or(Jt.ATTR_PERMS_ARRAY_MISSING,r,o,l);continue}else if(!(Array.isArray(u.attribute_permissions)||u.attribute_permissions===null)){or(Jt.ATTR_PERMS_NOT_ARRAY,r,o,l);continue}if(u.attribute_permissions){let d=global.hdb_schema[o][l].attributes.map(({attribute:E})=>E),_={read:!1,insert:!1,update:!1};for(let E in u.attribute_permissions){let f=u.attribute_permissions[E];if(Object.keys(f).forEach(T=>{!Lne.includes(T)&&T!==wu.DELETE&&or(Jt.INVALID_ATTR_PERM_KEY(T),r,o,l)}),!Nu.isDefined(f.attribute_name)){or(Jt.ATTR_PERM_MISSING_NAME,r,o,l);continue}let h=f.attribute_name;if(!d.includes(h)){or(Jt.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,l);continue}cH.forEach(T=>{Nu.isDefined(f[T])?Nu.isBoolean(f[T])||or(Jt.ATTR_PERM_NOT_BOOLEAN(T,h),r,o,l):or(Jt.ATTR_PERM_MISSING(T,h),r,o,l)}),!_.read&&f.read===!0&&(_.read=!0),!_.insert&&f.insert===!0&&(_.insert=!0),!_.update&&f.update===!0&&(_.update=!0)}if(u.read===!1&&_.read===!0||u.insert===!1&&_.insert===!0||u.update===!1&&_.update===!0){let E=`${o}.${l}`;or(Jt.MISMATCHED_TABLE_ATTR_PERMS(E),r,o,l)}}}}return Hne(r)}a(lH,"customValidate");uH.exports={addRoleValidation:Mne,alterRoleValidation:Une,dropRoleValidation:vne};function xne(e){let{operation:t,permission:r}=e;if(t===Iu.OPERATIONS_ENUM.ADD_ROLE||t===Iu.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 Jt.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Iu.ROLE_TYPES_ENUM.SUPER_USER:Iu.ROLE_TYPES_ENUM.CLUSTER_USER;return Jt.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(xne,"validateNoSUPerms");function Hne(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:Jt.ROLE_PERMS_ERROR,...e};return One(new Error,n,Ine.BAD_REQUEST)}else return null}a(Hne,"generateRolePermResponse");function or(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(or,"addPermError")});var df=O((Jwe,hH)=>{"use strict";var _H=Vr(),fH=$r(),kne=zo(),cb=dH(),lb=to(),Qwe=require("uuid").v4,Fne=require("util"),om=L(),Gne=te(),ub=fH.searchByValue,qne=fH.searchByHash,$ne=Fne.promisify(kne.delete),Vne=Vs(),Kne=Ql(),{hdb_errors:Yne,handleHDBError:Uc}=_e(),{HDB_ERROR_MSGS:EH,HTTP_STATUS_CODES:uf}=Yne,{UserEventMsg:db}=$s();hH.exports={addRole:Wne,alterRole:jne,dropRole:zne,listRoles:Qne};function ab(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(ab,"scrubRoleDetails");async function Wne(e){let t=cb.addRoleValidation(e);if(t)throw t;e=ab(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 ub(r)||[])}catch(i){throw Uc(i)}if(n&&n.length>0)throw Uc(new Error,EH.ROLE_ALREADY_EXISTS(e.role),uf.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 _H.insert(s),lb.signalUserChange(new db(process.pid)),e=ab(e),e}a(Wne,"addRole");async function jne(e){let t=cb.alterRoleValidation(e);if(t)throw t;e=ab(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await _H.update(r)}catch(s){throw Uc(s)}if(n&&n?.message==="updated 0 of 1 records")throw Uc(new Error,"Invalid role id",uf.BAD_REQUEST,void 0,void 0,!0);return await lb.signalUserChange(new db(process.pid)),e}a(jne,"alterRole");async function zne(e){let t=cb.dropRoleValidation(e);if(t)throw Uc(new Error,t,uf.BAD_REQUEST,void 0,void 0,!0);let r=new Kne(om.SYSTEM_SCHEMA_NAME,om.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await qne(r));if(n.length===0)throw Uc(new Error,EH.ROLE_NOT_FOUND,uf.NOT_FOUND,void 0,void 0,!0);let s=new Vne(om.SYSTEM_SCHEMA_NAME,om.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await ub(s)),o=!1;if(Gne.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){o=!0;break}}if(o===!0)throw Uc(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,uf.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await $ne(c),lb.signalUserChange(new db(process.pid)),`${n[0].role} successfully deleted`}a(zne,"dropRole");async function Qne(){return ub({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(Qne,"listRoles")});var TH=O((Zwe,SH)=>{"use strict";var Jne=ne(),_a=require("joi"),Xne=_t(),pH=require("moment"),Zne=require("fs-extra"),_b=require("path"),ese=require("lodash"),_f=L(),{LOG_LEVELS:vc}=L(),tse="YYYY-MM-DD hh:mm:ss",rse=_b.resolve(__dirname,"../logs");SH.exports=function(e){return Xne.validateBySchema(e,nse)};var nse=_a.object({from:_a.custom(mH),until:_a.custom(mH),level:_a.valid(vc.NOTIFY,vc.FATAL,vc.ERROR,vc.WARN,vc.INFO,vc.DEBUG,vc.TRACE),order:_a.valid("asc","desc"),limit:_a.number().min(1),start:_a.number().min(0),log_name:_a.custom(sse)});function mH(e,t){if(pH(e,pH.ISO_8601).format(tse)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(mH,"validateDatetime");function sse(e,t){if(ese.invert(_f.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=Jne.get(_f.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?_f.LOG_NAMES.HDB:e,i=s===_f.LOG_NAMES.INSTALL?_b.join(rse,_f.LOG_NAMES.INSTALL):_b.join(n,s);return Zne.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(sse,"validateReadLogPath")});var Eb=O((tCe,RH)=>{"use strict";var am=L(),ise=K(),ose=ne(),ase=TH(),fb=require("path"),gH=require("fs-extra"),{once:cse}=require("events"),{handleHDBError:lse,hdb_errors:use}=_e(),{PACKAGE_ROOT:dse}=L(),_se=fb.join(dse,"logs"),fse=1e3,Ese=200;RH.exports=hse;async function hse(e){let t=ase(e);if(t)throw lse(t,t.message,use.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=ose.get(am.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e.log_name===void 0?am.LOG_NAMES.HDB:e.log_name,s=n===am.LOG_NAMES.INSTALL?fb.join(_se,am.LOG_NAMES.INSTALL):fb.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,d=u?new Date(e.until):void 0,_=e.limit===void 0?fse:e.limit,E=e.order===void 0?void 0:e.order,f=e.start===void 0?0:e.start,h=f+_,T=0;E==="desc"&&!l&&!d&&(T=Math.max(gH.statSync(s).size-(h+5)*Ese,0));let m=gH.createReadStream(s,{start:T});m.on("error",x=>{ise.error(x)});let g=0,S=[],y="",I;m.on("data",x=>{let X=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;x=y+x;let W=0,V;for(;(V=X.exec(x))&&!m.destroyed;){I&&(I.message=x.slice(W,V.index),U(I));let[se,Q,de]=V,j=de.split("] ["),ae=j[0],Oe=j[1];j.splice(0,2),I={timestamp:Q,thread:ae,level:Oe,tags:j,message:""},W=V.index+se.length}y=x.slice(W)}),m.on("end",x=>{m.destroyed||I&&(I.message=y.trim(),U(I))}),m.resume();function U(x){let X,W,V;switch(!0){case(i&&c&&u):X=new Date(x.timestamp),W=new Date(l),V=new Date(d),x.level===o&&X>=W&&X<=V&&g<f?g++:x.level===o&&X>=W&&X<=V&&(fa(x,E,S),g++,g===h&&m.destroy());break;case(i&&c):X=new Date(x.timestamp),W=new Date(l),x.level===o&&X>=W&&g<f?g++:x.level===o&&X>=W&&(fa(x,E,S),g++,g===h&&m.destroy());break;case(i&&u):X=new Date(x.timestamp),V=new Date(d),x.level===o&&X<=V&&g<f?g++:x.level===o&&X<=V&&(fa(x,E,S),g++,g===h&&m.destroy());break;case(c&&u):X=new Date(x.timestamp),W=new Date(l),V=new Date(d),X>=W&&X<=V&&g<f?g++:X>=W&&X<=V&&(fa(x,E,S),g++,g===h&&m.destroy());break;case i:x.level===o&&g<f?g++:x.level===o&&(fa(x,E,S),g++,g===h&&m.destroy());break;case c:X=new Date(x.timestamp),W=new Date(l),X>=W&&g<f?g++:X>=W&&g>=f&&(fa(x,E,S),g++,g===h&&m.destroy());break;case u:X=new Date(x.timestamp),V=new Date(d),X<=V&&g<f?g++:X<=V&&g>=f&&(fa(x,E,S),g++,g===h&&m.destroy());break;default:g<f?g++:(fa(x,E,S),g++,g===h&&m.destroy())}}return a(U,"onLogMessage"),await cse(m,"close"),S}a(hse,"readLog");function fa(e,t,r){t==="desc"?pse(e,r):t==="asc"?mse(e,r):r.push(e)}a(fa,"pushLineToResult");function pse(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(pse,"insertDescending");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,"insertAscending")});var cm=O((aCe,OH)=>{"use strict";var hb=require("joi"),{string:Cu,boolean:AH,date:Sse}=hb.types(),Tse=_t(),{validateSchemaExists:nCe,validateTableExists:sCe,validateSchemaName:iCe}=Si(),gse=L(),Rse=ft(),yH=ne();yH.initSync();var oCe=Cu.invalid(yH.get(gse.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),bH={operation:Cu.valid("add_node","update_node","set_node_replication"),node_name:Cu.optional(),subscriptions:hb.array().items({table:Cu.optional(),schema:Cu.optional(),database:Cu.optional(),subscribe:AH.required(),publish:AH.required().custom(yse),start_time:Sse.iso()})};function Ase(e){return Tse.validateBySchema(e,hb.object(bH))}a(Ase,"addUpdateNodeValidator");function yse(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(yse,"checkForFalsy");OH.exports={addUpdateNodeValidator:Ase,validation_schema:bH}});var IH=O((lCe,NH)=>{var bse=_t(),Ose={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};NH.exports=function(e){return bse.validateObject(e,Ose)}});var pb=O((dCe,PH)=>{"use strict";var Nse=IH(),Pu=require("passport"),Ise=require("passport-local").Strategy,wse=require("passport-http").BasicStrategy,Cse=require("util"),Pse=Hn(),CH=Cse.callbackify(Pse.findAndValidateUser),uCe=Pn(),Dse=L(),wH=mu();Pu.use(new Ise(function(e,t,r){CH(e,t,r)}));Pu.use(new wse(function(e,t,r){CH(e,t,r)}));Pu.serializeUser(function(e,t){t(null,e)});Pu.deserializeUser(function(e,t){t(null,e)});function Lse(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":Pu.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===Dse.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?wH.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):wH.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Pu.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(Lse,"authorize");function Mse(e,t){let r=Nse(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(Mse,"checkPermissions");PH.exports={authorize:Lse,checkPermissions:Mse}});var Ea=O((fCe,DH)=>{"use strict";var mb=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},Sb=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};DH.exports={Node:mb,NodeSubscription:Sb}});var MH=O((hCe,LH)=>{"use strict";var Use=L().OPERATIONS_ENUM,Tb=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=Use.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};LH.exports=Tb});var ff=O((mCe,UH)=>{"use strict";var gb=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},Rb=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)}};UH.exports={RemotePayloadObject:gb,RemotePayloadSubscription:Rb}});var BH=O((TCe,vH)=>{"use strict";var Ab=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}};vH.exports=Ab});var HH=O((OCe,xH)=>{"use strict";var vse=BH(),RCe=xt(),ACe=mt(),Bse=K(),{getSchemaPath:yCe,getTransactionAuditStorePath:bCe}=Rt(),{getDatabases:xse}=(Pe(),oe(ut));xH.exports=Hse;async function Hse(e){let t=new vse;try{let r=xse()[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){Bse.warn(`unable to stat table dbi due to ${r}`)}return t}a(Hse,"lmdbGetTableSize")});var FH=O((ICe,kH)=>{"use strict";var yb=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}};kH.exports=yb});var Lu=O((MCe,VH)=>{"use strict";var kse=require("fs-extra"),Fse=require("path"),Jr=require("systeminformation"),ha=K(),GH=kt(),CCe=ft(),Du=L(),Gse=HH(),qse=gi(),{getThreadInfo:qH}=ot(),Ef=ne();Ef.initSync();var $se=FH(),{openEnvironment:PCe}=mt(),{getSchemaPath:DCe}=Rt(),{database:LCe,databases:bb}=(Pe(),oe(ut)),lm;VH.exports={getHDBProcessInfo:wb,getNetworkInfo:Pb,getDiskInfo:Cb,getMemoryInfo:Ib,getCPUInfo:Nb,getTimeInfo:Ob,getSystemInformation:Db,systemInformation:Vse,getTableSize:Lb,getMetrics:Mb};function Ob(){return Jr.time()}a(Ob,"getTimeInfo");async function Nb(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:l,cache:u,...d}=await Jr.cpu();d.cpu_speed=await Jr.cpuCurrentSpeed();let{raw_currentload:_,raw_currentload_idle:E,raw_currentload_irq:f,raw_currentload_nice:h,raw_currentload_system:T,raw_currentload_user:m,cpus:g,...S}=await Jr.currentLoad();return S.cpus=[],g.forEach(y=>{let{raw_load:I,raw_load_idle:U,raw_load_irq:x,raw_load_nice:X,raw_load_system:W,raw_load_user:V,...se}=y;S.cpus.push(se)}),d.current_load=S,d}catch(e){return ha.error(`error in getCPUInfo: ${e}`),{}}}a(Nb,"getCPUInfo");async function Ib(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await Jr.mem();return Object.assign(s,process.memoryUsage())}catch(e){return ha.error(`error in getMemoryInfo: ${e}`),{}}}a(Ib,"getMemoryInfo");async function wb(){let e={core:[],clustering:[]};try{let t=await Jr.processes(),r;try{r=Number.parseInt(await kse.readFile(Fse.join(Ef.get(Du.CONFIG_PARAMS.ROOTPATH),Du.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===Du.NODE_ERROR_CODES.ENOENT)ha.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 ha.error(`error in getHDBProcessInfo: ${t}`),e}}a(wb,"getHDBProcessInfo");async function Cb(){let e={};try{if(!Ef.get(Du.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 ha.error(`error in getDiskInfo: ${t}`),e}}a(Cb,"getDiskInfo");async function Pb(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return Ef.get(Du.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:d,carrier_changes:_,...E}=n;e.interfaces.push(E)}),(await Jr.networkStats()).forEach(n=>{let{rx_sec:s,tx_sec:i,ms:o,...c}=n;e.stats.push(c)})),e}catch(t){return ha.error(`error in getNetworkInfo: ${t}`),e}}a(Pb,"getNetworkInfo");async function Db(){if(lm!==void 0)return lm;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,lm=e,lm}catch(t){return ha.error(`error in getSystemInformation: ${t}`),e}}a(Db,"getSystemInformation");async function Lb(){let e=[],t=await qse.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await Gse(n));return e}a(Lb,"getTableSize");async function Mb(){let e={};for(let t in bb){let r=e[t]={},n=r.tables={};for(let s in bb[t])try{let i=bb[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,d,_]=l.trim().split(" ");return{pid:u,thread:d,txnid:_}}),i.auditStore)){let{treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:d,entryCount:_,overflowPages:E}=i.auditStore.getStats();r.audit={treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:d,entryCount:_,overflowPages:E}}let o=i.primaryStore.getStats(),c={};for(let l of["treeDepth","treeBranchPageCount","treeLeafPageCount","entryCount","overflowPages"])c[l]=o[l];n[s]=c}catch(i){ha.notify(`Error getting stats for table ${s}: ${i}`)}}return e}a(Mb,"getMetrics");async function $H(){if(Ef.get(Du.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await GH.getNATSReferences(),t=await GH.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($H,"getNatsStreamInfo");async function Vse(e){let t=new $se;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await Db(),t.time=Ob(),t.cpu=await Nb(),t.memory=await Ib(),t.disk=await Cb(),t.network=await Pb(),t.harperdb_processes=await wb(),t.table_size=await Lb(),t.metrics=await Mb(),t.threads=await qH(),t.replication=await $H(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await Db();break;case"time":t.time=Ob();break;case"cpu":t.cpu=await Nb();break;case"memory":t.memory=await Ib();break;case"disk":t.disk=await Cb();break;case"network":t.network=await Pb();break;case"harperdb_processes":t.harperdb_processes=await wb();break;case"table_size":t.table_size=await Lb();break;case"database_metrics":case"metrics":t.metrics=await Mb();break;case"threads":t.threads=await qH();break;case"replication":t.replication=await $H();break;default:break}return t}a(Vse,"systemInformation")});var Bc=O((vCe,KH)=>{"use strict";KH.exports={version:Kse,printVersion:Yse};var um=ru();function Kse(){if(um)return um.version}a(Kse,"version");function Yse(){um&&console.log(`HarperDB Version ${um.version}`)}a(Yse,"printVersion")});var ps=O((kCe,zH)=>{"use strict";var Wse=Vr(),Ub=te(),jse=require("util"),xc=L(),YH=ne();YH.initSync();var zse=pb(),WH=$r(),{Node:xCe,NodeSubscription:HCe}=Ea(),Qse=Ql(),Jse=MH(),{RemotePayloadObject:Xse,RemotePayloadSubscription:Zse}=ff(),{handleHDBError:eie,hdb_errors:tie}=_e(),{HTTP_STATUS_CODES:rie,HDB_ERROR_MSGS:nie}=tie,sie=Vs(),iie=Lu(),oie=Bc(),{getDatabases:aie}=(Pe(),oe(ut)),cie=jse.promisify(zse.authorize),lie=WH.searchByHash,uie=WH.searchByValue;zH.exports={authHeaderToUser:die,isEmpty:_ie,getNodeRecord:fie,upsertNodeRecord:Eie,buildNodePayloads:hie,checkClusteringEnabled:pie,getAllNodeRecords:mie,getSystemInfo:Sie,reverseSubscription:jH};async function die(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await cie(t,null),e}a(die,"authHeaderToUser");function _ie(e){return e==null}a(_ie,"isEmpty");async function fie(e){let t=new Qse(xc.SYSTEM_SCHEMA_NAME,xc.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return lie(t)}a(fie,"getNodeRecord");async function Eie(e){let t=new Jse(xc.SYSTEM_SCHEMA_NAME,xc.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return Wse.upsert(t)}a(Eie,"upsertNodeRecord");function jH(e){if(Ub.isEmpty(e.subscribe)||Ub.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(jH,"reverseSubscription");function hie(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,d=Ub.getTableHashAttribute(l,u),{subscribe:_,publish:E}=jH(c),f=aie()[l]?.[u],h=new Zse(l,u,d,E,_,c.start_time,f.schemaDefined?f.attributes:void 0);s.push(h)}return new Xse(r,t,s,n)}a(hie,"buildNodePayloads");function pie(){if(!YH.get(xc.CONFIG_PARAMS.CLUSTERING_ENABLED))throw eie(new Error,nie.CLUSTERING_NOT_ENABLED,rie.BAD_REQUEST,void 0,void 0,!0)}a(pie,"checkClusteringEnabled");async function mie(){let e=new sie(xc.SYSTEM_SCHEMA_NAME,xc.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await uie(e))}a(mie,"getAllNodeRecords");async function Sie(){let e=await iie.getSystemInformation();return{hdb_version:oie.version(),node_version:e.node_version,platform:e.platform}}a(Sie,"getSystemInfo")});var vb=O((GCe,nk)=>{"use strict";var dm=kt(),QH=te(),JH=ft(),XH=L(),_m=K(),ZH=lf(),Tie=Xl(),{RemotePayloadObject:gie}=ff(),{handleHDBError:ek,hdb_errors:Rie}=_e(),{HTTP_STATUS_CODES:tk}=Rie,{NodeSubscription:rk}=Ea();nk.exports=Aie;async function Aie(e,t){let r;try{r=await dm.request(`${t}.${JH.REQUEST_SUFFIX}`,new gie(XH.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),_m.trace("Response from remote describe all request:",r)}catch(o){_m.error(`addNode received error from describe all request to remote node: ${o}`);let c=dm.requestErrorHandler(o,"add_node",t);throw ek(new Error,c,tk.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===JH.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw ek(new Error,o,tk.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===XH.SYSTEM_SCHEMA_NAME){await dm.createLocalTableStream(l,c);let h=new rk(l,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let u=QH.doesSchemaExist(l),d=n[l]!==void 0,_=c?QH.doesTableExist(l,c):!0,E=c?n?.[l]?.[c]!==void 0:!0;if(!u&&!d||!_&&!E){s.push(o);continue}if(!u&&d&&(_m.trace(`addNode creating schema: ${l}`),await ZH.createSchema({operation:"create_schema",schema:l})),!_&&E){_m.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let h=new Tie(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(h.attributes=n[l][c].attributes),await ZH.createTable(h)}await dm.createLocalTableStream(l,c);let f=new rk(l,c,o.publish,o.subscribe);f.start_time=o.start_time,i.push(f)}return{added:i,skipped:s}}a(Aie,"reviewSubscriptions")});var Hc={};je(Hc,{addNodeBack:()=>Iie,removeNodeBack:()=>wie,setNode:()=>Nie});async function Nie(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=Qs(t)):t=em(r);let n=(0,ik.validateBySchema)(e,Oie);if(n)throw(0,co.handleHDBError)(n,n.message,bie.BAD_REQUEST,void 0,void 0,!0);if(e.operation==="remove_node"){if(!t&&!r)throw new co.ClientError("url or hostname is required for remove_node operation");let f=r,h=Sr(),T=await h.get(f);if(!T)throw new co.ClientError(f+" does not exist");try{await cf({url:T.url},{operation:hf.OPERATIONS_ENUM.REMOVE_NODE_BACK,name:T?.subscriptions?.length>0?at():f},void 0)}catch(m){$n.warn(`Error removing node from target node ${f}, if it is offline and we be online in the future, you may need to clean up this node manually, or retry:`,m)}return await h.delete(f),`Successfully removed '${f}' from cluster`}if(!t)throw new co.ClientError("url required for this operation");let s=na();if(s==null)throw new co.ClientError("replication url is missing from harperdb-config.yaml");let i,o,c;if(t?.startsWith("wss:")){i=await(0,ms.getReplicationCert)();let f=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)(),$n.info("Sending CSR to target node:",t)):f&&(c=f.certificate,$n.info("Sending CA named",f.name,"to target node",t))}let l={operation:hf.OPERATIONS_ENUM.ADD_NODE_BACK,hostname:(0,ok.get)(hf.CONFIG_PARAMS.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(sk):l.subscriptions=null,e.hasOwnProperty("subscribe")||e.hasOwnProperty("publish")){let f=sk(e);l.subscribe=f.subscribe,l.publish=f.publish}e?.authorization?.username&&e?.authorization?.password&&(e.authorization="Basic "+Buffer.from(e.authorization.username+":"+e.authorization.password).toString("base64"));let u,d;try{u=await cf({url:t},l,e)}catch(f){f.message=`Error returned from ${t}: `+f.message,$n.warn("Error adding node:",t,"to cluster:",f),d=f}if(o&&(!u?.certificate||!u?.certificate?.includes?.("BEGIN CERTIFICATE")))throw d?(d.message+=" and connection was required to sign certificate",d):new Error(`Unexpected certificate signature response from node ${t} response: ${JSON.stringify(u)}`);o&&($n.info("CSR response received from node:",t,"saving certificate and CA in hdb_certificate"),await(0,ms.setCertTable)({name:yie.certificateFromPem(u.signingCA).issuer.getField("CN").value,certificate:u.signingCA,is_authority:!0}),u.certificate&&await(0,ms.setCertTable)({name:at(),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 _={url:t,ca:u?.usingCA};if(e.hostname&&(_.name=e.hostname),e.subscriptions?_.subscriptions=e.subscriptions:_.replicates=!0,e.start_time&&(_.start_time=typeof e.start_time=="string"?new Date(e.start_time).getTime():e.start_time),e.retain_authorization&&(_.authorization=e.authorization),_.replicates){let f={url:s,ca:c,replicates:!0,subscriptions:null};e.retain_authorization&&(f.authorization=e.authorization),e.start_time&&(f.start_time=e.start_time),await oo(at(),f)}await oo(u?u.nodeName:_.name??Qs(t),_);let E;return e.operation==="update_node"?E=`Successfully updated '${t}'`:E=`Successfully added '${t}' to cluster`,d&&(E+=" but there was an error updating target node: "+d.message),E}async function Iie(e){$n.trace("addNodeBack received request:",e);let t=await(0,ms.signCertificate)(e),r;e.csr?(r=t.signingCA,$n.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,$n.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:na(),ca:s?.certificate,replicates:!0,subscriptions:null};e.start_time&&(i.start_time=e.start_time),e.authorization&&(i.authorization=e.authorization),await oo(at(),i)}return await oo(e.hostname,n),t.nodeName=at(),t.usingCA=s?.certificate,$n.info("addNodeBack responding to:",e.url,"with CA named:",s?.name),t}async function wie(e){$n.trace("removeNodeBack received request:",e),await Sr().delete(e.name)}function sk(e){let{subscribe:t,publish:r}=e;return{...e,subscribe:r,publish:t}}var ms,ik,Mu,ok,hf,$n,co,yie,bie,Oie,kc=Ie(()=>{ms=M(Zs()),ik=M(_t()),Mu=M(require("joi")),ok=M(ne()),hf=M(L());J_();fu();us();$n=M(K()),co=M(_e()),{pki:yie}=require("node-forge"),{HTTP_STATUS_CODES:bie}=co.hdb_errors,Oie=Mu.default.object({hostname:Mu.default.string(),verify_tls:Mu.default.boolean(),replicates:Mu.default.boolean(),subscriptions:Mu.default.array()});a(Nie,"setNode");a(Iie,"addNodeBack");a(wie,"removeNodeBack");a(sk,"reverseSubscription")});var mm=O((zCe,ck)=>{"use strict";var{handleHDBError:fm,hdb_errors:Cie}=_e(),{HTTP_STATUS_CODES:Em}=Cie,{addUpdateNodeValidator:Pie}=cm(),hm=K(),pm=L(),ak=ft(),Die=te(),pf=kt(),mf=ps(),Bb=ne(),Lie=vb(),{Node:Mie,NodeSubscription:Uie}=Ea(),{broadcast:vie}=ot(),{setNode:Bie}=(kc(),oe(Hc)),WCe=ne(),jCe=L(),xie="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",Hie="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",kie=Bb.get(pm.CONFIG_PARAMS.CLUSTERING_NODENAME);ck.exports=Fie;async function Fie(e,t=!1){if(hm.trace("addNode called with:",e),Bb.get(pm.CONFIG_PARAMS.REPLICATION_URL)||Bb.get(pm.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Bie(e);mf.checkClusteringEnabled();let r=Pie(e);if(r)throw fm(r,r.message,Em.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let _=await mf.getNodeRecord(n);if(!Die.isEmptyOrZeroLength(_))throw fm(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,Em.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await Lie(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=xie,o;let c=mf.buildNodePayloads(s,kie,pm.OPERATIONS_ENUM.ADD_NODE,await mf.getSystemInfo()),l=[];for(let _=0,E=s.length;_<E;_++){let f=s[_];s[_].start_time===void 0&&delete s[_].start_time,l.push(new Uie(f.schema,f.table,f.publish,f.subscribe))}hm.trace("addNode sending remote payload:",c);let u;try{u=await pf.request(`${n}.${ak.REQUEST_SUFFIX}`,c)}catch(_){hm.error(`addNode received error from request: ${_}`);for(let f=0,h=s.length;f<h;f++){let T=s[f];T.publish=!1,T.subscribe=!1,await pf.updateRemoteConsumer(T,n)}let E=pf.requestErrorHandler(_,"add_node",n);throw fm(new Error,E,Em.INTERNAL_SERVER_ERROR,"error",E)}if(u.status===ak.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let _=`Error returned from remote node ${n}: ${u.message}`;throw fm(new Error,_,Em.INTERNAL_SERVER_ERROR,"error",_)}hm.trace(u);for(let _=0,E=s.length;_<E;_++){let f=s[_];await pf.updateRemoteConsumer(f,n),f.subscribe===!0&&await pf.updateConsumerIterator(f.schema,f.table,n,"start")}let d=new Mie(n,l,u.system_info);return await mf.upsertNodeRecord(d),vie({type:"nats_update"}),i.length>0?o.message=Hie:o.message=`Successfully added '${n}' to manifest`,o}a(Fie,"addNode")});var Fb=O((XCe,uk)=>{"use strict";var{handleHDBError:xb,hdb_errors:Gie}=_e(),{HTTP_STATUS_CODES:Hb}=Gie,{addUpdateNodeValidator:qie}=cm(),Sf=K(),Sm=L(),lk=ft(),JCe=te(),Tf=kt(),gf=ps(),kb=ne(),{cloneDeep:$ie}=require("lodash"),Vie=vb(),{Node:Kie,NodeSubscription:Yie}=Ea(),{broadcast:Wie}=ot(),{setNode:jie}=(kc(),oe(Hc)),zie="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",Qie="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Jie=kb.get(Sm.CONFIG_PARAMS.CLUSTERING_NODENAME);uk.exports=Xie;async function Xie(e){if(Sf.trace("updateNode called with:",e),kb.get(Sm.CONFIG_PARAMS.REPLICATION_URL)??kb.get(Sm.CONFIG_PARAMS.REPLICATION_HOSTNAME))return jie(e);gf.checkClusteringEnabled();let t=qie(e);if(t)throw xb(t,t.message,Hb.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await gf.getNodeRecord(r);s.length>0&&(n=$ie(s));let{added:i,skipped:o}=await Vie(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=zie,c;let l=gf.buildNodePayloads(i,Jie,Sm.OPERATIONS_ENUM.UPDATE_NODE,await gf.getSystemInfo());for(let d=0,_=i.length;d<_;d++){let E=i[d];Sf.trace(`updateNode updating work stream for node: ${r} subscription:`,E),i[d].start_time===void 0&&delete i[d].start_time}Sf.trace("updateNode sending remote payload:",l);let u;try{u=await Tf.request(`${r}.${lk.REQUEST_SUFFIX}`,l)}catch(d){Sf.error(`updateNode received error from request: ${d}`);let _=Tf.requestErrorHandler(d,"update_node",r);throw xb(new Error,_,Hb.INTERNAL_SERVER_ERROR,"error",_)}if(u.status===lk.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${r}: ${u.message}`;throw xb(new Error,d,Hb.INTERNAL_SERVER_ERROR,"error",d)}Sf.trace(u);for(let d=0,_=i.length;d<_;d++){let E=i[d];await Tf.updateRemoteConsumer(E,r),E.subscribe===!0?await Tf.updateConsumerIterator(E.schema,E.table,r,"start"):await Tf.updateConsumerIterator(E.schema,E.table,r,"stop")}return n||(n=[new Kie(r,[],u.system_info)]),await Zie(n[0],i,u.system_info),o.length>0?c.message=Qie:c.message=`Successfully updated '${r}'`,c}a(Xie,"updateNode");async function Zie(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 d=n.subscriptions[l];if(d.schema===o.schema&&d.table===o.table){d.publish=o.publish,d.subscribe=o.subscribe,c=!0;break}}c||n.subscriptions.push(new Yie(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await gf.upsertNodeRecord(n),Wie({type:"nats_update"})}a(Zie,"updateNodeTable")});var hk=O((ePe,Ek)=>{"use strict";var fk=require("joi"),{string:dk}=fk.types(),eoe=_t(),_k=L(),toe=ne(),roe=ft();Ek.exports=noe;function noe(e){let t=dk.invalid(toe.get(_k.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(roe.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=fk.object({operation:dk.valid(_k.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return eoe.validateBySchema(e,r)}a(noe,"removeNodeValidator")});var Tm=O((rPe,gk)=>{"use strict";var{handleHDBError:pk,hdb_errors:soe}=_e(),{HTTP_STATUS_CODES:mk}=soe,ioe=hk(),Rf=K(),Sk=ps(),ooe=te(),Uu=L(),Tk=ft(),Gb=kt(),qb=ne(),{RemotePayloadObject:aoe}=ff(),{NodeSubscription:coe}=Ea(),loe=Jl(),uoe=zo(),{broadcast:doe}=ot(),{setNode:_oe}=(kc(),oe(Hc)),foe=qb.get(Uu.CONFIG_PARAMS.CLUSTERING_NODENAME);gk.exports=Eoe;async function Eoe(e){if(Rf.trace("removeNode called with:",e),qb.get(Uu.CONFIG_PARAMS.REPLICATION_URL)??qb.get(Uu.CONFIG_PARAMS.REPLICATION_HOSTNAME))return _oe(e);Sk.checkClusteringEnabled();let t=ioe(e);if(t)throw pk(t,t.message,mk.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await Sk.getNodeRecord(r);if(ooe.isEmptyOrZeroLength(n))throw pk(new Error,`Node '${r}' was not found.`,mk.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new aoe(Uu.OPERATIONS_ENUM.REMOVE_NODE,foe,[]),i,o=!1;for(let l=0,u=n.subscriptions.length;l<u;l++){let d=n.subscriptions[l];d.subscribe===!0&&await Gb.updateConsumerIterator(d.schema,d.table,r,"stop");try{await Gb.updateRemoteConsumer(new coe(d.schema,d.table,!1,!1),r)}catch(_){Rf.error(_)}}try{i=await Gb.request(`${r}.${Tk.REQUEST_SUFFIX}`,s),Rf.trace("Remove node reply from remote node:",r,i)}catch(l){Rf.error("removeNode received error from request:",l),o=!0}let c=new loe(Uu.SYSTEM_SCHEMA_NAME,Uu.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await uoe.deleteRecord(c),doe({type:"nats_update"}),i?.status===Tk.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(Rf.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(Eoe,"removeNode")});var yk=O((sPe,Ak)=>{"use strict";var Rk=require("joi"),{string:hoe,array:poe}=Rk.types(),moe=_t(),Soe=cm();Ak.exports=Toe;function Toe(e){let t=Rk.object({operation:hoe.valid("configure_cluster").required(),connections:poe.items(Soe.validation_schema).required()});return moe.validateBySchema(e,t)}a(Toe,"configureClusterValidator")});var $b=O((oPe,wk)=>{"use strict";var bk=L(),gm=K(),goe=te(),Roe=ne(),Aoe=Tm(),yoe=mm(),boe=ps(),Ooe=yk(),{handleHDBError:Ok,hdb_errors:Noe}=_e(),{HTTP_STATUS_CODES:Nk}=Noe,Ioe="Configure cluster complete.",woe="Failed to configure the cluster. Check the logs for more details.",Coe="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";wk.exports=Poe;async function Poe(e){gm.trace("configure cluster called with:",e);let t=Ooe(e);if(t)throw Ok(t,t.message,Nk.BAD_REQUEST,void 0,void 0,!0);let r=await boe.getAllNodeRecords(),n=[];if(Roe.get(bk.CONFIG_PARAMS.CLUSTERING_ENABLED)){for(let d=0,_=r.length;d<_;d++){let E=await Ik(Aoe,{operation:bk.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[d].name},r[d].name);n.push(E)}gm.trace("All results from configure_cluster remove node:",n)}let s=[],i=e.connections.length;for(let d=0;d<i;d++){let _=e.connections[d],E=await Ik(yoe,_,_.node_name);s.push(E)}gm.trace("All results from configure_cluster add node:",s);let o=[],c=[],l=!1,u=n.concat(s);for(let d=0,_=u.length;d<_;d++){let E=u[d];E.status==="rejected"&&(gm.error(E.node_name,E?.error?.message,E?.error?.stack),o.includes(E.node_name)||o.push(E.node_name)),(E?.result?.message?.includes?.("Successfully")||E?.result?.includes?.("Successfully"))&&(l=!0),!(typeof E.result=="string"&&E.result.includes("Successfully removed")||E.status==="rejected")&&c.push({node_name:E?.node_name,response:E?.result})}if(goe.isEmptyOrZeroLength(o))return{message:Ioe,connections:c};if(l)return{message:Coe,failed_nodes:o,connections:c};throw Ok(new Error,woe,Nk.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(Poe,"configureCluster");async function Ik(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}a(Ik,"functionWrapper")});var Lk=O((cPe,Dk)=>{"use strict";var Af=require("joi"),Doe=_t(),{validateSchemaExists:Ck,validateTableExists:Loe,validateSchemaName:Pk}=Si(),Moe=Af.object({operation:Af.string().valid("purge_stream"),schema:Af.string().custom(Ck).custom(Pk).optional(),database:Af.string().custom(Ck).custom(Pk).optional(),table:Af.string().custom(Loe).required()});function Uoe(e){return Doe.validateBySchema(e,Moe)}a(Uoe,"purgeStreamValidator");Dk.exports=Uoe});var Vb=O((uPe,Mk)=>{"use strict";var{handleHDBError:voe,hdb_errors:Boe}=_e(),{HTTP_STATUS_CODES:xoe}=Boe,Hoe=Lk(),koe=kt(),Foe=ps();Mk.exports=Goe;async function Goe(e){e.schema=e.schema??e.database;let t=Hoe(e);if(t)throw voe(t,t.message,xoe.BAD_REQUEST,void 0,void 0,!0);Foe.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await koe.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}a(Goe,"purgeStream")});var Wb=O((_Pe,Fk)=>{"use strict";var Yb=ps(),qoe=kt(),Rm=ne(),vu=L(),Fc=ft(),$oe=te(),Kb=K(),{RemotePayloadObject:Voe}=ff(),{ErrorCode:Uk}=require("nats"),{parentPort:vk}=require("worker_threads"),{onMessageByType:Koe}=ot(),{getThisNodeName:Yoe}=(us(),oe(la)),{requestClusterStatus:Woe}=(J_(),oe(LB)),Bk=Rm.get(vu.CONFIG_PARAMS.CLUSTERING_ENABLED),xk=Rm.get(vu.CONFIG_PARAMS.CLUSTERING_NODENAME);Fk.exports={clusterStatus:joe,buildNodeStatus:kk};var Hk;Koe("cluster-status",async e=>{Hk(e)});async function joe(){if(Rm.get(vu.CONFIG_PARAMS.REPLICATION_URL)||Rm.get(vu.CONFIG_PARAMS.REPLICATION_HOSTNAME)){let n;return vk?(vk.postMessage({type:"request-cluster-status"}),n=await new Promise(s=>{Hk=s})):n=Woe(),n.node_name=Yoe(),n.is_enabled=!0,n}let e={node_name:xk,is_enabled:Bk,connections:[]};if(!Bk)return e;let t=await Yb.getAllNodeRecords();if($oe.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(kk(t[n],e.connections));return await Promise.allSettled(r),e}a(joe,"clusterStatus");async function kk(e,t){let r=e.name,n=new Voe(vu.OPERATIONS_ENUM.CLUSTER_STATUS,xk,void 0,await Yb.getSystemInfo()),s,i,o=Fc.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await qoe.request(Fc.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===Fc.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Fc.CLUSTER_STATUS_STATUSES.CLOSED,Kb.error(`Error getting node status from ${r} `,s))}catch(l){Kb.warn(`Error getting node status from ${r}`,l),l.code===Uk.NoResponders?o=Fc.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===Uk.Timeout?o=Fc.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Fc.CLUSTER_STATUS_STATUSES.CLOSED}let c=new zoe(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!==vu.PRE_4_0_0_VERSION&&await Yb.upsertNodeRecord(l)}catch(l){Kb.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}a(kk,"buildNodeStatus");function zoe(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(zoe,"NodeStatusObject")});var zb=O((EPe,Gk)=>{"use strict";var{handleHDBError:Qoe,hdb_errors:Joe}=_e(),{HTTP_STATUS_CODES:Xoe}=Joe,Zoe=kt(),eae=ps(),jb=te(),Am=require("joi"),tae=_t(),rae=2e3,nae=Am.object({timeout:Am.number().min(1),connected_nodes:Am.boolean(),routes:Am.boolean()});Gk.exports=sae;async function sae(e){eae.checkClusteringEnabled();let t=tae.validateBySchema(e,nae);if(t)throw Qoe(t,t.message,Xoe.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||jb.autoCastBoolean(n),o=s===void 0||jb.autoCastBoolean(s),c={nodes:[]},l=await Zoe.getServerList(r??rae),u={};if(i)for(let d=0,_=l.length;d<_;d++){let E=l[d].statsz;E&&(u[l[d].server.name]=E.routes)}for(let d=0,_=l.length;d<_;d++){if(l[d].statsz)continue;let E=l[d].server,f=l[d].data;if(E.name.endsWith("-hub")){let h={name:E.name.slice(0,-4),response_time:l[d].response_time};i&&(h.connected_nodes=[],u[E.name]&&u[E.name].forEach(T=>{h.connected_nodes.includes(T.name.slice(0,-4))||h.connected_nodes.push(T.name.slice(0,-4))})),o&&(h.routes=f.cluster?.urls?f.cluster?.urls.map(T=>({host:T.split(":")[0],port:jb.autoCast(T.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(sae,"clusterNetwork")});var Kk=O((pPe,Vk)=>{"use strict";var Qb=require("joi"),qk=_t(),{route_constraints:$k}=BR();Vk.exports={setRoutesValidator:iae,deleteRoutesValidator:oae};function iae(e){let t=Qb.object({server:Qb.valid("hub","leaf"),routes:$k.required()});return qk.validateBySchema(e,t)}a(iae,"setRoutesValidator");function oae(e){let t=Qb.object({routes:$k.required()});return qk.validateBySchema(e,t)}a(oae,"deleteRoutesValidator")});var ym=O((SPe,Xk)=>{"use strict";var lo=Ct(),Jb=te(),Ss=L(),Bu=ne(),Yk=Kk(),{handleHDBError:Wk,hdb_errors:aae}=_e(),{HTTP_STATUS_CODES:jk}=aae,zk="cluster routes successfully set",Qk="cluster routes successfully deleted";Xk.exports={setRoutes:lae,getRoutes:uae,deleteRoutes:dae};function cae(e){let t=lo.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=Jb.autoCast(l.port);let u=r.some(_=>_.host===l.host&&_.port===l.port),d=n.some(_=>_.host===l.host&&_.port===l.port);u||d?s.push(l):(r.push(l),i.push(l))}return e.server==="hub"?lo.updateConfigValue(Ss.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r):lo.updateConfigValue(Ss.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,r),{message:zk,set:i,skipped:s}}a(cae,"setRoutesNats");function lae(e){let t=Yk.setRoutesValidator(e);if(t)throw Wk(t,t.message,jk.BAD_REQUEST,void 0,void 0,!0);if(Bu.get(Ss.CONFIG_PARAMS.CLUSTERING_ENABLED))return cae(e);let r=[],n=[],s=Bu.get(Ss.CONFIG_PARAMS.REPLICATION_ROUTES)??[];return e.routes.forEach(i=>{Jk(s,i)?n.push(i):(s.push(i),r.push(i))}),lo.updateConfigValue(Ss.CONFIG_PARAMS.REPLICATION_ROUTES,s),{message:zk,set:r,skipped:n}}a(lae,"setRoutes");function Jk(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(Jk,"existsInArray");function uae(){if(Bu.get(Ss.CONFIG_PARAMS.CLUSTERING_ENABLED)){let e=lo.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}else return Bu.get(Ss.CONFIG_PARAMS.REPLICATION_ROUTES)??[]}a(uae,"getRoutes");function dae(e){let t=Yk.deleteRoutesValidator(e);if(t)throw Wk(t,t.message,jk.BAD_REQUEST,void 0,void 0,!0);if(Bu.get(Ss.CONFIG_PARAMS.CLUSTERING_ENABLED))return _ae(e);let r=[],n=[],s=Bu.get(Ss.CONFIG_PARAMS.REPLICATION_ROUTES)??[],i=[];return s.forEach(o=>{Jk(e.routes,o)?r.push(o):(i.push(o),n.push(o))}),lo.updateConfigValue(Ss.CONFIG_PARAMS.REPLICATION_ROUTES,i),{message:Qk,deleted:r,skipped:n}}a(dae,"deleteRoutes");function _ae(e){let t=lo.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 d=e.routes[l],_=!1;for(let E=0,f=r.length;E<f;E++){let h=r[E];if(d.host===h.host&&d.port===h.port){r.splice(E,1),_=!0,o=!0,s.push(d);break}}if(!_){let E=!0;for(let f=0,h=n.length;f<h;f++){let T=n[f];if(d.host===T.host&&d.port===T.port){n.splice(f,1),c=!0,E=!1,s.push(d);break}}E&&i.push(d)}}return o&&(r=Jb.isEmptyOrZeroLength(r)?null:r,lo.updateConfigValue(Ss.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r)),c&&(n=Jb.isEmptyOrZeroLength(n)?null:n,lo.updateConfigValue(Ss.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:Qk,deleted:s,skipped:i}}a(_ae,"deleteRoutesNats")});var eF=O((gPe,Zk)=>{"use strict";var yf=require("alasql"),Gc=require("recursive-iterator"),ei=K(),fae=te(),bf=L(),Xb=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,hae(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=>bf.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=>!bf.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][bf.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=Eae(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=>!bf.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let d=new yf.yy.Column({columnid:u});s.tableid&&(d.tableid=s.tableid),this.ast.columns.push(d),l.includes(u)||l.push(u)}),this.affected_attributes.get(i).set(o,l)}}),this.ast}};function Eae(e){return e.filter(t=>t[bf.PERMS_CRUD_ENUM.READ])}a(Eae,"filterReadRestrictedAttrs");function hae(e,t,r,n,s){pae(e,t,r,n,s)}a(hae,"interpretAST");function Of(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(Of,"addSchemaTableToMap");function pae(e,t,r,n,s){if(!e){ei.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof yf.yy.Insert?gae(e,t,r):e instanceof yf.yy.Select?mae(e,t,r,n,s):e instanceof yf.yy.Update?Sae(e,t,r):e instanceof yf.yy.Delete?Tae(e,t,r):ei.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(pae,"getRecordAttributesAST");function mae(e,t,r,n,s){if(!e){ei.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(fae.isEmptyOrZeroLength(i)){ei.error("No schema specified");return}e.from.forEach(c=>{Of(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),Of(c.table,t,r,n,s)});let o=new Gc(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{ei.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 Gc(e.where),l=e.from[0].tableid;for(let{node:u}of c)if(u&&u.columnid){let d=u.tableid?u.tableid:l;if(!t.get(i).has(d))if(r.has(d))d=r.get(d);else{ei.info(`table specified as ${d} not found.`);continue}t.get(i).get(d).indexOf(u.columnid)<0&&t.get(i).get(d).push(u.columnid)}}if(e.joins&&e.joins.forEach(c=>{let l=new Gc(c.on);for(let{node:u}of l)if(u&&u.columnid){let d=u.tableid,_=s.get(d);if(!t.get(_).has(d))if(r.has(d))d=r.get(d);else{ei.info(`table specified as ${d} not found.`);continue}t.get(_).get(d).indexOf(u.columnid)<0&&t.get(_).get(d).push(u.columnid)}}),e.order){let c=new Gc(e.order);for(let{node:l}of c)if(l&&l.columnid){let u=l.tableid,d=n.has(u)?n.get(u):i;if(u||(u=e.from[0].tableid),!t.get(d).has(u))if(r.has(u))u=r.get(u);else{ei.info(`table specified as ${u} not found.`);return}t.get(d).get(u).indexOf(l.columnid)<0&&t.get(d).get(u).push(l.columnid)}}}a(mae,"getSelectAttributes");function Sae(e,t,r){if(!e){ei.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new Gc(e.columns),s=e.table.databaseid;Of(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&Zb(e.table.tableid,s,i.columnid,t,r)}a(Sae,"getUpdateAttributes");function Tae(e,t,r){if(!e){ei.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new Gc(e.where),s=e.table.databaseid;Of(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&Zb(e.table.tableid,s,i.columnid,t,r)}a(Tae,"getDeleteAttributes");function gae(e,t,r){if(!e){ei.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new Gc(e.columns),s=e.into.databaseid;Of(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&Zb(e.into.tableid,s,i.columnid,t,r)}a(gae,"getInsertAttributes");function Zb(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(Zb,"pushAttribute");Zk.exports=Xb});var rO=O((APe,sF)=>{var bm=_c(),tF=require("chalk"),Vn=K(),rF=require("prompt"),{promisify:Rae}=require("util"),eO=L(),Aae=require("fs-extra"),yae=require("path"),bae=te(),Oae=Bc(),nF=ne();nF.initSync();var Nae=require("moment"),Iae=Rae(rF.get),wae=yae.join(nF.getHdbBasePath(),eO.LICENSE_KEY_DIR_NAME,eO.LICENSE_FILE_NAME,eO.LICENSE_FILE_NAME);sF.exports={getFingerprint:Pae,setLicense:Cae,parseLicense:tO,register:Dae,getRegistrationInfo:Mae};async function Cae(e){if(e&&e.key&&e.company){try{Vn.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await tO(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw Vn.error(r),Vn.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(Cae,"setLicense");async function Pae(){let e={};try{e=await bm.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw Vn.error(r),Vn.error(t),new Error(r)}return e}a(Pae,"getFingerprint");async function tO(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");Vn.info("Validating license input...");let r=bm.validateLicense(e,t);if(Vn.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(Vn.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(Vn.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{Vn.info("writing license to disk"),await Aae.writeFile(wae,JSON.stringify({license_key:e,company:t}))}catch(n){throw Vn.error("Failed to write License"),n}return"Registration successful."}a(tO,"parseLicense");async function Dae(){let e=await Lae();return tO(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(Dae,"register");async function Lae(){let e=await bm.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:tF.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:tF.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{rF.start()}catch(n){Vn.error(n)}let r;try{r=await Iae(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(Lae,"promptForRegistration");async function Mae(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await bm.getLicense()}catch(r){throw Vn.error(`There was an error when searching licenses due to: ${r.message}`),r}if(bae.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=Oae.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=Nae.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(Mae,"getRegistrationInfo")});var oF=O((bPe,iF)=>{"use strict";var Uae=ft(),nO=class{static{a(this,"HubConfigObject")}constructor(t,r,n,s,i,o,c,l,u,d,_,E,f,h){this.port=t,o===null&&(o=void 0),this.server_name=r+Uae.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:d,port:_,routes:E,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l}},this.accounts={SYS:{users:f},HDB:{users:h}},this.system_account="SYS"}};iF.exports=nO});var lF=O((NPe,cF)=>{"use strict";var aF=ft(),sO=class{static{a(this,"LeafConfigObject")}constructor(t,r,n,s,i,o,c,l,u,d,_){this.port=t,_===null&&(_=void 0),this.server_name=r+aF.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+aF.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:d,ca_file:_,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:_,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:_,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:l,jetstream:"enabled"}},this.system_account="SYS"}};cF.exports=sO});var dF=O((wPe,uF)=>{"use strict";var iO=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};uF.exports=iO});var fF=O((PPe,_F)=>{"use strict";var vae=ft(),oO=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+vae.SERVER_SUFFIX.ADMIN,this.password=r}};_F.exports=oO});var wm=O((LPe,pF)=>{"use strict";var qc=require("path"),$c=require("fs-extra"),Bae=oF(),xae=lF(),Hae=dF(),kae=fF(),aO=Hn(),Hu=te(),Tn=Ct(),Nm=L(),Nf=ft(),{CONFIG_PARAMS:Xt}=Nm,ku=K(),If=ne(),EF=eo(),cO=kt(),Fae=Zs(),xu="clustering",Gae=1e4,hF=50;pF.exports={generateNatsConfig:$ae,removeNatsConfig:Vae,getHubConfigPath:qae};function qae(){let e=If.get(Xt.ROOTPATH);return qc.join(e,xu,Nf.NATS_CONFIG_FILES.HUB_SERVER)}a(qae,"getHubConfigPath");async function $ae(e=!1,t=void 0){let r=If.get(Xt.ROOTPATH);$c.ensureDirSync(qc.join(r,"clustering","leaf")),If.initSync();let n=Tn.getConfigFromFile(Xt.CLUSTERING_TLS_CERT_AUTH),s=Tn.getConfigFromFile(Xt.CLUSTERING_TLS_PRIVATEKEY),i=Tn.getConfigFromFile(Xt.CLUSTERING_TLS_CERTIFICATE);!await $c.exists(i)&&!await $c.exists(!n)&&await Fae.createNatsCerts();let o=qc.join(r,xu,Nf.PID_FILES.HUB),c=qc.join(r,xu,Nf.PID_FILES.LEAF),l=Tn.getConfigFromFile(Xt.CLUSTERING_LEAFSERVER_STREAMS_PATH),u=qc.join(r,xu,Nf.NATS_CONFIG_FILES.HUB_SERVER),d=qc.join(r,xu,Nf.NATS_CONFIG_FILES.LEAF_SERVER),_=Tn.getConfigFromFile(Xt.CLUSTERING_TLS_INSECURE),E=Tn.getConfigFromFile(Xt.CLUSTERING_TLS_VERIFY),f=Tn.getConfigFromFile(Xt.CLUSTERING_NODENAME),h=Tn.getConfigFromFile(Xt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await cO.checkNATSServerInstalled()||Im("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let T=await aO.listUsers(),m=Tn.getConfigFromFile(Xt.CLUSTERING_USER),g=await aO.getClusterUser();(Hu.isEmpty(g)||g.active!==!0)&&Im(`Invalid cluster user '${m}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await Om(Xt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await Om(Xt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await Om(Xt.CLUSTERING_HUBSERVER_NETWORK_PORT),await Om(Xt.CLUSTERING_LEAFSERVER_NETWORK_PORT));let S=[],y=[];for(let[se,Q]of T.entries())Q.role?.role===Nm.ROLE_TYPES_ENUM.CLUSTER_USER&&Q.active&&(S.push(new kae(Q.username,EF.decrypt(Q.hash))),y.push(new Hae(Q.username,EF.decrypt(Q.hash))));let I=[],{hub_routes:U}=Tn.getClusteringRoutes();if(!Hu.isEmptyOrZeroLength(U))for(let se of U)I.push(`tls://${g.sys_name_encoded}:${g.uri_encoded_d_hash}@${se.host}:${se.port}`);let x=new Bae(Tn.getConfigFromFile(Xt.CLUSTERING_HUBSERVER_NETWORK_PORT),f,o,i,s,n,_,E,h,Tn.getConfigFromFile(Xt.CLUSTERING_HUBSERVER_CLUSTER_NAME),Tn.getConfigFromFile(Xt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),I,S,y);n==null&&(delete x.tls.ca_file,delete x.leafnodes.tls.ca_file),t=Hu.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===Nm.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await $c.writeJson(u,x),ku.trace(`Hub server config written to ${u}`));let X=`tls://${g.sys_name_encoded}:${g.uri_encoded_d_hash}@0.0.0.0:${h}`,W=`tls://${g.uri_encoded_name}:${g.uri_encoded_d_hash}@0.0.0.0:${h}`,V=new xae(Tn.getConfigFromFile(Xt.CLUSTERING_LEAFSERVER_NETWORK_PORT),f,c,l,[X],[W],S,y,i,s,n,_);n==null&&delete V.tls.ca_file,(t===void 0||t===Nm.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await $c.writeJson(d,V),ku.trace(`Leaf server config written to ${d}`))}a($ae,"generateNatsConfig");async function Om(e){let t=If.get(e);return Hu.isEmpty(t)&&Im(`port undefined for '${e}'`),await Hu.isPortTaken(t)&&Im(`'${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(Om,"isPortAvailable");function Im(e){let t=`Error generating clustering config: ${e}`;ku.error(t),console.error(t),process.exit(1)}a(Im,"generateNatsConfigError");async function Vae(e){let{port:t,config_file:r}=cO.getServerConfig(e),{username:n,decrypt_hash:s}=await aO.getClusterUser(),i=0,o=2e3;for(;i<hF;){try{let d=await cO.createConnection(t,n,s,!1);if(d.protocol.connected===!0){d.close();break}}catch(d){ku.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${d}`)}if(i++,i>=hF)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 Hu.async_set_timeout(u)}let c="0".repeat(Gae),l=qc.join(If.get(Xt.ROOTPATH),xu,r);await $c.writeFile(l,c),await $c.remove(l),ku.notify(e,"started.")}a(Vae,"removeNatsConfig")});var AF=O((UPe,RF)=>{"use strict";var Kn=ne(),Kae=_c(),Ge=L(),wf=ft(),uo=require("path"),{PACKAGE_ROOT:Pm}=L(),mF=ne(),Cm=te(),Fu="/dev/null",Yae=uo.join(Pm,"launchServiceScripts"),SF=uo.join(Pm,"utility/scripts"),Wae=uo.join(SF,Ge.HDB_RESTART_SCRIPT),TF=uo.resolve(Pm,"dependencies",`${process.platform}-${process.arch}`,wf.NATS_BINARY_NAME);function gF(){let t=Kae.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 Cm.noBootFile()&&(n[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Cm.getEnvCliRootPath()),{name:Ge.PROCESS_DESCRIPTORS.HDB,script:Ge.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:Pm}}a(gF,"generateMainServerConfig");var jae=9930;function zae(){Kn.initSync(!0);let e=Kn.get(Ge.CONFIG_PARAMS.ROOTPATH),t=uo.join(e,"clustering",wf.NATS_CONFIG_FILES.HUB_SERVER),r=uo.join(Kn.get(Ge.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Ge.LOG_NAMES.HDB),n=mF.get(Ge.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=wf.LOG_LEVEL_FLAGS[Kn.get(Ge.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Ge.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==jae?"-"+n:""),script:TF,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 Kn.get(Ge.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Fu,i.error_file=Fu),i}a(zae,"generateNatsHubServerConfig");var Qae=9940;function Jae(){Kn.initSync(!0);let e=Kn.get(Ge.CONFIG_PARAMS.ROOTPATH),t=uo.join(e,"clustering",wf.NATS_CONFIG_FILES.LEAF_SERVER),r=uo.join(Kn.get(Ge.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Ge.LOG_NAMES.HDB),n=mF.get(Ge.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=wf.LOG_LEVEL_FLAGS[Kn.get(Ge.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Ge.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==Qae?"-"+n:""),script:TF,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 Kn.get(Ge.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Fu,i.error_file=Fu),i}a(Jae,"generateNatsLeafServerConfig");function Xae(){Kn.initSync();let e=uo.join(Kn.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:Yae,autorestart:!1};return Kn.get(Ge.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Fu,t.error_file=Fu),t}a(Xae,"generateClusteringUpgradeV4ServiceConfig");function Zae(){let e={[Ge.PROCESS_NAME_ENV_PROP]:Ge.PROCESS_DESCRIPTORS.RESTART_HDB};return Cm.noBootFile()&&(e[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Cm.getEnvCliRootPath()),{...{name:Ge.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:SF},script:Wae}}a(Zae,"generateRestart");function ece(){return{apps:[gF()]}}a(ece,"generateAllServiceConfigs");RF.exports={generateAllServiceConfigs:ece,generateMainServerConfig:gF,generateRestart:Zae,generateNatsHubServerConfig:zae,generateNatsLeafServerConfig:Jae,generateClusteringUpgradeV4ServiceConfig:Xae}});var Pf=O((xPe,BF)=>{"use strict";var ct=L(),tce=te(),fo=wm(),Dm=kt(),_o=ft(),pa=AF(),Lm=ne(),Vc=K(),rce=ps(),{startWorker:yF,onMessageFromWorkers:nce}=ot(),sce=Lu(),BPe=require("util"),ice=require("child_process"),oce=require("fs"),{execFile:ace}=ice,Je;BF.exports={enterPM2Mode:cce,start:ma,stop:lO,reload:OF,restart:NF,list:uO,describe:CF,connect:Eo,kill:fce,startAllServices:Ece,startService:dO,getUniqueServicesList:PF,restartAllServices:hce,isServiceRegistered:DF,reloadStopStart:LF,restartHdb:wF,deleteProcess:dce,startClusteringProcesses:UF,startClusteringThreads:vF,isHdbRestartRunning:_ce,isClusteringRunning:mce,stopClustering:pce,reloadClustering:Sce,expectedRestartOfChildren:IF};var Cf=!1;nce(e=>{e.type==="restart"&&Lm.initSync(!0)});function cce(){Cf=!0}a(cce,"enterPM2Mode");function Eo(){return Je||(Je=require("pm2")),new Promise((e,t)=>{Je.connect((r,n)=>{r&&t(r),e(n)})})}a(Eo,"connect");var Xr,lce=10,bF;function ma(e,t=!1){if(Cf)return uce(e);let r=ace(e.script,e.args.split(" "),e);r.name=e.name,r.config=e,r.on("exit",async i=>{let o=Xr.indexOf(r);o>-1&&Xr.splice(o,1),!bF&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<lce&&(oce.existsSync(fo.getHubConfigPath())?ma(e):(await fo.generateNatsConfig(!0),ma(e),await new Promise(c=>setTimeout(c,3e3)),await fo.removeNatsConfig(ct.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await fo.removeNatsConfig(ct.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let o=Lm.get(ct.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,l,u=0,d;for(;l=c.exec(i);){if(l.index&&_o.LOG_LEVEL_HIERARCHY[o]>=_o.LOG_LEVEL_HIERARCHY[d||"info"]){let f=d===_o.LOG_LEVELS.ERR||d===_o.LOG_LEVELS.WRN?Vc.OUTPUTS.STDERR:Vc.OUTPUTS.STDOUT;Vc.logCustomLevel(d||"info",f,n,i.slice(u,l.index).trim())}let[_,E]=l;u=l.index+_.length,d=_o.LOG_LEVELS[E]}if(_o.LOG_LEVEL_HIERARCHY[o]>=_o.LOG_LEVEL_HIERARCHY[d||"info"]){let _=d===_o.LOG_LEVELS.ERR||d===_o.LOG_LEVELS.WRN?Vc.OUTPUTS.STDERR:Vc.OUTPUTS.STDOUT;Vc.logCustomLevel(d||"info",_,n,i.slice(u).trim())}}if(a(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),!Xr&&(Xr=[],!t)){let i=a(()=>{bF=!0,Xr&&(Xr.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)}Xr.push(r)}a(ma,"start");function uce(e){return new Promise(async(t,r)=>{try{await Eo()}catch(n){r(n)}Je.start(e,(n,s)=>{n&&(Je.disconnect(),r(n)),Je.disconnect(),t(s)})})}a(uce,"startWithPM2");function lO(e){if(!Cf){for(let t of Xr||[])t.name===e&&(Xr.splice(Xr.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Eo()}catch(n){r(n)}Je.stop(e,async(n,s)=>{n&&(Je.disconnect(),r(n)),Je.delete(e,(i,o)=>{i&&(Je.disconnect(),r(n)),Je.disconnect(),t(o)})})})}a(lO,"stop");function OF(e){return new Promise(async(t,r)=>{try{await Eo()}catch(n){r(n)}Je.reload(e,(n,s)=>{n&&(Je.disconnect(),r(n)),Je.disconnect(),t(s)})})}a(OF,"reload");function NF(e){if(!Cf){IF();for(let t of Xr||[])t.name===e&&t.kill()}return new Promise(async(t,r)=>{try{await Eo()}catch(n){r(n)}Je.restart(e,(n,s)=>{Je.disconnect(),t(s)})})}a(NF,"restart");function IF(){for(let e of Xr||[])e.config&&(e.config.restarts=0)}a(IF,"expectedRestartOfChildren");function dce(e){return new Promise(async(t,r)=>{try{await Eo()}catch(n){r(n)}Je.delete(e,(n,s)=>{n&&(Je.disconnect(),r(n)),Je.disconnect(),t(s)})})}a(dce,"deleteProcess");async function wF(){await ma(pa.generateRestart())}a(wF,"restartHdb");async function _ce(){let e=await uO();for(let t in e)if(e[t].name===ct.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(_ce,"isHdbRestartRunning");function uO(){return new Promise(async(e,t)=>{try{await Eo()}catch(r){t(r)}Je.list((r,n)=>{r&&(Je.disconnect(),t(r)),Je.disconnect(),e(n)})})}a(uO,"list");function CF(e){return new Promise(async(t,r)=>{try{await Eo()}catch(n){r(n)}Je.describe(e,(n,s)=>{n&&(Je.disconnect(),r(n)),Je.disconnect(),t(s)})})}a(CF,"describe");function fce(){if(!Cf){for(let e of Xr||[])e.kill();Xr=[];return}return new Promise(async(e,t)=>{try{await Eo()}catch(r){t(r)}Je.killDaemon((r,n)=>{r&&(Je.disconnect(),t(r)),Je.disconnect(),e(n)})})}a(fce,"kill");async function Ece(){try{await UF(),await vF(),await ma(pa.generateAllServiceConfigs())}catch(e){throw Je?.disconnect(),e}}a(Ece,"startAllServices");async function dO(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case ct.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=pa.generateMainServerConfig();break;case ct.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=pa.generateNatsIngestServiceConfig();break;case ct.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=pa.generateNatsReplyServiceConfig();break;case ct.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=pa.generateNatsHubServerConfig(),await ma(r,t),await fo.removeNatsConfig(e);return;case ct.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=pa.generateNatsLeafServerConfig(),await ma(r,t),await fo.removeNatsConfig(e);return;case ct.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=pa.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await ma(r)}catch(r){throw Je?.disconnect(),r}}a(dO,"startService");async function PF(){try{let e=await uO(),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 Je?.disconnect(),e}}a(PF,"getUniqueServicesList");async function hce(e=[]){try{let t=!1,r=await PF();for(let n=0,s=Object.values(r).length;n<s;n++){let o=Object.values(r)[n].name;e.includes(o)||(o===ct.PROCESS_DESCRIPTORS.HDB?t=!0:await NF(o))}t&&await LF(ct.PROCESS_DESCRIPTORS.HDB)}catch(t){throw Je?.disconnect(),t}}a(hce,"restartAllServices");async function DF(e){if(Xr?.find(r=>r.name===e))return!0;let t=await sce.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(DF,"isServiceRegistered");async function LF(e){let t=Lm.get(ct.CONFIG_PARAMS.THREADS_COUNT)??Lm.get(ct.CONFIG_PARAMS.THREADS),r=await CF(e),n=tce.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await lO(e),await dO(e)):e===ct.PROCESS_DESCRIPTORS.HDB?await wF():await OF(e)}a(LF,"reloadStopStart");var MF;async function UF(e=!1){for(let t in ct.CLUSTERING_PROCESSES){let r=ct.CLUSTERING_PROCESSES[t];await dO(r,e)}}a(UF,"startClusteringProcesses");async function vF(){MF=yF(ct.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:ct.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await Dm.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await Dm.updateLocalStreams();let e=await rce.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===ct.PRE_4_0_0_VERSION){Vc.info("Starting clustering upgrade 4.0.0 process"),yF(ct.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(vF,"startClusteringThreads");async function pce(){for(let e in ct.CLUSTERING_PROCESSES)if(e!==ct.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===ct.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await MF.terminate();else{let t=ct.CLUSTERING_PROCESSES[e];await lO(t)}}a(pce,"stopClustering");async function mce(){for(let e in ct.CLUSTERING_PROCESSES){let t=ct.CLUSTERING_PROCESSES[e];if(await DF(t)===!1)return!1}return!0}a(mce,"isClusteringRunning");async function Sce(){await fo.generateNatsConfig(!0),await Dm.reloadNATSHub(),await Dm.reloadNATSLeaf(),await fo.removeNatsConfig(ct.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await fo.removeNatsConfig(ct.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(Sce,"reloadClustering")});var EO={};je(EO,{compactOnStart:()=>Tce,copyDb:()=>qF});async function Tce(){Sa.notify("Running compact on start"),console.log("Running compact on start");let e=(0,_O.get)(Ta.CONFIG_PARAMS.ROOTPATH),t=new Map,r=dt();(0,fO.updateConfigValue)(Ta.CONFIG_PARAMS.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,Mm.join)(e,"backup",n+".mdb"),o=(0,Mm.join)(e,Ta.DATABASES_DIR_NAME,n+"-copy.mdb"),c=0;try{c=await xF(n),console.log("Database",n,"before compact has a total record count of",c)}catch(l){Sa.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 qF(n,o),console.log("Backing up",n,"to",i),await(0,Kc.move)(s,i,{overwrite:!0})}try{Gu()}catch(n){Sa.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,Kc.move)(i,s,{overwrite:!0}),await(0,Kc.remove)((0,Mm.join)(e,Ta.DATABASES_DIR_NAME,`${n}-copy.mdb-lock`));try{Gu()}catch(n){Sa.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n),process.exit(0)}}catch(n){Sa.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,fO.updateConfigValue)(Ta.CONFIG_PARAMS.STORAGE_COMPACTONSTART,!1);for(let[s,{db_path:i,backup_dest:o}]of t){console.error("Moving backup database",o,"back to",i);try{await(0,Kc.move)(o,i,{overwrite:!0})}catch(c){console.error(c)}}throw Gu(),n}for(let[n,{backup_dest:s,record_count:i}]of t){let o=!0,c=await xF(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}.
16
16
  Total record count before compaction: ${i}, total after: ${c}.
17
17
  Database backup has not been removed and can be found here: ${s}`;Sa.error(l),console.error(l)}(0,_O.get)(Ta.CONFIG_PARAMS.STORAGE_COMPACTONSTARTKEEPBACKUP)===!0||o===!1||(console.log("Removing backup",s),await(0,Kc.remove)(s))}}async function xF(e){let t=await(0,GF.describeSchema)({database:e}),r=0;for(let n in t)r+=t[n].record_count;return r}async function qF(e,t){console.log("copyDb start");let r=dt()[e],n;for(let _ in r){n=r[_].primaryStore.rootStore;break}let s=n.dbisDb,i=n.auditStore,o=(0,HF.open)(new kF.default(t)),c=o.openDB(Um.INTERNAL_DBIS_NAME),l,u=0,d=s.useReadTransaction();try{for(let{key:E,value:f}of s.getRange({transaction:d})){let h=f.is_hash_attribute||f.isPrimaryKey,T,m;if(h&&(T=f.compression,m=vm(),m?f.compression=m:delete f.compression,T?.dictionary?.toString()===m?.dictionary?.toString()&&(T=null,m=null)),c.put(E,f),!(h||f.indexed))continue;let g=new FF.default(!h,h);g.encoding="binary",g.compression=T;let S=n.openDB(E,g);S.decoder=null,S.decoderCopies=!1,S.encoding="binary",g.compression=m;let y=o.openDB(E,g);y.encoder=null,console.log("copying",E,"from",e,"to",t),await _(S,y,h,d)}if(i){let E=n.openDB(Um.AUDIT_STORE_NAME,Df);console.log("copying audit log for",e,"to",t),_(i,E,!1,d)}async function _(E,f,h,T){let m=0,g=0,S=1e7,y=null;for(;S-- >0;)try{for(let I of E.getKeys({start:y,transaction:T}))try{y=I;let{value:U,version:x}=E.getEntry(I,{transaction:T});l=f.put(I,U,h?x:void 0),m++,T.openTimer&&(T.openTimer=0),g+=(I?.length||10)+U.length,u++>5e3&&(await l,console.log("copied",m,"entries",g,"bytes"),u=0)}catch(U){console.error("Error copying record",typeof I=="symbol"?"symbol":I,"from",e,"to",t,U)}console.log("finish copying, copied",m,"entries",g,"bytes");return}catch{if(typeof y=="string"){if(y==="z")return console.error("Reached end of dbi",y,"for",e,"to",t);y=y.slice(0,-2)+"z"}else if(typeof y=="number")y++;else return console.error("Unknown key type",y,"for",e,"to",t)}}a(_,"copyDbi"),await l,console.log("copied database "+e+" to "+t)}finally{d.done(),o.close()}}var HF,Mm,Kc,_O,kF,FF,Um,Ta,GF,fO,Sa,hO=Ie(()=>{Pe();HF=require("lmdb"),Mm=require("path"),Kc=require("fs-extra"),_O=M(ne()),kF=M(c_()),FF=M(a_()),Um=M(xt()),Ta=M(L());Qi();GF=M(gi()),fO=M(Ct()),Sa=M(K());a(Tce,"compactOnStart");a(xF,"getTotalDBRecordCount");a(qF,"copyDb")});var Vu=O((KPe,zF)=>{"use strict";var gce=require("minimist"),{isMainThread:mO,parentPort:Mf,threadId:qPe}=require("worker_threads"),Dt=L(),{PROCESS_DESCRIPTORS_VALIDATE:qu}=Dt,Di=K(),SO=te(),xm=wm(),Bm=kt(),$Pe=ft(),YF=Ct(),ti=Pf(),$F=Lu(),{compactOnStart:Rce}=(hO(),oe(EO)),Ace=Qa(),{restartWorkers:Hm,onMessageByType:yce}=ot(),{handleHDBError:bce,hdb_errors:Oce}=_e(),{HTTP_STATUS_CODES:Nce}=Oce,Uf=ne(),{sendOperationToNode:VF,getThisNodeName:Ice,monitorNodeCAs:wce}=(us(),oe(la)),{getHDBNodeTable:VPe}=(fu(),oe(IB));Uf.initSync();var Lf=`Restarting HarperDB. This may take up to ${Dt.RESTART_TIMEOUT_MS/1e3} seconds.`,Cce="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",KF="Clustering is not enabled so cannot be restarted",Pce="Invalid service",$u,Ts;zF.exports={restart:WF,restartService:TO};mO&&yce(Dt.ITC_EVENT_TYPES.RESTART,async(e,t)=>{e.workerType?await TO({service:e.workerType}):WF({operation:"restart"}),t.postMessage({type:"restart-complete"})});async function WF(e){Ts=Object.keys(e).length===0,$u=await ti.isServiceRegistered(Dt.HDB_PROC_DESCRIPTOR);let t=gce(process.argv);if(t.service){await TO(t);return}if(Ts&&!$u){console.error(Cce);return}if(Ts&&console.log(Lf),$u){ti.enterPM2Mode(),Di.notify(Lf);let r=Ace(Object.keys(Dt.CONFIG_PARAM_MAP),!0);return SO.isEmptyOrZeroLength(Object.keys(r))||YF.updateConfigValue(void 0,void 0,r,!0,!0),Dce(),Lf}return mO?(Di.notify(Lf),Uf.get(Dt.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await Rce(),setTimeout(()=>{Hm()},50)):Mf.postMessage({type:Dt.ITC_EVENT_TYPES.RESTART}),Lf}a(WF,"restart");async function TO(e){let{service:t}=e;if(Dt.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw bce(new Error,Pce,Nce.BAD_REQUEST,void 0,void 0,!0);if(ti.expectedRestartOfChildren(),$u=await ti.isServiceRegistered(Dt.HDB_PROC_DESCRIPTOR),!mO){e.replicated&&wce(),Mf.postMessage({type:Dt.ITC_EVENT_TYPES.RESTART,workerType:t}),Mf.ref(),await new Promise(s=>{Mf.on("message",i=>{i.type==="restart-complete"&&(s(),Mf.unref())})});let n;if(e.replicated){e.replicated=!1,n=[];for(let s of server.nodes){if(s.name===Ice())continue;let{job_id:i}=await VF(s,e);n.push(await new Promise((o,c)=>{let u=2400,d=setInterval(async()=>{if(u--<=0){clearInterval(d);let f=new Error("Timed out waiting for restart job to complete");f.replicated=n,c(f)}let E=(await VF(s,{operation:"get_job",id:i})).results[0];if(E.status==="COMPLETE"&&(clearInterval(d),o({node:s.name,message:E.message})),E.status==="ERROR"){clearInterval(d);let f=new Error(E.message);f.replicated=n,c(f)}},250)}))}return{replicated:n}}return}let r;switch(t){case qu.clustering:if(!Uf.get(Dt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=KF;break}Ts&&console.log("Restarting clustering"),Di.notify("Restarting clustering"),await jF();break;case qu.clustering_config:case qu["clustering config"]:if(!Uf.get(Dt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=KF;break}Ts&&console.log("Restarting clustering_config"),Di.notify("Restarting clustering_config"),await ti.reloadClustering();break;case"custom_functions":case"custom functions":case qu.harperdb:case qu.http_workers:case qu.http:if(Ts&&!$u){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}Ts&&console.log("Restarting http_workers"),Di.notify("Restarting http_workers"),Ts?await ti.restart(Dt.HDB_PROC_DESCRIPTOR):await Hm("http");break;default:r=`Unrecognized service: ${t}`;break}return r?(Di.error(r),Ts&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(TO,"restartService");async function Dce(){await jF(),await ti.restart(Dt.HDB_PROC_DESCRIPTOR),await SO.async_set_timeout(2e3),Uf.get(Dt.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await pO(),Ts&&(await Bm.closeConnection(),process.exit(0))}a(Dce,"restartPM2Mode");async function jF(){if(!YF.getConfigFromFile(Dt.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await $F.getHDBProcessInfo()).clustering.length===0)Di.trace("Clustering not running, restart will start clustering services"),await xm.generateNatsConfig(!0),await ti.startClusteringProcesses(),await ti.startClusteringThreads(),await pO(),Ts&&await Bm.closeConnection();else{await xm.generateNatsConfig(!0),$u?(Di.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await ti.restart(Dt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await ti.restart(Dt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await $F.getHDBProcessInfo()).clustering.forEach(s=>{Di.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await SO.async_set_timeout(3e3),await pO(),await Bm.updateLocalStreams(),Ts&&await Bm.closeConnection(),Di.trace("Restart clustering restarting ingest and reply service threads");let t=Hm(Dt.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=Hm(Dt.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(jF,"restartClustering");async function pO(){await xm.removeNatsConfig(Dt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await xm.removeNatsConfig(Dt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(pO,"removeNatsConfig")});var oG=O((jPe,iG)=>{"use strict";var WPe=require("lodash"),gn=L(),{handleHDBError:QF,hdb_errors:Lce}=_e(),{HDB_ERROR_MSGS:Mce,HTTP_STATUS_CODES:Uce}=Lce,gO=K();iG.exports={getRolePermissions:Bce};var Yc=Object.create(null),vce=a(e=>({key:e,perms:{}}),"perms_template_obj"),eG=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),tG=a((e=!1,t=!1,r=!1,n=!1)=>({[gn.PERMS_CRUD_ENUM.READ]:e,[gn.PERMS_CRUD_ENUM.INSERT]:t,[gn.PERMS_CRUD_ENUM.UPDATE]:r,[gn.PERMS_CRUD_ENUM.DELETE]:n}),"permissions_template"),RO=a((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...tG(t,r,n,s)}),"table_perms_template"),JF=a((e,t=tG())=>({attribute_name:e,describe:sG(t),[vf]:t[vf],[AO]:t[AO],[yO]:t[yO]}),"attr_perms_template"),XF=a((e,t=!1)=>({attribute_name:e,describe:t,[vf]:t}),"timestamp_attr_perms_template"),{READ:vf,INSERT:AO,UPDATE:yO}=gn.PERMS_CRUD_ENUM,rG=Object.values(gn.PERMS_CRUD_ENUM),nG=[vf,AO,yO];function Bce(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r={...global.hdb_schema};delete r[gn.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(Yc[t]&&Yc[t].key===n)return Yc[t].perms;let s=xce(e,r);return Yc[t]?Yc[t].key=n:Yc[t]=vce(n),Yc[t].perms=s,s}catch(r){if(!e[gn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[gn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<gn.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 gO.error(n),gO.debug(r),QF(new Error,Mce.OUTDATED_PERMS_TRANSLATION_ERROR,Uce.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
18
- ${r.stack}`;throw gO.error(n),QF(new Error)}}}a(Bce,"getRolePermissions");function xce(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[gn.SYSTEM_SCHEMA_NAME]=n[gn.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]=Hce(t[i]);return}r[i]=eG(),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=kce(c,l);r[i].describe||rG.forEach(d=>{u[d]&&(r[i].describe=!0)}),r[i].tables[o]=u}else r[i].tables[o]=RO()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=RO()})}),r}a(xce,"translateRolePermissions");function Hce(e){let t=eG(!0);return Object.keys(e).forEach(r=>{t.tables[r]=RO(!0,!0,!0,!0,!0)}),t}a(Hce,"createStructureUserPermissions");function kce(e,t){let{attribute_permissions:r}=e;if(r?.length>0){let s={...e};s.attribute_permissions=[];let i=r.reduce((u,d)=>{let{attribute_name:_}=d,E=d;return gn.TIME_STAMP_NAMES.includes(_)&&(E=XF(_,d[vf])),u[_]=E,u},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],l=JF(o);return t.attributes.forEach(({attribute:u})=>{if(i[u]){let d=i[u];d.describe=sG(d),s.attribute_permissions.push(d),c||Fce(d,l)}else if(u!==o){let d;gn.TIME_STAMP_NAMES.includes(u)?d=XF(u):d=JF(u),s.attribute_permissions.push(d)}}),c||s.attribute_permissions.push(l),s.describe=ZF(s),s}else return e.describe=ZF(e),e}a(kce,"getTableAttrPerms");function ZF(e){return rG.filter(t=>e[t]).length>0}a(ZF,"getSchemaTableDescribePerm");function sG(e){return nG.filter(t=>e[t]).length>0}a(sG,"getAttributeDescribePerm");function Fce(e,t){nG.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(Fce,"checkForHashPerms")});var aG={};je(aG,{Headers:()=>ho,appendHeader:()=>km,mergeHeaders:()=>bO});function km(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 bO(e,t){(typeof e.set!="function"||typeof e.has!="function")&&(e=new ho(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 ho,Bf=Ie(()=>{ho=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(km,"appendHeader");a(bO,"mergeHeaders")});var xf={};je(xf,{authentication:()=>EG,bypassAuth:()=>Wce,login:()=>zce,logout:()=>Qce,start:()=>jce});function Wce(){fG=!0}async function EG(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,o=[];try{if(i){let f=e.isOperationsServer?Vce?$ce:[]:qce?Gce:[];if(f.includes(i)||f.includes("*")){if(e.method==="OPTIONS"){let h=new ho([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return Fm&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),Fm&&o.push("Access-Control-Allow-Credentials","true")}}let l,u;if(Fm){i||(i=r.host);let f=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=s?.split(/;\s+/)||[];for(let T of h)if(T.startsWith(f)){let m=T.indexOf(";");l=T.slice(f.length,m===-1?T.length:m),u=await cG.get(l);break}e.session=u||(u={})}let d=a((f,h,T)=>{let m=new Ku.AuthAuditLog(f,h,Or.AUTH_AUDIT_TYPES.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);m.auth_strategy=T,l&&(m.session_id=l),r.referer&&(m.referer=r.referer),r.origin&&(m.origin=r.origin),h===Or.AUTH_AUDIT_STATUS.SUCCESS?OO.notify(m):OO.error(m)},"authAuditLog");if(!e.authorized&&e.mtlsConfig&&e.peerCertificate.subject&&e?._nodeRequest?.socket?.authorizationError&&OO.error("Authorization error:",e._nodeRequest.socket.authorizationError),e.mtlsConfig&&e.authorized&&e.peerCertificate.subject){let f=e.mtlsConfig.user;f!==null?((f===void 0||f==="Common Name"||f==="CN")&&(f=e.peerCertificate.subject.CN),e.user=await it.getUser(f,null,e),d(f,Or.AUTH_AUDIT_STATUS.SUCCESS,"mTLS")):(0,Ku.debug)("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let _;if(!e.user)if(n){if(_=Wc.get(n),!_){let f=n.indexOf(" "),h=n.slice(0,f),T=n.slice(f+1),m,g;try{switch(h){case"Basic":let S=atob(T),y=S.indexOf(":");m=S.slice(0,y),g=S.slice(y+1),_=m||g?await it.getUser(m,g,e):null;break;case"Bearer":try{_=await(0,Gm.validateOperationToken)(T)}catch(I){if(I.message==="invalid token")try{return await(0,Gm.validateRefreshToken)(T),c({status:-1})}catch{throw I}}break}}catch(S){return Yce&&(Wc.get(T)||(Wc.set(T,T),d(m,Or.AUTH_AUDIT_STATUS.FAILURE,h))),c({status:401,body:jc({error:S.message},e)})}Wc.set(n,_),Kce&&d(_.username,Or.AUTH_AUDIT_STATUS.SUCCESS,h)}e.user=_}else u?.user?e.user=await it.getUser(u.user,null,e):(fG&&(e.ip?.includes("127.0.0.")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,uG.getSuperUser)());Fm&&(e.session.update=function(f){if(!l){l=(0,dG.v4)();let T=`${(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",T):E?.headers?.set&&E.headers.set("Set-Cookie",T)}return e.protocol==="https"&&(o?(i&&o.push("Access-Control-Expose-Headers","X-Hdb-Session"),o.push("X-Hdb-Session","Secure")):E?.headers?.set&&(i&&E.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),E.headers.set("X-Hdb-Session","Secure"))),f.id=l,cG.put(f)},e.login=async function(f,h){e.user=await it.getUser(f,h,e),e.session.update({user:e.user&&(e.user.getId?.()??e.user.username)})});let E=await t(e);return E&&(E.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&Ci.loginPath?(E.status=302,E.headers.set("Location",Ci.loginPath(e))):E.headers.set("WWW-Authenticate","Basic")),c(E))}catch(l){throw c(l)}function c(l){let u=o.length;if(u>0){let d=l.headers;d||(l.headers=d=new ho);for(let _=0;_<u;){let E=o[_++];d.set(E,o[_++])}}return o=null,l}a(c,"applyResponseHeaders")}function jce({server:e,port:t,securePort:r}){e.http(EG,t||r?{port:t,securePort:r}:{port:"all"}),lG||(lG=!0,setInterval(()=>{Wc=new Map},gs.get(Or.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),_G.user.addListener(()=>{Wc=new Map}))}async function zce(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 Qce(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var uG,Gm,dG,gs,Or,Ku,_G,OO,Gce,qce,$ce,Vce,cG,Fm,fG,Kce,Yce,Wc,lG,qm=Ie(()=>{uG=M(Hn());qr();cu();Gm=M(mu());Pe();dG=require("uuid"),gs=M(ne()),Or=M(L()),Ku=M(K()),_G=M(g_());Bf();zc();OO=(0,Ku.loggerWithTag)("auth-event");gs.initSync();Gce=gs.get(Or.CONFIG_PARAMS.HTTP_CORSACCESSLIST),qce=gs.get(Or.CONFIG_PARAMS.HTTP_CORS),$ce=gs.get(Or.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),Vce=gs.get(Or.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),cG=pt({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),Fm=gs.get(Or.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,fG=process.env.AUTHENTICATION_AUTHORIZELOCAL??gs.get(Or.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,Kce=gs.get(Or.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,Yce=gs.get(Or.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,Wc=new Map;it.onInvalidatedUser(()=>{Wc=new Map});a(Wce,"bypassAuth");a(EG,"authentication");a(jce,"start");a(zce,"login");a(Qce,"logout")});var RG=O((nDe,gG)=>{"use strict";var ye=require("joi"),hG=require("fs-extra"),pG=require("path"),Yn=_t(),mG=ne(),SG=L(),TG=K(),{hdb_errors:Jce}=_e(),{HDB_ERROR_MSGS:Zr}=Jce,po=/^[a-zA-Z0-9-_]+$/,Xce=/^[a-zA-Z0-9-_]+$/;gG.exports={getDropCustomFunctionValidator:ele,setCustomFunctionValidator:tle,addComponentValidator:ile,dropCustomFunctionProjectValidator:ole,packageComponentValidator:ale,deployComponentValidator:cle,setComponentFileValidator:rle,getComponentFileValidator:sle,dropComponentFileValidator:nle,addSSHKeyValidator:lle,updateSSHKeyValidator:ule,deleteSSHKeyValidator:dle,setSSHKnownHostsValidator:_le};function $m(e,t,r){try{let n=mG.get(SG.CONFIG_PARAMS.COMPONENTSROOT),s=pG.join(n,t);return hG.existsSync(s)?e?t:r.message(Zr.PROJECT_EXISTS):e?r.message(Zr.NO_PROJECT):t}catch(n){return TG.error(n),r.message(Zr.VALIDATION_ERR)}}a($m,"checkProjectExists");function Hf(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(Hf,"checkFilePath");function Zce(e,t,r,n){try{let s=mG.get(SG.CONFIG_PARAMS.COMPONENTSROOT),i=pG.join(s,e,t,r+".js");return hG.existsSync(i)?r:n.message(Zr.NO_FILE)}catch(s){return TG.error(s),n.message(Zr.VALIDATION_ERR)}}a(Zce,"checkFileExists");function ele(e){let t=ye.object({project:ye.string().pattern(po).custom($m.bind(null,!0)).required().messages({"string.pattern.base":Zr.BAD_PROJECT_NAME}),type:ye.string().valid("helpers","routes").required(),file:ye.string().pattern(po).custom(Zce.bind(null,e.project,e.type)).custom(Hf).required().messages({"string.pattern.base":Zr.BAD_FILE_NAME})});return Yn.validateBySchema(e,t)}a(ele,"getDropCustomFunctionValidator");function tle(e){let t=ye.object({project:ye.string().pattern(po).custom($m.bind(null,!0)).required().messages({"string.pattern.base":Zr.BAD_PROJECT_NAME}),type:ye.string().valid("helpers","routes").required(),file:ye.string().custom(Hf).required(),function_content:ye.string().required()});return Yn.validateBySchema(e,t)}a(tle,"setCustomFunctionValidator");function rle(e){let t=ye.object({project:ye.string().pattern(po).required().messages({"string.pattern.base":Zr.BAD_PROJECT_NAME}),file:ye.string().custom(Hf).required(),payload:ye.string().allow("").optional(),encoding:ye.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Yn.validateBySchema(e,t)}a(rle,"setComponentFileValidator");function nle(e){let t=ye.object({project:ye.string().pattern(po).required().messages({"string.pattern.base":Zr.BAD_PROJECT_NAME}),file:ye.string().custom(Hf).optional()});return Yn.validateBySchema(e,t)}a(nle,"dropComponentFileValidator");function sle(e){let t=ye.object({project:ye.string().required(),file:ye.string().custom(Hf).required(),encoding:ye.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Yn.validateBySchema(e,t)}a(sle,"getComponentFileValidator");function ile(e){let t=ye.object({project:ye.string().pattern(po).custom($m.bind(null,!1)).required().messages({"string.pattern.base":Zr.BAD_PROJECT_NAME})});return Yn.validateBySchema(e,t)}a(ile,"addComponentValidator");function ole(e){let t=ye.object({project:ye.string().pattern(po).custom($m.bind(null,!0)).required().messages({"string.pattern.base":Zr.BAD_PROJECT_NAME})});return Yn.validateBySchema(e,t)}a(ole,"dropCustomFunctionProjectValidator");function ale(e){let t=ye.object({project:ye.string().pattern(po).required().messages({"string.pattern.base":Zr.BAD_PROJECT_NAME}),skip_node_modules:ye.boolean(),skip_symlinks:ye.boolean()});return Yn.validateBySchema(e,t)}a(ale,"packageComponentValidator");function cle(e){let t=ye.object({project:ye.string().pattern(po).required().messages({"string.pattern.base":Zr.BAD_PROJECT_NAME}),package:ye.string().optional(),restart:ye.alternatives().try(ye.boolean(),ye.string().valid("rolling")).optional()});return Yn.validateBySchema(e,t)}a(cle,"deployComponentValidator");function lle(e){let t=ye.object({name:ye.string().pattern(Xce).required().messages({"string.pattern.base":Zr.BAD_SSH_KEY_NAME}),key:ye.string().required(),host:ye.string().required(),hostname:ye.string().required(),known_hosts:ye.string().optional()});return Yn.validateBySchema(e,t)}a(lle,"addSSHKeyValidator");function ule(e){let t=ye.object({name:ye.string().required(),key:ye.string().required()});return Yn.validateBySchema(e,t)}a(ule,"updateSSHKeyValidator");function dle(e){let t=ye.object({name:ye.string().required()});return Yn.validateBySchema(e,t)}a(dle,"deleteSSHKeyValidator");function _le(e){let t=ye.object({known_hosts:ye.string().required()});return Yn.validateBySchema(e,t)}a(_le,"setSSHKnownHostsValidator")});var kf=O((iDe,IG)=>{"use strict";var Vm=require("joi"),ga=require("path"),Yu=require("fs-extra"),{exec:fle}=require("child_process"),Ele=require("util"),AG=Ele.promisify(fle),Qc=L(),{handleHDBError:Wu,hdb_errors:hle}=_e(),{HTTP_STATUS_CODES:ju}=hle,Jc=ne(),ple=_t(),Xc=K();Jc.initSync();var NO=Jc.get(Qc.CONFIG_PARAMS.COMPONENTSROOT),yG="npm install --force --omit=dev --json",mle=`${yG} --dry-run`,Sle=Jc.get(Qc.CONFIG_PARAMS.ROOTPATH),Km=ga.join(Sle,"ssh");IG.exports={installModules:Ale,auditModules:yle,installAllRootModules:Tle,uninstallRootModule:gle,linkHarperdb:Rle,runCommand:zu};async function Tle(e=!1,t=Jc.get(Qc.CONFIG_PARAMS.ROOTPATH)){await Ym();let r=!1,n=process.env;Yu.pathExistsSync(Km)&&Yu.readdirSync(Km).forEach(s=>{s.includes(".key")&&!r&&(n={GIT_SSH_COMMAND:"ssh -F "+ga.join(Km,"config")+" -o UserKnownHostsFile="+ga.join(Km,"known_hosts"),...process.env},r=!0)});try{let s=Jc.get(Qc.CONFIG_PARAMS.ROOTPATH),i=ga.join(s,"node_modules","harperdb");Yu.lstatSync(i).isSymbolicLink()&&Yu.unlinkSync(i)}catch(s){s.code!=="ENOENT"&&Xc.error("Error removing symlink:",s)}await zu(e?"npm install --force --ignore-scripts":"npm install --force",t,n)}a(Tle,"installAllRootModules");async function gle(e){await zu(`npm uninstall ${e}`,Jc.get(Qc.CONFIG_PARAMS.ROOTPATH))}a(gle,"uninstallRootModule");async function Rle(){await Ym(),await zu(`npm link ${Qc.PACKAGE_ROOT}`,Jc.get(Qc.CONFIG_PARAMS.ROOTPATH))}a(Rle,"linkHarperdb");async function zu(e,t=void 0,r=process.env){let n,s;try{({stdout:n,stderr:s}=await AG(e,{cwd:t,env:r}))}catch(i){throw new Error(i.stderr.replace(`
18
+ ${r.stack}`;throw gO.error(n),QF(new Error)}}}a(Bce,"getRolePermissions");function xce(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[gn.SYSTEM_SCHEMA_NAME]=n[gn.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]=Hce(t[i]);return}r[i]=eG(),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=kce(c,l);r[i].describe||rG.forEach(d=>{u[d]&&(r[i].describe=!0)}),r[i].tables[o]=u}else r[i].tables[o]=RO()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=RO()})}),r}a(xce,"translateRolePermissions");function Hce(e){let t=eG(!0);return Object.keys(e).forEach(r=>{t.tables[r]=RO(!0,!0,!0,!0,!0)}),t}a(Hce,"createStructureUserPermissions");function kce(e,t){let{attribute_permissions:r}=e;if(r?.length>0){let s={...e};s.attribute_permissions=[];let i=r.reduce((u,d)=>{let{attribute_name:_}=d,E=d;return gn.TIME_STAMP_NAMES.includes(_)&&(E=XF(_,d[vf])),u[_]=E,u},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],l=JF(o);return t.attributes.forEach(({attribute:u})=>{if(i[u]){let d=i[u];d.describe=sG(d),s.attribute_permissions.push(d),c||Fce(d,l)}else if(u!==o){let d;gn.TIME_STAMP_NAMES.includes(u)?d=XF(u):d=JF(u),s.attribute_permissions.push(d)}}),c||s.attribute_permissions.push(l),s.describe=ZF(s),s}else return e.describe=ZF(e),e}a(kce,"getTableAttrPerms");function ZF(e){return rG.filter(t=>e[t]).length>0}a(ZF,"getSchemaTableDescribePerm");function sG(e){return nG.filter(t=>e[t]).length>0}a(sG,"getAttributeDescribePerm");function Fce(e,t){nG.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(Fce,"checkForHashPerms")});var aG={};je(aG,{Headers:()=>ho,appendHeader:()=>km,mergeHeaders:()=>bO});function km(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 bO(e,t){(typeof e.set!="function"||typeof e.has!="function")&&(e=new ho(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 ho,Bf=Ie(()=>{ho=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(km,"appendHeader");a(bO,"mergeHeaders")});var xf={};je(xf,{authentication:()=>EG,bypassAuth:()=>Wce,login:()=>zce,logout:()=>Qce,start:()=>jce});function Wce(){fG=!0}async function EG(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,o=[];try{if(i){let f=e.isOperationsServer?Vce?$ce:[]:qce?Gce:[];if(f.includes(i)||f.includes("*")){if(e.method==="OPTIONS"){let h=new ho([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return Fm&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),Fm&&o.push("Access-Control-Allow-Credentials","true")}}let l,u;if(Fm){i||(i=r.host);let f=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=s?.split(/;\s+/)||[];for(let T of h)if(T.startsWith(f)){let m=T.indexOf(";");l=T.slice(f.length,m===-1?T.length:m),u=await cG.get(l);break}e.session=u||(u={})}let d=a((f,h,T)=>{let m=new Ku.AuthAuditLog(f,h,Or.AUTH_AUDIT_TYPES.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);m.auth_strategy=T,l&&(m.session_id=l),r.referer&&(m.referer=r.referer),r.origin&&(m.origin=r.origin),h===Or.AUTH_AUDIT_STATUS.SUCCESS?OO.notify(m):OO.error(m)},"authAuditLog");if(!e.authorized&&e.mtlsConfig&&e.peerCertificate.subject&&e?._nodeRequest?.socket?.authorizationError&&OO.error("Authorization error:",e._nodeRequest.socket.authorizationError),e.mtlsConfig&&e.authorized&&e.peerCertificate.subject){let f=e.mtlsConfig.user;f!==null?((f===void 0||f==="Common Name"||f==="CN")&&(f=e.peerCertificate.subject.CN),e.user=await it.getUser(f,null,e),d(f,Or.AUTH_AUDIT_STATUS.SUCCESS,"mTLS")):(0,Ku.debug)("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let _;if(!e.user)if(n){if(_=Wc.get(n),!_){let f=n.indexOf(" "),h=n.slice(0,f),T=n.slice(f+1),m,g;try{switch(h){case"Basic":let S=atob(T),y=S.indexOf(":");m=S.slice(0,y),g=S.slice(y+1),_=m||g?await it.getUser(m,g,e):null;break;case"Bearer":try{_=await(0,Gm.validateOperationToken)(T)}catch(I){if(I.message==="invalid token")try{return await(0,Gm.validateRefreshToken)(T),c({status:-1})}catch{throw I}}break}}catch(S){return Yce&&(Wc.get(T)||(Wc.set(T,T),d(m,Or.AUTH_AUDIT_STATUS.FAILURE,h))),c({status:401,body:jc({error:S.message},e)})}Wc.set(n,_),Kce&&d(_.username,Or.AUTH_AUDIT_STATUS.SUCCESS,h)}e.user=_}else u?.user?e.user=await it.getUser(u.user,null,e):(fG&&(e.ip?.includes("127.0.0.")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,uG.getSuperUser)());Fm&&(e.session.update=function(f){if(!l){l=(0,dG.v4)();let T=`${(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",T):E?.headers?.set&&E.headers.set("Set-Cookie",T)}return e.protocol==="https"&&(o?(i&&o.push("Access-Control-Expose-Headers","X-Hdb-Session"),o.push("X-Hdb-Session","Secure")):E?.headers?.set&&(i&&E.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),E.headers.set("X-Hdb-Session","Secure"))),f.id=l,cG.put(f)},e.login=async function(f,h){e.user=await it.getUser(f,h,e),e.session.update({user:e.user&&(e.user.getId?.()??e.user.username)})});let E=await t(e);return E&&(E.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&Ci.loginPath?(E.status=302,E.headers.set("Location",Ci.loginPath(e))):E.headers.set("WWW-Authenticate","Basic")),c(E))}catch(l){throw c(l)}function c(l){let u=o.length;if(u>0){let d=l.headers;d||(l.headers=d=new ho);for(let _=0;_<u;){let E=o[_++];d.set(E,o[_++])}}return o=null,l}a(c,"applyResponseHeaders")}function jce({server:e,port:t,securePort:r}){e.http(EG,t||r?{port:t,securePort:r}:{port:"all"}),lG||(lG=!0,setInterval(()=>{Wc=new Map},gs.get(Or.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),_G.user.addListener(()=>{Wc=new Map}))}async function zce(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 Qce(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var uG,Gm,dG,gs,Or,Ku,_G,OO,Gce,qce,$ce,Vce,cG,Fm,fG,Kce,Yce,Wc,lG,qm=Ie(()=>{uG=M(Hn());qr();cu();Gm=M(mu());Pe();dG=require("uuid"),gs=M(ne()),Or=M(L()),Ku=M(K()),_G=M(g_());Bf();zc();OO=(0,Ku.loggerWithTag)("auth-event");gs.initSync();Gce=gs.get(Or.CONFIG_PARAMS.HTTP_CORSACCESSLIST),qce=gs.get(Or.CONFIG_PARAMS.HTTP_CORS),$ce=gs.get(Or.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),Vce=gs.get(Or.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),cG=pt({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),Fm=gs.get(Or.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,fG=process.env.AUTHENTICATION_AUTHORIZELOCAL??gs.get(Or.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,Kce=gs.get(Or.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,Yce=gs.get(Or.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,Wc=new Map;it.onInvalidatedUser(()=>{Wc=new Map});a(Wce,"bypassAuth");a(EG,"authentication");a(jce,"start");a(zce,"login");a(Qce,"logout")});var RG=O((nDe,gG)=>{"use strict";var ye=require("joi"),hG=require("fs-extra"),pG=require("path"),Yn=_t(),mG=ne(),SG=L(),TG=K(),{hdb_errors:Jce}=_e(),{HDB_ERROR_MSGS:Zr}=Jce,po=/^[a-zA-Z0-9-_]+$/,Xce=/^[a-zA-Z0-9-_]+$/;gG.exports={getDropCustomFunctionValidator:ele,setCustomFunctionValidator:tle,addComponentValidator:ile,dropCustomFunctionProjectValidator:ole,packageComponentValidator:ale,deployComponentValidator:cle,setComponentFileValidator:rle,getComponentFileValidator:sle,dropComponentFileValidator:nle,addSSHKeyValidator:lle,updateSSHKeyValidator:ule,deleteSSHKeyValidator:dle,setSSHKnownHostsValidator:_le};function $m(e,t,r){try{let n=mG.get(SG.CONFIG_PARAMS.COMPONENTSROOT),s=pG.join(n,t);return hG.existsSync(s)?e?t:r.message(Zr.PROJECT_EXISTS):e?r.message(Zr.NO_PROJECT):t}catch(n){return TG.error(n),r.message(Zr.VALIDATION_ERR)}}a($m,"checkProjectExists");function Hf(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(Hf,"checkFilePath");function Zce(e,t,r,n){try{let s=mG.get(SG.CONFIG_PARAMS.COMPONENTSROOT),i=pG.join(s,e,t,r+".js");return hG.existsSync(i)?r:n.message(Zr.NO_FILE)}catch(s){return TG.error(s),n.message(Zr.VALIDATION_ERR)}}a(Zce,"checkFileExists");function ele(e){let t=ye.object({project:ye.string().pattern(po).custom($m.bind(null,!0)).required().messages({"string.pattern.base":Zr.BAD_PROJECT_NAME}),type:ye.string().valid("helpers","routes").required(),file:ye.string().pattern(po).custom(Zce.bind(null,e.project,e.type)).custom(Hf).required().messages({"string.pattern.base":Zr.BAD_FILE_NAME})});return Yn.validateBySchema(e,t)}a(ele,"getDropCustomFunctionValidator");function tle(e){let t=ye.object({project:ye.string().pattern(po).custom($m.bind(null,!0)).required().messages({"string.pattern.base":Zr.BAD_PROJECT_NAME}),type:ye.string().valid("helpers","routes").required(),file:ye.string().custom(Hf).required(),function_content:ye.string().required()});return Yn.validateBySchema(e,t)}a(tle,"setCustomFunctionValidator");function rle(e){let t=ye.object({project:ye.string().pattern(po).required().messages({"string.pattern.base":Zr.BAD_PROJECT_NAME}),file:ye.string().custom(Hf).required(),payload:ye.string().allow("").optional(),encoding:ye.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Yn.validateBySchema(e,t)}a(rle,"setComponentFileValidator");function nle(e){let t=ye.object({project:ye.string().pattern(po).required().messages({"string.pattern.base":Zr.BAD_PROJECT_NAME}),file:ye.string().custom(Hf).optional()});return Yn.validateBySchema(e,t)}a(nle,"dropComponentFileValidator");function sle(e){let t=ye.object({project:ye.string().required(),file:ye.string().custom(Hf).required(),encoding:ye.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Yn.validateBySchema(e,t)}a(sle,"getComponentFileValidator");function ile(e){let t=ye.object({project:ye.string().pattern(po).custom($m.bind(null,!1)).required().messages({"string.pattern.base":Zr.BAD_PROJECT_NAME})});return Yn.validateBySchema(e,t)}a(ile,"addComponentValidator");function ole(e){let t=ye.object({project:ye.string().pattern(po).custom($m.bind(null,!0)).required().messages({"string.pattern.base":Zr.BAD_PROJECT_NAME})});return Yn.validateBySchema(e,t)}a(ole,"dropCustomFunctionProjectValidator");function ale(e){let t=ye.object({project:ye.string().pattern(po).required().messages({"string.pattern.base":Zr.BAD_PROJECT_NAME}),skip_node_modules:ye.boolean(),skip_symlinks:ye.boolean()});return Yn.validateBySchema(e,t)}a(ale,"packageComponentValidator");function cle(e){let t=ye.object({project:ye.string().pattern(po).required().messages({"string.pattern.base":Zr.BAD_PROJECT_NAME}),package:ye.string().optional(),restart:ye.alternatives().try(ye.boolean(),ye.string().valid("rolling")).optional()});return Yn.validateBySchema(e,t)}a(cle,"deployComponentValidator");function lle(e){let t=ye.object({name:ye.string().pattern(Xce).required().messages({"string.pattern.base":Zr.BAD_SSH_KEY_NAME}),key:ye.string().required(),host:ye.string().required(),hostname:ye.string().required(),known_hosts:ye.string().optional()});return Yn.validateBySchema(e,t)}a(lle,"addSSHKeyValidator");function ule(e){let t=ye.object({name:ye.string().required(),key:ye.string().required()});return Yn.validateBySchema(e,t)}a(ule,"updateSSHKeyValidator");function dle(e){let t=ye.object({name:ye.string().required()});return Yn.validateBySchema(e,t)}a(dle,"deleteSSHKeyValidator");function _le(e){let t=ye.object({known_hosts:ye.string().required()});return Yn.validateBySchema(e,t)}a(_le,"setSSHKnownHostsValidator")});var kf=O((iDe,IG)=>{"use strict";var Vm=require("joi"),ga=require("path"),Yu=require("fs-extra"),{exec:fle}=require("child_process"),Ele=require("util"),AG=Ele.promisify(fle),Qc=L(),{handleHDBError:Wu,hdb_errors:hle}=_e(),{HTTP_STATUS_CODES:ju}=hle,Jc=ne(),ple=_t(),Xc=K();Jc.initSync();var NO=Jc.get(Qc.CONFIG_PARAMS.COMPONENTSROOT),yG="npm install --force --omit=dev --json",mle=`${yG} --dry-run`,Sle=Jc.get(Qc.CONFIG_PARAMS.ROOTPATH),Km=ga.join(Sle,"ssh");IG.exports={installModules:Ale,auditModules:yle,installAllRootModules:Tle,uninstallRootModule:gle,linkHarperdb:Rle,runCommand:zu};async function Tle(e=!1,t=Jc.get(Qc.CONFIG_PARAMS.ROOTPATH)){await Ym();let r=!1,n=process.env;Yu.pathExistsSync(Km)&&Yu.readdirSync(Km).forEach(s=>{s.includes(".key")&&!r&&(n={GIT_SSH_COMMAND:"ssh -F "+ga.join(Km,"config")+" -o UserKnownHostsFile="+ga.join(Km,"known_hosts"),...process.env},r=!0)});try{let s=Jc.get(Qc.CONFIG_PARAMS.ROOTPATH),i=ga.join(s,"node_modules","harperdb");Yu.lstatSync(i).isSymbolicLink()&&Yu.unlinkSync(i)}catch(s){s.code!=="ENOENT"&&Xc.error("Error removing symlink:",s)}await zu(e?"npm install --force --ignore-scripts --no-bin-links":"npm install --force --no-bin-links",t,n)}a(Tle,"installAllRootModules");async function gle(e){await zu(`npm uninstall ${e}`,Jc.get(Qc.CONFIG_PARAMS.ROOTPATH))}a(gle,"uninstallRootModule");async function Rle(){await Ym(),await zu(`npm link ${Qc.PACKAGE_ROOT}`,Jc.get(Qc.CONFIG_PARAMS.ROOTPATH))}a(Rle,"linkHarperdb");async function zu(e,t=void 0,r=process.env){let n,s;try{({stdout:n,stderr:s}=await AG(e,{cwd:t,env:r}))}catch(i){throw new Error(i.stderr.replace(`
19
19
  `,""))}return s&&!s.includes("Debugger listening")&&!s.includes("warn using --force")&&Xc.error("Error running NPM command:",e,s),Xc.trace(n,s),n?.replace(`
20
20
  `,"")}a(zu,"runCommand");async function Ale(e){let t="install_node_modules is deprecated. Dependencies are automatically installed on deploy, and install_node_modules can lead to inconsistent behavior";Xc.warn(t,e);let r=NG(e);if(r)throw Wu(r,r.message,ju.BAD_REQUEST);let{projects:n,dry_run:s}=e,i=s===!0?mle:yG;await Ym(),await OG(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 d=ga.join(NO,u),_,E=null;try{let{stdout:f,stderr:h}=await AG(i,{cwd:d});_=f?f.replace(`
21
21
  `,""):null,E=h?h.replace(`
@@ -130,4 +130,4 @@ Reindexing upgrade started for transaction logs`),Oo.notify("Reindexing upgrade
130
130
  Connection: close\r
131
131
  \r
132
132
  `))}},25).unref()}o.close?.(()=>{if(At.get(er.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&Ed()==0)try{XK(tY(At.get(er.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)))}catch{}clearInterval(c),setTimeout(()=>{console.log("forced close server",i,tT),o.cantCleanupProperly||Nn.warn("Had to forcefully exit the thread",tT),process.exit(0)},5e3).unref()})}if(rY||process.env.DEV_MODE)try{require("inspector").close()}catch(i){Nn.info("Could not close debugger",i)}}}).ref();let e;IE&&!vme&&(e=sY()),Promise.resolve(e).then(()=>{if(Ed()===0)try{Lme(FI)}catch(t){console.error("Error displaying start-up log",t)}wE?.postMessage({type:er.ITC_EVENT_TYPES.CHILD_STARTED})})})}a(nY,"startServers");function sY(){let e=[];for(let t in $i){let r=$i[t];if(t.includes?.("/")&&Ed()==0){Ome(t)&&XK(t),e.push(new Promise((o,c)=>{r.listen({path:t},()=>{o({port:t,name:r.name,protocol_name:r.protocol_name}),Nn.info("Domain socket listening on "+t)}).on("error",c)}));continue}let n,s=At.get(er.CONFIG_PARAMS.HTTP_THREADRANGE);if(s){let o=typeof s=="string"?s.split("-"):s,c=Ed();if(c<o[0]||c>o[1])continue}let i;try{let o=t.lastIndexOf(":");o>0?IE?n={fd:IE(+t.slice(o+1).replace(/[\[\]]/g,""),t.slice(0,o))}:n={host:+t.slice(o+1).replace(/[\[\]]/g,""),port:t.slice(0,o)}:IE?n={fd:IE(+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}),Nn.trace("Listening on port "+t,tT)}).on("error",c)}))}return Promise.all(e)}a(sY,"listenOnPorts");!HI&&!Tme?.noServerStart&&nY();function $I(e,t,r){let n=e?.read?e:new gme({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=$i[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=$i[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):o<5?i(o+1):(Nn.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}a($I,"deliverSocket");var WK=new Map;function Bme(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=WK.get(s),r){case"connection":i=$I(void 0,t),WK.set(s,i),i.write=(c,l,u)=>(wE.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),u&&u(),!0),i.end=(c,l,u)=>(wE.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),u&&u(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),wE.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(Bme,"proxyRequest");var{getComponentName:nT}=(Jf(),oe(Qf));function VI(e,t,r=!0){t||(t=At.get(er.CONFIG_PARAMS.HTTP_PORT));let n=$i[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",JK),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else $i[t]=e;e.on("unhandled",JK)}a(VI,"registerServer");function KI(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=[],At.get(er.CONFIG_PARAMS.HTTP_PORT)!=null&&t.push({port:At.get(er.CONFIG_PARAMS.HTTP_PORT),secure:At.get(er.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),At.get(er.CONFIG_PARAMS.HTTP_SECUREPORT)!=null&&t.push({port:At.get(er.CONFIG_PARAMS.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&At.get(er.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:tY(At.get(er.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)),secure:!1}),t}a(KI,"getPorts");function YI(e,t){let r=[];for(let{port:n,secure:s}of KI(t))r.push(iY(n,s,t?.isOperationsServer,t?.mtls)),typeof e=="function"?GI[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||n}):(e.isSecure=s,VI(e,n,!1)),rT[n]=iT(GI,n);return r}a(YI,"httpServer");function sT(e,t){let r=FI.get(e)??[];FI.set(e,[...r,t])}a(sT,"setPortServerMap");function iY(e,t,r,n){if(sT(e,{protocol_name:t?"HTTPS":"HTTP",name:nT()}),!eT[e]){let s=r?"operationsApi_network":"http",i=At.get(s+"_keepAliveTimeout"),o=At.get(s+"_timeout"),c=At.get(s+"_headersTimeout"),l={noDelay:!0,keepAliveTimeout:i,headersTimeout:c,requestTimeout:o,highWaterMark:128*1024,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,maxHeaderSize:At.get(er.CONFIG_PARAMS.HTTP_MAXHEADERSIZE)},u=At.get(s+"_mtls"),d=At.get(s+"_mtls_required");t&&Object.assign(l,{allowHTTP1:!0,rejectUnauthorized:!!d,requestCert:!!(u||n),ticketKeys:wme(),SNICallback:eY(r?"operations-api":"server",u),ALPNCallback:a(function(f){return f.protocols.includes("harperdb-replication")&&(this.isReplicationConnection=!0),"http/1.1"},"ALPNCallback"),ALPNProtocols:null});let _=Dme(),E=eT[e]=(t?bme:Ame)(l,async(f,h)=>{try{let m=performance.now(),g=new ZK(f,h);r&&(g.isOperationsServer=!0);let S=await rT[e](g);if(!S){if(g._nodeResponse.statusCode)return;S=oY(g)}if(S.headers?.set||(S.headers=new kI(S.headers)),_?S.headers?.set?.("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"):S.headers?.set?.("Server","HarperDB"),S.status===-1){for(let se of S.headers||[])h.setHeader(se[0],se[1]);return f.baseRequest=g,h.baseResponse=S,eT[e].emit("unhandled",f,h)}let y=S.status||200,I=performance.now(),U=I-m,x=S.body,X;if(!S.handlesHeaders){let se=S.headers||new kI;x?x.length>=0&&(typeof x=="string"?se.set("Content-Length",Buffer.byteLength(x)):se.set("Content-Length",x.length),X=!0):(se.set("Content-Length","0"),X=!0);let Q=`hdb;dur=${U.toFixed(2)}`;S.wasCacheMiss&&(Q+=", miss"),Pme(se,"Server-Timing",Q,!0),h.headersSent||h.writeHead(y,se&&(se[Symbol.iterator]?Array.from(se):se)),X&&h.end(x)}let W=g.handlerPath,V=g.method;if(OE(U,"duration",W,V,S.wasCacheMiss==null?void 0:S.wasCacheMiss?"cache-miss":"cache-hit"),KK(y<400,"success",W,V),KK(1,"response_"+y,W,V),!X)if(x instanceof ReadableStream&&(x=YK.fromWeb(x)),(x[Symbol.iterator]||x[Symbol.asyncIterator])&&(x=YK.from(x)),x?.pipe){x.pipe(h),x.destroy&&h.on("close",()=>{x.destroy()});let se=0;x.on("data",Q=>{se+=Q.length}),x.on("end",()=>{OE(performance.now()-I,"transfer",W,V),OE(se,"bytes-sent",W,V)})}else x?.then?x.then(se=>{h.end(se)},T):h.end(x)}catch(m){T(m)}function T(m){let g=m.headers;h.writeHead(m.statusCode||500,g&&(g[Symbol.iterator]?Array.from(g):g)),h.end(m.toString()),m.statusCode?m.statusCode===500?Nn.warn(m):Nn.info(m):Nn.error(m)}a(T,"onError")});i>=0&&(E.keepAliveTimeout=i),c>=0&&(E.headersTimeout=c),t&&(E.ports||(E.ports=[]),E.ports.push(e),l.SNICallback.initialize(E),u&&(E.mtlsConfig=u),E.on("secureConnection",f=>{f._parent.startTime&&OE(performance.now()-f._parent.startTime,"tls-handshake",e),OE(f.isSessionReused(),"tls-reused",e)}),E.isSecure=!0),VI(E,e)}return eT[e]}a(iY,"getHTTPServer");function iT(e,t){let r=oY;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(iT,"makeCallbackChain");function oY(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new kI}}a(oY,"unhandled");function xme(e,t){YI(e,{requestOnly:!0,...t})}a(xme,"onRequest");function Hme(e,t){let r;if(t.securePort){sT(t.securePort,{protocol_name:"TLS",name:nT()});let n=eY("server",t.mtls);r=Ime({rejectUnauthorized:!!t.mtls?.required,requestCert:!!t.mtls,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,SNICallback:n},e),n.initialize(r),$i[t.securePort]=r}return t.port&&(sT(t.port,{protocol_name:"TCP",name:nT()}),r=Rme(e,{noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600}),$i[t.port]=r),r}a(Hme,"onSocket");Object.defineProperty(yme.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 jK=[],qI={};function aY(e,t){for(let{port:r}of KI(t))jK[t?.runFirst?"unshift":"push"]({listener:e,port:r}),qI[r]=iT(jK,r)}a(aY,"onUpgrade");var zK=[],QK={};function kme(e,t){let r=[];for(let{port:n,secure:s}of KI(t)){sT(n,{protocol_name:s?"WSS":"WS",name:nT()});let i=iY(n,s,t?.isOperationsServer,t?.mtls);NE[n]||(NE[n]=new Nme({noServer:!0,maxPayload:t.maxPayload??100*1024*1024}),NE[n].on("connection",(o,c)=>{let l=new ZK(c);l.isWebSocket=!0;let u=rT[n](l);QK[n](o,l,u)}),aY((o,c,l,u)=>o.__harperdb_request_upgraded?u(o,c,l):NE[n].handleUpgrade(o,c,l,d=>{o.__harperdb_request_upgraded=!0,u(o,c,l),NE[n].emit("connection",d,o)}),{port:n}),i.on("upgrade",(o,c,l)=>{qI[n]&&qI[n](o,c,l)})),r.push(i),zK[t?.runFirst?"unshift":"push"]({listener:e,port:n}),QK[n]=iT(zK,n),rT[n]=iT(GI,n)}return r}a(kme,"onWebSocket");function JK(e,t){t.writeHead(404),t.end(`Not found
133
- `)}a(JK,"defaultNotFound")});var VK={};je(VK,{startHTTPThreads:()=>Gme,startSocketServer:()=>XI,updateWorkerIdleness:()=>hY});async function Gme(e=2,t){try{if(t)QI(0,1,!0);else{let{loadRootComponents:r}=oT();if(e===0)return(0,Ds.setMainIsWorker)(!0),await WI().startServers(),Promise.resolve([]);await r()}EY();for(let r=0;r<e;r++)QI(r,e);return Promise.all(fY)}finally{(0,Ds.threadsHaveStarted)()}}function EY(){let e=(0,dY.checkMemoryLimit)();e&&!process.env.DEV_MODE&&(console.error(e),zI=setInterval(()=>{lT.notify(e)},Fme).unref())}function QI(e,t=1,r){if(jI++,(0,Ds.startWorker)("server/threads/threadServer.js",{name:Td.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((o,c)=>{function l(u){u.type===Td.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(n.removeListener("message",l),o(n))}a(l,"onMessage"),n.on("message",l),n.on("error",c)});fY.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=cT.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)_Y[c.localPort](null,c)}}}),r){let n=setInterval(()=>{JI?JI=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,Ds.shutdownWorkers)(),jI=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function XI(e=0,t){if(typeof e=="string")try{(0,uT.existsSync)(e)&&(0,uT.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=qme:r=$me(t):r=ZI;let n=(0,md.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(n._handle){n._handle.onconnection=_Y[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),JI=!0,r(o,(c,l)=>{if(!c){if(cY){let d=o._socket||new md.Socket({handle:o,writable:!0,readable:!0});cY.deliverSocket(d,e,l),d.resume()}else jI>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(),o.localPort=e,pd.push(o)):(console.log("start up a dynamic thread to handle request"),QI(0));mr(!1,"socket-routed");return}c.requests++;let u=o.fd;if(u>=0)c.postMessage({port:e,fd:u,data:l});else{let d=o._socket||new md.Socket({handle:o,writable:!0,readable:!0});Yme(d,c,e)}mr(!0,"socket-routed")})};let s=ru();lT.info(`HarperDB ${s.version} Server running on port ${e}`)}return n.on("error",s=>{console.error("Error in socket server",s)}),process.env._UNREF_SERVER&&n.unref(),n}function ZI(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>=aT)return aT=i,t(r);n=i}aT=0,t(r)}function qme(e,t){let r={};e.getpeername(r);let n=r.address,s=Sd.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);ZI(e,o=>{Sd.set(n,{worker:o,lastUsed:i}),t(o)})}function $me(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=Sd.get(l),d=Date.now();if(u&&u.worker.threadId!==-1)return u.lastUsed=d,s(u.worker);ZI(n,_=>{Sd.set(l,{worker:_,lastUsed:d}),s(_,o)})})}a(r,"findByHeaderAffinity")}function hY(){aT=0;for(let e of hd)e.expectedIdle=e.recentELU.idle+Vme,e.requests=1;hd.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function Yme(e,t,r){let n=Kme++;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(),cT.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")),cT.delete(n)),s.event=="destroy"&&(e.destroy(),cT.delete(n))})}var Ds,md,Td,lT,uT,uY,dY,hd,pd,_Y,cY,jI,fY,zI,Fme,JI,aT,lY,Sd,Vme,cT,Kme,xI=Ie(()=>{Ds=M(ot()),md=require("net"),Td=M(L()),lT=M(K()),uT=require("fs");Ii();uY=require("worker_threads"),dY=M(_c()),hd=[],pd=[],_Y=[],jI=0,fY=[];uY.isMainThread&&(process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)}),(0,Ds.onMessageFromWorkers)(e=>{e.type===Td.ITC_EVENT_TYPES.RESTART&&zI&&(clearInterval(zI),EY())}));Fme=6e5;a(Gme,"startHTTPThreads");a(EY,"licenseWarning");a(QI,"startHTTPWorker");a(XI,"startSocketServer");aT=0;a(ZI,"findMostIdleWorker");lY=36e5,Sd=new Map;a(qme,"findByRemoteAddressAffinity");a($me,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Sd)r.lastUsed+lY<e&&Sd.delete(t)},lY).unref();Vme=1e3;a(hY,"updateWorkerIdleness");(0,Ds.setMonitorListener)(hY);cT=new Map,Kme=1;a(Yme,"proxySocket")});var TY=O((uUe,SY)=>{"use strict";var Wme=require("cluster"),ml=ne();ml.initSync();var mY=L(),iUe=require("util"),vo=K(),oUe=require("fs"),jme=require("fastify"),aUe=ru(),zme=require("@fastify/cors"),Qme=require("@fastify/compress"),Jme=require("@fastify/static"),Xme=zN(),Zme=require("path"),{PACKAGE_ROOT:eSe}=L(),tSe=ls(),rSe=te(),nSe=Hn(),sSe=_c(),{server:iSe}=(qr(),oe(Ja)),{node_request_key:cUe}=(HS(),oe(oI)),{authHandler:oSe,handlePostRequest:aSe,serverErrorHandler:cSe,reqBodyValidationHandler:lSe}=vS(),lUe=require("net"),{registerContentHandlers:uSe}=(zc(),oe(tV)),dSe=6e4,_Se=1024*1024*1024,fSe="TRUE",{CONFIG_PARAMS:PE}=mY,gd;SY.exports={hdbServer:pY,start:pY};async function pY(e){try{vo.debug("In Fastify server"+process.cwd()),vo.debug(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),vo.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=Wme.isMaster,await ESe();let t=e.securePort>0;gd=hSe(t),await gd.ready(),e||(e={}),e.isOperationsServer=!0;try{iSe.http(gd.server,e),gd.server.closeIdleConnections||await gd.listen({port:0,host:"::"})}catch(r){throw gd.close(),vo.error(r),vo.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),vo.fatal(t),process.exit(1)}}a(pY,"operationsServer");async function ESe(){vo.trace("Configuring HarperDB process."),tSe.setSchemaDataToGlobal(),await nSe.setUsersToGlobal(),await sSe.getLicense()}a(ESe,"setUp");function hSe(e){vo.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=pSe(e),r=jme(t);r.server.headersTimeout=SSe(),r.setErrorHandler(cSe);let n=mSe();n&&r.register(zme,n),r.register(function(i,o,c){i.setNotFoundHandler(function(l,u){r.server.emit("unhandled",l.raw,u.raw)}),c()}),r.register(Xme),r.register(Qme),r.register(Jme,{root:Zme.join(eSe,"studio/build-local")}),uSe(r);let s=ml.get(mY.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!rSe.isEmpty(s)&&s.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[lSe,oSe],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),aSe(i,o)}),r.get("/health",()=>"HarperDB is running."),vo.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(hSe,"buildServer");function pSe(e){let t=ml.get(PE.OPERATIONSAPI_NETWORK_TIMEOUT),r=ml.get(PE.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:_Se,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}a(pSe,"getServerOptions");function mSe(){let e=ml.get(PE.OPERATIONSAPI_NETWORK_CORS),t=ml.get(PE.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===fSe)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(n,s)=>s(null,t.indexOf(n)!==-1))),r}a(mSe,"getCORSOpts");function SSe(){return ml.get(PE.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??dSe}a(SSe,"getHeaderTimeoutConfig")});var iw={};je(iw,{disableNATS:()=>gSe,publishToStream:()=>fT,setNATSReplicator:()=>ew,setPublishToStream:()=>RSe,setSubscription:()=>sw,start:()=>TSe});function TSe(){DE.default.get(LE.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&ySe()}function gSe(e=!0){bY=e}function RSe(e,t){fT=e,sw=t}function ySe(){if(bY||process.env._DISABLE_NATS)return;let e=dt(),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];ew(s,r,i)}}Lc((r,n)=>{ew(r.tableName,r.databaseName,r),n&&NY(r)}),!gY&&(gY=!0)}function ew(e,t,r){if(t==="system"&&bSe.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 Lr{static{a(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[ze],record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[ze]})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[ze],record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this[ze],record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[ze]})}static defineSchema(i){NY(i)}static subscribe(){let i=new Dn;return sw(t,e,i),i}static subscribeOnThisThread(i){return i<(DE.default.get(LE.default.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??ASe)}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 dT(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=OY;return i}a(n,"getNATSTransaction")}function NY(e){let t=DE.default.get(LE.default.CONFIG_PARAMS.CLUSTERING_NODENAME);fT(`${rw.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,nw.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 RY,rw,nw,AY,yY,DE,LE,_T,bY,fT,sw,ASe,OY,gY,bSe,dT,tw,IY=Ie(()=>{Pe();Ks();RY=M(kt()),rw=M(ft()),nw=M(eo());Ll();AY=M(cy()),yY=M(on()),DE=M(ne()),LE=M(L()),_T=M(K());a(TSe,"start");a(gSe,"disableNATS");fT=RY.publishToStream,sw=AY.setSubscription;a(RSe,"setPublishToStream");ASe=2;a(ySe,"assignReplicationSource");bSe=["hdb_job","hdb_analytics","hdb_raw_analytics","hdb_info","hdb_license"];a(ew,"setNATSReplicator");a(NY,"publishSchema");dT=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=DE.default.get(LE.default.CONFIG_PARAMS.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writes_by_db){let o=[],c=[],l,u;for(let d of i){let _=d.table,E=d.operation=="put"?"upsert":d.operation;l||(_T.trace(`Sending transaction event ${E}`),u=l={operation:E,schema:s,table:_,__origin:{user:this.user?.username,timestamp:t,node_name:r}},l.hash_values=c,E!=="delete"&&E!=="invalidate"&&(l.records=o)),l.table===_&&l.operation===E?(o.push(d.record),c.push(d.id)):u=u.next={operation:E,table:_,id:d.id,record:d.record},d.expiresAt&&(u.expiresAt=d.expiresAt)}l&&n.push(fT(`${rw.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,nw.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(d=>{throw _T.error("An error has occurred trying to replicate transaction",l,d),d.statusCode=504,d}))}return Promise.all(n)}},tw=class extends dT{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,yY.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};OY=new tw});async function LY({clientId:e,user:t,clean:r,will:n,keepalive:s}){let i;if(e&&!r){let o=await ow.get(e,{returnNonexistent:!0});i=new lw(e,t,o),o&&(i.sessionWasPresent=!0)}else{if(e){let o=await ow.get(e);o&&o.delete()}i=new hT(e,t)}return n&&(n.id=e,n.user={username:t?.username},ME.put(n)),s&&(i.keepalive=s,i.receivedPacket()),i}function aw(){return ET++,ET>65500&&(ET=1),ET}function cw(e,t,r){let{topic:n,retain:s}=e;e.data=t,e.async=!0,r.authorize=!0;let i=Ci.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 Pt(r,()=>s?t===void 0?o.delete(e,r):o.put(e,e.data,r):o.publish(e,e.data,r))}var CY,Ba,PY,DY,wY,ow,ME,ET,hT,lw,MY=Ie(()=>{Pe();cu();CY=M(on()),Ba=M(K());Sc();PY=M(ot()),DY=M(WI());qr();wY=100,ow=pt({database:"system",table:"hdb_durable_session",attributes:[{name:"id",isPrimaryKey:!0},{name:"subscriptions",type:"array",elements:{attributes:[{name:"topic"},{name:"qos"},{name:"startTime"},{name:"acks"}]}}]}),ME=pt({database:"system",table:"hdb_session_will",attributes:[{name:"id",isPrimaryKey:!0},{name:"topic",type:"string"},{name:"data"},{name:"qos",type:"number"},{name:"retain",type:"boolean"},{name:"user",type:"any"}]});(0,PY.getWorkerIndex)()===0&&(async()=>{await DY.when_components_loaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of ME.search({})){let t=e.data,r={...e};r.user?.username&&(r.user=await it.getUser(r.user.username));try{await cw(r,t,r)}catch{(0,Ba.warn)("Failed to publish will",t)}ME.delete(e.id)}})();a(LY,"getSession");ET=1;a(aw,"getNextMessageId");hT=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 d=this.subscriptions.find(g=>g.topic===s),_;d?(_=i>0,d.end(),this.subscriptions.splice(this.subscriptions.indexOf(d),1)):_=i===2;let E={search:l,async:!0,user:this.user,startTime:o,omitCurrent:_,url:""};o&&(0,Ba.trace)("Resuming subscription from",s,"from",o);let f=Ci.getMatch(u,"mqtt");if(!f){let g=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw g.statusCode=404,g}if(E.url=f.relativeURL,E.url.indexOf("+")>-1||E.url.indexOf("#")>-1){let g=E.url.slice(1);if(g.indexOf("#")>-1&&g.indexOf("#")!==g.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(E.isCollection=!0,g.indexOf("+")===g.length-1)E.onlyChildren=!0,E.url="/"+g.slice(0,g.length-1);else{let S=g.split("/"),y;for(let x=0;x<S.length;x++)if(S[x].indexOf("+")>-1)if(S[x]==="+")y=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&y)throw new Error("Filters can not be combined");let I=!0;S[S.length-1]==="#"&&(S.length--,I=!1),y&&(n=a(x=>{let X=x.id;if(!Array.isArray(X)||I&&X.length!==S.length)return!1;for(let W=0;W<S.length;W++)if(S[W]!=="+"&&S[W]!==X[W])return!1;return!0},"filter"));let U=S.indexOf("+");E.url="/"+(U>-1?S.slice(0,U):S).concat("").join("/")}}let h=f.path,T=f.Resource,m=await Pt(E,async()=>{let g=this.createContext();g.topic=s,g.retainHandling=i;let S=await T.subscribe(E,g);if(!S)return;if(!S[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);let y=(async()=>{for await(let I of S)try{let U;if(I.type&&I.type!=="put"&&I.type!=="delete"&&I.type!=="message"&&I.type!=="patch"||n&&!n(I))continue;r?(I.topic=s,U=this.needsAcknowledge(I)):(I.acknowledge?.(),U=aw());let x=I.id;if(Array.isArray(x)&&(x=au(x)),x==null&&(x=""),await this.listener(h+"/"+x,I.value,U,t)===!1)break;this.awaitingAcks?.size>wY?await new Promise(W=>setTimeout(W,this.awaitingAcks.size-wY)):await new Promise(setImmediate)}catch(U){(0,Ba.warn)(U)}})();return S});if(m)return m.topic=s,m.qos=t.qos,this.subscriptions.push(m),m}resume(){}needsAcknowledge(t){let r=aw();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 cw(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();Pt(r,async()=>{try{if(!t){let n=await ME.get(this.sessionId);n?.doesExist()&&await cw(n,n.data,r)}}finally{await ME.delete(this.sessionId)}}).catch(n=>{(0,Ba.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(cw,"publish");lw=class extends hT{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=aw(),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,Ba.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,CY.getNextMonotonicTime)()),(0,Ba.trace)("Added durable subscription",t.topic,r),{qos:t.qos,topic:t.topic,startTime:r}}),ow.put(this.sessionRecord)}}});var dw={};je(dw,{bypassAuth:()=>OSe,start:()=>NSe});function OSe(){HY=!0}function NSe({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){e.mqtt||(e.mqtt={requireAuthentication:i,sessions:new Set,events:new xY.EventEmitter},e.mqtt.events.on("error",()=>{}));let o=e.mqtt,c=[],l=r?.mtls;return n&&(c=e.ws((u,d,_,E)=>{if(d.headers.get("sec-websocket-protocol")!=="mqtt")return E(u,d,_);o.events.emit("connection",u),_r.debug?.("Received WebSocket connection for MQTT from",u._socket.remoteAddress);let{onMessage:f,onClose:h}=vY(u,T=>{u.send(T)},d,Promise.resolve(_).then(()=>d?.user),o);u.on("message",f),u.on("close",h),u.on("error",T=>{_r.info?.("WebSocket error",T)})},{...n})),(t||s)&&c.push(e.socket(async u=>{let d;if(o.events.emit("connection",u),_r.debug?.(`Received ${u.getCertificate?"SSL":"TCP"} connection for MQTT from ${u.remoteAddress}`),l){if(u.authorized)try{let f=l.user;if(f!==null){(f===void 0||f==="Common Name"||f==="CN")&&(f=u.getPeerCertificate().subject.CN);try{d=await e.getUser(f,null,null),(0,Rd.get)(kr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&mT.notify?.({username:d?.username,status:kr.AUTH_AUDIT_STATUS.SUCCESS,type:kr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT mTLS",remote_address:u.remoteAddress})}catch(h){throw(0,Rd.get)(kr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&mT.error?.({username:f,status:kr.AUTH_AUDIT_STATUS.FAILURE,type:kr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:u.remoteAddress}),h}}else _r.debug?.("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",u.remoteAddress)}catch(f){o.events.emit("error",f,u),_r.error?.(f)}else if(l.required)return _r.info?.(`Unauthorized connection attempt, no authorized client certificate provided, error: ${u.authorizationError}`),u.end()}!d&&HY&&u.remoteAddress.includes("127.0.0.1")&&(d=await(0,BY.getSuperUser)(),_r.debug?.("Auto-authorizing local connection",d?.username));let{onMessage:_,onClose:E}=vY(u,f=>u.write(f),null,d,o);u.on("data",_),u.on("close",E),u.on("error",f=>{_r.info?.("Socket error",f)})},{port:t,securePort:s,mtls:l})),c}function vY(e,t,r,n,s){UY||(UY=!0,k_(_=>{pT>0&&_.push({metric:"mqtt-connections",connections:pT,byThread:!0})}));let i;pT++;let o,c={protocolVersion:4},l=(0,ST.parser)({protocolVersion:5});function u(_){l.parse(_)}a(u,"onMessage");function d(){pT--,i||(i=!0,o?.disconnect?.(),s.events.emit("disconnected",o,e),s.sessions.delete(o),qn(!1,"connection","mqtt","disconnect"),_r.debug?.("MQTT connection was closed",e.remoteAddress))}return a(d,"onClose"),l.on("packet",async _=>{n?.then&&(n=await n);let E=_.cmd;if(o)o.then&&await o;else if(E!=="connect"){_r.info?.("Received packet before connection was established, closing connection"),e?.destroy?e.destroy():e?.terminate();return}let f=_.topic,h=f?.indexOf("/",1),T=h>0?f.slice(0,h):f;mr(_.length,"bytes-received",T,g(_),"mqtt");try{switch(o?.receivedPacket?.(),E){case"connect":if(c.protocolVersion=_.protocolVersion,_.username)try{n=await it.getUser(_.username,_.password.toString(),r),(0,Rd.get)(kr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&mT.notify?.({username:n?.username,status:kr.AUTH_AUDIT_STATUS.SUCCESS,type:kr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch(V){return(0,Rd.get)(kr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&mT.error?.({username:_.username,status:kr.AUTH_AUDIT_STATUS.FAILURE,type:kr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),s.events.emit("auth-failed",_,e,V),qn(!1,"connection","mqtt","connect"),m({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return s.events.emit("auth-failed",_,e),qn(!1,"connection","mqtt","connect"),m({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(_,n),_.will){let V=e.deserialize||(e.deserialize=Ao(r?.headers.get?.("content-type")));_.will.data=_.will.payload?.length>0?V(_.will.payload):void 0,delete _.will.payload}o=LY({user:n,..._}),o=await o,o.socket=e,r&&(o.request=r),s.sessions.add(o)}catch(V){return _r.error?.(V),s.events.emit("auth-failed",_,e,V),qn(!1,"connection","mqtt","connect"),m({cmd:"connack",reasonCode:V.code||5,returnCode:V.code||128})}s.events.emit("connected",o,e),qn(!0,"connection","mqtt","connect"),m({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((V,se,Q,de)=>{try{if(i)throw new Error("Session disconnected while trying to send message to",V);let j=V.indexOf("/",1),ae=j>0?V.slice(0,j):V;m({cmd:"publish",topic:V,payload:S(se),messageId:Q||Math.floor(Math.random()*1e8),qos:de.qos},ae);let Oe=e._socket??e;return Oe.writableNeedDrain?new Promise(Ne=>Oe.once("drain",Ne)):!Oe.closed}catch(j){return _r.error?.(j),o?.disconnect(),s.sessions.delete(o),!1}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let y=[];for(let V of _.subscriptions){let se;try{let Q=await o.addSubscription(V,V.qos>=1);se=Q?Q.qos||0:c.protocolVersion<5?128:143}catch(Q){s.events.emit("error",Q,e,V,o),Q.statusCode?Q.statusCode===500?_r.warn?.(Q):_r.info?.(Q):_r.error?.(Q),se=c.protocolVersion<5?128:Q.statusCode===403?135:Q.statusCode===404?143:128}y.push(se)}await o.committed,m({cmd:"suback",granted:y,messageId:_.messageId});break;case"unsubscribe":{let V=[];for(let se of _.unsubscriptions)V.push(o.removeSubscription(se)?0:17);m({cmd:"unsuback",granted:V,messageId:_.messageId});break}case"pubrel":m({cmd:"pubcomp",messageId:_.messageId,reasonCode:0});return;case"publish":let I=_.qos===2?"pubrec":"puback",U=e.deserialize||(e.deserialize=Ao(r?.headers.get?.("content-type"))),X=(_.payload?.length||0)>0?U(_.payload):void 0,W;try{W=await o.publish(_,X)}catch(V){s.events.emit("error",V,e,_,o),_r.warn?.(V),_.qos>0&&m({cmd:I,messageId:_.messageId,reasonCode:128},_.topic);break}_.qos>0&&m({cmd:I,messageId:_.messageId,reasonCode:W===!1?144:0},_.topic);break;case"pubrec":m({cmd:"pubrel",messageId:_.messageId,reasonCode:0});break;case"pubcomp":case"puback":o.acknowledge(_.messageId);break;case"pingreq":m({cmd:"pingresp"});break;case"disconnect":i=!0,o?.disconnect(!0),s.events.emit("disconnected",o,e),s.sessions.delete(o),qn(!0,"connection","mqtt","disconnect"),_r.debug?.("Received disconnect command, closing MQTT session",e.remoteAddress),e.close?e.close():e.end();break}}catch(y){s.events.emit("error",y,e,_,o),_r.error?.(y),m({cmd:"disconnect"})}function m(y,I){let U=(0,ST.generate)(y,c);t(U),mr(U.length,"bytes-sent",I,g(y),"mqtt")}a(m,"sendPacket");function g(y){return y.qos>0?y.cmd+",qos="+y.qos:y.cmd}a(g,"packetMethodName");function S(y){return jc(y,r)}a(S,"serialize")}),l.on("error",_=>{_r.warn("MQTT parsing error, closing connection:",_.message),e?.destroy?e.destroy():e?.terminate()}),{onMessage:u,onClose:d}}var ST,BY,Rd,kr,uw,xY,mT,_r,HY,UY,pT,kY=Ie(()=>{ST=require("mqtt-packet");MY();BY=M(Hn());zc();Ii();qr();Rd=M(ne()),kr=M(L()),uw=M(Oc()),xY=require("events"),mT=(0,uw.loggerWithTag)("auth-event"),_r=(0,uw.loggerWithTag)("mqtt"),HY=(0,Rd.get)(kr.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(OSe,"bypassAuth");a(NSe,"start");pT=0;a(vY,"onSocket")});var Qf={};je(Qf,{component_errors:()=>yd,getComponentName:()=>DSe,loadComponent:()=>RT,loadComponentDirectories:()=>YY,setErrorReporter:()=>PSe});function YY(e,t){t&&(fw=t),e&&(Ew=e);let r=[];if((0,It.existsSync)(_w)){let s=(0,It.readdirSync)(_w,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Nt.join)(_w,o);r.push(RT(c,fw,"hdb",!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(RT(n,fw,n,!1,null,!!process.env.DEV_MODE)),Promise.all(r).then(()=>{KY=!0})}function PSe(e){UE=e}async function RT(e,t,r,n,s,i){let o=(0,It.realpathSync)(e);if(TT.has(o))return TT.get(o);TT.set(o,!0),s&&(Ew=s);try{let c;n&&(yd=new Map);let l=(0,Nt.join)(e,n?"harperdb-config.yaml":"config.yaml");(0,It.existsSync)(l)?c=n?(0,AT.getConfigObj)():(0,GY.parseDocument)((0,It.readFileSync)(l,"utf8")).toJSON():c=hw;let u=(0,Nt.join)(e,"node_modules","harperdb");try{Sl.isMainThread&&(n||(0,It.existsSync)(u)&&(0,It.realpathSync)(Od.PACKAGE_ROOT)!==(0,It.realpathSync)(u))&&((0,It.rmSync)(u,{recursive:!0,force:!0}),(0,It.existsSync)((0,Nt.join)(e,"node_modules"))||(0,It.mkdirSync)((0,Nt.join)(e,"node_modules")),(0,It.symlinkSync)(Od.PACKAGE_ROOT,u,"dir"))}catch(E){Ad.default.error("Error symlinking harperdb module",E)}let d=gT,_=n;for(let E in c){gT=E;let f=c[E];if(yd.set(n?E:(0,Nt.basename)(e),!1),!f)continue;let h,T=f.package;try{if(T){let I=e,U;for(;!(0,It.existsSync)(U=(0,Nt.join)(I,"node_modules",E));)if(I=(0,Nt.dirname)(I),I.length<(0,VY.getHdbBasePath)().length){U=null;break}if(U)h=await RT(U,t,r,!1),_=!0;else throw new Error(`Unable to find package ${E}:${T}`)}else h=CSe[E];if(!h)continue;let m=a(I=>(I.origin=r,pt(I)),"ensureTable"),g=f.network||(f.port||f.securePort)&&f,S=g?.securePort||g?.https&&g.port,y=!g?.https&&g?.port;if(Sl.isMainThread&&(h=await h.startOnMainThread?.({server:it,ensureTable:m,port:y,securePort:S,resources:t,...f})||h,n&&g))for(let I of[y,S])try{if(+I&&!FY.includes(I)){let U=pw.get(Od.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);U&&Ad.default.warn("Session affinity is not recommended and may cause memory leaks"),(U||!xS)&&(FY.push(I),XI(I,U))}}catch(U){console.error("Error listening on socket",I,U,E)}if(t.isWorker&&(h=await h.start?.({server:it,ensureTable:m,port:y,securePort:S,resources:t,...f})||h),Ew.set(h,!0),(h.handleFile||h.handleDirectory||h.setupFile||h.setupDirectory)&&f.files!=null){if(f.files.includes(".."))throw(0,$Y.handleHDBError)("Can not reference parent directories");let I=(0,Nt.join)(e,f.files).replace(/\\/g,"/"),U=I.indexOf("/*");if(U>-1&&f.files!==hw[E]?.files&&!(0,It.existsSync)(I.slice(0,U)))throw new Error(`The path '${I.slice(0,U)}' does not exist and cannot be used as the base of the resolved 'files' path value '${f.files}'`);let x=(0,Nt.basename)(e),X=f.path||"/";X=X.startsWith("/")?X:X.startsWith("./")?"/"+x+X.slice(2):X==="."?"/"+x:"/"+x+"/"+X;let W,V,se;if(f.root){let de=f.root;de.startsWith("/")&&(de=de.slice(1)),de.endsWith("/")&&(de=de.slice(0,-1)),de+="/",V=(0,Nt.join)(e,de)}else(se=I.indexOf("/*"))>-1?(V=I.slice(0,se+1),W=(0,Nt.relative)(e,V)):f.files.indexOf("/")>-1&&(V=I.slice(0,I.lastIndexOf("/")+1),W=(0,Nt.relative)(e,V));let Q=!1;if(Sl.isMainThread&&h.setupDirectory&&(Q=await h.setupDirectory?.(X,V,t)),t.isWorker&&h.handleDirectory&&(Q=await h.handleDirectory?.(X,V,t)),Q){_=!0;continue}for(let de of await(0,qY.default)(I,{onlyFiles:!1,objectMode:!0})){let{path:j,dirent:ae}=de;_=!0;let Oe=(0,Nt.relative)(e,j).replace(/\\/g,"/");if(W)if(Oe.startsWith(W))Oe=Oe.slice(W.length+1);else throw new Error(`The root path '${f.root}' does not reference a valid part of the file path '${Oe}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`);let Ne=X+(X.endsWith("/")?"":"/")+Oe;try{if(ae.isFile()){let Me=await wSe(j);Sl.isMainThread&&await h.setupFile?.(Me,Ne,j,t),t.isWorker&&await h.handleFile?.(Me,Ne,j,t)}else Sl.isMainThread&&await h.setupDirectory?.(Ne,j,t),t.isWorker&&await h.handleDirectory?.(Ne,j,t)}catch(Me){Me.message=`Could not load ${ae.isFile()?"file":"directory"} '${j}'${f.module?" using '"+f.module+"'":""} for application '${e}' due to: ${Me.message}`,UE?.(Me),((0,bd.getWorkerIndex)()===0?console:Ad.default).error(Me),t.set(f.path||"/",new ta(Me)),yd.set(n?E:(0,Nt.basename)(e),Me.message)}}}}catch(m){m.message=`Could not load component '${E}' for application '${(0,Nt.basename)(e)}' due to: ${m.message}`,UE?.(m),((0,bd.getWorkerIndex)()===0?console:Ad.default).error(m),t.set(f.path||"/",new ta(m),null,!0),yd.set(n?E:(0,Nt.basename)(e),m.message)}}if(gT=d,Sl.isMainThread&&!KY&&i&&(0,bd.watchDir)(e,async()=>YY()),c.extensionModule){let E=await IS((0,Nt.join)(e,c.extensionModule));return TT.set(o,E),E}if(!_&&t.isWorker){let E=`${e} did not load any modules, resources, or files, is this a valid component?`;UE?.(new Error(E)),((0,bd.getWorkerIndex)()===0?console:Ad.default).error(E),yd.set((0,Nt.basename)(e),E)}}catch(c){console.error(`Could not load application directory ${e}`,c),c.message=`Could not load application due to ${c.message}`,UE?.(c),t.set("",new ta(c))}}var It,Nt,Sl,GY,pw,Od,qY,bd,Ad,$Y,VY,ISe,AT,wSe,_w,Ew,KY,fw,yd,CSe,hw,FY,TT,UE,gT,DSe,Jf=Ie(()=>{It=require("fs"),Nt=require("path"),Sl=require("worker_threads"),GY=require("yaml"),pw=M(ne()),Od=M(L());gP();dV();hV();TV();gV();UV();f1();T1();qY=M(require("fast-glob")),bd=M(ot()),Ad=M(K());MN();qr();$Y=M(_e());Pe();xI();VY=M(ne()),ISe=M(TY());qm();IY();us();kY();AT=M(Ct());HS();Ry();({readFile:wSe}=It.promises),_w=(0,AT.resolvePath)(pw.get(Od.CONFIG_PARAMS.COMPONENTSROOT)),Ew=new Map,yd=new Map;a(YY,"loadComponentDirectories");CSe={REST:LS,rest:LS,graphql:DN,graphqlSchema:Lg,roles:LN,jsResource:vN,fastifyRoutes:tI,login:xN,static:rI,operationsApi:ISe,customFunctions:{},http:{},clustering:iw,replication:la,authentication:xf,mqtt:dw},hw={rest:!0,graphql:!0,graphqlSchema:{files:"*.graphql"},roles:{files:"roles.yaml"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(hw,"static",{value:{files:"web/**"}});FY=[],TT=new Map;a(PSe,"setErrorReporter");DSe=a(()=>gT,"getComponentName");a(RT,"loadComponent")});var oT=O((HUe,jY)=>{var{isMainThread:WY}=require("worker_threads"),{getTables:LSe,getDatabases:BUe,table:xUe}=(Pe(),oe(ut)),{loadComponentDirectories:MSe,loadComponent:USe}=(Jf(),oe(Qf)),{resetResources:vSe}=(cu(),oe(pB)),BSe=IO(),xSe=Ct(),{dirname:HSe}=require("path"),{getConnection:kSe}=kt(),FSe=ne(),{CONFIG_PARAMS:GSe}=L(),{loadCertificates:qSe}=Zs(),mw=new Map;async function $Se(e=!1){!WY&&FSe.get(GSe.CLUSTERING_ENABLED)&&kSe();try{WY&&await BSe()}catch(n){console.error(n)}let t=vSe();LSe(),t.isWorker=e,await qSe(),await USe(HSe(xSe.getConfigFilePath()),t,"hdb",!0,mw),await MSe(mw,t);let r=[];for(let[n]of mw)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}a($Se,"loadRootComponents");jY.exports.loadRootComponents=$Se});var ot=O((FUe,ci)=>{"use strict";var{Worker:VSe,MessageChannel:KSe,parentPort:Vi,isMainThread:Aw,threadId:YSe,workerData:Ki}=require("worker_threads"),{PACKAGE_ROOT:WSe}=L(),{join:XY,isAbsolute:jSe,extname:zSe}=require("path"),{server:ZY}=(qr(),oe(Ja)),{watch:QSe,readdir:JSe}=require("fs/promises"),{totalmem:zY}=require("os"),vE=L(),eW=ne(),Yi=K(),{randomBytes:XSe}=require("crypto"),{_assignPackageExport:ZSe}=fi(),eTe=L(),QY=1024*1024,xa=[],Ls=[],tTe=50,yw=1e4,rTe="restart",tW="request_thread_info",rW="resource_report",nW="thread_info",sW="added-port",nTe="ack",Sw;ZSe("threads",Ls);ci.exports={startWorker:Tw,restartWorkers:Ow,shutdownWorkers:cTe,workers:xa,setMonitorListener:pTe,onMessageFromWorkers:lTe,onMessageByType:dW,broadcast:dTe,broadcastWithAcknowledgement:fTe,setChildListenerByType:aTe,getWorkerIndex:iW,getWorkerCount:oW,getTicketKeys:cW,setMainIsWorker:iTe,setTerminateTimeout:sTe,restartNumber:Ki?.restartNumber||1};Ls.onMessageByType=dW;Ls.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=Ls.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};ci.exports.whenThreadsStarted=new Promise(e=>{ci.exports.threadsHaveStarted=e});var bw;function sTe(e){yw=e}a(sTe,"setTerminateTimeout");function iW(){return Ki?Ki.workerIndex:bw?0:void 0}a(iW,"getWorkerIndex");function oW(){return Ki?Ki.workerCount:bw?1:void 0}a(oW,"getWorkerCount");function iTe(e){bw=e,ci.exports.threadsHaveStarted()}a(iTe,"setMainIsWorker");var aW=1,yT;function cW(){return yT||(yT=Aw?XSe(48):Ki.ticketKeys,yT)}a(cW,"getTicketKeys");Object.defineProperty(ZY,"workerIndex",{get(){return iW()}});Object.defineProperty(ZY,"workerCount",{get(){return oW()}});var lW={[tW](e,t){ETe(t)},[rW](e,t){hTe(t,e)}};function Tw(e,t={}){let r=process.constrainedMemory?.()||zY();r=Math.min(r,zY(),2e4*QY);let n=eW.get(vE.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/QY/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],o=[];for(let l of Ls){let u=new KSe;u.existingPort=l,i.push(u),o.push(u.port2)}zSe(e)||(e+=".js");let c=new VSe(jSe(e)?e:XY(WSe,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:aW=t.threadCount,name:t.name,restartNumber:ci.exports.restartNumber,ticketKeys:cW()},transferList:o,...t});for(let{port1:l,existingPort:u}of i)u.postMessage({type:sW,port:l,threadId:c.threadId},[l]);return OT(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>Tw(e,t),c.on("error",l=>{Yi.error(`Worker index ${t.workerIndex} error:`,l)}),c.on("exit",l=>{xa.splice(xa.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<tTe?(t.unexpectedRestarts=c.unexpectedRestarts+1,Tw(e,t)):Yi.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",l=>{lW[l.type]?.(l,c)}),xa.push(c),STe(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(Tw,"startWorker");var oTe=[vE.THREAD_TYPES.HTTP];async function Ow(e=null,t=Math.max(aW>3,1),r=!0){if(Aw){if(r){let{loadRootComponents:o}=oT();await o()}ci.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;Yi.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:ci.exports.restartNumber,type:vE.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=oTe.indexOf(o.name)>-1,l=new Promise(u=>{let d=setTimeout(()=>{Yi.warn("Thread did not voluntarily terminate, terminating from the outside",o.threadId),o.terminate()},yw*2).unref();o.on("exit",()=>{clearTimeout(d),n.splice(n.indexOf(l)),!c&&r&&o.startCopy(),u()})});if(n.push(l),c&&r){let u=o.startCopy(),d=new Promise(_=>{let E=a(f=>{f.type===eTe.ITC_EVENT_TYPES.CHILD_STARTED&&(Yi.trace("Worker has started",u.threadId),_(),s.splice(s.indexOf(d)),u.off("message",E))},"startListener");Yi.trace("Waiting for worker to start",u.threadId),u.on("message",E)});s.push(d),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}=Vu();r&&(e==="http"||!e)&&eW.get(vE.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else Vi.postMessage({type:rTe,workerType:e})}a(Ow,"restartWorkers");function aTe(e,t){lW[e]=t}a(aTe,"setChildListenerByType");function cTe(e){return Ow(e,1/0,!1)}a(cTe,"shutdownWorkers");var uW=[];function lTe(e){uW.push(e)}a(lTe,"onMessageFromWorkers");var gw=new Map;function dW(e,t){let r=gw.get(e);r||gw.set(e,r=[]),r.push(t)}a(dW,"onMessageByType");var uTe=10;async function dTe(e,t){let r=0;for(let n of Ls)try{n.postMessage(e),r++>uTe&&(r=0,await new Promise(setImmediate))}catch(s){Yi.error("Unable to send message to worker",s)}t&&fW(e,null)}a(dTe,"broadcast");var bT=new Map,_Te=1;function fTe(e){return new Promise(t=>{let r=0;for(let n of Ls)try{let s=_Te++,i=a(()=>{bT.delete(s),--r===0&&t(),n!==Vi&&--n.refCount===0&&n.unref()},"ack_handler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,bT.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,o]of bT)o.port===n&&o()})),n.postMessage(e),r++}catch(s){Yi.error("Unable to send message to worker",s)}r===0&&t()})}a(fTe,"broadcastWithAcknowledgement");function ETe(e){e.postMessage({type:nW,workers:_W()})}a(ETe,"sendThreadInfo");function _W(){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(_W,"getChildWorkerInfo");function hTe(e,t){e.resources=t,e.resources.updated=Date.now()}a(hTe,"recordResourceReport");var Rw;function pTe(e){Rw=e}a(pTe,"setMonitorListener");var mTe=1e3,JY=!1;function STe(){JY||(JY=!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}Rw&&Rw()},mTe).unref())}a(STe,"startMonitoring");var TTe=1e3;if(Vi&&Ki?.addPorts){OT(Vi);for(let e=0,t=Ki.addPorts.length;e<t;e++){let r=Ki.addPorts[e];r.threadId=Ki.addThreadIds[e],OT(r)}setInterval(()=>{let e=process.memoryUsage();Vi.postMessage({type:rW,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},TTe).unref(),Sw=a(()=>new Promise((e,t)=>{Vi.on("message",r),Vi.postMessage({type:tW});function r(n){n.type===nW&&(Vi.off("message",r),e(n.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else Sw=_W;ci.exports.getThreadInfo=Sw;function OT(e,t){Ls.push(e),e.on("message",r=>{if(r.type===sW)r.port.threadId=r.threadId,OT(r.port);else if(r.type===nTe){let n=bT.get(r.id);n&&n()}else fW(r,e)}).on("close",()=>{Ls.splice(Ls.indexOf(e),1)}).on("exit",()=>{Ls.splice(Ls.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(OT,"addPort");function fW(e,t){for(let n of uW)n(e,t);let r=gw.get(e.type);if(r)for(let n of r)try{n(e,t)}catch(s){Yi.error(s)}}a(fW,"notifyMessageListeners");if(Aw){let e,t,r=new Set,n=a(async(s,i)=>{i&&(e=i);for(let o of await JSe(s,{withFileTypes:!0}))o.isDirectory()&&o.name!=="node_modules"&&n(XY(s,o.name));try{for await(let{filename:o}of QSe(s,{persistent:!1}))r.add(o),t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await Ow(),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");ci.exports.watchDir=n,process.env.WATCH_DIR&&n(process.env.WATCH_DIR)}else Vi.on("message",async e=>{let{type:t}=e;t===vE.ITC_EVENT_TYPES.SHUTDOWN&&(ci.exports.restartNumber=e.restartNumber,Vi.unref(),setTimeout(()=>{Yi.warn("Thread did not voluntarily terminate",YSe),process.exit(0)},yw).unref())})});var Av={};je(Av,{AUDIT_STORE_OPTIONS:()=>Df,Decoder:()=>Dc,HAS_CURRENT_RESIDENCY_ID:()=>ec,HAS_EXPIRATION_EXTENDED_TYPE:()=>o_,HAS_ORIGINATING_OPERATION:()=>i_,HAS_PREVIOUS_RESIDENCY_ID:()=>tc,REMOTE_SEQUENCE_UPDATE:()=>jp,createAuditEntry:()=>Ul,getLastRemoved:()=>eb,openAuditStore:()=>PT,readAuditEntry:()=>Ht,removeAuditEntry:()=>DT,setAuditRetention:()=>RTe,transactionKeyEncoder:()=>yW});function PT(e){let t=e.auditStore=e.openDB(Nw.AUDIT_STORE_NAME,{create:!1,...Df});t||(t=e.auditStore=e.openDB(Nw.AUDIT_STORE_NAME,Df),hW(t,1)),t.rootStore=e;let r=[];t.addDeleteRemovalCallback=function(i,o){return r[i]=o,t.deleteCallbacks=r,{remove(){delete r[i]}}};let n=null;function s(i=NT){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:d}of t.getRange({start:1,snapshot:!1,end:Date.now()-Iw}))if(c=DT(t,u,d),l=u,await new Promise(setImmediate),++o>=gTe){i=10;break}await c}finally{o===0?i=Math.min(i<<1,Iw/10):hW(t,l),s(i)}},i).unref()}if(a(s,"scheduleAuditCleanup"),t.scheduleAuditCleanup=s,(0,xE.getWorkerIndex)()===(0,xE.getWorkerCount)()-1&&s(NT),(0,xE.getWorkerIndex)()===0&&!EW)for(let i of t.getKeys({reverse:!0,limit:1}))i>Date.now()&&(EW=!0,CT.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 DT(e,t,r){if((ATe(r)&15)===ww){let n=Ht(r),s=n.tableId;e.deleteCallbacks?.[s]?.(n.recordId)}return e.remove(t)}function hW(e,t){Cw[0]=t,e.put(Symbol.for("last-removed"),bW)}function eb(e){let t=e.get(Symbol.for("last-removed"));if(t)return bW.set(t),Cw[0]}function RTe(e,t=NT){Iw=e,NT=t}function Ul(e,t,r,n,s,i,o,c,l,u,d,_,E){let f=OW[o];if(!f)throw new Error(`Invalid audit entry type ${o}`);let h=1;if(n&&(n>1?Ha.setFloat64(0,n):Ms.set(zg),h=9),l){if(l&16761087)throw new Error("Illegal extended type");h++}g(s),g(t),m(r),Ha.setFloat64(h,e),h+=8,l&ec&&g(u),l&tc&&g(d),l&o_&&(Ha.setFloat64(h,_),h+=8),l&i_&&g(NW[E]),i?m(i):Ms[h++]=0,l?Ha.setUint16(n?8:0,f|l|32768):Ms[n?8:0]=f;let T=Ms.subarray(0,h);if(c)return Buffer.concat([T,c]);return T;function m(S){let y=h;h+=1,h=(0,Tl.writeKey)(S,Ms,h);let I=h-y-1;I>127?I>16383?(CT.error("Key or username was too large for audit entry",S),h=y+1,Ms[y]=0):(Ms.copyWithin(y+2,y+1,h),Ha.setUint16(y,I|32768),h++):Ms[y]=I}function g(S){S<128?Ms[h++]=S:S<16384?(Ha.setUint16(h,S|32768),h+=2):S<1056964608?(Ha.setUint32(h,S|3221225472),h+=4):(Ms[h]=255,Ha.setUint32(h+1,S),h+=5)}}function ATe(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 Dc(e.buffer,e.byteOffset,e.byteLength));return n.position=t,n.readInt()}function Ht(e,t=0,r=void 0){try{let n=e.dataView||(e.dataView=new Dc(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,d=n.position+=l,_=n.readFloat64(),E,f,h,T;if(i&ec&&(E=n.readInt()),i&tc&&(f=n.readInt()),i&o_&&(h=n.readFloat64()),i&i_){let S=n.readInt();T=NW[S]}l=n.readInt();let m=n.position,g=n.position+=l;return{type:OW[i&7],tableId:c,nodeId:o,get recordId(){return(0,Tl.readKey)(e,u,d)},getBinaryRecordId(){return e.subarray(u,d)},version:_,previousLocalTime:s,get user(){return g>m?(0,Tl.readKey)(e,m,g):void 0},get encoded(){return t?e.subarray(t,r):e},getValue(S,y,I){if(i&IT||i&BE&&!y)return S.decoder.decode(e.subarray(n.position,r));if(i&BE&&I)return Pw(S.getEntry(this.recordId),I,S)},getBinaryValue(){return i&(IT|BE)?e.subarray(n.position,r):void 0},extendedType:i,residencyId:E,previousResidencyId:f,expiresAt:h,originatingOperation:T}}catch(n){return CT.error("Reading audit entry error",n,e),{}}}var Tl,wT,Nw,RW,xE,AW,CT,Ms,Ha,yW,Df,Iw,gTe,Cw,bW,NT,EW,IT,BE,pW,ww,mW,SW,TW,gW,jp,ec,tc,i_,o_,OW,NW,Dc,Qi=Ie(()=>{Tl=require("ordered-binary"),wT=M(ne()),Nw=M(xt()),RW=M(L()),xE=M(ot()),AW=M(te());vl();CT=M(K());LT();(0,wT.initSync)();Ms=Buffer.alloc(1024),Ha=new DataView(Ms.buffer,Ms.byteOffset,1024),yW={writeKey(e,t,r){return e===s_?(t.set(s_,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,Tl.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,Tl.readKey)(e,t,r)}},Df={encoding:"binary",keyEncoder:yW},Iw=(0,AW.convertToMS)((0,wT.get)(RW.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,gTe=1e3,Cw=new Float64Array(1),bW=new Uint8Array(Cw.buffer),NT=1e4,EW=!1;a(PT,"openAuditStore");a(DT,"removeAuditEntry");a(hW,"updateLastRemoved");a(eb,"getLastRemoved");a(RTe,"setAuditRetention");IT=16,BE=32,pW=1,ww=2,mW=3,SW=4,TW=5,gW=6,jp=11,ec=512,tc=1024,i_=2048,o_=4096,OW={put:pW|IT,[pW]:"put",delete:ww,[ww]:"delete",message:mW|IT,[mW]:"message",invalidate:SW|BE,[SW]:"invalidate",patch:TW|BE,[TW]:"patch",relocate:gW,[gW]:"relocate"},NW={insert:1,update:2,upsert:3,1:"insert",2:"update",3:"upsert"};a(Ul,"createAuditEntry");a(ATe,"readAction");a(Ht,"readAuditEntry");Dc=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}}}});var Dw={};je(Dw,{add:()=>MT,applyReverse:()=>IW,getRecordAtTime:()=>Pw,rebuildUpdateBefore:()=>UT});function MT(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 UT(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,MT(n,s,i)}else r&&(n||(n={}),n[s]=i)}else n||(n={}),n[s]=e[s];return n}function IW(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=yTe[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=wW}}function Pw(e,t,r){let n=r.rootStore.auditStore,s={...e.value},i=e.localTime;for(;i>t;){let l=n.get(i),u=Ht(l);switch(u.type){case"put":s=u.getValue(r);break;case"patch":IW(s,u.getValue(r));break;case"delete":s=null}i=u.previousLocalTime}let o={},c=0;for(let l in s)s[l]===wW&&(o[l]=!0,c++);for(;c>0&&i>0;){let l=n.get(i),u=Ht(l),d;switch(u.type){case"put":d=u.getValue(r);break;case"patch":d=u.getValue(r);break}for(let _ in d)o[_]&&(s[_]=d[_],o[_]=!1,c--);i=u.previousLocalTime}if(c>0)for(let l in o)s[l]=null;return s}var yTe,wW,LT=Ie(()=>{Qi();a(MT,"add");MT.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)};yTe={add:MT};a(UT,"rebuildUpdateBefore");a(IW,"applyReverse");wW={};a(Pw,"getRecordAtTime")});function Zn(e){return e[fr]||(e[fr]=Object.create(null))}function kT(e,t){let r=e.prototype,n={},s=t.attributes||t.properties||[];for(let o of s){let c=o.name,l,u;if(o.resolve)u={get(){return o.resolve(this,this[Fe])},set(d){return o.set(this,d)},configurable:!0};else{switch(o.type){case"String":l=a(function(d){if(!(typeof d=="string"||d==null&&o.nullable!==!1))throw new Us.ClientError(`${c} must be a string, attempt to assign ${d}`);Zn(this)[c]=d},"set");break;case"ID":l=a(function(d){if(!(typeof d=="string"||d?.length>0&&d.every?.(_=>typeof _=="string")||d==null&&o.nullable!==!1))throw new Us.ClientError(`${c} must be a string, attempt to assign ${d}`);Zn(this)[c]=d},"set");break;case"Float":case"Number":l=a(function(d){let _=d?.__op__?d.value:d;if(!(typeof _=="number"||d==null&&o.nullable!==!1))throw new Us.ClientError(`${c} must be a number, attempt to assign ${_}`);Zn(this)[c]=d},"set");break;case"Int":l=a(function(d){let _=d?.__op__?d.value:d;if(!(_>>0===_||d==null&&o.nullable!==!1))if(typeof _=="number"&&Math.abs((_>>0)-_)<=1)_=Math.round(_),d?.__op__?d.value=_:d=_;else throw new Us.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${d}`);Zn(this)[c]=d},"set");break;case"Long":l=a(function(d){let _=d?.__op__?d.value:d;if(!(Math.round(_)===d&&Math.abs(_)<=9007199254740992||d==null&&o.nullable!==!1))if(typeof _=="number"&&Math.abs(_)<=9007199254740992)_=Math.round(_),d?.__op__?d.value=_:d=_;else throw new Us.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${d}`);Zn(this)[c]=d},"set");break;case"BigInt":l=a(function(d){let _=d?.__op__?d.value:d;if(!(typeof _=="bigint"||d==null&&o.nullable!==!1))if(typeof _=="string"||typeof _=="number")_=BigInt(_),d?.__op__?d.value=_:d=_;else throw new Us.ClientError(`${c} must be a number, attempt to assign ${d}`);Zn(this)[c]=d},"set");break;case"Boolean":l=a(function(d){if(!(typeof d=="boolean"||d==null&&o.nullable!==!1))throw new Us.ClientError(`${c} must be a boolean, attempt to assign ${d}`);Zn(this)[c]=d},"set");break;case"Date":l=a(function(d){if(!(d instanceof Date||d==null&&o.nullable!==!1))if(typeof d=="string"||typeof d=="number")d=new Date(d);else throw new Us.ClientError(`${c} must be a Date, attempt to assign ${d}`);Zn(this)[c]=d},"set");break;case"Bytes":l=a(function(d){if(!(d instanceof Uint8Array||d==null&&o.nullable!==!1))throw new Us.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${d}`);Zn(this)[c]=d},"set");break;case"Any":case void 0:l=a(function(d){Zn(this)[c]=d},"set");break;default:l=a(function(d){if(!(typeof d=="object"||d==null&&o.nullable!==!1))throw new Us.ClientError(`${c} must be an object, attempt to assign ${d}`);Zn(this)[c]=d},"set")}u={get(){let d=this[fr];if(d&&c in d){let E=d[c];if(E?.__op__){let f=this[ve]?.[c];return E.update(f)}return E}let _=this[ve]?.[c];if(_&&typeof _=="object"){let E=PW(_,o);if(E)return d||(d=this[fr]=Object.create(null)),d[c]=E}return _},set:l,enumerable:!0,configurable:!0}}u.get.isAttribute=!0,n[c]=u,(!(c in r)||Object.getOwnPropertyDescriptor(r,c)?.get?.isAttribute)&&Object.defineProperty(r,c,u)}i("getProperty",function(o){let c=n[o];if(c)return c.get.call(this);let l=this[fr];return l?.[o]!==void 0?l[o]:this[ve]?.[o]}),i("set",function(o,c){let l=n[o];if(l)return l.set.call(this,c);if(t.sealed)throw new Us.ClientError("Can not add a property to a sealed table schema");Zn(this)[o]=c}),i("deleteProperty",function(o){Zn(this)[o]=void 0}),i("toJSON",function(){let o=this[fr],c;for(let u in o){c||(c={...this[ve]});let d=o[u];if(d?.__op__){let _=c[u];d=d.update(_)}c[u]=d}return Object.keys(this).length>0&&(c||(c={...this[ve]}),Object.assign(c,this)),c||this[ve]}),r.get||i("get",r.getProperty),r.delete||i("delete",r.deleteProperty);function i(o,c){Object.defineProperty(r,o,{value:c,configurable:!0})}a(i,"setMethod")}function PW(e,t){let r;switch(e.constructor){case Object:return t?((r=t.TrackedObject)||(t.TrackedObject=r=class{static{a(this,"TrackedObject")}constructor(s){if(s?.[ve])throw new Error("Can not track an already tracked object, check for circular references");this[ve]=s}},kT(r,t)),new r(e)):new vT(e);case Array:let n=new xT(e.length);n[ve]=e;for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=PW(o,t?.elements)),n[s]=o}return n;default:return e}}function hp(e){let t=e[fr],r;for(let s in t){r||(r={...e[ve]});let i=t[s];if(i&&typeof i=="object")if(i.__op__){let o=r[s];i=i.update(o)}else i=hp(i);r[s]=i}return Object.keys(e).length>0&&(r||(r={...e[ve]}),Object.assign(r,e)),r||e[ve]}function Rl(e,t=e[fr]){let r;if(CW.call(e,ve)&&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=Rl(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[ve]});let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=Dw[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=Rl(s);r[n]=s}return r?Object.freeze(r):CW.call(e,ve)?e[ve]:e}function BT(e){let t=e[ve];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[gl]||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?.[ve]===s){if(BT(i))return!0}else return!0}}else{let r=e[fr];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[ve]===i){if(BT(s))return!0}else return!0}else return!0}}return!1}var Us,fr,vT,CW,gl,xT,HT,pp=Ie(()=>{Ks();Us=M(_e());LT();fr=Symbol("own-data");a(Zn,"getChanges");a(kT,"assignTrackedAccessors");a(PW,"trackObject");vT=class{static{a(this,"GenericTrackedObject")}constructor(t){if(t?.[ve])throw new Error("Can not track an already tracked object, check for circular references");this[ve]=t}};kT(vT,{});a(hp,"collapseData");CW=Object.prototype.hasOwnProperty;a(Rl,"updateAndFreeze");a(BT,"hasChanges");gl=Symbol.for("has-array-changes"),xT=class extends Array{static{a(this,"TrackedArray")}[gl];constructor(t){super(t)}splice(...t){return this[gl]=!0,super.splice(...t)}push(...t){return this[gl]=!0,super.push(...t)}pop(){return this[gl]=!0,super.pop()}unshift(...t){return this[gl]=!0,super.unshift(...t)}shift(){return this[gl]=!0,super.shift()}};xT.prototype.constructor=Array;HT=class{constructor(t){this.value=t}static{a(this,"Addition")}__op__="add";update(t){return(+t||0)+this.value}}});var gA={};je(gA,{CONTEXT:()=>Fe,ID_PROPERTY:()=>ze,IS_COLLECTION:()=>li,MultiPartId:()=>GT,RECORD_PROPERTY:()=>ve,Resource:()=>Lr,snake_case:()=>OTe,transformForSelect:()=>qT});function OTe(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function DW(e,t){if(Al=!1,e==="")return null;if(e=e.slice(1),t.splitSegments){if(e.indexOf("/")===-1)return e===""?(Al=!0,null):t.coerceId(decodeURIComponent(e));let r=e.split("/"),n=new GT;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){Al=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}else{if(e==="")return Al=!0,null;e[e.length-1]==="/"&&(Al=!0)}return t.coerceId(decodeURIComponent(e))}function es(e,t){n.reliesOnPrototype=!0;let r=t.hasContent;return n;function n(s,i,o){let c,l,u,d;if(r?(o?(d=i,o=o[Fe]||o):i?typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(d=s,c=d[this.primaryKey]??null,o=i[Fe]||i):d=i:(d=s,s=void 0,c=d[ze]??d[this.primaryKey]),c===null&&(u=!0)):i?o=i[Fe]||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 f=c.indexOf("?");if(f>-1){let T=this.parseQuery(c.slice(f+1));l?T&&(l=Object.assign(T,l)):l=T,c=c.slice(0,f)}let h=this.parsePath(c,o,l);h?.id!==void 0?(h.query&&(l?l=Object.assign(h.query,l):l=h.query),u=h.isCollection,c=h.id):c=h}else if(s[Symbol.iterator]){c=[],u=!0;for(let f of s){if(typeof f=="object"&&f)break;c.push(f)}c.length===0?c=null:(c.length===1&&(c=c[0]),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 ol(c),c==null&&(u=!0);o||(o={});let _;if(l?.ensureLoaded!=null||l?.async||u?(_={...t},l?.ensureLoaded!=null&&(_.ensureLoaded=l.ensureLoaded),l?.async&&(_.async=l.async),u&&(_.isCollection=!0)):_=t,o.transaction){let f=this.getResource(c,o,_);return f.then?f.then(E):E(f)}else return Pt(o,()=>{let f=this.getResource(c,o,_);return f.then?f.then(E):E(f)},_);function E(f){if(o.authorize){o.authorize=!1;let h=t.type==="read"?f.allowRead(o.user,l,o):t.type==="update"?f.doesExist?.()===!1?f.allowCreate(o.user,d,o):f.allowUpdate(o.user,d,o):t.type==="create"?f.allowCreate(o.user,d,o):f.allowDelete(o.user,l,o);if(h?.then)return h.then(T=>{if(!T)throw new FT(o.user);return typeof d?.then=="function"?d.then(m=>e(f,l,o,m)):e(f,l,o,d)});if(!h)throw new FT(o.user)}return typeof d?.then=="function"?d.then(h=>e(f,l,o,h)):e(f,l,o,d)}a(E,"authorizeActionOnResource")}}function ts(e,t){let r=new UW.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 Lw(e,t,r){let n=e[ve];if(n){let s=e[fr];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 qT(e,t){let r=t?.propertyResolvers,n=t[Fe],s;if(typeof e=="string")return a(function o(c){return c.then?c.then(o):Array.isArray(c)?c.map(o):Lw(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=[],d=i(Lw(l,r,n));for(let _ of e)u.push(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(E=>E&&typeof E=="object"?c(E):E);let u={},d=i(Lw(l,r,n)),_;for(let E of e){let f=d(E);f===void 0&&o&&(f=null),f?.then?(_||(_=[]),_.push(f.then(h=>u[E.name||E]=h))):u[E.name||E]=f}return _?Promise.all(_).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 d=r[c.name]?.definition?.tableClass;l=s[c.name]=qT(c.select||c,d)}let u=o(c.name);return l(u)}else return o(c);else return c}}a(i,"handleProperty")}var LW,MW,UW,Fe,ze,li,ve,bTe,Lr,FT,Al,GT,Ks=Ie(()=>{LW=require("crypto");Ll();MW=M(fi()),UW=M(_e());pp();Sc();_E();Fe=Symbol.for("context"),ze=Symbol.for("primary-key"),li=Symbol("is-collection"),ve=Symbol("stored-record"),bTe={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Lr=class{static{a(this,"Resource")}static transactions;constructor(t,r){this[ze]=t;let n=r?.[Fe];this[Fe]=n!==void 0?n:r||null}static get=es(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=qT(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=es(function(t,r,n,s){if(Array.isArray(s)&&t[li]){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(d=>d.put(c,n))):i.push(u.put(c,n))}return Promise.all(i)}return t.put?t.put(s,r):ts(t,"put")},{hasContent:!0,type:"update"});static patch=es(function(t,r,n,s){return t.patch?t.patch(s,r):ts(t,"patch")},{hasContent:!0,type:"update"});static delete=es(function(t,r,n,s){return t.delete?t.delete(r):ts(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,LW.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={}),Pt(n,()=>{let i=new this(s,n),o=i.update?i.update(r,!0):ts(i,"update");return n.newLocation=s,n.createdResource=!0,o?.then?o.then(()=>i):i})}static invalidate=es(function(t,r,n,s){return t.invalidate?t.invalidate(r):ts(t,"delete")},{hasContent:!1,type:"update"});static post=es(function(t,r,n,s){return t[ze]!=null&&t.update?.(),t.post(s,r)},{hasContent:!0,type:"create"});static connect=es(function(t,r,n,s){return t.connect?t.connect(s,r):ts(t,"connect")},{hasContent:!0,type:"read"});static subscribe=es(function(t,r,n,s){return t.subscribe?t.subscribe(r):ts(t,"subscribe")},{type:"read"});static publish=es(function(t,r,n,s){return t[ze]!=null&&t.update?.(),t.publish?t.publish(s,r):ts(t,"publish")},{hasContent:!0,type:"create"});static search=es(function(t,r,n,s){let i=t.search?t.search(r):ts(t,"search"),o=n.select;if(o&&n.hasOwnProperty("select")&&i!=null&&!i.selectApplied){let c=qT(o,t.constructor);return i.map(c)}return i},{type:"read"});static query=es(function(t,r,n,s){return t.search?t.search(s,r):ts(t,"search")},{hasContent:!0,type:"read"});static copy=es(function(t,r,n,s){return t.copy?t.copy(s,r):ts(t,"copy")},{hasContent:!0,type:"create"});static move=es(function(t,r,n,s){return t.move?t.move(s,r):ts(t,"move")},{hasContent:!0,type:"delete"});async post(t){if(this[li])return(await this.constructor.create(this[ze],t,this[Fe]))[ze];ts(this,"post")}static isCollection(t){return t?.[li]}static coerceId(t){return t}static parseQuery(t){return PS(t)}static parsePath(t,r,n){let s=t.indexOf(".");if(s>-1){let o=t.slice(s+1);t=t.slice(0,s);let c=r?.headers&&bTe[o];if(c)r.requestedContentType=c;else if(n)n.property=o;else return{query:{property:o},id:DW(t,this),isCollection:Al}}let i=DW(t,this);return Al?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r[Fe],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(d=>d.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[ze]===t&&u.constructor===c),s)return s;if(l.push(s=new c(t,i)),l.length>10){let u=new Map;for(let d of l){let _=d[ze],E=u.get(_);E?E.push(d):u.set(_,[d])}i.resourceCache.length=0,i.resourceCache.asMap=u}}}else s=new c(t,i);return o&&(s[li]=!0),s}subscribe(t){return new Dn}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new Dn}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[ze]}getContext(){return this[Fe]}};Lr.prototype[Fe]=null;(0,MW._assignPackageExport)("Resource",Lr);a(OTe,"snake_case");FT=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(DW,"pathToId");GT=class extends Array{static{a(this,"MultiPartId")}toString(){return this.join("/")}};a(es,"transactional");a(ts,"missingMethod");a(Lw,"selectFromObject");a(qT,"transformForSelect")});var zO={};je(zO,{EVICTED:()=>Na,INVALIDATED:()=>Is,coerceType:()=>VT,makeTable:()=>WT,setServerUtilities:()=>UTe,updateResource:()=>KT});function WT(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:o,databaseName:c,auditStore:l,schemaDefined:u,dbisDB:d,sealed:_,splitSegments:E,replicate:f}=e,{expirationMS:h,evictionMS:T,audit:m,trackDeletes:g}=e,{attributes:S}=e;S||(S=[]);let y=Xg(i,n,l),I,U,x={},X=Promise.resolve(),W,V,se;for(let v of S)(v.assignCreatedTime||v.name==="__createdtime__")&&(W=v),(v.assignUpdatedTime||v.name==="__updatedtime__")&&(V=v),v.expiresAt&&(se=v),v.isPrimaryKey&&(x=v);let Q,de=[],j=[],ae=1,Oe=2,Ne={},Me={},Gr=864e5,Md,qa,wn,Ud=!1,wl,Xw=new Map,eh=new Map,vt,$a,Va=Id.get(vs.CONFIG_PARAMS.REPLICATION_DATABASES);if(Array.isArray(Va)){for(let v of Va)if(v.name===c&&v.replicateTo>=0){$a=v.replicateTo;break}}let Bs=i.getRange({start:!1,end:!1}).constructor,xs=10,th=6;m&&ie();class Ve extends Lr{static name=s;static primaryStore=i;static auditStore=l;static primaryKey=t;static tableName=s;static tableId=n;static indices=r;static audit=m;static databasePath=o;static databaseName=c;static attributes=S;static replicate=f;static sealed=_;static splitSegments=E??!0;static createdTimeProperty=W;static updatedTimeProperty=V;static propertyResolvers;static userResolvers={};static sources=[];static get expirationMS(){return h}static dbisDB=d;static schemaDefined=u;static sourcedFrom(p,R){if(R&&(this.sourceOptions=R,(R.expiration||R.eviction||R.scanInterval)&&this.setTTLExpiration(R)),R?.intermediateSource)p.intermediateSource=!0,this.sources.unshift(p);else{if(this.sources.some(N=>!N.intermediateSource)){if(this.sources.some(N=>N.name===p.name))return;throw new Error("Can not have multiple canonical (non-intermediate) sources")}this.sources.push(p)}U=U||p.get&&(!p.get.reliesOnPrototype||p.prototype.get),I=I||p.load;let w=a(N=>{let B=this.sources;if(B=B.filter(k=>k.intermediateSource&&k[N]&&(!k[N].reliesOnPrototype||k.prototype[N])),B.length>0)if(B.length===1){let k=B[0];return(C,F,H)=>{if(C?.source!==k)return k[N](F,H,C)}}else return(k,C,F)=>{let H=[];for(let q of B){if(k?.source===q)break;H.push(q[N](C,F,k))}return Promise.all(H)}},"getApplyToIntermediateSource"),A=this.sources[this.sources.length-1];A.intermediateSource&&(A={});let b=a(N=>{if(A[N]&&(!A[N].reliesOnPrototype||A.prototype[N]))return(B,k,C)=>{if(!B?.source)return A[N](k,C,B)}},"getApplyToCanonicalSource");Ne={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 P=A.shouldRevalidateEvents;return(async()=>{let N=!1,B,k=a(async(C,F)=>{let H=C.value,q=C.table?We[c][C.table]:Ve;if(c===vs.SYSTEM_SCHEMA_NAME&&(C.table===vs.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||C.table===vs.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(N=!0),C.id===void 0&&(C.id=H[q.primaryKey],C.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(C));C.source=p;let ee={residencyId:tt(C.residencyList),isNotification:!0,ensureLoaded:!1,nodeId:C.nodeId},G=await q.getResource(C.id,F,ee);switch(C.type){case"put":return P?G._writeInvalidate(ee):G._writeUpdate(H,!0,ee);case"patch":return P?G._writeInvalidate(ee):G._writeUpdate(H,!1,ee);case"delete":return G._writeDelete(ee);case"publish":return G._writePublish(H,ee);case"invalidate":return G._writeInvalidate(ee);case"relocate":return G._writeRelocate(ee);default:qe.default.error?.("Unknown operation",C.type,C.id)}},"writeUpdate");try{let C=p.subscribe;C&&g==null&&(g=!0);let F={crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0},H=p.subscribeOnThisThread?p.subscribeOnThisThread((0,yl.getWorkerIndex)(),F):(0,yl.getWorkerIndex)()===0,q=C&&H&&await p.subscribe?.(F);if(q){let ee;for await(let G of q)try{if(!(G.type==="transaction"?G.writes[0]:G)){qe.default.error?.("Bad subscription event",G);continue}if(G.source=p,G.type==="end_txn"){if(ee?.resolve(),G.localTime&&B!==G.localTime){if(G.remoteNodeIds?.length>0){let Re=[Symbol.for("seq"),G.remoteNodeIds[0]],re=d.get(Re),Y=re?.nodes;Y||(Y=[]);for(let Be of G.remoteNodeIds.slice(1)){let we=Y.find(ce=>ce.id===Be);Y=Y.filter(ce=>ce.id!==Be||ce===we),we||(we={id:Be,seqId:0},Y.push(we)),we.seqId=Math.max(re?.seqId??1,G.localTime),Be===ee?.nodeId&&(we.lastTxnTime=G.timestamp)}let ge=Math.max(re?.seqId??1,G.localTime);qe.default.trace?.("Received txn",c,ge,G.localTime,G.remoteNodeIds),d.put(Re,{seqId:ge,nodes:Y})}B=G.localTime}G.onCommit&&ee?.committed.then(G.onCommit);continue}if(ee)if(G.beginTxn)ee.resolve();else{ee.write_promises.push(k(G,ee));continue}!G.timestamp&&G.version&&(G.timestamp=G.version);let Ee=Pt(G,()=>{if(G.type==="transaction"){let Re=[];for(let re of G.writes)try{Re.push(k(re,G))}catch(Y){throw Y.message+=" writing "+JSON.stringify(re)+" of event "+JSON.stringify(G),Y}return Promise.all(Re)}else if(G.type==="define_schema"){let Re=this.attributes.slice(0),re;for(let Y of G.attributes)Re.find(ge=>ge.name===Y.name)||(Re.push(Y),re=!0);re&&(pt({table:s,database:c,attributes:Re,origin:"cluster"}),GE.signalSchemaChange(new qE.SchemaEventMsg(process.pid,vs.OPERATIONS_ENUM.CREATE_TABLE,c,s)))}else return G.beginTxn?(ee=G,ee.write_promises=[k(G,G)],new Promise(Re=>{ee.resolve=()=>Re(Promise.all(ee.write_promises))})):k(G,G)});ee&&(ee.committed=Ee),N&&Ee&&!Ee?.waitingForUserChange&&(Ee.then(()=>GE.signalUserChange(new qE.UserEventMsg(process.pid))),Ee.waitingForUserChange=!0),G.onCommit&&(Ee?Ee.then(G.onCommit):G.onCommit())}catch(Ae){qe.default.error?.("error in subscription handler",Ae)}}}catch(C){qe.default.error?.(C)}})(),this}static get isCaching(){return U}static get shouldRevalidateEvents(){return this.prototype.get!==Ve.prototype.get}static getResource(p,R,w){let A=super.getResource(p,R,w);if(p!=null){ji(p);try{if(A.hasOwnProperty(ve))return A;if(typeof p=="object"&&p&&!Array.isArray(p))throw new Error(`Invalid id ${JSON.stringify(p)}`);let b=!w?.async||i.cache?.get?.(p),P=Ir(R),N=P.getReadTxn();if(N?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return Ya(p,R,{transaction:N,ensureLoaded:w?.ensureLoaded},b,B=>{if(B?KT(A,B):A[ve]=null,R.onlyIfCached&&R.noCacheStore){if(!A.doesExist())throw new Nr.ServerError("Entry is not cached",504)}else if(w?.ensureLoaded){let k=vd(p,B,R,A);if(k)return P?.disregardReadTxn(),A[Mw]=!0,vw(k,C=>(KT(A,C),A))}return A})}catch(b){throw b.message.includes("Unable to serialize object")&&(b.message+=": "+JSON.stringify(p)),b}}return A}ensureLoaded(){let p=vd(this[ze],this[Fr],this[Fe]);if(p)return this[Mw]=!0,vw(p,R=>{this[Fr]=R,this[ve]=R.value,this[kE]=R.version})}static getNewId(){let p=x?.type;if(p==="String"||p==="ID")return super.getNewId();if(!vt){let b=i.getEntry(Symbol.for("id_allocation")),P=b?.value,N;if(P&&P.nodeName===server.hostname&&(!BTe(i)||P.pid===process.pid)){let B=P.start,k=P.end;N=B;for(let C of i.getKeys({start:k,end:B,limit:1,reverse:!0}))N=C}else P=A(b?.version??null),N=P.start;vt=new BigInt64Array([BigInt(N)+1n]),vt=new BigInt64Array(i.getUserSharedBuffer("id",vt.buffer)),vt.maxSafeId=P.end}let R=Number(Atomics.add(vt,0,1n)),w=p==="Int"?512:1048576;if(R+w>=vt.maxSafeId){let b=a(P=>{vt.maxSafeId=R+(p==="Int"?1023:4194303);let N=(p==="Int"?Math.pow(2,31):Math.pow(2,49))-1,B=P?void 0:i.useReadTransaction(),k=Number(vt[0]);for(let H of i.getKeys({start:k+1,end:N,limit:1,transaction:B}))N=H;B?.done();let{value:C,version:F}=i.getEntry(Symbol.for("id_allocation"));if(vt.maxSafeId<N){if(C.end>vt.maxSafeId-100)return;qe.default.info?.("New id allocation",R,vt.maxSafeId,F),i.put(Symbol.for("id_allocation"),{start:C.start,end:vt.maxSafeId,nodeName:server.hostname,pid:process.pid},Date.now(),F)}else{qe.default.warn?.(`Id conflict detected, starting new id allocation range, attempting to allocate to ${vt.maxSafeId}, but id of ${N} detected`);let H=A(F);H.alreadyUpdated||Atomics.store(vt,0,BigInt(H.start+1)),vt.maxSafeId=H.end}},"updateEnd");R+w===vt.maxSafeId?setImmediate(b):R+100>=vt.maxSafeId&&(qe.default.warn?.(`Synchronous id allocation required on table ${s}${p=="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`),i.transactionSync(()=>b(!0)))}return R;function A(b){let P=(p==="Int"?Math.pow(2,31):Math.pow(2,49))-1,N=P/4,B,k,C=!1,F,H;do{F=Math.floor(Math.random()*P),H={start:F,end:F+(p==="Int"?1024:4194304),nodeName:server.hostname,pid:process.pid},B=0;for(let q of i.getKeys({start:F,limit:1,reverse:!0}))B=q;k=P;for(let q of i.getKeys({start:F+1,end:P,limit:1}))k=q;N*=.875,N<1e3&&!C&&(C=!0,qe.default.error?.(`Id allocation in table ${s} is very dense, limited safe range of numbers to allocate ids in${p==="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`,F,B,k,N))}while(!(N<k-F&&(N<F-B||B===0)));return i.transactionSync(()=>{let q=i.getEntry(Symbol.for("id_allocation"));return(q?.version??null)==b?(qe.default.info?.("Allocated new id range",H),i.put(Symbol.for("id_allocation"),H,Date.now()),H):(qe.default.debug?.("Looks like ids were already allocated"),{alreadyUpdated:!0,...q.value})})}}static setTTLExpiration(p){if(typeof p=="number")h=p*1e3,T||(T=0);else if(p&&typeof p=="object")h=p.expiration*1e3,T=(p.eviction||0)*1e3,Gr=p.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(h<0)throw new Error("Expiration can not be negative");Gr=Gr||(h+T)/4,Ho()}static getResidencyRecord(p){return d.get([Symbol.for("residency_by_id"),p])}static setResidency(p){Ve.getResidency=p}static setResidencyById(p){Ve.getResidencyById=p}static getResidency(p,R,w){if(Ve.getResidencyById)return Ve.getResidencyById(p[t]);let A=$a;if(R.replicateTo!=null){if(Array.isArray(R.replicateTo))return R.replicateTo.includes(server.hostname)?R.replicateTo:[server.hostname,...R.replicateTo];R.replicateTo>=0&&(A=R.replicateTo)}if(A>=0&&server.nodes){let b=[server.hostname];if(w)b.push(...w.slice(0,A));else{let P=server.nodes.map(k=>k.name),N=Math.floor(P.length*Math.random());b.push(...P.slice(N,N+A));let B=N+A-P.length;B>0&&b.push(...P.slice(0,B))}return b}}static enableAuditing(p=!0){m=p,p&&ie(),Ve.audit=p}static coerceId(p){return p===""?null:VT(p,x)}static async dropTable(){if(delete We[c][s],c===o){for(let p of S)d.remove(Ve.tableName+"/"+p.name),r[p.name]?.drop();d.remove(Ve.tableName+"/"),i.drop(),await d.committed}else console.log("legacy dropTable"),await i.close(),await fs.remove(data_path),await fs.remove(data_path===standard_path?data_path+MDB_LOCK_FILE_SUFFIX:path.join(path.dirname(data_path),MDB_LEGACY_LOCK_FILE_NAME));GE.signalSchemaChange(new qE.SchemaEventMsg(process.pid,vs.OPERATIONS_ENUM.DROP_TABLE,c,s))}get(p){if(typeof p=="string")return this.getProperty(p);if(this[li])return this.search(p);if(this[ze]===null){if(p?.conditions)return this.search(p);let R=Ve.getRecordCount();return{recordCount:R.recordCount,estimatedRecordRange:R.estimatedRange,records:"./",name:s,database:c,auditSize:l?.getStats().entryCount,attributes:S}}if(p?.property)return this.getProperty(p.property);if(this.doesExist()||p?.ensureLoaded===!1||this[Fe]?.returnNonexistent)return this}allowRead(p,R){let w=Wa(p);if(w?.read){if(w.isSuperUser)return!0;let A=w.attribute_permissions,b=R?.select;if(A?.length>0||Ud&&b){if(R||(R={}),b){let P=A?.length>0&&Uw(A,"read");R.select=b.map(N=>{let B=N.name||N;if(!P||P[B]){let k=wn[B]?.definition?.tableClass;if(k){if(N.name||(N={name:N}),!k.prototype.allowRead.call(null,p,N))return!1;if(!N.select)return N.name}return N}}).filter(Boolean)}else R.select=A.filter(P=>P.read&&!wn[P.attribute_name]).map(P=>P.attribute_name);return R}else return!0}}allowUpdate(p,R){let w=Wa(p);if(w?.update){let A=w.attribute_permissions;if(A?.length>0){let b=Uw(A,"update");for(let P in R)if(!b[P])return!1;for(let P of A){let N=P.attribute_name;!P.update&&!(N in R)&&(R[N]=this.getProperty(N))}}return ja(this[Fe])}}allowCreate(p,R){if(this[li]){let w=Wa(p);if(w?.insert){let A=w.attribute_permissions;if(A?.length>0){let b=Uw(A,"insert");for(let P in R)if(!b[P])return!1;return ja(this[Fe])}else return ja(this[Fe])}}else return this.allowUpdate(p,{})}allowDelete(p){return Wa(p)?.delete&&ja(this[Fe])}update(p,R){if(!Ir(this[Fe]))throw new Error("Can not update a table resource outside of a transaction");if(p===!1)return this;let A;return typeof p=="object"&&p&&(R?(Object.isFrozen(p)&&(p={...p}),this[ve]={},this[fr]=p):(A=this[fr],A&&(p=Object.assign(A,p)),this[fr]=A=p)),this._writeUpdate(this[fr],R),this}addTo(p,R){if(typeof R=="number"||typeof R=="bigint")this[HE]===BW?this.set(p,(+this.getProperty(p)||0)+R):(this[HE]||this.update(),this.set(p,new HT(R)));else throw new Error("Can not add a non-numeric value")}subtractFrom(p,R){if(typeof R=="number")return this.addTo(p,-R);throw new Error("Can not subtract a non-numeric value")}getMetadata(){return this[Fr]}invalidate(){this._writeInvalidate()}_writeInvalidate(p){let R=this[Fe],w=this[ze];ji(w),Ir(this[Fe]).addWrite({key:w,store:i,invalidated:!0,entry:this[Fr],before:Ne.invalidate?.bind(this,R,w),beforeIntermediate:Me.invalidate?.bind(this,R,w),commit:a((b,P)=>{if(di(b,P,p?.nodeId)<=0)return;let N=null;for(let B in r)N||(N={}),N[B]=this.getProperty(B);qe.default.trace?.(`Invalidating entry id: ${w}, timestamp: ${new Date(b).toISOString()}`),y(w,N,this[Fr],b,Is,m,{user:R?.user,residencyId:p?.residencyId,nodeId:p?.nodeId},"invalidate")},"commit")})}_writeRelocate(p){let R=this[Fe],w=this[ze];ji(w),Ir(this[Fe]).addWrite({key:w,store:i,invalidated:!0,entry:this[Fr],before:Ne.relocate?.bind(this,R,w),beforeIntermediate:Me.relocate?.bind(this,R,w),commit:a((b,P)=>{if(di(b,P,p?.nodeId)<=0)return;let N=Ve.getResidencyRecord(p.residencyId),B=0,k=null,C=P?.value;if(N&&!N.includes(server.hostname)){for(let F in r)k||(k={}),k[F]=C(F);B=Is}else k=C;qe.default.trace?.(`Relocating entry id: ${w}, timestamp: ${new Date(b).toISOString()}`),y(w,k,this[Fr],b,B,m,{user:R.user,residencyId:p.residencyId,nodeId:p.nodeId,expiresAt:p.expiresAt},"relocate",!1,null)},"commit")})}static _recordRelocate(p,R){let w={previousResidency:this.getResidencyRecord(p.residencyId),isRelocation:!0},A=this.getResidency(R.value,w),b;if(A){if(!Array.isArray(A))throw new Error("Residency must be an array, but was: "+A);if(!A.includes(server.hostname))return;b=tt(A)}let N=y(p.key,R.value,p,p.version,0,!0,{residencyId:b,expiresAt:R.expiresAt},"relocate",!1,null)}static evict(p,R,w){let A=this.Source,b;if(!((U||m)&&(!R||(b=i.getEntry(p),!b||!R)||b.version!==w))){if(U){if(i.hasLock(p,b.version))return;let P;for(let N in r)P||(P={}),P[N]=R[N];if(P)return y(p,P,b,w,Na,null,null,null,!0)}return i.ifVersion(p,w,()=>{Ka(p,R,null)}),m?y(p,null,b,w,Na,null,null,null,!0):i.remove(p,w)}}lock(){throw new Error("Not yet implemented")}static operation(p,R){return p.table||=s,p.schema||=c,VW.operation(p,R)}put(p){this.update(p,!0)}patch(p){this.update(p,!1)}_writeUpdate(p,R,w){let A=this[Fe],b=Ir(A),P=this[ze];ji(P);let N=this[Fr];this[HE]=R?BW:DTe;let B={key:P,store:i,entry:N,nodeName:A?.nodeName,validate:a(k=>{p||(p=this[fr]),R||p&&BT(this[fr]===p?this:p)?A?.source||(b.checkOverloaded(),this.validate(p,!R),V&&(p[V.name]=V.type==="Date"?new Date(k):V.type==="String"?new Date(k).toISOString():k),R&&(t&&p[t]!==P&&(p[t]=P),W&&(N?.value?p[W.name]=N?.value[W.name]:p[W.name]=W.type==="Date"?new Date(k):W.type==="String"?new Date(k).toISOString():k),p=Rl(p))):b.removeWrite(B)},"validate"),before:R?Ne.put?()=>Ne.put(A,P,p):null:Ne.patch?()=>Ne.patch(A,P,p):Ne.put?()=>Ne.put(A,P,Rl(this)):null,beforeIntermediate:R?Me.put?()=>Me.put(A,P,p):null:Me.patch?()=>Me.patch(A,P,p):Me.put?()=>Me.put(A,P,Rl(this)):null,commit:a((k,C,F)=>{if(F){if(A&&C?.version>(A.lastModified||0)&&(A.lastModified=C.version),this[Fr]=C,C?.value?.[ve])throw new Error("Can not assign a record to a record, check for circular references");R||(this[ve]=C?.value??null)}this[fr]=void 0,this[kE]=k;let H=C?.value,q=p;this[HE]=0;let ee=di(k,C,w?.nodeId),G;if(ee<=0)if(m){let Y=C.localTime,ge=C.version;qe.default.trace?.("Applying CRDT update to record with id: ",P,"applying later update:",ge);let Be=[];for(;Y>k||ge>=k&&Y>0;){let we=l.get(Y);if(!we)break;let ce=Ht(we);if(ge=ce.version,ge>=k){if(ge===k){if(ee=di(k,{version:ge,localTime:Y},w?.nodeId),ee===0)return;if(ee>0)continue}if(ce.type==="patch")Be.push(ce),G=p;else if(ce.type==="put"||ce.type==="delete")return}Y=ce.previousLocalTime}Be.sort((we,ce)=>we.version-ce.version);for(let we of Be){let ce=we.getValue(i);if(q=UT(q,ce,R),qe.default.debug?.("Rebuilding update with future patch:",q),!q)return}}else{if(R)return;q=UT(q,H,R),qe.default.debug?.("Rebuilding update without audit:",q)}let Ae;if(R?Ae=q:(this[ve]=H,Ae=Rl(this,q)),this[ve]=Ae,Ae?.[ve])throw new Error("Can not assign a record to a record, check for circular references");let Ee;if(w?.residencyId!=null)Ee=w.residencyId;else{N?.residencyId&&(A.previousResidency=Ve.getResidencyRecord(N.residencyId));let Y=Ve.getResidency(Ae,A);if(Y){if(!Array.isArray(Y))throw new Error("Residency must be an array, got: "+Y);Y.includes(server.hostname)||Y.push(server.hostname)}Ee=tt(Y)}R||(G=p);let Re=A?.expiresAt??(h?h+Date.now():-1);qe.default.trace?.(`Saving record with id: ${P}, timestamp: ${new Date(k).toISOString()}${Re?", expires at: "+new Date(Re).toISOString():""}${C?", replaces entry from: "+new Date(C.version).toISOString():", new entry"}`,Ae),Ka(P,H,Ae);let re=R?"put":"patch";y(P,Ae,C,k,0,m,{user:A?.user,residencyId:Ee,expiresAt:Re,nodeId:w?.nodeId,originatingOperation:A?.originatingOperation},re,!1,G),A.expiresAt&&Ho()},"commit")};b.addWrite(B)}async delete(p){if(typeof p=="string")return this.deleteProperty(p);if(this[li]){for await(let R of this.search(p))(await Ve.getResource(R[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(p);return}return this[ve]?this._writeDelete(p):!1}_writeDelete(p){let R=Ir(this[Fe]),w=this[ze];ji(w);let A=this[Fe];return R.addWrite({key:w,store:i,resource:this,nodeName:A?.nodeName,before:Ne.delete?.bind(this,A,w),beforeIntermediate:Me.delete?.bind(this,A,w),commit:a((b,P,N)=>{let B=P?.value;N&&(A&&P?.version>(A.lastModified||0)&&(A.lastModified=P.version),KT(this,P)),!(di(b,P,p?.nodeId)<=0)&&(Ka(this[ze],B),qe.default.trace?.(`Deleting record with id: ${w}, txn timestamp: ${new Date(b).toISOString()}`),m||g?(y(w,null,this[Fr],b,0,m,{user:A?.user,nodeId:p?.nodeId},"delete"),m||Ho()):i.remove(this[ze]))},"commit")}),!0}search(p){let R=this[Fe],w=Ir(R);if(!p)throw new Error("No query provided");let A=p.conditions;A?A.length===void 0&&(A=A[Symbol.iterator]?Array.from(A):[A]):A=Array.isArray(p)?p:p[Symbol.iterator]?Array.from(p):[],this[ze]&&(A=[{attribute:null,comparator:Array.isArray(this[ze])?"prefix":"starts_with",value:this[ze]}].concat(A));let b,P={};function N(Y,ge){let Be;switch(ge){case"and":case void 0:if(Y.length<1)throw new Error('An "and" operator requires at least one condition');Be=!0;break;case"or":if(Y.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+ge)}for(let we of Y){if(we.conditions){we.conditions=N(we.conditions,we.operator);continue}let ce=we[0]??we.attribute,Ye=ce==null?x:Bi(S,ce);if(Ye)(Ye.type||HN[we.comparator])&&(we[1]===void 0?we.value=k(we.value,Ye):we[1]=k(we[1],Ye));else if(ce!=null)throw(0,Nr.handleHDBError)(new Error,`${ce} is not a defined attribute`,404);if(we.chainedConditions)if(we.chainedConditions.length===1&&(!we.operator||we.operator=="and")){let rt=we.chainedConditions[0],Ze,st;if(rt.comparator==="gt"||rt.comparator==="greater_than"||rt.comparator==="ge"||rt.comparator==="greater_than_equal"?(Ze=we,st=rt):(Ze=rt,st=we),Ze.comparator!=="lt"&&Ze.comparator!=="less_than"&&Ze.comparator!=="le"&&Ze.comparator!=="less_than_equal")throw new Error("Invalid chained condition, only less than and greater than conditions can be chained together");let Bt=st.comparator==="ge"||st.comparator==="greater_than_equal",ko=Ze.comparator==="le"||Ze.comparator==="less_than_equal";we.comparator=(Bt?"ge":"gt")+(ko?"le":"lt"),we.value=[st.value,Ze.value]}else throw new Error("Multiple chained conditions are not currently supported")}return Y}a(N,"prepareConditions");function B(Y,ge){if(p.enforceExecutionOrder)return Y;for(let Be of Y)Be.conditions&&(Be.conditions=B(Be.conditions,Be.operator));return Y.length>1&&ge!=="or"?(0,qW.sortBy)(Y,CS(Ve)):Y}a(B,"orderConditions");function k(Y,ge){return Array.isArray(Y)?Y.map(Be=>VT(Be,ge)):VT(Y,ge)}a(k,"coerceTypedValues");let C=p.operator;(A.length>0||C)&&(A=N(A,C));let F=typeof p.sort=="object"&&p.sort,H;if(F&&C!=="or"){let Y=F.attribute;if(Y==null)throw new Nr.ClientError("Sort requires an attribute");if(b=A.find(ge=>od(ge.attribute)===od(Y)),!b){let ge=Bi(S,Y);if(!ge)throw(0,Nr.handleHDBError)(new Error,`${Array.isArray(Y)?Y.join("."):Y} is not a defined attribute`,404);if(ge.indexed)b={attribute:Y,comparator:"sort"},A.push(b);else if(A.length===0&&!p.allowFullScan)throw(0,Nr.handleHDBError)(new Error,`${Array.isArray(Y)?Y.join("."):Y} is not indexed and not combined with any other conditions`,404)}b&&(b.descending=!!F.descending)}A=B(A,C),F&&(b&&A[0]===b?F.next&&(H={dbOrderedAttribute:F.attribute,attribute:F.next.attribute,descending:F.next.descending,next:F.next.next}):(b&&A.splice(A.indexOf(b),1),H=F));let q=p.select;if(A.length===0&&(A=[{attribute:t,comparator:"greater_than",value:!0}]),p.explain)return{conditions:A,operator:C,postOrdering:H,selectApplied:!!q};let ee=w.useReadTxn(),G=kN(A,C,Ve,ee,p,R,(Y,ge)=>Bd(Y,q,R,ee,ge),P),Ae=p.ensureLoaded!==!1;H||(G=re(G));let Ee=Ve.transformEntryForSelect(q,R,ee,P,Ae,!0),Re=Ve.transformToOrderedSelect(G,q,H,ee,R,Ee);function re(Y){return p.offset||p.limit!==void 0?Y.slice(p.offset,p.limit!==void 0?(p.offset||0)+p.limit:void 0):Y}return a(re,"applyOffset"),H&&(Re=re(Re)),Re.onDone=()=>{Re.onDone=null,w.doneReadTxn()},Re.selectApplied=!0,Re.getColumns=()=>{if(q){let Y=[];for(let ge of q)ge==="*"?Y.push(...S.map(Be=>Be.name)):Y.push(ge.name||ge);return Y}return S.filter(Y=>!Y.computed&&!Y.relationship).map(Y=>Y.name)},Re}static transformToOrderedSelect(p,R,w,A,b,P){let N=new Bs;if(w){p=Bd(p,R,A,b,null);let B;N.iterate=function(){let C,F=p[Symbol.asyncIterator]?p[Symbol.asyncIterator]():p[Symbol.iterator](),H,q=w.dbOrderedAttribute,ee,G,Ae=!0;function Ee(re){let Y=re.next&&Ee(re.next),ge=re.descending;return(Be,we)=>{let ce=Cl(Be,re.attribute,A),Ye=Cl(we,re.attribute,A),rt=ge?(0,bl.compareKeys)(Ye,ce):(0,bl.compareKeys)(ce,Ye);return rt===0?Y?.(Be,we)||0:rt}}a(Ee,"createComparator");let Re=Ee(w);return{async next(){let re;if(C)if(re=C.next(),re.done){if(H)return N.onDone&&N.onDone(),re}else return{value:await P.call(this,re.value)};B=[],ee&&B.push(ee);do if(re=await F.next(),re.done){if(H=!0,B.length)break;return N.onDone&&N.onDone(),re}else{let Y=re.value;if(Y?.then&&(Y=await Y),q){let ge=Cl(Y,q,A);if(Ae)Ae=!1,G=ge;else if(ge!==G){G=ge,ee=Y;break}}B.push(Y)}while(!0);return w.isGrouped,B.sort(Re),C=B[Symbol.iterator](),re=C.next(),re.done?(N.onDone&&N.onDone(),re):{value:await P.call(this,re.value)}},return(){N.onDone&&N.onDone(),F.return()},throw(){N.onDone&&N.onDone(),F.throw()}}};let k=a(C=>{if(typeof R=="object"&&Array.isArray(C.attribute))for(let F=0;F<R.length;F++){let H=R[F],q;if(H.name===C.attribute[0]){for(q=H.sort||(H.sort={});q.next;)q=q.next;q.attribute=C.attribute.slice(1),q.descending=C.descending}else H===C.attribute[0]&&(R[F]=q={name:H,sort:{attribute:C.attribute.slice(1),descending:C.descending}})}C.next&&k(C.next)},"applySortingOnSelect");k(w)}else N.iterate=(p[Symbol.asyncIterator]||p[Symbol.iterator]).bind(p),N=N.map(function(B){try{let k=P.call(this,B);return typeof k?.catch=="function"?k.catch(C=>{throw C.partialObject={[t]:B.key},C}):k}catch(k){throw k.partialObject={[t]:B.key},k}});return N}static transformEntryForSelect(p,R,w,A,b,P){if(p&&(p===t||p?.length===1&&p[0]===t&&Array.isArray(p))){let C=a(F=>(R?.transaction?.stale&&(R.transaction.stale=!1),F?.key??F),"transform");return p===t?C:p.asArray?F=>[C(F)]:F=>({[t]:C(F)})}let N;b&&U&&!(typeof p=="string"?[p]:p)?.every(C=>{let F;return typeof C=="object"?F=C.name:F=C,r[F]||F===t})&&(N=!0);let B,k=a(function(C){let F;if(R?.transaction?.stale&&(R.transaction.stale=!1),C!=null){if(F=C.value||C.deref?.()?.value,!F&&(C.key===void 0||C.deref)||C.metadataFlags&Is){if(C.metadataFlags&Is&&R.replicateFrom===!1&&P&&C.residencyId)return ka.SKIP;if(C=Ya(C.key??C,R,{transaction:w,lazy:p?.length<4,ensureLoaded:b},this?.isSync,H=>H),C?.then)return C.then(k.bind(this));F=C?.value}if(N&&C?.metadataFlags&(Is|Na)||C?.expiresAt!=null&&C?.expiresAt<Date.now()){if(R.onlyIfCached&&R.noCacheStore)return{[t]:C.key,message:"This entry has expired"};let H=vd(C.key??C,C,R);if(H?.then)return H.then(k)}}if(F==null)return P?ka.SKIP:F;if(p&&!(p[0]==="*"&&p.length===1)){let H,q=a((G,Ae)=>{let Ee;typeof G=="object"?Ee=G.name:Ee=G;let Re=wn?.[Ee],re;if(Re){let Y=A?.[Ee];if(Y)if(Y.hasMappings){let Be=Re.from?F[Re.from]:od(C.key);re=Y.get(Be),re||(re=[])}else re=Y.fromRecord?.(F);else re=Re(F,R,C);let ge=a(Be=>{if(Be&&typeof Be=="object"){let we=Re.definition?.tableClass||Ve;B||(B={});let ce=B[Ee]||(B[Ee]=we.transformEntryForSelect(Ee===G?null:G.select||(Array.isArray(G)?G:null),R,w,Y,b));if(Array.isArray(Be)){let Ye=[],rt=we.transformToOrderedSelect(Be,G.select,typeof G.sort=="object"&&G.sort,R,w,ce)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),Ze=a(Bt=>{for(;!Bt.done;){if(Bt?.then)return Bt.then(Ze);Ye.push(Bt.value),Bt=rt.next()}Ae(Ye,Ee)},"nextValue"),st=Ze(rt.next());st&&(H||(H=[]),H.push(st));return}else if(Be=ce.call(this,Be),Be?.then){H||(H=[]),H.push(Be.then(Ye=>Ae(Ye,Ee)));return}}Ae(Be,Ee)},"handleResolvedValue");re?.then?(H||(H=[]),H.push(re.then(ge))):ge(re);return}else re=F[Ee],re&&typeof re=="object"&&Ee!==G&&(re=Ve.transformEntryForSelect(G.select||G,R,w,null)({value:re}));Ae(re,Ee)},"selectAttribute"),ee;if(typeof p=="string")q(p,G=>{ee=G});else if(Array.isArray(p))if(p.asArray)ee=[],p.forEach((G,Ae)=>{G==="*"?p[Ae]=F:q(G,Ee=>ee[Ae]=Ee)});else{ee={};let G=p.forceNulls;for(let Ae of p)if(Ae==="*")for(let Ee in F)ee[Ee]=F[Ee];else q(Ae,(Ee,Re)=>{Ee===void 0&&G&&(Ee=null),ee[Re]=Ee})}else throw new Nr.ClientError("Invalid select"+p);return H?Promise.all(H).then(()=>ee):ee}return F},"transform");return k}async subscribe(p){if(!l)throw new Error("Can not subscribe to a table without an audit log");m||pt({table:s,database:c,schemaDefined:u,attributes:S,audit:!0}),p||(p={});let R=!p.rawEvents,w=[],A=this,b=by(Ve,this[ze]??null,function(N,B,k,C){try{let F=B.getValue?.(i,R),H=B.type;if(!F&&H==="patch"&&R){let ee=i.getEntry(N);ee?.version===B.version?F=ee.value:F=B.getValue?.(i,!0,k),H="put"}let q={id:N,localTime:k,value:F,version:B.version,type:H,beginTxn:C};w?w.push(q):this.send(q)}catch(F){qe.default.error?.(F)}},p.startTime||0,p),P=(async()=>{this[li]&&(b.includeDescendants=!0,p.onlyChildren&&(b.onlyChildren=!0)),p.supportsTransactions&&(b.supportsTransactions=!0);let N=this[ze],B=p.previousCount;B>1e3&&(B=1e3);let k=p.startTime;if(this[li]){if(k){if(B)throw new Nr.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:C,value:F}of l.getRange({start:k,exclusiveStart:!0,snapshot:!1})){let H=Ht(F);if(H.tableId!==n)continue;let q=H.recordId;if(N==null||FW(N,q)){let ee=H.getValue(i,R,C);if(b.send({id:q,localTime:C,value:ee,version:H.version,type:H.type}),b.queue?.length>HW&&await b.waitForDrain()===!1)return}b.startTime=C}}else if(B){let C=[];for(let{key:F,value:H}of l.getRange({start:"z",end:!1,reverse:!0}))try{let q=Ht(H);if(q.tableId!==n)continue;let ee=q.recordId;if(N==null||FW(N,ee)){let G=q.getValue(i,R,F);if(C.push({id:ee,localTime:F,value:G,version:q.version,type:q.type}),--B<=0)break}}catch(q){qe.default.error("Error getting history entry",F,q)}for(let F=C.length;F>0;)b.send(C[--F]);C[0]&&(b.startTime=C[0].localTime)}else if(!p.omitCurrent){for(let{key:C,value:F,version:H,localTime:q}of i.getRange({start:N??!1,end:N==null?void 0:[N,bl.MAXIMUM_KEY],versions:!0,snapshot:!1}))if(F&&(b.send({id:C,localTime:q,value:F,version:H,type:"put"}),b.queue?.length>HW&&await b.waitForDrain()===!1))return}}else{B&&!k&&(k=0);let C=this[Fr]?.localTime;if(C===Jg&&(i.cache?.delete(N),this[Fr]=i.getEntry(N),qe.default.trace?.("re-retrieved record",C,this[Fr]?.localTime),C=this[Fr]?.localTime),qe.default.trace?.("Subscription from",k,"from",N,C),k<C){let F=[],H=C;do{let q=l.get(H);if(q){p.omitCurrent=!0;let ee=Ht(q),G=ee.getValue(i,R,H);R&&(ee.type="put"),F.push({id:N,value:G,localTime:H,...ee}),H=ee.previousLocalTime}else break;B&&B--}while(H>k&&B!==0);for(let q=F.length;q>0;)b.send(F[--q]);b.startTime=C}!p.omitCurrent&&this.doesExist()&&b.send({id:N,localTime:C,value:this[ve],version:this[kE],type:"put"})}for(let C of w)b.send(C);w=null})();return p.listener&&b.on("data",p.listener),b}static subscribeOnThisThread(p,R){return p===0||R?.crossThreads===!1}doesExist(){return!!(this[ve]||this[HE])}publish(p,R){this._writePublish(p,R)}_writePublish(p,R){let w=Ir(this[Fe]),A=this[ze]||null;A!=null&&ji(A);let b=this[Fe];w.addWrite({key:A,store:i,entry:this[Fr],nodeName:b?.nodeName,validate:a(()=>{b?.source||(w.checkOverloaded(),this.validate(p))},"validate"),before:Ne.publish?.bind(this,b,A,p),beforeIntermediate:Me.publish?.bind(this,b,A,p),commit:a((P,N,B)=>{N===void 0&&g&&!m&&Ho(),qe.default.trace?.(`Publishing message to id: ${A}, timestamp: ${new Date(P).toISOString()}`),y(A,N?.value??null,N,N?.version||P,0,!0,{user:b?.user,residencyId:R?.residencyId,expiresAt:b?.expiresAt,nodeId:R?.nodeId},"message",!1,p)},"commit")})}validate(p,R){let w,A=a((b,P,N)=>{if(P.type&&b!=null)if(R&&b.__op__&&(b=b.value),P.properties){typeof b!="object"&&(w||(w=[])).push(`Value ${ui(b)} in property ${N} must be an object${P.type?" ("+P.type+")":""}`);let B=P.properties;for(let k=0,C=B.length;k<C;k++){let F=B[k],H=A(b[F.name],F,N+"."+F.name);H&&(b[F.name]=H)}if(P.sealed&&b!=null&&typeof b=="object")for(let k in b)B.find(C=>C.name===k)||(w||(w=[])).push(`Property ${k} is not allowed within object in property ${N}`)}else switch(P.type){case"Int":(typeof b!="number"||b>>0!==b)&&(w||(w=[])).push(`Value ${ui(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 ${ui(b)} in property ${N} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof b!="number"&&(w||(w=[])).push(`Value ${ui(b)} in property ${N} must be a number`);break;case"ID":typeof b=="string"||b?.length>0&&b.every?.(B=>typeof B=="string")||(w||(w=[])).push(`Value ${ui(b)} in property ${N} must be a string, or an array of strings`);break;case"String":typeof b!="string"&&(w||(w=[])).push(`Value ${ui(b)} in property ${N} must be a string`);break;case"Boolean":typeof b!="boolean"&&(w||(w=[])).push(`Value ${ui(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 ${ui(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 ${ui(b)} in property ${N} must be a bigint`)}break;case"Bytes":b instanceof Uint8Array||(w||(w=[])).push(`Value ${ui(b)} in property ${N} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(b)){if(P.elements)for(let B=0,k=b.length;B<k;B++){let C=b[B],F=A(C,P.elements,N+"[*]");F&&(b[B]=F)}}else(w||(w=[])).push(`Value ${ui(b)} in property ${N} must be a Buffer or Uint8Array`);break}P.nullable===!1&&b==null&&(w||(w=[])).push(`Property ${N} is required (and not does not allow null values)`)},"validateValue");for(let b=0,P=S.length;b<P;b++){let N=S[b];if(!(N.relationship||N.computed)&&(!R||N.name in p)){let B=A(p[N.name],N,N.name);B&&(p[N.name]=B)}}if(_)for(let b in p)S.find(P=>P.name===b)||(w||(w=[])).push(`Property ${b} is not allowed`);if(w)throw new Nr.ClientError(w.join(". "))}getUpdatedTime(){return this[kE]}wasLoadedFromSource(){return U?!!this[Mw]:void 0}static async addAttributes(p){let R=S.slice(0);for(let w of p){if(!w.name)throw new Nr.ClientError("Attribute name is required");if(w.name.match(/[`/]/))throw new Nr.ClientError("Attribute names cannot include backticks or forward slashes");(0,$W.validateAttribute)(w.name),R.push(w)}return pt({table:s,database:c,schemaDefined:u,attributes:R}),Ve.indexingOperation}static async removeAttributes(p){let R=S.filter(w=>!p.includes(w.name));return pt({table:s,database:c,schemaDefined:u,attributes:R}),Ve.indexingOperation}static getSize(){let p=i.getStats();return(p.treeBranchPageCount+p.treeLeafPageCount+p.overflowPages)*p.pageSize}static getAuditSize(){let p=l?.getStats();return p&&(p.treeBranchPageCount+p.treeLeafPageCount+p.overflowPages)*p.pageSize}static getRecordCount(p){let R=i.getStats().entryCount,w=1e3/2,A=performance.now(),b=Math.floor(R/2),P=p?.exactCount,N=0,B=0,k;for(let{value:C}of i.getRange({start:!0,lazy:!0}))if(C!=null&&N++,B++,!P&&B<b&&performance.now()-A>w){k=B;break}if(k){let C=N;N=0;for(let{value:re}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:k}))re!=null&&N++;let F=k*2,H=(N+C)/F,q=Math.pow((N-C+1)/k/2,2)+H*(1-H)/F,ee=Math.max(Math.sqrt(q)*R,1),G=Math.round(H*R),Ae=Math.max(G-1.96*ee,N+C),Ee=Math.min(G+1.96*ee,R),Re=Math.pow(10,Math.round(Math.log10(ee)));return Re>G&&(Re=Re/10),N=Math.round(G/Re)*Re,{recordCount:N,estimatedRange:[Math.round(Ae),Math.round(Ee)]}}return{recordCount:N}}static updatedAttributes(){wn=this.propertyResolvers={$id:a((p,R,w)=>({value:w.key}),"$id"),$updatedtime:a((p,R,w)=>w.version,"$updatedtime"),$record:a((p,R,w)=>w?{value:p}:p,"$record")};for(let p of this.attributes){p.resolve=null;let R=p.relationship,w=p.computed;if(R)if(p.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)"),Ud=!0,R.to)p.elements?.definition?(wn[p.name]=p.resolve=(A,b,P)=>{let N=A[R.from?R.from:t],B=p.elements.definition.tableClass;return P?id({attribute:R.to,value:N},Ir(b).getReadTxn(),!1,B,!1).asArray:B.search([{attribute:R.to,value:N}],b).asArray},p.set=()=>{throw new Error("Setting a one-to-many relationship property is not supported")},p.resolve.definition=p.elements.definition,R.from&&(p.resolve.from=R.from)):console.error(`The one-to-many/many-to-many relationship property "${p.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(R.from){let A=p.definition||p.elements?.definition;A?(wn[p.name]=p.resolve=(b,P,N)=>{let B=b[R.from];if(B!==void 0){if(p.elements){let k,C=B?.map(F=>{let H=N?A.tableClass.primaryStore.getEntry(F,{transaction:Ir(P).getReadTxn()}):A.tableClass.get(F,P);return H?.then&&(k=!0),H});return R.filterMissing?k?Promise.all(C).then(F=>F.filter(GW)):C.filter(GW):k?Promise.all(C):C}return N?A.tableClass.primaryStore.getEntry(B,{transaction:Ir(P).getReadTxn()}):A.tableClass.get(B,P)}},p.set=(b,P)=>{if(Array.isArray(P)){let N=P.map(B=>B[ze]||B[A.tableClass.primaryKey]);b[R.from]=N}else{let N=P[ze]||P[A.tableClass.primaryKey];b[R.from]=N}},p.resolve.definition=p.definition||p.elements?.definition,p.resolve.from=R.from):console.error(`The relationship property "${p.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${p.name}" in table "${s}" must use either "from" or "to" arguments`);else w&&(typeof w.from=="function"&&this.setComputedAttribute(p.name,w.from),wn[p.name]=p.resolve=(A,b,P)=>{let N=typeof w.from=="string"?A[w.from]:A,B=this.userResolvers[p.name];if(B)return B(N,b,P);qe.default.warn(`Computed attribute "${p.name}" does not have a function assigned to it. Please use setComputedAttribute('${p.name}', resolver) to assign a resolver function.`),this.userResolvers[p.name]=()=>{}})}kT(this,this)}static setComputedAttribute(p,R){let w=Bi(S,p);if(!w){console.error(`The attribute "${p}" does not exist in the table "${s}"`);return}if(!w.computed){console.error(`The attribute "${p}" is not defined as computed in the table "${s}"`);return}this.userResolvers[p]=R}static async deleteHistory(p=0,R=!1){let w;for(let{key:A,value:b}of l.getRange({start:0,end:p}))await Nd(),Ht(b).tableId===n&&(w=DT(l,A,b));if(R)for(let{key:A,value:b,localTime:P}of i.getRange({start:0,versions:!0}))await Nd(),b===null&&P<p&&(w=i.remove(A));await w}static async*getHistory(p=0,R=1/0){for(let{key:w,value:A}of l.getRange({start:p||1,end:R})){await Nd();let b=Ht(A);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(p){let R=[];if(p==null)throw new Error("An id is required");let w=i.getEntry(p);if(!w)return R;let A=w.localTime;if(!A)throw new Error("The entry does not have a local audit time");let b=0;do{await Nd();let P=l.get(A);if(P){let N=Ht(P);R.push({id:N.recordId,localTime:A,version:N.version,type:N.type,value:N.getValue(i,!0,A),user:N.user}),A=N.previousLocalTime}else break}while(b<1e3&&A);return R.reverse()}static cleanup(){Q?.remove()}}Ve.updatedAttributes();let ss=Ve.prototype;return ss[PTe]=!0,h&&Ve.setTTLExpiration(h/1e3),se&&Se(),Ve;function Ka(v,p,R){let w;for(let A in r){let b=r[A],P=b.isIndexing,N=wn[A],B=R&&(N?N(R):R[A]),k=p&&(N?N(p):p[A]);if(B===k&&!P)continue;w=!0;let C=b.indexNulls,F=(0,FE.getIndexedValues)(B,C),H=(0,FE.getIndexedValues)(k,C);if(H?.length>0){let q=new Set(H);if(F=F?F.filter(ee=>{if(q.has(ee))q.delete(ee);else return!0}):[],H=Array.from(q),(H.length>0||F.length>0)&&vW){let ee=H.concat(F).map(G=>({key:G,value:v}));b.prefetch(ee,kW)}for(let ee=0,G=H.length;ee<G;ee++)b.remove(H[ee],v)}else F?.length>0&&vW&&b.prefetch(F.map(q=>({key:q,value:v})),kW);if(F)for(let q=0,ee=F.length;q<ee;q++)b.put(F[q],v)}return w}a(Ka,"updateIndices");function ji(v){switch(typeof v){case"number":return!0;case"string":if(v.length<659)return!0;if(v.length>xW)throw new Error("Primary key size is too large: "+v.length);break;case"object":if(v===null)throw new Error("Invalid primary key of null");break;case"bigint":if(v<2n**64n&&v>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof v)}if((0,bl.writeKey)(v,LTe,0)>xW)throw new Error("Primary key size is too large: "+v.length);return!0}a(ji,"checkValidId");function Ya(v,p,R,w,A){if(Ve.getResidencyById&&R.ensureLoaded&&p?.replicateFrom!==!1){let P=Ve.getResidencyById(v);if(P&&!P.includes(server.hostname)&&I)return I({key:v,residency:P}).then(A)}let b=a(()=>{if(p?.transaction?.stale&&(p.transaction.stale=!1),R.transaction?.isDone)return A(null,v);let P=i.getEntry(v,R);return P?.residencyId&&P.metadataFlags&Is&&I&&R.ensureLoaded&&p?.replicateFrom!==!1?I(P).then(N=>A(N,v)):(P&&p&&(P?.version>(p.lastModified||0)&&(p.lastModified=P.version),P?.localTime&&!p.lastRefreshed&&(p.lastRefreshed=P.localTime)),A(P,v))},"whenPrefetched");return w?b():ae>0?(ae--,b()):new Promise((P,N)=>{ae===0?(ae--,i.prefetch([v],()=>{B(),k()})):(de.push(v),j.push(k),de.length>th&&(ae--,B()));function B(){if(de.length>0){let C=j;i.prefetch(de,()=>{ae===-1?B():ae++;for(let F of C)F()}),de=[],j=[],Oe>2&&Oe--}else ae=Oe,Oe<xs&&Oe++}a(B,"prefetch");function k(){try{P(b())}catch(C){N(C)}}a(k,"load")})}a(Ya,"loadLocalRecord");function Wa(v){if(!v?.role)return;let p=v.role.permission;if(p.super_user)return MTe;let R=p[c],w,A=R?.tables;if(A)return A[s];if(c==="data"&&(w=p[s])&&!w.tables)return w}a(Wa,"getTablePermissions");function vd(v,p,R,w){if(U){let A=!1;if(R.noCache?A=!0:(p?(!p.value||p.metadataFlags&(Is|Na)||p.expiresAt!=null&&p.expiresAt<Date.now())&&(A=!0):A=!0,qn(!A,"cache-hit",s)),A){let b=xd(v,p,R).then(P=>(P?.value?.[ve]&&qe.default.error?.("Can not assign a record with a record property"),R&&(P?.version>(R.lastModified||0)&&(R.lastModified=P.version),R.lastRefreshed=Date.now()),P));if(R?.onlyIfCached||p?.value&&w?.allowStaleWhileRevalidate?.(p,v)){if(b.catch(P=>qe.default.warn?.(P)),R?.onlyIfCached&&!w.doesExist())throw new Nr.ServerError("Entry is not cached",504);return}else return b}}else if(p?.value&&p.expiresAt!=null&&p.expiresAt<Date.now())return Ve.evict(p.key,p.value,p.version),p.value=null,{then(A){return A(p)}}}a(vd,"ensureLoadedFromSource");function Ir(v){let p=v?.transaction;if(p){if(!p.lmdbDb)return p.lmdbDb=i,p;do{if(p.lmdbDb?.path===i.path)return p;let R=p.next;if(!R)return p=p.next=new mc,p.lmdbDb=i,p;p=R}while(!0)}else return new _p}a(Ir,"txnForContext");function Cl(v,p,R){if(!v)return;let w=v.value||i.getEntry(v.key)?.value;if(typeof p=="object"){let b=wn,P=w;for(let N=0,B=p.length;N<B;N++){let k=p[N],C=b?.[k];P=C&&P?C(P,R,!0)?.value:P?.[k],b=C?.definition?.tableClass?.propertyResolvers}return P}let A=wn[p];return A?A(w,R):w[p]}a(Cl,"getAttributeValue");function Bd(v,p,R,w,A){let b=A?.length,P={transaction:w,lazy:b>0||typeof p=="string"||p?.length<4,alwaysPrefetch:!0},N;function B(k,C){let F=k?.value;if(!F)return ka.SKIP;for(let H=0;H<b;H++)if(!N?.includes(H)&&!A[H](F,k))return ka.SKIP;return C!==void 0&&(k.key=C),k}if(a(B,"processEntry"),b>0||!v.hasEntries){let k=v.map(C=>{if(N=null,typeof C=="object"&&C?.key!==void 0)return b>0?B(C):C;if(C==null)return ka.SKIP;for(let F=0;F<b;F++){let q=A[F].idFilter;if(q){if(!q(C))return ka.SKIP;N||(N=[]),N.push(F)}}return Ya(C,R,P,!1,B)});return Array.isArray(v)&&(k=k.filter(C=>C!==ka.SKIP)),k.hasEntries=!0,k}return v}a(Bd,"transformToEntries");function di(v,p,R=server.replication?.getThisNodeId(l)){if(v<=p?.version){if(p?.version===v&&R!==void 0){let w=server.replication?.exportIdMapping(l),A=p.localTime,b=A&&l.get(A);if(b){let P,N,B=Ht(b);for(let k in w)w[k]===R&&(P=k),w[k]===B.nodeId&&(N=k);if(P>N)return 1;if(P===N)return 0}}return-1}return 1}a(di,"precedesExistingVersion");async function xd(v,p,R){let w=p?.metadataFlags,A=p?.version,b,P;if(!i.attemptLock(v,A,()=>{clearTimeout(P);let C=i.getEntry(v);!C||!C.value||C.metadataFlags&(Is|Na)?b(xd(v,i.getEntry(v),R)):b(C)}))return new Promise(C=>{b=C,P=setTimeout(()=>{i.unlock(v,A)},CTe)});let N=p?.value,B={requestContext:R,replacingRecord:N,replacingEntry:p,replacingVersion:A,noCacheStore:!1,source:null,resourceCache:R?.resourceCache},k=R?.responseHeaders;return new Promise((C,F)=>{let H;vw(Pt(B,async q=>{let ee=performance.now(),G,Ae,Ee;try{for(let ge of Ve.sources)if(ge.get&&(!ge.get.reliesOnPrototype||ge.prototype.get)){if(ge.available?.(p)===!1)continue;if(B.source=ge,G=await ge.get(v,B),G)break}Ee=w&Is;let re=B.lastModified||Ee&&A;Ae=Ee||re>A||!N,re||(re=(0,FE.getNextMonotonicTime)());let Y=performance.now()-ee;if(mr(Y,"cache-resolution",s,null,"success"),k&&km(k,"Server-Timing",`cache-resolve;dur=${Y.toFixed(2)}`,!0),q.timestamp=re,h&&B.expiresAt==null&&(B.expiresAt=Date.now()+h),G){if(typeof G!="object")throw new Error("Only objects can be cached and stored in tables");if(G.status>0&&G.headers)if(G.status>=300)if(G.status===304)G=N,re=A;else throw new Nr.ServerError(G.body||"Error from source",G.status);else G=G.body;typeof G.toJSON=="function"&&(G=G.toJSON()),t&&G[t]!==v&&(G[t]=v)}H=!0,C({key:v,version:re,value:G})}catch(re){re.message+=` while resolving record ${v} for ${s}`,N&&((re.code==="ECONNRESET"||re.code==="ECONNREFUSED"||re.code==="EAI_AGAIN")&&!R?.mustRevalidate||R?.staleIfError&&(re.statusCode===500||re.statusCode===502||re.statusCode===503||re.statusCode===504))?(C({key:v,version:A,value:N}),qe.default.trace?.(re.message,"(returned stale record)")):F(re);let Y=performance.now()-ee;mr(Y,"cache-resolution",s,null,"fail"),k&&km(k,"Server-Timing",`cache-resolve;dur=${Y.toFixed(2)}`,!0),B.transaction.abort();return}if(R?.noCacheStore||B.noCacheStore){B.transaction.abort();return}Ir(B).addWrite({key:v,store:i,entry:p,nodeName:"source",commit:a((re,Y)=>{if(Y?.version!==A)return;let ge=Ka(v,N,G);G?(Me.put?.(B,v,G),qe.default.trace?.(`Writing resolved record from source with id: ${v}, timestamp: ${new Date(re).toISOString()}`),y(v,G,Y,re,0,m&&Ae||null,{user:B?.user,expiresAt:B.expiresAt},"put",!!Ee)):Y&&(Me.delete?.(B,v),qe.default.trace?.(`Deleting resolved record from source with id: ${v}, timestamp: ${new Date(re).toISOString()}`),m||g?y(v,null,Y,re,0,m&&Ae||null,{user:B?.user},"delete",!!Ee):i.remove(v,A))},"commit")})}),()=>{i.unlock(v,A)},q=>{i.unlock(v,A),H&&qe.default.error?.("Error committing cache update",q)})})}a(xd,"getFromSource");function ja(v){if(!v||v.user?.role?.permission?.super_user)return!0;if(v.replicateTo)throw new Nr.ClientError("Can not specify replication parameters without super user permissions",403);if(v.replicatedConfirmation)throw new Nr.ClientError("Can not specify replication confirmation without super user permissions",403);return!0}a(ja,"checkContextPermissions");function Ho(){if(Gr!==Md&&(Md=Gr,(0,yl.getWorkerIndex)()===(0,yl.getWorkerCount)()-1)){if(qa&&clearTimeout(qa),!Gr)return;let v=new Date;v.setMonth(0),v.setDate(1),v.setHours(0),v.setMinutes(0),v.setSeconds(0);let p=Math.ceil((Date.now()-v.getTime())/Gr)*Gr+v.getTime(),R=a(w=>{qe.default.trace?.(`Scheduled next cleanup scan at ${new Date(w)}ms`),qa=setTimeout(()=>X=X.then(async()=>{if(R(Math.max(w+Gr,Date.now())),i.rootStore.status!=="open"){clearTimeout(qa);return}let A=50,b=new Array(A),P=0;qe.default.info?.(`Starting cleanup scan for ${s}`);try{let N=0;for(let{key:B,value:k,version:C,expiresAt:F}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let H;k===null&&!m&&C+wTe<Date.now()?H=i.remove(B,C):F!=null&&F+T<Date.now()&&(H=Ve.evict(B,k,C),N++),H&&(await b[P],b[P]=H.catch(q=>{qe.default.error?.("Cleanup error",q)}),++P>=A&&(P=0)),await Nd()}qe.default.info?.(`Finished cleanup scan for ${s}, evicted ${N} entries`)}catch(N){qe.default.warn?.(`Error in cleanup scan for ${s}:`,N)}}),Math.min(w-Date.now(),2147483647)).unref()},"startNextTimer");R(p)}}a(Ho,"scheduleCleanup");function ie(){Q=l?.addDeleteRemovalCallback(n,v=>{let p=i.getEntry(v);p?.value===null&&i.remove(v,p.version)})}a(ie,"addDeleteRemoval");function Se(){(0,yl.getWorkerIndex)()===0&&setInterval(async()=>{if(!wl){wl=!0;try{let v=se.name,p=r[v];if(!p)throw new Error(`expiresAt attribute ${se} must be indexed`);for(let R of p.getRange({start:!0,values:!1,end:Date.now(),snapshot:!1})){for(let w of p.getValues(R)){let A=i.getEntry(w);A?.value?A.value[v]<Date.now()&&Ve.evict(w,A.value,A.version):i.ifVersion(w,A?.version,()=>p.remove(R,w))}await Nd()}}catch(v){qe.default.error?.("Error in evicting old records",v)}finally{wl=!1}}},ITe).unref()}a(Se,"runRecordExpirationEviction");function tt(v){if(v){let p=v.join(","),R=d.get([Symbol.for("residency_by_set"),p]);return R||(d.put([Symbol.for("residency_by_set"),p],R=Math.floor(Math.random()*2147483647)),d.put([Symbol.for("residency_by_id"),R],v),R)}}a(tt,"getResidencyId")}function Uw(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 kW(){}function UTe(e){VW=e}function VT(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 $T(parseInt(e.slice(1),36));if(e==="null")return null;if(!/^-?[0-9]+$/.test(e)&&!(e instanceof Date))throw new SyntaxError;return $T(+e);case"Float":return e==="null"?null:$T(+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;vTe.test(e)||(e+="Z");let n=new Date(e);return $T(n.getTime()),n}return new Date(+e);case void 0:case"Any":return(0,YT.autoCast)(e);default:return e}}catch(n){throw n.message=`Invalid value for attribute ${t.name}: "${e}", expecting ${r}`,n.statusCode=400,n}}function $T(e){if(isNaN(e))throw new SyntaxError;return e}function FW(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 vw(e,t,r){return e?.then?e.then(t,r):t(e)}function KT(e,t){e[Fr]=t,e[ve]=t?.value??null,e[kE]=t?.version}function GW(e){return e!=null}function ui(e){try{return JSON.stringify(e)}catch{return e}}function BTe(e){let t=process.pid;return e.env.readerList().slice(1).some(r=>+r.match(/\d+/)?.[0]!=t)}var vs,ka,FE,qW,$W,Id,Nr,GE,qE,qe,bl,yl,YT,NTe,VW,ITe,wTe,vW,CTe,kE,PTe,Fr,HE,BW,DTe,Mw,Is,Na,LTe,xW,HW,MTe,pve,vTe,Nd,$f=Ie(()=>{vs=M(L()),ka=require("lmdb"),FE=M(on()),qW=require("lodash"),$W=M(Xd());Ks();fp();Id=M(ne());Oy();Nr=M(_e()),GE=M(to()),qE=M($s());Pe();_E();qe=M(Oc());pp();Sc();bl=require("ordered-binary"),yl=M(ot());Qi();YT=M(te());vl();Ii();LT();Bf();NTe=new Uint8Array(9);NTe[8]=192;ITe=6e4,wTe=864e5;Id.initSync();vW=Id.get(vs.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),CTe=1e4,kE=Symbol.for("version"),PTe=Symbol.for("incremental-update"),Fr=Symbol("entry"),HE=Symbol("is-saving"),BW=1,DTe=2,Mw=Symbol("loaded-from-source"),Is=1,Na=8,LTe=Buffer.allocUnsafeSlow(8192),xW=1978,HW=100,MTe={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},pve=(0,YT.convertToMS)(Id.get(vs.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(WT,"makeTable");a(Uw,"attributesAsObject");a(kW,"noop");a(UTe,"setServerUtilities");vTe=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(VT,"coerceType");a($T,"rejectNaN");a(FW,"isDescendantId");Nd=a(()=>new Promise(setImmediate),"rest");a(vw,"when");a(KT,"updateResource");a(GW,"exists");a(ui,"stringify");a(BTe,"hasOtherProcesses")});var ut={};je(ut,{database:()=>eu,databases:()=>We,dropDatabase:()=>YA,dropTableMeta:()=>GTe,getDatabases:()=>dt,getDefaultCompression:()=>vm,getTables:()=>xTe,onRemovedDB:()=>of,onUpdatedTable:()=>Lc,readMetaDb:()=>$E,resetDatabases:()=>Gu,table:()=>pt,tables:()=>jn});function xTe(){return JT||dt(),jn||{}}function dt(){if(JT)return We;JT=!0,Pd=new Map;let e=(0,tr.getHdbBasePath)()&&(0,Ut.join)((0,tr.getHdbBasePath)(),yr.DATABASES_DIR_NAME),t=(0,tr.get)(yr.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,tr.get)(yr.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,rs.existsSync)(e)?e:(0,Ut.join)((0,tr.getHdbBasePath)(),yr.LEGACY_DATABASES_DIR_NAME)),!e)return;if((0,rs.existsSync)(e))for(let n of(0,rs.readdirSync)(e,{withFileTypes:!0})){let s=(0,Ut.basename)(n.name,".mdb");n.isFile()&&(0,Ut.extname)(n.name).toLowerCase()===".mdb"&&!t[s]?.path&&$E((0,Ut.join)(e,n.name),null,s)}if((0,rs.existsSync)((0,Cd.getBaseSchemaPath)())){for(let n of(0,rs.readdirSync)((0,Cd.getBaseSchemaPath)(),{withFileTypes:!0}))if(!n.isFile()){let s=(0,Ut.join)((0,Cd.getBaseSchemaPath)(),n.name),i=(0,Ut.join)((0,Cd.getTransactionAuditStoreBasePath)(),n.name);for(let o of(0,rs.readdirSync)(s,{withFileTypes:!0}))if(o.isFile()&&(0,Ut.extname)(o.name).toLowerCase()===".mdb"){let c=(0,Ut.join)(i,o.name);$E((0,Ut.join)(s,o.name),(0,Ut.basename)(o.name,".mdb"),n.name,c,!0)}}}if(t)for(let n in t){let s=t[n],i=s.path;if((0,rs.existsSync)(i))for(let c of(0,rs.readdirSync)(i,{withFileTypes:!0}))c.isFile()&&(0,Ut.extname)(c.name).toLowerCase()===".mdb"&&$E((0,Ut.join)(i,c.name),(0,Ut.basename)(c.name,".mdb"),n);let o=s.tables;if(o)for(let c in o){let l=o[c],u=(0,Ut.join)(l.path,(0,Ut.basename)(c+".mdb"));(0,rs.existsSync)(u)&&$E(u,c,n,null,!0)}}for(let n in We){let s=Pd.get(n);if(s){let i=We[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 We[n],n==="data"){for(let i in jn)delete jn[i];delete jn[XT]}}let r=["hdb_temp","hdb_certificate","hdb_analytics","hdb_raw_analytics","hdb_session_will","hdb_job","hdb_license","hdb_info"];if(We.system)for(let n of r)We.system[n]&&(We.system[n].replicate=!1);return Pd=null,We}function Gu(){JT=!1;for(let[,e]of Fa)e.needsDeletion=!0;dt();for(let[e,t]of Fa)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),Fa.delete(e),delete We[t.databaseName],KE.forEach(r=>r(t.databaseName)));return We}function $E(e,t,r=Hw,n,s){let i=new Bw.default(e,!1);try{let o=Fa.get(e);o?o.needsDeletion=!1:(o=(0,Dd.open)(i),Fa.set(e,o));let c=new Ol.default(!1),l=o.dbisDb||(o.dbisDb=o.openDB(jT.INTERNAL_DBIS_NAME,c)),u=o.auditStore;u||(n?(0,rs.existsSync)(n)&&(i.path=n,u=(0,Dd.open)(i),u.isLegacy=!0):u=PT(o));let d=jW(r),_=d[XT],E=new Map;for(let{key:f,value:h}of l.getRange({start:!1})){let[T,m]=f.toString().split("/");m===""?m=h.name:m||(m=T,T=t,h.name||(h.name=m,h.indexed=!h.is_hash_attribute)),_?.add(T);let g=E.get(T);g||E.set(T,g={attributes:[]}),(m==null||h.is_hash_attribute)&&(g.primary=h),m!=null&&g.attributes.push(h),Object.defineProperty(h,"key",{value:f,configurable:!0})}for(let[f,h]of E){let{attributes:T,primary:m}=h;if(!m){for(let j of T)if(j.is_hash_attribute||j.isPrimaryKey){m=j;break}if(!m){Kt.warn(`Unable to find a primary key attribute on table ${f}, with attributes: ${JSON.stringify(T)}`);continue}}let g=d[f],S={},y=[],I,U,x=typeof m.audit=="boolean"?m.audit:(0,tr.get)(yr.CONFIG_PARAMS.LOGGING_AUDITLOG),X=m.trackDeletes,W=m.expiration,V=m.eviction,se=m.sealed,Q=m.splitSegments,de=m.replicate;if(g)S=g.indices,y=g.attributes,g.schemaVersion++;else{I=m.tableId,I?I>=(l.get(wd)||0)&&(l.putSync(wd,I+1),Kt.info(`Updating next table id (it was out of sync) to ${I+1} for ${f}`)):(m.tableId=I=l.get(wd),I||(I=1),Kt.debug("Table {table_name} missing an id, assigning {table_id}"),l.putSync(wd,I+1),l.putSync(m.key,m));let j=new Ol.default(!m.is_hash_attribute,m.is_hash_attribute);if(j.compression=m.compression,j.compression){let ae=(0,tr.get)(yr.CONFIG_PARAMS.STORAGE_COMPRESSION_THRESHOLD)||WW;j.compression.threshold=ae}U=Nh(o.openDB(m.key,j)),o.databaseName=r,U.rootStore=o,U.tableId=I}for(let j of T){j.attribute=j.name;try{if(!j.is_hash_attribute&&(j.indexed||j.attribute&&!j.name)){if(!S[j.name]){let Oe=new Ol.default(!j.is_hash_attribute,j.is_hash_attribute);S[j.name]=o.openDB(j.key,Oe),S[j.name].indexNulls=j.indexNulls}let ae=y.find(Oe=>Oe.name===j.name);ae?y.splice(y.indexOf(ae),1,j):y.push(j)}}catch(ae){Kt.error("Error trying to update attribute",j,y,S,ae)}}if(!g){g=zW(d,f,WT({primaryStore:U,auditStore:u,audit:x,sealed:se,splitSegments:Q,replicate:de,expirationMS:W&&W*1e3,evictionMS:V&&V*1e3,trackDeletes:X,tableName:f,tableId:I,primaryKey:m.name,databasePath:s?r+"/"+f:r,databaseName:r,indices:S,attributes:T,schemaDefined:m.schemaDefined,dbisDB:l})),g.schemaVersion=1;for(let j of VE)j(g)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function jW(e){let t=We[e];if(t||(e==="data"?t=We[e]=jn:e==="system"?Object.defineProperty(We,"system",{value:t=Object.create(null),configurable:!0}):t=We[e]=Object.create(null)),Pd&&!Pd.has(e)){let r=new Set;t[XT]=r,Pd.set(e,r)}return t}function zW(e,t,r){return e[t]=r,r}function eu({database:e,table:t}){e||(e=Hw),dt();let r=jW(e),n=(0,Ut.join)((0,tr.getHdbBasePath)(),yr.DATABASES_DIR_NAME),s=(0,tr.get)(yr.CONFIG_PARAMS.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(s.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&s[e]?.tables?.[t]?.path;n=i||s[e]?.path||process.env.STORAGE_PATH||(0,tr.get)(yr.CONFIG_PARAMS.STORAGE_PATH)||((0,rs.existsSync)(n)?n:(0,Ut.join)((0,tr.getHdbBasePath)(),yr.LEGACY_DATABASES_DIR_NAME));let o=(0,Ut.join)(n,(i?t:e)+".mdb"),c=Fa.get(o);if(!c||c.status==="closed"){let l=new Bw.default(o,!1);c=(0,Dd.open)(l),Fa.set(o,c)}return c.auditStore||(c.auditStore=PT(c)),c}async function YA(e){if(!We[e])throw new Error("Schema does not exist");let t=We[e],r;for(let n in t)r=t[n].primaryStore.rootStore,Fa.delete(r.path),r.status==="open"&&(await r.close(),await YE.remove(r.path));if(r||(r=eu({database:e,table:null}),r.status==="open"&&(await r.close(),await YE.remove(r.path))),e==="data"){for(let n in jn)delete jn[n];delete jn[XT]}delete We[e],KE.forEach(n=>n(e))}function pt(e){let{table:t,database:r,expiration:n,eviction:s,scanInterval:i,attributes:o,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:_,schemaDefined:E,origin:f}=e;r||(r=Hw);let h=eu({database:r,table:t}),T=We[r];Kt.trace(`Defining ${t} in ${r}`);let m=T?.[t];if(h.status==="closed")throw new Error(`Can not use a closed data store for ${t}`);let g,S,y;E==null&&(E=!0);let I=new Ol.default(!1);for(let Q of o)Q.attribute&&!Q.name?(Q.name=Q.attribute,Q.indexed=!0):Q.attribute=Q.name,Q.expiresAt&&(Q.indexed=!0);let U,x;if(m){if(g=m.primaryKey,m.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${t} class`);u==null&&(u=m.splitSegments),m.attributes.splice(0,m.attributes.length,...o)}else{let Q=h.auditStore;S=o.find(Oe=>Oe.isPrimaryKey)||{},g=S.name,S.is_hash_attribute=S.isPrimaryKey=!0,S.schemaDefined=E,S.compression=vm(),_&&(S.trackDeletes=!0),c=S.audit=typeof c=="boolean"?c:(0,tr.get)(yr.CONFIG_PARAMS.LOGGING_AUDITLOG),n&&(S.expiration=n),s&&(S.eviction=s),S.splitSegments=!1,typeof l=="boolean"&&(S.sealed=l),typeof d=="boolean"&&(S.replicate=d),f&&(S.origins?S.origins.includes(f)||S.origins.push(f):S.origins=[f]),Kt.trace(`${t} table loading, opening primary store`);let de=new Ol.default(!1,!0);de.compression=S.compression;let j=t+"/";if(y=h.dbisDb=h.openDB(jT.INTERNAL_DBIS_NAME,I),se(),y.get(j))return x&&x(),Gu(),pt(e);let ae=Nh(h.openDB(j,de));h.databaseName=r,ae.rootStore=h,ae.tableId=y.get(wd),Kt.trace(`Assigning new table id ${ae.tableId} for ${t}`),ae.tableId||(ae.tableId=1),y.put(wd,ae.tableId+1),S.tableId=ae.tableId,m=zW(T,t,WT({primaryStore:ae,auditStore:Q,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:_,expirationMS:n&&n*1e3,evictionMS:s&&s*1e3,primaryKey:g,tableName:t,tableId:ae.tableId,databasePath:r,databaseName:r,indices:{},attributes:o,schemaDefined:E,dbisDB:y})),m.schemaVersion=1,U=!0,y.put(j,S)}let X=m.indices;y=y||(h.dbisDb=h.openDB(jT.INTERNAL_DBIS_NAME,I)),m.dbisDB=y;let W=[];for(let{key:Q,value:de}of y.getRange({start:!0})){let[j,ae]=Q.toString().split("/");if(ae===""&&(ae=de.name),ae){if(j!==t)continue}else continue;let Oe=o.find(Me=>Me.name===ae),Ne=!Oe?.indexed&&de.indexed&&!de.isPrimaryKey;if((!Oe||Ne)&&(se(),U=!0,Oe||y.remove(Q),Ne)){let Me=m.indices[j];Me&&W.push(Me)}}let V=[];try{for(let Q of o||[]){if((Q.relationship||Q.computed)&&(U=!0,Q.relationship))continue;let de=t+"/"+(Q.name||"");Object.defineProperty(Q,"key",{value:de,configurable:!0});let j=y.get(de);if(Q.isPrimaryKey){if(j=j||y.get(de=t+"/")||{},c!==void 0&&c!==m.audit||l!==void 0&&l!==m.sealed||d!==void 0&&d!==m.replicate||(+n||void 0)!==(+j.expiration||void 0)||(+s||void 0)!==(+j.eviction||void 0)){let Oe={...j};typeof c=="boolean"&&(c&&m.enableAuditing(c),Oe.audit=c),n&&(Oe.expiration=+n),s&&(Oe.eviction=+s),l!==void 0&&(Oe.sealed=l),d!==void 0&&(Oe.replicate=d),U=!0,se(),y.put(de,Oe)}continue}j?.attribute&&!j.name&&(j.indexed=!0);let ae=!j||j.type!==Q.type||j.indexed!==Q.indexed||j.nullable!==Q.nullable||j.version!==Q.version||JSON.stringify(j.properties)!==JSON.stringify(Q.properties)||JSON.stringify(j.elements)!==JSON.stringify(Q.elements);if(Q.indexed){let Oe=new Ol.default(!0,!1),Ne=h.openDB(de,Oe);(ae||j.indexingPID&&j.indexingPID!==process.pid||j.restartNumber<WE.workerData?.restartNumber)&&(U=!0,se(),j=y.get(de),(ae||j.indexingPID&&j.indexingPID!==process.pid||j.restartNumber<WE.workerData?.restartNumber)&&(U=!0,Q.indexNulls===void 0&&(Q.indexNulls=!0),m.primaryStore.getStats().entryCount>0&&(Q.lastIndexedKey=j?.lastIndexedKey??void 0,Q.indexingPID=process.pid,Ne.isIndexing=!0,Object.defineProperty(Q,"dbi",{value:Ne}),V.push(Q))),y.put(de,Q)),j?.indexNulls&&Q.indexNulls===void 0&&(Q.indexNulls=!0),Ne.indexNulls=Q.indexNulls,X[Q.name]=Ne}else ae&&(U=!0,se(),y.put(de,Q))}}finally{x&&x()}if(U&&(m.schemaVersion++,m.updatedAttributes()),Kt.trace(`${t} table loading, running index`),V.length>0||W.length>0?m.indexingOperation=FTe(m,V,W):U&&zT.signalSchemaChange(new QT.SchemaEventMsg(process.pid,"schema-change",m.databaseName,m.tableName)),m.origin=f,U)for(let Q of VE)Q(m,f!=="cluster");return(n||s||i)&&m.setTTLExpiration({expiration:n,eviction:s,scanInterval:i}),Kt.trace(`${t} table loaded`),m;function se(){x||h.transactionSync(()=>({then(Q){x=Q}}))}a(se,"startTxn")}async function FTe(e,t,r){try{Kt.info(`Indexing ${e.tableName} attributes`,t);let n=e.schemaVersion;await zT.signalSchemaChange(new QT.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 _ of t)(0,Dd.compareKeys)(_.lastIndexedKey,u)<0&&(u=_.lastIndexedKey),_.lastIndexedKey==null&&_.dbi.clearAsync();let d=0;for(let{key:_,value:E,version:f}of e.primaryStore.getRange({start:u,lazy:l<4,versions:!0,snapshot:!1}))if(E){if(d++,s=e.primaryStore.ifVersion(_,f,()=>{for(let h=0;h<l;h++){let T=t[h],m=T.name;try{let g=T.resolve,S=E&&(g?g(E):E[m]),y=(0,KW.getIndexedValues)(S);if(y)for(let I=0,U=y.length;I<U;I++)T.dbi.put(y[I],_)}catch(g){o[m]||(o[m]=!0,Kt.error(`Error indexing attribute ${m}`,g))}}}),s.then(()=>d--,h=>{d--,Kt.error(h)}),WE.workerData&&WE.workerData.restartNumber!==YW.restartNumber&&(i=!0),++c%100===0||i){for(let h of t)h.lastIndexedKey=_,e.dbisDB.put(h.key,h);if(i)return}d>HTe?await s:d>kTe&&await new Promise(h=>setImmediate(h))}for(let _ of t)delete _.lastIndexedKey,delete _.indexingPID,_.dbi.isIndexing=!1,s=e.dbisDB.put(_.key,_)}await s,await zT.signalSchemaChange(new QT.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 GTe({table:e,database:t}){let r=eu({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 Lc(e){return VE.push(e),{remove(){let t=VE.indexOf(e);t>-1&&VE.splice(t,1)}}}function of(e){return KE.push(e),{remove(){let t=KE.indexOf(e);t>-1&&KE.splice(t,1)}}}function vm(){let e=(0,tr.get)(yr.CONFIG_PARAMS.STORAGE_COMPRESSION),t=(0,tr.get)(yr.CONFIG_PARAMS.STORAGE_COMPRESSION_DICTIONARY),r=(0,tr.get)(yr.CONFIG_PARAMS.STORAGE_COMPRESSION_THRESHOLD)||WW,n={startingOffset:32};return t&&(n.dictionary=YE.readFileSync(t)),r&&(n.threshold=r),e&&n}var tr,jT,Dd,Ut,rs,Cd,Ol,Bw,yr,YE,xw,KW,zT,QT,WE,Kt,YW,Hw,XT,WW,jn,We,wd,VE,KE,JT,Fa,Pd,HTe,kTe,Pe=Ie(()=>{tr=M(ne()),jT=M(xt()),Dd=require("lmdb"),Ut=require("path"),rs=require("fs"),Cd=M(Rt());$f();Ol=M(a_()),Bw=M(c_()),yr=M(L()),YE=M(require("fs-extra")),xw=M(fi()),KW=M(on()),zT=M(to()),QT=M($s()),WE=require("worker_threads"),Kt=M(K()),YW=M(ot());Qi();vl();Hw="data",XT=Symbol("defined-tables"),WW=((0,tr.get)(yr.CONFIG_PARAMS.STORAGE_PAGESIZE)||4096)-60;(0,tr.initSync)();jn=Object.create(null),We=Object.create(null);(0,xw._assignPackageExport)("databases",We);(0,xw._assignPackageExport)("tables",jn);wd=Symbol.for("next-table-id"),VE=[],KE=[],Fa=new Map;a(xTe,"getTables");a(dt,"getDatabases");a(Gu,"resetDatabases");a($E,"readMetaDb");a(jW,"ensureDB");a(zW,"setTable");a(eu,"database");a(YA,"dropDatabase");a(pt,"table");HTe=1e3,kTe=10;a(FTe,"runIndexing");a(GTe,"dropTableMeta");a(Lc,"onUpdatedTable");a(of,"onRemovedDB");a(vm,"getDefaultCompression")});var te=O((Ove,lj)=>{"use strict";var Ga=require("path"),ej=require("fs-extra"),In=K(),QW=require("fs-extra"),ZT=require("os"),qTe=require("net"),$Te=require("recursive-iterator"),Yt=L(),VTe=bg(),JW=require("papaparse"),eg=require("moment"),{inspect:KTe}=require("util"),XW=require("is-number"),bve=require("lodash"),YTe=require("minimist"),WTe=require("https"),jTe=require("http"),{hdb_errors:tg}=_e(),zTe=/^((\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)))$/,tj=require("util").promisify(setTimeout),QTe=100,JTe=5,XTe="",ZTe=4,ZW={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};lj.exports={isEmpty:ns,isEmptyOrZeroLength:Wi,arrayHasEmptyValues:rge,arrayHasEmptyOrZeroLengthValues:nge,buildFolderPath:sge,isBoolean:rj,errorizeMessage:ege,stripFileExtension:oge,autoCast:age,autoCastJSON:nj,autoCastJSONDeep:Fw,removeDir:cge,compareVersions:lge,isCompatibleDataVersion:uge,escapeRawValue:dge,unescapeValue:_ge,stringifyProps:fge,timeoutPromise:hge,isClusterOperation:mge,getClusterUser:Tge,checkGlobalSchemaTable:Sge,getHomeDir:ij,getPropsFilePath:Ege,promisifyPapaParse:gge,removeBOM:oj,createEventPromise:Rge,checkProcessRunning:Age,checkSchemaTableExist:yge,checkSchemaExists:aj,checkTableExists:cj,getStartOfTomorrowInSeconds:bge,getLimitKey:Oge,isObject:ige,isNotEmptyAndHasValue:tge,autoCasterIsNumberCheck:sj,backtickASTSchemaItems:Nge,isPortTaken:pge,createForkArgs:Ige,autoCastBoolean:wge,async_set_timeout:tj,getTableHashAttribute:Cge,doesSchemaExist:Pge,doesTableExist:Dge,stringifyObj:Lge,ms_to_time:Mge,changeExtension:Uge,getEnvCliRootPath:Gw,noBootFile:vge,httpRequest:Bge,transformReq:xge,convertToMS:Hge,PACKAGE_ROOT:Yt.PACKAGE_ROOT};function ege(e){return e instanceof Error?e:new Error(e)}a(ege,"errorizeMessage");function ns(e){return e==null}a(ns,"isEmpty");function tge(e){return!ns(e)&&(e||e===0||e===""||rj(e))}a(tge,"isNotEmptyAndHasValue");function Wi(e){return ns(e)||e.length===0||e.size===0}a(Wi,"isEmptyOrZeroLength");function rge(e){if(ns(e))return!0;for(let t=0;t<e.length;t++)if(ns(e[t]))return!0;return!1}a(rge,"arrayHasEmptyValues");function nge(e){if(Wi(e))return!0;for(let t=0;t<e.length;t++)if(Wi(e[t]))return!0;return!1}a(nge,"arrayHasEmptyOrZeroLengthValues");function sge(...e){try{return e.join(Ga.sep)}catch{console.error(e)}}a(sge,"buildFolderPath");function rj(e){return ns(e)?!1:e===!0||e===!1}a(rj,"isBoolean");function ige(e){return ns(e)?!1:typeof e=="object"}a(ige,"isObject");function oge(e){return Wi(e)?XTe:e.slice(0,-ZTe)}a(oge,"stripFileExtension");function age(e){return ns(e)||e===""||typeof e!="string"?e:ZW[e]!==void 0?ZW[e]:sj(e)===!0?Number(e):zTe.test(e)?new Date(e):e}a(age,"autoCast");function nj(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(nj,"autoCastJSON");function Fw(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=Fw(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=Fw(r);n!==r&&(e[t]=n)}return e}else return nj(e)}a(Fw,"autoCastJSONDeep");function sj(e){if(e.startsWith("0.")&&XW(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&XW(e))}a(sj,"autoCasterIsNumberCheck");async function cge(e){if(Wi(e))throw new Error(`Directory path: ${e} does not exist`);try{await QW.emptyDir(e),await QW.remove(e)}catch(t){throw In.error(`Error removing files in ${e} -- ${t}`),t}}a(cge,"removeDir");function lge(e,t){if(Wi(e)){In.info("Invalid current version sent as parameter.");return}if(Wi(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(lge,"compareVersions");function uge(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(uge,"isCompatibleDataVersion");function dge(e){if(ns(e))return e;let t=String(e);return t==="."?Yt.UNICODE_PERIOD:t===".."?Yt.UNICODE_PERIOD+Yt.UNICODE_PERIOD:t.replace(Yt.FORWARD_SLASH_REGEX,Yt.UNICODE_FORWARD_SLASH)}a(dge,"escapeRawValue");function _ge(e){if(ns(e))return e;let t=String(e);return t===Yt.UNICODE_PERIOD?".":t===Yt.UNICODE_PERIOD+Yt.UNICODE_PERIOD?"..":String(e).replace(Yt.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(_ge,"unescapeValue");function fge(e,t){if(ns(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+ZT.EOL}!Wi(n)&&n[0]===";"?r+=" "+n+s+ZT.EOL:Wi(n)||(r+=n+"="+s+ZT.EOL)}catch{In.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(fge,"stringifyProps");function ij(){let e;try{e=ZT.homedir()}catch{e=process.env.HOME}return e}a(ij,"getHomeDir");function Ege(){let e=Ga.join(ij(),Yt.HDB_HOME_DIR_NAME,Yt.BOOT_PROPS_FILE_NAME);return ej.existsSync(e)||(e=Ga.join(__dirname,"../","hdb_boot_properties.file")),e}a(Ege,"getPropsFilePath");function hge(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(hge,"timeoutPromise");async function pge(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=qTe.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a(pge,"isPortTaken");function mge(e){try{return Yt.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){In.error(`Error checking operation against cluster ops ${t}`)}return!1}a(mge,"isClusterOperation");function Sge(e,t){let r=(Pe(),oe(ut)).getDatabases();if(!r[e])return tg.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return tg.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Sge,"checkGlobalSchemaTable");function Tge(e,t){if(ns(t)){In.warn("No CLUSTERING_USER defined, clustering disabled");return}if(ns(e)||Wi(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(Tge,"getClusterUser");function gge(){JW.parsePromise=function(e,t,r){return new Promise(function(n,s){JW.parse(e,{header:!0,transformHeader:oj,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(gge,"promisifyPapaParse");function oj(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(oj,"removeBOM");function Rge(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;In.info(`Got cluster status event response: ${KTe(s)}`);try{i.cancel()}catch{In.error("Error trying to cancel timeout.")}n(s)})})}a(Rge,"createEventPromise");async function Age(e){let t=!0,r=0;do await tj(QTe*r++),(await VTe.findPs(e)).length>0&&(t=!1);while(t&&r<JTe);if(t)throw new Error(`process ${e} was not started`)}a(Age,"checkProcessRunning");function yge(e,t){let r=aj(e);if(r)return r;let n=cj(e,t);if(n)return n}a(yge,"checkSchemaTableExist");function aj(e){let{getDatabases:t}=(Pe(),oe(ut));if(!t()[e])return tg.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(aj,"checkSchemaExists");function cj(e,t){let{getDatabases:r}=(Pe(),oe(ut));if(!r()[e][t])return tg.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(cj,"checkTableExists");function bge(){let e=eg().utc().add(1,Yt.MOMENT_DAYS_TAG).startOf(Yt.MOMENT_DAYS_TAG).unix(),t=eg().utc().unix();return e-t}a(bge,"getStartOfTomorrowInSeconds");function Oge(){return eg().utc().format("DD-MM-YYYY")}a(Oge,"getLimitKey");function Nge(e){try{let t=new $Te(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(Nge,"backtickASTSchemaItems");function Ige(e){return[e]}a(Ige,"createForkArgs");function wge(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(wge,"autoCastBoolean");function Cge(e,t){let{getDatabases:r}=(Pe(),oe(ut)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(Cge,"getTableHashAttribute");function Pge(e){let{getDatabases:t}=(Pe(),oe(ut));return t()[e]!==void 0}a(Pge,"doesSchemaExist");function Dge(e,t){let{getDatabases:r}=(Pe(),oe(ut));return r()[e]?.[t]!==void 0}a(Dge,"doesTableExist");function Lge(e){try{return JSON.stringify(e)}catch{return e}}a(Lge,"stringifyObj");function Mge(e){let t=eg.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(Mge,"ms_to_time");function Uge(e,t){let r=Ga.basename(e,Ga.extname(e));return Ga.join(Ga.dirname(e),r+t)}a(Uge,"changeExtension");function Gw(){if(process.env[Yt.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Yt.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=YTe(process.argv);if(e[Yt.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Yt.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(Gw,"getEnvCliRootPath");var kw;function vge(){if(kw)return kw;let e=Gw();if(Gw()&&ej.pathExistsSync(Ga.join(e,Yt.HDB_CONFIG_FILE)))return kw=!0,!0}a(vge,"noBootFile");function Bge(e,t){let r;return e.protocol==="http:"?r=jTe:r=WTe,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(Bge,"httpRequest");function xge(e){if(!e.schema&&!e.database){e.schema=Yt.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(xge,"transformReq");function Hge(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(Hge,"convertToMS")});var ne=O((Ej,hj)=>{"use strict";var qw=require("fs-extra"),Nl=require("path"),uj=require("os"),kge=require("properties-reader"),zE=K(),jE=te(),Le=L(),rg=Ct(),Fge="Error initializing environment manager",ng="BOOT_PROPS_FILE_PATH",dj=!1,Gge={[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},Bo={};Object.assign(Ej,hj.exports={BOOT_PROPS_FILE_PATH:ng,getHdbBasePath:qge,setHdbBasePath:$ge,get:_j,initSync:Kge,setProperty:Xe,initTestEnvironment:Wge,setCloneVar:Yge});function qge(){return Bo[Le.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(qge,"getHdbBasePath");function $ge(e){Bo[Le.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a($ge,"setHdbBasePath");function _j(e){let t=rg.getConfigValue(e);return t===void 0?Bo[e]:t}a(_j,"get");function Xe(e,t){Gge[e]&&(Bo[e]=t),rg.updateConfigObject(e,t)}a(Xe,"setProperty");function Vge(){let e;try{e=jE.getPropsFilePath(),qw.accessSync(e,qw.constants.F_OK|qw.constants.R_OK),dj=!0;let t=kge(e);return Bo[Le.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(Le.HDB_SETTINGS_NAMES.INSTALL_USER),Bo[Le.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(Le.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Bo[ng]=e,!0}catch{return zE.trace(`Environment manager found no properties file at ${e}`),!1}}a(Vge,"doesPropFileExist");function Kge(e=!1){try{((dj||Vge()||jE.noBootFile())&&!fj||e)&&(rg.initConfig(e),Bo[Le.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=rg.getConfigValue(Le.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){zE.error(Fge),zE.error(t),console.error(t),process.exit(1)}}a(Kge,"initSync");var fj=!1;function Yge(e){fj=e}a(Yge,"setCloneVar");function Wge(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=Nl.join(__dirname,"../../","unitTests");Bo[ng]=Nl.join(l,"hdb_boot_properties.file"),Xe(Le.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Nl.join(l,"settings.test")),Xe(Le.HDB_SETTINGS_NAMES.INSTALL_USER,uj.userInfo()?uj.userInfo().username:void 0),Xe(Le.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Xe(Le.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Nl.join(l,"envDir","log")),Xe(Le.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Xe(Le.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Xe(Le.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Xe(Le.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Nl.join(l,"envDir")),Xe(Le.CONFIG_PARAMS.STORAGE_PATH,Nl.join(l,"envDir")),s&&(Xe(Le.CONFIG_PARAMS.HTTP_SECUREPORT,_j(Le.CONFIG_PARAMS.HTTP_PORT)),Xe(Le.CONFIG_PARAMS.HTTP_PORT,null)),Xe(Le.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),Xe(Le.CONFIG_PARAMS.HTTP_PORT,9926),Xe(Le.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Xe(Le.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT,9925),Xe(Le.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,jE.isEmpty(i)?!1:i),Xe(Le.CONFIG_PARAMS.HTTP_CORS,jE.isEmpty(i)?!1:i),Xe(Le.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Xe(Le.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Xe(Le.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Xe(Le.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Xe(Le.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Nl.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Xe(Le.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,jE.isEmpty(c)?!1:c),o&&(Xe("CORS_ACCESSLIST",o),Xe(Le.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(Xe(Le.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),Xe(Le.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(Xe(Le.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Xe(Le.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(Xe(Le.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Xe(Le.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${ng}. Please check your boot props and settings files`;zE.fatal(r),zE.error(t)}}a(Wge,"initTestEnvironment")});var gj=O((wve,Tj)=>{"use strict";var Sj=require("joi"),{string:QE,boolean:pj,array:jge}=Sj.types(),mj=L(),zge=_t();Tj.exports=Qge;function Qge(e){let t=Sj.object({operation:QE.valid(mj.OPERATIONS_ENUM.ADD_NODE,mj.OPERATIONS_ENUM.UPDATE_NODE).required(),node_name:QE.required(),subscriptions:jge.items({schema:QE.required(),table:QE.optional(),hash_attribute:QE.optional(),subscribe:pj.required(),publish:pj.required()}).min(1).required()});return zge.validateBySchema(e,t)}a(Qge,"updateRemoteSourceValidator")});var JE=O((Pve,Rj)=>{"use strict";var $w=class{static{a(this,"UpdateRemoteResponseObject")}constructor(t,r,n=void 0){this.status=t,this.message=r,this.system_info=n}};Rj.exports=$w});var Oj=O((Lve,bj)=>{"use strict";var Jge=gj(),xo=K(),Vw=ft(),Xge=L(),Kw=ps(),Il=kt(),Aj=lf(),Zge=Xl(),{Node:eRe,NodeSubscription:yj}=Ea(),Yw=JE(),Ww=te(),tRe=ne(),{cloneDeep:rRe}=require("lodash"),{broadcast:nRe}=ot();bj.exports=sRe;async function sRe(e){try{let t=Jge(e);if(t)return xo.error(`Validation error in updateRemoteSource: ${t.message}`),new Yw(Vw.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,t.message);let{subscriptions:r,node_name:n,system_info:s}=e,i=[],o=rRe(await Kw.getNodeRecord(n)),c=!Ww.isEmptyOrZeroLength(o);o=c?o[0]:o,c&&xo.trace(`Existing record found for ${n}, updating records subscriptions`);for(let u=0,d=r.length;u<d;u++){let _=r[u],E=_.schema,f=_.table;if(!Ww.doesSchemaExist(E)){xo.trace(`updateRemoteSource creating schema: ${E}`);try{await Aj.createSchema({operation:"create_schema",schema:E})}catch(h){xo.error(h)}}if(f&&!Ww.doesTableExist(E,f)){let h=new Zge(E,f,_.hash_attribute);_.attributes&&(h.attributes=_.attributes),xo.trace(`updateRemoteSource creating table: ${f} in schema: ${E} with attributes: ${JSON.stringify(_.attributes)}`);try{await Aj.createTable(h)}catch(T){xo.error(T)}}if(xo.trace(`Creating local stream for ${E}.${f}`),await Il.createLocalTableStream(E,f),c?(await Il.updateConsumerIterator(E,f,n,"stop"),await Il.updateRemoteConsumer(_,n),_.subscribe===!0&&await Il.updateConsumerIterator(E,f,n,"start")):(await Il.updateRemoteConsumer(_,n),_.subscribe===!0?await Il.updateConsumerIterator(E,f,n,"start"):await Il.updateConsumerIterator(E,f,n,"stop")),c){let h=!1;for(let T=0,m=o.subscriptions.length;T<m;T++){let g=o.subscriptions[T];if(g.schema===E&&g.table===f){g.publish=_.publish,g.subscribe=_.subscribe,h=!0;break}}h||o.subscriptions.push(new yj(E,f,_.publish,_.subscribe))}else i.push(new yj(E,f,_.publish,_.subscribe))}c||(o=new eRe(n,i,void 0),xo.trace(`No record found for ${n}, creating a new one`));let l=Object.create({});return Object.assign(l,o),l.system_info=s,await Kw.upsertNodeRecord(l),nRe({type:"nats_update"}),new Yw(Vw.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,`Node ${tRe.get(Xge.CONFIG_PARAMS.CLUSTERING_NODENAME)} successfully updated remote source`,await Kw.getSystemInfo())}catch(t){xo.error(t);let r=t.message?t.message:t;return new Yw(Vw.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(sRe,"updateRemoteSource")});var Cj=O((Uve,wj)=>{"use strict";var Ij=require("joi"),{string:Nj}=Ij.types(),iRe=L(),oRe=_t();wj.exports=aRe;function aRe(e){let t=Ij.object({operation:Nj.valid(iRe.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:Nj.required()});return oRe.validateBySchema(e,t)}a(aRe,"removeRemoteSourceValidator")});var Lj=O((Bve,Dj)=>{"use strict";var cRe=Cj(),sg=K(),ig=ft(),jw=L(),lRe=ps(),uRe=te(),Pj=kt(),dRe=ne(),og=JE(),{NodeSubscription:_Re}=Ea(),fRe=Jl(),ERe=zo(),{broadcast:hRe}=ot(),pRe=dRe.get(jw.CONFIG_PARAMS.CLUSTERING_NODENAME);Dj.exports=mRe;async function mRe(e){try{let t=cRe(e);if(t)return sg.error(`Validation error in removeRemoteSource: ${t.message}`),new og(ig.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,t.message);let r=e.node_name,n=await lRe.getNodeRecord(r);if(uRe.isEmptyOrZeroLength(n)){let i=`No record found for node '${r}'`;return sg.error(i),new og(ig.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,i)}n=n[0];for(let i=0,o=n.subscriptions.length;i<o;i++){let c=n.subscriptions[i];sg.trace(`remove remote source removing subscription: ${c.schema}.${c.table} for node: ${r}`);let l=new _Re(c.schema,c.table,!1,!1);await Pj.updateConsumerIterator(c.schema,c.table,r,"stop"),await Pj.updateRemoteConsumer(l,r)}let s=new fRe(jw.SYSTEM_SCHEMA_NAME,jw.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await ERe.deleteRecord(s),hRe({type:"nats_update"}),new og(ig.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,`Node ${pRe} successfully removed node '${r}'.`)}catch(t){sg.error(t);let r=t.message?t.message:t;return new og(ig.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(mRe,"removeRemoteSource")});var Bj=O((Hve,vj)=>{"use strict";var ag=K(),XE=L(),Mj=ft(),zw=ne(),SRe=te(),Uj=JE(),TRe=ps(),gRe=X_(),RRe=Vr();vj.exports=ARe;async function ARe(e){try{ag.trace("getRemoteSourceConfig called");let t=process.uptime()*1e3,r=SRe.ms_to_time(t),n=new yRe(zw.get(XE.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),zw.get(XE.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT)??zw.get(XE.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_SECUREPORT),r,await TRe.getSystemInfo());try{let s={name:e.node_name,system_info:e.system_info},i=new gRe(XE.SYSTEM_SCHEMA_NAME,XE.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[s]);await RRe.update(i)}catch(s){ag.error("Get remote config encountered an error updating system info for node:",e.node_name,s)}return ag.trace("getRemoteSourceConfig response:",n),new Uj(Mj.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,n)}catch(t){ag.error(t);let r=t.message?t.message:t;return new Uj(Mj.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(ARe,"getRemoteSourceConfig");function yRe(e,t,r,n){this.uptime=r,this.ports={clustering:e,operations_api:t},this.system_info=n}a(yRe,"ConfigResponseObject")});var Fj=O((Fve,kj)=>{"use strict";var xj=ne();xj.initSync();var Hj=kt(),ZE=K(),Ld=L(),Qw=ft(),bRe=Oj(),ORe=Lj(),NRe=Bj(),IRe=JE(),{encode:wRe,decode:CRe}=require("msgpackr"),PRe=ls(),DRe=gi(),LRe=require("util"),MRe=L(),{isMainThread:URe,parentPort:vRe}=require("worker_threads");ot();var BRe=LRe.promisify(PRe.setSchemaDataToGlobal),Jw=xj.get(Ld.CONFIG_PARAMS.CLUSTERING_NODENAME);kj.exports=xRe;async function xRe(){try{ZE.notify("Starting reply service."),await BRe();let e=await Hj.getConnection(),t=`${Jw}.__request__`,r=e.subscribe(t,{queue:Jw});await HRe(r)}catch(e){ZE.error(e)}}a(xRe,"initialize");async function HRe(e){for await(let t of e){let r=CRe(t.data),n;switch(r.operation){case Ld.OPERATIONS_ENUM.ADD_NODE:case Ld.OPERATIONS_ENUM.UPDATE_NODE:n=await bRe(r);break;case Ld.OPERATIONS_ENUM.REMOVE_NODE:n=await ORe(r);break;case Ld.OPERATIONS_ENUM.CLUSTER_STATUS:n=await NRe(r);break;case Ld.OPERATIONS_ENUM.DESCRIBE_ALL:n=await kRe();break;default:let s=`node '${Jw}' reply service received unrecognized request operation`;ZE.error(s),n=new IRe(Qw.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,s)}ZE.trace(n),t.respond(wRe(n))}}a(HRe,"handleRequest");async function kRe(){try{return{status:Qw.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,message:await DRe.describeAll({bypass_auth:!0})}}catch(e){return ZE.error(e),{status:Qw.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,message:e.message}}}a(kRe,"getRemoteDescribeAll");URe||vRe.on("message",async e=>{let{type:t}=e;t===MRe.ITC_EVENT_TYPES.SHUTDOWN&&Hj.closeConnection()})});var FRe=Fj();(async()=>{try{await FRe()}catch(e){console.error("Error launching Nats reply service."),console.error(e)}})();
133
+ `)}a(JK,"defaultNotFound")});var VK={};je(VK,{startHTTPThreads:()=>Gme,startSocketServer:()=>XI,updateWorkerIdleness:()=>hY});async function Gme(e=2,t){try{if(t)QI(0,1,!0);else{let{loadRootComponents:r}=oT();if(e===0)return(0,Ds.setMainIsWorker)(!0),await WI().startServers(),Promise.resolve([]);await r()}EY();for(let r=0;r<e;r++)QI(r,e);return Promise.all(fY)}finally{(0,Ds.threadsHaveStarted)()}}function EY(){let e=(0,dY.checkMemoryLimit)();e&&!process.env.DEV_MODE&&(console.error(e),zI=setInterval(()=>{lT.notify(e)},Fme).unref())}function QI(e,t=1,r){if(jI++,(0,Ds.startWorker)("server/threads/threadServer.js",{name:Td.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((o,c)=>{function l(u){u.type===Td.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(n.removeListener("message",l),o(n))}a(l,"onMessage"),n.on("message",l),n.on("error",c)});fY.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=cT.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)_Y[c.localPort](null,c)}}}),r){let n=setInterval(()=>{JI?JI=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,Ds.shutdownWorkers)(),jI=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function XI(e=0,t){if(typeof e=="string")try{(0,uT.existsSync)(e)&&(0,uT.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=qme:r=$me(t):r=ZI;let n=(0,md.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(n._handle){n._handle.onconnection=_Y[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),JI=!0,r(o,(c,l)=>{if(!c){if(cY){let d=o._socket||new md.Socket({handle:o,writable:!0,readable:!0});cY.deliverSocket(d,e,l),d.resume()}else jI>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(),o.localPort=e,pd.push(o)):(console.log("start up a dynamic thread to handle request"),QI(0));mr(!1,"socket-routed");return}c.requests++;let u=o.fd;if(u>=0)c.postMessage({port:e,fd:u,data:l});else{let d=o._socket||new md.Socket({handle:o,writable:!0,readable:!0});Yme(d,c,e)}mr(!0,"socket-routed")})};let s=ru();lT.info(`HarperDB ${s.version} Server running on port ${e}`)}return n.on("error",s=>{console.error("Error in socket server",s)}),process.env._UNREF_SERVER&&n.unref(),n}function ZI(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>=aT)return aT=i,t(r);n=i}aT=0,t(r)}function qme(e,t){let r={};e.getpeername(r);let n=r.address,s=Sd.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);ZI(e,o=>{Sd.set(n,{worker:o,lastUsed:i}),t(o)})}function $me(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=Sd.get(l),d=Date.now();if(u&&u.worker.threadId!==-1)return u.lastUsed=d,s(u.worker);ZI(n,_=>{Sd.set(l,{worker:_,lastUsed:d}),s(_,o)})})}a(r,"findByHeaderAffinity")}function hY(){aT=0;for(let e of hd)e.expectedIdle=e.recentELU.idle+Vme,e.requests=1;hd.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function Yme(e,t,r){let n=Kme++;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(),cT.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")),cT.delete(n)),s.event=="destroy"&&(e.destroy(),cT.delete(n))})}var Ds,md,Td,lT,uT,uY,dY,hd,pd,_Y,cY,jI,fY,zI,Fme,JI,aT,lY,Sd,Vme,cT,Kme,xI=Ie(()=>{Ds=M(ot()),md=require("net"),Td=M(L()),lT=M(K()),uT=require("fs");Ii();uY=require("worker_threads"),dY=M(_c()),hd=[],pd=[],_Y=[],jI=0,fY=[];uY.isMainThread&&(process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)}),(0,Ds.onMessageFromWorkers)(e=>{e.type===Td.ITC_EVENT_TYPES.RESTART&&zI&&(clearInterval(zI),EY())}));Fme=6e5;a(Gme,"startHTTPThreads");a(EY,"licenseWarning");a(QI,"startHTTPWorker");a(XI,"startSocketServer");aT=0;a(ZI,"findMostIdleWorker");lY=36e5,Sd=new Map;a(qme,"findByRemoteAddressAffinity");a($me,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Sd)r.lastUsed+lY<e&&Sd.delete(t)},lY).unref();Vme=1e3;a(hY,"updateWorkerIdleness");(0,Ds.setMonitorListener)(hY);cT=new Map,Kme=1;a(Yme,"proxySocket")});var TY=O((uUe,SY)=>{"use strict";var Wme=require("cluster"),ml=ne();ml.initSync();var mY=L(),iUe=require("util"),vo=K(),oUe=require("fs"),jme=require("fastify"),aUe=ru(),zme=require("@fastify/cors"),Qme=require("@fastify/compress"),Jme=require("@fastify/static"),Xme=zN(),Zme=require("path"),{PACKAGE_ROOT:eSe}=L(),tSe=ls(),rSe=te(),nSe=Hn(),sSe=_c(),{server:iSe}=(qr(),oe(Ja)),{node_request_key:cUe}=(HS(),oe(oI)),{authHandler:oSe,handlePostRequest:aSe,serverErrorHandler:cSe,reqBodyValidationHandler:lSe}=vS(),lUe=require("net"),{registerContentHandlers:uSe}=(zc(),oe(tV)),dSe=6e4,_Se=1024*1024*1024,fSe="TRUE",{CONFIG_PARAMS:PE}=mY,gd;SY.exports={hdbServer:pY,start:pY};async function pY(e){try{vo.debug("In Fastify server"+process.cwd()),vo.debug(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),vo.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=Wme.isMaster,await ESe();let t=e.securePort>0;gd=hSe(t),await gd.ready(),e||(e={}),e.isOperationsServer=!0;try{iSe.http(gd.server,e),gd.server.closeIdleConnections||await gd.listen({port:0,host:"::"})}catch(r){throw gd.close(),vo.error(r),vo.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),vo.fatal(t),process.exit(1)}}a(pY,"operationsServer");async function ESe(){vo.trace("Configuring HarperDB process."),tSe.setSchemaDataToGlobal(),await nSe.setUsersToGlobal(),await sSe.getLicense()}a(ESe,"setUp");function hSe(e){vo.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=pSe(e),r=jme(t);r.server.headersTimeout=SSe(),r.setErrorHandler(cSe);let n=mSe();n&&r.register(zme,n),r.register(function(i,o,c){i.setNotFoundHandler(function(l,u){r.server.emit("unhandled",l.raw,u.raw)}),c()}),r.register(Xme),r.register(Qme),r.register(Jme,{root:Zme.join(eSe,"studio/build-local")}),uSe(r);let s=ml.get(mY.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!rSe.isEmpty(s)&&s.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[lSe,oSe],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),aSe(i,o)}),r.get("/health",()=>"HarperDB is running."),vo.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(hSe,"buildServer");function pSe(e){let t=ml.get(PE.OPERATIONSAPI_NETWORK_TIMEOUT),r=ml.get(PE.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:_Se,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}a(pSe,"getServerOptions");function mSe(){let e=ml.get(PE.OPERATIONSAPI_NETWORK_CORS),t=ml.get(PE.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===fSe)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(n,s)=>s(null,t.indexOf(n)!==-1))),r}a(mSe,"getCORSOpts");function SSe(){return ml.get(PE.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??dSe}a(SSe,"getHeaderTimeoutConfig")});var iw={};je(iw,{disableNATS:()=>gSe,publishToStream:()=>fT,setNATSReplicator:()=>ew,setPublishToStream:()=>RSe,setSubscription:()=>sw,start:()=>TSe});function TSe(){DE.default.get(LE.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&ySe()}function gSe(e=!0){bY=e}function RSe(e,t){fT=e,sw=t}function ySe(){if(bY||process.env._DISABLE_NATS)return;let e=dt(),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];ew(s,r,i)}}Lc((r,n)=>{ew(r.tableName,r.databaseName,r),n&&NY(r)}),!gY&&(gY=!0)}function ew(e,t,r){if(t==="system"&&bSe.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 Lr{static{a(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[ze],record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[ze]})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[ze],record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this[ze],record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[ze]})}static defineSchema(i){NY(i)}static subscribe(){let i=new Dn;return sw(t,e,i),i}static subscribeOnThisThread(i){return i<(DE.default.get(LE.default.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??ASe)}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 dT(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=OY;return i}a(n,"getNATSTransaction")}function NY(e){let t=DE.default.get(LE.default.CONFIG_PARAMS.CLUSTERING_NODENAME);fT(`${rw.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,nw.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 RY,rw,nw,AY,yY,DE,LE,_T,bY,fT,sw,ASe,OY,gY,bSe,dT,tw,IY=Ie(()=>{Pe();Ks();RY=M(kt()),rw=M(ft()),nw=M(eo());Ll();AY=M(cy()),yY=M(on()),DE=M(ne()),LE=M(L()),_T=M(K());a(TSe,"start");a(gSe,"disableNATS");fT=RY.publishToStream,sw=AY.setSubscription;a(RSe,"setPublishToStream");ASe=2;a(ySe,"assignReplicationSource");bSe=["hdb_job","hdb_analytics","hdb_raw_analytics","hdb_info","hdb_license"];a(ew,"setNATSReplicator");a(NY,"publishSchema");dT=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=DE.default.get(LE.default.CONFIG_PARAMS.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writes_by_db){let o=[],c=[],l,u;for(let d of i){let _=d.table,E=d.operation=="put"?"upsert":d.operation;l||(_T.trace(`Sending transaction event ${E}`),u=l={operation:E,schema:s,table:_,__origin:{user:this.user?.username,timestamp:t,node_name:r}},l.hash_values=c,E!=="delete"&&E!=="invalidate"&&(l.records=o)),l.table===_&&l.operation===E?(o.push(d.record),c.push(d.id)):u=u.next={operation:E,table:_,id:d.id,record:d.record},d.expiresAt&&(u.expiresAt=d.expiresAt)}l&&n.push(fT(`${rw.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,nw.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(d=>{throw _T.error("An error has occurred trying to replicate transaction",l,d),d.statusCode=504,d}))}return Promise.all(n)}},tw=class extends dT{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,yY.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};OY=new tw});async function LY({clientId:e,user:t,clean:r,will:n,keepalive:s}){let i;if(e&&!r){let o=await ow.get(e,{returnNonexistent:!0});i=new lw(e,t,o),o&&(i.sessionWasPresent=!0)}else{if(e){let o=await ow.get(e);o&&o.delete()}i=new hT(e,t)}return n&&(n.id=e,n.user={username:t?.username},ME.put(n)),s&&(i.keepalive=s,i.receivedPacket()),i}function aw(){return ET++,ET>65500&&(ET=1),ET}function cw(e,t,r){let{topic:n,retain:s}=e;e.data=t,e.async=!0,r.authorize=!0;let i=Ci.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 Pt(r,()=>s?t===void 0?o.delete(e,r):o.put(e,e.data,r):o.publish(e,e.data,r))}var CY,Ba,PY,DY,wY,ow,ME,ET,hT,lw,MY=Ie(()=>{Pe();cu();CY=M(on()),Ba=M(K());Sc();PY=M(ot()),DY=M(WI());qr();wY=100,ow=pt({database:"system",table:"hdb_durable_session",attributes:[{name:"id",isPrimaryKey:!0},{name:"subscriptions",type:"array",elements:{attributes:[{name:"topic"},{name:"qos"},{name:"startTime"},{name:"acks"}]}}]}),ME=pt({database:"system",table:"hdb_session_will",attributes:[{name:"id",isPrimaryKey:!0},{name:"topic",type:"string"},{name:"data"},{name:"qos",type:"number"},{name:"retain",type:"boolean"},{name:"user",type:"any"}]});(0,PY.getWorkerIndex)()===0&&(async()=>{await DY.when_components_loaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of ME.search({})){let t=e.data,r={...e};r.user?.username&&(r.user=await it.getUser(r.user.username));try{await cw(r,t,r)}catch{(0,Ba.warn)("Failed to publish will",t)}ME.delete(e.id)}})();a(LY,"getSession");ET=1;a(aw,"getNextMessageId");hT=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 d=this.subscriptions.find(g=>g.topic===s),_;d?(_=i>0,d.end(),this.subscriptions.splice(this.subscriptions.indexOf(d),1)):_=i===2;let E={search:l,async:!0,user:this.user,startTime:o,omitCurrent:_,url:""};o&&(0,Ba.trace)("Resuming subscription from",s,"from",o);let f=Ci.getMatch(u,"mqtt");if(!f){let g=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw g.statusCode=404,g}if(E.url=f.relativeURL,E.url.indexOf("+")>-1||E.url.indexOf("#")>-1){let g=E.url.slice(1);if(g.indexOf("#")>-1&&g.indexOf("#")!==g.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(E.isCollection=!0,g.indexOf("+")===g.length-1)E.onlyChildren=!0,E.url="/"+g.slice(0,g.length-1);else{let S=g.split("/"),y;for(let x=0;x<S.length;x++)if(S[x].indexOf("+")>-1)if(S[x]==="+")y=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&y)throw new Error("Filters can not be combined");let I=!0;S[S.length-1]==="#"&&(S.length--,I=!1),y&&(n=a(x=>{let X=x.id;if(!Array.isArray(X)||I&&X.length!==S.length)return!1;for(let W=0;W<S.length;W++)if(S[W]!=="+"&&S[W]!==X[W])return!1;return!0},"filter"));let U=S.indexOf("+");E.url="/"+(U>-1?S.slice(0,U):S).concat("").join("/")}}let h=f.path,T=f.Resource,m=await Pt(E,async()=>{let g=this.createContext();g.topic=s,g.retainHandling=i;let S=await T.subscribe(E,g);if(!S)return;if(!S[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);let y=(async()=>{for await(let I of S)try{let U;if(I.type&&I.type!=="put"&&I.type!=="delete"&&I.type!=="message"&&I.type!=="patch"||n&&!n(I))continue;r?(I.topic=s,U=this.needsAcknowledge(I)):(I.acknowledge?.(),U=aw());let x=I.id;if(Array.isArray(x)&&(x=au(x)),x==null&&(x=""),await this.listener(h+"/"+x,I.value,U,t)===!1)break;this.awaitingAcks?.size>wY?await new Promise(W=>setTimeout(W,this.awaitingAcks.size-wY)):await new Promise(setImmediate)}catch(U){(0,Ba.warn)(U)}})();return S});if(m)return m.topic=s,m.qos=t.qos,this.subscriptions.push(m),m}resume(){}needsAcknowledge(t){let r=aw();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 cw(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();Pt(r,async()=>{try{if(!t){let n=await ME.get(this.sessionId);n?.doesExist()&&await cw(n,n.data,r)}}finally{await ME.delete(this.sessionId)}}).catch(n=>{(0,Ba.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(cw,"publish");lw=class extends hT{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=aw(),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,Ba.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,CY.getNextMonotonicTime)()),(0,Ba.trace)("Added durable subscription",t.topic,r),{qos:t.qos,topic:t.topic,startTime:r}}),ow.put(this.sessionRecord)}}});var dw={};je(dw,{bypassAuth:()=>OSe,start:()=>NSe});function OSe(){HY=!0}function NSe({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){e.mqtt||(e.mqtt={requireAuthentication:i,sessions:new Set,events:new xY.EventEmitter},e.mqtt.events.on("error",()=>{}));let o=e.mqtt,c=[],l=r?.mtls;return n&&(c=e.ws((u,d,_,E)=>{if(d.headers.get("sec-websocket-protocol")!=="mqtt")return E(u,d,_);o.events.emit("connection",u),_r.debug?.("Received WebSocket connection for MQTT from",u._socket.remoteAddress);let{onMessage:f,onClose:h}=vY(u,T=>{u.send(T)},d,Promise.resolve(_).then(()=>d?.user),o);u.on("message",f),u.on("close",h),u.on("error",T=>{_r.info?.("WebSocket error",T)})},{...n})),(t||s)&&c.push(e.socket(async u=>{let d;if(o.events.emit("connection",u),_r.debug?.(`Received ${u.getCertificate?"SSL":"TCP"} connection for MQTT from ${u.remoteAddress}`),l){if(u.authorized)try{let f=l.user;if(f!==null){(f===void 0||f==="Common Name"||f==="CN")&&(f=u.getPeerCertificate().subject.CN);try{d=await e.getUser(f,null,null),(0,Rd.get)(kr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&mT.notify?.({username:d?.username,status:kr.AUTH_AUDIT_STATUS.SUCCESS,type:kr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT mTLS",remote_address:u.remoteAddress})}catch(h){throw(0,Rd.get)(kr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&mT.error?.({username:f,status:kr.AUTH_AUDIT_STATUS.FAILURE,type:kr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:u.remoteAddress}),h}}else _r.debug?.("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",u.remoteAddress)}catch(f){o.events.emit("error",f,u),_r.error?.(f)}else if(l.required)return _r.info?.(`Unauthorized connection attempt, no authorized client certificate provided, error: ${u.authorizationError}`),u.end()}!d&&HY&&u.remoteAddress.includes("127.0.0.1")&&(d=await(0,BY.getSuperUser)(),_r.debug?.("Auto-authorizing local connection",d?.username));let{onMessage:_,onClose:E}=vY(u,f=>u.write(f),null,d,o);u.on("data",_),u.on("close",E),u.on("error",f=>{_r.info?.("Socket error",f)})},{port:t,securePort:s,mtls:l})),c}function vY(e,t,r,n,s){UY||(UY=!0,k_(_=>{pT>0&&_.push({metric:"mqtt-connections",connections:pT,byThread:!0})}));let i;pT++;let o,c={protocolVersion:4},l=(0,ST.parser)({protocolVersion:5});function u(_){l.parse(_)}a(u,"onMessage");function d(){pT--,i||(i=!0,o?.disconnect?.(),s.events.emit("disconnected",o,e),s.sessions.delete(o),qn(!1,"connection","mqtt","disconnect"),_r.debug?.("MQTT connection was closed",e.remoteAddress))}return a(d,"onClose"),l.on("packet",async _=>{n?.then&&(n=await n);let E=_.cmd;if(o)o.then&&await o;else if(E!=="connect"){_r.info?.("Received packet before connection was established, closing connection"),e?.destroy?e.destroy():e?.terminate();return}let f=_.topic,h=f?.indexOf("/",1),T=h>0?f.slice(0,h):f;mr(_.length,"bytes-received",T,g(_),"mqtt");try{switch(o?.receivedPacket?.(),E){case"connect":if(c.protocolVersion=_.protocolVersion,_.username)try{n=await it.getUser(_.username,_.password.toString(),r),(0,Rd.get)(kr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&mT.notify?.({username:n?.username,status:kr.AUTH_AUDIT_STATUS.SUCCESS,type:kr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch(V){return(0,Rd.get)(kr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&mT.error?.({username:_.username,status:kr.AUTH_AUDIT_STATUS.FAILURE,type:kr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),s.events.emit("auth-failed",_,e,V),qn(!1,"connection","mqtt","connect"),m({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return s.events.emit("auth-failed",_,e),qn(!1,"connection","mqtt","connect"),m({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(_,n),_.will){let V=e.deserialize||(e.deserialize=Ao(r?.headers.get?.("content-type")));_.will.data=_.will.payload?.length>0?V(_.will.payload):void 0,delete _.will.payload}o=LY({user:n,..._}),o=await o,o.socket=e,r&&(o.request=r),s.sessions.add(o)}catch(V){return _r.error?.(V),s.events.emit("auth-failed",_,e,V),qn(!1,"connection","mqtt","connect"),m({cmd:"connack",reasonCode:V.code||5,returnCode:V.code||128})}s.events.emit("connected",o,e),qn(!0,"connection","mqtt","connect"),m({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((V,se,Q,de)=>{try{if(i)throw new Error("Session disconnected while trying to send message to",V);let j=V.indexOf("/",1),ae=j>0?V.slice(0,j):V;m({cmd:"publish",topic:V,payload:S(se),messageId:Q||Math.floor(Math.random()*1e8),qos:de.qos},ae);let Oe=e._socket??e;return Oe.writableNeedDrain?new Promise(Ne=>Oe.once("drain",Ne)):!Oe.closed}catch(j){return _r.error?.(j),o?.disconnect(),s.sessions.delete(o),!1}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let y=[];for(let V of _.subscriptions){let se;try{let Q=await o.addSubscription(V,V.qos>=1);se=Q?Q.qos||0:c.protocolVersion<5?128:143}catch(Q){s.events.emit("error",Q,e,V,o),Q.statusCode?Q.statusCode===500?_r.warn?.(Q):_r.info?.(Q):_r.error?.(Q),se=c.protocolVersion<5?128:Q.statusCode===403?135:Q.statusCode===404?143:128}y.push(se)}await o.committed,m({cmd:"suback",granted:y,messageId:_.messageId});break;case"unsubscribe":{let V=[];for(let se of _.unsubscriptions)V.push(o.removeSubscription(se)?0:17);m({cmd:"unsuback",granted:V,messageId:_.messageId});break}case"pubrel":m({cmd:"pubcomp",messageId:_.messageId,reasonCode:0});return;case"publish":let I=_.qos===2?"pubrec":"puback",U=e.deserialize||(e.deserialize=Ao(r?.headers.get?.("content-type"))),X=(_.payload?.length||0)>0?U(_.payload):void 0,W;try{W=await o.publish(_,X)}catch(V){s.events.emit("error",V,e,_,o),_r.warn?.(V),_.qos>0&&m({cmd:I,messageId:_.messageId,reasonCode:128},_.topic);break}_.qos>0&&m({cmd:I,messageId:_.messageId,reasonCode:W===!1?144:0},_.topic);break;case"pubrec":m({cmd:"pubrel",messageId:_.messageId,reasonCode:0});break;case"pubcomp":case"puback":o.acknowledge(_.messageId);break;case"pingreq":m({cmd:"pingresp"});break;case"disconnect":i=!0,o?.disconnect(!0),s.events.emit("disconnected",o,e),s.sessions.delete(o),qn(!0,"connection","mqtt","disconnect"),_r.debug?.("Received disconnect command, closing MQTT session",e.remoteAddress),e.close?e.close():e.end();break}}catch(y){s.events.emit("error",y,e,_,o),_r.error?.(y),m({cmd:"disconnect"})}function m(y,I){let U=(0,ST.generate)(y,c);t(U),mr(U.length,"bytes-sent",I,g(y),"mqtt")}a(m,"sendPacket");function g(y){return y.qos>0?y.cmd+",qos="+y.qos:y.cmd}a(g,"packetMethodName");function S(y){return jc(y,r)}a(S,"serialize")}),l.on("error",_=>{_r.warn("MQTT parsing error, closing connection:",_.message),e?.destroy?e.destroy():e?.terminate()}),{onMessage:u,onClose:d}}var ST,BY,Rd,kr,uw,xY,mT,_r,HY,UY,pT,kY=Ie(()=>{ST=require("mqtt-packet");MY();BY=M(Hn());zc();Ii();qr();Rd=M(ne()),kr=M(L()),uw=M(Oc()),xY=require("events"),mT=(0,uw.loggerWithTag)("auth-event"),_r=(0,uw.loggerWithTag)("mqtt"),HY=(0,Rd.get)(kr.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(OSe,"bypassAuth");a(NSe,"start");pT=0;a(vY,"onSocket")});var Qf={};je(Qf,{component_errors:()=>yd,getComponentName:()=>DSe,loadComponent:()=>RT,loadComponentDirectories:()=>YY,setErrorReporter:()=>PSe});function YY(e,t){t&&(fw=t),e&&(Ew=e);let r=[];if((0,It.existsSync)(_w)){let s=(0,It.readdirSync)(_w,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Nt.join)(_w,o);r.push(RT(c,fw,"hdb",!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(RT(n,fw,n,!1,null,!!process.env.DEV_MODE)),Promise.all(r).then(()=>{KY=!0})}function PSe(e){UE=e}async function RT(e,t,r,n,s,i){let o=(0,It.realpathSync)(e);if(TT.has(o))return TT.get(o);TT.set(o,!0),s&&(Ew=s);try{let c;n&&(yd=new Map);let l=(0,Nt.join)(e,n?"harperdb-config.yaml":"config.yaml");(0,It.existsSync)(l)?c=n?(0,AT.getConfigObj)():(0,GY.parseDocument)((0,It.readFileSync)(l,"utf8")).toJSON():c=hw;let u=(0,Nt.join)(e,"node_modules","harperdb");try{Sl.isMainThread&&(n||(0,It.existsSync)(u)&&(0,It.realpathSync)(Od.PACKAGE_ROOT)!==(0,It.realpathSync)(u))&&((0,It.rmSync)(u,{recursive:!0,force:!0}),(0,It.existsSync)((0,Nt.join)(e,"node_modules"))||(0,It.mkdirSync)((0,Nt.join)(e,"node_modules")),(0,It.symlinkSync)(Od.PACKAGE_ROOT,u,"dir"))}catch(E){Ad.default.error("Error symlinking harperdb module",E)}let d=gT,_=n;for(let E in c){gT=E;let f=c[E];if(yd.set(n?E:(0,Nt.basename)(e),!1),!f)continue;let h,T=f.package;try{if(T){let I=e,U;for(;!(0,It.existsSync)(U=(0,Nt.join)(I,"node_modules",E));)if(I=(0,Nt.dirname)(I),I.length<(0,VY.getHdbBasePath)().length){U=null;break}if(U)h=await RT(U,t,r,!1),_=!0;else throw new Error(`Unable to find package ${E}:${T}`)}else h=CSe[E];if(!h)continue;let m=a(I=>(I.origin=r,pt(I)),"ensureTable"),g=f.network||(f.port||f.securePort)&&f,S=g?.securePort||g?.https&&g.port,y=!g?.https&&g?.port;if(Sl.isMainThread&&(h=await h.startOnMainThread?.({server:it,ensureTable:m,port:y,securePort:S,resources:t,...f})||h,n&&g))for(let I of[y,S])try{if(+I&&!FY.includes(I)){let U=pw.get(Od.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);U&&Ad.default.warn("Session affinity is not recommended and may cause memory leaks"),(U||!xS)&&(FY.push(I),XI(I,U))}}catch(U){console.error("Error listening on socket",I,U,E)}if(t.isWorker&&(h=await h.start?.({server:it,ensureTable:m,port:y,securePort:S,resources:t,...f})||h),Ew.set(h,!0),(h.handleFile||h.handleDirectory||h.setupFile||h.setupDirectory)&&f.files!=null){if(f.files.includes(".."))throw(0,$Y.handleHDBError)("Can not reference parent directories");let I=(0,Nt.join)(e,f.files).replace(/\\/g,"/"),U=I.indexOf("/*");if(U>-1&&f.files!==hw[E]?.files&&!(0,It.existsSync)(I.slice(0,U)))throw new Error(`The path '${I.slice(0,U)}' does not exist and cannot be used as the base of the resolved 'files' path value '${f.files}'`);let x=(0,Nt.basename)(e),X=f.path||"/";X=X.startsWith("/")?X:X.startsWith("./")?"/"+x+X.slice(2):X==="."?"/"+x:"/"+x+"/"+X;let W,V,se;if(f.root){let de=f.root;de.startsWith("/")&&(de=de.slice(1)),de.endsWith("/")&&(de=de.slice(0,-1)),de+="/",V=(0,Nt.join)(e,de)}else(se=I.indexOf("/*"))>-1?(V=I.slice(0,se+1),W=(0,Nt.relative)(e,V)):f.files.indexOf("/")>-1&&(V=I.slice(0,I.lastIndexOf("/")+1),W=(0,Nt.relative)(e,V));let Q=!1;if(Sl.isMainThread&&h.setupDirectory&&(Q=await h.setupDirectory?.(X,V,t)),t.isWorker&&h.handleDirectory&&(Q=await h.handleDirectory?.(X,V,t)),Q){_=!0;continue}for(let de of await(0,qY.default)(I,{onlyFiles:!1,objectMode:!0})){let{path:j,dirent:ae}=de;_=!0;let Oe=(0,Nt.relative)(e,j).replace(/\\/g,"/");if(W)if(Oe.startsWith(W))Oe=Oe.slice(W.length+1);else throw new Error(`The root path '${f.root}' does not reference a valid part of the file path '${Oe}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`);let Ne=X+(X.endsWith("/")?"":"/")+Oe;try{if(ae.isFile()){let Me=await wSe(j);Sl.isMainThread&&await h.setupFile?.(Me,Ne,j,t),t.isWorker&&await h.handleFile?.(Me,Ne,j,t)}else Sl.isMainThread&&await h.setupDirectory?.(Ne,j,t),t.isWorker&&await h.handleDirectory?.(Ne,j,t)}catch(Me){Me.message=`Could not load ${ae.isFile()?"file":"directory"} '${j}'${f.module?" using '"+f.module+"'":""} for application '${e}' due to: ${Me.message}`,UE?.(Me),((0,bd.getWorkerIndex)()===0?console:Ad.default).error(Me),t.set(f.path||"/",new ta(Me)),yd.set(n?E:(0,Nt.basename)(e),Me.message)}}}}catch(m){m.message=`Could not load component '${E}' for application '${(0,Nt.basename)(e)}' due to: ${m.message}`,UE?.(m),((0,bd.getWorkerIndex)()===0?console:Ad.default).error(m),t.set(f.path||"/",new ta(m),null,!0),yd.set(n?E:(0,Nt.basename)(e),m.message)}}if(gT=d,Sl.isMainThread&&!KY&&i&&(0,bd.watchDir)(e,async()=>YY()),c.extensionModule){let E=await IS((0,Nt.join)(e,c.extensionModule));return TT.set(o,E),E}if(!_&&t.isWorker){let E=`${e} did not load any modules, resources, or files, is this a valid component?`;UE?.(new Error(E)),((0,bd.getWorkerIndex)()===0?console:Ad.default).error(E),yd.set((0,Nt.basename)(e),E)}}catch(c){console.error(`Could not load application directory ${e}`,c),c.message=`Could not load application due to ${c.message}`,UE?.(c),t.set("",new ta(c))}}var It,Nt,Sl,GY,pw,Od,qY,bd,Ad,$Y,VY,ISe,AT,wSe,_w,Ew,KY,fw,yd,CSe,hw,FY,TT,UE,gT,DSe,Jf=Ie(()=>{It=require("fs"),Nt=require("path"),Sl=require("worker_threads"),GY=require("yaml"),pw=M(ne()),Od=M(L());gP();dV();hV();TV();gV();UV();f1();T1();qY=M(require("fast-glob")),bd=M(ot()),Ad=M(K());MN();qr();$Y=M(_e());Pe();xI();VY=M(ne()),ISe=M(TY());qm();IY();us();kY();AT=M(Ct());HS();Ry();({readFile:wSe}=It.promises),_w=(0,AT.resolvePath)(pw.get(Od.CONFIG_PARAMS.COMPONENTSROOT)),Ew=new Map,yd=new Map;a(YY,"loadComponentDirectories");CSe={REST:LS,rest:LS,graphql:DN,graphqlSchema:Lg,roles:LN,jsResource:vN,fastifyRoutes:tI,login:xN,static:rI,operationsApi:ISe,customFunctions:{},http:{},clustering:iw,replication:la,authentication:xf,mqtt:dw},hw={rest:!0,graphql:!0,graphqlSchema:{files:"*.graphql"},roles:{files:"roles.yaml"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(hw,"static",{value:{files:"web/**"}});FY=[],TT=new Map;a(PSe,"setErrorReporter");DSe=a(()=>gT,"getComponentName");a(RT,"loadComponent")});var oT=O((HUe,jY)=>{var{isMainThread:WY}=require("worker_threads"),{getTables:LSe,getDatabases:BUe,table:xUe}=(Pe(),oe(ut)),{loadComponentDirectories:MSe,loadComponent:USe}=(Jf(),oe(Qf)),{resetResources:vSe}=(cu(),oe(pB)),BSe=IO(),xSe=Ct(),{dirname:HSe}=require("path"),{getConnection:kSe}=kt(),FSe=ne(),{CONFIG_PARAMS:GSe}=L(),{loadCertificates:qSe}=Zs(),mw=new Map;async function $Se(e=!1){!WY&&FSe.get(GSe.CLUSTERING_ENABLED)&&kSe();try{WY&&await BSe()}catch(n){console.error(n)}let t=vSe();LSe(),t.isWorker=e,await qSe(),await USe(HSe(xSe.getConfigFilePath()),t,"hdb",!0,mw),await MSe(mw,t);let r=[];for(let[n]of mw)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}a($Se,"loadRootComponents");jY.exports.loadRootComponents=$Se});var ot=O((FUe,ci)=>{"use strict";var{Worker:VSe,MessageChannel:KSe,parentPort:Vi,isMainThread:Aw,threadId:YSe,workerData:Ki}=require("worker_threads"),{PACKAGE_ROOT:WSe}=L(),{join:XY,isAbsolute:jSe,extname:zSe}=require("path"),{server:ZY}=(qr(),oe(Ja)),{watch:QSe,readdir:JSe}=require("fs/promises"),{totalmem:zY}=require("os"),vE=L(),eW=ne(),Yi=K(),{randomBytes:XSe}=require("crypto"),{_assignPackageExport:ZSe}=fi(),eTe=L(),QY=1024*1024,xa=[],Ls=[],tTe=50,yw=1e4,rTe="restart",tW="request_thread_info",rW="resource_report",nW="thread_info",sW="added-port",nTe="ack",Sw;ZSe("threads",Ls);ci.exports={startWorker:Tw,restartWorkers:Ow,shutdownWorkers:cTe,workers:xa,setMonitorListener:pTe,onMessageFromWorkers:lTe,onMessageByType:dW,broadcast:dTe,broadcastWithAcknowledgement:fTe,setChildListenerByType:aTe,getWorkerIndex:iW,getWorkerCount:oW,getTicketKeys:cW,setMainIsWorker:iTe,setTerminateTimeout:sTe,restartNumber:Ki?.restartNumber||1};Ls.onMessageByType=dW;Ls.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=Ls.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};ci.exports.whenThreadsStarted=new Promise(e=>{ci.exports.threadsHaveStarted=e});var bw;function sTe(e){yw=e}a(sTe,"setTerminateTimeout");function iW(){return Ki?Ki.workerIndex:bw?0:void 0}a(iW,"getWorkerIndex");function oW(){return Ki?Ki.workerCount:bw?1:void 0}a(oW,"getWorkerCount");function iTe(e){bw=e,ci.exports.threadsHaveStarted()}a(iTe,"setMainIsWorker");var aW=1,yT;function cW(){return yT||(yT=Aw?XSe(48):Ki.ticketKeys,yT)}a(cW,"getTicketKeys");Object.defineProperty(ZY,"workerIndex",{get(){return iW()}});Object.defineProperty(ZY,"workerCount",{get(){return oW()}});var lW={[tW](e,t){ETe(t)},[rW](e,t){hTe(t,e)}};function Tw(e,t={}){let r=process.constrainedMemory?.()||zY();r=Math.min(r,zY(),2e4*QY);let n=eW.get(vE.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/QY/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],o=[];for(let l of Ls){let u=new KSe;u.existingPort=l,i.push(u),o.push(u.port2)}zSe(e)||(e+=".js");let c=new VSe(jSe(e)?e:XY(WSe,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:aW=t.threadCount,name:t.name,restartNumber:ci.exports.restartNumber,ticketKeys:cW()},transferList:o,...t});for(let{port1:l,existingPort:u}of i)u.postMessage({type:sW,port:l,threadId:c.threadId},[l]);return OT(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>Tw(e,t),c.on("error",l=>{Yi.error(`Worker index ${t.workerIndex} error:`,l)}),c.on("exit",l=>{xa.splice(xa.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<tTe?(t.unexpectedRestarts=c.unexpectedRestarts+1,Tw(e,t)):Yi.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",l=>{lW[l.type]?.(l,c)}),xa.push(c),STe(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(Tw,"startWorker");var oTe=[vE.THREAD_TYPES.HTTP];async function Ow(e=null,t=Math.max(aW>3,1),r=!0){if(Aw){if(r){let{loadRootComponents:o}=oT();await o()}ci.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;Yi.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:ci.exports.restartNumber,type:vE.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=oTe.indexOf(o.name)>-1,l=new Promise(u=>{let d=setTimeout(()=>{Yi.warn("Thread did not voluntarily terminate, terminating from the outside",o.threadId),o.terminate()},yw*2).unref();o.on("exit",()=>{clearTimeout(d),n.splice(n.indexOf(l)),!c&&r&&o.startCopy(),u()})});if(n.push(l),c&&r){let u=o.startCopy(),d=new Promise(_=>{let E=a(f=>{f.type===eTe.ITC_EVENT_TYPES.CHILD_STARTED&&(Yi.trace("Worker has started",u.threadId),_(),s.splice(s.indexOf(d)),u.off("message",E))},"startListener");Yi.trace("Waiting for worker to start",u.threadId),u.on("message",E)});s.push(d),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}=Vu();r&&(e==="http"||!e)&&eW.get(vE.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else Vi.postMessage({type:rTe,workerType:e})}a(Ow,"restartWorkers");function aTe(e,t){lW[e]=t}a(aTe,"setChildListenerByType");function cTe(e){return Ow(e,1/0,!1)}a(cTe,"shutdownWorkers");var uW=[];function lTe(e){uW.push(e)}a(lTe,"onMessageFromWorkers");var gw=new Map;function dW(e,t){let r=gw.get(e);r||gw.set(e,r=[]),r.push(t)}a(dW,"onMessageByType");var uTe=10;async function dTe(e,t){let r=0;for(let n of Ls)try{n.postMessage(e),r++>uTe&&(r=0,await new Promise(setImmediate))}catch(s){Yi.error("Unable to send message to worker",s)}t&&fW(e,null)}a(dTe,"broadcast");var bT=new Map,_Te=1;function fTe(e){return new Promise(t=>{let r=0;for(let n of Ls)try{let s=_Te++,i=a(()=>{bT.delete(s),--r===0&&t(),n!==Vi&&--n.refCount===0&&n.unref()},"ack_handler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,bT.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,o]of bT)o.port===n&&o()})),n.postMessage(e),r++}catch(s){Yi.error("Unable to send message to worker",s)}r===0&&t()})}a(fTe,"broadcastWithAcknowledgement");function ETe(e){e.postMessage({type:nW,workers:_W()})}a(ETe,"sendThreadInfo");function _W(){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(_W,"getChildWorkerInfo");function hTe(e,t){e.resources=t,e.resources.updated=Date.now()}a(hTe,"recordResourceReport");var Rw;function pTe(e){Rw=e}a(pTe,"setMonitorListener");var mTe=1e3,JY=!1;function STe(){JY||(JY=!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}Rw&&Rw()},mTe).unref())}a(STe,"startMonitoring");var TTe=1e3;if(Vi&&Ki?.addPorts){OT(Vi);for(let e=0,t=Ki.addPorts.length;e<t;e++){let r=Ki.addPorts[e];r.threadId=Ki.addThreadIds[e],OT(r)}setInterval(()=>{let e=process.memoryUsage();Vi.postMessage({type:rW,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},TTe).unref(),Sw=a(()=>new Promise((e,t)=>{Vi.on("message",r),Vi.postMessage({type:tW});function r(n){n.type===nW&&(Vi.off("message",r),e(n.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else Sw=_W;ci.exports.getThreadInfo=Sw;function OT(e,t){Ls.push(e),e.on("message",r=>{if(r.type===sW)r.port.threadId=r.threadId,OT(r.port);else if(r.type===nTe){let n=bT.get(r.id);n&&n()}else fW(r,e)}).on("close",()=>{Ls.splice(Ls.indexOf(e),1)}).on("exit",()=>{Ls.splice(Ls.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(OT,"addPort");function fW(e,t){for(let n of uW)n(e,t);let r=gw.get(e.type);if(r)for(let n of r)try{n(e,t)}catch(s){Yi.error(s)}}a(fW,"notifyMessageListeners");if(Aw){let e,t,r=new Set,n=a(async(s,i)=>{i&&(e=i);for(let o of await JSe(s,{withFileTypes:!0}))o.isDirectory()&&o.name!=="node_modules"&&n(XY(s,o.name));try{for await(let{filename:o}of QSe(s,{persistent:!1}))r.add(o),t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await Ow(),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");ci.exports.watchDir=n,process.env.WATCH_DIR&&n(process.env.WATCH_DIR)}else Vi.on("message",async e=>{let{type:t}=e;t===vE.ITC_EVENT_TYPES.SHUTDOWN&&(ci.exports.restartNumber=e.restartNumber,Vi.unref(),setTimeout(()=>{Yi.warn("Thread did not voluntarily terminate",YSe),process.exit(0)},yw).unref())})});var Av={};je(Av,{AUDIT_STORE_OPTIONS:()=>Df,Decoder:()=>Dc,HAS_CURRENT_RESIDENCY_ID:()=>ec,HAS_EXPIRATION_EXTENDED_TYPE:()=>o_,HAS_ORIGINATING_OPERATION:()=>i_,HAS_PREVIOUS_RESIDENCY_ID:()=>tc,REMOTE_SEQUENCE_UPDATE:()=>jp,createAuditEntry:()=>Ul,getLastRemoved:()=>eb,openAuditStore:()=>PT,readAuditEntry:()=>Ht,removeAuditEntry:()=>DT,setAuditRetention:()=>RTe,transactionKeyEncoder:()=>yW});function PT(e){let t=e.auditStore=e.openDB(Nw.AUDIT_STORE_NAME,{create:!1,...Df});t||(t=e.auditStore=e.openDB(Nw.AUDIT_STORE_NAME,Df),hW(t,1)),t.rootStore=e;let r=[];t.addDeleteRemovalCallback=function(i,o){return r[i]=o,t.deleteCallbacks=r,{remove(){delete r[i]}}};let n=null;function s(i=NT){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:d}of t.getRange({start:1,snapshot:!1,end:Date.now()-Iw}))if(c=DT(t,u,d),l=u,await new Promise(setImmediate),++o>=gTe){i=10;break}await c}finally{o===0?i=Math.min(i<<1,Iw/10):hW(t,l),s(i)}},i).unref()}if(a(s,"scheduleAuditCleanup"),t.scheduleAuditCleanup=s,(0,xE.getWorkerIndex)()===(0,xE.getWorkerCount)()-1&&s(NT),(0,xE.getWorkerIndex)()===0&&!EW)for(let i of t.getKeys({reverse:!0,limit:1}))i>Date.now()&&(EW=!0,CT.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 DT(e,t,r){if((ATe(r)&15)===ww){let n=Ht(r),s=n.tableId;e.deleteCallbacks?.[s]?.(n.recordId)}return e.remove(t)}function hW(e,t){Cw[0]=t,e.put(Symbol.for("last-removed"),bW)}function eb(e){let t=e.get(Symbol.for("last-removed"));if(t)return bW.set(t),Cw[0]}function RTe(e,t=NT){Iw=e,NT=t}function Ul(e,t,r,n,s,i,o,c,l,u,d,_,E){let f=OW[o];if(!f)throw new Error(`Invalid audit entry type ${o}`);let h=1;if(n&&(n>1?Ha.setFloat64(0,n):Ms.set(zg),h=9),l){if(l&16761087)throw new Error("Illegal extended type");h++}g(s),g(t),m(r),Ha.setFloat64(h,e),h+=8,l&ec&&g(u),l&tc&&g(d),l&o_&&(Ha.setFloat64(h,_),h+=8),l&i_&&g(NW[E]),i?m(i):Ms[h++]=0,l?Ha.setUint16(n?8:0,f|l|32768):Ms[n?8:0]=f;let T=Ms.subarray(0,h);if(c)return Buffer.concat([T,c]);return T;function m(S){let y=h;h+=1,h=(0,Tl.writeKey)(S,Ms,h);let I=h-y-1;I>127?I>16383?(CT.error("Key or username was too large for audit entry",S),h=y+1,Ms[y]=0):(Ms.copyWithin(y+2,y+1,h),Ha.setUint16(y,I|32768),h++):Ms[y]=I}function g(S){S<128?Ms[h++]=S:S<16384?(Ha.setUint16(h,S|32768),h+=2):S<1056964608?(Ha.setUint32(h,S|3221225472),h+=4):(Ms[h]=255,Ha.setUint32(h+1,S),h+=5)}}function ATe(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 Dc(e.buffer,e.byteOffset,e.byteLength));return n.position=t,n.readInt()}function Ht(e,t=0,r=void 0){try{let n=e.dataView||(e.dataView=new Dc(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,d=n.position+=l,_=n.readFloat64(),E,f,h,T;if(i&ec&&(E=n.readInt()),i&tc&&(f=n.readInt()),i&o_&&(h=n.readFloat64()),i&i_){let S=n.readInt();T=NW[S]}l=n.readInt();let m=n.position,g=n.position+=l;return{type:OW[i&7],tableId:c,nodeId:o,get recordId(){return(0,Tl.readKey)(e,u,d)},getBinaryRecordId(){return e.subarray(u,d)},version:_,previousLocalTime:s,get user(){return g>m?(0,Tl.readKey)(e,m,g):void 0},get encoded(){return t?e.subarray(t,r):e},getValue(S,y,I){if(i&IT||i&BE&&!y)return S.decoder.decode(e.subarray(n.position,r));if(i&BE&&I)return Pw(S.getEntry(this.recordId),I,S)},getBinaryValue(){return i&(IT|BE)?e.subarray(n.position,r):void 0},extendedType:i,residencyId:E,previousResidencyId:f,expiresAt:h,originatingOperation:T}}catch(n){return CT.error("Reading audit entry error",n,e),{}}}var Tl,wT,Nw,RW,xE,AW,CT,Ms,Ha,yW,Df,Iw,gTe,Cw,bW,NT,EW,IT,BE,pW,ww,mW,SW,TW,gW,jp,ec,tc,i_,o_,OW,NW,Dc,Qi=Ie(()=>{Tl=require("ordered-binary"),wT=M(ne()),Nw=M(xt()),RW=M(L()),xE=M(ot()),AW=M(te());vl();CT=M(K());LT();(0,wT.initSync)();Ms=Buffer.alloc(2816),Ha=new DataView(Ms.buffer,Ms.byteOffset,2816),yW={writeKey(e,t,r){return e===s_?(t.set(s_,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,Tl.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,Tl.readKey)(e,t,r)}},Df={encoding:"binary",keyEncoder:yW},Iw=(0,AW.convertToMS)((0,wT.get)(RW.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,gTe=1e3,Cw=new Float64Array(1),bW=new Uint8Array(Cw.buffer),NT=1e4,EW=!1;a(PT,"openAuditStore");a(DT,"removeAuditEntry");a(hW,"updateLastRemoved");a(eb,"getLastRemoved");a(RTe,"setAuditRetention");IT=16,BE=32,pW=1,ww=2,mW=3,SW=4,TW=5,gW=6,jp=11,ec=512,tc=1024,i_=2048,o_=4096,OW={put:pW|IT,[pW]:"put",delete:ww,[ww]:"delete",message:mW|IT,[mW]:"message",invalidate:SW|BE,[SW]:"invalidate",patch:TW|BE,[TW]:"patch",relocate:gW,[gW]:"relocate"},NW={insert:1,update:2,upsert:3,1:"insert",2:"update",3:"upsert"};a(Ul,"createAuditEntry");a(ATe,"readAction");a(Ht,"readAuditEntry");Dc=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}}}});var Dw={};je(Dw,{add:()=>MT,applyReverse:()=>IW,getRecordAtTime:()=>Pw,rebuildUpdateBefore:()=>UT});function MT(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 UT(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,MT(n,s,i)}else r&&(n||(n={}),n[s]=i)}else n||(n={}),n[s]=e[s];return n}function IW(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=yTe[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=wW}}function Pw(e,t,r){let n=r.rootStore.auditStore,s={...e.value},i=e.localTime;for(;i>t;){let l=n.get(i),u=Ht(l);switch(u.type){case"put":s=u.getValue(r);break;case"patch":IW(s,u.getValue(r));break;case"delete":s=null}i=u.previousLocalTime}let o={},c=0;for(let l in s)s[l]===wW&&(o[l]=!0,c++);for(;c>0&&i>0;){let l=n.get(i),u=Ht(l),d;switch(u.type){case"put":d=u.getValue(r);break;case"patch":d=u.getValue(r);break}for(let _ in d)o[_]&&(s[_]=d[_],o[_]=!1,c--);i=u.previousLocalTime}if(c>0)for(let l in o)s[l]=null;return s}var yTe,wW,LT=Ie(()=>{Qi();a(MT,"add");MT.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)};yTe={add:MT};a(UT,"rebuildUpdateBefore");a(IW,"applyReverse");wW={};a(Pw,"getRecordAtTime")});function Zn(e){return e[fr]||(e[fr]=Object.create(null))}function kT(e,t){let r=e.prototype,n={},s=t.attributes||t.properties||[];for(let o of s){let c=o.name,l,u;if(o.resolve)u={get(){return o.resolve(this,this[Fe])},set(d){return o.set(this,d)},configurable:!0};else{switch(o.type){case"String":l=a(function(d){if(!(typeof d=="string"||d==null&&o.nullable!==!1))throw new Us.ClientError(`${c} must be a string, attempt to assign ${d}`);Zn(this)[c]=d},"set");break;case"ID":l=a(function(d){if(!(typeof d=="string"||d?.length>0&&d.every?.(_=>typeof _=="string")||d==null&&o.nullable!==!1))throw new Us.ClientError(`${c} must be a string, attempt to assign ${d}`);Zn(this)[c]=d},"set");break;case"Float":case"Number":l=a(function(d){let _=d?.__op__?d.value:d;if(!(typeof _=="number"||d==null&&o.nullable!==!1))throw new Us.ClientError(`${c} must be a number, attempt to assign ${_}`);Zn(this)[c]=d},"set");break;case"Int":l=a(function(d){let _=d?.__op__?d.value:d;if(!(_>>0===_||d==null&&o.nullable!==!1))if(typeof _=="number"&&Math.abs((_>>0)-_)<=1)_=Math.round(_),d?.__op__?d.value=_:d=_;else throw new Us.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${d}`);Zn(this)[c]=d},"set");break;case"Long":l=a(function(d){let _=d?.__op__?d.value:d;if(!(Math.round(_)===d&&Math.abs(_)<=9007199254740992||d==null&&o.nullable!==!1))if(typeof _=="number"&&Math.abs(_)<=9007199254740992)_=Math.round(_),d?.__op__?d.value=_:d=_;else throw new Us.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${d}`);Zn(this)[c]=d},"set");break;case"BigInt":l=a(function(d){let _=d?.__op__?d.value:d;if(!(typeof _=="bigint"||d==null&&o.nullable!==!1))if(typeof _=="string"||typeof _=="number")_=BigInt(_),d?.__op__?d.value=_:d=_;else throw new Us.ClientError(`${c} must be a number, attempt to assign ${d}`);Zn(this)[c]=d},"set");break;case"Boolean":l=a(function(d){if(!(typeof d=="boolean"||d==null&&o.nullable!==!1))throw new Us.ClientError(`${c} must be a boolean, attempt to assign ${d}`);Zn(this)[c]=d},"set");break;case"Date":l=a(function(d){if(!(d instanceof Date||d==null&&o.nullable!==!1))if(typeof d=="string"||typeof d=="number")d=new Date(d);else throw new Us.ClientError(`${c} must be a Date, attempt to assign ${d}`);Zn(this)[c]=d},"set");break;case"Bytes":l=a(function(d){if(!(d instanceof Uint8Array||d==null&&o.nullable!==!1))throw new Us.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${d}`);Zn(this)[c]=d},"set");break;case"Any":case void 0:l=a(function(d){Zn(this)[c]=d},"set");break;default:l=a(function(d){if(!(typeof d=="object"||d==null&&o.nullable!==!1))throw new Us.ClientError(`${c} must be an object, attempt to assign ${d}`);Zn(this)[c]=d},"set")}u={get(){let d=this[fr];if(d&&c in d){let E=d[c];if(E?.__op__){let f=this[ve]?.[c];return E.update(f)}return E}let _=this[ve]?.[c];if(_&&typeof _=="object"){let E=PW(_,o);if(E)return d||(d=this[fr]=Object.create(null)),d[c]=E}return _},set:l,enumerable:!0,configurable:!0}}u.get.isAttribute=!0,n[c]=u,(!(c in r)||Object.getOwnPropertyDescriptor(r,c)?.get?.isAttribute)&&Object.defineProperty(r,c,u)}i("getProperty",function(o){let c=n[o];if(c)return c.get.call(this);let l=this[fr];return l?.[o]!==void 0?l[o]:this[ve]?.[o]}),i("set",function(o,c){let l=n[o];if(l)return l.set.call(this,c);if(t.sealed)throw new Us.ClientError("Can not add a property to a sealed table schema");Zn(this)[o]=c}),i("deleteProperty",function(o){Zn(this)[o]=void 0}),i("toJSON",function(){let o=this[fr],c;for(let u in o){c||(c={...this[ve]});let d=o[u];if(d?.__op__){let _=c[u];d=d.update(_)}c[u]=d}return Object.keys(this).length>0&&(c||(c={...this[ve]}),Object.assign(c,this)),c||this[ve]}),r.get||i("get",r.getProperty),r.delete||i("delete",r.deleteProperty);function i(o,c){Object.defineProperty(r,o,{value:c,configurable:!0})}a(i,"setMethod")}function PW(e,t){let r;switch(e.constructor){case Object:return t?((r=t.TrackedObject)||(t.TrackedObject=r=class{static{a(this,"TrackedObject")}constructor(s){if(s?.[ve])throw new Error("Can not track an already tracked object, check for circular references");this[ve]=s}},kT(r,t)),new r(e)):new vT(e);case Array:let n=new xT(e.length);n[ve]=e;for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=PW(o,t?.elements)),n[s]=o}return n;default:return e}}function hp(e){let t=e[fr],r;for(let s in t){r||(r={...e[ve]});let i=t[s];if(i&&typeof i=="object")if(i.__op__){let o=r[s];i=i.update(o)}else i=hp(i);r[s]=i}return Object.keys(e).length>0&&(r||(r={...e[ve]}),Object.assign(r,e)),r||e[ve]}function Rl(e,t=e[fr]){let r;if(CW.call(e,ve)&&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=Rl(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[ve]});let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=Dw[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=Rl(s);r[n]=s}return r?Object.freeze(r):CW.call(e,ve)?e[ve]:e}function BT(e){let t=e[ve];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[gl]||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?.[ve]===s){if(BT(i))return!0}else return!0}}else{let r=e[fr];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[ve]===i){if(BT(s))return!0}else return!0}else return!0}}return!1}var Us,fr,vT,CW,gl,xT,HT,pp=Ie(()=>{Ks();Us=M(_e());LT();fr=Symbol("own-data");a(Zn,"getChanges");a(kT,"assignTrackedAccessors");a(PW,"trackObject");vT=class{static{a(this,"GenericTrackedObject")}constructor(t){if(t?.[ve])throw new Error("Can not track an already tracked object, check for circular references");this[ve]=t}};kT(vT,{});a(hp,"collapseData");CW=Object.prototype.hasOwnProperty;a(Rl,"updateAndFreeze");a(BT,"hasChanges");gl=Symbol.for("has-array-changes"),xT=class extends Array{static{a(this,"TrackedArray")}[gl];constructor(t){super(t)}splice(...t){return this[gl]=!0,super.splice(...t)}push(...t){return this[gl]=!0,super.push(...t)}pop(){return this[gl]=!0,super.pop()}unshift(...t){return this[gl]=!0,super.unshift(...t)}shift(){return this[gl]=!0,super.shift()}};xT.prototype.constructor=Array;HT=class{constructor(t){this.value=t}static{a(this,"Addition")}__op__="add";update(t){return(+t||0)+this.value}}});var gA={};je(gA,{CONTEXT:()=>Fe,ID_PROPERTY:()=>ze,IS_COLLECTION:()=>li,MultiPartId:()=>GT,RECORD_PROPERTY:()=>ve,Resource:()=>Lr,snake_case:()=>OTe,transformForSelect:()=>qT});function OTe(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function DW(e,t){if(Al=!1,e==="")return null;if(e=e.slice(1),t.splitSegments){if(e.indexOf("/")===-1)return e===""?(Al=!0,null):t.coerceId(decodeURIComponent(e));let r=e.split("/"),n=new GT;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){Al=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}else{if(e==="")return Al=!0,null;e[e.length-1]==="/"&&(Al=!0)}return t.coerceId(decodeURIComponent(e))}function es(e,t){n.reliesOnPrototype=!0;let r=t.hasContent;return n;function n(s,i,o){let c,l,u,d;if(r?(o?(d=i,o=o[Fe]||o):i?typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(d=s,c=d[this.primaryKey]??null,o=i[Fe]||i):d=i:(d=s,s=void 0,c=d[ze]??d[this.primaryKey]),c===null&&(u=!0)):i?o=i[Fe]||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 f=c.indexOf("?");if(f>-1){let T=this.parseQuery(c.slice(f+1));l?T&&(l=Object.assign(T,l)):l=T,c=c.slice(0,f)}let h=this.parsePath(c,o,l);h?.id!==void 0?(h.query&&(l?l=Object.assign(h.query,l):l=h.query),u=h.isCollection,c=h.id):c=h}else if(s[Symbol.iterator]){c=[],u=!0;for(let f of s){if(typeof f=="object"&&f)break;c.push(f)}c.length===0?c=null:(c.length===1&&(c=c[0]),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 ol(c),c==null&&(u=!0);o||(o={});let _;if(l?.ensureLoaded!=null||l?.async||u?(_={...t},l?.ensureLoaded!=null&&(_.ensureLoaded=l.ensureLoaded),l?.async&&(_.async=l.async),u&&(_.isCollection=!0)):_=t,o.transaction){let f=this.getResource(c,o,_);return f.then?f.then(E):E(f)}else return Pt(o,()=>{let f=this.getResource(c,o,_);return f.then?f.then(E):E(f)},_);function E(f){if(o.authorize){o.authorize=!1;let h=t.type==="read"?f.allowRead(o.user,l,o):t.type==="update"?f.doesExist?.()===!1?f.allowCreate(o.user,d,o):f.allowUpdate(o.user,d,o):t.type==="create"?f.allowCreate(o.user,d,o):f.allowDelete(o.user,l,o);if(h?.then)return h.then(T=>{if(!T)throw new FT(o.user);return typeof d?.then=="function"?d.then(m=>e(f,l,o,m)):e(f,l,o,d)});if(!h)throw new FT(o.user)}return typeof d?.then=="function"?d.then(h=>e(f,l,o,h)):e(f,l,o,d)}a(E,"authorizeActionOnResource")}}function ts(e,t){let r=new UW.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 Lw(e,t,r){let n=e[ve];if(n){let s=e[fr];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 qT(e,t){let r=t?.propertyResolvers,n=t[Fe],s;if(typeof e=="string")return a(function o(c){return c.then?c.then(o):Array.isArray(c)?c.map(o):Lw(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=[],d=i(Lw(l,r,n));for(let _ of e)u.push(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(E=>E&&typeof E=="object"?c(E):E);let u={},d=i(Lw(l,r,n)),_;for(let E of e){let f=d(E);f===void 0&&o&&(f=null),f?.then?(_||(_=[]),_.push(f.then(h=>u[E.name||E]=h))):u[E.name||E]=f}return _?Promise.all(_).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 d=r[c.name]?.definition?.tableClass;l=s[c.name]=qT(c.select||c,d)}let u=o(c.name);return l(u)}else return o(c);else return c}}a(i,"handleProperty")}var LW,MW,UW,Fe,ze,li,ve,bTe,Lr,FT,Al,GT,Ks=Ie(()=>{LW=require("crypto");Ll();MW=M(fi()),UW=M(_e());pp();Sc();_E();Fe=Symbol.for("context"),ze=Symbol.for("primary-key"),li=Symbol("is-collection"),ve=Symbol("stored-record"),bTe={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Lr=class{static{a(this,"Resource")}static transactions;constructor(t,r){this[ze]=t;let n=r?.[Fe];this[Fe]=n!==void 0?n:r||null}static get=es(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=qT(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=es(function(t,r,n,s){if(Array.isArray(s)&&t[li]){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(d=>d.put(c,n))):i.push(u.put(c,n))}return Promise.all(i)}return t.put?t.put(s,r):ts(t,"put")},{hasContent:!0,type:"update"});static patch=es(function(t,r,n,s){return t.patch?t.patch(s,r):ts(t,"patch")},{hasContent:!0,type:"update"});static delete=es(function(t,r,n,s){return t.delete?t.delete(r):ts(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,LW.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={}),Pt(n,()=>{let i=new this(s,n),o=i.update?i.update(r,!0):ts(i,"update");return n.newLocation=s,n.createdResource=!0,o?.then?o.then(()=>i):i})}static invalidate=es(function(t,r,n,s){return t.invalidate?t.invalidate(r):ts(t,"delete")},{hasContent:!1,type:"update"});static post=es(function(t,r,n,s){return t[ze]!=null&&t.update?.(),t.post(s,r)},{hasContent:!0,type:"create"});static connect=es(function(t,r,n,s){return t.connect?t.connect(s,r):ts(t,"connect")},{hasContent:!0,type:"read"});static subscribe=es(function(t,r,n,s){return t.subscribe?t.subscribe(r):ts(t,"subscribe")},{type:"read"});static publish=es(function(t,r,n,s){return t[ze]!=null&&t.update?.(),t.publish?t.publish(s,r):ts(t,"publish")},{hasContent:!0,type:"create"});static search=es(function(t,r,n,s){let i=t.search?t.search(r):ts(t,"search"),o=n.select;if(o&&n.hasOwnProperty("select")&&i!=null&&!i.selectApplied){let c=qT(o,t.constructor);return i.map(c)}return i},{type:"read"});static query=es(function(t,r,n,s){return t.search?t.search(s,r):ts(t,"search")},{hasContent:!0,type:"read"});static copy=es(function(t,r,n,s){return t.copy?t.copy(s,r):ts(t,"copy")},{hasContent:!0,type:"create"});static move=es(function(t,r,n,s){return t.move?t.move(s,r):ts(t,"move")},{hasContent:!0,type:"delete"});async post(t){if(this[li])return(await this.constructor.create(this[ze],t,this[Fe]))[ze];ts(this,"post")}static isCollection(t){return t?.[li]}static coerceId(t){return t}static parseQuery(t){return PS(t)}static parsePath(t,r,n){let s=t.indexOf(".");if(s>-1){let o=t.slice(s+1);t=t.slice(0,s);let c=r?.headers&&bTe[o];if(c)r.requestedContentType=c;else if(n)n.property=o;else return{query:{property:o},id:DW(t,this),isCollection:Al}}let i=DW(t,this);return Al?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r[Fe],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(d=>d.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[ze]===t&&u.constructor===c),s)return s;if(l.push(s=new c(t,i)),l.length>10){let u=new Map;for(let d of l){let _=d[ze],E=u.get(_);E?E.push(d):u.set(_,[d])}i.resourceCache.length=0,i.resourceCache.asMap=u}}}else s=new c(t,i);return o&&(s[li]=!0),s}subscribe(t){return new Dn}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new Dn}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[ze]}getContext(){return this[Fe]}};Lr.prototype[Fe]=null;(0,MW._assignPackageExport)("Resource",Lr);a(OTe,"snake_case");FT=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(DW,"pathToId");GT=class extends Array{static{a(this,"MultiPartId")}toString(){return this.join("/")}};a(es,"transactional");a(ts,"missingMethod");a(Lw,"selectFromObject");a(qT,"transformForSelect")});var zO={};je(zO,{EVICTED:()=>Na,INVALIDATED:()=>Is,coerceType:()=>VT,makeTable:()=>WT,setServerUtilities:()=>UTe,updateResource:()=>KT});function WT(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:o,databaseName:c,auditStore:l,schemaDefined:u,dbisDB:d,sealed:_,splitSegments:E,replicate:f}=e,{expirationMS:h,evictionMS:T,audit:m,trackDeletes:g}=e,{attributes:S}=e;S||(S=[]);let y=Xg(i,n,l),I,U,x={},X=Promise.resolve(),W,V,se;for(let v of S)(v.assignCreatedTime||v.name==="__createdtime__")&&(W=v),(v.assignUpdatedTime||v.name==="__updatedtime__")&&(V=v),v.expiresAt&&(se=v),v.isPrimaryKey&&(x=v);let Q,de=[],j=[],ae=1,Oe=2,Ne={},Me={},Gr=864e5,Md,qa,wn,Ud=!1,wl,Xw=new Map,eh=new Map,vt,$a,Va=Id.get(vs.CONFIG_PARAMS.REPLICATION_DATABASES);if(Array.isArray(Va)){for(let v of Va)if(v.name===c&&v.replicateTo>=0){$a=v.replicateTo;break}}let Bs=i.getRange({start:!1,end:!1}).constructor,xs=10,th=6;m&&ie();class Ve extends Lr{static name=s;static primaryStore=i;static auditStore=l;static primaryKey=t;static tableName=s;static tableId=n;static indices=r;static audit=m;static databasePath=o;static databaseName=c;static attributes=S;static replicate=f;static sealed=_;static splitSegments=E??!0;static createdTimeProperty=W;static updatedTimeProperty=V;static propertyResolvers;static userResolvers={};static sources=[];static get expirationMS(){return h}static dbisDB=d;static schemaDefined=u;static sourcedFrom(p,R){if(R&&(this.sourceOptions=R,(R.expiration||R.eviction||R.scanInterval)&&this.setTTLExpiration(R)),R?.intermediateSource)p.intermediateSource=!0,this.sources.unshift(p);else{if(this.sources.some(N=>!N.intermediateSource)){if(this.sources.some(N=>N.name===p.name))return;throw new Error("Can not have multiple canonical (non-intermediate) sources")}this.sources.push(p)}U=U||p.get&&(!p.get.reliesOnPrototype||p.prototype.get),I=I||p.load;let w=a(N=>{let B=this.sources;if(B=B.filter(k=>k.intermediateSource&&k[N]&&(!k[N].reliesOnPrototype||k.prototype[N])),B.length>0)if(B.length===1){let k=B[0];return(C,F,H)=>{if(C?.source!==k)return k[N](F,H,C)}}else return(k,C,F)=>{let H=[];for(let q of B){if(k?.source===q)break;H.push(q[N](C,F,k))}return Promise.all(H)}},"getApplyToIntermediateSource"),A=this.sources[this.sources.length-1];A.intermediateSource&&(A={});let b=a(N=>{if(A[N]&&(!A[N].reliesOnPrototype||A.prototype[N]))return(B,k,C)=>{if(!B?.source)return A[N](k,C,B)}},"getApplyToCanonicalSource");Ne={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 P=A.shouldRevalidateEvents;return(async()=>{let N=!1,B,k=a(async(C,F)=>{let H=C.value,q=C.table?We[c][C.table]:Ve;if(c===vs.SYSTEM_SCHEMA_NAME&&(C.table===vs.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||C.table===vs.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(N=!0),C.id===void 0&&(C.id=H[q.primaryKey],C.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(C));C.source=p;let ee={residencyId:tt(C.residencyList),isNotification:!0,ensureLoaded:!1,nodeId:C.nodeId},G=await q.getResource(C.id,F,ee);switch(C.type){case"put":return P?G._writeInvalidate(ee):G._writeUpdate(H,!0,ee);case"patch":return P?G._writeInvalidate(ee):G._writeUpdate(H,!1,ee);case"delete":return G._writeDelete(ee);case"publish":return G._writePublish(H,ee);case"invalidate":return G._writeInvalidate(ee);case"relocate":return G._writeRelocate(ee);default:qe.default.error?.("Unknown operation",C.type,C.id)}},"writeUpdate");try{let C=p.subscribe;C&&g==null&&(g=!0);let F={crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0},H=p.subscribeOnThisThread?p.subscribeOnThisThread((0,yl.getWorkerIndex)(),F):(0,yl.getWorkerIndex)()===0,q=C&&H&&await p.subscribe?.(F);if(q){let ee;for await(let G of q)try{if(!(G.type==="transaction"?G.writes[0]:G)){qe.default.error?.("Bad subscription event",G);continue}if(G.source=p,G.type==="end_txn"){if(ee?.resolve(),G.localTime&&B!==G.localTime){if(G.remoteNodeIds?.length>0){let Re=[Symbol.for("seq"),G.remoteNodeIds[0]],re=d.get(Re),Y=re?.nodes;Y||(Y=[]);for(let Be of G.remoteNodeIds.slice(1)){let we=Y.find(ce=>ce.id===Be);Y=Y.filter(ce=>ce.id!==Be||ce===we),we||(we={id:Be,seqId:0},Y.push(we)),we.seqId=Math.max(re?.seqId??1,G.localTime),Be===ee?.nodeId&&(we.lastTxnTime=G.timestamp)}let ge=Math.max(re?.seqId??1,G.localTime);qe.default.trace?.("Received txn",c,ge,G.localTime,G.remoteNodeIds),d.put(Re,{seqId:ge,nodes:Y})}B=G.localTime}G.onCommit&&ee?.committed.then(G.onCommit);continue}if(ee)if(G.beginTxn)ee.resolve();else{ee.write_promises.push(k(G,ee));continue}!G.timestamp&&G.version&&(G.timestamp=G.version);let Ee=Pt(G,()=>{if(G.type==="transaction"){let Re=[];for(let re of G.writes)try{Re.push(k(re,G))}catch(Y){throw Y.message+=" writing "+JSON.stringify(re)+" of event "+JSON.stringify(G),Y}return Promise.all(Re)}else if(G.type==="define_schema"){let Re=this.attributes.slice(0),re;for(let Y of G.attributes)Re.find(ge=>ge.name===Y.name)||(Re.push(Y),re=!0);re&&(pt({table:s,database:c,attributes:Re,origin:"cluster"}),GE.signalSchemaChange(new qE.SchemaEventMsg(process.pid,vs.OPERATIONS_ENUM.CREATE_TABLE,c,s)))}else return G.beginTxn?(ee=G,ee.write_promises=[k(G,G)],new Promise(Re=>{ee.resolve=()=>Re(Promise.all(ee.write_promises))})):k(G,G)});ee&&(ee.committed=Ee),N&&Ee&&!Ee?.waitingForUserChange&&(Ee.then(()=>GE.signalUserChange(new qE.UserEventMsg(process.pid))),Ee.waitingForUserChange=!0),G.onCommit&&(Ee?Ee.then(G.onCommit):G.onCommit())}catch(Ae){qe.default.error?.("error in subscription handler",Ae)}}}catch(C){qe.default.error?.(C)}})(),this}static get isCaching(){return U}static get shouldRevalidateEvents(){return this.prototype.get!==Ve.prototype.get}static getResource(p,R,w){let A=super.getResource(p,R,w);if(p!=null){ji(p);try{if(A.hasOwnProperty(ve))return A;if(typeof p=="object"&&p&&!Array.isArray(p))throw new Error(`Invalid id ${JSON.stringify(p)}`);let b=!w?.async||i.cache?.get?.(p),P=Ir(R),N=P.getReadTxn();if(N?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return Ya(p,R,{transaction:N,ensureLoaded:w?.ensureLoaded},b,B=>{if(B?KT(A,B):A[ve]=null,R.onlyIfCached&&R.noCacheStore){if(!A.doesExist())throw new Nr.ServerError("Entry is not cached",504)}else if(w?.ensureLoaded){let k=vd(p,B,R,A);if(k)return P?.disregardReadTxn(),A[Mw]=!0,vw(k,C=>(KT(A,C),A))}return A})}catch(b){throw b.message.includes("Unable to serialize object")&&(b.message+=": "+JSON.stringify(p)),b}}return A}ensureLoaded(){let p=vd(this[ze],this[Fr],this[Fe]);if(p)return this[Mw]=!0,vw(p,R=>{this[Fr]=R,this[ve]=R.value,this[kE]=R.version})}static getNewId(){let p=x?.type;if(p==="String"||p==="ID")return super.getNewId();if(!vt){let b=i.getEntry(Symbol.for("id_allocation")),P=b?.value,N;if(P&&P.nodeName===server.hostname&&(!BTe(i)||P.pid===process.pid)){let B=P.start,k=P.end;N=B;for(let C of i.getKeys({start:k,end:B,limit:1,reverse:!0}))N=C}else P=A(b?.version??null),N=P.start;vt=new BigInt64Array([BigInt(N)+1n]),vt=new BigInt64Array(i.getUserSharedBuffer("id",vt.buffer)),vt.maxSafeId=P.end}let R=Number(Atomics.add(vt,0,1n)),w=p==="Int"?512:1048576;if(R+w>=vt.maxSafeId){let b=a(P=>{vt.maxSafeId=R+(p==="Int"?1023:4194303);let N=(p==="Int"?Math.pow(2,31):Math.pow(2,49))-1,B=P?void 0:i.useReadTransaction(),k=Number(vt[0]);for(let H of i.getKeys({start:k+1,end:N,limit:1,transaction:B}))N=H;B?.done();let{value:C,version:F}=i.getEntry(Symbol.for("id_allocation"));if(vt.maxSafeId<N){if(C.end>vt.maxSafeId-100)return;qe.default.info?.("New id allocation",R,vt.maxSafeId,F),i.put(Symbol.for("id_allocation"),{start:C.start,end:vt.maxSafeId,nodeName:server.hostname,pid:process.pid},Date.now(),F)}else{qe.default.warn?.(`Id conflict detected, starting new id allocation range, attempting to allocate to ${vt.maxSafeId}, but id of ${N} detected`);let H=A(F);H.alreadyUpdated||Atomics.store(vt,0,BigInt(H.start+1)),vt.maxSafeId=H.end}},"updateEnd");R+w===vt.maxSafeId?setImmediate(b):R+100>=vt.maxSafeId&&(qe.default.warn?.(`Synchronous id allocation required on table ${s}${p=="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`),i.transactionSync(()=>b(!0)))}return R;function A(b){let P=(p==="Int"?Math.pow(2,31):Math.pow(2,49))-1,N=P/4,B,k,C=!1,F,H;do{F=Math.floor(Math.random()*P),H={start:F,end:F+(p==="Int"?1024:4194304),nodeName:server.hostname,pid:process.pid},B=0;for(let q of i.getKeys({start:F,limit:1,reverse:!0}))B=q;k=P;for(let q of i.getKeys({start:F+1,end:P,limit:1}))k=q;N*=.875,N<1e3&&!C&&(C=!0,qe.default.error?.(`Id allocation in table ${s} is very dense, limited safe range of numbers to allocate ids in${p==="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`,F,B,k,N))}while(!(N<k-F&&(N<F-B||B===0)));return i.transactionSync(()=>{let q=i.getEntry(Symbol.for("id_allocation"));return(q?.version??null)==b?(qe.default.info?.("Allocated new id range",H),i.put(Symbol.for("id_allocation"),H,Date.now()),H):(qe.default.debug?.("Looks like ids were already allocated"),{alreadyUpdated:!0,...q.value})})}}static setTTLExpiration(p){if(typeof p=="number")h=p*1e3,T||(T=0);else if(p&&typeof p=="object")h=p.expiration*1e3,T=(p.eviction||0)*1e3,Gr=p.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(h<0)throw new Error("Expiration can not be negative");Gr=Gr||(h+T)/4,Ho()}static getResidencyRecord(p){return d.get([Symbol.for("residency_by_id"),p])}static setResidency(p){Ve.getResidency=p}static setResidencyById(p){Ve.getResidencyById=p}static getResidency(p,R,w){if(Ve.getResidencyById)return Ve.getResidencyById(p[t]);let A=$a;if(R.replicateTo!=null){if(Array.isArray(R.replicateTo))return R.replicateTo.includes(server.hostname)?R.replicateTo:[server.hostname,...R.replicateTo];R.replicateTo>=0&&(A=R.replicateTo)}if(A>=0&&server.nodes){let b=[server.hostname];if(w)b.push(...w.slice(0,A));else{let P=server.nodes.map(k=>k.name),N=Math.floor(P.length*Math.random());b.push(...P.slice(N,N+A));let B=N+A-P.length;B>0&&b.push(...P.slice(0,B))}return b}}static enableAuditing(p=!0){m=p,p&&ie(),Ve.audit=p}static coerceId(p){return p===""?null:VT(p,x)}static async dropTable(){if(delete We[c][s],c===o){for(let p of S)d.remove(Ve.tableName+"/"+p.name),r[p.name]?.drop();d.remove(Ve.tableName+"/"),i.drop(),await d.committed}else console.log("legacy dropTable"),await i.close(),await fs.remove(data_path),await fs.remove(data_path===standard_path?data_path+MDB_LOCK_FILE_SUFFIX:path.join(path.dirname(data_path),MDB_LEGACY_LOCK_FILE_NAME));GE.signalSchemaChange(new qE.SchemaEventMsg(process.pid,vs.OPERATIONS_ENUM.DROP_TABLE,c,s))}get(p){if(typeof p=="string")return this.getProperty(p);if(this[li])return this.search(p);if(this[ze]===null){if(p?.conditions)return this.search(p);let R=Ve.getRecordCount();return{recordCount:R.recordCount,estimatedRecordRange:R.estimatedRange,records:"./",name:s,database:c,auditSize:l?.getStats().entryCount,attributes:S}}if(p?.property)return this.getProperty(p.property);if(this.doesExist()||p?.ensureLoaded===!1||this[Fe]?.returnNonexistent)return this}allowRead(p,R){let w=Wa(p);if(w?.read){if(w.isSuperUser)return!0;let A=w.attribute_permissions,b=R?.select;if(A?.length>0||Ud&&b){if(R||(R={}),b){let P=A?.length>0&&Uw(A,"read");R.select=b.map(N=>{let B=N.name||N;if(!P||P[B]){let k=wn[B]?.definition?.tableClass;if(k){if(N.name||(N={name:N}),!k.prototype.allowRead.call(null,p,N))return!1;if(!N.select)return N.name}return N}}).filter(Boolean)}else R.select=A.filter(P=>P.read&&!wn[P.attribute_name]).map(P=>P.attribute_name);return R}else return!0}}allowUpdate(p,R){let w=Wa(p);if(w?.update){let A=w.attribute_permissions;if(A?.length>0){let b=Uw(A,"update");for(let P in R)if(!b[P])return!1;for(let P of A){let N=P.attribute_name;!P.update&&!(N in R)&&(R[N]=this.getProperty(N))}}return ja(this[Fe])}}allowCreate(p,R){if(this[li]){let w=Wa(p);if(w?.insert){let A=w.attribute_permissions;if(A?.length>0){let b=Uw(A,"insert");for(let P in R)if(!b[P])return!1;return ja(this[Fe])}else return ja(this[Fe])}}else return this.allowUpdate(p,{})}allowDelete(p){return Wa(p)?.delete&&ja(this[Fe])}update(p,R){if(!Ir(this[Fe]))throw new Error("Can not update a table resource outside of a transaction");if(p===!1)return this;let A;return typeof p=="object"&&p&&(R?(Object.isFrozen(p)&&(p={...p}),this[ve]={},this[fr]=p):(A=this[fr],A&&(p=Object.assign(A,p)),this[fr]=A=p)),this._writeUpdate(this[fr],R),this}addTo(p,R){if(typeof R=="number"||typeof R=="bigint")this[HE]===BW?this.set(p,(+this.getProperty(p)||0)+R):(this[HE]||this.update(),this.set(p,new HT(R)));else throw new Error("Can not add a non-numeric value")}subtractFrom(p,R){if(typeof R=="number")return this.addTo(p,-R);throw new Error("Can not subtract a non-numeric value")}getMetadata(){return this[Fr]}invalidate(){this._writeInvalidate()}_writeInvalidate(p){let R=this[Fe],w=this[ze];ji(w),Ir(this[Fe]).addWrite({key:w,store:i,invalidated:!0,entry:this[Fr],before:Ne.invalidate?.bind(this,R,w),beforeIntermediate:Me.invalidate?.bind(this,R,w),commit:a((b,P)=>{if(di(b,P,p?.nodeId)<=0)return;let N=null;for(let B in r)N||(N={}),N[B]=this.getProperty(B);qe.default.trace?.(`Invalidating entry id: ${w}, timestamp: ${new Date(b).toISOString()}`),y(w,N,this[Fr],b,Is,m,{user:R?.user,residencyId:p?.residencyId,nodeId:p?.nodeId},"invalidate")},"commit")})}_writeRelocate(p){let R=this[Fe],w=this[ze];ji(w),Ir(this[Fe]).addWrite({key:w,store:i,invalidated:!0,entry:this[Fr],before:Ne.relocate?.bind(this,R,w),beforeIntermediate:Me.relocate?.bind(this,R,w),commit:a((b,P)=>{if(di(b,P,p?.nodeId)<=0)return;let N=Ve.getResidencyRecord(p.residencyId),B=0,k=null,C=P?.value;if(N&&!N.includes(server.hostname)){for(let F in r)k||(k={}),k[F]=C(F);B=Is}else k=C;qe.default.trace?.(`Relocating entry id: ${w}, timestamp: ${new Date(b).toISOString()}`),y(w,k,this[Fr],b,B,m,{user:R.user,residencyId:p.residencyId,nodeId:p.nodeId,expiresAt:p.expiresAt},"relocate",!1,null)},"commit")})}static _recordRelocate(p,R){let w={previousResidency:this.getResidencyRecord(p.residencyId),isRelocation:!0},A=this.getResidency(R.value,w),b;if(A){if(!Array.isArray(A))throw new Error("Residency must be an array, but was: "+A);if(!A.includes(server.hostname))return;b=tt(A)}let N=y(p.key,R.value,p,p.version,0,!0,{residencyId:b,expiresAt:R.expiresAt},"relocate",!1,null)}static evict(p,R,w){let A=this.Source,b;if(!((U||m)&&(!R||(b=i.getEntry(p),!b||!R)||b.version!==w))){if(U){if(i.hasLock(p,b.version))return;let P;for(let N in r)P||(P={}),P[N]=R[N];if(P)return y(p,P,b,w,Na,null,null,null,!0)}return i.ifVersion(p,w,()=>{Ka(p,R,null)}),m?y(p,null,b,w,Na,null,null,null,!0):i.remove(p,w)}}lock(){throw new Error("Not yet implemented")}static operation(p,R){return p.table||=s,p.schema||=c,VW.operation(p,R)}put(p){this.update(p,!0)}patch(p){this.update(p,!1)}_writeUpdate(p,R,w){let A=this[Fe],b=Ir(A),P=this[ze];ji(P);let N=this[Fr];this[HE]=R?BW:DTe;let B={key:P,store:i,entry:N,nodeName:A?.nodeName,validate:a(k=>{p||(p=this[fr]),R||p&&BT(this[fr]===p?this:p)?A?.source||(b.checkOverloaded(),this.validate(p,!R),V&&(p[V.name]=V.type==="Date"?new Date(k):V.type==="String"?new Date(k).toISOString():k),R&&(t&&p[t]!==P&&(p[t]=P),W&&(N?.value?p[W.name]=N?.value[W.name]:p[W.name]=W.type==="Date"?new Date(k):W.type==="String"?new Date(k).toISOString():k),p=Rl(p))):b.removeWrite(B)},"validate"),before:R?Ne.put?()=>Ne.put(A,P,p):null:Ne.patch?()=>Ne.patch(A,P,p):Ne.put?()=>Ne.put(A,P,Rl(this)):null,beforeIntermediate:R?Me.put?()=>Me.put(A,P,p):null:Me.patch?()=>Me.patch(A,P,p):Me.put?()=>Me.put(A,P,Rl(this)):null,commit:a((k,C,F)=>{if(F){if(A&&C?.version>(A.lastModified||0)&&(A.lastModified=C.version),this[Fr]=C,C?.value?.[ve])throw new Error("Can not assign a record to a record, check for circular references");R||(this[ve]=C?.value??null)}this[fr]=void 0,this[kE]=k;let H=C?.value,q=p;this[HE]=0;let ee=di(k,C,w?.nodeId),G;if(ee<=0)if(m){let Y=C.localTime,ge=C.version;qe.default.trace?.("Applying CRDT update to record with id: ",P,"applying later update:",ge);let Be=[];for(;Y>k||ge>=k&&Y>0;){let we=l.get(Y);if(!we)break;let ce=Ht(we);if(ge=ce.version,ge>=k){if(ge===k){if(ee=di(k,{version:ge,localTime:Y},w?.nodeId),ee===0)return;if(ee>0)continue}if(ce.type==="patch")Be.push(ce),G=p;else if(ce.type==="put"||ce.type==="delete")return}Y=ce.previousLocalTime}Be.sort((we,ce)=>we.version-ce.version);for(let we of Be){let ce=we.getValue(i);if(q=UT(q,ce,R),qe.default.debug?.("Rebuilding update with future patch:",q),!q)return}}else{if(R)return;q=UT(q,H,R),qe.default.debug?.("Rebuilding update without audit:",q)}let Ae;if(R?Ae=q:(this[ve]=H,Ae=Rl(this,q)),this[ve]=Ae,Ae?.[ve])throw new Error("Can not assign a record to a record, check for circular references");let Ee;if(w?.residencyId!=null)Ee=w.residencyId;else{N?.residencyId&&(A.previousResidency=Ve.getResidencyRecord(N.residencyId));let Y=Ve.getResidency(Ae,A);if(Y){if(!Array.isArray(Y))throw new Error("Residency must be an array, got: "+Y);Y.includes(server.hostname)||Y.push(server.hostname)}Ee=tt(Y)}R||(G=p);let Re=A?.expiresAt??(h?h+Date.now():-1);qe.default.trace?.(`Saving record with id: ${P}, timestamp: ${new Date(k).toISOString()}${Re?", expires at: "+new Date(Re).toISOString():""}${C?", replaces entry from: "+new Date(C.version).toISOString():", new entry"}`,Ae),Ka(P,H,Ae);let re=R?"put":"patch";y(P,Ae,C,k,0,m,{user:A?.user,residencyId:Ee,expiresAt:Re,nodeId:w?.nodeId,originatingOperation:A?.originatingOperation},re,!1,G),A.expiresAt&&Ho()},"commit")};b.addWrite(B)}async delete(p){if(typeof p=="string")return this.deleteProperty(p);if(this[li]){for await(let R of this.search(p))(await Ve.getResource(R[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(p);return}return this[ve]?this._writeDelete(p):!1}_writeDelete(p){let R=Ir(this[Fe]),w=this[ze];ji(w);let A=this[Fe];return R.addWrite({key:w,store:i,resource:this,nodeName:A?.nodeName,before:Ne.delete?.bind(this,A,w),beforeIntermediate:Me.delete?.bind(this,A,w),commit:a((b,P,N)=>{let B=P?.value;N&&(A&&P?.version>(A.lastModified||0)&&(A.lastModified=P.version),KT(this,P)),!(di(b,P,p?.nodeId)<=0)&&(Ka(this[ze],B),qe.default.trace?.(`Deleting record with id: ${w}, txn timestamp: ${new Date(b).toISOString()}`),m||g?(y(w,null,this[Fr],b,0,m,{user:A?.user,nodeId:p?.nodeId},"delete"),m||Ho()):i.remove(this[ze]))},"commit")}),!0}search(p){let R=this[Fe],w=Ir(R);if(!p)throw new Error("No query provided");let A=p.conditions;A?A.length===void 0&&(A=A[Symbol.iterator]?Array.from(A):[A]):A=Array.isArray(p)?p:p[Symbol.iterator]?Array.from(p):[],this[ze]&&(A=[{attribute:null,comparator:Array.isArray(this[ze])?"prefix":"starts_with",value:this[ze]}].concat(A));let b,P={};function N(Y,ge){let Be;switch(ge){case"and":case void 0:if(Y.length<1)throw new Error('An "and" operator requires at least one condition');Be=!0;break;case"or":if(Y.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+ge)}for(let we of Y){if(we.conditions){we.conditions=N(we.conditions,we.operator);continue}let ce=we[0]??we.attribute,Ye=ce==null?x:Bi(S,ce);if(Ye)(Ye.type||HN[we.comparator])&&(we[1]===void 0?we.value=k(we.value,Ye):we[1]=k(we[1],Ye));else if(ce!=null)throw(0,Nr.handleHDBError)(new Error,`${ce} is not a defined attribute`,404);if(we.chainedConditions)if(we.chainedConditions.length===1&&(!we.operator||we.operator=="and")){let rt=we.chainedConditions[0],Ze,st;if(rt.comparator==="gt"||rt.comparator==="greater_than"||rt.comparator==="ge"||rt.comparator==="greater_than_equal"?(Ze=we,st=rt):(Ze=rt,st=we),Ze.comparator!=="lt"&&Ze.comparator!=="less_than"&&Ze.comparator!=="le"&&Ze.comparator!=="less_than_equal")throw new Error("Invalid chained condition, only less than and greater than conditions can be chained together");let Bt=st.comparator==="ge"||st.comparator==="greater_than_equal",ko=Ze.comparator==="le"||Ze.comparator==="less_than_equal";we.comparator=(Bt?"ge":"gt")+(ko?"le":"lt"),we.value=[st.value,Ze.value]}else throw new Error("Multiple chained conditions are not currently supported")}return Y}a(N,"prepareConditions");function B(Y,ge){if(p.enforceExecutionOrder)return Y;for(let Be of Y)Be.conditions&&(Be.conditions=B(Be.conditions,Be.operator));return Y.length>1&&ge!=="or"?(0,qW.sortBy)(Y,CS(Ve)):Y}a(B,"orderConditions");function k(Y,ge){return Array.isArray(Y)?Y.map(Be=>VT(Be,ge)):VT(Y,ge)}a(k,"coerceTypedValues");let C=p.operator;(A.length>0||C)&&(A=N(A,C));let F=typeof p.sort=="object"&&p.sort,H;if(F&&C!=="or"){let Y=F.attribute;if(Y==null)throw new Nr.ClientError("Sort requires an attribute");if(b=A.find(ge=>od(ge.attribute)===od(Y)),!b){let ge=Bi(S,Y);if(!ge)throw(0,Nr.handleHDBError)(new Error,`${Array.isArray(Y)?Y.join("."):Y} is not a defined attribute`,404);if(ge.indexed)b={attribute:Y,comparator:"sort"},A.push(b);else if(A.length===0&&!p.allowFullScan)throw(0,Nr.handleHDBError)(new Error,`${Array.isArray(Y)?Y.join("."):Y} is not indexed and not combined with any other conditions`,404)}b&&(b.descending=!!F.descending)}A=B(A,C),F&&(b&&A[0]===b?F.next&&(H={dbOrderedAttribute:F.attribute,attribute:F.next.attribute,descending:F.next.descending,next:F.next.next}):(b&&A.splice(A.indexOf(b),1),H=F));let q=p.select;if(A.length===0&&(A=[{attribute:t,comparator:"greater_than",value:!0}]),p.explain)return{conditions:A,operator:C,postOrdering:H,selectApplied:!!q};let ee=w.useReadTxn(),G=kN(A,C,Ve,ee,p,R,(Y,ge)=>Bd(Y,q,R,ee,ge),P),Ae=p.ensureLoaded!==!1;H||(G=re(G));let Ee=Ve.transformEntryForSelect(q,R,ee,P,Ae,!0),Re=Ve.transformToOrderedSelect(G,q,H,ee,R,Ee);function re(Y){return p.offset||p.limit!==void 0?Y.slice(p.offset,p.limit!==void 0?(p.offset||0)+p.limit:void 0):Y}return a(re,"applyOffset"),H&&(Re=re(Re)),Re.onDone=()=>{Re.onDone=null,w.doneReadTxn()},Re.selectApplied=!0,Re.getColumns=()=>{if(q){let Y=[];for(let ge of q)ge==="*"?Y.push(...S.map(Be=>Be.name)):Y.push(ge.name||ge);return Y}return S.filter(Y=>!Y.computed&&!Y.relationship).map(Y=>Y.name)},Re}static transformToOrderedSelect(p,R,w,A,b,P){let N=new Bs;if(w){p=Bd(p,R,A,b,null);let B;N.iterate=function(){let C,F=p[Symbol.asyncIterator]?p[Symbol.asyncIterator]():p[Symbol.iterator](),H,q=w.dbOrderedAttribute,ee,G,Ae=!0;function Ee(re){let Y=re.next&&Ee(re.next),ge=re.descending;return(Be,we)=>{let ce=Cl(Be,re.attribute,A),Ye=Cl(we,re.attribute,A),rt=ge?(0,bl.compareKeys)(Ye,ce):(0,bl.compareKeys)(ce,Ye);return rt===0?Y?.(Be,we)||0:rt}}a(Ee,"createComparator");let Re=Ee(w);return{async next(){let re;if(C)if(re=C.next(),re.done){if(H)return N.onDone&&N.onDone(),re}else return{value:await P.call(this,re.value)};B=[],ee&&B.push(ee);do if(re=await F.next(),re.done){if(H=!0,B.length)break;return N.onDone&&N.onDone(),re}else{let Y=re.value;if(Y?.then&&(Y=await Y),q){let ge=Cl(Y,q,A);if(Ae)Ae=!1,G=ge;else if(ge!==G){G=ge,ee=Y;break}}B.push(Y)}while(!0);return w.isGrouped,B.sort(Re),C=B[Symbol.iterator](),re=C.next(),re.done?(N.onDone&&N.onDone(),re):{value:await P.call(this,re.value)}},return(){N.onDone&&N.onDone(),F.return()},throw(){N.onDone&&N.onDone(),F.throw()}}};let k=a(C=>{if(typeof R=="object"&&Array.isArray(C.attribute))for(let F=0;F<R.length;F++){let H=R[F],q;if(H.name===C.attribute[0]){for(q=H.sort||(H.sort={});q.next;)q=q.next;q.attribute=C.attribute.slice(1),q.descending=C.descending}else H===C.attribute[0]&&(R[F]=q={name:H,sort:{attribute:C.attribute.slice(1),descending:C.descending}})}C.next&&k(C.next)},"applySortingOnSelect");k(w)}else N.iterate=(p[Symbol.asyncIterator]||p[Symbol.iterator]).bind(p),N=N.map(function(B){try{let k=P.call(this,B);return typeof k?.catch=="function"?k.catch(C=>{throw C.partialObject={[t]:B.key},C}):k}catch(k){throw k.partialObject={[t]:B.key},k}});return N}static transformEntryForSelect(p,R,w,A,b,P){if(p&&(p===t||p?.length===1&&p[0]===t&&Array.isArray(p))){let C=a(F=>(R?.transaction?.stale&&(R.transaction.stale=!1),F?.key??F),"transform");return p===t?C:p.asArray?F=>[C(F)]:F=>({[t]:C(F)})}let N;b&&U&&!(typeof p=="string"?[p]:p)?.every(C=>{let F;return typeof C=="object"?F=C.name:F=C,r[F]||F===t})&&(N=!0);let B,k=a(function(C){let F;if(R?.transaction?.stale&&(R.transaction.stale=!1),C!=null){if(F=C.value||C.deref?.()?.value,!F&&(C.key===void 0||C.deref)||C.metadataFlags&Is){if(C.metadataFlags&Is&&R.replicateFrom===!1&&P&&C.residencyId)return ka.SKIP;if(C=Ya(C.key??C,R,{transaction:w,lazy:p?.length<4,ensureLoaded:b},this?.isSync,H=>H),C?.then)return C.then(k.bind(this));F=C?.value}if(N&&C?.metadataFlags&(Is|Na)||C?.expiresAt!=null&&C?.expiresAt<Date.now()){if(R.onlyIfCached&&R.noCacheStore)return{[t]:C.key,message:"This entry has expired"};let H=vd(C.key??C,C,R);if(H?.then)return H.then(k)}}if(F==null)return P?ka.SKIP:F;if(p&&!(p[0]==="*"&&p.length===1)){let H,q=a((G,Ae)=>{let Ee;typeof G=="object"?Ee=G.name:Ee=G;let Re=wn?.[Ee],re;if(Re){let Y=A?.[Ee];if(Y)if(Y.hasMappings){let Be=Re.from?F[Re.from]:od(C.key);re=Y.get(Be),re||(re=[])}else re=Y.fromRecord?.(F);else re=Re(F,R,C);let ge=a(Be=>{if(Be&&typeof Be=="object"){let we=Re.definition?.tableClass||Ve;B||(B={});let ce=B[Ee]||(B[Ee]=we.transformEntryForSelect(Ee===G?null:G.select||(Array.isArray(G)?G:null),R,w,Y,b));if(Array.isArray(Be)){let Ye=[],rt=we.transformToOrderedSelect(Be,G.select,typeof G.sort=="object"&&G.sort,R,w,ce)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),Ze=a(Bt=>{for(;!Bt.done;){if(Bt?.then)return Bt.then(Ze);Ye.push(Bt.value),Bt=rt.next()}Ae(Ye,Ee)},"nextValue"),st=Ze(rt.next());st&&(H||(H=[]),H.push(st));return}else if(Be=ce.call(this,Be),Be?.then){H||(H=[]),H.push(Be.then(Ye=>Ae(Ye,Ee)));return}}Ae(Be,Ee)},"handleResolvedValue");re?.then?(H||(H=[]),H.push(re.then(ge))):ge(re);return}else re=F[Ee],re&&typeof re=="object"&&Ee!==G&&(re=Ve.transformEntryForSelect(G.select||G,R,w,null)({value:re}));Ae(re,Ee)},"selectAttribute"),ee;if(typeof p=="string")q(p,G=>{ee=G});else if(Array.isArray(p))if(p.asArray)ee=[],p.forEach((G,Ae)=>{G==="*"?p[Ae]=F:q(G,Ee=>ee[Ae]=Ee)});else{ee={};let G=p.forceNulls;for(let Ae of p)if(Ae==="*")for(let Ee in F)ee[Ee]=F[Ee];else q(Ae,(Ee,Re)=>{Ee===void 0&&G&&(Ee=null),ee[Re]=Ee})}else throw new Nr.ClientError("Invalid select"+p);return H?Promise.all(H).then(()=>ee):ee}return F},"transform");return k}async subscribe(p){if(!l)throw new Error("Can not subscribe to a table without an audit log");m||pt({table:s,database:c,schemaDefined:u,attributes:S,audit:!0}),p||(p={});let R=!p.rawEvents,w=[],A=this,b=by(Ve,this[ze]??null,function(N,B,k,C){try{let F=B.getValue?.(i,R),H=B.type;if(!F&&H==="patch"&&R){let ee=i.getEntry(N);ee?.version===B.version?F=ee.value:F=B.getValue?.(i,!0,k),H="put"}let q={id:N,localTime:k,value:F,version:B.version,type:H,beginTxn:C};w?w.push(q):this.send(q)}catch(F){qe.default.error?.(F)}},p.startTime||0,p),P=(async()=>{this[li]&&(b.includeDescendants=!0,p.onlyChildren&&(b.onlyChildren=!0)),p.supportsTransactions&&(b.supportsTransactions=!0);let N=this[ze],B=p.previousCount;B>1e3&&(B=1e3);let k=p.startTime;if(this[li]){if(k){if(B)throw new Nr.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:C,value:F}of l.getRange({start:k,exclusiveStart:!0,snapshot:!1})){let H=Ht(F);if(H.tableId!==n)continue;let q=H.recordId;if(N==null||FW(N,q)){let ee=H.getValue(i,R,C);if(b.send({id:q,localTime:C,value:ee,version:H.version,type:H.type}),b.queue?.length>HW&&await b.waitForDrain()===!1)return}b.startTime=C}}else if(B){let C=[];for(let{key:F,value:H}of l.getRange({start:"z",end:!1,reverse:!0}))try{let q=Ht(H);if(q.tableId!==n)continue;let ee=q.recordId;if(N==null||FW(N,ee)){let G=q.getValue(i,R,F);if(C.push({id:ee,localTime:F,value:G,version:q.version,type:q.type}),--B<=0)break}}catch(q){qe.default.error("Error getting history entry",F,q)}for(let F=C.length;F>0;)b.send(C[--F]);C[0]&&(b.startTime=C[0].localTime)}else if(!p.omitCurrent){for(let{key:C,value:F,version:H,localTime:q}of i.getRange({start:N??!1,end:N==null?void 0:[N,bl.MAXIMUM_KEY],versions:!0,snapshot:!1}))if(F&&(b.send({id:C,localTime:q,value:F,version:H,type:"put"}),b.queue?.length>HW&&await b.waitForDrain()===!1))return}}else{B&&!k&&(k=0);let C=this[Fr]?.localTime;if(C===Jg&&(i.cache?.delete(N),this[Fr]=i.getEntry(N),qe.default.trace?.("re-retrieved record",C,this[Fr]?.localTime),C=this[Fr]?.localTime),qe.default.trace?.("Subscription from",k,"from",N,C),k<C){let F=[],H=C;do{let q=l.get(H);if(q){p.omitCurrent=!0;let ee=Ht(q),G=ee.getValue(i,R,H);R&&(ee.type="put"),F.push({id:N,value:G,localTime:H,...ee}),H=ee.previousLocalTime}else break;B&&B--}while(H>k&&B!==0);for(let q=F.length;q>0;)b.send(F[--q]);b.startTime=C}!p.omitCurrent&&this.doesExist()&&b.send({id:N,localTime:C,value:this[ve],version:this[kE],type:"put"})}for(let C of w)b.send(C);w=null})();return p.listener&&b.on("data",p.listener),b}static subscribeOnThisThread(p,R){return p===0||R?.crossThreads===!1}doesExist(){return!!(this[ve]||this[HE])}publish(p,R){this._writePublish(p,R)}_writePublish(p,R){let w=Ir(this[Fe]),A=this[ze]||null;A!=null&&ji(A);let b=this[Fe];w.addWrite({key:A,store:i,entry:this[Fr],nodeName:b?.nodeName,validate:a(()=>{b?.source||(w.checkOverloaded(),this.validate(p))},"validate"),before:Ne.publish?.bind(this,b,A,p),beforeIntermediate:Me.publish?.bind(this,b,A,p),commit:a((P,N,B)=>{N===void 0&&g&&!m&&Ho(),qe.default.trace?.(`Publishing message to id: ${A}, timestamp: ${new Date(P).toISOString()}`),y(A,N?.value??null,N,N?.version||P,0,!0,{user:b?.user,residencyId:R?.residencyId,expiresAt:b?.expiresAt,nodeId:R?.nodeId},"message",!1,p)},"commit")})}validate(p,R){let w,A=a((b,P,N)=>{if(P.type&&b!=null)if(R&&b.__op__&&(b=b.value),P.properties){typeof b!="object"&&(w||(w=[])).push(`Value ${ui(b)} in property ${N} must be an object${P.type?" ("+P.type+")":""}`);let B=P.properties;for(let k=0,C=B.length;k<C;k++){let F=B[k],H=A(b[F.name],F,N+"."+F.name);H&&(b[F.name]=H)}if(P.sealed&&b!=null&&typeof b=="object")for(let k in b)B.find(C=>C.name===k)||(w||(w=[])).push(`Property ${k} is not allowed within object in property ${N}`)}else switch(P.type){case"Int":(typeof b!="number"||b>>0!==b)&&(w||(w=[])).push(`Value ${ui(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 ${ui(b)} in property ${N} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof b!="number"&&(w||(w=[])).push(`Value ${ui(b)} in property ${N} must be a number`);break;case"ID":typeof b=="string"||b?.length>0&&b.every?.(B=>typeof B=="string")||(w||(w=[])).push(`Value ${ui(b)} in property ${N} must be a string, or an array of strings`);break;case"String":typeof b!="string"&&(w||(w=[])).push(`Value ${ui(b)} in property ${N} must be a string`);break;case"Boolean":typeof b!="boolean"&&(w||(w=[])).push(`Value ${ui(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 ${ui(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 ${ui(b)} in property ${N} must be a bigint`)}break;case"Bytes":b instanceof Uint8Array||(w||(w=[])).push(`Value ${ui(b)} in property ${N} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(b)){if(P.elements)for(let B=0,k=b.length;B<k;B++){let C=b[B],F=A(C,P.elements,N+"[*]");F&&(b[B]=F)}}else(w||(w=[])).push(`Value ${ui(b)} in property ${N} must be a Buffer or Uint8Array`);break}P.nullable===!1&&b==null&&(w||(w=[])).push(`Property ${N} is required (and not does not allow null values)`)},"validateValue");for(let b=0,P=S.length;b<P;b++){let N=S[b];if(!(N.relationship||N.computed)&&(!R||N.name in p)){let B=A(p[N.name],N,N.name);B&&(p[N.name]=B)}}if(_)for(let b in p)S.find(P=>P.name===b)||(w||(w=[])).push(`Property ${b} is not allowed`);if(w)throw new Nr.ClientError(w.join(". "))}getUpdatedTime(){return this[kE]}wasLoadedFromSource(){return U?!!this[Mw]:void 0}static async addAttributes(p){let R=S.slice(0);for(let w of p){if(!w.name)throw new Nr.ClientError("Attribute name is required");if(w.name.match(/[`/]/))throw new Nr.ClientError("Attribute names cannot include backticks or forward slashes");(0,$W.validateAttribute)(w.name),R.push(w)}return pt({table:s,database:c,schemaDefined:u,attributes:R}),Ve.indexingOperation}static async removeAttributes(p){let R=S.filter(w=>!p.includes(w.name));return pt({table:s,database:c,schemaDefined:u,attributes:R}),Ve.indexingOperation}static getSize(){let p=i.getStats();return(p.treeBranchPageCount+p.treeLeafPageCount+p.overflowPages)*p.pageSize}static getAuditSize(){let p=l?.getStats();return p&&(p.treeBranchPageCount+p.treeLeafPageCount+p.overflowPages)*p.pageSize}static getRecordCount(p){let R=i.getStats().entryCount,w=1e3/2,A=performance.now(),b=Math.floor(R/2),P=p?.exactCount,N=0,B=0,k;for(let{value:C}of i.getRange({start:!0,lazy:!0}))if(C!=null&&N++,B++,!P&&B<b&&performance.now()-A>w){k=B;break}if(k){let C=N;N=0;for(let{value:re}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:k}))re!=null&&N++;let F=k*2,H=(N+C)/F,q=Math.pow((N-C+1)/k/2,2)+H*(1-H)/F,ee=Math.max(Math.sqrt(q)*R,1),G=Math.round(H*R),Ae=Math.max(G-1.96*ee,N+C),Ee=Math.min(G+1.96*ee,R),Re=Math.pow(10,Math.round(Math.log10(ee)));return Re>G&&(Re=Re/10),N=Math.round(G/Re)*Re,{recordCount:N,estimatedRange:[Math.round(Ae),Math.round(Ee)]}}return{recordCount:N}}static updatedAttributes(){wn=this.propertyResolvers={$id:a((p,R,w)=>({value:w.key}),"$id"),$updatedtime:a((p,R,w)=>w.version,"$updatedtime"),$record:a((p,R,w)=>w?{value:p}:p,"$record")};for(let p of this.attributes){p.resolve=null;let R=p.relationship,w=p.computed;if(R)if(p.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)"),Ud=!0,R.to)p.elements?.definition?(wn[p.name]=p.resolve=(A,b,P)=>{let N=A[R.from?R.from:t],B=p.elements.definition.tableClass;return P?id({attribute:R.to,value:N},Ir(b).getReadTxn(),!1,B,!1).asArray:B.search([{attribute:R.to,value:N}],b).asArray},p.set=()=>{throw new Error("Setting a one-to-many relationship property is not supported")},p.resolve.definition=p.elements.definition,R.from&&(p.resolve.from=R.from)):console.error(`The one-to-many/many-to-many relationship property "${p.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(R.from){let A=p.definition||p.elements?.definition;A?(wn[p.name]=p.resolve=(b,P,N)=>{let B=b[R.from];if(B!==void 0){if(p.elements){let k,C=B?.map(F=>{let H=N?A.tableClass.primaryStore.getEntry(F,{transaction:Ir(P).getReadTxn()}):A.tableClass.get(F,P);return H?.then&&(k=!0),H});return R.filterMissing?k?Promise.all(C).then(F=>F.filter(GW)):C.filter(GW):k?Promise.all(C):C}return N?A.tableClass.primaryStore.getEntry(B,{transaction:Ir(P).getReadTxn()}):A.tableClass.get(B,P)}},p.set=(b,P)=>{if(Array.isArray(P)){let N=P.map(B=>B[ze]||B[A.tableClass.primaryKey]);b[R.from]=N}else{let N=P[ze]||P[A.tableClass.primaryKey];b[R.from]=N}},p.resolve.definition=p.definition||p.elements?.definition,p.resolve.from=R.from):console.error(`The relationship property "${p.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${p.name}" in table "${s}" must use either "from" or "to" arguments`);else w&&(typeof w.from=="function"&&this.setComputedAttribute(p.name,w.from),wn[p.name]=p.resolve=(A,b,P)=>{let N=typeof w.from=="string"?A[w.from]:A,B=this.userResolvers[p.name];if(B)return B(N,b,P);qe.default.warn(`Computed attribute "${p.name}" does not have a function assigned to it. Please use setComputedAttribute('${p.name}', resolver) to assign a resolver function.`),this.userResolvers[p.name]=()=>{}})}kT(this,this)}static setComputedAttribute(p,R){let w=Bi(S,p);if(!w){console.error(`The attribute "${p}" does not exist in the table "${s}"`);return}if(!w.computed){console.error(`The attribute "${p}" is not defined as computed in the table "${s}"`);return}this.userResolvers[p]=R}static async deleteHistory(p=0,R=!1){let w;for(let{key:A,value:b}of l.getRange({start:0,end:p}))await Nd(),Ht(b).tableId===n&&(w=DT(l,A,b));if(R)for(let{key:A,value:b,localTime:P}of i.getRange({start:0,versions:!0}))await Nd(),b===null&&P<p&&(w=i.remove(A));await w}static async*getHistory(p=0,R=1/0){for(let{key:w,value:A}of l.getRange({start:p||1,end:R})){await Nd();let b=Ht(A);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(p){let R=[];if(p==null)throw new Error("An id is required");let w=i.getEntry(p);if(!w)return R;let A=w.localTime;if(!A)throw new Error("The entry does not have a local audit time");let b=0;do{await Nd();let P=l.get(A);if(P){let N=Ht(P);R.push({id:N.recordId,localTime:A,version:N.version,type:N.type,value:N.getValue(i,!0,A),user:N.user}),A=N.previousLocalTime}else break}while(b<1e3&&A);return R.reverse()}static cleanup(){Q?.remove()}}Ve.updatedAttributes();let ss=Ve.prototype;return ss[PTe]=!0,h&&Ve.setTTLExpiration(h/1e3),se&&Se(),Ve;function Ka(v,p,R){let w;for(let A in r){let b=r[A],P=b.isIndexing,N=wn[A],B=R&&(N?N(R):R[A]),k=p&&(N?N(p):p[A]);if(B===k&&!P)continue;w=!0;let C=b.indexNulls,F=(0,FE.getIndexedValues)(B,C),H=(0,FE.getIndexedValues)(k,C);if(H?.length>0){let q=new Set(H);if(F=F?F.filter(ee=>{if(q.has(ee))q.delete(ee);else return!0}):[],H=Array.from(q),(H.length>0||F.length>0)&&vW){let ee=H.concat(F).map(G=>({key:G,value:v}));b.prefetch(ee,kW)}for(let ee=0,G=H.length;ee<G;ee++)b.remove(H[ee],v)}else F?.length>0&&vW&&b.prefetch(F.map(q=>({key:q,value:v})),kW);if(F)for(let q=0,ee=F.length;q<ee;q++)b.put(F[q],v)}return w}a(Ka,"updateIndices");function ji(v){switch(typeof v){case"number":return!0;case"string":if(v.length<659)return!0;if(v.length>xW)throw new Error("Primary key size is too large: "+v.length);break;case"object":if(v===null)throw new Error("Invalid primary key of null");break;case"bigint":if(v<2n**64n&&v>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof v)}if((0,bl.writeKey)(v,LTe,0)>xW)throw new Error("Primary key size is too large: "+v.length);return!0}a(ji,"checkValidId");function Ya(v,p,R,w,A){if(Ve.getResidencyById&&R.ensureLoaded&&p?.replicateFrom!==!1){let P=Ve.getResidencyById(v);if(P&&!P.includes(server.hostname)&&I)return I({key:v,residency:P}).then(A)}let b=a(()=>{if(p?.transaction?.stale&&(p.transaction.stale=!1),R.transaction?.isDone)return A(null,v);let P=i.getEntry(v,R);return P?.residencyId&&P.metadataFlags&Is&&I&&R.ensureLoaded&&p?.replicateFrom!==!1?I(P).then(N=>A(N,v)):(P&&p&&(P?.version>(p.lastModified||0)&&(p.lastModified=P.version),P?.localTime&&!p.lastRefreshed&&(p.lastRefreshed=P.localTime)),A(P,v))},"whenPrefetched");return w?b():ae>0?(ae--,b()):new Promise((P,N)=>{ae===0?(ae--,i.prefetch([v],()=>{B(),k()})):(de.push(v),j.push(k),de.length>th&&(ae--,B()));function B(){if(de.length>0){let C=j;i.prefetch(de,()=>{ae===-1?B():ae++;for(let F of C)F()}),de=[],j=[],Oe>2&&Oe--}else ae=Oe,Oe<xs&&Oe++}a(B,"prefetch");function k(){try{P(b())}catch(C){N(C)}}a(k,"load")})}a(Ya,"loadLocalRecord");function Wa(v){if(!v?.role)return;let p=v.role.permission;if(p.super_user)return MTe;let R=p[c],w,A=R?.tables;if(A)return A[s];if(c==="data"&&(w=p[s])&&!w.tables)return w}a(Wa,"getTablePermissions");function vd(v,p,R,w){if(U){let A=!1;if(R.noCache?A=!0:(p?(!p.value||p.metadataFlags&(Is|Na)||p.expiresAt!=null&&p.expiresAt<Date.now())&&(A=!0):A=!0,qn(!A,"cache-hit",s)),A){let b=xd(v,p,R).then(P=>(P?.value?.[ve]&&qe.default.error?.("Can not assign a record with a record property"),R&&(P?.version>(R.lastModified||0)&&(R.lastModified=P.version),R.lastRefreshed=Date.now()),P));if(R?.onlyIfCached||p?.value&&w?.allowStaleWhileRevalidate?.(p,v)){if(b.catch(P=>qe.default.warn?.(P)),R?.onlyIfCached&&!w.doesExist())throw new Nr.ServerError("Entry is not cached",504);return}else return b}}else if(p?.value&&p.expiresAt!=null&&p.expiresAt<Date.now())return Ve.evict(p.key,p.value,p.version),p.value=null,{then(A){return A(p)}}}a(vd,"ensureLoadedFromSource");function Ir(v){let p=v?.transaction;if(p){if(!p.lmdbDb)return p.lmdbDb=i,p;do{if(p.lmdbDb?.path===i.path)return p;let R=p.next;if(!R)return p=p.next=new mc,p.lmdbDb=i,p;p=R}while(!0)}else return new _p}a(Ir,"txnForContext");function Cl(v,p,R){if(!v)return;let w=v.value||i.getEntry(v.key)?.value;if(typeof p=="object"){let b=wn,P=w;for(let N=0,B=p.length;N<B;N++){let k=p[N],C=b?.[k];P=C&&P?C(P,R,!0)?.value:P?.[k],b=C?.definition?.tableClass?.propertyResolvers}return P}let A=wn[p];return A?A(w,R):w[p]}a(Cl,"getAttributeValue");function Bd(v,p,R,w,A){let b=A?.length,P={transaction:w,lazy:b>0||typeof p=="string"||p?.length<4,alwaysPrefetch:!0},N;function B(k,C){let F=k?.value;if(!F)return ka.SKIP;for(let H=0;H<b;H++)if(!N?.includes(H)&&!A[H](F,k))return ka.SKIP;return C!==void 0&&(k.key=C),k}if(a(B,"processEntry"),b>0||!v.hasEntries){let k=v.map(C=>{if(N=null,typeof C=="object"&&C?.key!==void 0)return b>0?B(C):C;if(C==null)return ka.SKIP;for(let F=0;F<b;F++){let q=A[F].idFilter;if(q){if(!q(C))return ka.SKIP;N||(N=[]),N.push(F)}}return Ya(C,R,P,!1,B)});return Array.isArray(v)&&(k=k.filter(C=>C!==ka.SKIP)),k.hasEntries=!0,k}return v}a(Bd,"transformToEntries");function di(v,p,R=server.replication?.getThisNodeId(l)){if(v<=p?.version){if(p?.version===v&&R!==void 0){let w=server.replication?.exportIdMapping(l),A=p.localTime,b=A&&l.get(A);if(b){let P,N,B=Ht(b);for(let k in w)w[k]===R&&(P=k),w[k]===B.nodeId&&(N=k);if(P>N)return 1;if(P===N)return 0}}return-1}return 1}a(di,"precedesExistingVersion");async function xd(v,p,R){let w=p?.metadataFlags,A=p?.version,b,P;if(!i.attemptLock(v,A,()=>{clearTimeout(P);let C=i.getEntry(v);!C||!C.value||C.metadataFlags&(Is|Na)?b(xd(v,i.getEntry(v),R)):b(C)}))return new Promise(C=>{b=C,P=setTimeout(()=>{i.unlock(v,A)},CTe)});let N=p?.value,B={requestContext:R,replacingRecord:N,replacingEntry:p,replacingVersion:A,noCacheStore:!1,source:null,resourceCache:R?.resourceCache},k=R?.responseHeaders;return new Promise((C,F)=>{let H;vw(Pt(B,async q=>{let ee=performance.now(),G,Ae,Ee;try{for(let ge of Ve.sources)if(ge.get&&(!ge.get.reliesOnPrototype||ge.prototype.get)){if(ge.available?.(p)===!1)continue;if(B.source=ge,G=await ge.get(v,B),G)break}Ee=w&Is;let re=B.lastModified||Ee&&A;Ae=Ee||re>A||!N,re||(re=(0,FE.getNextMonotonicTime)());let Y=performance.now()-ee;if(mr(Y,"cache-resolution",s,null,"success"),k&&km(k,"Server-Timing",`cache-resolve;dur=${Y.toFixed(2)}`,!0),q.timestamp=re,h&&B.expiresAt==null&&(B.expiresAt=Date.now()+h),G){if(typeof G!="object")throw new Error("Only objects can be cached and stored in tables");if(G.status>0&&G.headers)if(G.status>=300)if(G.status===304)G=N,re=A;else throw new Nr.ServerError(G.body||"Error from source",G.status);else G=G.body;typeof G.toJSON=="function"&&(G=G.toJSON()),t&&G[t]!==v&&(G[t]=v)}H=!0,C({key:v,version:re,value:G})}catch(re){re.message+=` while resolving record ${v} for ${s}`,N&&((re.code==="ECONNRESET"||re.code==="ECONNREFUSED"||re.code==="EAI_AGAIN")&&!R?.mustRevalidate||R?.staleIfError&&(re.statusCode===500||re.statusCode===502||re.statusCode===503||re.statusCode===504))?(C({key:v,version:A,value:N}),qe.default.trace?.(re.message,"(returned stale record)")):F(re);let Y=performance.now()-ee;mr(Y,"cache-resolution",s,null,"fail"),k&&km(k,"Server-Timing",`cache-resolve;dur=${Y.toFixed(2)}`,!0),B.transaction.abort();return}if(R?.noCacheStore||B.noCacheStore){B.transaction.abort();return}Ir(B).addWrite({key:v,store:i,entry:p,nodeName:"source",commit:a((re,Y)=>{if(Y?.version!==A)return;let ge=Ka(v,N,G);G?(Me.put?.(B,v,G),qe.default.trace?.(`Writing resolved record from source with id: ${v}, timestamp: ${new Date(re).toISOString()}`),y(v,G,Y,re,0,m&&Ae||null,{user:B?.user,expiresAt:B.expiresAt},"put",!!Ee)):Y&&(Me.delete?.(B,v),qe.default.trace?.(`Deleting resolved record from source with id: ${v}, timestamp: ${new Date(re).toISOString()}`),m||g?y(v,null,Y,re,0,m&&Ae||null,{user:B?.user},"delete",!!Ee):i.remove(v,A))},"commit")})}),()=>{i.unlock(v,A)},q=>{i.unlock(v,A),H&&qe.default.error?.("Error committing cache update",q)})})}a(xd,"getFromSource");function ja(v){if(!v||v.user?.role?.permission?.super_user)return!0;if(v.replicateTo)throw new Nr.ClientError("Can not specify replication parameters without super user permissions",403);if(v.replicatedConfirmation)throw new Nr.ClientError("Can not specify replication confirmation without super user permissions",403);return!0}a(ja,"checkContextPermissions");function Ho(){if(Gr!==Md&&(Md=Gr,(0,yl.getWorkerIndex)()===(0,yl.getWorkerCount)()-1)){if(qa&&clearTimeout(qa),!Gr)return;let v=new Date;v.setMonth(0),v.setDate(1),v.setHours(0),v.setMinutes(0),v.setSeconds(0);let p=Math.ceil((Date.now()-v.getTime())/Gr)*Gr+v.getTime(),R=a(w=>{qe.default.trace?.(`Scheduled next cleanup scan at ${new Date(w)}ms`),qa=setTimeout(()=>X=X.then(async()=>{if(R(Math.max(w+Gr,Date.now())),i.rootStore.status!=="open"){clearTimeout(qa);return}let A=50,b=new Array(A),P=0;qe.default.info?.(`Starting cleanup scan for ${s}`);try{let N=0;for(let{key:B,value:k,version:C,expiresAt:F}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let H;k===null&&!m&&C+wTe<Date.now()?H=i.remove(B,C):F!=null&&F+T<Date.now()&&(H=Ve.evict(B,k,C),N++),H&&(await b[P],b[P]=H.catch(q=>{qe.default.error?.("Cleanup error",q)}),++P>=A&&(P=0)),await Nd()}qe.default.info?.(`Finished cleanup scan for ${s}, evicted ${N} entries`)}catch(N){qe.default.warn?.(`Error in cleanup scan for ${s}:`,N)}}),Math.min(w-Date.now(),2147483647)).unref()},"startNextTimer");R(p)}}a(Ho,"scheduleCleanup");function ie(){Q=l?.addDeleteRemovalCallback(n,v=>{let p=i.getEntry(v);p?.value===null&&i.remove(v,p.version)})}a(ie,"addDeleteRemoval");function Se(){(0,yl.getWorkerIndex)()===0&&setInterval(async()=>{if(!wl){wl=!0;try{let v=se.name,p=r[v];if(!p)throw new Error(`expiresAt attribute ${se} must be indexed`);for(let R of p.getRange({start:!0,values:!1,end:Date.now(),snapshot:!1})){for(let w of p.getValues(R)){let A=i.getEntry(w);A?.value?A.value[v]<Date.now()&&Ve.evict(w,A.value,A.version):i.ifVersion(w,A?.version,()=>p.remove(R,w))}await Nd()}}catch(v){qe.default.error?.("Error in evicting old records",v)}finally{wl=!1}}},ITe).unref()}a(Se,"runRecordExpirationEviction");function tt(v){if(v){let p=v.join(","),R=d.get([Symbol.for("residency_by_set"),p]);return R||(d.put([Symbol.for("residency_by_set"),p],R=Math.floor(Math.random()*2147483647)),d.put([Symbol.for("residency_by_id"),R],v),R)}}a(tt,"getResidencyId")}function Uw(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 kW(){}function UTe(e){VW=e}function VT(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 $T(parseInt(e.slice(1),36));if(e==="null")return null;if(!/^-?[0-9]+$/.test(e)&&!(e instanceof Date))throw new SyntaxError;return $T(+e);case"Float":return e==="null"?null:$T(+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;vTe.test(e)||(e+="Z");let n=new Date(e);return $T(n.getTime()),n}return new Date(+e);case void 0:case"Any":return(0,YT.autoCast)(e);default:return e}}catch(n){throw n.message=`Invalid value for attribute ${t.name}: "${e}", expecting ${r}`,n.statusCode=400,n}}function $T(e){if(isNaN(e))throw new SyntaxError;return e}function FW(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 vw(e,t,r){return e?.then?e.then(t,r):t(e)}function KT(e,t){e[Fr]=t,e[ve]=t?.value??null,e[kE]=t?.version}function GW(e){return e!=null}function ui(e){try{return JSON.stringify(e)}catch{return e}}function BTe(e){let t=process.pid;return e.env.readerList().slice(1).some(r=>+r.match(/\d+/)?.[0]!=t)}var vs,ka,FE,qW,$W,Id,Nr,GE,qE,qe,bl,yl,YT,NTe,VW,ITe,wTe,vW,CTe,kE,PTe,Fr,HE,BW,DTe,Mw,Is,Na,LTe,xW,HW,MTe,pve,vTe,Nd,$f=Ie(()=>{vs=M(L()),ka=require("lmdb"),FE=M(on()),qW=require("lodash"),$W=M(Xd());Ks();fp();Id=M(ne());Oy();Nr=M(_e()),GE=M(to()),qE=M($s());Pe();_E();qe=M(Oc());pp();Sc();bl=require("ordered-binary"),yl=M(ot());Qi();YT=M(te());vl();Ii();LT();Bf();NTe=new Uint8Array(9);NTe[8]=192;ITe=6e4,wTe=864e5;Id.initSync();vW=Id.get(vs.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),CTe=1e4,kE=Symbol.for("version"),PTe=Symbol.for("incremental-update"),Fr=Symbol("entry"),HE=Symbol("is-saving"),BW=1,DTe=2,Mw=Symbol("loaded-from-source"),Is=1,Na=8,LTe=Buffer.allocUnsafeSlow(8192),xW=1978,HW=100,MTe={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},pve=(0,YT.convertToMS)(Id.get(vs.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(WT,"makeTable");a(Uw,"attributesAsObject");a(kW,"noop");a(UTe,"setServerUtilities");vTe=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(VT,"coerceType");a($T,"rejectNaN");a(FW,"isDescendantId");Nd=a(()=>new Promise(setImmediate),"rest");a(vw,"when");a(KT,"updateResource");a(GW,"exists");a(ui,"stringify");a(BTe,"hasOtherProcesses")});var ut={};je(ut,{database:()=>eu,databases:()=>We,dropDatabase:()=>YA,dropTableMeta:()=>GTe,getDatabases:()=>dt,getDefaultCompression:()=>vm,getTables:()=>xTe,onRemovedDB:()=>of,onUpdatedTable:()=>Lc,readMetaDb:()=>$E,resetDatabases:()=>Gu,table:()=>pt,tables:()=>jn});function xTe(){return JT||dt(),jn||{}}function dt(){if(JT)return We;JT=!0,Pd=new Map;let e=(0,tr.getHdbBasePath)()&&(0,Ut.join)((0,tr.getHdbBasePath)(),yr.DATABASES_DIR_NAME),t=(0,tr.get)(yr.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,tr.get)(yr.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,rs.existsSync)(e)?e:(0,Ut.join)((0,tr.getHdbBasePath)(),yr.LEGACY_DATABASES_DIR_NAME)),!e)return;if((0,rs.existsSync)(e))for(let n of(0,rs.readdirSync)(e,{withFileTypes:!0})){let s=(0,Ut.basename)(n.name,".mdb");n.isFile()&&(0,Ut.extname)(n.name).toLowerCase()===".mdb"&&!t[s]?.path&&$E((0,Ut.join)(e,n.name),null,s)}if((0,rs.existsSync)((0,Cd.getBaseSchemaPath)())){for(let n of(0,rs.readdirSync)((0,Cd.getBaseSchemaPath)(),{withFileTypes:!0}))if(!n.isFile()){let s=(0,Ut.join)((0,Cd.getBaseSchemaPath)(),n.name),i=(0,Ut.join)((0,Cd.getTransactionAuditStoreBasePath)(),n.name);for(let o of(0,rs.readdirSync)(s,{withFileTypes:!0}))if(o.isFile()&&(0,Ut.extname)(o.name).toLowerCase()===".mdb"){let c=(0,Ut.join)(i,o.name);$E((0,Ut.join)(s,o.name),(0,Ut.basename)(o.name,".mdb"),n.name,c,!0)}}}if(t)for(let n in t){let s=t[n],i=s.path;if((0,rs.existsSync)(i))for(let c of(0,rs.readdirSync)(i,{withFileTypes:!0}))c.isFile()&&(0,Ut.extname)(c.name).toLowerCase()===".mdb"&&$E((0,Ut.join)(i,c.name),(0,Ut.basename)(c.name,".mdb"),n);let o=s.tables;if(o)for(let c in o){let l=o[c],u=(0,Ut.join)(l.path,(0,Ut.basename)(c+".mdb"));(0,rs.existsSync)(u)&&$E(u,c,n,null,!0)}}for(let n in We){let s=Pd.get(n);if(s){let i=We[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 We[n],n==="data"){for(let i in jn)delete jn[i];delete jn[XT]}}let r=["hdb_temp","hdb_certificate","hdb_analytics","hdb_raw_analytics","hdb_session_will","hdb_job","hdb_license","hdb_info"];if(We.system)for(let n of r)We.system[n]&&(We.system[n].replicate=!1);return Pd=null,We}function Gu(){JT=!1;for(let[,e]of Fa)e.needsDeletion=!0;dt();for(let[e,t]of Fa)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),Fa.delete(e),delete We[t.databaseName],KE.forEach(r=>r(t.databaseName)));return We}function $E(e,t,r=Hw,n,s){let i=new Bw.default(e,!1);try{let o=Fa.get(e);o?o.needsDeletion=!1:(o=(0,Dd.open)(i),Fa.set(e,o));let c=new Ol.default(!1),l=o.dbisDb||(o.dbisDb=o.openDB(jT.INTERNAL_DBIS_NAME,c)),u=o.auditStore;u||(n?(0,rs.existsSync)(n)&&(i.path=n,u=(0,Dd.open)(i),u.isLegacy=!0):u=PT(o));let d=jW(r),_=d[XT],E=new Map;for(let{key:f,value:h}of l.getRange({start:!1})){let[T,m]=f.toString().split("/");m===""?m=h.name:m||(m=T,T=t,h.name||(h.name=m,h.indexed=!h.is_hash_attribute)),_?.add(T);let g=E.get(T);g||E.set(T,g={attributes:[]}),(m==null||h.is_hash_attribute)&&(g.primary=h),m!=null&&g.attributes.push(h),Object.defineProperty(h,"key",{value:f,configurable:!0})}for(let[f,h]of E){let{attributes:T,primary:m}=h;if(!m){for(let j of T)if(j.is_hash_attribute||j.isPrimaryKey){m=j;break}if(!m){Kt.warn(`Unable to find a primary key attribute on table ${f}, with attributes: ${JSON.stringify(T)}`);continue}}let g=d[f],S={},y=[],I,U,x=typeof m.audit=="boolean"?m.audit:(0,tr.get)(yr.CONFIG_PARAMS.LOGGING_AUDITLOG),X=m.trackDeletes,W=m.expiration,V=m.eviction,se=m.sealed,Q=m.splitSegments,de=m.replicate;if(g)S=g.indices,y=g.attributes,g.schemaVersion++;else{I=m.tableId,I?I>=(l.get(wd)||0)&&(l.putSync(wd,I+1),Kt.info(`Updating next table id (it was out of sync) to ${I+1} for ${f}`)):(m.tableId=I=l.get(wd),I||(I=1),Kt.debug("Table {table_name} missing an id, assigning {table_id}"),l.putSync(wd,I+1),l.putSync(m.key,m));let j=new Ol.default(!m.is_hash_attribute,m.is_hash_attribute);if(j.compression=m.compression,j.compression){let ae=(0,tr.get)(yr.CONFIG_PARAMS.STORAGE_COMPRESSION_THRESHOLD)||WW;j.compression.threshold=ae}U=Nh(o.openDB(m.key,j)),o.databaseName=r,U.rootStore=o,U.tableId=I}for(let j of T){j.attribute=j.name;try{if(!j.is_hash_attribute&&(j.indexed||j.attribute&&!j.name)){if(!S[j.name]){let Oe=new Ol.default(!j.is_hash_attribute,j.is_hash_attribute);S[j.name]=o.openDB(j.key,Oe),S[j.name].indexNulls=j.indexNulls}let ae=y.find(Oe=>Oe.name===j.name);ae?y.splice(y.indexOf(ae),1,j):y.push(j)}}catch(ae){Kt.error("Error trying to update attribute",j,y,S,ae)}}if(!g){g=zW(d,f,WT({primaryStore:U,auditStore:u,audit:x,sealed:se,splitSegments:Q,replicate:de,expirationMS:W&&W*1e3,evictionMS:V&&V*1e3,trackDeletes:X,tableName:f,tableId:I,primaryKey:m.name,databasePath:s?r+"/"+f:r,databaseName:r,indices:S,attributes:T,schemaDefined:m.schemaDefined,dbisDB:l})),g.schemaVersion=1;for(let j of VE)j(g)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function jW(e){let t=We[e];if(t||(e==="data"?t=We[e]=jn:e==="system"?Object.defineProperty(We,"system",{value:t=Object.create(null),configurable:!0}):t=We[e]=Object.create(null)),Pd&&!Pd.has(e)){let r=new Set;t[XT]=r,Pd.set(e,r)}return t}function zW(e,t,r){return e[t]=r,r}function eu({database:e,table:t}){e||(e=Hw),dt();let r=jW(e),n=(0,Ut.join)((0,tr.getHdbBasePath)(),yr.DATABASES_DIR_NAME),s=(0,tr.get)(yr.CONFIG_PARAMS.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(s.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&s[e]?.tables?.[t]?.path;n=i||s[e]?.path||process.env.STORAGE_PATH||(0,tr.get)(yr.CONFIG_PARAMS.STORAGE_PATH)||((0,rs.existsSync)(n)?n:(0,Ut.join)((0,tr.getHdbBasePath)(),yr.LEGACY_DATABASES_DIR_NAME));let o=(0,Ut.join)(n,(i?t:e)+".mdb"),c=Fa.get(o);if(!c||c.status==="closed"){let l=new Bw.default(o,!1);c=(0,Dd.open)(l),Fa.set(o,c)}return c.auditStore||(c.auditStore=PT(c)),c}async function YA(e){if(!We[e])throw new Error("Schema does not exist");let t=We[e],r;for(let n in t)r=t[n].primaryStore.rootStore,Fa.delete(r.path),r.status==="open"&&(await r.close(),await YE.remove(r.path));if(r||(r=eu({database:e,table:null}),r.status==="open"&&(await r.close(),await YE.remove(r.path))),e==="data"){for(let n in jn)delete jn[n];delete jn[XT]}delete We[e],KE.forEach(n=>n(e))}function pt(e){let{table:t,database:r,expiration:n,eviction:s,scanInterval:i,attributes:o,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:_,schemaDefined:E,origin:f}=e;r||(r=Hw);let h=eu({database:r,table:t}),T=We[r];Kt.trace(`Defining ${t} in ${r}`);let m=T?.[t];if(h.status==="closed")throw new Error(`Can not use a closed data store for ${t}`);let g,S,y;E==null&&(E=!0);let I=new Ol.default(!1);for(let Q of o)Q.attribute&&!Q.name?(Q.name=Q.attribute,Q.indexed=!0):Q.attribute=Q.name,Q.expiresAt&&(Q.indexed=!0);let U,x;if(m){if(g=m.primaryKey,m.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${t} class`);u==null&&(u=m.splitSegments),m.attributes.splice(0,m.attributes.length,...o)}else{let Q=h.auditStore;S=o.find(Oe=>Oe.isPrimaryKey)||{},g=S.name,S.is_hash_attribute=S.isPrimaryKey=!0,S.schemaDefined=E,S.compression=vm(),_&&(S.trackDeletes=!0),c=S.audit=typeof c=="boolean"?c:(0,tr.get)(yr.CONFIG_PARAMS.LOGGING_AUDITLOG),n&&(S.expiration=n),s&&(S.eviction=s),S.splitSegments=!1,typeof l=="boolean"&&(S.sealed=l),typeof d=="boolean"&&(S.replicate=d),f&&(S.origins?S.origins.includes(f)||S.origins.push(f):S.origins=[f]),Kt.trace(`${t} table loading, opening primary store`);let de=new Ol.default(!1,!0);de.compression=S.compression;let j=t+"/";if(y=h.dbisDb=h.openDB(jT.INTERNAL_DBIS_NAME,I),se(),y.get(j))return x&&x(),Gu(),pt(e);let ae=Nh(h.openDB(j,de));h.databaseName=r,ae.rootStore=h,ae.tableId=y.get(wd),Kt.trace(`Assigning new table id ${ae.tableId} for ${t}`),ae.tableId||(ae.tableId=1),y.put(wd,ae.tableId+1),S.tableId=ae.tableId,m=zW(T,t,WT({primaryStore:ae,auditStore:Q,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:_,expirationMS:n&&n*1e3,evictionMS:s&&s*1e3,primaryKey:g,tableName:t,tableId:ae.tableId,databasePath:r,databaseName:r,indices:{},attributes:o,schemaDefined:E,dbisDB:y})),m.schemaVersion=1,U=!0,y.put(j,S)}let X=m.indices;y=y||(h.dbisDb=h.openDB(jT.INTERNAL_DBIS_NAME,I)),m.dbisDB=y;let W=[];for(let{key:Q,value:de}of y.getRange({start:!0})){let[j,ae]=Q.toString().split("/");if(ae===""&&(ae=de.name),ae){if(j!==t)continue}else continue;let Oe=o.find(Me=>Me.name===ae),Ne=!Oe?.indexed&&de.indexed&&!de.isPrimaryKey;if((!Oe||Ne)&&(se(),U=!0,Oe||y.remove(Q),Ne)){let Me=m.indices[j];Me&&W.push(Me)}}let V=[];try{for(let Q of o||[]){if((Q.relationship||Q.computed)&&(U=!0,Q.relationship))continue;let de=t+"/"+(Q.name||"");Object.defineProperty(Q,"key",{value:de,configurable:!0});let j=y.get(de);if(Q.isPrimaryKey){if(j=j||y.get(de=t+"/")||{},c!==void 0&&c!==m.audit||l!==void 0&&l!==m.sealed||d!==void 0&&d!==m.replicate||(+n||void 0)!==(+j.expiration||void 0)||(+s||void 0)!==(+j.eviction||void 0)){let Oe={...j};typeof c=="boolean"&&(c&&m.enableAuditing(c),Oe.audit=c),n&&(Oe.expiration=+n),s&&(Oe.eviction=+s),l!==void 0&&(Oe.sealed=l),d!==void 0&&(Oe.replicate=d),U=!0,se(),y.put(de,Oe)}continue}j?.attribute&&!j.name&&(j.indexed=!0);let ae=!j||j.type!==Q.type||j.indexed!==Q.indexed||j.nullable!==Q.nullable||j.version!==Q.version||JSON.stringify(j.properties)!==JSON.stringify(Q.properties)||JSON.stringify(j.elements)!==JSON.stringify(Q.elements);if(Q.indexed){let Oe=new Ol.default(!0,!1),Ne=h.openDB(de,Oe);(ae||j.indexingPID&&j.indexingPID!==process.pid||j.restartNumber<WE.workerData?.restartNumber)&&(U=!0,se(),j=y.get(de),(ae||j.indexingPID&&j.indexingPID!==process.pid||j.restartNumber<WE.workerData?.restartNumber)&&(U=!0,Q.indexNulls===void 0&&(Q.indexNulls=!0),m.primaryStore.getStats().entryCount>0&&(Q.lastIndexedKey=j?.lastIndexedKey??void 0,Q.indexingPID=process.pid,Ne.isIndexing=!0,Object.defineProperty(Q,"dbi",{value:Ne}),V.push(Q))),y.put(de,Q)),j?.indexNulls&&Q.indexNulls===void 0&&(Q.indexNulls=!0),Ne.indexNulls=Q.indexNulls,X[Q.name]=Ne}else ae&&(U=!0,se(),y.put(de,Q))}}finally{x&&x()}if(U&&(m.schemaVersion++,m.updatedAttributes()),Kt.trace(`${t} table loading, running index`),V.length>0||W.length>0?m.indexingOperation=FTe(m,V,W):U&&zT.signalSchemaChange(new QT.SchemaEventMsg(process.pid,"schema-change",m.databaseName,m.tableName)),m.origin=f,U)for(let Q of VE)Q(m,f!=="cluster");return(n||s||i)&&m.setTTLExpiration({expiration:n,eviction:s,scanInterval:i}),Kt.trace(`${t} table loaded`),m;function se(){x||h.transactionSync(()=>({then(Q){x=Q}}))}a(se,"startTxn")}async function FTe(e,t,r){try{Kt.info(`Indexing ${e.tableName} attributes`,t);let n=e.schemaVersion;await zT.signalSchemaChange(new QT.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 _ of t)(0,Dd.compareKeys)(_.lastIndexedKey,u)<0&&(u=_.lastIndexedKey),_.lastIndexedKey==null&&_.dbi.clearAsync();let d=0;for(let{key:_,value:E,version:f}of e.primaryStore.getRange({start:u,lazy:l<4,versions:!0,snapshot:!1}))if(E){if(d++,s=e.primaryStore.ifVersion(_,f,()=>{for(let h=0;h<l;h++){let T=t[h],m=T.name;try{let g=T.resolve,S=E&&(g?g(E):E[m]),y=(0,KW.getIndexedValues)(S);if(y)for(let I=0,U=y.length;I<U;I++)T.dbi.put(y[I],_)}catch(g){o[m]||(o[m]=!0,Kt.error(`Error indexing attribute ${m}`,g))}}}),s.then(()=>d--,h=>{d--,Kt.error(h)}),WE.workerData&&WE.workerData.restartNumber!==YW.restartNumber&&(i=!0),++c%100===0||i){for(let h of t)h.lastIndexedKey=_,e.dbisDB.put(h.key,h);if(i)return}d>HTe?await s:d>kTe&&await new Promise(h=>setImmediate(h))}for(let _ of t)delete _.lastIndexedKey,delete _.indexingPID,_.dbi.isIndexing=!1,s=e.dbisDB.put(_.key,_)}await s,await zT.signalSchemaChange(new QT.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 GTe({table:e,database:t}){let r=eu({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 Lc(e){return VE.push(e),{remove(){let t=VE.indexOf(e);t>-1&&VE.splice(t,1)}}}function of(e){return KE.push(e),{remove(){let t=KE.indexOf(e);t>-1&&KE.splice(t,1)}}}function vm(){let e=(0,tr.get)(yr.CONFIG_PARAMS.STORAGE_COMPRESSION),t=(0,tr.get)(yr.CONFIG_PARAMS.STORAGE_COMPRESSION_DICTIONARY),r=(0,tr.get)(yr.CONFIG_PARAMS.STORAGE_COMPRESSION_THRESHOLD)||WW,n={startingOffset:32};return t&&(n.dictionary=YE.readFileSync(t)),r&&(n.threshold=r),e&&n}var tr,jT,Dd,Ut,rs,Cd,Ol,Bw,yr,YE,xw,KW,zT,QT,WE,Kt,YW,Hw,XT,WW,jn,We,wd,VE,KE,JT,Fa,Pd,HTe,kTe,Pe=Ie(()=>{tr=M(ne()),jT=M(xt()),Dd=require("lmdb"),Ut=require("path"),rs=require("fs"),Cd=M(Rt());$f();Ol=M(a_()),Bw=M(c_()),yr=M(L()),YE=M(require("fs-extra")),xw=M(fi()),KW=M(on()),zT=M(to()),QT=M($s()),WE=require("worker_threads"),Kt=M(K()),YW=M(ot());Qi();vl();Hw="data",XT=Symbol("defined-tables"),WW=((0,tr.get)(yr.CONFIG_PARAMS.STORAGE_PAGESIZE)||4096)-60;(0,tr.initSync)();jn=Object.create(null),We=Object.create(null);(0,xw._assignPackageExport)("databases",We);(0,xw._assignPackageExport)("tables",jn);wd=Symbol.for("next-table-id"),VE=[],KE=[],Fa=new Map;a(xTe,"getTables");a(dt,"getDatabases");a(Gu,"resetDatabases");a($E,"readMetaDb");a(jW,"ensureDB");a(zW,"setTable");a(eu,"database");a(YA,"dropDatabase");a(pt,"table");HTe=1e3,kTe=10;a(FTe,"runIndexing");a(GTe,"dropTableMeta");a(Lc,"onUpdatedTable");a(of,"onRemovedDB");a(vm,"getDefaultCompression")});var te=O((Ove,lj)=>{"use strict";var Ga=require("path"),ej=require("fs-extra"),In=K(),QW=require("fs-extra"),ZT=require("os"),qTe=require("net"),$Te=require("recursive-iterator"),Yt=L(),VTe=bg(),JW=require("papaparse"),eg=require("moment"),{inspect:KTe}=require("util"),XW=require("is-number"),bve=require("lodash"),YTe=require("minimist"),WTe=require("https"),jTe=require("http"),{hdb_errors:tg}=_e(),zTe=/^((\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)))$/,tj=require("util").promisify(setTimeout),QTe=100,JTe=5,XTe="",ZTe=4,ZW={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};lj.exports={isEmpty:ns,isEmptyOrZeroLength:Wi,arrayHasEmptyValues:rge,arrayHasEmptyOrZeroLengthValues:nge,buildFolderPath:sge,isBoolean:rj,errorizeMessage:ege,stripFileExtension:oge,autoCast:age,autoCastJSON:nj,autoCastJSONDeep:Fw,removeDir:cge,compareVersions:lge,isCompatibleDataVersion:uge,escapeRawValue:dge,unescapeValue:_ge,stringifyProps:fge,timeoutPromise:hge,isClusterOperation:mge,getClusterUser:Tge,checkGlobalSchemaTable:Sge,getHomeDir:ij,getPropsFilePath:Ege,promisifyPapaParse:gge,removeBOM:oj,createEventPromise:Rge,checkProcessRunning:Age,checkSchemaTableExist:yge,checkSchemaExists:aj,checkTableExists:cj,getStartOfTomorrowInSeconds:bge,getLimitKey:Oge,isObject:ige,isNotEmptyAndHasValue:tge,autoCasterIsNumberCheck:sj,backtickASTSchemaItems:Nge,isPortTaken:pge,createForkArgs:Ige,autoCastBoolean:wge,async_set_timeout:tj,getTableHashAttribute:Cge,doesSchemaExist:Pge,doesTableExist:Dge,stringifyObj:Lge,ms_to_time:Mge,changeExtension:Uge,getEnvCliRootPath:Gw,noBootFile:vge,httpRequest:Bge,transformReq:xge,convertToMS:Hge,PACKAGE_ROOT:Yt.PACKAGE_ROOT};function ege(e){return e instanceof Error?e:new Error(e)}a(ege,"errorizeMessage");function ns(e){return e==null}a(ns,"isEmpty");function tge(e){return!ns(e)&&(e||e===0||e===""||rj(e))}a(tge,"isNotEmptyAndHasValue");function Wi(e){return ns(e)||e.length===0||e.size===0}a(Wi,"isEmptyOrZeroLength");function rge(e){if(ns(e))return!0;for(let t=0;t<e.length;t++)if(ns(e[t]))return!0;return!1}a(rge,"arrayHasEmptyValues");function nge(e){if(Wi(e))return!0;for(let t=0;t<e.length;t++)if(Wi(e[t]))return!0;return!1}a(nge,"arrayHasEmptyOrZeroLengthValues");function sge(...e){try{return e.join(Ga.sep)}catch{console.error(e)}}a(sge,"buildFolderPath");function rj(e){return ns(e)?!1:e===!0||e===!1}a(rj,"isBoolean");function ige(e){return ns(e)?!1:typeof e=="object"}a(ige,"isObject");function oge(e){return Wi(e)?XTe:e.slice(0,-ZTe)}a(oge,"stripFileExtension");function age(e){return ns(e)||e===""||typeof e!="string"?e:ZW[e]!==void 0?ZW[e]:sj(e)===!0?Number(e):zTe.test(e)?new Date(e):e}a(age,"autoCast");function nj(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(nj,"autoCastJSON");function Fw(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=Fw(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=Fw(r);n!==r&&(e[t]=n)}return e}else return nj(e)}a(Fw,"autoCastJSONDeep");function sj(e){if(e.startsWith("0.")&&XW(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&XW(e))}a(sj,"autoCasterIsNumberCheck");async function cge(e){if(Wi(e))throw new Error(`Directory path: ${e} does not exist`);try{await QW.emptyDir(e),await QW.remove(e)}catch(t){throw In.error(`Error removing files in ${e} -- ${t}`),t}}a(cge,"removeDir");function lge(e,t){if(Wi(e)){In.info("Invalid current version sent as parameter.");return}if(Wi(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(lge,"compareVersions");function uge(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(uge,"isCompatibleDataVersion");function dge(e){if(ns(e))return e;let t=String(e);return t==="."?Yt.UNICODE_PERIOD:t===".."?Yt.UNICODE_PERIOD+Yt.UNICODE_PERIOD:t.replace(Yt.FORWARD_SLASH_REGEX,Yt.UNICODE_FORWARD_SLASH)}a(dge,"escapeRawValue");function _ge(e){if(ns(e))return e;let t=String(e);return t===Yt.UNICODE_PERIOD?".":t===Yt.UNICODE_PERIOD+Yt.UNICODE_PERIOD?"..":String(e).replace(Yt.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(_ge,"unescapeValue");function fge(e,t){if(ns(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+ZT.EOL}!Wi(n)&&n[0]===";"?r+=" "+n+s+ZT.EOL:Wi(n)||(r+=n+"="+s+ZT.EOL)}catch{In.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(fge,"stringifyProps");function ij(){let e;try{e=ZT.homedir()}catch{e=process.env.HOME}return e}a(ij,"getHomeDir");function Ege(){let e=Ga.join(ij(),Yt.HDB_HOME_DIR_NAME,Yt.BOOT_PROPS_FILE_NAME);return ej.existsSync(e)||(e=Ga.join(__dirname,"../","hdb_boot_properties.file")),e}a(Ege,"getPropsFilePath");function hge(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(hge,"timeoutPromise");async function pge(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=qTe.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a(pge,"isPortTaken");function mge(e){try{return Yt.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){In.error(`Error checking operation against cluster ops ${t}`)}return!1}a(mge,"isClusterOperation");function Sge(e,t){let r=(Pe(),oe(ut)).getDatabases();if(!r[e])return tg.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return tg.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Sge,"checkGlobalSchemaTable");function Tge(e,t){if(ns(t)){In.warn("No CLUSTERING_USER defined, clustering disabled");return}if(ns(e)||Wi(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(Tge,"getClusterUser");function gge(){JW.parsePromise=function(e,t,r){return new Promise(function(n,s){JW.parse(e,{header:!0,transformHeader:oj,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(gge,"promisifyPapaParse");function oj(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(oj,"removeBOM");function Rge(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;In.info(`Got cluster status event response: ${KTe(s)}`);try{i.cancel()}catch{In.error("Error trying to cancel timeout.")}n(s)})})}a(Rge,"createEventPromise");async function Age(e){let t=!0,r=0;do await tj(QTe*r++),(await VTe.findPs(e)).length>0&&(t=!1);while(t&&r<JTe);if(t)throw new Error(`process ${e} was not started`)}a(Age,"checkProcessRunning");function yge(e,t){let r=aj(e);if(r)return r;let n=cj(e,t);if(n)return n}a(yge,"checkSchemaTableExist");function aj(e){let{getDatabases:t}=(Pe(),oe(ut));if(!t()[e])return tg.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(aj,"checkSchemaExists");function cj(e,t){let{getDatabases:r}=(Pe(),oe(ut));if(!r()[e][t])return tg.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(cj,"checkTableExists");function bge(){let e=eg().utc().add(1,Yt.MOMENT_DAYS_TAG).startOf(Yt.MOMENT_DAYS_TAG).unix(),t=eg().utc().unix();return e-t}a(bge,"getStartOfTomorrowInSeconds");function Oge(){return eg().utc().format("DD-MM-YYYY")}a(Oge,"getLimitKey");function Nge(e){try{let t=new $Te(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(Nge,"backtickASTSchemaItems");function Ige(e){return[e]}a(Ige,"createForkArgs");function wge(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(wge,"autoCastBoolean");function Cge(e,t){let{getDatabases:r}=(Pe(),oe(ut)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(Cge,"getTableHashAttribute");function Pge(e){let{getDatabases:t}=(Pe(),oe(ut));return t()[e]!==void 0}a(Pge,"doesSchemaExist");function Dge(e,t){let{getDatabases:r}=(Pe(),oe(ut));return r()[e]?.[t]!==void 0}a(Dge,"doesTableExist");function Lge(e){try{return JSON.stringify(e)}catch{return e}}a(Lge,"stringifyObj");function Mge(e){let t=eg.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(Mge,"ms_to_time");function Uge(e,t){let r=Ga.basename(e,Ga.extname(e));return Ga.join(Ga.dirname(e),r+t)}a(Uge,"changeExtension");function Gw(){if(process.env[Yt.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Yt.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=YTe(process.argv);if(e[Yt.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Yt.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(Gw,"getEnvCliRootPath");var kw;function vge(){if(kw)return kw;let e=Gw();if(Gw()&&ej.pathExistsSync(Ga.join(e,Yt.HDB_CONFIG_FILE)))return kw=!0,!0}a(vge,"noBootFile");function Bge(e,t){let r;return e.protocol==="http:"?r=jTe:r=WTe,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(Bge,"httpRequest");function xge(e){if(!e.schema&&!e.database){e.schema=Yt.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(xge,"transformReq");function Hge(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(Hge,"convertToMS")});var ne=O((Ej,hj)=>{"use strict";var qw=require("fs-extra"),Nl=require("path"),uj=require("os"),kge=require("properties-reader"),zE=K(),jE=te(),Le=L(),rg=Ct(),Fge="Error initializing environment manager",ng="BOOT_PROPS_FILE_PATH",dj=!1,Gge={[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},Bo={};Object.assign(Ej,hj.exports={BOOT_PROPS_FILE_PATH:ng,getHdbBasePath:qge,setHdbBasePath:$ge,get:_j,initSync:Kge,setProperty:Xe,initTestEnvironment:Wge,setCloneVar:Yge});function qge(){return Bo[Le.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(qge,"getHdbBasePath");function $ge(e){Bo[Le.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a($ge,"setHdbBasePath");function _j(e){let t=rg.getConfigValue(e);return t===void 0?Bo[e]:t}a(_j,"get");function Xe(e,t){Gge[e]&&(Bo[e]=t),rg.updateConfigObject(e,t)}a(Xe,"setProperty");function Vge(){let e;try{e=jE.getPropsFilePath(),qw.accessSync(e,qw.constants.F_OK|qw.constants.R_OK),dj=!0;let t=kge(e);return Bo[Le.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(Le.HDB_SETTINGS_NAMES.INSTALL_USER),Bo[Le.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(Le.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Bo[ng]=e,!0}catch{return zE.trace(`Environment manager found no properties file at ${e}`),!1}}a(Vge,"doesPropFileExist");function Kge(e=!1){try{((dj||Vge()||jE.noBootFile())&&!fj||e)&&(rg.initConfig(e),Bo[Le.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=rg.getConfigValue(Le.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){zE.error(Fge),zE.error(t),console.error(t),process.exit(1)}}a(Kge,"initSync");var fj=!1;function Yge(e){fj=e}a(Yge,"setCloneVar");function Wge(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=Nl.join(__dirname,"../../","unitTests");Bo[ng]=Nl.join(l,"hdb_boot_properties.file"),Xe(Le.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Nl.join(l,"settings.test")),Xe(Le.HDB_SETTINGS_NAMES.INSTALL_USER,uj.userInfo()?uj.userInfo().username:void 0),Xe(Le.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Xe(Le.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Nl.join(l,"envDir","log")),Xe(Le.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Xe(Le.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Xe(Le.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Xe(Le.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Nl.join(l,"envDir")),Xe(Le.CONFIG_PARAMS.STORAGE_PATH,Nl.join(l,"envDir")),s&&(Xe(Le.CONFIG_PARAMS.HTTP_SECUREPORT,_j(Le.CONFIG_PARAMS.HTTP_PORT)),Xe(Le.CONFIG_PARAMS.HTTP_PORT,null)),Xe(Le.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),Xe(Le.CONFIG_PARAMS.HTTP_PORT,9926),Xe(Le.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Xe(Le.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT,9925),Xe(Le.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,jE.isEmpty(i)?!1:i),Xe(Le.CONFIG_PARAMS.HTTP_CORS,jE.isEmpty(i)?!1:i),Xe(Le.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Xe(Le.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Xe(Le.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Xe(Le.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Xe(Le.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Nl.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Xe(Le.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,jE.isEmpty(c)?!1:c),o&&(Xe("CORS_ACCESSLIST",o),Xe(Le.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(Xe(Le.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),Xe(Le.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(Xe(Le.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Xe(Le.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(Xe(Le.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Xe(Le.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${ng}. Please check your boot props and settings files`;zE.fatal(r),zE.error(t)}}a(Wge,"initTestEnvironment")});var gj=O((wve,Tj)=>{"use strict";var Sj=require("joi"),{string:QE,boolean:pj,array:jge}=Sj.types(),mj=L(),zge=_t();Tj.exports=Qge;function Qge(e){let t=Sj.object({operation:QE.valid(mj.OPERATIONS_ENUM.ADD_NODE,mj.OPERATIONS_ENUM.UPDATE_NODE).required(),node_name:QE.required(),subscriptions:jge.items({schema:QE.required(),table:QE.optional(),hash_attribute:QE.optional(),subscribe:pj.required(),publish:pj.required()}).min(1).required()});return zge.validateBySchema(e,t)}a(Qge,"updateRemoteSourceValidator")});var JE=O((Pve,Rj)=>{"use strict";var $w=class{static{a(this,"UpdateRemoteResponseObject")}constructor(t,r,n=void 0){this.status=t,this.message=r,this.system_info=n}};Rj.exports=$w});var Oj=O((Lve,bj)=>{"use strict";var Jge=gj(),xo=K(),Vw=ft(),Xge=L(),Kw=ps(),Il=kt(),Aj=lf(),Zge=Xl(),{Node:eRe,NodeSubscription:yj}=Ea(),Yw=JE(),Ww=te(),tRe=ne(),{cloneDeep:rRe}=require("lodash"),{broadcast:nRe}=ot();bj.exports=sRe;async function sRe(e){try{let t=Jge(e);if(t)return xo.error(`Validation error in updateRemoteSource: ${t.message}`),new Yw(Vw.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,t.message);let{subscriptions:r,node_name:n,system_info:s}=e,i=[],o=rRe(await Kw.getNodeRecord(n)),c=!Ww.isEmptyOrZeroLength(o);o=c?o[0]:o,c&&xo.trace(`Existing record found for ${n}, updating records subscriptions`);for(let u=0,d=r.length;u<d;u++){let _=r[u],E=_.schema,f=_.table;if(!Ww.doesSchemaExist(E)){xo.trace(`updateRemoteSource creating schema: ${E}`);try{await Aj.createSchema({operation:"create_schema",schema:E})}catch(h){xo.error(h)}}if(f&&!Ww.doesTableExist(E,f)){let h=new Zge(E,f,_.hash_attribute);_.attributes&&(h.attributes=_.attributes),xo.trace(`updateRemoteSource creating table: ${f} in schema: ${E} with attributes: ${JSON.stringify(_.attributes)}`);try{await Aj.createTable(h)}catch(T){xo.error(T)}}if(xo.trace(`Creating local stream for ${E}.${f}`),await Il.createLocalTableStream(E,f),c?(await Il.updateConsumerIterator(E,f,n,"stop"),await Il.updateRemoteConsumer(_,n),_.subscribe===!0&&await Il.updateConsumerIterator(E,f,n,"start")):(await Il.updateRemoteConsumer(_,n),_.subscribe===!0?await Il.updateConsumerIterator(E,f,n,"start"):await Il.updateConsumerIterator(E,f,n,"stop")),c){let h=!1;for(let T=0,m=o.subscriptions.length;T<m;T++){let g=o.subscriptions[T];if(g.schema===E&&g.table===f){g.publish=_.publish,g.subscribe=_.subscribe,h=!0;break}}h||o.subscriptions.push(new yj(E,f,_.publish,_.subscribe))}else i.push(new yj(E,f,_.publish,_.subscribe))}c||(o=new eRe(n,i,void 0),xo.trace(`No record found for ${n}, creating a new one`));let l=Object.create({});return Object.assign(l,o),l.system_info=s,await Kw.upsertNodeRecord(l),nRe({type:"nats_update"}),new Yw(Vw.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,`Node ${tRe.get(Xge.CONFIG_PARAMS.CLUSTERING_NODENAME)} successfully updated remote source`,await Kw.getSystemInfo())}catch(t){xo.error(t);let r=t.message?t.message:t;return new Yw(Vw.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(sRe,"updateRemoteSource")});var Cj=O((Uve,wj)=>{"use strict";var Ij=require("joi"),{string:Nj}=Ij.types(),iRe=L(),oRe=_t();wj.exports=aRe;function aRe(e){let t=Ij.object({operation:Nj.valid(iRe.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:Nj.required()});return oRe.validateBySchema(e,t)}a(aRe,"removeRemoteSourceValidator")});var Lj=O((Bve,Dj)=>{"use strict";var cRe=Cj(),sg=K(),ig=ft(),jw=L(),lRe=ps(),uRe=te(),Pj=kt(),dRe=ne(),og=JE(),{NodeSubscription:_Re}=Ea(),fRe=Jl(),ERe=zo(),{broadcast:hRe}=ot(),pRe=dRe.get(jw.CONFIG_PARAMS.CLUSTERING_NODENAME);Dj.exports=mRe;async function mRe(e){try{let t=cRe(e);if(t)return sg.error(`Validation error in removeRemoteSource: ${t.message}`),new og(ig.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,t.message);let r=e.node_name,n=await lRe.getNodeRecord(r);if(uRe.isEmptyOrZeroLength(n)){let i=`No record found for node '${r}'`;return sg.error(i),new og(ig.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,i)}n=n[0];for(let i=0,o=n.subscriptions.length;i<o;i++){let c=n.subscriptions[i];sg.trace(`remove remote source removing subscription: ${c.schema}.${c.table} for node: ${r}`);let l=new _Re(c.schema,c.table,!1,!1);await Pj.updateConsumerIterator(c.schema,c.table,r,"stop"),await Pj.updateRemoteConsumer(l,r)}let s=new fRe(jw.SYSTEM_SCHEMA_NAME,jw.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await ERe.deleteRecord(s),hRe({type:"nats_update"}),new og(ig.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,`Node ${pRe} successfully removed node '${r}'.`)}catch(t){sg.error(t);let r=t.message?t.message:t;return new og(ig.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(mRe,"removeRemoteSource")});var Bj=O((Hve,vj)=>{"use strict";var ag=K(),XE=L(),Mj=ft(),zw=ne(),SRe=te(),Uj=JE(),TRe=ps(),gRe=X_(),RRe=Vr();vj.exports=ARe;async function ARe(e){try{ag.trace("getRemoteSourceConfig called");let t=process.uptime()*1e3,r=SRe.ms_to_time(t),n=new yRe(zw.get(XE.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),zw.get(XE.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT)??zw.get(XE.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_SECUREPORT),r,await TRe.getSystemInfo());try{let s={name:e.node_name,system_info:e.system_info},i=new gRe(XE.SYSTEM_SCHEMA_NAME,XE.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[s]);await RRe.update(i)}catch(s){ag.error("Get remote config encountered an error updating system info for node:",e.node_name,s)}return ag.trace("getRemoteSourceConfig response:",n),new Uj(Mj.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,n)}catch(t){ag.error(t);let r=t.message?t.message:t;return new Uj(Mj.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(ARe,"getRemoteSourceConfig");function yRe(e,t,r,n){this.uptime=r,this.ports={clustering:e,operations_api:t},this.system_info=n}a(yRe,"ConfigResponseObject")});var Fj=O((Fve,kj)=>{"use strict";var xj=ne();xj.initSync();var Hj=kt(),ZE=K(),Ld=L(),Qw=ft(),bRe=Oj(),ORe=Lj(),NRe=Bj(),IRe=JE(),{encode:wRe,decode:CRe}=require("msgpackr"),PRe=ls(),DRe=gi(),LRe=require("util"),MRe=L(),{isMainThread:URe,parentPort:vRe}=require("worker_threads");ot();var BRe=LRe.promisify(PRe.setSchemaDataToGlobal),Jw=xj.get(Ld.CONFIG_PARAMS.CLUSTERING_NODENAME);kj.exports=xRe;async function xRe(){try{ZE.notify("Starting reply service."),await BRe();let e=await Hj.getConnection(),t=`${Jw}.__request__`,r=e.subscribe(t,{queue:Jw});await HRe(r)}catch(e){ZE.error(e)}}a(xRe,"initialize");async function HRe(e){for await(let t of e){let r=CRe(t.data),n;switch(r.operation){case Ld.OPERATIONS_ENUM.ADD_NODE:case Ld.OPERATIONS_ENUM.UPDATE_NODE:n=await bRe(r);break;case Ld.OPERATIONS_ENUM.REMOVE_NODE:n=await ORe(r);break;case Ld.OPERATIONS_ENUM.CLUSTER_STATUS:n=await NRe(r);break;case Ld.OPERATIONS_ENUM.DESCRIBE_ALL:n=await kRe();break;default:let s=`node '${Jw}' reply service received unrecognized request operation`;ZE.error(s),n=new IRe(Qw.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,s)}ZE.trace(n),t.respond(wRe(n))}}a(HRe,"handleRequest");async function kRe(){try{return{status:Qw.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,message:await DRe.describeAll({bypass_auth:!0})}}catch(e){return ZE.error(e),{status:Qw.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,message:e.message}}}a(kRe,"getRemoteDescribeAll");URe||vRe.on("message",async e=>{let{type:t}=e;t===MRe.ITC_EVENT_TYPES.SHUTDOWN&&Hj.closeConnection()})});var FRe=Fj();(async()=>{try{await FRe()}catch(e){console.error("Error launching Nats reply service."),console.error(e)}})();