harperdb 4.3.3 → 4.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/bin/harperdb.js +2 -2
- package/bin/lite.js +1 -1
- package/launchServiceScripts/launchInstallNATSServer.js +1 -1
- package/launchServiceScripts/launchNatsIngestService.js +2 -2
- package/launchServiceScripts/launchNatsReplyService.js +18 -18
- package/launchServiceScripts/launchUpdateNodes4-0-0.js +2 -2
- package/npm-shrinkwrap.json +105 -90
- package/package.json +2 -2
- package/server/jobs/jobProcess.js +2 -2
- package/server/threads/threadServer.js +2 -2
- package/studio/build-local/asset-manifest.json +2 -2
- package/studio/build-local/index.html +1 -1
- package/studio/build-local/static/js/{main.e520deff.js → main.e68de7dd.js} +2 -2
- package/utility/scripts/restartHdb.js +2 -2
- /package/studio/build-local/static/js/{main.e520deff.js.LICENSE.txt → main.e68de7dd.js.LICENSE.txt} +0 -0
package/bin/harperdb.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
`).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:IK.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(LK,"findPs")});var at=T((Mhe,ky)=>{"use strict";var PK="__dbis__",MK="__txns__",UK="__environment_name__",vK="__dbi_defintion__",BK={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"},HK=["__createdtime__","__updatedtime__"],GK="\uFFFF",Fy={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},qK=Object.values(Fy);ky.exports={AUDIT_STORE_NAME:MK,INTERNAL_DBIS_NAME:PK,DBI_DEFINITION_NAME:vK,SEARCH_TYPES:BK,TIMESTAMP_NAMES:HK,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:UK,TRANSACTIONS_DBI_NAMES_ENUM:Fy,TRANSACTIONS_DBIS:qK,OVERFLOW_MARKER:GK}});var Zr=T((Uhe,Jy)=>{"use strict";var $y=D(),Vy=at(),Yy={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},Ky=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),Wy={500:Ky("There was an error processing your request."),400:"Invalid request"},xK=Wy[Yy.INTERNAL_SERVER_ERROR],FK={OP_NOT_SUPPORTED_FOR_FS:e=>`${e} is not available for this instance because it uses the File System data store.`,MISSING_VALUE:e=>`${e} is missing.`,INVALID_VALUE:e=>`${e} is invalid.`,NOT_FOUND:e=>`${e} not found.`},kK={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},$K={DEFAULT_BULK_LOAD_ERR:"There was an error during your bulk load into HarperDB.",DOWNLOAD_FILE_ERR:e=>`There was an error downloading '${e}'.`,INSERT_JSON_ERR:"There was an error inserting the downloaded JSON data.",INSERT_CSV_ERR:"There was an error inserting the downloaded CSV data.",INVALID_ACTION_PARAM_ERR:e=>`Bulk load operation failed - ${e} is not a valid 'action' parameter`,INVALID_FILE_EXT_ERR:e=>`Error selecting correct parser - valid file type not found in json - ${e}`,MAX_FILE_SIZE_ERR:(e,t)=>`File size is ${e} bytes, which exceeded the maximum size allowed of: ${t} bytes`,PAPA_PARSE_ERR:"There was an error parsing the downloaded CSV data.",S3_DOWNLOAD_ERR:e=>`There was an error downloading '${e}' from AWS.`,WRITE_TEMP_FILE_ERR:"Error writing temporary file to storage"},VK={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 ${Vy.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${Vy.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"},YK={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${$y.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE} bytes.`,ATTR_NAME_NULLISH_ERR:"transaction aborted due to record(s) with an attribute name that is null, undefined or empty string",HASH_VAL_LENGTH_ERR:`transaction aborted due to record(s) with a hash value that exceeds ${$y.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"},Qy={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"},KK={DEFAULT_INVALID_REQUEST:"Invalid request",OP_AUTH_PERMS_ERROR:"This operation is not authorized due to role restrictions and/or invalid database items",OP_IS_SU_ONLY:e=>`Operation '${e}' is restricted to 'super_user' roles`,OP_NOT_FOUND:e=>`Operation '${e}' not found`,SYSTEM_TIMESTAMP_PERMS_ERR:"Internal timestamp attributes - '__createdtime_' and '__updatedtime__' - cannot be inserted to or updated by HDB users.",UNKNOWN_OP_AUTH_ERROR:(e,t,r)=>`There was an error authorizing ${e} op on table '${t}.${r}'`,USER_HAS_NO_PERMS:e=>`User ${e} has no role or permissions. Please assign the user a valid role.`,DROP_SYSTEM:"The 'system' database, tables and records are used internally by HarperDB and cannot be updated or removed."},WK={ATTR_PERM_MISSING:(e,t)=>`${e.toUpperCase()} attribute permission missing for '${t}'`,ATTR_PERM_MISSING_NAME:"Permission object in 'attribute_permission' missing an 'attribute_name'",ATTR_PERM_NOT_BOOLEAN:(e,t)=>`${e.toUpperCase()} attribute permission for '${t}' must be a boolean`,ATTR_PERMS_ARRAY_MISSING:"Missing 'attribute_permissions' array",ATTR_PERMS_NOT_ARRAY:"Value for 'attribute_permissions' must be an array",INVALID_ATTRIBUTE_IN_PERMS:e=>`Invalid attribute '${e}' in 'attribute_permissions'`,INVALID_PERM_KEY:e=>`Invalid table permission key value '${e}'`,INVALID_ATTR_PERM_KEY:e=>`Invalid attribute permission key value '${e}'`,INVALID_ROLE_JSON_KEYS:e=>`Invalid ${e.length>1?"keys":"key"} in JSON body - '${e.join("', '")}'`,MISMATCHED_TABLE_ATTR_PERMS:e=>`You have a conflict with TABLE permissions for '${e}' being false and ATTRIBUTE permissions being true`,OUTDATED_PERMS_TRANSLATION_ERROR:"This instance was recently upgraded and uses our new role permissions structure. Please login to this instance in HarperDB Studio, go to 'Roles', and click 'Update Role Permission' for all standard roles to migrate them to the new structure.",ROLE_ALREADY_EXISTS:e=>`A role with name '${e}' already exists`,ROLE_NOT_FOUND:"Role not found",ROLE_PERMS_ERROR:"Errors in the role permissions JSON provided",SCHEMA_PERM_ERROR:e=>`Your role does not have permission to view database metadata for '${e}'`,SCHEMA_TABLE_PERM_ERROR:(e,t)=>`Your role does not have permission to view database.table metadata for '${e}.${t}'`,SU_ROLE_MISSING_ERROR:"Missing 'super_user' key/value in permission set",SU_CU_ROLE_BOOLEAN_ERROR:e=>`Value for '${e}' permission must be a boolean`,STRUCTURE_USER_ROLE_TYPE_ERROR:e=>`Value for '${e}' permission must be a boolean or Array`,SU_CU_ROLE_NO_PERMS_ALLOWED:e=>`Roles with '${e}' set to true cannot have other permissions set.`,SU_CU_ROLE_COMBINED_ERROR:"Roles cannot have both 'super_user' and 'cluster_user' values included in their permissions set.",TABLE_PERM_MISSING:e=>`Missing table ${e.toUpperCase()} permission`,TABLE_PERM_NOT_BOOLEAN:e=>`Table ${e.toUpperCase()} permission must be a boolean`},QK={ATTR_NOT_FOUND:(e,t,r)=>`Attribute '${r}' does not exist on '${e}.${t}'`,ATTR_EXISTS_ERR:(e,t,r)=>`Attribute '${r}' already exists in ${e}.${t}'`,DESCRIBE_ALL_ERR:"There was an error during describeAll. Please check the logs and try again.",INVALID_TABLE_ERR:e=>`Invalid table ${JSON.stringify(e)}`,SCHEMA_NOT_FOUND:e=>`database '${e}' does not exist`,SCHEMA_EXISTS_ERR:e=>`database '${e}' already exists`,TABLE_EXISTS_ERR:(e,t)=>`Table '${t}' already exists in '${e}'`,SCHEMA_REQUIRED_ERR:"database is required",TABLE_NOT_FOUND:(e,t)=>`Table '${e}.${t}' does not exist`,TABLE_REQUIRED_ERR:"table is required"},jK={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},zK={ALTER_USER_DUP_ROLES:e=>`Update failed. There are duplicates for the '${e}' role which is not allowed. Update your roles and try again.`,ALTER_USER_ROLE_NOT_FOUND:e=>`Update failed. Requested '${e}' role not found.`,DUP_ROLES_FOUND:e=>`Multiple ${e} roles found. Roles must have unique 'role' value. Please update and try again.`,ROLE_NAME_NOT_FOUND:e=>`${e} role not found`,USER_ALREADY_EXISTS:e=>`User ${e} already exists`,USER_NOT_EXIST:e=>`User ${e} does not exist`},jy={INVALID_DATE:"Invalid date, must be in ISO-8601 format (YYYY-MM-DD).",SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE:e=>`invalid sort attribute '${e}', the attribute must either be the table's hash attribute or an attribute used in conditions.`},zy={INVALID_ITC_DATA_TYPE:"Invalid ITC event data type, must be an object",MISSING_TYPE:"ITC event missing 'type'",MISSING_MSG:"ITC event missing 'message'",MISSING_ORIGIN:"ITC event message missing 'originator' property",INVALID_EVENT:e=>`ITC server received invalid event type: ${e}`},JK={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."},XK={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},ZK={...Qy,...$K,...FK,...KK,...WK,...QK,...jK,...zK,...YK,...jy,...zy,...JK,...XK,...kK};Jy.exports={CHECK_LOGS_WRAPPER:Ky,HDB_ERROR_MSGS:ZK,DEFAULT_ERROR_MSGS:Wy,DEFAULT_ERROR_RESP:xK,HTTP_STATUS_CODES:Yy,LMDB_ERRORS_ENUM:VK,AUTHENTICATION_ERROR_MSGS:Qy,VALIDATION_ERROR_MSGS:jy,ITC_ERRORS:zy}});var oe=T((Bhe,eI)=>{"use strict";var lc=Zr(),eW=x(),tW=D(),zd=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,Xy),this.statusCode=n||lc.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(lc.DEFAULT_ERROR_MSGS[n]?lc.DEFAULT_ERROR_MSGS[n]:lc.DEFAULT_ERROR_MSGS[lc.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&&eW[s](i)}},cS=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}},lS=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function Xy(e,t,r,n=tW.LOG_LEVELS.ERROR,s=null,i=!1){if(Zy(e))return e;let o=new zd(e,t,r,n,s);return i&&delete o.stack,o}a(Xy,"handleHDBError");function Zy(e){return e.__proto__.constructor.name===zd.name}a(Zy,"isHDBError");eI.exports={isHDBError:Zy,handleHDBError:Xy,ClientError:cS,ServerError:lS,hdb_errors:lc}});var je=T((Ghe,aI)=>{"use strict";var Ql=D(),rW=K(),Rr=X(),jl=require("path"),nW=require("minimist"),tI=require("fs-extra"),rI=require("lodash");Rr.initSync();var{CONFIG_PARAMS:Xi,DATABASES_PARAM_CONFIG:Vl,SYSTEM_SCHEMA_NAME:Jd}=Ql,Yl,Kl,Wl;function nI(){if(Yl!==void 0)return Yl;if(Rr.getHdbBasePath()!==void 0)return Yl=Rr.get(Xi.STORAGE_PATH)||jl.join(Rr.getHdbBasePath(),Ql.DATABASES_DIR_NAME),Yl}a(nI,"getBaseSchemaPath");function sI(){if(Kl!==void 0)return Kl;if(Rr.getHdbBasePath()!==void 0)return Kl=oI(Jd),Kl}a(sI,"getSystemSchemaPath");function iI(){if(Wl!==void 0)return Wl;if(Rr.getHdbBasePath()!==void 0)return Wl=Rr.get(Ql.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||jl.join(Rr.getHdbBasePath(),Ql.TRANSACTIONS_DIR_NAME),Wl}a(iI,"getTransactionAuditStoreBasePath");function sW(e,t){let r=Rr.get(Xi.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||jl.join(iI(),e.toString())}a(sW,"getTransactionAuditStorePath");function oI(e,t){e=e.toString(),t=t&&t.toString();let r=Rr.get(Ql.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||jl.join(nI(),e)}a(oI,"getSchemaPath");function iW(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,nW(process.argv));let n=r[Xi.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!rW.isObject(n))throw o;i=n}for(let o of i){let c=o[Jd];if(!c)continue;let l=Rr.get(Xi.DATABASES);l=l??{};let _=c?.tables?.[t]?.[Vl.PATH];if(_)return rI.set(l,[Jd,Vl.TABLES,t,Vl.PATH],_),Rr.setProperty(Xi.DATABASES,l),_;let u=c?.[Vl.PATH];if(u)return rI.set(l,[Jd,Vl.PATH],u),Rr.setProperty(Xi.DATABASES,l),u}}let s=r[Xi.STORAGE_PATH.toUpperCase()];if(s){if(!tI.pathExistsSync(s))throw new Error(s+" does not exist");let i=jl.join(s,e);return tI.mkdirsSync(i),Rr.setProperty(Xi.STORAGE_PATH,s),i}return sI()}a(iW,"initSystemSchemaPaths");function oW(){Yl=void 0,Kl=void 0,Wl=void 0}a(oW,"resetPaths");aI.exports={getBaseSchemaPath:nI,getSystemSchemaPath:sI,getTransactionAuditStorePath:sW,getTransactionAuditStoreBasePath:iI,getSchemaPath:oI,initSystemSchemaPaths:iW,resetPaths:oW}});var Ar=T((khe,dI)=>{"use strict";var aW=Zr().LMDB_ERRORS_ENUM,xhe=require("lmdb"),cW=at(),Fhe=require("buffer").Buffer,{OVERFLOW_MARKER:cI,MAX_SEARCH_KEY_LENGTH:Xd}=cW,lI=["number","string","symbol","boolean","bigint"];function lW(e){if(e=e?.primaryStore||e,!e)throw new Error(aW.ENV_REQUIRED)}a(lW,"validateEnv");function uW(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(uW,"stringifyData");function _W(e){return e instanceof Date?e.valueOf():e}a(_W,"convertKeyValueToWrite");function dW(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(lI.includes(typeof e))return e.length>Xd?[e.slice(0,Xd)+cI]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(lI.includes(typeof i))i.length>Xd?r.push(i.slice(0,Xd)+cI):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(dW,"getIndexedValues");var Zd=0,uI=0;function _I(){uI=Date.now()-performance.now()}a(_I,"adjustStartTime");_I();var fW=6e4;setInterval(_I,fW).unref();function EW(){let e=performance.now()+uI;return e>Zd?(Zd=e,e):(Zd+=488e-6,Zd)}a(EW,"getNextMonotonicTime");dI.exports={validateEnv:lW,stringifyData:uW,convertKeyValueToWrite:_W,getNextMonotonicTime:EW,getIndexedValues:dW}});var fI,Zn,uS,zl=Oe(()=>{fI=require("events"),Zn=class extends fI.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new uS;return t.queue=this,t}push(t){this.send(t)}send(t){this.resolveNext?(this.resolveNext({value:t}),this.resolveNext=null):this.hasDataListeners?this.emit("data",t):(this.queue||(this.queue=[]),this.queue.push(t))}getNextMessage(){return this.queue?.shift()}on(t,r){if(t==="data"&&!this.hasDataListeners)for(this.hasDataListeners=!0;this.queue?.length>0;)r(this.queue.shift());return super.on(t,r)}},uS=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 Wo={};Fe(Wo,{server:()=>ct});var EI,ct,Or=Oe(()=>{EI=require("../index"),ct={};(0,EI._assignPackageExport)("server",ct)});var fS={};Fe(fS,{loadGQLSchema:()=>mW,start:()=>dS,startOnMainThread:()=>pW});function dS({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:l,NamedTypeNode:_,StringValueNode:u}=await import("graphql"),d=o(new c(r.toString(),s)),f=new Map,E=[],h;for(let S of d.definitions)switch(S.kind){case l.OBJECT_TYPE_DEFINITION:let U=function(v){if(v.kind==="NonNullType"){let j=U(v.type);return j.nullable=!1,j}if(v.kind==="ListType")return{type:"array",elements:U(v.type)};let H={type:v.name?.value};return Object.defineProperty(H,"location",{value:v.loc.startToken}),H};a(U,"getProperty");let g=S.name.value,R=[],A={table:null,database:null,properties:R};f.set(g,A);for(let v of S.directives){if(v.name.value==="table"){for(let k of v.arguments)A[k.name.value]=k.value.value;A.schema&&(A.database=A.schema),A.table||(A.table=g),A.audit&&(A.audit=A.audit!=="false"),A.attributes=A.properties,E.push(A)}if(v.name.value==="sealed"&&(A.sealed=!0),v.name.value==="export"){A.export=!0;for(let k of v.arguments)k.name.value==="name"&&(A.export={name:k.value.value})}}let P=!1;for(let v of S.fields){let k=U(v.type);k.name=v.name.value,R.push(k);for(let H of v.directives)if(H.name.value==="primaryKey")P?console.warn("Can not define two attributes as a primary key"):(k.isPrimaryKey=!0,P=!0);else if(H.name.value==="indexed")k.indexed=!0;else if(H.name.value==="relationship"){let j={};for(let z of H.arguments)j[z.name.value]=z.value.value;k.relationship=j}else if(H.name.value==="createdTime")k.assignCreatedTime=!0;else if(H.name.value==="updatedTime")k.assignUpdatedTime=!0;else if(H.name.value==="expiresAt")k.expiresAt=!0;else if(H.name.value==="allow"){let j=k.authorizedRoles=[];for(let z of H.arguments)z.name.value==="role"&&j.push(z.value.value)}}A.type=g,g==="Query"&&(h=A)}function m(S){let g=f.get(S.type);g?(Object.defineProperty(S,"properties",{value:g.properties}),Object.defineProperty(S,"definition",{value:g})):S.type==="array"?m(S.elements):hW.includes(S.type)||(0,hI.getWorkerIndex)()===0&&console.error(`The type ${S.type} is unknown at line ${S.location.line}, column ${S.location.column}, in ${s}`)}a(m,"connectPropertyType");for(let S of f.values())for(let g of S.properties)m(g);for(let S of E)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,_S.dirname)(n),S.tableClass):i.set((0,_S.dirname)(n)+"/"+(S.export.name||S.type),S.tableClass))}}var _S,hI,hW,pW,mW,pI=Oe(()=>{_S=require("path");ge();hI=B(et()),hW=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];a(dS,"start");pW=dS,mW=dS({ensureTable:Et}).handleFile});async function ef(e){return SW?(Jl||(Jl=TW(RW)),(await(await Jl).import(e)).namespace):import(e)}async function TW(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Jl=new Compartment({console,Math,Date,fetch:gW,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,SI.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){Object.assign(s,{Resource:Jt,tables:en,databases:lt})}};let n=await(0,mI.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)}}),Jl}function gW(e,t){let r=typeof e=="string"||e.url;if(new URL(r).protocol!="https")throw new Error("Only https is allowed in fetch");return fetch(e,t)}function RW(){return{Resource:Jt,tables:en}}var mI,SI,SW,Jl,ES=Oe(()=>{es();ge();mI=require("fs/promises"),SI=require("path"),SW=!1;a(ef,"secureImport");a(TW,"getCompartment");a(gW,"secureOnlyFetch");a(RW,"getGlobalVars")});var pS={};Fe(pS,{handleFile:()=>AW});async function AW(e,t,r,n){let s=new Map,i=(0,TI.pathToFileURL)(r).toString(),o=await ef(i);l(o.default)&&n.set((0,hS.dirname)(t),o.default),c(o,(0,hS.dirname)(t));function c(_,u){for(let d in _){let f=_[d];l(f)?n.set(u+"/"+d,f):typeof f=="object"&&c(f,u+"/"+d)}}a(c,"recurseForResources");function l(_){return typeof _=="function"&&(_.get||_.put||_.post||_.delete)}return a(l,"isResource"),s}var TI,hS,gI=Oe(()=>{TI=require("url");ES();hS=require("path");a(AW,"handleFile")});var SS={};Fe(SS,{start:()=>OW});function OW({resources:e}){e.set("login",mS),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var mS,RI=Oe(()=>{es();a(OW,"start");mS=class extends Jt{static{a(this,"Login")}static async get(t,r,n){}static async post(t,r,n){let{username:s,password:i,redirect:o}=r;return{data:await n.login(s,i)}}}});var wI={};Fe(wI,{parse:()=>gS,streamAsJSON:()=>Xl,stringify:()=>Qo});function Xl(e){return new TS({value:e})}function AI(e){return console.error(e),JSON.stringify(e.toString())}function OI(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function Qo(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===yI)return II(e);if(t.resolution)return t.resolution.then(()=>Qo(e));throw t}}function II(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+=II(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+Qo(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function gS(e){return yW.test(e)?bW.parse(e):JSON.parse(e)}var bI,NI,bW,NW,yI,TS,yW,RS=Oe(()=>{bI=require("stream"),NI=B(require("json-bigint-fixes")),bW=(0,NI.default)({useNativeBigInt:!0}),NW=1e4,yI={};BigInt.prototype.toJSON=function(){throw yI};a(Xl,"streamAsJSON");TS=class extends bI.Readable{static{a(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0),this.activeIterators=[]}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],n=t[Symbol.iterator];if((n||r)&&!t.then){yield"[";let s=!0;if((r||n)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();this.activeIterators.push(i);let o;for(;;)if(o=i.next(),o.then&&(yield o.then(c=>(o=c,""))),o.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else s?s=!1:yield",",yield*this.serialize(o.value)}for(let i of t)s?s=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(s=>this.serialize(s),AI)}catch(s){yield AI(s)}else yield Qo(t)}else yield Qo(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);OI(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>NW?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 OI(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(AI,"handleError");a(OI,"when");a(Qo,"stringify");a(II,"jsStringify");yW=/[[,:]\s*-?\d{16,}/;a(gS,"parse")});var FI=T((spe,xI)=>{"use strict";var AS=require("recursive-iterator"),IW=require("alasql"),OS=require("clone"),CI=K(),{handleHDBError:DI,hdb_errors:wW}=oe(),{HDB_ERROR_MSGS:LI,HTTP_STATUS_CODES:PI}=wW,{getDatabases:CW}=(ge(),ie(ke)),DW=["DISTINCT_ARRAY"],MI=Symbol("validateTables"),bS=Symbol("validateTable"),npe=Symbol("getAllColumns"),UI=Symbol("validateAllColumns"),tf=Symbol("findColumn"),vI=Symbol("validateOrderBy"),Zl=Symbol("validateSegment"),NS=Symbol("validateColumn"),BI=Symbol("setColumnsForTable"),HI=Symbol("checkColumnsForAsterisk"),GI=Symbol("validateGroupBy"),qI=Symbol("hasColumns"),yS=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[MI](),this[HI](),this[UI]()}[MI](){if(this[qI]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[bS](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[bS](t.table)})}}[qI](){let t=!1,r=new AS(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[bS](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=CW();if(!r[t.databaseid])throw DI(new Error,LI.SCHEMA_NOT_FOUND(t.databaseid),PI.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw DI(new Error,LI.TABLE_NOT_FOUND(t.databaseid,t.tableid),PI.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=OS(s);i.table=OS(t),this.attributes.push(i)})}[tf](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)}[HI](){let t=new AS(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[BI](r.tableid)}[BI](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new IW.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[UI](){this[Zl](this.statement.columns,!1),this[Zl](this.statement.joins,!1),this[Zl](this.statement.where,!1),this[GI](this.statement.group,!1),this[Zl](this.statement.order,!0)}[Zl](t,r){if(!t)return;let n=new AS(t),s=[];for(let{node:i,path:o}of n)!CI.isEmpty(i)&&!CI.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[vI](i):s.push(this[NS](i)));return s}[GI](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&DW.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=OS(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[tf](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[tf](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`}[vI](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[NS](t)}[NS](t){let r=this[tf](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]}};xI.exports=yS});var $I=T((ope,kI)=>{"use strict";var IS=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")}};kI.exports=IS});var YI=T((cpe,VI)=>{"use strict";var wS=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};VI.exports=wS});var jI={};Fe(jI,{HAS_EXPIRATION:()=>vS,LAST_TIMESTAMP_PLACEHOLDER:()=>ru,LOCAL_TIMESTAMP:()=>LW,METADATA:()=>eu,NO_TIMESTAMP:()=>DS,PENDING_LOCAL_TIME:()=>BS,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>US,RecordEncoder:()=>MS,TIMESTAMP_ASSIGN_LAST:()=>MW,TIMESTAMP_ASSIGN_NEW:()=>WI,TIMESTAMP_ASSIGN_PREVIOUS:()=>QI,TIMESTAMP_PLACEHOLDER:()=>rf,TIMESTAMP_RECORD_PREVIOUS:()=>LS,getUpdateRecord:()=>HS,handleLocalTimeForGets:()=>af});function vW(){return tu[0]=tu[0]^64,PW.getFloat64(0)}function af(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,_=l?.[eu];return _>=0&&(c.metadataFlags=_,c.localTime=l.localTime,c.value=l.value,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?.[eu]>=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,_=l[eu];return _>=0&&(c.metadataFlags=_,c.localTime=l.localTime,c.value=l.value,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,jo.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let l=0;l<jo.length;l++){let _=jo[l].deref();(!_||_.isDone||_.isCommitted)&&jo.splice(l--,1)}},i.prototype.done.isTracked=!0}return e}function HS(e,t,r){return function(n,s,i,o,c=-1,l,_,u,d="put",f,E){if(f||l==null?uc=i?.localTime?LS|QI:DS:uc=l?i?.localTime?LS|16384:WI|16384:DS,u>0&&(c|=vS),sf=c,PS=u,i?.version===o&&l===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:uc>0},m;try{f&&(h.ifVersion=m=i?.version??null);let S=e.put(n,s,h);if(l){let g=_?.user?.username;if(E&&(nf=e.encoder.encode(E)),f&&i?.localTime){let R=i?.localTime,A=r.get(R);if(A){let P=kt(A).previousLocalTime;return r.put(R,of(o,t,n,P,g,d,nf),{ifVersion:m}),S}}r.put(ru,of(o,t,n,i?.localTime?1:0,g,d,nf),{append:d!=="invalidate",instructedWrite:!0,ifVersion:m})}return S}catch(S){throw S.message+=" id: "+n+" options: "+h,S}}}var KI,CS,rf,ru,US,LW,eu,tu,PW,DS,WI,MW,QI,LS,vS,BS,UW,nf,uc,sf,PS,MS,jo,nu=Oe(()=>{KI=require("msgpackr");Zi();CS=B(x()),rf=new Uint8Array([1,1,1,1,4,64,0,0]),ru=new Uint8Array([1,1,1,1,1,0,0,0]),US=new Uint8Array([1,1,1,1,3,64,0,0]),LW=Symbol("local-timestamp"),eu=Symbol("metadata"),tu=new Uint8Array(8),PW=new DataView(tu.buffer,0,8),DS=0,WI=0,MW=1,QI=3,LS=4,vS=16,BS=1,uc=0,sf=-1,PS=0,MS=class extends KI.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(n,s){if(uc||sf>=0){let i=0,o=uc;o&&(i+=8,uc=0);let c=sf,l=PS;c>=0&&(i+=2,sf=-1,l&&(i+=8,PS=0));let _=UW=r.call(this,n,s|2048|i);nf=_.subarray((_.start||0)+i,_.end);let u=_.start||0;return o&&(rf[4]=o,rf[5]=o>>8,_.set(rf,u),u+=8),c>=0&&(_[u++]=c,_[u++]=0,l&&(_.dataView||(_.dataView=new DataView(_.buffer,_.byteOffset,_.byteLength))).setFloat64(u,l)),_}else return r.call(this,n,s)}}decode(t,r){let n=r?.start||0,s=r>-1?r:r?.end||t.length,i=t[n],o=0;try{if(i<32&&s>2){let c=n,l;if(i===2){if(t.copy)t.copy(tu,0,c),c+=8;else for(let d=0;d<8;d++)tu[d]=t[c++];l=vW(),i=t[c]}let _;i<32&&(o=i,c+=2,o&vS&&(_=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8));let u=super.decode(t.subarray(c,s),s-c);return{localTime:l,value:u,[eu]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(vW,"getTimestamp");a(af,"handleLocalTimeForGets");jo=[];setInterval(()=>{for(let e=0;e<jo.length;e++){let t=jo[e].deref();!t||t.isDone||t.isCommitted?jo.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(CS.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):CS.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(HS,"getUpdateRecord")});var su=T((fpe,JI)=>{"use strict";var zI=X(),BW=D(),{RecordEncoder:HW}=(nu(),ie(jI)),dpe=require("fs");zI.initSync();var GW=zI.get(BW.CONFIG_PARAMS.STORAGE_CACHING)!==!1,GS=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=GW&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:HW})}};JI.exports=GS});var iu=T((hpe,XI)=>{"use strict";var tn=X(),Dn=D();tn.initSync();var cf=class{static{a(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=1e3,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.eventTurnBatching=!1,this.noSync=tn.get(Dn.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||tn.get(Dn.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||tn.get(Dn.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",tn.get(Dn.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=tn.get(Dn.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),tn.get(Dn.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=tn.get(Dn.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),tn.get(Dn.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=tn.get(Dn.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),tn.get(Dn.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=tn.get(Dn.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=tn.get(Dn.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};XI.exports=cf;cf.MAX_DBS=1e4});var Ve=T((mpe,cw)=>{"use strict";var xS=require("lmdb"),ts=require("fs-extra"),rn=require("path"),lf=Ar(),tw=x(),br=Zr().LMDB_ERRORS_ENUM,uf=YI(),FS=su(),rw=iu(),eo=at(),ZI=D(),{table:qW,resetDatabases:xW}=(ge(),ie(ke)),ew=X(),rs=eo.INTERNAL_DBIS_NAME,nw=eo.DBI_DEFINITION_NAME,FW="data.mdb",kW="lock.mdb",ou=".mdb",$W="-lock",qS=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=Ln(t,r),this.key_type=this.dbi[eo.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[eo.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new xS.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function _f(e,t){if(e===void 0)throw new Error(br.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(br.ENV_NAME_REQUIRED)}a(_f,"pathEnvNameValidation");async function kS(e,t,r=!0){try{await ts.access(e)}catch(n){throw n.code==="ENOENT"?new Error(br.INVALID_BASE_PATH):n}try{let n=rn.join(e,t+ou);return await ts.access(n,ts.constants.R_OK|ts.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await ts.access(rn.join(e,t,FW),ts.constants.R_OK|ts.constants.F_OK),rn.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(br.INVALID_ENVIRONMENT)}else throw new Error(br.INVALID_ENVIRONMENT);throw n}}a(kS,"validateEnvironmentPath");function df(e,t){if(lf.validateEnv(e),t===void 0)throw new Error(br.DBI_NAME_REQUIRED)}a(df,"validateEnvDBIName");async function VW(e,t,r=!1,n=!1){_f(e,t);let s=rn.basename(e);t=t.toString();let i=ew.get(ZI.CONFIG_PARAMS.DATABASES);i||ew.setProperty(ZI.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await kS(e,t,n),sw(e,t,r)}catch(o){if(o.message===br.INVALID_ENVIRONMENT){let c=rn.join(e,t);await ts.mkdirp(n?c:e);let l=new rw(n?c:c+ou,!1),_=xS.open(l);_.dbis=Object.create(null);let u=new FS(!1);_.openDB(rs,u),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=$S(e,t,r);return _[eo.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(VW,"createEnvironment");async function YW(e,t,r,n=!0){_f(e,t),t=t.toString();let s=rn.join(e,t);return qW({table:t,database:rn.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(YW,"copyEnvironment");async function sw(e,t,r=!1){_f(e,t),t=t.toString();let n=$S(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 kS(e,t),i=rn.join(e,t+ou),o=s!=i,c=new rw(s,o),l=xS.open(c);l.dbis=Object.create(null);let _=ow(l);for(let u=0;u<_.length;u++)Ln(l,_[u]);return l[eo.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}a(sw,"openEnvironment");async function KW(e,t,r=!1){_f(e,t),t=t.toString();let n=rn.join(e,t+ou),s=await kS(e,t);if(global.lmdb_map!==void 0){let i=$S(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await iw(o),delete global.lmdb_map[i]}}await ts.remove(s),await ts.remove(s===n?s+$W:rn.join(rn.dirname(s),kW))}a(KW,"deleteEnvironment");async function iw(e){lf.validateEnv(e);let t=e[eo.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(iw,"closeEnvironment");function $S(e,t,r=!1){let s=`${rn.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a($S,"getCachedEnvironmentName");function WW(e){lf.validateEnv(e);let t=Object.create(null),r=Ln(e,rs);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==rs)try{t[n]=Object.assign(new uf,s)}catch{tw.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(WW,"listDBIDefinitions");function ow(e){lf.validateEnv(e);let t=[],r=Ln(e,rs);for(let{key:n}of r.getRange({start:!1}))n!==rs&&t.push(n);return t}a(ow,"listDBIs");function QW(e,t){let n=Ln(e,rs).getEntry(t),s=new uf;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{tw.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(QW,"getDBIDefinition");function aw(e,t,r,n=!r){if(df(e,t),t=t.toString(),t===rs)throw new Error(br.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Ln(e,t)}catch(s){if(s.message===br.DBI_DOES_NOT_EXIST){let i=new FS(r,n===!0),o=e.openDB(t,i),c=new uf(r===!0,n);return o[nw]=c,Ln(e,rs).putSync(t,c),e.dbis[t]=o,o}throw s}}a(aw,"createDBI");function Ln(e,t){if(df(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==rs?r=QW(e,t):r=new uf,r===void 0)throw new Error(br.DBI_DOES_NOT_EXIST);let n;try{let s=new FS(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(br.DBI_DOES_NOT_EXIST):s}return n[nw]=r,e.dbis[t]=n,n}a(Ln,"openDBI");function jW(e,t){df(e,t),t=t.toString();let r=Ln(e,t),n=r.getStats();return r[eo.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(jW,"statDBI");async function zW(e,t){try{let r=rn.join(e,t+ou);return(await ts.stat(r)).size}catch{throw new Error(br.INVALID_ENVIRONMENT)}}a(zW,"environmentDataSize");function JW(e,t){if(df(e,t),t=t.toString(),t===rs)throw new Error(br.CANNOT_DROP_INTERNAL_DBIS_NAME);Ln(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Ln(e,rs).removeSync(t)}a(JW,"dropDBI");function XW(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{Ln(e,i)}catch(o){if(o.message===br.DBI_DOES_NOT_EXIST)aw(e,i,i!==t,i===t),n=!0;else throw o}}n&&xW()}a(XW,"initializeDBIs");cw.exports={openDBI:Ln,openEnvironment:sw,createEnvironment:VW,listDBIs:ow,listDBIDefinitions:WW,createDBI:aw,dropDBI:JW,statDBI:jW,deleteEnvironment:KW,initializeDBIs:XW,TransactionCursor:qS,environmentDataSize:zW,copyEnvironment:YW,closeEnvironment:iw}});var uw=T((Tpe,lw)=>{"use strict";var VS=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};lw.exports=VS});var dw=T((Rpe,_w)=>{"use strict";var YS=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}};_w.exports=YS});var Ew=T((Ope,fw)=>{"use strict";var KS=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};fw.exports=KS});var Jo=T((wpe,mw)=>{"use strict";var ZW=Ve(),eQ=uw(),tQ=dw(),rQ=Ew(),ys=Ar(),au=Zr().LMDB_ERRORS_ENUM,nQ=at(),ai=D(),sQ=K(),iQ=require("uuid"),Npe=require("lmdb"),{handleHDBError:oQ,hdb_errors:aQ}=oe(),{OVERFLOW_MARKER:ype,MAX_SEARCH_KEY_LENGTH:Ipe}=nQ,hw=X();hw.initSync();var ff=hw.get(ai.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),WS=ai.TIME_STAMP_NAMES_ENUM.CREATED_TIME,zo=ai.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function cQ(e,t,r,n,s=ys.getNextMonotonicTime()){JS(e,t,r,n),QS(e,t,r);let i=new eQ,o=[],c=[];for(let l=0;l<n.length;l++){let _=n[l];pw(_,!0,s);let u=lQ(e,t,r,_),d=_[t];o.push(u),c.push(d)}return jS(o,c,n,i,s)}a(cQ,"insertRecords");function lQ(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 u=c([[{}]]);Array.isArray(u)&&(c=u[0][ai.FUNC_VAL],n[o]=c)}let l=ys.getIndexedValues(c),_=e.dbis[o];if(l){ff&&_.prefetch(l.map(u=>({key:u,value:s})),Ef);for(let u=0,d=l.length;u<d;u++)_.put(l[u],s)}}ff&&e.dbis[t].prefetch([s],Ef),e.dbis[t].put(s,n,n[zo])})}a(lQ,"insertRecord");function uQ(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(uQ,"removeSkippedRecords");function pw(e,t,r){let n=r>0;(n||!Number.isInteger(e[zo]))&&(e[zo]=r||(r=ys.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[WS]))&&(e[WS]=r||ys.getNextMonotonicTime()):delete e[WS]}a(pw,"setTimestamps");function QS(e,t,r){r.indexOf(ai.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(ai.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(ai.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(ai.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),ZW.initializeDBIs(e,t,r)}a(QS,"initializeTransaction");async function _Q(e,t,r,n,s=ys.getNextMonotonicTime()){JS(e,t,r,n),QS(e,t,r);let i=new tQ,o=[],c=[],l=[];for(let _=0;_<n.length;_++){let u=n[_],d=u[t],f;try{f=zS(e,t,u,d,i,!0,s)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(f),l.push(d)}return jS(c,l,n,i,s,o)}a(_Q,"updateRecords");async function dQ(e,t,r,n,s=ys.getNextMonotonicTime()){try{JS(e,t,r,n)}catch(l){throw oQ(l,l.message,aQ.HTTP_STATUS_CODES.BAD_REQUEST)}QS(e,t,r);let i=new rQ,o=[],c=[];for(let l=0;l<n.length;l++){let _=n[l],u;sQ.isEmpty(_[t])?(u=iQ.v4(),_[t]=u):u=_[t];let d=zS(e,t,_,u,i,!1,s);o.push(d),c.push(u)}return jS(o,c,n,i,s)}a(dQ,"upsertRecords");async function jS(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||ys.getNextMonotonicTime(),uQ(r,i),n}a(jS,"finalizeWrite");function zS(e,t,r,n,s,i=!1,o){let c=e.dbis[t],l=c.getEntry(n),_=l?.value,u=_;if(!_){if(i)return!1;_={}}if(pw(r,!u,o),Number.isInteger(r[zo])&&_[zo]>r[zo])return!1;u&&s.original_records.push(_);let d,f=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let m=r[h],S=e.dbis[h];if(S===void 0)continue;let g=_[h];if(typeof m=="function"){let A=m([[_]]);Array.isArray(A)&&(m=A[0][ai.FUNC_VAL],r[h]=m)}if(m===g)continue;let R=ys.getIndexedValues(g);if(R){ff&&S.prefetch(R.map(A=>({key:A,value:n})),Ef);for(let A=0,P=R.length;A<P;A++)S.remove(R[A],n)}if(R=ys.getIndexedValues(m),R){ff&&S.prefetch(R.map(A=>({key:A,value:n})),Ef);for(let A=0,P=R.length;A<P;A++)S.put(R[A],n)}}let E=Object.assign({},_,r);c.put(n,E,E[zo])},"do_put");return l?d=c.ifVersion(n,l.version,f):d=c.ifNoExists(n,f),d.then(E=>E?!0:zS(e,t,r,n,s,i,o))}a(zS,"updateUpsertRecord");function fQ(e,t,r){if(ys.validateEnv(e),t===void 0)throw new Error(au.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(au.WRITE_ATTRIBUTES_REQUIRED):new Error(au.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(fQ,"validateBasic");function JS(e,t,r,n){if(fQ(e,t,r),!Array.isArray(n))throw n===void 0?new Error(au.RECORDS_REQUIRED):new Error(au.RECORDS_MUST_BE_ARRAY)}a(JS,"validateWrite");function Ef(){}a(Ef,"noop");mw.exports={insertRecords:cQ,updateRecords:_Q,upsertRecords:dQ}});var ci=T((Dpe,EQ)=>{EQ.exports={hdb_table:{hash_attribute:"id",name:"hdb_table",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"name"},{attribute:"hash_attribute"},{attribute:"schema"},{attribute:"residence"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_attribute:{hash_attribute:"id",name:"hdb_attribute",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"schema"},{attribute:"table"},{attribute:"attribute"},{attribute:"schema_table"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_schema:{hash_attribute:"name",name:"hdb_schema",schema:"system",residence:["*"],attributes:[{attribute:"name"},{attribute:"createddate"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]},hdb_durable_session:{hash_attribute:"id",name:"hdb_durable_session",schema:"system",attributes:[{attribute:"id"}]},hdb_session_will:{hash_attribute:"id",name:"hdb_session_will",schema:"system",attributes:[{attribute:"id"}]}}});var ws=T((Lpe,gw)=>{"use strict";var Tw=K(),Sw=D(),_c=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Is=require("joi"),to={schema_format:{pattern:_c,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},hQ=Is.alternatives(Is.string().min(1).max(to.schema_length.maximum).pattern(_c).messages({"string.pattern.base":"{:#label} "+to.schema_format.message}),Is.number(),Is.array()).required(),pQ=Is.alternatives(Is.string().min(1).max(to.schema_length.maximum).pattern(_c).messages({"string.pattern.base":"{:#label} "+to.schema_format.message}),Is.number()),mQ=Is.alternatives(Is.string().min(1).max(to.schema_length.maximum).pattern(_c).messages({"string.pattern.base":"{:#label} "+to.schema_format.message}),Is.number()).required();function SQ(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>to.schema_length.maximum?`'${e}' maximum of 250 characters`:_c.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(SQ,"checkValidTable");function TQ(e,t){return Tw.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(TQ,"validateSchemaExists");function gQ(e,t){let r=t.state.ancestors[0].schema;return Tw.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(gQ,"validateTableExists");function RQ(e,t){return e.toLowerCase()===Sw.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${Sw.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(RQ,"validateSchemaName");gw.exports={common_validators:to,schema_regex:_c,hdb_schema_table:hQ,validateSchemaExists:TQ,validateTableExists:gQ,validateSchemaName:RQ,checkValidTable:SQ,hdb_database:pQ,hdb_table:mQ}});var tt=T((Mpe,Rw)=>{"use strict";var Nr=require("validate.js");Nr.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||Nr.validators.type.checks[t](e)?null:` must be a '${t}' value`};Nr.validators.type.checks={Object:function(e){return Nr.isObject(e)&&!Nr.isArray(e)},Array:Nr.isArray,Integer:Nr.isInteger,Number:Nr.isNumber,String:Nr.isString,Date:Nr.isDate,Boolean:function(e){return typeof e=="boolean"}};Nr.validators.hasValidFileExt=function(e,t){return Nr.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};Rw.exports={validateObject:AQ,validateObjectAsync:OQ,validateBySchema:bQ};function AQ(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Nr(e,t,{format:"flat"});return r?new Error(r):null}a(AQ,"validateObject");async function OQ(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Nr.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(OQ,"validateObjectAsync");function bQ(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(bQ,"validateBySchema")});var hf=T((vpe,Aw)=>{var{common_validators:Cs}=ws(),lu=tt(),cu="is required",At={database:{presence:!1,format:Cs.schema_format,length:Cs.schema_length},schema:{presence:!1,format:Cs.schema_format,length:Cs.schema_length},table:{presence:!0,format:Cs.schema_format,length:Cs.schema_length},attribute:{presence:!0,format:Cs.schema_format,length:Cs.schema_length},hash_attribute:{presence:!0,format:Cs.schema_format,length:Cs.schema_length}};function uu(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(uu,"makeAttributesStrings");function NQ(e){return e=uu(e),At.table.presence=!1,At.attribute.presence=!1,At.hash_attribute.presence=!1,lu.validateObject(e,At)}a(NQ,"schema_object");function yQ(e){return e=uu(e),At.table.presence={message:cu},At.attribute.presence=!1,At.hash_attribute.presence=!1,lu.validateObject(e,At)}a(yQ,"table_object");function IQ(e){return e=uu(e),At.table.presence={message:cu},At.attribute.presence=!1,lu.validateObject(e,At)}a(IQ,"create_table_object");function wQ(e){return e=uu(e),At.table.presence={message:cu},At.attribute.presence={message:cu},At.hash_attribute.presence=!1,lu.validateObject(e,At)}a(wQ,"attribute_object");function CQ(e){return e=uu(e),At.table.presence={message:cu},At.attribute.presence=!1,At.hash_attribute.presence=!1,lu.validateObject(e,At)}a(CQ,"describe_table");function DQ(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(DQ,"validateTableResidence");Aw.exports={schema_object:NQ,create_table_object:IQ,table_object:yQ,attribute_object:wQ,describe_table:CQ,validateTableResidence:DQ}});var bw=T((Hpe,Ow)=>{"use strict";var LQ=require("uuid"),XS=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||LQ.v4(),this.schema_table=`${this.schema}.${this.table}`}};Ow.exports=XS});var pf=T((qpe,Nw)=>{"use strict";var PQ=bw(),ZS=class extends PQ{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}};Nw.exports=ZS});var Iw=T((Fpe,yw)=>{"use strict";yw.exports=UQ;var MQ="inserted";function UQ(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===MQ?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(UQ,"returnObject")});var mf=T(($pe,Pw)=>{"use strict";var vQ=D(),eT=Ve(),BQ=Jo(),{getSystemSchemaPath:HQ,getSchemaPath:GQ}=je(),qQ=ci(),xQ=hf(),FQ=pf(),kQ=Iw(),{handleHDBError:ww,hdb_errors:Dw}=oe(),Cw=K(),{HTTP_STATUS_CODES:$Q}=Dw,tT=qQ.hdb_attribute,Lw=[];for(let e=0;e<tT.attributes.length;e++)Lw.push(tT.attributes[e].attribute);var VQ="inserted";Pw.exports=YQ;async function YQ(e){let t=xQ.attribute_object(e);if(t)throw ww(new Error,t.message,Dw.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&Cw.checkGlobalSchemaTable(e.schema,e.table);if(r)throw ww(new Error,r,$Q.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=Cw.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 FQ(e.schema,e.table,e.attribute,e.id);try{let i=await eT.openEnvironment(GQ(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}`);eT.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await eT.openEnvironment(HQ(),vQ.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await BQ.insertRecords(o,tT.hash_attribute,Lw,[s]);return kQ(VQ,c,{records:[s]},l)}catch(i){throw i}}a(YQ,"lmdbCreateAttribute")});var nT=T((Ype,Uw)=>{var{hdb_table:KQ,hdb_database:Mw}=ws(),WQ=tt(),rT=require("joi"),QQ={undefined:"undefined",null:"null"},jQ=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||QQ[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"),zQ=rT.object({database:Mw,schema:Mw,table:KQ,records:rT.array().items(rT.object().custom(jQ)).required()});Uw.exports=function(e){return WQ.validateBySchema(e,zQ)}});var _u=T((Qpe,Bw)=>{"use strict";var li=K(),vw=x(),Wpe=nT(),{getDatabases:JQ}=(ge(),ie(ke)),{ClientError:Xo}=oe();Bw.exports=XQ;function XQ(e){if(li.isEmpty(e))throw new Xo("invalid update parameters defined.");if(li.isEmptyOrZeroLength(e.schema))throw new Xo("invalid schema specified.");if(li.isEmptyOrZeroLength(e.table))throw new Xo("invalid table specified.");if(!Array.isArray(e.records))throw new Xo("records must be an array");let t=JQ()[e.schema]?.[e.table];if(li.isEmpty(t))throw new Xo(`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&&li.isEmptyOrZeroLength(o[r]))throw vw.error("a valid hash attribute must be provided with update record:",o),new Xo("a valid hash attribute must be provided with update record, check log for more info");if(!li.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw vw.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Xo(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!li.isEmpty(o[r])&&o[r]!==""&&n.has(li.autoCast(o[r]))&&(o.skip=!0),n.add(li.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(XQ,"insertUpdateValidate")});var du=T((zpe,Hw)=>{"use strict";var ZQ=D().OPERATIONS_ENUM,sT=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=ZQ.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};Hw.exports=sT});var fu=T((Zpe,qw)=>{"use strict";var Xpe=du(),Sf=D(),iT=K(),Gw=x(),ej=require("uuid"),{handleHDBError:Tf,hdb_errors:tj}=oe(),{HDB_ERROR_MSGS:gf,HTTP_STATUS_CODES:Rf}=tj;qw.exports=rj;function rj(e,t,r){for(let s=0;s<t.length;s++)nj(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];sj(i,r,e.operation)}}a(rj,"processRows");function nj(e){if(Buffer.byteLength(String(e))>Sf.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Tf(new Error,gf.ATTR_NAME_LENGTH_ERR(e),Rf.BAD_REQUEST,void 0,void 0,!0);if(iT.isEmptyOrZeroLength(e)||iT.isEmpty(e.trim()))throw Tf(new Error,gf.ATTR_NAME_NULLISH_ERR,Rf.BAD_REQUEST,void 0,void 0,!0)}a(nj,"validateAttribute");function sj(e,t,r){if(!e.hasOwnProperty(t)||iT.isEmptyOrZeroLength(e[t])){if(r===Sf.OPERATIONS_ENUM.INSERT||r===Sf.OPERATIONS_ENUM.UPSERT){e[t]=ej.v4();return}throw Gw.error("Update transaction aborted due to record with no hash value:",e),Tf(new Error,gf.RECORD_MISSING_HASH_ERR,Rf.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Sf.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Gw.error(e),Tf(new Error,gf.HASH_VAL_LENGTH_ERR,Rf.BAD_REQUEST,void 0,void 0,!0)}a(sj,"validateHash")});var Fw=T((tme,xw)=>{"use strict";var oT=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};xw.exports=oT});var Vw=T((nme,$w)=>{"use strict";var aT=Ve(),ij=x(),kw=Zr().LMDB_ERRORS_ENUM;$w.exports=oj;async function oj(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 aT.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==kw.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await aT.closeEnvironment(global.lmdb_map[n]),await aT.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==kw.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){ij.error(t)}}a(oj,"cleanLMDBMap")});var ui=T((ime,Qw)=>{"use strict";var Eu=require("crypto"),aj=X(),{CONFIG_PARAMS:cj}=D(),Kw="aes-256-cbc",lj=32,uj=16,cT=64,Ww=32,_j=cT+Ww,Yw=new Map;Qw.exports={encrypt:dj,decrypt:fj,createNatsTableStreamName:Ej};function dj(e){let t=Eu.randomBytes(lj),r=Eu.randomBytes(uj),n=Eu.createCipheriv(Kw,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(dj,"encrypt");function fj(e){let t=e.substr(0,cT),r=e.substr(cT,Ww),n=e.substr(_j,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Eu.createDecipheriv(Kw,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(fj,"decrypt");function Ej(e,t){let r=aj.get(cj.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=Yw.get(r);return n||(n=Eu.createHash("md5").update(r).digest("hex"),Yw.set(r,n)),n}a(Ej,"createNatsTableStreamName")});var _i=T((cme,zw)=>{"use strict";var ame=ir(),Af=x(),jw=hf(),hj=ui(),Of=K(),{handleHDBError:bf,hdb_errors:pj}=oe(),{HDB_ERROR_MSGS:Nf,HTTP_STATUS_CODES:lT}=pj,mj=X();mj.initSync();var{getDatabases:uT}=(ge(),ie(ke));zw.exports={describeAll:Sj,describeTable:yf,describeSchema:Tj};async function Sj(e){try{let t=Of.isEmptyOrZeroLength(e),r,n;t||(r=e.hdb_user.role.permission,n=r.super_user||r.cluster_user);let s=uT(),i={},o={},c=[],l=e?.exact_count;for(let u in s){i[u]=!0,!t&&!n&&(o[u]=e.hdb_user.role.permission[u].describe);let d=s[u];for(let f in d)try{let E;if(t||n)E=await yf({schema:u,table:f,exact_count:l});else if(r&&r[u].describe&&r[u].tables[f].describe){let h=r[u].tables[f].attribute_permissions;E=await yf({schema:u,table:f,exact_count:l},h)}E&&c.push(E)}catch(E){Af.error(E)}}let _={};for(let u in c)t||n?(_[c[u].schema]==null&&(_[c[u].schema]={}),_[c[u].schema][c[u].name]=c[u],i[c[u].schema]&&delete i[c[u].schema]):o[c[u].schema]&&(_[c[u].schema]==null&&(_[c[u].schema]={}),_[c[u].schema][c[u].name]=c[u],i[c[u].schema]&&delete i[c[u].schema]);for(let u in i)t||n?_[u]={}:o[u]&&(_[u]={});return _}catch(t){return Af.error("Got an error in describeAll"),Af.error(t),bf(new Error,Nf.DESCRIBE_ALL_ERR)}}a(Sj,"describeAll");async function yf(e,t){Of.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=jw.describe_table(e);if(i)throw i;let c=uT()[r];if(!c)throw bf(new Error,Nf.SCHEMA_NOT_FOUND(e.schema),lT.NOT_FOUND);let l=c[n];if(!l)throw bf(new Error,Nf.TABLE_NOT_FOUND(e.schema,e.table),lT.NOT_FOUND);function _(f){u.push(Object.assign({},{attribute:f.attribute,type:f.type,elements:f.elements?.type,indexed:f.indexed,is_primary_key:f.isPrimaryKey,assigned_created_time:f.assignCreatedTime,assigned_updated_time:f.assignUpdatedTime,nullable:f.nullable,properties:f.properties?f.properties.map(E=>({type:E.type,name:E.name})):void 0}))}a(_,"pushAtt");let u=[];if(s){let f={};s.forEach(E=>{E.describe&&(f[E.attribute_name]=!0)}),l.attributes.forEach(E=>{f[E.name]&&_(E)})}else l.attributes?.forEach(f=>_(f));let d={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:u};d.clustering_stream_name=hj.createNatsTableStreamName(d.schema,d.name);try{let f=l.getRecordCount({exactCount:e.exact_count==="true"});d.record_count=f.recordCount,d.estimated_record_range=f.estimatedRange;let E=l.auditStore;if(E)for(let h of E.getKeys({reverse:!0,limit:1}))d.last_updated_record=h[0];if(!d.last_updated_record&&l.indices.__updatedtime__)for(let h of l.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))d.last_updated_record=h}catch(f){Af.warn(`unable to stat table dbi due to ${f}`)}return d}a(yf,"descTable");async function Tj(e){Of.transformReq(e);let t=jw.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=uT()[n];if(!i)throw bf(new Error,Nf.SCHEMA_NOT_FOUND(e.schema),lT.NOT_FOUND);let o={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),Of.isEmpty(l)||l.describe){let _=await yf({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(Tj,"describeSchema")});var Pn=T((dme,tC)=>{var gj=ci(),{callbackify:Xw,promisify:Rj}=require("util"),{getDatabases:Zw}=(ge(),ie(ke));tC.exports={setSchemaDataToGlobal:Jw,getTableSchema:Aj,getSystemSchema:Oj,setSchemaDataToGlobalAsync:Rj(Jw)};var eC=_i(),ume=Xw(eC.describeAll),_me=Xw(eC.describeTable);function Jw(e){global.hdb_schema=Zw(),e&&e()}a(Jw,"setSchemaDataToGlobal");function Aj(e,t,r){let n=Zw()[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(Aj,"getTableSchema");function Oj(){return gj}a(Oj,"getSystemSchema")});var yr=T((Eme,iC)=>{"use strict";var wf=nT(),Xt=K(),bj=require("util"),Cf=Mn(),Nj=Pn(),rC=x(),{handleHDBError:Zo,hdb_errors:yj}=oe(),{HTTP_STATUS_CODES:ea}=yj,Ij=bj.promisify(Nj.getTableSchema),wj="updated",nC="inserted",sC="upserted";iC.exports={insert:Dj,update:Lj,upsert:Pj,validation:Cj,flush:Mj};async function Cj(e){if(Xt.isEmpty(e))throw new Error("invalid update parameters defined.");if(Xt.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Xt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await Ij(e.schema,e.table),r=wf(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&&Xt.isEmptyOrZeroLength(c[n]))throw rC.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(!Xt.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw rC.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!Xt.isEmpty(c[n])&&c[n]!==""&&s.has(Xt.autoCast(c[n]))&&(c.skip=!0),s.add(Xt.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(Cj,"validation");async function Dj(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=wf(e);if(t)throw Zo(new Error,t.message,ea.BAD_REQUEST);Xt.transformReq(e);let r=Xt.checkSchemaTableExist(e.schema,e.table);if(r)throw Zo(new Error,r,ea.BAD_REQUEST);let n=await Cf.createRecords(e);return If(nC,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(Dj,"insertData");async function Lj(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=wf(e);if(t)throw Zo(new Error,t.message,ea.BAD_REQUEST);Xt.transformReq(e);let r=Xt.checkSchemaTableExist(e.schema,e.table);if(r)throw Zo(new Error,r,ea.BAD_REQUEST);let n=await Cf.updateRecords(e);return Xt.isEmpty(n.existing_rows)?If(wj,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):If(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(Lj,"updateData");async function Pj(e){if(e.operation!=="upsert")throw Zo(new Error,"invalid operation, must be upsert",ea.INTERNAL_SERVER_ERROR);let t=wf(e);if(t)throw Zo(new Error,t.message,ea.BAD_REQUEST);Xt.transformReq(e);let r=Xt.checkSchemaTableExist(e.schema,e.table);if(r)throw Zo(new Error,r,ea.BAD_REQUEST);let n=await Cf.upsertRecords(e);return If(sC,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(Pj,"upsertData");function If(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===nC?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===sC?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(If,"returnObject");function Mj(e){return Xt.transformReq(e),Cf.flush(e.schema,e.table)}a(Mj,"flush")});var dT=T((pme,cC)=>{var Uj=tt(),_T=require("joi"),{hdb_table:vj,hdb_database:oC}=ws(),aC={schema:oC,database:oC,table:vj},Bj={date:_T.date().iso().required()},Hj={timestamp:_T.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};cC.exports=function(e,t){let r=t==="timestamp"?{...aC,...Hj}:{...aC,...Bj},n=_T.object(r);return Uj.validateBySchema(e,n)}});var _C=T((mme,uC)=>{var Gj=tt(),fT=require("joi"),{hdb_table:qj,hdb_database:lC}=ws(),xj=fT.object({schema:lC,database:lC,table:qj,hash_values:fT.array().required(),ids:fT.array()});uC.exports=function(e){return Gj.validateBySchema(e,xj)}});var mT=T((Sme,dC)=>{"use strict";var ET=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}},hT=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}},pT=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};dC.exports={InsertObject:ET,NoSQLSeachObject:hT,DeleteResponseObject:pT}});var na=T((gme,mC)=>{"use strict";var EC=dT(),Fj=_C(),ta=K(),fC=require("moment"),hC=x(),{promisify:kj,callbackify:$j}=require("util"),ra=D(),Vj=Pn(),ST=kj(Vj.getTableSchema),TT=Mn(),{DeleteResponseObject:Yj}=mT(),{handleHDBError:ro,hdb_errors:Kj}=oe(),{HDB_ERROR_MSGS:Df,HTTP_STATUS_CODES:no}=Kj,Wj="records successfully deleted",Qj=$j(pC);mC.exports={delete:Qj,deleteRecord:pC,deleteFilesBefore:jj,deleteAuditLogsBefore:zj};async function jj(e){let t=EC(e,"date");if(t)throw ro(t,t.message,no.BAD_REQUEST,void 0,void 0,!0);if(ta.transformReq(e),!fC(e.date,fC.ISO_8601).isValid())throw ro(new Error,Df.INVALID_DATE,no.BAD_REQUEST,ra.LOG_LEVELS.ERROR,Df.INVALID_DATE,!0);let n=ta.checkSchemaTableExist(e.schema,e.table);if(n)throw ro(new Error,n,no.NOT_FOUND,ra.LOG_LEVELS.ERROR,n,!0);let s=await TT.deleteRecordsBefore(e);if(await ST(e.schema,e.table),hC.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(jj,"deleteFilesBefore");async function zj(e){let t=EC(e,"timestamp");if(t)throw ro(t,t.message,no.BAD_REQUEST,void 0,void 0,!0);if(ta.transformReq(e),isNaN(e.timestamp))throw ro(new Error,Df.INVALID_VALUE("Timestamp"),no.BAD_REQUEST,ra.LOG_LEVELS.ERROR,Df.INVALID_VALUE("Timestamp"),!0);let r=ta.checkSchemaTableExist(e.schema,e.table);if(r)throw ro(new Error,r,no.NOT_FOUND,ra.LOG_LEVELS.ERROR,r,!0);let n=await TT.deleteAuditLogsBefore(e);return await ST(e.schema,e.table),hC.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(zj,"deleteAuditLogsBefore");async function pC(e){e.ids&&(e.hash_values=e.ids);let t=Fj(e);if(t)throw ro(t,t.message,no.BAD_REQUEST,void 0,void 0,!0);ta.transformReq(e);let r=ta.checkSchemaTableExist(e.schema,e.table);if(r)throw ro(new Error,r,no.NOT_FOUND,ra.LOG_LEVELS.ERROR,r,!0);try{await ST(e.schema,e.table);let n=await TT.deleteRecords(e);return ta.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${Wj}`),n}catch(n){if(n.message===ra.SEARCH_NOT_FOUND_MESSAGE){let s=new Yj;return s.message=ra.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(pC,"deleteRecord")});var Lf=T((Ame,gC)=>{var Jj=require("crypto"),SC=9;function Xj(e){let t=ez(SC),r=TC(e+t);return t+r}a(Xj,"createHash");function Zj(e,t){let r=e?.substr(0,SC),n=r+TC(t+r);return e===n}a(Zj,"validateHash");function ez(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(ez,"generateSalt");function TC(e){return Jj.createHash("md5").update(e).digest("hex")}a(TC,"md5");gC.exports={hash:Xj,validate:Zj}});var AC=T((bme,RC)=>{var gT=tt(),or={username:{presence:!0,format:"[\\w\\-\\_]+",exclusion:{within:["system"],message:"You cannot create tables within the system schema"}},password:{presence:!0},role:{presence:!0,format:"[\\w\\-\\_]+"},active:{presence:!0,inclusion:{within:[!0,!1],message:"must be a boolean"}}};function tz(e){return or.password.presence=!0,or.username.presence=!0,or.role.presence=!0,or.active.presence=!0,gT.validateObject(e,or)}a(tz,"addUserValidation");function rz(e){return or.password.presence=!1,or.username.presence=!0,or.role.presence=!1,or.active.presence=!1,gT.validateObject(e,or)}a(rz,"alterUserValidation");function nz(e){return or.password.presence=!1,or.username.presence=!0,or.role.presence=!1,or.active.presence=!1,gT.validateObject(e,or)}a(nz,"dropUserValidation");RC.exports={addUserValidation:tz,alterUserValidation:rz,dropUserValidation:nz}});var Xe=T((Ime,bC)=>{"use strict";var{platform:yme}=require("os"),sz="nats-server.zip",RT="nats-server",iz=process.platform==="win32"?`${RT}.exe`:RT,oz=/^[^\s.,*>]+$/,OC="__request__",az=a(e=>`${e}.${OC}`,"REQUEST_SUBJECT"),cz={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},lz={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},uz={HUB:"hub.pid",LEAF:"leaf.pid"},_z={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},dz={SUCCESS:"success",ERROR:"error"},fz={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},Ez={TXN:"txn",MSGID:"msgid"},dc={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},hz={[dc.ERR]:1,[dc.WRN]:2,[dc.INF]:3,[dc.DBG]:4,[dc.TRC]:5},pz={debug:"-D",trace:"-DVV"};bC.exports={NATS_SERVER_ZIP:sz,NATS_SERVER_NAME:RT,NATS_BINARY_NAME:iz,PID_FILES:uz,NATS_CONFIG_FILES:lz,SERVER_SUFFIX:_z,NATS_TERM_CONSTRAINTS_RX:oz,REQUEST_SUFFIX:OC,UPDATE_REMOTE_RESPONSE_STATUSES:dz,CLUSTER_STATUS_STATUSES:fz,REQUEST_SUBJECT:az,SUBJECT_PREFIXES:Ez,MSG_HEADERS:cz,LOG_LEVELS:dc,LOG_LEVEL_FLAGS:pz,LOG_LEVEL_HIERARCHY:hz}});var AT=T((Cme,NC)=>{"use strict";var mz={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
|
|
6
6
|
`),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
|
|
7
7
|
`)},Sz="certificate.pem",Tz="privateKey.pem",gz="ca.pem";NC.exports={CERTIFICATE_VALUES:mz,CERTIFICATE_PEM_NAME:Sz,PRIVATEKEY_PEM_NAME:Tz,CA_PEM_NAME:gz}});var bT=T((Lme,LC)=>{"use strict";var CC=require("fs-extra"),ce=require("joi"),Rz=require("os"),{boolean:ye,string:ar,number:rt,array:OT}=ce.types(),{totalmem:yC}=require("os"),sa=require("path"),Az=x(),Pf=K(),Dme=AT(),IC=D(),Oz=tt(),wC="log",bz="components",Nz="Invalid logging.rotation.maxSize unit. Available units are G, M or K",yz="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",Iz="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",wz="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",Cz="rootPath config parameter is undefined",Dz="clustering.enabled config parameter is undefined",ia=rt.min(0).required(),Mf=OT.items({host:ar.required(),port:ia}).empty(null),Ds,DC=!1;LC.exports={configValidator:Lz,routesValidator:Hz,route_constraints:Mf};function Lz(e,t=!1){if(DC=t,Ds=e.rootPath,Pf.isEmpty(Ds))throw Cz;let r=ye.required(),n=rt.min(0).max(1e3).empty(null).default(Bz),s=ar.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(hu),i=ar.optional().empty(null),o=ar.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=ce.string().empty(null).default(hu),l=ce.custom(Mz).empty(null).default(hu),_=e.clustering?.enabled;if(Pf.isEmpty(_))throw Dz;let u;return _===!0?u=ce.object({enabled:r,hubServer:ce.object({cluster:ce.object({name:ce.required().empty(null),network:ce.object({port:ia,routes:Mf}).required()}).required(),leafNodes:ce.object({network:ce.object({port:ia}).required()}).required(),network:ce.object({port:ia}).required()}).required(),leafServer:ce.object({network:ce.object({port:ia,routes:Mf}).required(),streams:ce.object({maxAge:rt.min(120).allow(null).optional(),maxBytes:rt.min(1).allow(null).optional(),maxMsgs:rt.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:ce.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:ye.optional(),databaseLevel:ye.optional(),tls:ce.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ye.required(),verify:ye.optional()}),user:ar.optional().empty(null)}).required():u=ce.object({enabled:r,tls:ce.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ye.required()})}).required(),ce.object({authentication:ce.object({authorizeLocal:ye,cacheTTL:rt.required(),enableSessions:ye}),analytics:ce.object({aggregatePeriod:rt}),componentsRoot:s.optional(),clustering:u,localStudio:ce.object({enabled:r}).required(),logging:ce.object({auditAuthEvents:ce.object({logFailed:ye,logSuccessful:ye}),file:ye.required(),level:ce.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ce.object({enabled:ye.optional(),compress:ye.optional(),interval:ar.custom(vz).optional().empty(null),maxSize:ar.custom(Uz).optional().empty(null),path:ar.optional().empty(null).default(hu)}).required(),root:s,stdStreams:ye.required(),auditLog:ye.required()}).required(),operationsApi:ce.object({network:ce.object({cors:ye.optional(),corsAccessList:OT.optional(),headersTimeout:rt.min(1).optional(),keepAliveTimeout:rt.min(1).optional(),port:rt.optional().empty(null),domainSocket:ce.optional().empty("hdb/operations-server").default(hu),securePort:rt.optional().empty(null),timeout:rt.min(1).optional()}).optional(),tls:ce.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:ar.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ce.object({network:ce.object({port:ia,securePort:ia,mtls:ce.alternatives([ye.optional(),ce.object({user:ar.optional(),certificateAuthority:i,required:ye.optional()})])}).required(),webSocket:ye.optional(),requireAuthentication:ye.optional()}),http:ce.object({compressionThreshold:rt.optional(),cors:ye.optional(),corsAccessList:OT.optional(),headersTimeout:rt.min(1).optional(),port:rt.min(0).optional().empty(null),securePort:rt.min(0).optional().empty(null),maxHeaderSize:rt.optional(),mtls:ce.alternatives([ye.optional(),ce.object({user:ar.optional(),certificateAuthority:i,required:ye.optional()})])}).required(),threads:ce.alternatives(n.optional(),ce.object({count:n.optional(),debug:ce.alternatives(ye.optional(),ce.object({startingPort:rt.min(1).optional(),host:ar.optional(),waitForDebugger:ye.optional()})),maxHeapMemory:rt.min(0).optional()})),storage:ce.object({writeAsync:ye.required(),overlappingSync:ye.optional(),caching:ye.optional(),compression:ce.alternatives([ye.optional(),ce.object({dictionary:ar.optional(),threshold:rt.optional()})]),compactOnStart:ye.optional(),compactOnStartKeepBackup:ye.optional(),noReadAhead:ye.optional(),path:l,prefetchWrites:ye.optional(),maxFreeSpaceToLoad:rt.optional(),maxFreeSpaceToRetain:rt.optional()}).required(),ignoreScripts:ye.optional(),tls:ce.object({certificate:i.optional(),certificateAuthority:i.optional(),privateKey:i.optional(),ciphers:ar.optional()})}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(Lz,"configValidator");function Pz(e){return DC||CC.existsSync(e)?null:`Specified path ${e} does not exist.`}a(Pz,"doesPathExist");function Mz(e,t){ce.assert(e,ar.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=Pz(e);if(r)return t.message(r)}a(Mz,"validatePath");function Uz(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(Nz);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(Iz):e}a(Uz,"validateRotationMaxSize");function vz(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(yz);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(wz):e}a(vz,"validateRotationInterval");function Bz(e,t){let r=t.state.path.join("."),n=Rz.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||yC();return i=Math.round(Math.min(i,yC())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),Az.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(Bz,"setDefaultThreads");function hu(e,t){let r=t.state.path.join(".");if(!Pf.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(Pf.isEmpty(Ds))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return sa.join(Ds,bz);case"logging.root":return sa.join(Ds,wC);case"clustering.leafServer.streams.path":return sa.join(Ds,"clustering","leaf");case"storage.path":let n=sa.join(Ds,IC.LEGACY_DATABASES_DIR_NAME);return CC.existsSync(n)?n:sa.join(Ds,IC.DATABASES_DIR_NAME);case"logging.rotation.path":return sa.join(Ds,wC);case"operationsApi.network.domainSocket":return r==null?null:sa.join(Ds,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(hu,"setDefaultRoot");function Hz(e){let t=ce.object({routes:Mf});return Oz.validateBySchema({routes:e},t)}a(Hz,"routesValidator")});var ut=T((Ume,xC)=>{"use strict";var sn=D(),$t=K(),Mt=x(),{configValidator:Gz,routesValidator:PC}=bT(),Ir=require("fs-extra"),qz=require("yaml"),ns=require("path"),xz=require("is-number"),UC=require("properties-reader"),Fz=require("lodash"),{handleHDBError:kz}=oe(),{HTTP_STATUS_CODES:$z,HDB_ERROR_MSGS:Uf}=Zr(),Mme=require("minimist"),{server:Vz}=(Or(),ie(Wo)),{DATABASES_PARAM_CONFIG:pu,CONFIG_PARAMS:nn,CONFIG_PARAM_MAP:ss}=sn,Yz="Unable to get config value because config is uninitialized",Kz="Config successfully initialized",Wz="Error backing up config file",Qz="Empty parameter sent to getConfigValue",vC=ns.join(sn.PACKAGE_ROOT,"config","yaml",sn.HDB_DEFAULT_CONFIG_FILE),jz="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",MC={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"},vf,Ut,Bf;xC.exports={createConfigFile:zz,getDefaultConfig:Jz,getConfigValue:HC,initConfig:yT,flattenConfig:fc,updateConfigValue:GC,updateConfigObject:Zz,getConfiguration:rJ,setConfiguration:nJ,readConfigFile:wT,getClusteringRoutes:sJ,initOldConfig:qC,getConfigFromFile:iJ,getConfigFilePath:oa,addConfig:oJ,deleteConfigFromFile:aJ,getConfigObj:cJ};function zz(e,t=!1){let r=so(vC);vf=fc(r.toJSON());let n;for(let c in e){let l=ss[c.toLowerCase()];if(l===nn.DATABASES){Array.isArray(e[c])?n=e[c]:n=Object.keys(e[c]).map(_=>({[_]:e[c][_]}));continue}if(!l&&(c.endsWith("_package")||c.endsWith("_port"))&&(l=c),l!==void 0){let _=l.split("_"),u=NT(l,e[c]);l==="rootPath"&&u?.endsWith("/")&&(u=u.slice(0,-1));try{r.setIn([..._],u)}catch(d){Mt.error(d)}}}n&&BC(r,n),IT(r,t);let s=r.toJSON();Ut=fc(s);let i=r.getIn(["rootPath"]),o=ns.join(i,sn.HDB_CONFIG_FILE);Ir.createFileSync(o),Ir.writeFileSync(o,String(r)),Mt.trace(`Config file written to ${o}`)}a(zz,"createConfigFile");function BC(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!$t.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(pu.TABLES))for(let i in n[s][pu.TABLES])for(let o in n[s][pu.TABLES][i]){let c=n[s][pu.TABLES][i][o],l=[nn.DATABASES,s,pu.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=[nn.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){Mt.error("Error parsing schemas CLI/env config arguments",n)}}a(BC,"setSchemasConfig");function Jz(e){if(vf===void 0){let r=so(vC);vf=fc(r.toJSON())}let t=ss[e.toLowerCase()];if(t!==void 0)return vf[t.toLowerCase()]}a(Jz,"getDefaultConfig");function HC(e){if(e==null){Mt.error(Qz);return}if(Ut===void 0){Mt.trace(Yz);return}let t=ss[e.toLowerCase()];if(t!==void 0)return Ut[t.toLowerCase()]}a(HC,"getConfigValue");function oa(e=$t.getPropsFilePath()){let t=$t.getEnvCliRootPath();return t?ns.join(t,sn.HDB_CONFIG_FILE):UC(e).get(sn.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(oa,"getConfigFilePath");function yT(e=!1){if(Ut===void 0||e){let t;if(!$t.noBootFile()){t=$t.getPropsFilePath();try{Ir.accessSync(t,Ir.constants.F_OK|Ir.constants.R_OK)}catch(i){throw Mt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=oa(t),n;if(r.includes("config/settings.js"))try{qC(r);return}catch(i){if(i.code!==sn.NODE_ERROR_CODES.ENOENT)throw i}try{n=so(r)}catch(i){if(i.code===sn.NODE_ERROR_CODES.ENOENT){Mt.trace(`HarperDB config file not found at ${r}.
|
|
8
|
-
This can occur during early stages of install where the config file has not yet been created`);return}else throw Mt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}Xz(n,r),IT(n);let s=n.toJSON();if(Vz.config=s,Ut=fc(s),Ut.logging_rotation_rotate)for(let i in MC)Ut[i]&&Mt.error(`Config ${MC[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);Mt.trace(Kz)}}a(yT,"initConfig");function Xz(e,t){let r=e.getIn(["rootPath"]),n=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],ns.join(r,"database")),n=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],ns.join(r,"clustering","leaf")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],ns.join(r,"log")),n=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),n=!0),e.hasIn(["authentication"])||(e.addIn(["authentication"],{cacheTTL:3e4,enableSessions:!0,operationTokenTimeout:e.getIn(["operationsApi","authentication","operationTokenTimeout"])??"1d",refreshTokenTimeout:e.getIn(["operationsApi","authentication","refreshTokenTimeout"])??"30d"}),n=!0),e.hasIn(["analytics"])||(e.addIn(["analytics"],{aggregatePeriod:60}),n=!0),n&&(Mt.trace("Updating config file with missing config params"),Ir.writeFileSync(t,String(e)))}a(Xz,"checkForUpdatedConfig");function IT(e,t=!1){let r=e.toJSON();r.componentsRoot=r.componentsRoot??r?.customFunctions?.root,r?.http?.threads&&(r.threads=r?.http?.threads);let n=Gz(r,t);if(n.error)throw Uf.CONFIG_VALIDATION(n.error.message);typeof n.value.threads=="object"?e.setIn(["threads","count"],n.value.threads.count):e.setIn(["threads"],n.value.threads),e.setIn(["componentsRoot"],n.value.componentsRoot),e.setIn(["logging","root"],n.value.logging.root),e.setIn(["storage","path"],n.value.storage.path),e.setIn(["logging","rotation","path"],n.value.logging.rotation.path),e.setIn(["clustering","leafServer","streams","path"],n.value.clustering.leafServer.streams?.path),e.setIn(["operationsApi","network","domainSocket"],n.value?.operationsApi?.network?.domainSocket)}a(IT,"validateConfig");function Zz(e,t){Ut===void 0&&(Ut={});let r=ss[e.toLowerCase()];if(r===void 0){Mt.trace(`Unable to update config object because config param '${e}' does not exist`);return}Ut[r.toLowerCase()]=t}a(Zz,"updateConfigObject");function GC(e,t,r=void 0,n=!1,s=!1,i=!1){Ut===void 0&&yT();let o=HC(ss.hdb_root),c=ns.join(o,sn.HDB_CONFIG_FILE),l=so(c),_;if(r===void 0&&e.toLowerCase()===nn.DATABASES)_=t;else if(r===void 0){let f;if(i)f=e;else if(f=ss[e.toLowerCase()],f===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=f.split("_"),h=NT(f,t);l.setIn([...E],h)}else for(let f in r){let E=ss[f.toLowerCase()];if(E===nn.HTTP_SECUREPORT&&r[f]===Ut[nn.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),E===nn.OPERATIONSAPI_NETWORK_SECUREPORT&&r[f]===Ut[nn.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),E===nn.DATABASES){_=r[f];continue}if(E?.startsWith("threads_")){let h=l.getIn(["threads"]);h>=0&&(l.deleteIn(["threads"]),l.setIn(["threads","count"],h))}if(!E&&(f.endsWith("_package")||f.endsWith("_port"))&&(E=f),E!==void 0){let h=E.split("_"),m=sn.LEGACY_CONFIG_PARAMS[f.toUpperCase()];m&&m.startsWith("customFunctions")&&l.hasIn(m.split("_"))&&(E=m,h=m.split("_"));let S=NT(E,r[f]);E==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{h.length>1&&typeof l.getIn(h.slice(0,-1))=="boolean"&&l.deleteIn(h.slice(0,-1)),l.setIn([...h],S)}catch(g){Mt.error(g)}}}_&&BC(l,_),IT(l);let u=l.getIn(["rootPath"]),d=ns.join(u,sn.HDB_CONFIG_FILE);n===!0&&eJ(c,u),Ir.writeFileSync(d,String(l)),s&&(Ut=fc(l.toJSON())),Mt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(GC,"updateConfigValue");function eJ(e,t){try{let r=ns.join(t,"backup",`${sn.HDB_CONFIG_FILE}.bak`);Ir.copySync(e,r),Mt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){Mt.error(Wz),Mt.error(r)}}a(eJ,"backupConfigFile");var tJ=["databases"];function fc(e){return e.http&&Object.assign(e.http,e?.customFunctions?.network),e?.operationsApi?.network&&(e.operationsApi.network=Object.assign({},e.http,e.operationsApi.network)),e?.operationsApi&&(e.operationsApi.tls=Object.assign({},e.tls,e.operationsApi.tls)),Bf=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])&&!tJ.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;!nn[l.toUpperCase()]&&ss[l]&&(s[ss[l].toLowerCase()]=o[c]),s[l]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(fc,"flattenConfig");function NT(e,t){if(e===nn.CLUSTERING_NODENAME||e===nn.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(xz(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||$t.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 $t.autoCast(t)}a(NT,"castConfigValue");function rJ(){let e=$t.getPropsFilePath(),t=oa(e);return so(t).toJSON()}a(rJ,"getConfiguration");async function nJ(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return GC(void 0,void 0,s,!0),jz}catch(i){throw typeof i=="string"||i instanceof String?kz(i,i,$z.BAD_REQUEST,void 0,void 0,!0):i}}a(nJ,"setConfiguration");function wT(){let e=$t.getPropsFilePath();try{Ir.accessSync(e,Ir.constants.F_OK|Ir.constants.R_OK)}catch(n){if(!$t.noBootFile())throw Mt.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=oa(e);return so(t).toJSON()}a(wT,"readConfigFile");function so(e){return qz.parseDocument(Ir.readFileSync(e,"utf8"),{simpleKeys:!0})}a(so,"parseYamlDoc");function sJ(){let e=wT(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=$t.isEmptyOrZeroLength(t)?[]:t;let r=PC(t);if(r)throw Uf.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=$t.isEmptyOrZeroLength(n)?[]:n;let s=PC(n);if(s)throw Uf.CONFIG_VALIDATION(s.message);if(!$t.isEmptyOrZeroLength(n)&&!$t.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!$t.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Uf.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(sJ,"getClusteringRoutes");function qC(e){let t=UC(e);Ut={};for(let r in ss){let n=t.get(r.toUpperCase());if($t.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=ss[r].toLowerCase();s===nn.LOGGING_ROOT?Ut[s]=ns.dirname(n):Ut[s]=n}return Ut}a(qC,"initOldConfig");function iJ(e){let t=wT();return Fz.get(t,e.replaceAll("_","."))}a(iJ,"getConfigFromFile");async function oJ(e,t){let r=so(oa());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await Ir.writeFile(oa(),String(r))}a(oJ,"addConfig");function aJ(e){let t=oa($t.getPropsFilePath()),r=so(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=ns.join(n,sn.HDB_CONFIG_FILE);Ir.writeFileSync(s,String(r))}a(aJ,"deleteConfigFromFile");function cJ(){return Bf||(yT(),Bf)}a(cJ,"getConfigObj")});var kC=T((Bme,FC)=>{"use strict";var Hf=D(),Gf=class{static{a(this,"BaseLicense")}constructor(t=0,r=Hf.RAM_ALLOCATION_ENUM.DEFAULT,n=Hf.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},CT=class extends Gf{static{a(this,"ExtendedLicense")}constructor(t=0,r=Hf.RAM_ALLOCATION_ENUM.DEFAULT,n=Hf.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};FC.exports={BaseLicense:Gf,ExtendedLicense:CT}});var aa=T((Gme,QC)=>{"use strict";var hc=require("fs-extra"),VC=Lf(),YC=require("crypto"),lJ=require("moment"),uJ=require("uuid").v4,cr=x(),LT=require("path"),_J=K(),io=D(),{totalmem:$C}=require("os"),dJ=kC().ExtendedLicense,Ec="invalid license key format",fJ="061183",EJ="mofi25",hJ="aes-256-cbc",pJ=16,mJ=32,KC=X();KC.initSync();var DT;QC.exports={validateLicense:WC,generateFingerPrint:TJ,licenseSearch:UT,getLicense:AJ,checkMemoryLimit:OJ};function PT(){return LT.join(KC.getHdbBasePath(),io.LICENSE_KEY_DIR_NAME,io.LICENSE_FILE_NAME)}a(PT,"getLicenseDirPath");function SJ(){let e=PT();return LT.join(e,io.LICENSE_FILE_NAME)}a(SJ,"getLicenseFilePath");function MT(){let e=PT();return LT.join(e,io.REG_KEY_FILE_NAME)}a(MT,"getFingerPrintFilePath");async function TJ(){let e=MT();try{return await hc.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await gJ();throw cr.error(`Error writing fingerprint file to ${e}`),cr.error(t),new Error("There was an error generating the fingerprint")}}a(TJ,"generateFingerPrint");async function gJ(){let e=uJ(),t=VC.hash(e),r=MT();try{await hc.mkdirp(PT()),await hc.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw cr.error(`Error writing fingerprint file to ${r}`),cr.error(n),new Error("There was an error generating the fingerprint")}return t}a(gJ,"writeFingerprint");function WC(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:io.RAM_ALLOCATION_ENUM.DEFAULT,version:io.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return cr.error("empty license key passed to validate."),r;let n=MT(),s=!1;try{s=hc.statSync(n)}catch(i){cr.error(i)}if(s){let i;try{i=hc.readFileSync(n,"utf8")}catch{cr.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(EJ),c=o[1];c=Buffer.concat([Buffer.from(c)],pJ);let l=Buffer.concat([Buffer.from(i)],mJ),_=YC.createDecipheriv(hJ,l,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let u=null;try{u=_.update(o[0],"hex","utf8"),u.trim(),u+=_.final("utf8")}catch{let E=RJ(o[0],i);if(E)u=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Ec),cr.error(Ec),new Error(Ec)}let d;if(isNaN(u))try{d=JSON.parse(u),r.version=d.version,r.exp_date=d.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),d.ram_allocation&&(r.ram_allocation=d.ram_allocation)}catch{throw console.error(Ec),cr.error(Ec),new Error(Ec)}else r.exp_date=u;r.exp_date<lJ().valueOf()&&(r.valid_date=!1),VC.validate(o[1],`${fJ}${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||cr.error("Invalid licence"),r}a(WC,"validateLicense");function RJ(e,t){try{let r=YC.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{cr.warn("Check old license failed")}}a(RJ,"checkOldLicense");function UT(){let e=new dJ,t=[];try{t=hc.readFileSync(SJ(),"utf-8").split(io.NEW_LINE)}catch(r){r.code==="ENOENT"?cr.info("no license file found"):cr.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(_J.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=WC(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){cr.error("There was an error parsing the license string."),cr.error(s),e.ram_allocation=io.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return DT=e,e}a(UT,"licenseSearch");async function AJ(){return DT||await UT(),DT}a(AJ,"getLicense");function OJ(){let e=UT().ram_allocation,t=process.constrainedMemory?.()||$C();if(t=Math.round(Math.min(t,$C())/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(OJ,"checkMemoryLimit")});var wr=T(($me,uD)=>{"use strict";var XC="username is required",ZC="nothing to update, must supply active, role or password to update",eD="password cannot be an empty string",tD="If role is specified, it cannot be empty.",rD="active must be true or false";uD.exports={addUser:PJ,alterUser:MJ,dropUser:vJ,getSuperUser:qJ,userInfo:BJ,listUsers:xf,listUsersExternal:HJ,setUsersToGlobal:mc,findAndValidateUser:cD,getClusterUser:xJ,USERNAME_REQUIRED:XC,ALTERUSER_NOTHING_TO_UPDATE:ZC,EMPTY_PASSWORD:eD,EMPTY_ROLE:tD,ACTIVE_BOOLEAN:rD};var nD=yr(),bJ=na(),HT=Lf(),sD=AC(),iD=ir(),GT=di(),on=K(),oD=require("validate.js"),be=x(),{promisify:NJ}=require("util"),qT=ui(),jC=D(),zC=Xe(),yJ=ut(),xme=X(),Fme=aa(),IJ=ci(),{table:kme}=(ge(),ie(ke)),{handleHDBError:Ls,hdb_errors:wJ}=oe(),{HTTP_STATUS_CODES:Ps,AUTHENTICATION_ERROR_MSGS:vT,HDB_ERROR_MSGS:pc}=wJ,{UserEventMsg:xT}=is(),BT=require("lodash"),{server:FT}=(Or(),ie(Wo)),CJ=x();FT.getUser=(e,t)=>cD(e,t,t!=null);var aD={username:!0,active:!0,role:!0,password:!0},JC=new Map,qf=iD.searchByValue,DJ=iD.searchByHash,LJ=NJ(bJ.delete);async function PJ(e){let t=oD.cleanAttributes(e,aD),r=sD.addUserValidation(t);if(r)throw Ls(new Error,r.message,Ps.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 qf(n),s=s&&Array.from(s)}catch(l){throw be.error("There was an error searching for a role in add user"),be.error(l),l}if(!s||s.length<1)throw Ls(new Error,pc.ROLE_NAME_NOT_FOUND(t.role),Ps.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw Ls(new Error,pc.DUP_ROLES_FOUND(t.role),Ps.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=qT.encrypt(t.password)),t.password=HT.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await nD.insert(i)}catch(l){throw be.error("There was an error searching for a user."),be.error(l),l}be.debug(o);try{await mc()}catch(l){throw be.error("Got an error setting users to global"),be.error(l),l}if(o.skipped_hashes.length===1)throw Ls(new Error,pc.USER_ALREADY_EXISTS(t.username),Ps.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=s[0],GT.signalUserChange(new xT(process.pid)),`${c.username} successfully added`}a(PJ,"addUser");async function MJ(e){let t=oD.cleanAttributes(e,aD);if(on.isEmptyOrZeroLength(t.username))throw new Error(XC);if(on.isEmptyOrZeroLength(t.password)&&on.isEmptyOrZeroLength(t.role)&&on.isEmptyOrZeroLength(t.active))throw new Error(ZC);if(!on.isEmpty(t.password)&&on.isEmptyOrZeroLength(t.password.trim()))throw new Error(eD);if(!on.isEmpty(t.active)&&!on.isBoolean(t.active))throw new Error(rD);let r=UJ(t.username);if(!on.isEmpty(t.password)&&!on.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=qT.encrypt(t.password)),t.password=HT.hash(t.password)),t.role==="")throw new Error(tD);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 qf(i)||[])}catch(c){throw be.error("Got an error searching for a role."),be.error(c),c}if(!o||o.length===0){let c=pc.ALTER_USER_ROLE_NOT_FOUND(t.role);throw be.error(c),Ls(new Error,c,Ps.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=pc.ALTER_USER_DUP_ROLES(t.role);throw be.error(c),Ls(new Error,c,Ps.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 nD.update(n)}catch(i){throw be.error("Error during update."),be.error(i),i}try{await mc()}catch(i){throw be.error("Got an error setting users to global"),be.error(i),i}return GT.signalUserChange(new xT(process.pid)),s}a(MJ,"alterUser");function UJ(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(UJ,"isClusterUser");async function vJ(e){try{let t=sD.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(on.isEmpty(global.hdb_users.get(e.username)))throw Ls(new Error,pc.USER_NOT_EXIST(e.username),Ps.NOT_FOUND,void 0,void 0,!0);let n;try{n=await LJ(r)}catch(s){throw be.error("Got an error deleting a user."),be.error(s),s}be.debug(n);try{await mc()}catch(s){throw be.error("Got an error setting users to global."),be.error(s),s}return GT.signalUserChange(new xT(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(vJ,"dropUser");async function BJ(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=BT.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await DJ(r)}catch(s){throw be.error("Got an error searching for a role."),be.error(s),s}t.role=n[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw be.error(r),r}return t}a(BJ,"userInfo");async function HJ(){let e;try{e=await xf()}catch(t){throw be.error("Got an error listing users."),be.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(HJ,"listUsersExternal");async function xf(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await qf(e)}catch(o){throw be.error("Got an error searching for roles."),be.error(o),o}let r={};for(let o of t)r[o.id]=BT.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 qf(n)}catch(o){throw be.error("Got an error searching for users."),be.error(o),o}let i=new Map;for(let o of s)o=BT.cloneDeep(o),o.role=r[o.role],GJ(o.role),i.set(o.username,o);return i}catch(e){throw be.error("got an error listing users"),be.error(e),on.errorizeMessage(e)}return null}a(xf,"listUsers");function GJ(e){try{if(!e){be.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(IJ)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){be.error("Got an error trying to set system permissions."),be.error(t)}}a(GJ,"appendSystemTablesToRole");async function mc(){try{let e=await xf();global.hdb_users=e}catch(e){throw be.error(e),e}}a(mc,"setUsersToGlobal");async function cD(e,t,r=!0){global.hdb_users||await mc();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw Ls(new Error,vT.GENERIC_AUTH_FAIL,Ps.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw Ls(new Error,vT.USER_INACTIVE,Ps.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(JC.get(t)===n.password)return s;if(HT.validate(n.password,t))JC.set(t,n.password);else throw Ls(new Error,vT.GENERIC_AUTH_FAIL,Ps.UNAUTHORIZED,void 0,void 0,!0)}return s}a(cD,"findAndValidateUser");async function qJ(){global.hdb_users||await mc();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(qJ,"getSuperUser");async function xJ(){let e=await xf(),t=yJ.getConfigFromFile(jC.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!on.isEmpty(r)&&r?.role?.role===jC.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=qT.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+zC.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+zC.SERVER_SUFFIX.ADMIN,r}a(xJ,"getClusterUser");var lD=[];FT.invalidateUser=function(e){for(let t of lD)try{t(e)}catch(r){CJ.error("Error invalidating user",r)}};FT.onInvalidatedUser=function(e){lD.push(e)}});var Su=T((Wme,ED)=>{"use strict";var ca=x(),an=D(),FJ=Vw(),Yme=Pn(),Kme=_i(),kJ=wr(),{validateEvent:_D}=is(),mu=Mn(),$J=require("process"),{resetDatabases:VJ}=(ge(),ie(ke)),YJ={[an.ITC_EVENT_TYPES.SCHEMA]:KJ,[an.ITC_EVENT_TYPES.USER]:fD};async function KJ(e){let t=_D(e);if(t){ca.error(t);return}ca.trace("ITC schemaHandler received schema event:",e),await FJ(e.message),await WJ(e.message)}a(KJ,"schemaHandler");async function WJ(e){try{mu.resetReadTxn(an.SYSTEM_SCHEMA_NAME,an.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),mu.resetReadTxn(an.SYSTEM_SCHEMA_NAME,an.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),mu.resetReadTxn(an.SYSTEM_SCHEMA_NAME,an.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=VJ();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){ca.error(t)}}a(WJ,"syncSchemaMetadata");var dD=[];async function fD(e){try{try{mu.resetReadTxn(an.SYSTEM_SCHEMA_NAME,an.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),mu.resetReadTxn(an.SYSTEM_SCHEMA_NAME,an.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){ca.warn(r)}let t=_D(e);if(t){ca.error(t);return}ca.trace(`ITC userHandler ${an.HDB_ITC_CLIENT_PREFIX}${$J.pid} received user event:`,e),await kJ.setUsersToGlobal();for(let r of dD)r()}catch(t){ca.error(t)}}a(fD,"userHandler");fD.addListener=function(e){dD.push(e)};ED.exports=YJ});var is=T((Zme,pD)=>{"use strict";var jme=x(),kT=K(),QJ=D(),{ITC_ERRORS:Tu}=Zr(),{parentPort:zme,threadId:jJ,isMainThread:zJ,workerData:Jme}=require("worker_threads"),{onMessageFromWorkers:JJ,broadcast:Xme,broadcastWithAcknowledgement:XJ}=et();pD.exports={sendItcEvent:ZJ,validateEvent:hD,SchemaEventMsg:e2,UserEventMsg:t2};var Ff;JJ(async(e,t)=>{Ff=Ff||Su(),hD(e),Ff[e.type]&&await Ff[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function ZJ(e){return!zJ&&e.message&&(e.message.originator=jJ),XJ(e)}a(ZJ,"sendItcEvent");function hD(e){if(typeof e!="object")return Tu.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||kT.isEmpty(e.type))return Tu.MISSING_TYPE;if(!e.hasOwnProperty("message")||kT.isEmpty(e.message))return Tu.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||kT.isEmpty(e.message.originator))return Tu.MISSING_ORIGIN;if(QJ.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Tu.INVALID_EVENT(e.type)}a(hD,"validateEvent");function e2(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(e2,"SchemaEventMsg");function t2(e){this.originator=e}a(t2,"UserEventMsg")});var di=T((rSe,gD)=>{"use strict";var mD=D(),tSe=K(),kf=x(),SD=Fw(),Sc,{sendItcEvent:TD}=is();function r2(e){try{kf.trace("signalSchemaChange called with message:",e),Sc=Sc||Su();let t=new SD(mD.ITC_EVENT_TYPES.SCHEMA,e);return Sc.schema(t),TD(t)}catch(t){kf.error(t)}}a(r2,"signalSchemaChange");function n2(e){try{kf.trace("signalUserChange called with message:",e),Sc=Sc||Su();let t=new SD(mD.ITC_EVENT_TYPES.USER,e);return Sc.user(t),TD(t)}catch(t){kf.error(t)}}a(n2,"signalUserChange");gD.exports={signalSchemaChange:r2,signalUserChange:n2}});var $f=T((sSe,AD)=>{"use strict";var RD=K(),s2=D(),i2=x(),o2=mf(),a2=pf(),c2=di(),{SchemaEventMsg:l2}=is(),u2="already exists in";AD.exports=_2;async function _2(e,t,r){if(RD.isEmptyOrZeroLength(r))return r;let n=[];RD.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 d2(e,t.schema,t.name,i)})),s}a(_2,"lmdbCheckForNewAttributes");async function d2(e,t,r,n){let s=new a2(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await f2(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(u2))i2.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(d2,"createNewAttribute");async function f2(e){let t;return t=await o2(e),c2.signalSchemaChange(new l2(process.pid,s2.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(f2,"createAttribute")});var Tc=T((oSe,OD)=>{"use strict";var $T=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}};OD.exports=$T});var ND=T((cSe,bD)=>{"use strict";var E2=Tc(),h2=D().OPERATIONS_ENUM,VT=class extends E2{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(h2.INSERT,r,n,s,i),this.records=t}};bD.exports=VT});var ID=T((uSe,yD)=>{"use strict";var p2=Tc(),m2=D().OPERATIONS_ENUM,YT=class extends p2{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(m2.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};yD.exports=YT});var CD=T((dSe,wD)=>{"use strict";var S2=Tc(),T2=D().OPERATIONS_ENUM,KT=class extends S2{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(T2.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};wD.exports=KT});var LD=T((ESe,DD)=>{"use strict";var g2=Tc(),R2=D().OPERATIONS_ENUM,WT=class extends g2{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(R2.DELETE,n,s,t,i),this.original_records=r}};DD.exports=WT});var gu=T((mSe,vD)=>{"use strict";var pSe=require("path"),PD=Ve(),A2=ND(),O2=ID(),b2=CD(),N2=LD(),gc=at(),MD=K(),{CONFIG_PARAMS:y2}=D(),UD=X();UD.initSync();var Vf=D().OPERATIONS_ENUM,{getTransactionAuditStorePath:I2}=je();vD.exports=w2;async function w2(e,t){if(UD.get(y2.LOGGING_AUDITLOG)===!1)return;let r=I2(e.schema,e.table),n=await PD.openEnvironment(r,e.table,!0),s=C2(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){PD.initializeDBIs(n,gc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,gc.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[gc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[gc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),MD.isEmpty(s.user_name)||n.dbis[gc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[gc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(w2,"writeTransaction");function C2(e,t){let r=MD.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===Vf.INSERT)return new A2(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Vf.UPDATE)return new O2(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Vf.UPSERT)return new b2(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Vf.DELETE)return new N2(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(C2,"createTransactionObject")});var QT=T((gSe,BD)=>{"use strict";var D2=_u(),TSe=du(),Ru=D(),L2=fu(),P2=Jo().insertRecords,M2=Ve(),U2=x(),v2=$f(),{getSchemaPath:B2}=je(),H2=gu();BD.exports=G2;async function G2(e){try{let{schema_table:t,attributes:r}=D2(e);L2(e,r,t.hash_attribute),e.schema!==Ru.SYSTEM_SCHEMA_NAME&&(r.includes(Ru.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Ru.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Ru.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Ru.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await v2(e.hdb_auth_header,t,r),s=B2(e.schema,e.table),i=await M2.openEnvironment(s,e.table),o=await P2(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await H2(e,o)}catch(c){U2.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(G2,"lmdbCreateRecords")});var qD=T((ASe,GD)=>{"use strict";var HD=D(),q2=QT(),x2=du(),F2=require("fs-extra"),{getSchemaPath:k2}=je();GD.exports=$2;async function $2(e){let t=[{name:e.schema,createddate:Date.now()}],r=new x2(HD.SYSTEM_SCHEMA_NAME,HD.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await q2(r),await F2.mkdirp(k2(e.schema))}a($2,"lmdbCreateSchema")});var FD=T((bSe,xD)=>{"use strict";var jT=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}};xD.exports=jT});var YD=T((CSe,VD)=>{"use strict";var kD=Ve(),zT=Ar(),JT=Zr().LMDB_ERRORS_ENUM,V2=at(),$D=x(),ySe=K(),Y2=require("lmdb"),K2=FD(),W2=D(),{OVERFLOW_MARKER:ISe,MAX_SEARCH_KEY_LENGTH:wSe}=V2,Q2=W2.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function j2(e,t,r,n){if(zT.validateEnv(e),t===void 0)throw new Error(JT.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(JT.IDS_REQUIRED):new Error(JT.IDS_MUST_BE_ITERABLE);try{let s=kD.listDBIs(e);kD.initializeDBIs(e,t,s);let i=new K2,o,c=[],l=[];for(let f=0,E=r.length;f<E;f++)try{o=r[f];let h=e.dbis[t].get(o);if(!h||n&&h[Q2]>n){i.skipped.push(o);continue}let m=e.dbis[t].ifVersion(o,Y2.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<s.length;S++){let g=s[S];if(!h.hasOwnProperty(g)||g===t)continue;let R=e.dbis[g],A=h[g];if(A!=null)try{let P=zT.getIndexedValues(A);if(P)for(let U=0,v=P.length;U<v;U++)R.remove(P[U],o)}catch{$D.warn(`cannot delete from attribute: ${g}, ${A}:${o}`)}}});c.push(m),l.push(o),i.original_records.push(h)}catch(h){$D.warn(h),i.skipped.push(o)}let _=[],u=await Promise.all(c);for(let f=0,E=u.length;f<E;f++)u[f]===!0?i.deleted.push(l[f]):(i.skipped.push(l[f]),_.push(f));let d=0;for(let f=0;f<_.length;f++){let E=_[f];i.original_records.splice(E-d,1),d++}return i.txn_time=zT.getNextMonotonicTime(),i}catch(s){throw s}}a(j2,"deleteRecords");VD.exports={deleteRecords:j2}});var Au=T((LSe,WD)=>{"use strict";var Rc=K(),z2=YD(),J2=Ve(),{getSchemaPath:X2}=je(),Z2=gu(),e4=x();WD.exports=t4;async function t4(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(Rc.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Rc.isEmptyOrZeroLength(e.hash_values)&&!Rc.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];Rc.isEmpty(l)||e.hash_values.push(l)}}if(Rc.isEmptyOrZeroLength(e.hash_values))return KD([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Rc.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=X2(e.schema,e.table),i=await J2.openEnvironment(s,e.table),o=await z2.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await Z2(e,o)}catch(c){e4.error(`unable to write transaction due to ${c.message}`)}return KD(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(t4,"lmdbDeleteRecords");function KD(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(KD,"createDeleteResponse")});var ZT=T((USe,QD)=>{"use strict";var r4=D(),MSe=Ar();function XT(e,t){let r=Object.create(null);if(t.length===1&&r4.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(XT,"parseRow");function n4(e,t,r,n){let s=XT(r,e);n.push(s)}a(n4,"searchAll");function s4(e,t,r,n){let s=XT(r,e);n[t]=s}a(s4,"searchAllToMap");function i4(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(i4,"iterateDBI");function la(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(la,"pushResults");function o4(e,t,r,n,s,i){t.toString().endsWith(e)&&la(t,r,n,s,i)}a(o4,"endsWith");function a4(e,t,r,n,s,i){t.toString().includes(e)&&la(t,r,n,s,i)}a(a4,"contains");function c4(e,t,r,n,s,i){t>e&&la(t,r,n,s,i)}a(c4,"greaterThanCompare");function l4(e,t,r,n,s,i){t>=e&&la(t,r,n,s,i)}a(l4,"greaterThanEqualCompare");function u4(e,t,r,n,s,i){t<e&&la(t,r,n,s,i)}a(u4,"lessThanCompare");function _4(e,t,r,n,s,i){t<=e&&la(t,r,n,s,i)}a(_4,"lessThanEqualCompare");QD.exports={parseRow:XT,searchAll:n4,searchAllToMap:s4,iterateDBI:i4,endsWith:o4,contains:a4,greaterThanCompare:c4,greaterThanEqualCompare:l4,lessThanCompare:u4,lessThanEqualCompare:_4,pushResults:la}});var Ac=T((qSe,tL)=>{"use strict";var oo=Ve(),BSe=x(),cn=Ar(),Yf=at(),ht=Zr().LMDB_ERRORS_ENUM,HSe=K(),d4=D(),Kf=ZT(),{parseRow:f4}=Kf,GSe=require("lmdb"),{OVERFLOW_MARKER:jD,MAX_SEARCH_KEY_LENGTH:E4}=Yf;function zD(e,t,r,n=!1,s=void 0,i=void 0){return ua(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(zD,"iterateFullIndex");function Ou(e,t,r,n,s,i=!1,o=void 0,c=void 0,l=!1,_=!1){return ua(e,t,r,(u,d,f,E)=>{let R={transaction:u,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!l:!_,exclusiveStart:i===!0?_:l};return E===r?(R.values=!1,d.getRange(R).map(A=>({value:A}))):d.getRange(R)})}a(Ou,"iterateRangeBetween");function ua(e,t,r,n){let s=e.database||e,i=oo.openDBI(s,r);i[Yf.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&oo.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(ua,"setupTransaction");function JD(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(jD)){if(!s)if(r)s=oo.openDBI(e,r);else{let l=oo.listDBIs(e);for(let _=0,u=l.length;_<u&&(s=oo.openDBI(e,l[_]),!s[Yf.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(JD,"getOverflowCheck");function h4(e,t,r,n=!1,s=void 0,i=void 0){if(cn.validateEnv(e),t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);return ua(e,t,t,(o,c,l)=>(Wf(r),r=bu(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(_=>f4(_.value,r))))}a(h4,"searchAll");function p4(e,t,r,n=!1,s=void 0,i=void 0){if(cn.validateEnv(e),t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);Wf(r),r=bu(e.database||e,r);let o=new Map;for(let{key:c,value:l}of zD(e,t,t,n,s,i))o.set(c,Kf.parseRow(l,r));return o}a(p4,"searchAllToMap");function m4(e,t,r=!1,n=void 0,s=void 0){if(cn.validateEnv(e),t===void 0)throw new Error(ht.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=zD(e,void 0,t,r,n,s),c=o.transaction,l=JD(c.database,c,void 0,t);for(let{key:_,value:u}of o){let d=l(_,u);i[d]===void 0&&(i[d]=[]),i[d].push(u)}return i}a(m4,"iterateDBI");function S4(e,t){if(cn.validateEnv(e),t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);return oo.statDBI(e,t).entryCount}a(S4,"countAll");function T4(e,t,r,n,s=!1,i=void 0,o=void 0){return ao(e,r,n),ua(e,t,r,(c,l,_,u)=>(n=cn.convertKeyValueToWrite(n),u===r?l.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:l.getValues(n,{transaction:c,reverse:s,limit:i,offset:o}).map(d=>({key:n,value:d}))))}a(T4,"equals");function g4(e,t,r){return ao(e,t,r),oo.openDBI(e,t).getValuesCount(r)}a(g4,"count");function R4(e,t,r,n,s=!1,i=void 0,o=void 0){return ao(e,r,n),ua(e,null,r,(c,l)=>{n=cn.convertKeyValueToWrite(n);let _=!0;typeof n=="number"&&(_=!1);let u;if(s===!0){let d;for(let f of l.getKeys({transaction:c,start:n}))if(!f.startsWith(n)){d=f;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),u=l.getRange({transaction:c,start:d,end:void 0,reverse:s,limit:i,offset:o}).map(f=>{let{key:E}=f;if(E!==d){if(E.toString().startsWith(n))return f;if(_===!0)return u.DONE}}),u.filter(f=>f)}else return u=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(n))return d;if(_===!0)return u.DONE}),_?u:u.filter(d=>d)})}a(R4,"startsWith");function A4(e,t,r,n,s=!1,i=void 0,o=void 0){return XD(e,t,r,n,s,i,o,!0)}a(A4,"endsWith");function XD(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return ao(e,r,n),ua(e,null,r,(l,_,u,d)=>{let f=JD(u,l,d,r);return o=Number.isInteger(o)?o:0,_.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(E=>{let h=E.toString();return h.endsWith(jD)?_.getValues(E,{transaction:l}).map(m=>{let S=f(E,m);if(c?S.endsWith(n):S.includes(n))return{key:S,value:m}}).filter(m=>m):(c?h.endsWith(n):h.includes(n))?_[Yf.DBI_DEFINITION_NAME].is_hash_attribute?{key:E,value:E}:_.getValues(E,{transaction:l}).map(m=>({key:E,value:m})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(XD,"contains");function O4(e,t,r,n,s=!1,i=void 0,o=void 0){ao(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),Ou(e,t,r,n,l,s,i,o,!0,!1)}a(O4,"greaterThan");function b4(e,t,r,n,s=!1,i=void 0,o=void 0){ao(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),Ou(e,t,r,n,l,s,i,o,!1,!1)}a(b4,"greaterThanEqual");function N4(e,t,r,n,s=!1,i=void 0,o=void 0){ao(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),Ou(e,t,r,l,n,s,i,o,!1,!0)}a(N4,"lessThan");function y4(e,t,r,n,s=!1,i=void 0,o=void 0){ao(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),Ou(e,t,r,l,n,s,i,o,!1,!1)}a(y4,"lessThanEqual");function I4(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(cn.validateEnv(e),r===void 0)throw new Error(ht.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(ht.START_VALUE_REQUIRED);if(s===void 0)throw new Error(ht.END_VALUE_REQUIRED);if(n=cn.convertKeyValueToWrite(n),s=cn.convertKeyValueToWrite(s),n>s)throw new Error(ht.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Ou(e,t,r,n,s,i,o,c)}a(I4,"between");function w4(e,t,r,n){cn.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);if(Wf(r),r=bu(s,r),n===void 0)throw new Error(ht.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=Kf.parseRow(c,r)),o}a(w4,"searchByHash");function C4(e,t,r){cn.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ht.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(C4,"checkHashExists");function D4(e,t,r,n,s=[]){return eL(e,t,r,n,s),ZD(e,t,r,n,s).map(i=>i[1])}a(D4,"batchSearchByHash");function L4(e,t,r,n,s=[]){eL(e,t,r,n,s);let i=new Map;for(let[o,c]of ZD(e,t,r,n,s))i.set(o,c);return i}a(L4,"batchSearchByHashToMap");function ZD(e,t,r,n,s=[]){return ua(e,t,t,(i,o,c)=>{r=bu(c,r);let l=r.length<3;return n.map(_=>{let u=c.dbis[t].get(_,{transaction:i,lazy:l});if(u)return[_,Kf.parseRow(u,r)];s.push(_)}).filter(_=>_)})}a(ZD,"batchHashSearch");function eL(e,t,r,n,s){if(cn.validateEnv(e),t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);if(Wf(r),n==null)throw new Error(ht.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(ht.IDS_MUST_BE_ITERABLE)}a(eL,"initializeBatchSearchByHash");function Wf(e){if(!Array.isArray(e))throw e===void 0?new Error(ht.FETCH_ATTRIBUTES_REQUIRED):new Error(ht.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Wf,"validateFetchAttributes");function ao(e,t,r){if(cn.validateEnv(e),t===void 0)throw new Error(ht.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ht.SEARCH_VALUE_REQUIRED);if(r?.length>E4)throw new Error(ht.SEARCH_VALUE_TOO_LARGE)}a(ao,"validateComparisonFunctions");function bu(e,t){return t.length===1&&d4.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=oo.listDBIs(e)),t}a(bu,"setGetWholeRowAttributes");tL.exports={searchAll:h4,searchAllToMap:p4,count:g4,countAll:S4,equals:T4,startsWith:R4,endsWith:A4,contains:XD,searchByHash:w4,setGetWholeRowAttributes:bu,batchSearchByHash:D4,batchSearchByHashToMap:L4,checkHashExists:C4,iterateDBI:m4,greaterThan:O4,greaterThanEqual:b4,lessThan:N4,lessThanEqual:y4,between:I4}});var Oc=T((FSe,oL)=>{var rL=require("lodash"),nL=tt(),he=require("joi"),P4=K(),{hdb_schema_table:Nu,checkValidTable:sL,hdb_table:iL,hdb_database:Qf}=ws(),{handleHDBError:M4,hdb_errors:U4}=oe(),{getDatabases:v4}=(ge(),ie(ke)),{HTTP_STATUS_CODES:B4}=U4,H4=he.object({database:Qf,schema:Qf,table:iL,search_attribute:Nu,search_value:he.any().required(),get_attributes:he.array().min(1).items(he.alternatives(Nu,he.object())).optional(),desc:he.bool(),limit:he.number().integer().min(1),offset:he.number().integer().min(0)}),G4=he.object({database:Qf,schema:Qf,table:iL,operator:he.string().valid("and","or").default("and").lowercase(),offset:he.number().integer().min(0),limit:he.number().integer().min(1),get_attributes:he.array().min(1).items(he.alternatives(Nu,he.object())).optional(),sort:he.object({attribute:he.alternatives(Nu,he.array().min(1)),descending:he.bool().optional()}).optional(),conditions:he.array().min(1).items(he.alternatives(he.object({operator:he.string().valid("and","or").default("and").lowercase(),conditions:he.array()}),he.object({search_attribute:he.alternatives(Nu,he.array().min(1)),search_type:he.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:he.when("search_type",{switch:[{is:"equals",then:he.any()},{is:"between",then:he.array().items(he.alternatives([he.string(),he.number()])).length(2)}],otherwise:he.alternatives(he.string(),he.number())}).required()}))).required()});oL.exports=function(e,t){let r=null;switch(t){case"value":r=nL.validateBySchema(e,H4);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(sL("database",e.schema)),i(sL("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=nL.validateBySchema(e,G4);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=P4.checkGlobalSchemaTable(e.schema,e.table);if(s)return M4(new Error,s,B4.NOT_FOUND);let o=v4()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let l=a(u=>{for(let d=0,f=u.conditions.length;d<f;d++){let E=u.conditions[d];E.conditions?l(E):c.push(E.search_attribute)}},"addConditions");t==="conditions"&&l(e);let _=rL.filter(c,u=>u!=="*"&&u.attribute!=="*"&&!Array.isArray(u)&&!u.name&&!rL.some(o,d=>d===u||d.attribute===u||d.attribute===u.attribute));if(_&&_.length>0){let u=_.join(", ");return u=u.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${u}'`)}}return r}});var eg=T(($Se,aL)=>{"use strict";var q4=Ve(),x4=Oc(),{getSchemaPath:F4}=je();aL.exports=k4;function k4(e){let t=x4(e,"hashes");if(t)throw t;let r=F4(e.schema,e.table);return q4.openEnvironment(r,e.table)}a(k4,"initialize")});var tg=T((YSe,cL)=>{"use strict";var $4=Ac(),V4=eg();cL.exports=Y4;async function Y4(e){let t=await V4(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return $4.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(Y4,"lmdbGetDataByHash")});var bc=T((WSe,lL)=>{"use strict";var rg=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};lL.exports=rg});var _L=T((zSe,uL)=>{"use strict";var jSe=bc(),K4=Ac(),W4=eg();uL.exports=Q4;async function Q4(e){let t=await W4(e),r=global.hdb_schema[e.schema][e.table];return K4.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(Q4,"lmdbSearchByHash")});var os=T((XSe,dL)=>{"use strict";var ng=class{static{a(this,"SearchObject")}constructor(t,r,n,s,i,o,c,l=!1,_=void 0,u=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=_,this.offset=u}};dL.exports=ng});var jf=T((eTe,SL)=>{"use strict";var lr=Ac(),j4=Ve(),z4=K(),pe=at(),_a=D(),J4=ci(),fL=Zr().LMDB_ERRORS_ENUM,{getSchemaPath:X4}=je(),fi=_a.SEARCH_WILDCARDS;async function Z4(e,t,r){let n;e.schema===_a.SYSTEM_SCHEMA_NAME?n=J4[e.table]:n=global.hdb_schema[e.schema][e.table];let s=mL(e,n.hash_attribute,r,t);return hL(e,s,n.hash_attribute,r)}a(Z4,"prepSearch");async function hL(e,t,r,n){let s=X4(e.schema,e.table),i=await j4.openEnvironment(s,e.table),o=pL(i,e,t,r),c=o.transaction||i;if([pe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,pe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,pe.SEARCH_TYPES.SEARCH_ALL,pe.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(e3(e,r)===!1){let u=e.search_attribute;if(u===r)return n?EL(o,()=>!0):o.map(f=>({[r]:f.key}));let d=a(f=>({[r]:f.value,[u]:f.key}),"toObject");return n?EL(o,d):o.map(d)}let _=e.search_attribute===r?o.map(u=>u.key):o.map(u=>u.value);return n===!0?lr.batchSearchByHashToMap(c,r,e.get_attributes,_):lr.batchSearchByHash(c,r,e.get_attributes,_)}a(hL,"executeSearch");function pL(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 pe.SEARCH_TYPES.EQUALS:s=lr.equals(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.CONTAINS:s=lr.contains(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.ENDS_WITH:case pe.SEARCH_TYPES._ENDS_WITH:s=lr.endsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.STARTS_WITH:case pe.SEARCH_TYPES._STARTS_WITH:s=lr.startsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return lr.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case pe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return lr.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case pe.SEARCH_TYPES.SEARCH_ALL:return lr.searchAll(e,n,t.get_attributes,o,c,l);case pe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return lr.searchAllToMap(e,n,t.get_attributes,o,c,l);case pe.SEARCH_TYPES.BETWEEN:s=lr.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,l);break;case pe.SEARCH_TYPES.GREATER_THAN:case pe.SEARCH_TYPES._GREATER_THAN:s=lr.greaterThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.GREATER_THAN_EQUAL:case pe.SEARCH_TYPES._GREATER_THAN_EQUAL:s=lr.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.LESS_THAN:case pe.SEARCH_TYPES._LESS_THAN:s=lr.lessThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.LESS_THAN_EQUAL:case pe.SEARCH_TYPES._LESS_THAN_EQUAL:s=lr.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;default:return Object.create(null)}return s}a(pL,"searchByType");function EL(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(EL,"createMapFromIterable");function e3(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(e3,"checkToFetchMore");function mL(e,t,r,n){if(z4.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),fi.indexOf(s)>-1)return r===!0?pe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:pe.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(fi[0])<0&&s.indexOf(fi[1])<0)return c===!0?r===!0?pe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:pe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:pe.SEARCH_TYPES.EQUALS;if(fi.indexOf(i)>=0&&fi.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),pe.SEARCH_TYPES.CONTAINS;if(fi.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),pe.SEARCH_TYPES.ENDS_WITH;if(fi.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),pe.SEARCH_TYPES.STARTS_WITH;if(s.includes(fi[0])||s.includes(fi[1]))return pe.SEARCH_TYPES.EQUALS;throw new Error(fL.UNKNOWN_SEARCH_TYPE)}else switch(n){case _a.VALUE_SEARCH_COMPARATORS.BETWEEN:return pe.SEARCH_TYPES.BETWEEN;case _a.VALUE_SEARCH_COMPARATORS.GREATER:return pe.SEARCH_TYPES.GREATER_THAN;case _a.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return pe.SEARCH_TYPES.GREATER_THAN_EQUAL;case _a.VALUE_SEARCH_COMPARATORS.LESS:return pe.SEARCH_TYPES.LESS_THAN;case _a.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return pe.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(fL.UNKNOWN_SEARCH_TYPE)}}a(mL,"createSearchTypeFromSearchObject");SL.exports={executeSearch:hL,createSearchTypeFromSearchObject:mL,prepSearch:Z4,searchByType:pL}});var gL=T((nTe,TL)=>{"use strict";var rTe=os(),t3=Oc(),r3=K(),n3=D(),s3=jf();TL.exports=i3;function i3(e,t){if(!r3.isEmpty(t)&&n3.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=t3(e,"value");if(n)throw n;return s3.prepSearch(e,t,!0)}a(i3,"lmdbGetDataByValue")});var yu=T((oTe,RL)=>{"use strict";var iTe=os(),o3=Oc(),a3=K(),c3=D(),l3=jf();RL.exports=u3;async function u3(e,t){if(!a3.isEmpty(t)&&c3.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=o3(e,"value");if(n)throw n;return l3.prepSearch(e,t,!1)}a(u3,"lmdbSearchByValue")});var OL=T((lTe,AL)=>{"use strict";var cTe=at(),sg=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}},ig=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},og=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};AL.exports={SearchByConditionsObject:sg,SearchCondition:ig,SortAttribute:og}});var wL=T((fTe,IL)=>{"use strict";var _Te=OL().SearchByConditionsObject,_3=os(),d3=Oc(),ag=Ac(),zf=at(),{Resource:dTe}=(es(),ie(cg)),yL=jf(),f3=ZT(),E3=require("lodash"),{getSchemaPath:h3}=je(),bL=Ve(),{handleHDBError:p3,hdb_errors:m3}=oe(),{HTTP_STATUS_CODES:S3}=m3,T3=1e8;IL.exports=g3;async function g3(e){let t=d3(e,"conditions");if(t)throw p3(t,t.message,S3.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=h3(e.schema,e.table),n=await bL.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)bL.openDBI(n,_.search_attribute);let i=E3.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let u=_.search_type;u===zf.SEARCH_TYPES.EQUALS?_.estimated_count=ag.count(n,_.search_attribute,_.search_value):u===zf.SEARCH_TYPES.CONTAINS||u===zf.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=T3}return _.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await NL(o,e,i[0],s.hash_attribute),l;if(!e.operator||e.operator.toLowerCase()==="and"){let _=n.dbis[s.hash_attribute],u=i.slice(1).map(yL.filterByType),d=u.length,f=ag.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(E=>_.get(E,{transaction:o,lazy:!0})),d>0&&(l=l.filter(E=>{for(let h=0;h<d;h++)if(!u[h](E))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(E=>f3.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await NL(o,e,f,s.hash_attribute);c=c.concat(E)}let _=new Set,u=e.offset||0;c=c.filter(d=>_.has(d)?!1:(_.add(d),!0)).slice(u,e.limit&&e.limit+u),l=ag.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(g3,"lmdbSearchByConditions");async function NL(e,t,r,n){let s=new _3(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===zf.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,yL.searchByType(e,s,i,n).map(o=>o.value)}a(NL,"executeConditionSearch")});var Iu=T((hTe,CL)=>{"use strict";var R3=D().OPERATIONS_ENUM,lg=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=R3.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};CL.exports=lg});var ug=T((mTe,HL)=>{"use strict";var ML=os(),UL=Iu(),vL=yu(),BL=Au(),Cr=D(),DL=K(),LL=Ve(),{getTransactionAuditStorePath:A3,getSchemaPath:O3}=je(),PL=x();HL.exports=b3;async function b3(e){try{if(DL.isEmpty(global.hdb_schema[e.schema])||DL.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await N3(e),await y3(e);let t=O3(e.schema,e.table);try{await LL.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")PL.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=A3(e.schema,e.table);await LL.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")PL.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(b3,"lmdbDropTable");async function N3(e){let t=new ML(Cr.SYSTEM_SCHEMA_NAME,Cr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Cr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Cr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await vL(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 UL(Cr.SYSTEM_SCHEMA_NAME,Cr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await BL(s)}a(N3,"deleteAttributesFromSystem");async function y3(e){let t=new ML(Cr.SYSTEM_SCHEMA_NAME,Cr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Cr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Cr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Cr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Cr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await vL(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 UL(Cr.SYSTEM_SCHEMA_NAME,Cr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await BL(s)}catch(i){throw i}}a(y3,"dropTableFromSystem")});var qL=T((TTe,GL)=>{"use strict";var I3=require("fs-extra"),w3=os(),C3=bc(),D3=Iu(),L3=ug(),P3=Au(),M3=tg(),U3=yu(),Ei=D(),{getSchemaPath:v3}=je(),{handleHDBError:B3,hdb_errors:H3}=oe(),{HDB_ERROR_MSGS:G3,HTTP_STATUS_CODES:q3}=H3;GL.exports=x3;async function x3(e){let t;try{t=await F3(e.schema);let r=new w3(Ei.SYSTEM_SCHEMA_NAME,Ei.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Ei.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Ei.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await U3(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await L3(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new D3(Ei.SYSTEM_SCHEMA_NAME,Ei.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await P3(s);let i=v3(t);await I3.remove(i)}catch(r){throw r}}a(x3,"lmdbDropSchema");async function F3(e){let t=new C3(Ei.SYSTEM_SCHEMA_NAME,Ei.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Ei.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await M3(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw B3(new Error,G3.SCHEMA_NOT_FOUND(e),q3.NOT_FOUND,void 0,void 0,!0);return n}a(F3,"validateDropSchema")});var wu=T((RTe,xL)=>{"use strict";var _g=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};xL.exports=_g});var fg=T((bTe,FL)=>{"use strict";var k3=require("fs-extra"),Jf=Ve(),{getTransactionAuditStorePath:$3}=je(),dg=at(),OTe=wu();FL.exports=V3;async function V3(e){let t;try{let r=$3(e.schema,e.table);await k3.mkdirp(r),t=await Jf.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{Jf.createDBI(t,dg.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Jf.createDBI(t,dg.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Jf.createDBI(t,dg.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(V3,"createTransactionsAuditEnvironment")});var YL=T((yTe,VL)=>{"use strict";var Eg=D(),kL=Ve(),Y3=Jo(),{getSystemSchemaPath:K3,getSchemaPath:W3}=je(),Q3=ci(),j3=mf(),hg=pf(),z3=x(),J3=fg(),mg=Q3.hdb_table,$L=[];for(let e=0;e<mg.attributes.length;e++)$L.push(mg.attributes[e].attribute);VL.exports=X3;async function X3(e,t){let r=W3(t.schema,t.table),n=new hg(t.schema,t.table,Eg.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new hg(t.schema,t.table,Eg.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new hg(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await kL.createEnvironment(r,t.table),e!==void 0){let o=await kL.openEnvironment(K3(),Eg.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await Y3.insertRecords(o,mg.hash_attribute,$L,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await pg(n),await pg(s),await pg(i)}await J3(t)}catch(o){throw o}}a(X3,"lmdbCreateTable");async function pg(e){try{await j3(e)}catch(t){z3.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(pg,"createAttribute")});var WL=T((wTe,KL)=>{"use strict";var Z3=_u(),eX=fu(),tX=$f(),Cu=D(),rX=Jo().updateRecords,nX=Ve(),{getSchemaPath:sX}=je(),iX=gu(),oX=x();KL.exports=aX;async function aX(e){try{let{schema_table:t,attributes:r}=Z3(e);eX(e,r,t.hash_attribute),e.schema!==Cu.SYSTEM_SCHEMA_NAME&&(r.includes(Cu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Cu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Cu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Cu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await tX(e.hdb_auth_header,t,r),s=sX(e.schema,e.table),i=await nX.openEnvironment(s,e.table),o=await rX(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await iX(e,o)}catch(c){oX.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(aX,"lmdbUpdateRecords")});var jL=T((DTe,QL)=>{"use strict";var cX=D().OPERATIONS_ENUM,Sg=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=cX.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};QL.exports=Sg});var JL=T((MTe,zL)=>{"use strict";var PTe=jL(),lX=_u(),uX=fu(),_X=$f(),Du=D(),dX=Jo().upsertRecords,fX=Ve(),{getSchemaPath:EX}=je(),hX=gu(),pX=x(),{handleHDBError:mX,hdb_errors:SX}=oe();zL.exports=TX;async function TX(e){let t;try{t=lX(e)}catch(l){throw mX(l,l.message,SX.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;uX(e,n,r.hash_attribute),e.schema!==Du.SYSTEM_SCHEMA_NAME&&(n.includes(Du.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(Du.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(Du.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(Du.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await _X(e.hdb_auth_header,r,n),i=EX(e.schema,e.table),o=await fX.openEnvironment(i,e.table),c=await dX(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await hX(e,c)}catch(l){pX.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(TX,"lmdbUpsertRecords")});var ZL=T((vTe,XL)=>{"use strict";var Tg=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};XL.exports=Tg});var tP=T((HTe,eP)=>{"use strict";var gg=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}};eP.exports=gg});var sP=T((xTe,nP)=>{"use strict";var Rg=Ve(),{getTransactionAuditStorePath:gX}=je(),qTe=ZL(),Lu=at(),RX=K(),rP=tP(),AX=require("util").promisify,OX=AX(setTimeout),bX=1e4,NX=100;nP.exports=yX;async function yX(e){let t=gX(e.schema,e.table),r=await Rg.openEnvironment(t,e.table,!0),n=Rg.listDBIs(r);Rg.initializeDBIs(r,Lu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new rP;do s=await IX(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 OX(NX);while(s.transactions_deleted>0);return i}a(yX,"deleteAuditLogsBefore");async function IX(e,t){let r=new rP;try{let n=e.dbis[Lu.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[Lu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];RX.isEmpty(c)||(s=e.dbis[Lu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[Lu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>bX)break}return await s,r}catch(n){throw n}}a(IX,"deleteTransactions")});var oP=T((kTe,iP)=>{"use strict";var Ag=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};iP.exports=Ag});var cP=T((YTe,aP)=>{"use strict";var wX=os(),CX=Iu(),VTe=oP(),Ms=D(),DX=K(),Og=Ve(),LX=ci(),PX=yu(),MX=Au(),{getSchemaPath:UX}=je();aP.exports=vX;async function vX(e,t=!0){let r;e.schema===Ms.SYSTEM_SCHEMA_NAME?r=LX[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await HX(e),s=UX(e.schema,e.table),i=await Og.openEnvironment(s,e.table);return t===!0&&await BX(e,i,r.hash_attribute),Og.dropDBI(i,e.attribute),n}a(vX,"lmdbDropAttribute");async function BX(e,t,r){let n=Og.openDBI(t,r),s,i=e.attribute;for(let{key:o,value:c,version:l}of n.getRange({start:!1,versions:!0})){let _={};for(let u in c)u!==i&&(_[u]=c[u]);s=t.dbis[r].put(o,_,l)}await s}a(BX,"removeAttributeFromAllObjects");async function HX(e){let t=new wX(Ms.SYSTEM_SCHEMA_NAME,Ms.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Ms.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Ms.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Ms.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await PX(t)).filter(o=>o[Ms.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(DX.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[Ms.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new CX(Ms.SYSTEM_SCHEMA_NAME,Ms.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return MX(i)}a(HX,"dropAttributeFromSystem")});var EP=T((QTe,fP)=>{"use strict";var bg=Ve(),Nc=at(),WTe=Ar(),Ng=D(),lP=K(),{getTransactionAuditStorePath:GX}=je(),qX=Ac(),Xf=Tc(),xX=x();fP.exports=FX;async function FX(e){let t=GX(e.schema,e.table),r=await bg.openEnvironment(t,e.table,!0),n=bg.listDBIs(r);bg.initializeDBIs(r,Nc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case Ng.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return uP(r,e.search_values);case Ng.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,$X(r,e.search_values,s);case Ng.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return kX(r,e.search_values);default:return uP(r)}}a(FX,"readAuditLog");function uP(e,t=[0,Date.now()]){lP.isEmpty(t[0])&&(t[0]=0),lP.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Nc.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 Xf,s))}a(uP,"searchTransactionsByTimestamp");function kX(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[Nc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,dP(e,i))}return Object.fromEntries(r)}a(kX,"searchTransactionsByUsername");function $X(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let _=t[c],u=qX.equals(e,Nc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Nc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,_);for(let{value:d}of u){let f=Number(d);n.has(f)?n.get(f).push(_.toString()):n.set(f,[_.toString()])}}let s=Array.from(n.keys()),i=dP(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],_=l.timestamp,u=n.get(_);_P(l,"records",r,u,o),_P(l,"original_records",r,u,o)}return Object.fromEntries(o)}a($X,"searchTransactionsByHashValues");function _P(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 _=s.get(l),u=_[_.length-1];if(u.timestamp===i)u[t]=[c];else{let d=new Xf(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new Xf(e.operation,e.user_name,i,void 0);_[t]=[c],s.set(l,[_])}}}a(_P,"loopRecords");function dP(e,t){let r=[];try{let n=e.dbis[Nc.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 Xf,i);r.push(o)}}catch(i){xX.warn(i)}return r}catch(n){throw n}}a(dP,"batchSearchTransactions")});var pP=T((XTe,hP)=>{"use strict";var{getSchemaPath:zTe}=je(),JTe=Ve(),{database:VX}=(ge(),ie(ke));hP.exports={writeTransaction:YX};async function YX(e,t,r){return VX({database:e,table:t}).transaction(r)}a(YX,"writeTransaction")});var gP=T((ege,TP)=>{"use strict";var{getSchemaPath:mP}=je(),SP=Ve();TP.exports={flush:KX,resetReadTxn:WX};async function KX(e,t){return(await SP.openEnvironment(mP(e,t),t.toString())).flushed}a(KX,"flush");async function WX(e,t){try{(await SP.openEnvironment(mP(e,t),t.toString())).resetReadTxn()}catch{}}a(WX,"resetReadTxn")});var bP=T((rge,OP)=>{"use strict";var{Readable:QX}=require("stream"),{getDatabases:jX}=(ge(),ie(ke)),{readSync:zX,openSync:JX,createReadStream:RP}=require("fs"),{open:XX}=require("lmdb"),AP=su(),ZX=iu(),{AUDIT_STORE_OPTIONS:eZ}=(Zi(),ie(NP)),{INTERNAL_DBIS_NAME:tZ,AUDIT_STORE_NAME:rZ}=at();OP.exports=sZ;var yg=32768,nZ=100;async function sZ(e){let t=e.database||e.schema||"data",r=jX()[t],n=new Date().toISOString(),s=e.tables||e.table&&[e.table];if(s){let _=r[s[0]];if(!_)throw new Error(`Can not find table ${s[0]}`);let u=_.dbisDB,d=XX({noSync:!0,maxDbs:ZX.MAX_DBS}),f,E=d.openDB(tZ,new AP(!1)),h=u.useReadTransaction(),m=0,S=a(async function(R,A){A.encoding="binary",A.encoder=void 0;let P=d.openDB(R,A),U=u.openDB(R,A);for(let{key:v,version:k,value:H}of U.getRange({start:null,transaction:h,versions:U.useVersions}))f=P.put(v,H,k),m++%nZ===0&&(await new Promise(j=>setTimeout(j,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:R,value:A}of u.getRange({transaction:h,start:!1}))if(s.some(P=>R.startsWith?.(P+"/"))){E.put(R,A);let[,P]=R.split("/"),U=!P,v=new AP(!U,U);await S(R,v)}e.include_audit&&await S(rZ,Object.assign({},eZ)),await f;let g=RP(d.path);return g.headers=l(),g.on("close",()=>{h.done(),d.close()}),g}let o=r[Object.keys(r)[0]].primaryStore,c=JX(o.path);return o.transaction(()=>{let _=Buffer.alloc(yg);zX(c,_,0,yg),o.resetReadTxn();let u=o.useReadTransaction();u.renew();let d=RP(null,{fd:c,start:yg}),f=new QX.from(async function*(){yield _;for await(let E of d)u.openTimer&&(u.openTimer=0),yield E;u.done()}());return f.headers=l(),f});function l(){let _=new Map;return _.set("content-type","application/octet-stream"),_.set("content-disposition",`attachment; filename="${t}"`),_.set("date",n),_}}a(sZ,"getBackup")});var wP=T((sge,IP)=>{"use strict";var iZ=x(),{handleHDBError:oZ}=oe(),aZ=$I(),cZ=mf(),lZ=QT(),uZ=qD(),_Z=Au(),dZ=tg(),fZ=_L(),EZ=gL(),hZ=yu(),pZ=wL(),mZ=qL(),SZ=YL(),TZ=WL(),gZ=JL(),RZ=sP(),AZ=ug(),OZ=cP(),bZ=EP(),NZ=pP(),yP=gP(),yZ=bP(),Ig=class extends aZ{static{a(this,"LMDBBridge")}async searchByConditions(t){return pZ(t)}async getDataByHash(t){return await dZ(t)}async searchByHash(t){return await fZ(t)}async getDataByValue(t,r){return await EZ(t,r)}async searchByValue(t){return await hZ(t)}async createSchema(t){return await uZ(t)}async dropSchema(t){return await mZ(t)}async createTable(t,r){return await SZ(t,r)}async dropTable(t){return await AZ(t)}async createAttribute(t){return await cZ(t)}async createRecords(t){return await lZ(t)}async updateRecords(t){return await TZ(t)}async upsertRecords(t){try{return await gZ(t)}catch(r){throw oZ(r,null,null,iZ.ERR,r)}}async deleteRecords(t){return await _Z(t)}async dropAttribute(t){return await OZ(t)}async deleteAuditLogsBefore(t){return await RZ(t)}async readAuditLog(t){return await bZ(t)}writeTransaction(t,r,n){return NZ.writeTransaction(t,r,n)}flush(t,r){return yP.flush(t,r)}resetReadTxn(t,r){return yP.resetReadTxn(t,r)}getBackup(t){return yZ(t)}};IP.exports=Ig});function LZ(){DZ=setInterval(function(){for(let e of wg)if(e.stale){let t=e[Ie]?.url;LP.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},CZ).unref()}var Cg,DP,LP,IZ,wg,wZ,Pu,CP,da,Zf,CZ,DZ,Dg=Oe(()=>{Cg=B(Ar()),DP=B(oe()),LP=B(x());es();IZ=100,wg=new Set,wZ=25e3,da=class e{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;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.readTxnsUsed=1,this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxn.openTimer&&(this.readTxn.openTimer=0),wg.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(wg.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(Pu&&performance.now()-CP>wZ)throw new DP.ServerError("Outstanding write transactions have too long of queue, please try again later",503)}addWrite(t){if(this.open===0)throw new Error("Can not use a transaction that is no longer open");if(this.open===2){let r=new e;return r.addWrite(t),r.commit({})}else this.writes.push(t)}removeWrite(t){let r=this.writes.indexOf(t);r>-1&&(this.writes[r]=null)}commit(t={}){let r=this.timestamp;r||(r=this.timestamp=t.timestamp=t.timestamp||(0,Cg.getNextMonotonicTime)());let n=t.retries||0;if(this.validated<this.writes.length)try{let u=this.validated;this.validated=this.writes.length;for(let f=u;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let d;for(let f=u;f<this.validated;f++){let E=this.writes[f];E&&(E.before||E.beforeIntermediate)&&(d=!0)}if(d)return(async()=>{try{for(let f=0;f<2;f++){let E;for(let h=u;h<this.validated;h++){let m=this.writes[h];if(!m)continue;let S=m[f===0?"before":"beforeIntermediate"];if(S){let g=S();E?E.push?E.push(g):E=[E,g]:E=g}}E&&await(E.push?Promise.all(E):E)}}catch(f){throw this.abort(),f}return this.commit(t)})()}catch(u){throw this.abort(),u}n||this.doneReadTxn(),this.open=t?.letItLinger?2:0;let s,i=[],o=0;this.writes=this.writes.filter(u=>u);let c=a(u=>{u.commit(r,u.entry,n)},"doWrite"),l=a(()=>{let u=this.writes[o++];if(u)if(u.key){n>0&&(u.entry=u.store.getEntry(u.key));let d=u.store.ifVersion(u.key,u.entry?.version??null,l);s=s||d}else l();else for(let d of this.writes)c(d)},"nextCondition");if(this.writes.length<IZ>>n?l():s=this.writes[0].store.transaction(()=>{for(let u of this.writes)u.entry=u.store.getEntry(u.key),c(u);return!0}),s)return Pu||(Pu=s,CP=performance.now(),Pu.then(()=>{Pu=null})),s.then(u=>u?(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))):(t?t.retries=n+1:t={retries:1},this.commit(t)));let _={txnTime:r};if(this.next){let u=this.next?.commit(t);if(u?.then)return u?.then(d=>({txnTime:r,next:d}));_.next=u}return _}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=0,this.writes=[]}},Zf=class extends da{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,Cg.getNextMonotonicTime)())}getReadTxn(){}},CZ=3e4;a(LZ,"startMonitoringTxns");LZ()});function Ze(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 da;e.timestamp&&(n.timestamp=e.timestamp),n[Ie]=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 PP,fa=Oe(()=>{PP=require("../index");es();Dg();a(Ze,"transaction");(0,PP._assignPackageExport)("transaction",Ze);Ze.commit=function(e){let t=(e[Ie]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Ze.abort=function(e){let t=(e[Ie]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var FP={};Fe(FP,{ResourceBridge:()=>Mg});function Ug({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 UP(e,t){let r=Us(e),n=Ug(e,r);if(!r)throw new as.ClientError(`Table ${e.table} not found`);let s;n&&r.attributes.length-n.length>2&&n.length<5&&(s=!0);let i={user:e.hdb_user},o;Ze(i,()=>new Promise(_=>o=_));let c=e.ids||e.hash_values,l=0;return{[Symbol.asyncIterator](){return{async next(){if(l<c.length){let _=c[l++],u=await r.get({id:_,lazy:s,select:n},i);return u=u&&tE(u),t?{value:{key:_,value:u}}:{value:u}}else return o(),{done:!0}},return(_){return o(),{value:_,done:!0}},throw(_){return o(),{done:!0}}}}}}function Us(e){let t=e.database||e.schema||MZ,r=Dr()[t];if(!r)throw(0,as.handleHDBError)(new Error,PZ.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function vP(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*BP(e,t,r){let n;for await(let s of e.getHistory(t,r)){let i=s.type;i==="put"&&(i="upsert");let{id:o,version:c,value:l}=s;n?.timestamp===c?(n.hash_values.push(o),n.records.push(l)):(n&&(yield n),n={operation:i,user_name:s.user,timestamp:c,hash_values:[o],records:[l]})}n&&(yield n)}var HP,eE,as,GP,qP,cs,Lg,Pg,xP,PZ,MZ,UZ,vZ,MP,Mg,kP=Oe(()=>{"use strict";HP=B(wP()),eE=B(Oc()),as=B(oe());ge();GP=B(_u()),qP=B(fu()),cs=B(D()),Lg=B(di()),Pg=B(is()),xP=B(K());fa();rE();({HDB_ERROR_MSGS:PZ}=as.hdb_errors),MZ="data",UZ=1e4,vZ=10,Mg=class extends HP.default{static{a(this,"ResourceBridge")}constructor(t){super(t),MP=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,eE.default)(t,"conditions");if(r)throw(0,as.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=Us(t);if(!n)throw new as.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:Ug(t,n),sort:t.sort,allowFullScan:!0})}async createTable(t,r){let n=r.attributes,s=!!n,i=r.primary_key||r.hash_attribute;if(n)for(let o of n)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new as.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");n=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}Et({database:r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration})}async createAttribute(t){return await Us(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Us(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=a((o,c,l)=>(c=Object.assign({},c),delete c[n],r.primaryStore.ifVersion(o,l,()=>r.primaryStore.put(o,c,l)).then(_=>{if(!_){let{value:u,version:d}=r.primaryStore.getEntry(o);return i(o,u,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(_=>setImmediate(_));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){Us(t).dropTable()}createSchema(t){return Mu({database:t.schema,table:null}),Lg.signalSchemaChange(new Pg.SchemaEventMsg(process.pid,cs.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await vg(t.schema),Lg.signalSchemaChange(new Pg.SchemaEventMsg(process.pid,cs.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,MP.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,GP.default)(t);(0,qP.default)(t,n,r.primaryKey);let s,i=Dr()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return Ze(o,async c=>{if(!i.schemaDefined){s=[];for(let u of n)i.attributes.find(f=>f.name==u)||s.push(u);s.length>0&&await i.addAttributes(s.map(u=>({name:u,indexed:!0})))}let l=[],_=[];for(let u of t.records){let d=await i.get(u[i.primaryKey],o);if(t.requires_existing&&!d||t.requires_no_existing&&d){_.push(u[i.primaryKey]);continue}d&&(d=tE(d));for(let f in u)if(Object.prototype.hasOwnProperty.call(u,f)){let E=u[f];if(typeof E=="function")try{let h=E([[d]]);Array.isArray(h)&&(E=h[0].func_val,u[f]=E)}catch(h){throw h.message+="Trying to set key "+f+" on object"+JSON.stringify(u),h}}if(d)for(let f in d)Object.prototype.hasOwnProperty.call(u,f)||(u[f]=d[f]);await i.put(u,o),l.push(u[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:l,new_attributes:s,skipped_hashes:_}})}async deleteRecords(t){let r=Dr()[t.schema][t.table],n={user:t.hdb_user};return Ze(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 vP(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=Dr()[t.schema][t.table];if(!r.createdTimeProperty)throw new as.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:cs.VALUE_SEARCH_COMPARATORS.LESS}]}),s=!1,i=[],o=[],c=0,l=[],_=a(async()=>{let u=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:l});i.push(...u.deleted_hashes),o.push(...u.skipped_hashes),await(0,xP.async_set_timeout)(vZ),l=[],s=!0},"chunkDelete");for await(let u of n)l.push(u[r.primaryKey]),c++,c%UZ===0&&await _();return l.length>0&&await _(),s?vP(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,eE.default)(t,"hashes");if(r)throw r;return UP(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of UP(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&cs.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,eE.default)(t,"value");if(n)throw n;let s=Us(t);if(!s)throw new as.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===cs.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return s.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:Ug(t,s)})}async getDataByValue(t,r){let n=new Map,s=Us(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){Us({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Us(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=Us(t),n={};switch(t.search_type){case cs.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)n[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.type;return c==="put"&&(c="upsert"),{operation:c,timestamp:o.version,user_name:o.user,hash_values:[i],records:[o.value]}});return n;case cs.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let s=t.search_values;for await(let i of BP(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return BP(r,t.search_values?.[0],t.search_values?.[1])}}};a(Ug,"getSelect");a(UP,"getRecords");a(Us,"getTable");a(vP,"createDeleteResponse");a(BP,"groupRecordsInHistory")});var Mn=T((Tge,$P)=>{"use strict";var{ResourceBridge:BZ}=(kP(),ie(FP)),HZ=X();HZ.initSync();var nE;function GZ(){return nE||(nE=new BZ,nE)}a(GZ,"getBridge");$P.exports=GZ()});var WP=T((Rge,KP)=>{"use strict";var VP=require("lodash"),Uu=require("mathjs"),qZ=require("jsonata"),YP=K();KP.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?VP.uniqWith(e,VP.isEqual):e,searchJSON:xZ,mad:vu.bind(null,Uu.mad),mean:vu.bind(null,Uu.mean),mode:vu.bind(null,Uu.mode),prod:vu.bind(null,Uu.prod),median:vu.bind(null,Uu.median)};function vu(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(vu,"aggregateFunction");function xZ(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(YP.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),YP.isEmpty(this.__ala__.res[r])){let n=qZ(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(xZ,"searchJSON")});var jP=T((Oge,QP)=>{"use strict";var Ot=require("moment"),Bg="YYYY-MM-DDTHH:mm:ss.SSSZZ";Ot.suppressDeprecationWarnings=!0;QP.exports={current_date:()=>Ot().utc().format("YYYY-MM-DD"),current_time:()=>Ot().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return Ot(e).utc().format("YYYY");case"month":return Ot(e).utc().format("MM");case"day":return Ot(e).utc().format("DD");case"hour":return Ot(e).utc().format("HH");case"minute":return Ot(e).utc().format("mm");case"second":return Ot(e).utc().format("ss");case"millisecond":return Ot(e).utc().format("SSS");default:break}},date:e=>Ot(e).utc().format(Bg),date_format:(e,t)=>Ot(e).utc().format(t),date_add:(e,t,r)=>Ot(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>Ot(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let n=Ot(e).utc(),s=Ot(t).utc();return r?n.diff(s,r,!0):n.diff(s)},now:()=>Ot().utc().valueOf(),get_server_time:()=>Ot().format(Bg),offset_utc:(e,t)=>Ot(e).utc().utcOffset(t).format(Bg)}});var ZP=T((bge,XP)=>{"use strict";var FZ=require("@turf/area"),kZ=require("@turf/length"),$Z=require("@turf/circle"),VZ=require("@turf/difference"),YZ=require("@turf/distance"),KZ=require("@turf/boolean-contains"),WZ=require("@turf/boolean-equal"),QZ=require("@turf/boolean-disjoint"),jZ=require("@turf/helpers"),zP=D(),Re=K(),hi=x();XP.exports={geoArea:zZ,geoLength:JZ,geoCircle:XZ,geoDifference:ZZ,geoDistance:JP,geoNear:e5,geoContains:t5,geoEqual:r5,geoCrosses:n5,geoConvert:s5};function zZ(e){if(Re.isEmpty(e))return NaN;typeof e=="string"&&(e=Re.autoCastJSON(e));try{return FZ.default(e)}catch(t){return hi.trace(t,e),NaN}}a(zZ,"geoArea");function JZ(e,t){if(Re.isEmpty(e))return NaN;typeof e=="string"&&(e=Re.autoCastJSON(e));try{return kZ.default(e,{units:t||"kilometers"})}catch(r){return hi.trace(r,e),NaN}}a(JZ,"geoLength");function XZ(e,t,r){if(Re.isEmpty(e))return NaN;if(Re.isEmpty(t))return NaN;typeof e=="string"&&(e=Re.autoCastJSON(e));try{return $Z.default(e,t,{units:r||"kilometers"})}catch(n){return hi.trace(n,e,t),NaN}}a(XZ,"geoCircle");function ZZ(e,t){if(Re.isEmpty(e))return NaN;if(Re.isEmpty(t))return NaN;typeof e=="string"&&(e=Re.autoCastJSON(e)),typeof t=="string"&&(t=Re.autoCastJSON(t));try{return VZ(e,t)}catch(r){return hi.trace(r,e,t),NaN}}a(ZZ,"geoDifference");function JP(e,t,r){if(Re.isEmpty(e))return NaN;if(Re.isEmpty(t))return NaN;typeof e=="string"&&(e=Re.autoCastJSON(e)),typeof t=="string"&&(t=Re.autoCastJSON(t));try{return YZ.default(e,t,{units:r||"kilometers"})}catch(n){return hi.trace(n,e,t),NaN}}a(JP,"geoDistance");function e5(e,t,r,n){if(Re.isEmpty(e)||Re.isEmpty(t))return!1;if(Re.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=Re.autoCastJSON(e)),typeof t=="string"&&(t=Re.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return JP(e,t,n)<=r}catch(s){return hi.trace(s,e,t),!1}}a(e5,"geoNear");function t5(e,t){if(Re.isEmpty(e)||Re.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Re.autoCastJSON(e)),typeof t=="string"&&(t=Re.autoCastJSON(t));try{return KZ.default(e,t)}catch(r){return hi.trace(r,e,t),!1}}a(t5,"geoContains");function r5(e,t){if(Re.isEmpty(e)||Re.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Re.autoCastJSON(e)),typeof t=="string"&&(t=Re.autoCastJSON(t));try{return WZ.default(e,t)}catch(r){return hi.trace(r,e,t),!1}}a(r5,"geoEqual");function n5(e,t){if(Re.isEmpty(e)||Re.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Re.autoCastJSON(e)),typeof t=="string"&&(t=Re.autoCastJSON(t));try{return!QZ.default(e,t)}catch(r){return hi.trace(r,e,t),!1}}a(n5,"geoCrosses");function s5(e,t,r){if(Re.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(Re.isEmpty(t))throw new Error("geo_type is required");if(Re.isEmpty(zP.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(zP.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Re.autoCastJSON(e)),jZ[t](e,r)}a(s5,"geoConvert")});var sE=T((yge,eM)=>{var Ea=WP(),ln=jP(),vs=ZP();eM.exports=e=>{e.aggr.mad=e.aggr.MAD=Ea.mad,e.aggr.mean=e.aggr.MEAN=Ea.mean,e.aggr.mode=e.aggr.MODE=Ea.mode,e.aggr.prod=e.aggr.PROD=Ea.prod,e.aggr.median=e.aggr.MEDIAN=Ea.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Ea.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Ea.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=ln.current_date,e.fn.current_time=e.fn.CURRENT_TIME=ln.current_time,e.fn.extract=e.fn.EXTRACT=ln.extract,e.fn.date=e.fn.DATE=ln.date,e.fn.date_format=e.fn.DATE_FORMAT=ln.date_format,e.fn.date_add=e.fn.DATE_ADD=ln.date_add,e.fn.date_sub=e.fn.DATE_SUB=ln.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=ln.date_diff,e.fn.now=e.fn.NOW=ln.now,e.fn.offset_utc=e.fn.OFFSET_UTC=ln.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=ln.get_server_time,e.fn.getdate=e.fn.GETDATE=ln.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=ln.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=vs.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=vs.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=vs.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=vs.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=vs.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=vs.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=vs.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=vs.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=vs.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=vs.geoNear}});var sM=T((Ige,nM)=>{"use strict";var Bu=require("lodash"),Lr=require("alasql");Lr.options.cache=!1;var i5=sE(),tM=require("clone"),iE=require("recursive-iterator"),de=x(),Pe=K(),yc=Mn(),o5=D(),{hdb_errors:a5}=oe(),{getDatabases:rM}=(ge(),ie(ke)),c5="IS NULL",ls="There was a problem performing this search. Please check the logs and try again.";i5(Lr);var Hg=class{static{a(this,"SQLSearch")}constructor(t,r){if(Pe.isEmpty(t))throw de.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(),Pe.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!Pe.isEmptyOrZeroLength(n))return de.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw de.error("Error thrown from checkEmptySQL in SQLSearch class method search."),de.error(n),new Error(ls)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw de.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),de.error(n),new Error(ls)}if(Object.keys(this.data).length===0)return de.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw de.error("Error thrown from processJoins in SQLSearch class method search."),de.error(n),new Error(ls)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw de.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),de.error(n),new Error(ls)}try{return t=await this._finalSQL(),t}catch(n){throw de.error("Error thrown from finalSQL in SQLSearch class method search."),de.error(n),new Error(ls)}}_getColumns(){let t=new iE(this.statement);for(let{node:r,path:n}of t)r&&r.columnid&&(this.columns[n[0]]||(this.columns[n[0]]=[]),this.columns[n[0]].push(tM(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Bu.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let n=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[n]={},this.data[n].__hash_name=rM()[r.databaseid][r.tableid].primaryKey,this.data[n].__merged_data={},this.data[n].__merged_attributes=[],this.data[n].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(Pe.isEmpty(this.statement.where)){de.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new iE(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!Pe.isEmpty(r)&&r.right)if(Pe.isNotEmptyAndHasValue(r.right.value)){let n=Pe.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new Lr.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=Pe.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new Lr.yy.LogicValue({value:i}):n instanceof Lr.yy.StringValue&&Pe.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new Lr.yy.NumValue({value:i}))});if(t){de.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new iE(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(!Pe.isEmpty(o5.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(Pe.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(Pe.isEmptyOrZeroLength(r.left.columnid)||Pe.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(Pe.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"=":!Pe.isEmpty(r.right.value)||!Pe.isEmpty(r.left.value)?n.add(Pe.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 _=0;_<l.length;_++)if(l[_].value)n.add(l[_].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(Pe.isEmptyOrZeroLength(this.all_table_attributes)&&Pe.isEmptyOrZeroLength(this.statement.from)&&Pe.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&&Bu.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(Pe.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);Pe.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(Pe.isEmptyOrZeroLength(this.all_table_attributes)&&!Pe.isEmptyOrZeroLength(this.columns.columns))return t;if(Pe.isEmptyOrZeroLength(this.all_table_attributes)&&Pe.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Lr.promise(r)}catch(r){throw de.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),de.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let n=this._findColumn(r);n&&this.fetch_attributes.push(tM(n))})}_addColumnToMergedAttributes(t,r){this.data[t].__merged_attributes.push(r),this.data[t].__merged_attr_map[r]=this.data[t].__merged_attributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__merged_data[r].splice(0,1,r)}_updateMergedAttribute(t,r,n,s){let i=this.data[t].__merged_attr_map[n];this.data[t].__merged_data[r].splice(i,1,s)}async _getFetchAttributeValues(){if(Pe.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(c5)>-1&&this.tables.forEach(s=>{let i={columnid:rM()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Bu.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,_=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(l=!0),!Pe.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!Pe.isEmptyOrZeroLength(this.exact_search_values[_].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[_].values);let u=await yc.getDataByHash(c);for(let d of c.hash_values)u.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d))}catch(u){throw de.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),de.error(u),new Error(ls)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[_].values).map(async u=>{let d=Object.assign({},c);d.search_value=u;let f=await yc.getDataByValue(d);for(let[E,h]of f)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,s.attribute,h[s.attribute]):(this.data[i].__merged_data[E]=[...n[i]],this._updateMergedAttribute(i,E,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,E))}))}catch(u){throw de.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),de.error(u),new Error(ls)}else if(!Pe.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!Pe.isEmptyOrZeroLength(this.comparator_search_values[_].comparators))try{let u=this.comparator_search_values[_].comparators;for(let d=0,f=u.length;d<f;d++){let E=u[d];c.search_attribute=E.attribute,c.search_value=E.search_value;let h=await yc.getDataByValue(c,E.operation);if(l)for(let[m]of h)this.data[i].__merged_data[m]||(this.data[i].__merged_data[m]=[...n[i]],this._setMergedHashAttribute(i,m));else for(let[m,S]of h)this.data[i].__merged_data[m]?this._updateMergedAttribute(i,m,s.attribute,S[s.attribute]):(this.data[i].__merged_data[m]=[...n[i]],this._updateMergedAttribute(i,m,s.attribute,S[s.attribute]),this._setMergedHashAttribute(i,m))}}catch(u){throw de.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),de.error(u),new Error(ls)}else try{c.search_attribute=s.attribute,c.search_value="*";let u=await yc.getDataByValue(c);if(l)for(let[d]of u)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d));else for(let[d,f]of u)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,s.attribute,f[s.attribute]):(this.data[i].__merged_data[d]=[...n[i]],this._updateMergedAttribute(i,d,s.attribute,f[s.attribute]),this._setMergedHashAttribute(i,d))}catch(u){throw de.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),de.error(u),new Error(ls)}}}_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 Lr.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 Lr.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new Lr.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 Lr.yy.FuncValue:new Lr.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(E=>{E.joinmode&&E.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(E.table);let h=E.joinmode+" JOIN ? AS "+(E.as?E.as:E.table.tableid);E.on&&(h+=" ON "+E.on.toString()),i.push(h),t.push(Object.values(this.data[`${E.table.databaseid_orig}_${E.table.as?E.table.as_orig:E.table.tableid_orig}`].__merged_data))});let o=[],c={};s.forEach(E=>{let h=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__hash_name,m=E.as?E.as_orig:E.tableid_orig;o.push({key:`'${m}.${h}'`,schema:E.databaseid_orig,table:E.as?E.as_orig:E.tableid_orig,keys:new Set}),r.push(`${E.as?E.as:E.tableid}.\`${h}\` AS "${m}.${h}"`),c[E.as?E.as_orig:E.tableid_orig]=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__merged_attributes});let l=this.statement.where?"WHERE "+this.statement.where:"";l=l.replace(/NOT\(NULL\)/g,"NOT NULL");let _="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(_="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(E=>{E.is_func?r.push(E.initial_select_column.toString()):E.initial_select_column.tableid?r.push(`${E.initial_select_column.tableid}.${E.initial_select_column.columnid} AS ${E.expression.columnid}`):r.push(`${E.initial_select_column.columnid} AS ${E.expression.columnid}`)}));let u="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(u=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let f=[];try{let E=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${l} ${_} ${u} ${d}`,h=this._convertColumnsToIndexes(E,s);f=await Lr.promise(h,t),t=null}catch(E){throw de.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),de.error(E),new Error("There was a problem processing the data.")}if(f&&f.length>0){for(let E=0,h=f.length;E<h;E++){let m=f[E];o.forEach(S=>{m[S.key]!==null&&m[S.key]!==void 0&&S.keys.add(m[S.key])})}o.forEach(E=>{let h=Object.keys(this.data[`${E.schema}_${E.table}`].__merged_data),m=Bu.difference(h,[...E.keys].map(S=>S.toString()));for(let S=0,g=m.length;S<g;S++){let R=m[S];delete this.data[`${E.schema}_${E.table}`].__merged_data[R]}})}return{existing_attributes:c,joined_length:f?f.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new iE(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=Bu.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 de.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),de.error(i),new Error(ls)}}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 u in i)o.push(i[u][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 yc.getDataByHash(c),_=s.columns.length;for(let u=0,d=o.length;u<d;u++){let f=o[u],E=l.get(f);for(let h=0;h<_;h++){let m=s.columns[h],S=E[m]===void 0?null:E[m];this.data[n].__merged_data[f].push(S)}}}}catch(r){throw de.error("Error thrown from getDataByHash function in SQLSearch class method getData."),de.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();de.trace(`Final SQL: ${s}`),n=await Lr.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),de.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw de.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),de.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 de.error(a5.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),de.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],_=new RegExp(`${l}.\`${o}\``,"g"),u=`${l}.[${c}]`;n=n.replace(_,u)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=new RegExp(`\`${o}\``,"g"),_=`[${c}]`;n=n.replace(l,_)});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 yc.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]=Object.assign({},r[s])),this.data[s].__merged_data[c][t[n.attribute]]=l[n.attribute]??null}catch(o){throw de.error("There was an error when processing this SQL operation. Check your logs"),de.error(o),new Error(ls)}}return Object.values(Object.values(this.data)[0].__merged_data)}};nM.exports=Hg});var ir=T((Cge,iM)=>{"use strict";var l5=FI();iM.exports={searchByConditions:_5,searchByHash:d5,searchByValue:f5,search:E5};var Gg=Mn(),{transformReq:qg}=K(),u5=sM();async function _5(e){return qg(e),Gg.searchByConditions(e)}a(_5,"searchByConditions");async function d5(e){qg(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of Gg.searchByHash(e))r&&t.push(r);return t}a(d5,"searchByHash");async function f5(e){qg(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of Gg.searchByValue(e))t.push(r);return t}a(f5,"searchByValue");function E5(e,t){try{let r=new l5(e);r.validate(),new u5(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(E5,"search")});var oE=T((Lge,oM)=>{"use strict";var h5=Mn();oM.exports={writeTransaction:p5};function p5(e,t,r){return h5.writeTransaction(e,t,r)}a(p5,"writeTransaction")});var uM=T((Uge,lM)=>{"use strict";var m5=ir(),S5=Pn(),aM=x(),T5=yr(),Mge=oE(),g5=require("clone"),Fg=require("alasql"),R5=sE(),cM=require("util"),A5=cM.promisify(S5.getTableSchema),O5=cM.promisify(m5.search),b5=D(),xg=K();R5(Fg);lM.exports={update:y5};var N5="There was a problem performing this update. Please check the logs and try again.";async function y5({statement:e,hdb_user:t}){let r=await A5(e.table.databaseid,e.table.tableid),n=I5(e.columns);xg.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=g5(s),c=xg.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,_=Fg.parse(l).statements[0],u=await O5(_),d=w5(n,u);return C5(o,d,t)}a(y5,"update");function I5(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=Fg.compile(`SELECT ${r.expression.toString()} AS [${b5.FUNC_VAL}] FROM ?`)}),t}catch(t){throw aM.error(t),new Error(N5)}}a(I5,"createUpdateRecord");function w5(e,t){return xg.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(w5,"buildUpdateRecords");async function C5(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await T5.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){aM.error(`Error delete new_attributes from update response: ${i}`)}return s}a(C5,"updateRecords")});var dM=T((Gge,_M)=>{var D5=require("alasql"),L5=ir(),P5=x(),M5=Mn(),$g=require("util"),kg=K(),U5=D(),v5=Pn(),Bge=oE(),Hge=yr(),B5="record",H5="successfully deleted",G5=$g.callbackify(k5),q5=$g.promisify(L5.search),x5=$g.promisify(v5.getTableSchema);_M.exports={convertDelete:G5};function F5(e){return`${e.deleted_hashes.length} ${B5}${e.deleted_hashes.length===1?"":"s"} ${H5}`}a(F5,"generateReturnMessage");async function k5({statement:e,hdb_user:t}){let r=await x5(e.table.databaseid,e.table.tableid);kg.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=kg.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=D5.parse(o).statements[0],l={operation:U5.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await q5(c);let _=await M5.deleteRecords(l);return kg.isEmptyOrZeroLength(_.message)&&(_.message=F5(_)),delete _.txn_time,_}catch(_){throw P5.error(_),_.hdb_code?_.message:_}}a(k5,"convertDelete")});var mM=T((xge,pM)=>{"use strict";var $5=_i(),{hdb_errors:fM}=oe(),{getDatabases:EM}=(ge(),ie(ke));pM.exports={checkSchemaExists:hM,checkSchemaTableExists:V5,schema_describe:$5};async function hM(e){if(!EM()[e])return fM.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(hM,"checkSchemaExists");async function V5(e,t){let r=await hM(e);if(r)return r;if(!EM()[e][t])return fM.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(V5,"checkSchemaTableExists")});var ha=T((kge,Y5)=>{Y5.exports={name:"harperdb",version:"4.3.3",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","cloud","enterprise","Fastify","NATS"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{"minimum-node":"16.0.0","go-lang":"1.21.7","nats-server":"2.10.11"},exports:{".":"./index.js"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"SEE LICENSE IN LICENSE",scripts:{submodules:"git submodule update --init --recursive",build:"eslint -c ./.eslintbuild bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/","cover:test":"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && nyc --no-clean --reporter=lcovonly npm run test:apitests && nyc --no-clean --reporter=lcovonly npm run test:resources && nyc --no-clean --reporter=lcovonly npm run test:logging && nyc --no-clean --reporter=lcovonly npm run test:upgrade && nyc --no-clean --reporter=lcovonly npm run test:nats && nyc --no-clean --reporter=lcovonly npm run test:cfserver && nyc --no-clean --reporter=lcovonly npm run test:hdbserver && nyc --no-clean --reporter=lcovonly npm run test:bin && nyc --no-clean --reporter=lcovonly npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license",test:"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && npm run test:apitests && npm run test:resources && npm run test:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:bin && npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:resources":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/resources/**/*.js' --config '../unitTests/.mocharc.json'","test:bin":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/bin/**/*.js' --config '../unitTests/.mocharc.json'","test:main":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","test:lmdbbridge":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","test:lmdbutility":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","test:hdbserver":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","test:cfserver":"npm run submodules && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/fastifyRoutes/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","test:nats":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","test:upgrade":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","test:apitests":"pm2 kill && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*-test.mjs' --config '../unitTests/.mocharc.json'","test:logging":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test"},dependencies:{"@aws-sdk/client-s3":"3.535.0","@aws-sdk/lib-storage":"3.535.0","@endo/static-module-record":"^1.0.4","@fastify/autoload":"5.7.1","@fastify/compress":"~6.5.0","@fastify/cors":"~8.5.0","@fastify/static":"~6.12.0","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"4.1.10","cbor-x":"1.5.8",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2","fast-glob":"3.3.2",fastify:"~4.26.2","fastify-plugin":"~4.5.1","fs-extra":"11.2.0",graphql:"^16.8.1","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.12.2","json-bigint-fixes":"1.1.0",json2csv:"5.0.7",jsonata:"1.8.7",jsonwebtoken:"9.0.2",lmdb:"3.0.3",lodash:"4.17.21",mathjs:"11.12.0",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.30.1","mqtt-packet":"~8.2.1",msgpackr:"1.10.1",nats:"2.19.0",needle:"3.3.1","node-stream-zip":"1.15.0","node-unix-socket":"0.2.5","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.5.1",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.16.0",pm2:"5.3.1",prompt:"1.3.0","properties-reader":"2.3.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^0.18.0","serve-static":"1.15.0",ses:"1.1.0","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.22.3","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.1","validate.js":"0.13.1",ws:"8.16.0",yaml:"2.4.1"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"latest","@typescript-eslint/eslint-plugin":"^5.55.0","@typescript-eslint/parser":"^5.55.0",axios:"1.6.8",chai:"4.4.1","chai-integer":"0.1.0",esbuild:"^0.20.2",eslint:"8.22.0","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.1","eslint-plugin-radar":"0.2.1",eventsource:"^2.0.2","hook-std":"3.0.0","intercept-stdout":"0.1.2",mocha:"^10.3.0","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",mqtt:"~4.3.8",newman:"5.3.2","newman-reporter-html":"1.0.5","newman-reporter-htmlextra":"1.22.11","newman-reporter-teamcity":"0.1.12","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"2.8.4",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0","source-map-support":"^0.5.21",typescript:"^5.4.2","why-is-node-still-running":"^1.0.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","utf-8-validate":"^5.0.10"}}});var Fu={};Fe(Fu,{addAnalyticsListener:()=>xu,recordAction:()=>un,recordActionBinary:()=>Un,setAnalyticsEnabled:()=>K5});function K5(e){yM=e}function un(e,t,r,n,s){if(!yM)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=lE.get(i);if(o)if(typeof e=="number"){let c=o.values,l=c.index++;if(l>=c.length){let _=c;o.values=c=new Float32Array(l*2),c.set(_),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},lE.set(i,o)}aE||W5()}function Un(e,t,r,n,s){un(!!e,t,r,n,s)}function xu(e){CM.push(e)}function W5(){aE=performance.now(),setTimeout(async()=>{let e=performance.now()-aE;aE=0;let t=[],r={time:Date.now(),period:e,threadId:pa.threadId,metrics:t};for(let[s,i]of lE){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,l=0,_=[],u;for(let d of DM){let f=Math.floor(c*d),E=o[f-1];if(f>l){let h=f-l;if(E===u){let m=_[_.length-1];typeof m=="number"?_[_.length-1]={value:m,count:1+h}:m.count+=h}else _.push(h>1?{value:E,count:h}:E),u=E;l=f}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:_,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await LM()}let n=process.memoryUsage();t.push({metric:"memory",threadId:pa.threadId,byThread:!0,...n});for(let s of CM)s(t);lE=new Map,pa.parentPort?pa.parentPort.postMessage({type:wM,report:r}):UM({report:r})},IM).unref()}async function Q5(e,t=6e4){let r=Kg(),n=PM(),s=new Promise(m=>{let S=performance.now();setImmediate(()=>{let g=performance.now();g-S>5e3&&(0,Hu.warn)("Unusually high event queue latency on the main thread of "+Math.round(g-S)+"ms"),S=performance.now()}),n.primaryStore.prefetch([1],()=>{let g=performance.now();g-S>5e3&&(0,Hu.warn)("Unusually high task queue latency on the main thread of "+Math.round(g-S)+"ms"),m(g-S)})}),i;for(let m of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(m.value?.time){i=m.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,l=new Map,_=[],u;for(let{key:m,value:S}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!S)continue;if(o){if(m>o+t)break}else o=m;u=m;let{metrics:g,threadId:R}=S;for(let A of g||[]){let{path:P,method:U,type:v,metric:k,count:H,total:j,distribution:z,threads:J,...Se}=A;H||(H=1);let ue=k+(P?"-"+P:"");U!==void 0&&(ue+="-"+U),v!==void 0&&(ue+="-"+v);let Ee=c.get(ue);if(Ee){if(Ee.threads){let Ge=Ee.threads[R];if(Ge)Ee=Ge;else{Ee.threads[R]=Object.assign({},Se);continue}}Ee.count||(Ee.count=1);let Me=Ee.count;for(let Ge in Se){let Ft=Se[Ge];typeof Ft=="number"&&(Ee[Ge]=(Ee[Ge]*Me+Ft*H)/(Me+H))}Ee.count+=H,j>=0&&(Ee.total+=j,Ee.ratio=Ee.total/Ee.count)}else Ee=Object.assign({period:t},A),delete Ee.distribution,c.set(ue,Ee),Ee.byThread&&(Ee.threads=[],Ee.threads[R]=Object.assign({},Se),_.push(Ee));if(z){z=z.map(Ge=>typeof Ge=="number"?{value:Ge,count:1}:Ge);let Me=l.get(ue);Me?Me.push(...z):l.set(ue,z)}}await LM()}for(let m of _){let{path:S,method:g,type:R,metric:A,count:P,total:U,distribution:v,threads:k,...H}=m;k=k.filter(j=>j);for(let j in H){if(typeof m[j]!="number")continue;let z=0;for(let J of k){let Se=J[j];typeof Se=="number"&&(z+=Se)}m[j]=z}m.count=k.length,delete m.threads,delete m.byThread}for(let[m,S]of l){let g=c.get(m);S.sort((Ge,Ft)=>Ge.value>Ft.value?1:-1);let R=g.count-1,A=[],P=0,U=0,v;for(let Ge of DM){let Ft=R*Ge;for(;P<Ft;)v=S[U++],P+=v.count,U===1&&P--;let Gd=S[U>1?U-2:0];v||(v=S[0]),A.push(v.value-(v.value-Gd.value)*(P-Ft)/v.count)}let[k,H,j,z,J,Se,ue,Ee,Me]=A;Object.assign(g,{p1:k,p10:H,p25:j,median:z,p75:J,p90:Se,p95:ue,p99:Ee,p999:Me})}let d;for(let[m,S]of c)S.id=(0,cE.getNextMonotonicTime)(),S.time=u,n.primaryStore.put(S.id,S,{append:!0}).then(g=>{g||n.primaryStore.put(S.id,S)}),d=!0;let f=Date.now(),{idle:E,active:h}=performance.eventLoopUtilization();if(d||h*10>E){let m=(0,cE.getNextMonotonicTime)(),S={id:m,metric:"main-thread-utilization",idle:E-SM,active:h-TM,taskQueueLatency:await s,time:f,...process.memoryUsage()};n.primaryStore.put(m,S,{append:!0}).then(g=>{g||n.primaryStore.put(m,S)})}SM=E,TM=h}async function gM(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function Kg(){return RM||(RM=Et({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function PM(){return AM||(AM=Et({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function J5(){MM=!0;let e=(0,qu.get)(Yg.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await Q5(IM,e),await gM(Kg(),j5),await gM(PM(),z5)},Math.min(e/2,2147483647)).unref()}function UM(e,t){let r=e.report;r.threadId=t?.threadId||pa.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(OM+=n.mean*n.count);r.totalBytesProcessed=OM,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(bM.get(t))}),bM.set(t,t.performance.eventLoopUtilization())),r.id=(0,cE.getNextMonotonicTime)(),Kg().primaryStore.put(r.id,r),MM||J5(),X5&&(vM=e8(r))}async function e8(e){if(await vM,!co){let r=(0,Gu.dirname)((0,Hu.getLogFilePath)());try{co=await(0,Vg.open)((0,Gu.join)(r,"analytics.log"),"r+")}catch{co=await(0,Vg.open)((0,Gu.join)(r,"analytics.log"),"w+")}}let t=(await co.stat()).size;if(t>Z5){let r=Buffer.alloc(t);await co.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await co.write(r,{position:0}),await co.truncate(r.length),t=r.length}await co.write(JSON.stringify(e)+`
|
|
8
|
+
This can occur during early stages of install where the config file has not yet been created`);return}else throw Mt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}Xz(n,r),IT(n);let s=n.toJSON();if(Vz.config=s,Ut=fc(s),Ut.logging_rotation_rotate)for(let i in MC)Ut[i]&&Mt.error(`Config ${MC[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);Mt.trace(Kz)}}a(yT,"initConfig");function Xz(e,t){let r=e.getIn(["rootPath"]),n=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],ns.join(r,"database")),n=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],ns.join(r,"clustering","leaf")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],ns.join(r,"log")),n=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),n=!0),e.hasIn(["authentication"])||(e.addIn(["authentication"],{cacheTTL:3e4,enableSessions:!0,operationTokenTimeout:e.getIn(["operationsApi","authentication","operationTokenTimeout"])??"1d",refreshTokenTimeout:e.getIn(["operationsApi","authentication","refreshTokenTimeout"])??"30d"}),n=!0),e.hasIn(["analytics"])||(e.addIn(["analytics"],{aggregatePeriod:60}),n=!0),n&&(Mt.trace("Updating config file with missing config params"),Ir.writeFileSync(t,String(e)))}a(Xz,"checkForUpdatedConfig");function IT(e,t=!1){let r=e.toJSON();r.componentsRoot=r.componentsRoot??r?.customFunctions?.root,r?.http?.threads&&(r.threads=r?.http?.threads);let n=Gz(r,t);if(n.error)throw Uf.CONFIG_VALIDATION(n.error.message);typeof n.value.threads=="object"?e.setIn(["threads","count"],n.value.threads.count):e.setIn(["threads"],n.value.threads),e.setIn(["componentsRoot"],n.value.componentsRoot),e.setIn(["logging","root"],n.value.logging.root),e.setIn(["storage","path"],n.value.storage.path),e.setIn(["logging","rotation","path"],n.value.logging.rotation.path),e.setIn(["clustering","leafServer","streams","path"],n.value.clustering.leafServer.streams?.path),e.setIn(["operationsApi","network","domainSocket"],n.value?.operationsApi?.network?.domainSocket)}a(IT,"validateConfig");function Zz(e,t){Ut===void 0&&(Ut={});let r=ss[e.toLowerCase()];if(r===void 0){Mt.trace(`Unable to update config object because config param '${e}' does not exist`);return}Ut[r.toLowerCase()]=t}a(Zz,"updateConfigObject");function GC(e,t,r=void 0,n=!1,s=!1,i=!1){Ut===void 0&&yT();let o=HC(ss.hdb_root),c=ns.join(o,sn.HDB_CONFIG_FILE),l=so(c),_;if(r===void 0&&e.toLowerCase()===nn.DATABASES)_=t;else if(r===void 0){let f;if(i)f=e;else if(f=ss[e.toLowerCase()],f===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=f.split("_"),h=NT(f,t);l.setIn([...E],h)}else for(let f in r){let E=ss[f.toLowerCase()];if(E===nn.HTTP_SECUREPORT&&r[f]===Ut[nn.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),E===nn.OPERATIONSAPI_NETWORK_SECUREPORT&&r[f]===Ut[nn.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),E===nn.DATABASES){_=r[f];continue}if(E?.startsWith("threads_")){let h=l.getIn(["threads"]);h>=0&&(l.deleteIn(["threads"]),l.setIn(["threads","count"],h))}if(!E&&(f.endsWith("_package")||f.endsWith("_port"))&&(E=f),E!==void 0){let h=E.split("_"),m=sn.LEGACY_CONFIG_PARAMS[f.toUpperCase()];m&&m.startsWith("customFunctions")&&l.hasIn(m.split("_"))&&(E=m,h=m.split("_"));let S=NT(E,r[f]);E==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{h.length>1&&typeof l.getIn(h.slice(0,-1))=="boolean"&&l.deleteIn(h.slice(0,-1)),l.setIn([...h],S)}catch(g){Mt.error(g)}}}_&&BC(l,_),IT(l);let u=l.getIn(["rootPath"]),d=ns.join(u,sn.HDB_CONFIG_FILE);n===!0&&eJ(c,u),Ir.writeFileSync(d,String(l)),s&&(Ut=fc(l.toJSON())),Mt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(GC,"updateConfigValue");function eJ(e,t){try{let r=ns.join(t,"backup",`${sn.HDB_CONFIG_FILE}.bak`);Ir.copySync(e,r),Mt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){Mt.error(Wz),Mt.error(r)}}a(eJ,"backupConfigFile");var tJ=["databases"];function fc(e){return e.http&&Object.assign(e.http,e?.customFunctions?.network),e?.operationsApi?.network&&(e.operationsApi.network=Object.assign({},e.http,e.operationsApi.network)),e?.operationsApi&&(e.operationsApi.tls=Object.assign({},e.tls,e.operationsApi.tls)),Bf=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])&&!tJ.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;!nn[l.toUpperCase()]&&ss[l]&&(s[ss[l].toLowerCase()]=o[c]),s[l]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(fc,"flattenConfig");function NT(e,t){if(e===nn.CLUSTERING_NODENAME||e===nn.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(xz(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||$t.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 $t.autoCast(t)}a(NT,"castConfigValue");function rJ(){let e=$t.getPropsFilePath(),t=oa(e);return so(t).toJSON()}a(rJ,"getConfiguration");async function nJ(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return GC(void 0,void 0,s,!0),jz}catch(i){throw typeof i=="string"||i instanceof String?kz(i,i,$z.BAD_REQUEST,void 0,void 0,!0):i}}a(nJ,"setConfiguration");function wT(){let e=$t.getPropsFilePath();try{Ir.accessSync(e,Ir.constants.F_OK|Ir.constants.R_OK)}catch(n){if(!$t.noBootFile())throw Mt.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=oa(e);return so(t).toJSON()}a(wT,"readConfigFile");function so(e){return qz.parseDocument(Ir.readFileSync(e,"utf8"),{simpleKeys:!0})}a(so,"parseYamlDoc");function sJ(){let e=wT(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=$t.isEmptyOrZeroLength(t)?[]:t;let r=PC(t);if(r)throw Uf.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=$t.isEmptyOrZeroLength(n)?[]:n;let s=PC(n);if(s)throw Uf.CONFIG_VALIDATION(s.message);if(!$t.isEmptyOrZeroLength(n)&&!$t.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!$t.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Uf.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(sJ,"getClusteringRoutes");function qC(e){let t=UC(e);Ut={};for(let r in ss){let n=t.get(r.toUpperCase());if($t.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=ss[r].toLowerCase();s===nn.LOGGING_ROOT?Ut[s]=ns.dirname(n):Ut[s]=n}return Ut}a(qC,"initOldConfig");function iJ(e){let t=wT();return Fz.get(t,e.replaceAll("_","."))}a(iJ,"getConfigFromFile");async function oJ(e,t){let r=so(oa());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await Ir.writeFile(oa(),String(r))}a(oJ,"addConfig");function aJ(e){let t=oa($t.getPropsFilePath()),r=so(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=ns.join(n,sn.HDB_CONFIG_FILE);Ir.writeFileSync(s,String(r))}a(aJ,"deleteConfigFromFile");function cJ(){return Bf||(yT(),Bf)}a(cJ,"getConfigObj")});var kC=T((Bme,FC)=>{"use strict";var Hf=D(),Gf=class{static{a(this,"BaseLicense")}constructor(t=0,r=Hf.RAM_ALLOCATION_ENUM.DEFAULT,n=Hf.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},CT=class extends Gf{static{a(this,"ExtendedLicense")}constructor(t=0,r=Hf.RAM_ALLOCATION_ENUM.DEFAULT,n=Hf.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};FC.exports={BaseLicense:Gf,ExtendedLicense:CT}});var aa=T((Gme,QC)=>{"use strict";var hc=require("fs-extra"),VC=Lf(),YC=require("crypto"),lJ=require("moment"),uJ=require("uuid").v4,cr=x(),LT=require("path"),_J=K(),io=D(),{totalmem:$C}=require("os"),dJ=kC().ExtendedLicense,Ec="invalid license key format",fJ="061183",EJ="mofi25",hJ="aes-256-cbc",pJ=16,mJ=32,KC=X();KC.initSync();var DT;QC.exports={validateLicense:WC,generateFingerPrint:TJ,licenseSearch:UT,getLicense:AJ,checkMemoryLimit:OJ};function PT(){return LT.join(KC.getHdbBasePath(),io.LICENSE_KEY_DIR_NAME,io.LICENSE_FILE_NAME)}a(PT,"getLicenseDirPath");function SJ(){let e=PT();return LT.join(e,io.LICENSE_FILE_NAME)}a(SJ,"getLicenseFilePath");function MT(){let e=PT();return LT.join(e,io.REG_KEY_FILE_NAME)}a(MT,"getFingerPrintFilePath");async function TJ(){let e=MT();try{return await hc.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await gJ();throw cr.error(`Error writing fingerprint file to ${e}`),cr.error(t),new Error("There was an error generating the fingerprint")}}a(TJ,"generateFingerPrint");async function gJ(){let e=uJ(),t=VC.hash(e),r=MT();try{await hc.mkdirp(PT()),await hc.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw cr.error(`Error writing fingerprint file to ${r}`),cr.error(n),new Error("There was an error generating the fingerprint")}return t}a(gJ,"writeFingerprint");function WC(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:io.RAM_ALLOCATION_ENUM.DEFAULT,version:io.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return cr.error("empty license key passed to validate."),r;let n=MT(),s=!1;try{s=hc.statSync(n)}catch(i){cr.error(i)}if(s){let i;try{i=hc.readFileSync(n,"utf8")}catch{cr.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(EJ),c=o[1];c=Buffer.concat([Buffer.from(c)],pJ);let l=Buffer.concat([Buffer.from(i)],mJ),_=YC.createDecipheriv(hJ,l,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let u=null;try{u=_.update(o[0],"hex","utf8"),u.trim(),u+=_.final("utf8")}catch{let E=RJ(o[0],i);if(E)u=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Ec),cr.error(Ec),new Error(Ec)}let d;if(isNaN(u))try{d=JSON.parse(u),r.version=d.version,r.exp_date=d.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),d.ram_allocation&&(r.ram_allocation=d.ram_allocation)}catch{throw console.error(Ec),cr.error(Ec),new Error(Ec)}else r.exp_date=u;r.exp_date<lJ().valueOf()&&(r.valid_date=!1),VC.validate(o[1],`${fJ}${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||cr.error("Invalid licence"),r}a(WC,"validateLicense");function RJ(e,t){try{let r=YC.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{cr.warn("Check old license failed")}}a(RJ,"checkOldLicense");function UT(){let e=new dJ,t=[];try{t=hc.readFileSync(SJ(),"utf-8").split(io.NEW_LINE)}catch(r){r.code==="ENOENT"?cr.info("no license file found"):cr.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(_J.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=WC(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){cr.error("There was an error parsing the license string."),cr.error(s),e.ram_allocation=io.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return DT=e,e}a(UT,"licenseSearch");async function AJ(){return DT||await UT(),DT}a(AJ,"getLicense");function OJ(){let e=UT().ram_allocation,t=process.constrainedMemory?.()||$C();if(t=Math.round(Math.min(t,$C())/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(OJ,"checkMemoryLimit")});var wr=T(($me,uD)=>{"use strict";var XC="username is required",ZC="nothing to update, must supply active, role or password to update",eD="password cannot be an empty string",tD="If role is specified, it cannot be empty.",rD="active must be true or false";uD.exports={addUser:PJ,alterUser:MJ,dropUser:vJ,getSuperUser:qJ,userInfo:BJ,listUsers:xf,listUsersExternal:HJ,setUsersToGlobal:mc,findAndValidateUser:cD,getClusterUser:xJ,USERNAME_REQUIRED:XC,ALTERUSER_NOTHING_TO_UPDATE:ZC,EMPTY_PASSWORD:eD,EMPTY_ROLE:tD,ACTIVE_BOOLEAN:rD};var nD=yr(),bJ=na(),HT=Lf(),sD=AC(),iD=ir(),GT=di(),on=K(),oD=require("validate.js"),be=x(),{promisify:NJ}=require("util"),qT=ui(),jC=D(),zC=Xe(),yJ=ut(),xme=X(),Fme=aa(),IJ=ci(),{table:kme}=(ge(),ie(ke)),{handleHDBError:Ls,hdb_errors:wJ}=oe(),{HTTP_STATUS_CODES:Ps,AUTHENTICATION_ERROR_MSGS:vT,HDB_ERROR_MSGS:pc}=wJ,{UserEventMsg:xT}=is(),BT=require("lodash"),{server:FT}=(Or(),ie(Wo)),CJ=x();FT.getUser=(e,t)=>cD(e,t,t!=null);var aD={username:!0,active:!0,role:!0,password:!0},JC=new Map,qf=iD.searchByValue,DJ=iD.searchByHash,LJ=NJ(bJ.delete);async function PJ(e){let t=oD.cleanAttributes(e,aD),r=sD.addUserValidation(t);if(r)throw Ls(new Error,r.message,Ps.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 qf(n),s=s&&Array.from(s)}catch(l){throw be.error("There was an error searching for a role in add user"),be.error(l),l}if(!s||s.length<1)throw Ls(new Error,pc.ROLE_NAME_NOT_FOUND(t.role),Ps.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw Ls(new Error,pc.DUP_ROLES_FOUND(t.role),Ps.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=qT.encrypt(t.password)),t.password=HT.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await nD.insert(i)}catch(l){throw be.error("There was an error searching for a user."),be.error(l),l}be.debug(o);try{await mc()}catch(l){throw be.error("Got an error setting users to global"),be.error(l),l}if(o.skipped_hashes.length===1)throw Ls(new Error,pc.USER_ALREADY_EXISTS(t.username),Ps.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=s[0],GT.signalUserChange(new xT(process.pid)),`${c.username} successfully added`}a(PJ,"addUser");async function MJ(e){let t=oD.cleanAttributes(e,aD);if(on.isEmptyOrZeroLength(t.username))throw new Error(XC);if(on.isEmptyOrZeroLength(t.password)&&on.isEmptyOrZeroLength(t.role)&&on.isEmptyOrZeroLength(t.active))throw new Error(ZC);if(!on.isEmpty(t.password)&&on.isEmptyOrZeroLength(t.password.trim()))throw new Error(eD);if(!on.isEmpty(t.active)&&!on.isBoolean(t.active))throw new Error(rD);let r=UJ(t.username);if(!on.isEmpty(t.password)&&!on.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=qT.encrypt(t.password)),t.password=HT.hash(t.password)),t.role==="")throw new Error(tD);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 qf(i)||[])}catch(c){throw be.error("Got an error searching for a role."),be.error(c),c}if(!o||o.length===0){let c=pc.ALTER_USER_ROLE_NOT_FOUND(t.role);throw be.error(c),Ls(new Error,c,Ps.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=pc.ALTER_USER_DUP_ROLES(t.role);throw be.error(c),Ls(new Error,c,Ps.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 nD.update(n)}catch(i){throw be.error("Error during update."),be.error(i),i}try{await mc()}catch(i){throw be.error("Got an error setting users to global"),be.error(i),i}return GT.signalUserChange(new xT(process.pid)),s}a(MJ,"alterUser");function UJ(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(UJ,"isClusterUser");async function vJ(e){try{let t=sD.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(on.isEmpty(global.hdb_users.get(e.username)))throw Ls(new Error,pc.USER_NOT_EXIST(e.username),Ps.NOT_FOUND,void 0,void 0,!0);let n;try{n=await LJ(r)}catch(s){throw be.error("Got an error deleting a user."),be.error(s),s}be.debug(n);try{await mc()}catch(s){throw be.error("Got an error setting users to global."),be.error(s),s}return GT.signalUserChange(new xT(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(vJ,"dropUser");async function BJ(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=BT.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await DJ(r)}catch(s){throw be.error("Got an error searching for a role."),be.error(s),s}t.role=n[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw be.error(r),r}return t}a(BJ,"userInfo");async function HJ(){let e;try{e=await xf()}catch(t){throw be.error("Got an error listing users."),be.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(HJ,"listUsersExternal");async function xf(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await qf(e)}catch(o){throw be.error("Got an error searching for roles."),be.error(o),o}let r={};for(let o of t)r[o.id]=BT.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 qf(n)}catch(o){throw be.error("Got an error searching for users."),be.error(o),o}let i=new Map;for(let o of s)o=BT.cloneDeep(o),o.role=r[o.role],GJ(o.role),i.set(o.username,o);return i}catch(e){throw be.error("got an error listing users"),be.error(e),on.errorizeMessage(e)}return null}a(xf,"listUsers");function GJ(e){try{if(!e){be.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(IJ)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){be.error("Got an error trying to set system permissions."),be.error(t)}}a(GJ,"appendSystemTablesToRole");async function mc(){try{let e=await xf();global.hdb_users=e}catch(e){throw be.error(e),e}}a(mc,"setUsersToGlobal");async function cD(e,t,r=!0){global.hdb_users||await mc();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw Ls(new Error,vT.GENERIC_AUTH_FAIL,Ps.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw Ls(new Error,vT.USER_INACTIVE,Ps.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(JC.get(t)===n.password)return s;if(HT.validate(n.password,t))JC.set(t,n.password);else throw Ls(new Error,vT.GENERIC_AUTH_FAIL,Ps.UNAUTHORIZED,void 0,void 0,!0)}return s}a(cD,"findAndValidateUser");async function qJ(){global.hdb_users||await mc();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(qJ,"getSuperUser");async function xJ(){let e=await xf(),t=yJ.getConfigFromFile(jC.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!on.isEmpty(r)&&r?.role?.role===jC.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=qT.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+zC.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+zC.SERVER_SUFFIX.ADMIN,r}a(xJ,"getClusterUser");var lD=[];FT.invalidateUser=function(e){for(let t of lD)try{t(e)}catch(r){CJ.error("Error invalidating user",r)}};FT.onInvalidatedUser=function(e){lD.push(e)}});var Su=T((Wme,ED)=>{"use strict";var ca=x(),an=D(),FJ=Vw(),Yme=Pn(),Kme=_i(),kJ=wr(),{validateEvent:_D}=is(),mu=Mn(),$J=require("process"),{resetDatabases:VJ}=(ge(),ie(ke)),YJ={[an.ITC_EVENT_TYPES.SCHEMA]:KJ,[an.ITC_EVENT_TYPES.USER]:fD};async function KJ(e){let t=_D(e);if(t){ca.error(t);return}ca.trace("ITC schemaHandler received schema event:",e),await FJ(e.message),await WJ(e.message)}a(KJ,"schemaHandler");async function WJ(e){try{mu.resetReadTxn(an.SYSTEM_SCHEMA_NAME,an.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),mu.resetReadTxn(an.SYSTEM_SCHEMA_NAME,an.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),mu.resetReadTxn(an.SYSTEM_SCHEMA_NAME,an.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=VJ();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){ca.error(t)}}a(WJ,"syncSchemaMetadata");var dD=[];async function fD(e){try{try{mu.resetReadTxn(an.SYSTEM_SCHEMA_NAME,an.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),mu.resetReadTxn(an.SYSTEM_SCHEMA_NAME,an.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){ca.warn(r)}let t=_D(e);if(t){ca.error(t);return}ca.trace(`ITC userHandler ${an.HDB_ITC_CLIENT_PREFIX}${$J.pid} received user event:`,e),await kJ.setUsersToGlobal();for(let r of dD)r()}catch(t){ca.error(t)}}a(fD,"userHandler");fD.addListener=function(e){dD.push(e)};ED.exports=YJ});var is=T((Zme,pD)=>{"use strict";var jme=x(),kT=K(),QJ=D(),{ITC_ERRORS:Tu}=Zr(),{parentPort:zme,threadId:jJ,isMainThread:zJ,workerData:Jme}=require("worker_threads"),{onMessageFromWorkers:JJ,broadcast:Xme,broadcastWithAcknowledgement:XJ}=et();pD.exports={sendItcEvent:ZJ,validateEvent:hD,SchemaEventMsg:e2,UserEventMsg:t2};var Ff;JJ(async(e,t)=>{Ff=Ff||Su(),hD(e),Ff[e.type]&&await Ff[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function ZJ(e){return!zJ&&e.message&&(e.message.originator=jJ),XJ(e)}a(ZJ,"sendItcEvent");function hD(e){if(typeof e!="object")return Tu.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||kT.isEmpty(e.type))return Tu.MISSING_TYPE;if(!e.hasOwnProperty("message")||kT.isEmpty(e.message))return Tu.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||kT.isEmpty(e.message.originator))return Tu.MISSING_ORIGIN;if(QJ.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Tu.INVALID_EVENT(e.type)}a(hD,"validateEvent");function e2(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(e2,"SchemaEventMsg");function t2(e){this.originator=e}a(t2,"UserEventMsg")});var di=T((rSe,gD)=>{"use strict";var mD=D(),tSe=K(),kf=x(),SD=Fw(),Sc,{sendItcEvent:TD}=is();function r2(e){try{kf.trace("signalSchemaChange called with message:",e),Sc=Sc||Su();let t=new SD(mD.ITC_EVENT_TYPES.SCHEMA,e);return Sc.schema(t),TD(t)}catch(t){kf.error(t)}}a(r2,"signalSchemaChange");function n2(e){try{kf.trace("signalUserChange called with message:",e),Sc=Sc||Su();let t=new SD(mD.ITC_EVENT_TYPES.USER,e);return Sc.user(t),TD(t)}catch(t){kf.error(t)}}a(n2,"signalUserChange");gD.exports={signalSchemaChange:r2,signalUserChange:n2}});var $f=T((sSe,AD)=>{"use strict";var RD=K(),s2=D(),i2=x(),o2=mf(),a2=pf(),c2=di(),{SchemaEventMsg:l2}=is(),u2="already exists in";AD.exports=_2;async function _2(e,t,r){if(RD.isEmptyOrZeroLength(r))return r;let n=[];RD.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 d2(e,t.schema,t.name,i)})),s}a(_2,"lmdbCheckForNewAttributes");async function d2(e,t,r,n){let s=new a2(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await f2(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(u2))i2.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(d2,"createNewAttribute");async function f2(e){let t;return t=await o2(e),c2.signalSchemaChange(new l2(process.pid,s2.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(f2,"createAttribute")});var Tc=T((oSe,OD)=>{"use strict";var $T=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}};OD.exports=$T});var ND=T((cSe,bD)=>{"use strict";var E2=Tc(),h2=D().OPERATIONS_ENUM,VT=class extends E2{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(h2.INSERT,r,n,s,i),this.records=t}};bD.exports=VT});var ID=T((uSe,yD)=>{"use strict";var p2=Tc(),m2=D().OPERATIONS_ENUM,YT=class extends p2{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(m2.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};yD.exports=YT});var CD=T((dSe,wD)=>{"use strict";var S2=Tc(),T2=D().OPERATIONS_ENUM,KT=class extends S2{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(T2.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};wD.exports=KT});var LD=T((ESe,DD)=>{"use strict";var g2=Tc(),R2=D().OPERATIONS_ENUM,WT=class extends g2{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(R2.DELETE,n,s,t,i),this.original_records=r}};DD.exports=WT});var gu=T((mSe,vD)=>{"use strict";var pSe=require("path"),PD=Ve(),A2=ND(),O2=ID(),b2=CD(),N2=LD(),gc=at(),MD=K(),{CONFIG_PARAMS:y2}=D(),UD=X();UD.initSync();var Vf=D().OPERATIONS_ENUM,{getTransactionAuditStorePath:I2}=je();vD.exports=w2;async function w2(e,t){if(UD.get(y2.LOGGING_AUDITLOG)===!1)return;let r=I2(e.schema,e.table),n=await PD.openEnvironment(r,e.table,!0),s=C2(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){PD.initializeDBIs(n,gc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,gc.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[gc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[gc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),MD.isEmpty(s.user_name)||n.dbis[gc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[gc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(w2,"writeTransaction");function C2(e,t){let r=MD.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===Vf.INSERT)return new A2(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Vf.UPDATE)return new O2(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Vf.UPSERT)return new b2(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Vf.DELETE)return new N2(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(C2,"createTransactionObject")});var QT=T((gSe,BD)=>{"use strict";var D2=_u(),TSe=du(),Ru=D(),L2=fu(),P2=Jo().insertRecords,M2=Ve(),U2=x(),v2=$f(),{getSchemaPath:B2}=je(),H2=gu();BD.exports=G2;async function G2(e){try{let{schema_table:t,attributes:r}=D2(e);L2(e,r,t.hash_attribute),e.schema!==Ru.SYSTEM_SCHEMA_NAME&&(r.includes(Ru.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Ru.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Ru.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Ru.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await v2(e.hdb_auth_header,t,r),s=B2(e.schema,e.table),i=await M2.openEnvironment(s,e.table),o=await P2(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await H2(e,o)}catch(c){U2.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(G2,"lmdbCreateRecords")});var qD=T((ASe,GD)=>{"use strict";var HD=D(),q2=QT(),x2=du(),F2=require("fs-extra"),{getSchemaPath:k2}=je();GD.exports=$2;async function $2(e){let t=[{name:e.schema,createddate:Date.now()}],r=new x2(HD.SYSTEM_SCHEMA_NAME,HD.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await q2(r),await F2.mkdirp(k2(e.schema))}a($2,"lmdbCreateSchema")});var FD=T((bSe,xD)=>{"use strict";var jT=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}};xD.exports=jT});var YD=T((CSe,VD)=>{"use strict";var kD=Ve(),zT=Ar(),JT=Zr().LMDB_ERRORS_ENUM,V2=at(),$D=x(),ySe=K(),Y2=require("lmdb"),K2=FD(),W2=D(),{OVERFLOW_MARKER:ISe,MAX_SEARCH_KEY_LENGTH:wSe}=V2,Q2=W2.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function j2(e,t,r,n){if(zT.validateEnv(e),t===void 0)throw new Error(JT.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(JT.IDS_REQUIRED):new Error(JT.IDS_MUST_BE_ITERABLE);try{let s=kD.listDBIs(e);kD.initializeDBIs(e,t,s);let i=new K2,o,c=[],l=[];for(let f=0,E=r.length;f<E;f++)try{o=r[f];let h=e.dbis[t].get(o);if(!h||n&&h[Q2]>n){i.skipped.push(o);continue}let m=e.dbis[t].ifVersion(o,Y2.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<s.length;S++){let g=s[S];if(!h.hasOwnProperty(g)||g===t)continue;let R=e.dbis[g],A=h[g];if(A!=null)try{let P=zT.getIndexedValues(A);if(P)for(let U=0,v=P.length;U<v;U++)R.remove(P[U],o)}catch{$D.warn(`cannot delete from attribute: ${g}, ${A}:${o}`)}}});c.push(m),l.push(o),i.original_records.push(h)}catch(h){$D.warn(h),i.skipped.push(o)}let _=[],u=await Promise.all(c);for(let f=0,E=u.length;f<E;f++)u[f]===!0?i.deleted.push(l[f]):(i.skipped.push(l[f]),_.push(f));let d=0;for(let f=0;f<_.length;f++){let E=_[f];i.original_records.splice(E-d,1),d++}return i.txn_time=zT.getNextMonotonicTime(),i}catch(s){throw s}}a(j2,"deleteRecords");VD.exports={deleteRecords:j2}});var Au=T((LSe,WD)=>{"use strict";var Rc=K(),z2=YD(),J2=Ve(),{getSchemaPath:X2}=je(),Z2=gu(),e4=x();WD.exports=t4;async function t4(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(Rc.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Rc.isEmptyOrZeroLength(e.hash_values)&&!Rc.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];Rc.isEmpty(l)||e.hash_values.push(l)}}if(Rc.isEmptyOrZeroLength(e.hash_values))return KD([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Rc.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=X2(e.schema,e.table),i=await J2.openEnvironment(s,e.table),o=await z2.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await Z2(e,o)}catch(c){e4.error(`unable to write transaction due to ${c.message}`)}return KD(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(t4,"lmdbDeleteRecords");function KD(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(KD,"createDeleteResponse")});var ZT=T((USe,QD)=>{"use strict";var r4=D(),MSe=Ar();function XT(e,t){let r=Object.create(null);if(t.length===1&&r4.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(XT,"parseRow");function n4(e,t,r,n){let s=XT(r,e);n.push(s)}a(n4,"searchAll");function s4(e,t,r,n){let s=XT(r,e);n[t]=s}a(s4,"searchAllToMap");function i4(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(i4,"iterateDBI");function la(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(la,"pushResults");function o4(e,t,r,n,s,i){t.toString().endsWith(e)&&la(t,r,n,s,i)}a(o4,"endsWith");function a4(e,t,r,n,s,i){t.toString().includes(e)&&la(t,r,n,s,i)}a(a4,"contains");function c4(e,t,r,n,s,i){t>e&&la(t,r,n,s,i)}a(c4,"greaterThanCompare");function l4(e,t,r,n,s,i){t>=e&&la(t,r,n,s,i)}a(l4,"greaterThanEqualCompare");function u4(e,t,r,n,s,i){t<e&&la(t,r,n,s,i)}a(u4,"lessThanCompare");function _4(e,t,r,n,s,i){t<=e&&la(t,r,n,s,i)}a(_4,"lessThanEqualCompare");QD.exports={parseRow:XT,searchAll:n4,searchAllToMap:s4,iterateDBI:i4,endsWith:o4,contains:a4,greaterThanCompare:c4,greaterThanEqualCompare:l4,lessThanCompare:u4,lessThanEqualCompare:_4,pushResults:la}});var Ac=T((qSe,tL)=>{"use strict";var oo=Ve(),BSe=x(),cn=Ar(),Yf=at(),ht=Zr().LMDB_ERRORS_ENUM,HSe=K(),d4=D(),Kf=ZT(),{parseRow:f4}=Kf,GSe=require("lmdb"),{OVERFLOW_MARKER:jD,MAX_SEARCH_KEY_LENGTH:E4}=Yf;function zD(e,t,r,n=!1,s=void 0,i=void 0){return ua(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(zD,"iterateFullIndex");function Ou(e,t,r,n,s,i=!1,o=void 0,c=void 0,l=!1,_=!1){return ua(e,t,r,(u,d,f,E)=>{let R={transaction:u,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!l:!_,exclusiveStart:i===!0?_:l};return E===r?(R.values=!1,d.getRange(R).map(A=>({value:A}))):d.getRange(R)})}a(Ou,"iterateRangeBetween");function ua(e,t,r,n){let s=e.database||e,i=oo.openDBI(s,r);i[Yf.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&oo.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(ua,"setupTransaction");function JD(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(jD)){if(!s)if(r)s=oo.openDBI(e,r);else{let l=oo.listDBIs(e);for(let _=0,u=l.length;_<u&&(s=oo.openDBI(e,l[_]),!s[Yf.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(JD,"getOverflowCheck");function h4(e,t,r,n=!1,s=void 0,i=void 0){if(cn.validateEnv(e),t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);return ua(e,t,t,(o,c,l)=>(Wf(r),r=bu(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(_=>f4(_.value,r))))}a(h4,"searchAll");function p4(e,t,r,n=!1,s=void 0,i=void 0){if(cn.validateEnv(e),t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);Wf(r),r=bu(e.database||e,r);let o=new Map;for(let{key:c,value:l}of zD(e,t,t,n,s,i))o.set(c,Kf.parseRow(l,r));return o}a(p4,"searchAllToMap");function m4(e,t,r=!1,n=void 0,s=void 0){if(cn.validateEnv(e),t===void 0)throw new Error(ht.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=zD(e,void 0,t,r,n,s),c=o.transaction,l=JD(c.database,c,void 0,t);for(let{key:_,value:u}of o){let d=l(_,u);i[d]===void 0&&(i[d]=[]),i[d].push(u)}return i}a(m4,"iterateDBI");function S4(e,t){if(cn.validateEnv(e),t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);return oo.statDBI(e,t).entryCount}a(S4,"countAll");function T4(e,t,r,n,s=!1,i=void 0,o=void 0){return ao(e,r,n),ua(e,t,r,(c,l,_,u)=>(n=cn.convertKeyValueToWrite(n),u===r?l.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:l.getValues(n,{transaction:c,reverse:s,limit:i,offset:o}).map(d=>({key:n,value:d}))))}a(T4,"equals");function g4(e,t,r){return ao(e,t,r),oo.openDBI(e,t).getValuesCount(r)}a(g4,"count");function R4(e,t,r,n,s=!1,i=void 0,o=void 0){return ao(e,r,n),ua(e,null,r,(c,l)=>{n=cn.convertKeyValueToWrite(n);let _=!0;typeof n=="number"&&(_=!1);let u;if(s===!0){let d;for(let f of l.getKeys({transaction:c,start:n}))if(!f.startsWith(n)){d=f;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),u=l.getRange({transaction:c,start:d,end:void 0,reverse:s,limit:i,offset:o}).map(f=>{let{key:E}=f;if(E!==d){if(E.toString().startsWith(n))return f;if(_===!0)return u.DONE}}),u.filter(f=>f)}else return u=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(n))return d;if(_===!0)return u.DONE}),_?u:u.filter(d=>d)})}a(R4,"startsWith");function A4(e,t,r,n,s=!1,i=void 0,o=void 0){return XD(e,t,r,n,s,i,o,!0)}a(A4,"endsWith");function XD(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return ao(e,r,n),ua(e,null,r,(l,_,u,d)=>{let f=JD(u,l,d,r);return o=Number.isInteger(o)?o:0,_.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(E=>{let h=E.toString();return h.endsWith(jD)?_.getValues(E,{transaction:l}).map(m=>{let S=f(E,m);if(c?S.endsWith(n):S.includes(n))return{key:S,value:m}}).filter(m=>m):(c?h.endsWith(n):h.includes(n))?_[Yf.DBI_DEFINITION_NAME].is_hash_attribute?{key:E,value:E}:_.getValues(E,{transaction:l}).map(m=>({key:E,value:m})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(XD,"contains");function O4(e,t,r,n,s=!1,i=void 0,o=void 0){ao(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),Ou(e,t,r,n,l,s,i,o,!0,!1)}a(O4,"greaterThan");function b4(e,t,r,n,s=!1,i=void 0,o=void 0){ao(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),Ou(e,t,r,n,l,s,i,o,!1,!1)}a(b4,"greaterThanEqual");function N4(e,t,r,n,s=!1,i=void 0,o=void 0){ao(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),Ou(e,t,r,l,n,s,i,o,!1,!0)}a(N4,"lessThan");function y4(e,t,r,n,s=!1,i=void 0,o=void 0){ao(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),Ou(e,t,r,l,n,s,i,o,!1,!1)}a(y4,"lessThanEqual");function I4(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(cn.validateEnv(e),r===void 0)throw new Error(ht.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(ht.START_VALUE_REQUIRED);if(s===void 0)throw new Error(ht.END_VALUE_REQUIRED);if(n=cn.convertKeyValueToWrite(n),s=cn.convertKeyValueToWrite(s),n>s)throw new Error(ht.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Ou(e,t,r,n,s,i,o,c)}a(I4,"between");function w4(e,t,r,n){cn.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);if(Wf(r),r=bu(s,r),n===void 0)throw new Error(ht.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=Kf.parseRow(c,r)),o}a(w4,"searchByHash");function C4(e,t,r){cn.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ht.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(C4,"checkHashExists");function D4(e,t,r,n,s=[]){return eL(e,t,r,n,s),ZD(e,t,r,n,s).map(i=>i[1])}a(D4,"batchSearchByHash");function L4(e,t,r,n,s=[]){eL(e,t,r,n,s);let i=new Map;for(let[o,c]of ZD(e,t,r,n,s))i.set(o,c);return i}a(L4,"batchSearchByHashToMap");function ZD(e,t,r,n,s=[]){return ua(e,t,t,(i,o,c)=>{r=bu(c,r);let l=r.length<3;return n.map(_=>{let u=c.dbis[t].get(_,{transaction:i,lazy:l});if(u)return[_,Kf.parseRow(u,r)];s.push(_)}).filter(_=>_)})}a(ZD,"batchHashSearch");function eL(e,t,r,n,s){if(cn.validateEnv(e),t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);if(Wf(r),n==null)throw new Error(ht.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(ht.IDS_MUST_BE_ITERABLE)}a(eL,"initializeBatchSearchByHash");function Wf(e){if(!Array.isArray(e))throw e===void 0?new Error(ht.FETCH_ATTRIBUTES_REQUIRED):new Error(ht.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Wf,"validateFetchAttributes");function ao(e,t,r){if(cn.validateEnv(e),t===void 0)throw new Error(ht.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ht.SEARCH_VALUE_REQUIRED);if(r?.length>E4)throw new Error(ht.SEARCH_VALUE_TOO_LARGE)}a(ao,"validateComparisonFunctions");function bu(e,t){return t.length===1&&d4.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=oo.listDBIs(e)),t}a(bu,"setGetWholeRowAttributes");tL.exports={searchAll:h4,searchAllToMap:p4,count:g4,countAll:S4,equals:T4,startsWith:R4,endsWith:A4,contains:XD,searchByHash:w4,setGetWholeRowAttributes:bu,batchSearchByHash:D4,batchSearchByHashToMap:L4,checkHashExists:C4,iterateDBI:m4,greaterThan:O4,greaterThanEqual:b4,lessThan:N4,lessThanEqual:y4,between:I4}});var Oc=T((FSe,oL)=>{var rL=require("lodash"),nL=tt(),he=require("joi"),P4=K(),{hdb_schema_table:Nu,checkValidTable:sL,hdb_table:iL,hdb_database:Qf}=ws(),{handleHDBError:M4,hdb_errors:U4}=oe(),{getDatabases:v4}=(ge(),ie(ke)),{HTTP_STATUS_CODES:B4}=U4,H4=he.object({database:Qf,schema:Qf,table:iL,search_attribute:Nu,search_value:he.any().required(),get_attributes:he.array().min(1).items(he.alternatives(Nu,he.object())).optional(),desc:he.bool(),limit:he.number().integer().min(1),offset:he.number().integer().min(0)}),G4=he.object({database:Qf,schema:Qf,table:iL,operator:he.string().valid("and","or").default("and").lowercase(),offset:he.number().integer().min(0),limit:he.number().integer().min(1),get_attributes:he.array().min(1).items(he.alternatives(Nu,he.object())).optional(),sort:he.object({attribute:he.alternatives(Nu,he.array().min(1)),descending:he.bool().optional()}).optional(),conditions:he.array().min(1).items(he.alternatives(he.object({operator:he.string().valid("and","or").default("and").lowercase(),conditions:he.array()}),he.object({search_attribute:he.alternatives(Nu,he.array().min(1)),search_type:he.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:he.when("search_type",{switch:[{is:"equals",then:he.any()},{is:"between",then:he.array().items(he.alternatives([he.string(),he.number()])).length(2)}],otherwise:he.alternatives(he.string(),he.number())}).required()}))).required()});oL.exports=function(e,t){let r=null;switch(t){case"value":r=nL.validateBySchema(e,H4);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(sL("database",e.schema)),i(sL("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=nL.validateBySchema(e,G4);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=P4.checkGlobalSchemaTable(e.schema,e.table);if(s)return M4(new Error,s,B4.NOT_FOUND);let o=v4()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let l=a(u=>{for(let d=0,f=u.conditions.length;d<f;d++){let E=u.conditions[d];E.conditions?l(E):c.push(E.search_attribute)}},"addConditions");t==="conditions"&&l(e);let _=rL.filter(c,u=>u!=="*"&&u.attribute!=="*"&&!Array.isArray(u)&&!u.name&&!rL.some(o,d=>d===u||d.attribute===u||d.attribute===u.attribute));if(_&&_.length>0){let u=_.join(", ");return u=u.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${u}'`)}}return r}});var eg=T(($Se,aL)=>{"use strict";var q4=Ve(),x4=Oc(),{getSchemaPath:F4}=je();aL.exports=k4;function k4(e){let t=x4(e,"hashes");if(t)throw t;let r=F4(e.schema,e.table);return q4.openEnvironment(r,e.table)}a(k4,"initialize")});var tg=T((YSe,cL)=>{"use strict";var $4=Ac(),V4=eg();cL.exports=Y4;async function Y4(e){let t=await V4(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return $4.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(Y4,"lmdbGetDataByHash")});var bc=T((WSe,lL)=>{"use strict";var rg=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};lL.exports=rg});var _L=T((zSe,uL)=>{"use strict";var jSe=bc(),K4=Ac(),W4=eg();uL.exports=Q4;async function Q4(e){let t=await W4(e),r=global.hdb_schema[e.schema][e.table];return K4.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(Q4,"lmdbSearchByHash")});var os=T((XSe,dL)=>{"use strict";var ng=class{static{a(this,"SearchObject")}constructor(t,r,n,s,i,o,c,l=!1,_=void 0,u=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=_,this.offset=u}};dL.exports=ng});var jf=T((eTe,SL)=>{"use strict";var lr=Ac(),j4=Ve(),z4=K(),pe=at(),_a=D(),J4=ci(),fL=Zr().LMDB_ERRORS_ENUM,{getSchemaPath:X4}=je(),fi=_a.SEARCH_WILDCARDS;async function Z4(e,t,r){let n;e.schema===_a.SYSTEM_SCHEMA_NAME?n=J4[e.table]:n=global.hdb_schema[e.schema][e.table];let s=mL(e,n.hash_attribute,r,t);return hL(e,s,n.hash_attribute,r)}a(Z4,"prepSearch");async function hL(e,t,r,n){let s=X4(e.schema,e.table),i=await j4.openEnvironment(s,e.table),o=pL(i,e,t,r),c=o.transaction||i;if([pe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,pe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,pe.SEARCH_TYPES.SEARCH_ALL,pe.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(e3(e,r)===!1){let u=e.search_attribute;if(u===r)return n?EL(o,()=>!0):o.map(f=>({[r]:f.key}));let d=a(f=>({[r]:f.value,[u]:f.key}),"toObject");return n?EL(o,d):o.map(d)}let _=e.search_attribute===r?o.map(u=>u.key):o.map(u=>u.value);return n===!0?lr.batchSearchByHashToMap(c,r,e.get_attributes,_):lr.batchSearchByHash(c,r,e.get_attributes,_)}a(hL,"executeSearch");function pL(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 pe.SEARCH_TYPES.EQUALS:s=lr.equals(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.CONTAINS:s=lr.contains(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.ENDS_WITH:case pe.SEARCH_TYPES._ENDS_WITH:s=lr.endsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.STARTS_WITH:case pe.SEARCH_TYPES._STARTS_WITH:s=lr.startsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return lr.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case pe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return lr.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case pe.SEARCH_TYPES.SEARCH_ALL:return lr.searchAll(e,n,t.get_attributes,o,c,l);case pe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return lr.searchAllToMap(e,n,t.get_attributes,o,c,l);case pe.SEARCH_TYPES.BETWEEN:s=lr.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,l);break;case pe.SEARCH_TYPES.GREATER_THAN:case pe.SEARCH_TYPES._GREATER_THAN:s=lr.greaterThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.GREATER_THAN_EQUAL:case pe.SEARCH_TYPES._GREATER_THAN_EQUAL:s=lr.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.LESS_THAN:case pe.SEARCH_TYPES._LESS_THAN:s=lr.lessThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.LESS_THAN_EQUAL:case pe.SEARCH_TYPES._LESS_THAN_EQUAL:s=lr.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;default:return Object.create(null)}return s}a(pL,"searchByType");function EL(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(EL,"createMapFromIterable");function e3(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(e3,"checkToFetchMore");function mL(e,t,r,n){if(z4.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),fi.indexOf(s)>-1)return r===!0?pe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:pe.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(fi[0])<0&&s.indexOf(fi[1])<0)return c===!0?r===!0?pe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:pe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:pe.SEARCH_TYPES.EQUALS;if(fi.indexOf(i)>=0&&fi.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),pe.SEARCH_TYPES.CONTAINS;if(fi.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),pe.SEARCH_TYPES.ENDS_WITH;if(fi.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),pe.SEARCH_TYPES.STARTS_WITH;if(s.includes(fi[0])||s.includes(fi[1]))return pe.SEARCH_TYPES.EQUALS;throw new Error(fL.UNKNOWN_SEARCH_TYPE)}else switch(n){case _a.VALUE_SEARCH_COMPARATORS.BETWEEN:return pe.SEARCH_TYPES.BETWEEN;case _a.VALUE_SEARCH_COMPARATORS.GREATER:return pe.SEARCH_TYPES.GREATER_THAN;case _a.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return pe.SEARCH_TYPES.GREATER_THAN_EQUAL;case _a.VALUE_SEARCH_COMPARATORS.LESS:return pe.SEARCH_TYPES.LESS_THAN;case _a.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return pe.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(fL.UNKNOWN_SEARCH_TYPE)}}a(mL,"createSearchTypeFromSearchObject");SL.exports={executeSearch:hL,createSearchTypeFromSearchObject:mL,prepSearch:Z4,searchByType:pL}});var gL=T((nTe,TL)=>{"use strict";var rTe=os(),t3=Oc(),r3=K(),n3=D(),s3=jf();TL.exports=i3;function i3(e,t){if(!r3.isEmpty(t)&&n3.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=t3(e,"value");if(n)throw n;return s3.prepSearch(e,t,!0)}a(i3,"lmdbGetDataByValue")});var yu=T((oTe,RL)=>{"use strict";var iTe=os(),o3=Oc(),a3=K(),c3=D(),l3=jf();RL.exports=u3;async function u3(e,t){if(!a3.isEmpty(t)&&c3.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=o3(e,"value");if(n)throw n;return l3.prepSearch(e,t,!1)}a(u3,"lmdbSearchByValue")});var OL=T((lTe,AL)=>{"use strict";var cTe=at(),sg=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}},ig=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},og=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};AL.exports={SearchByConditionsObject:sg,SearchCondition:ig,SortAttribute:og}});var wL=T((fTe,IL)=>{"use strict";var _Te=OL().SearchByConditionsObject,_3=os(),d3=Oc(),ag=Ac(),zf=at(),{Resource:dTe}=(es(),ie(cg)),yL=jf(),f3=ZT(),E3=require("lodash"),{getSchemaPath:h3}=je(),bL=Ve(),{handleHDBError:p3,hdb_errors:m3}=oe(),{HTTP_STATUS_CODES:S3}=m3,T3=1e8;IL.exports=g3;async function g3(e){let t=d3(e,"conditions");if(t)throw p3(t,t.message,S3.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=h3(e.schema,e.table),n=await bL.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)bL.openDBI(n,_.search_attribute);let i=E3.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let u=_.search_type;u===zf.SEARCH_TYPES.EQUALS?_.estimated_count=ag.count(n,_.search_attribute,_.search_value):u===zf.SEARCH_TYPES.CONTAINS||u===zf.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=T3}return _.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await NL(o,e,i[0],s.hash_attribute),l;if(!e.operator||e.operator.toLowerCase()==="and"){let _=n.dbis[s.hash_attribute],u=i.slice(1).map(yL.filterByType),d=u.length,f=ag.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(E=>_.get(E,{transaction:o,lazy:!0})),d>0&&(l=l.filter(E=>{for(let h=0;h<d;h++)if(!u[h](E))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(E=>f3.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await NL(o,e,f,s.hash_attribute);c=c.concat(E)}let _=new Set,u=e.offset||0;c=c.filter(d=>_.has(d)?!1:(_.add(d),!0)).slice(u,e.limit&&e.limit+u),l=ag.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(g3,"lmdbSearchByConditions");async function NL(e,t,r,n){let s=new _3(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===zf.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,yL.searchByType(e,s,i,n).map(o=>o.value)}a(NL,"executeConditionSearch")});var Iu=T((hTe,CL)=>{"use strict";var R3=D().OPERATIONS_ENUM,lg=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=R3.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};CL.exports=lg});var ug=T((mTe,HL)=>{"use strict";var ML=os(),UL=Iu(),vL=yu(),BL=Au(),Cr=D(),DL=K(),LL=Ve(),{getTransactionAuditStorePath:A3,getSchemaPath:O3}=je(),PL=x();HL.exports=b3;async function b3(e){try{if(DL.isEmpty(global.hdb_schema[e.schema])||DL.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await N3(e),await y3(e);let t=O3(e.schema,e.table);try{await LL.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")PL.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=A3(e.schema,e.table);await LL.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")PL.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(b3,"lmdbDropTable");async function N3(e){let t=new ML(Cr.SYSTEM_SCHEMA_NAME,Cr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Cr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Cr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await vL(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 UL(Cr.SYSTEM_SCHEMA_NAME,Cr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await BL(s)}a(N3,"deleteAttributesFromSystem");async function y3(e){let t=new ML(Cr.SYSTEM_SCHEMA_NAME,Cr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Cr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Cr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Cr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Cr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await vL(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 UL(Cr.SYSTEM_SCHEMA_NAME,Cr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await BL(s)}catch(i){throw i}}a(y3,"dropTableFromSystem")});var qL=T((TTe,GL)=>{"use strict";var I3=require("fs-extra"),w3=os(),C3=bc(),D3=Iu(),L3=ug(),P3=Au(),M3=tg(),U3=yu(),Ei=D(),{getSchemaPath:v3}=je(),{handleHDBError:B3,hdb_errors:H3}=oe(),{HDB_ERROR_MSGS:G3,HTTP_STATUS_CODES:q3}=H3;GL.exports=x3;async function x3(e){let t;try{t=await F3(e.schema);let r=new w3(Ei.SYSTEM_SCHEMA_NAME,Ei.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Ei.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Ei.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await U3(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await L3(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new D3(Ei.SYSTEM_SCHEMA_NAME,Ei.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await P3(s);let i=v3(t);await I3.remove(i)}catch(r){throw r}}a(x3,"lmdbDropSchema");async function F3(e){let t=new C3(Ei.SYSTEM_SCHEMA_NAME,Ei.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Ei.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await M3(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw B3(new Error,G3.SCHEMA_NOT_FOUND(e),q3.NOT_FOUND,void 0,void 0,!0);return n}a(F3,"validateDropSchema")});var wu=T((RTe,xL)=>{"use strict";var _g=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};xL.exports=_g});var fg=T((bTe,FL)=>{"use strict";var k3=require("fs-extra"),Jf=Ve(),{getTransactionAuditStorePath:$3}=je(),dg=at(),OTe=wu();FL.exports=V3;async function V3(e){let t;try{let r=$3(e.schema,e.table);await k3.mkdirp(r),t=await Jf.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{Jf.createDBI(t,dg.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Jf.createDBI(t,dg.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Jf.createDBI(t,dg.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(V3,"createTransactionsAuditEnvironment")});var YL=T((yTe,VL)=>{"use strict";var Eg=D(),kL=Ve(),Y3=Jo(),{getSystemSchemaPath:K3,getSchemaPath:W3}=je(),Q3=ci(),j3=mf(),hg=pf(),z3=x(),J3=fg(),mg=Q3.hdb_table,$L=[];for(let e=0;e<mg.attributes.length;e++)$L.push(mg.attributes[e].attribute);VL.exports=X3;async function X3(e,t){let r=W3(t.schema,t.table),n=new hg(t.schema,t.table,Eg.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new hg(t.schema,t.table,Eg.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new hg(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await kL.createEnvironment(r,t.table),e!==void 0){let o=await kL.openEnvironment(K3(),Eg.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await Y3.insertRecords(o,mg.hash_attribute,$L,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await pg(n),await pg(s),await pg(i)}await J3(t)}catch(o){throw o}}a(X3,"lmdbCreateTable");async function pg(e){try{await j3(e)}catch(t){z3.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(pg,"createAttribute")});var WL=T((wTe,KL)=>{"use strict";var Z3=_u(),eX=fu(),tX=$f(),Cu=D(),rX=Jo().updateRecords,nX=Ve(),{getSchemaPath:sX}=je(),iX=gu(),oX=x();KL.exports=aX;async function aX(e){try{let{schema_table:t,attributes:r}=Z3(e);eX(e,r,t.hash_attribute),e.schema!==Cu.SYSTEM_SCHEMA_NAME&&(r.includes(Cu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Cu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Cu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Cu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await tX(e.hdb_auth_header,t,r),s=sX(e.schema,e.table),i=await nX.openEnvironment(s,e.table),o=await rX(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await iX(e,o)}catch(c){oX.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(aX,"lmdbUpdateRecords")});var jL=T((DTe,QL)=>{"use strict";var cX=D().OPERATIONS_ENUM,Sg=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=cX.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};QL.exports=Sg});var JL=T((MTe,zL)=>{"use strict";var PTe=jL(),lX=_u(),uX=fu(),_X=$f(),Du=D(),dX=Jo().upsertRecords,fX=Ve(),{getSchemaPath:EX}=je(),hX=gu(),pX=x(),{handleHDBError:mX,hdb_errors:SX}=oe();zL.exports=TX;async function TX(e){let t;try{t=lX(e)}catch(l){throw mX(l,l.message,SX.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;uX(e,n,r.hash_attribute),e.schema!==Du.SYSTEM_SCHEMA_NAME&&(n.includes(Du.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(Du.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(Du.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(Du.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await _X(e.hdb_auth_header,r,n),i=EX(e.schema,e.table),o=await fX.openEnvironment(i,e.table),c=await dX(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await hX(e,c)}catch(l){pX.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(TX,"lmdbUpsertRecords")});var ZL=T((vTe,XL)=>{"use strict";var Tg=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};XL.exports=Tg});var tP=T((HTe,eP)=>{"use strict";var gg=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}};eP.exports=gg});var sP=T((xTe,nP)=>{"use strict";var Rg=Ve(),{getTransactionAuditStorePath:gX}=je(),qTe=ZL(),Lu=at(),RX=K(),rP=tP(),AX=require("util").promisify,OX=AX(setTimeout),bX=1e4,NX=100;nP.exports=yX;async function yX(e){let t=gX(e.schema,e.table),r=await Rg.openEnvironment(t,e.table,!0),n=Rg.listDBIs(r);Rg.initializeDBIs(r,Lu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new rP;do s=await IX(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 OX(NX);while(s.transactions_deleted>0);return i}a(yX,"deleteAuditLogsBefore");async function IX(e,t){let r=new rP;try{let n=e.dbis[Lu.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[Lu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];RX.isEmpty(c)||(s=e.dbis[Lu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[Lu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>bX)break}return await s,r}catch(n){throw n}}a(IX,"deleteTransactions")});var oP=T((kTe,iP)=>{"use strict";var Ag=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};iP.exports=Ag});var cP=T((YTe,aP)=>{"use strict";var wX=os(),CX=Iu(),VTe=oP(),Ms=D(),DX=K(),Og=Ve(),LX=ci(),PX=yu(),MX=Au(),{getSchemaPath:UX}=je();aP.exports=vX;async function vX(e,t=!0){let r;e.schema===Ms.SYSTEM_SCHEMA_NAME?r=LX[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await HX(e),s=UX(e.schema,e.table),i=await Og.openEnvironment(s,e.table);return t===!0&&await BX(e,i,r.hash_attribute),Og.dropDBI(i,e.attribute),n}a(vX,"lmdbDropAttribute");async function BX(e,t,r){let n=Og.openDBI(t,r),s,i=e.attribute;for(let{key:o,value:c,version:l}of n.getRange({start:!1,versions:!0})){let _={};for(let u in c)u!==i&&(_[u]=c[u]);s=t.dbis[r].put(o,_,l)}await s}a(BX,"removeAttributeFromAllObjects");async function HX(e){let t=new wX(Ms.SYSTEM_SCHEMA_NAME,Ms.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Ms.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Ms.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Ms.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await PX(t)).filter(o=>o[Ms.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(DX.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[Ms.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new CX(Ms.SYSTEM_SCHEMA_NAME,Ms.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return MX(i)}a(HX,"dropAttributeFromSystem")});var EP=T((QTe,fP)=>{"use strict";var bg=Ve(),Nc=at(),WTe=Ar(),Ng=D(),lP=K(),{getTransactionAuditStorePath:GX}=je(),qX=Ac(),Xf=Tc(),xX=x();fP.exports=FX;async function FX(e){let t=GX(e.schema,e.table),r=await bg.openEnvironment(t,e.table,!0),n=bg.listDBIs(r);bg.initializeDBIs(r,Nc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case Ng.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return uP(r,e.search_values);case Ng.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,$X(r,e.search_values,s);case Ng.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return kX(r,e.search_values);default:return uP(r)}}a(FX,"readAuditLog");function uP(e,t=[0,Date.now()]){lP.isEmpty(t[0])&&(t[0]=0),lP.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Nc.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 Xf,s))}a(uP,"searchTransactionsByTimestamp");function kX(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[Nc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,dP(e,i))}return Object.fromEntries(r)}a(kX,"searchTransactionsByUsername");function $X(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let _=t[c],u=qX.equals(e,Nc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Nc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,_);for(let{value:d}of u){let f=Number(d);n.has(f)?n.get(f).push(_.toString()):n.set(f,[_.toString()])}}let s=Array.from(n.keys()),i=dP(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],_=l.timestamp,u=n.get(_);_P(l,"records",r,u,o),_P(l,"original_records",r,u,o)}return Object.fromEntries(o)}a($X,"searchTransactionsByHashValues");function _P(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 _=s.get(l),u=_[_.length-1];if(u.timestamp===i)u[t]=[c];else{let d=new Xf(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new Xf(e.operation,e.user_name,i,void 0);_[t]=[c],s.set(l,[_])}}}a(_P,"loopRecords");function dP(e,t){let r=[];try{let n=e.dbis[Nc.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 Xf,i);r.push(o)}}catch(i){xX.warn(i)}return r}catch(n){throw n}}a(dP,"batchSearchTransactions")});var pP=T((XTe,hP)=>{"use strict";var{getSchemaPath:zTe}=je(),JTe=Ve(),{database:VX}=(ge(),ie(ke));hP.exports={writeTransaction:YX};async function YX(e,t,r){return VX({database:e,table:t}).transaction(r)}a(YX,"writeTransaction")});var gP=T((ege,TP)=>{"use strict";var{getSchemaPath:mP}=je(),SP=Ve();TP.exports={flush:KX,resetReadTxn:WX};async function KX(e,t){return(await SP.openEnvironment(mP(e,t),t.toString())).flushed}a(KX,"flush");async function WX(e,t){try{(await SP.openEnvironment(mP(e,t),t.toString())).resetReadTxn()}catch{}}a(WX,"resetReadTxn")});var bP=T((rge,OP)=>{"use strict";var{Readable:QX}=require("stream"),{getDatabases:jX}=(ge(),ie(ke)),{readSync:zX,openSync:JX,createReadStream:RP}=require("fs"),{open:XX}=require("lmdb"),AP=su(),ZX=iu(),{AUDIT_STORE_OPTIONS:eZ}=(Zi(),ie(NP)),{INTERNAL_DBIS_NAME:tZ,AUDIT_STORE_NAME:rZ}=at();OP.exports=sZ;var yg=32768,nZ=100;async function sZ(e){let t=e.database||e.schema||"data",r=jX()[t],n=new Date().toISOString(),s=e.tables||e.table&&[e.table];if(s){let _=r[s[0]];if(!_)throw new Error(`Can not find table ${s[0]}`);let u=_.dbisDB,d=XX({noSync:!0,maxDbs:ZX.MAX_DBS}),f,E=d.openDB(tZ,new AP(!1)),h=u.useReadTransaction(),m=0,S=a(async function(R,A){A.encoding="binary",A.encoder=void 0;let P=d.openDB(R,A),U=u.openDB(R,A);for(let{key:v,version:k,value:H}of U.getRange({start:null,transaction:h,versions:U.useVersions}))f=P.put(v,H,k),m++%nZ===0&&(await new Promise(j=>setTimeout(j,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:R,value:A}of u.getRange({transaction:h,start:!1}))if(s.some(P=>R.startsWith?.(P+"/"))){E.put(R,A);let[,P]=R.split("/"),U=!P,v=new AP(!U,U);await S(R,v)}e.include_audit&&await S(rZ,Object.assign({},eZ)),await f;let g=RP(d.path);return g.headers=l(),g.on("close",()=>{h.done(),d.close()}),g}let o=r[Object.keys(r)[0]].primaryStore,c=JX(o.path);return o.transaction(()=>{let _=Buffer.alloc(yg);zX(c,_,0,yg),o.resetReadTxn();let u=o.useReadTransaction();u.renew();let d=RP(null,{fd:c,start:yg}),f=new QX.from(async function*(){yield _;for await(let E of d)u.openTimer&&(u.openTimer=0),yield E;u.done()}());return f.headers=l(),f});function l(){let _=new Map;return _.set("content-type","application/octet-stream"),_.set("content-disposition",`attachment; filename="${t}"`),_.set("date",n),_}}a(sZ,"getBackup")});var wP=T((sge,IP)=>{"use strict";var iZ=x(),{handleHDBError:oZ}=oe(),aZ=$I(),cZ=mf(),lZ=QT(),uZ=qD(),_Z=Au(),dZ=tg(),fZ=_L(),EZ=gL(),hZ=yu(),pZ=wL(),mZ=qL(),SZ=YL(),TZ=WL(),gZ=JL(),RZ=sP(),AZ=ug(),OZ=cP(),bZ=EP(),NZ=pP(),yP=gP(),yZ=bP(),Ig=class extends aZ{static{a(this,"LMDBBridge")}async searchByConditions(t){return pZ(t)}async getDataByHash(t){return await dZ(t)}async searchByHash(t){return await fZ(t)}async getDataByValue(t,r){return await EZ(t,r)}async searchByValue(t){return await hZ(t)}async createSchema(t){return await uZ(t)}async dropSchema(t){return await mZ(t)}async createTable(t,r){return await SZ(t,r)}async dropTable(t){return await AZ(t)}async createAttribute(t){return await cZ(t)}async createRecords(t){return await lZ(t)}async updateRecords(t){return await TZ(t)}async upsertRecords(t){try{return await gZ(t)}catch(r){throw oZ(r,null,null,iZ.ERR,r)}}async deleteRecords(t){return await _Z(t)}async dropAttribute(t){return await OZ(t)}async deleteAuditLogsBefore(t){return await RZ(t)}async readAuditLog(t){return await bZ(t)}writeTransaction(t,r,n){return NZ.writeTransaction(t,r,n)}flush(t,r){return yP.flush(t,r)}resetReadTxn(t,r){return yP.resetReadTxn(t,r)}getBackup(t){return yZ(t)}};IP.exports=Ig});function LZ(){DZ=setInterval(function(){for(let e of wg)if(e.stale){let t=e[Ie]?.url;LP.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},CZ).unref()}var Cg,DP,LP,IZ,wg,wZ,Pu,CP,da,Zf,CZ,DZ,Dg=Oe(()=>{Cg=B(Ar()),DP=B(oe()),LP=B(x());es();IZ=100,wg=new Set,wZ=25e3,da=class e{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;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.readTxnsUsed=1,this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxn.openTimer&&(this.readTxn.openTimer=0),wg.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(wg.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(Pu&&performance.now()-CP>wZ)throw new DP.ServerError("Outstanding write transactions have too long of queue, please try again later",503)}addWrite(t){if(this.open===0)throw new Error("Can not use a transaction that is no longer open");if(this.open===2){let r=new e;return r.addWrite(t),r.commit({})}else this.writes.push(t)}removeWrite(t){let r=this.writes.indexOf(t);r>-1&&(this.writes[r]=null)}commit(t={}){let r=this.timestamp;r||(r=this.timestamp=t.timestamp=t.timestamp||(0,Cg.getNextMonotonicTime)());let n=t.retries||0;if(this.validated<this.writes.length)try{let u=this.validated;this.validated=this.writes.length;for(let f=u;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let d;for(let f=u;f<this.validated;f++){let E=this.writes[f];E&&(E.before||E.beforeIntermediate)&&(d=!0)}if(d)return(async()=>{try{for(let f=0;f<2;f++){let E;for(let h=u;h<this.validated;h++){let m=this.writes[h];if(!m)continue;let S=m[f===0?"before":"beforeIntermediate"];if(S){let g=S();E?E.push?E.push(g):E=[E,g]:E=g}}E&&await(E.push?Promise.all(E):E)}}catch(f){throw this.abort(),f}return this.commit(t)})()}catch(u){throw this.abort(),u}n||this.doneReadTxn(),this.open=t?.letItLinger?2:0;let s,i=[],o=0;this.writes=this.writes.filter(u=>u);let c=a(u=>{u.commit(r,u.entry,n)},"doWrite"),l=a(()=>{let u=this.writes[o++];if(u)if(u.key){n>0&&(u.entry=u.store.getEntry(u.key));let d=u.store.ifVersion(u.key,u.entry?.version??null,l);s=s||d}else l();else for(let d of this.writes)c(d)},"nextCondition");if(this.writes.length<IZ>>n?l():s=this.writes[0].store.transaction(()=>{for(let u of this.writes)u.entry=u.store.getEntry(u.key),c(u);return!0}),s)return Pu||(Pu=s,CP=performance.now(),Pu.then(()=>{Pu=null})),s.then(u=>u?(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))):(t?t.retries=n+1:t={retries:1},this.commit(t)));let _={txnTime:r};if(this.next){let u=this.next?.commit(t);if(u?.then)return u?.then(d=>({txnTime:r,next:d}));_.next=u}return _}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=0,this.writes=[]}},Zf=class extends da{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,Cg.getNextMonotonicTime)())}getReadTxn(){}},CZ=3e4;a(LZ,"startMonitoringTxns");LZ()});function Ze(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 da;e.timestamp&&(n.timestamp=e.timestamp),n[Ie]=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 PP,fa=Oe(()=>{PP=require("../index");es();Dg();a(Ze,"transaction");(0,PP._assignPackageExport)("transaction",Ze);Ze.commit=function(e){let t=(e[Ie]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Ze.abort=function(e){let t=(e[Ie]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var FP={};Fe(FP,{ResourceBridge:()=>Mg});function Ug({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 UP(e,t){let r=Us(e),n=Ug(e,r);if(!r)throw new as.ClientError(`Table ${e.table} not found`);let s;n&&r.attributes.length-n.length>2&&n.length<5&&(s=!0);let i={user:e.hdb_user},o;Ze(i,()=>new Promise(_=>o=_));let c=e.ids||e.hash_values,l=0;return{[Symbol.asyncIterator](){return{async next(){if(l<c.length){let _=c[l++],u=await r.get({id:_,lazy:s,select:n},i);return u=u&&tE(u),t?{value:{key:_,value:u}}:{value:u}}else return o(),{done:!0}},return(_){return o(),{value:_,done:!0}},throw(_){return o(),{done:!0}}}}}}function Us(e){let t=e.database||e.schema||MZ,r=Dr()[t];if(!r)throw(0,as.handleHDBError)(new Error,PZ.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function vP(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*BP(e,t,r){let n;for await(let s of e.getHistory(t,r)){let i=s.type;i==="put"&&(i="upsert");let{id:o,version:c,value:l}=s;n?.timestamp===c?(n.hash_values.push(o),n.records.push(l)):(n&&(yield n),n={operation:i,user_name:s.user,timestamp:c,hash_values:[o],records:[l]})}n&&(yield n)}var HP,eE,as,GP,qP,cs,Lg,Pg,xP,PZ,MZ,UZ,vZ,MP,Mg,kP=Oe(()=>{"use strict";HP=B(wP()),eE=B(Oc()),as=B(oe());ge();GP=B(_u()),qP=B(fu()),cs=B(D()),Lg=B(di()),Pg=B(is()),xP=B(K());fa();rE();({HDB_ERROR_MSGS:PZ}=as.hdb_errors),MZ="data",UZ=1e4,vZ=10,Mg=class extends HP.default{static{a(this,"ResourceBridge")}constructor(t){super(t),MP=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,eE.default)(t,"conditions");if(r)throw(0,as.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=Us(t);if(!n)throw new as.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:Ug(t,n),sort:t.sort,allowFullScan:!0})}async createTable(t,r){let n=r.attributes,s=!!n,i=r.primary_key||r.hash_attribute;if(n)for(let o of n)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new as.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");n=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}Et({database:r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration})}async createAttribute(t){return await Us(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Us(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=a((o,c,l)=>(c=Object.assign({},c),delete c[n],r.primaryStore.ifVersion(o,l,()=>r.primaryStore.put(o,c,l)).then(_=>{if(!_){let{value:u,version:d}=r.primaryStore.getEntry(o);return i(o,u,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(_=>setImmediate(_));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){Us(t).dropTable()}createSchema(t){return Mu({database:t.schema,table:null}),Lg.signalSchemaChange(new Pg.SchemaEventMsg(process.pid,cs.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await vg(t.schema),Lg.signalSchemaChange(new Pg.SchemaEventMsg(process.pid,cs.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,MP.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,GP.default)(t);(0,qP.default)(t,n,r.primaryKey);let s,i=Dr()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return Ze(o,async c=>{if(!i.schemaDefined){s=[];for(let u of n)i.attributes.find(f=>f.name==u)||s.push(u);s.length>0&&await i.addAttributes(s.map(u=>({name:u,indexed:!0})))}let l=[],_=[];for(let u of t.records){let d=await i.get(u[i.primaryKey],o);if(t.requires_existing&&!d||t.requires_no_existing&&d){_.push(u[i.primaryKey]);continue}d&&(d=tE(d));for(let f in u)if(Object.prototype.hasOwnProperty.call(u,f)){let E=u[f];if(typeof E=="function")try{let h=E([[d]]);Array.isArray(h)&&(E=h[0].func_val,u[f]=E)}catch(h){throw h.message+="Trying to set key "+f+" on object"+JSON.stringify(u),h}}if(d)for(let f in d)Object.prototype.hasOwnProperty.call(u,f)||(u[f]=d[f]);await i.put(u,o),l.push(u[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:l,new_attributes:s,skipped_hashes:_}})}async deleteRecords(t){let r=Dr()[t.schema][t.table],n={user:t.hdb_user};return Ze(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 vP(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=Dr()[t.schema][t.table];if(!r.createdTimeProperty)throw new as.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:cs.VALUE_SEARCH_COMPARATORS.LESS}]}),s=!1,i=[],o=[],c=0,l=[],_=a(async()=>{let u=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:l});i.push(...u.deleted_hashes),o.push(...u.skipped_hashes),await(0,xP.async_set_timeout)(vZ),l=[],s=!0},"chunkDelete");for await(let u of n)l.push(u[r.primaryKey]),c++,c%UZ===0&&await _();return l.length>0&&await _(),s?vP(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,eE.default)(t,"hashes");if(r)throw r;return UP(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of UP(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&cs.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,eE.default)(t,"value");if(n)throw n;let s=Us(t);if(!s)throw new as.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===cs.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return s.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:Ug(t,s)})}async getDataByValue(t,r){let n=new Map,s=Us(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){Us({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Us(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=Us(t),n={};switch(t.search_type){case cs.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)n[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.type;return c==="put"&&(c="upsert"),{operation:c,timestamp:o.version,user_name:o.user,hash_values:[i],records:[o.value]}});return n;case cs.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let s=t.search_values;for await(let i of BP(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return BP(r,t.search_values?.[0],t.search_values?.[1])}}};a(Ug,"getSelect");a(UP,"getRecords");a(Us,"getTable");a(vP,"createDeleteResponse");a(BP,"groupRecordsInHistory")});var Mn=T((Tge,$P)=>{"use strict";var{ResourceBridge:BZ}=(kP(),ie(FP)),HZ=X();HZ.initSync();var nE;function GZ(){return nE||(nE=new BZ,nE)}a(GZ,"getBridge");$P.exports=GZ()});var WP=T((Rge,KP)=>{"use strict";var VP=require("lodash"),Uu=require("mathjs"),qZ=require("jsonata"),YP=K();KP.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?VP.uniqWith(e,VP.isEqual):e,searchJSON:xZ,mad:vu.bind(null,Uu.mad),mean:vu.bind(null,Uu.mean),mode:vu.bind(null,Uu.mode),prod:vu.bind(null,Uu.prod),median:vu.bind(null,Uu.median)};function vu(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(vu,"aggregateFunction");function xZ(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(YP.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),YP.isEmpty(this.__ala__.res[r])){let n=qZ(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(xZ,"searchJSON")});var jP=T((Oge,QP)=>{"use strict";var Ot=require("moment"),Bg="YYYY-MM-DDTHH:mm:ss.SSSZZ";Ot.suppressDeprecationWarnings=!0;QP.exports={current_date:()=>Ot().utc().format("YYYY-MM-DD"),current_time:()=>Ot().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return Ot(e).utc().format("YYYY");case"month":return Ot(e).utc().format("MM");case"day":return Ot(e).utc().format("DD");case"hour":return Ot(e).utc().format("HH");case"minute":return Ot(e).utc().format("mm");case"second":return Ot(e).utc().format("ss");case"millisecond":return Ot(e).utc().format("SSS");default:break}},date:e=>Ot(e).utc().format(Bg),date_format:(e,t)=>Ot(e).utc().format(t),date_add:(e,t,r)=>Ot(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>Ot(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let n=Ot(e).utc(),s=Ot(t).utc();return r?n.diff(s,r,!0):n.diff(s)},now:()=>Ot().utc().valueOf(),get_server_time:()=>Ot().format(Bg),offset_utc:(e,t)=>Ot(e).utc().utcOffset(t).format(Bg)}});var ZP=T((bge,XP)=>{"use strict";var FZ=require("@turf/area"),kZ=require("@turf/length"),$Z=require("@turf/circle"),VZ=require("@turf/difference"),YZ=require("@turf/distance"),KZ=require("@turf/boolean-contains"),WZ=require("@turf/boolean-equal"),QZ=require("@turf/boolean-disjoint"),jZ=require("@turf/helpers"),zP=D(),Re=K(),hi=x();XP.exports={geoArea:zZ,geoLength:JZ,geoCircle:XZ,geoDifference:ZZ,geoDistance:JP,geoNear:e5,geoContains:t5,geoEqual:r5,geoCrosses:n5,geoConvert:s5};function zZ(e){if(Re.isEmpty(e))return NaN;typeof e=="string"&&(e=Re.autoCastJSON(e));try{return FZ.default(e)}catch(t){return hi.trace(t,e),NaN}}a(zZ,"geoArea");function JZ(e,t){if(Re.isEmpty(e))return NaN;typeof e=="string"&&(e=Re.autoCastJSON(e));try{return kZ.default(e,{units:t||"kilometers"})}catch(r){return hi.trace(r,e),NaN}}a(JZ,"geoLength");function XZ(e,t,r){if(Re.isEmpty(e))return NaN;if(Re.isEmpty(t))return NaN;typeof e=="string"&&(e=Re.autoCastJSON(e));try{return $Z.default(e,t,{units:r||"kilometers"})}catch(n){return hi.trace(n,e,t),NaN}}a(XZ,"geoCircle");function ZZ(e,t){if(Re.isEmpty(e))return NaN;if(Re.isEmpty(t))return NaN;typeof e=="string"&&(e=Re.autoCastJSON(e)),typeof t=="string"&&(t=Re.autoCastJSON(t));try{return VZ(e,t)}catch(r){return hi.trace(r,e,t),NaN}}a(ZZ,"geoDifference");function JP(e,t,r){if(Re.isEmpty(e))return NaN;if(Re.isEmpty(t))return NaN;typeof e=="string"&&(e=Re.autoCastJSON(e)),typeof t=="string"&&(t=Re.autoCastJSON(t));try{return YZ.default(e,t,{units:r||"kilometers"})}catch(n){return hi.trace(n,e,t),NaN}}a(JP,"geoDistance");function e5(e,t,r,n){if(Re.isEmpty(e)||Re.isEmpty(t))return!1;if(Re.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=Re.autoCastJSON(e)),typeof t=="string"&&(t=Re.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return JP(e,t,n)<=r}catch(s){return hi.trace(s,e,t),!1}}a(e5,"geoNear");function t5(e,t){if(Re.isEmpty(e)||Re.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Re.autoCastJSON(e)),typeof t=="string"&&(t=Re.autoCastJSON(t));try{return KZ.default(e,t)}catch(r){return hi.trace(r,e,t),!1}}a(t5,"geoContains");function r5(e,t){if(Re.isEmpty(e)||Re.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Re.autoCastJSON(e)),typeof t=="string"&&(t=Re.autoCastJSON(t));try{return WZ.default(e,t)}catch(r){return hi.trace(r,e,t),!1}}a(r5,"geoEqual");function n5(e,t){if(Re.isEmpty(e)||Re.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Re.autoCastJSON(e)),typeof t=="string"&&(t=Re.autoCastJSON(t));try{return!QZ.default(e,t)}catch(r){return hi.trace(r,e,t),!1}}a(n5,"geoCrosses");function s5(e,t,r){if(Re.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(Re.isEmpty(t))throw new Error("geo_type is required");if(Re.isEmpty(zP.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(zP.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Re.autoCastJSON(e)),jZ[t](e,r)}a(s5,"geoConvert")});var sE=T((yge,eM)=>{var Ea=WP(),ln=jP(),vs=ZP();eM.exports=e=>{e.aggr.mad=e.aggr.MAD=Ea.mad,e.aggr.mean=e.aggr.MEAN=Ea.mean,e.aggr.mode=e.aggr.MODE=Ea.mode,e.aggr.prod=e.aggr.PROD=Ea.prod,e.aggr.median=e.aggr.MEDIAN=Ea.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Ea.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Ea.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=ln.current_date,e.fn.current_time=e.fn.CURRENT_TIME=ln.current_time,e.fn.extract=e.fn.EXTRACT=ln.extract,e.fn.date=e.fn.DATE=ln.date,e.fn.date_format=e.fn.DATE_FORMAT=ln.date_format,e.fn.date_add=e.fn.DATE_ADD=ln.date_add,e.fn.date_sub=e.fn.DATE_SUB=ln.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=ln.date_diff,e.fn.now=e.fn.NOW=ln.now,e.fn.offset_utc=e.fn.OFFSET_UTC=ln.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=ln.get_server_time,e.fn.getdate=e.fn.GETDATE=ln.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=ln.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=vs.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=vs.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=vs.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=vs.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=vs.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=vs.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=vs.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=vs.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=vs.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=vs.geoNear}});var sM=T((Ige,nM)=>{"use strict";var Bu=require("lodash"),Lr=require("alasql");Lr.options.cache=!1;var i5=sE(),tM=require("clone"),iE=require("recursive-iterator"),de=x(),Pe=K(),yc=Mn(),o5=D(),{hdb_errors:a5}=oe(),{getDatabases:rM}=(ge(),ie(ke)),c5="IS NULL",ls="There was a problem performing this search. Please check the logs and try again.";i5(Lr);var Hg=class{static{a(this,"SQLSearch")}constructor(t,r){if(Pe.isEmpty(t))throw de.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(),Pe.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!Pe.isEmptyOrZeroLength(n))return de.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw de.error("Error thrown from checkEmptySQL in SQLSearch class method search."),de.error(n),new Error(ls)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw de.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),de.error(n),new Error(ls)}if(Object.keys(this.data).length===0)return de.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw de.error("Error thrown from processJoins in SQLSearch class method search."),de.error(n),new Error(ls)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw de.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),de.error(n),new Error(ls)}try{return t=await this._finalSQL(),t}catch(n){throw de.error("Error thrown from finalSQL in SQLSearch class method search."),de.error(n),new Error(ls)}}_getColumns(){let t=new iE(this.statement);for(let{node:r,path:n}of t)r&&r.columnid&&(this.columns[n[0]]||(this.columns[n[0]]=[]),this.columns[n[0]].push(tM(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Bu.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let n=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[n]={},this.data[n].__hash_name=rM()[r.databaseid][r.tableid].primaryKey,this.data[n].__merged_data={},this.data[n].__merged_attributes=[],this.data[n].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(Pe.isEmpty(this.statement.where)){de.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new iE(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!Pe.isEmpty(r)&&r.right)if(Pe.isNotEmptyAndHasValue(r.right.value)){let n=Pe.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new Lr.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=Pe.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new Lr.yy.LogicValue({value:i}):n instanceof Lr.yy.StringValue&&Pe.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new Lr.yy.NumValue({value:i}))});if(t){de.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new iE(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(!Pe.isEmpty(o5.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(Pe.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(Pe.isEmptyOrZeroLength(r.left.columnid)||Pe.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(Pe.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"=":!Pe.isEmpty(r.right.value)||!Pe.isEmpty(r.left.value)?n.add(Pe.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 _=0;_<l.length;_++)if(l[_].value)n.add(l[_].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(Pe.isEmptyOrZeroLength(this.all_table_attributes)&&Pe.isEmptyOrZeroLength(this.statement.from)&&Pe.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&&Bu.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(Pe.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);Pe.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(Pe.isEmptyOrZeroLength(this.all_table_attributes)&&!Pe.isEmptyOrZeroLength(this.columns.columns))return t;if(Pe.isEmptyOrZeroLength(this.all_table_attributes)&&Pe.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Lr.promise(r)}catch(r){throw de.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),de.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let n=this._findColumn(r);n&&this.fetch_attributes.push(tM(n))})}_addColumnToMergedAttributes(t,r){this.data[t].__merged_attributes.push(r),this.data[t].__merged_attr_map[r]=this.data[t].__merged_attributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__merged_data[r].splice(0,1,r)}_updateMergedAttribute(t,r,n,s){let i=this.data[t].__merged_attr_map[n];this.data[t].__merged_data[r].splice(i,1,s)}async _getFetchAttributeValues(){if(Pe.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(c5)>-1&&this.tables.forEach(s=>{let i={columnid:rM()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Bu.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,_=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(l=!0),!Pe.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!Pe.isEmptyOrZeroLength(this.exact_search_values[_].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[_].values);let u=await yc.getDataByHash(c);for(let d of c.hash_values)u.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d))}catch(u){throw de.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),de.error(u),new Error(ls)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[_].values).map(async u=>{let d=Object.assign({},c);d.search_value=u;let f=await yc.getDataByValue(d);for(let[E,h]of f)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,s.attribute,h[s.attribute]):(this.data[i].__merged_data[E]=[...n[i]],this._updateMergedAttribute(i,E,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,E))}))}catch(u){throw de.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),de.error(u),new Error(ls)}else if(!Pe.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!Pe.isEmptyOrZeroLength(this.comparator_search_values[_].comparators))try{let u=this.comparator_search_values[_].comparators;for(let d=0,f=u.length;d<f;d++){let E=u[d];c.search_attribute=E.attribute,c.search_value=E.search_value;let h=await yc.getDataByValue(c,E.operation);if(l)for(let[m]of h)this.data[i].__merged_data[m]||(this.data[i].__merged_data[m]=[...n[i]],this._setMergedHashAttribute(i,m));else for(let[m,S]of h)this.data[i].__merged_data[m]?this._updateMergedAttribute(i,m,s.attribute,S[s.attribute]):(this.data[i].__merged_data[m]=[...n[i]],this._updateMergedAttribute(i,m,s.attribute,S[s.attribute]),this._setMergedHashAttribute(i,m))}}catch(u){throw de.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),de.error(u),new Error(ls)}else try{c.search_attribute=s.attribute,c.search_value="*";let u=await yc.getDataByValue(c);if(l)for(let[d]of u)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d));else for(let[d,f]of u)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,s.attribute,f[s.attribute]):(this.data[i].__merged_data[d]=[...n[i]],this._updateMergedAttribute(i,d,s.attribute,f[s.attribute]),this._setMergedHashAttribute(i,d))}catch(u){throw de.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),de.error(u),new Error(ls)}}}_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 Lr.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 Lr.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new Lr.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 Lr.yy.FuncValue:new Lr.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(E=>{E.joinmode&&E.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(E.table);let h=E.joinmode+" JOIN ? AS "+(E.as?E.as:E.table.tableid);E.on&&(h+=" ON "+E.on.toString()),i.push(h),t.push(Object.values(this.data[`${E.table.databaseid_orig}_${E.table.as?E.table.as_orig:E.table.tableid_orig}`].__merged_data))});let o=[],c={};s.forEach(E=>{let h=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__hash_name,m=E.as?E.as_orig:E.tableid_orig;o.push({key:`'${m}.${h}'`,schema:E.databaseid_orig,table:E.as?E.as_orig:E.tableid_orig,keys:new Set}),r.push(`${E.as?E.as:E.tableid}.\`${h}\` AS "${m}.${h}"`),c[E.as?E.as_orig:E.tableid_orig]=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__merged_attributes});let l=this.statement.where?"WHERE "+this.statement.where:"";l=l.replace(/NOT\(NULL\)/g,"NOT NULL");let _="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(_="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(E=>{E.is_func?r.push(E.initial_select_column.toString()):E.initial_select_column.tableid?r.push(`${E.initial_select_column.tableid}.${E.initial_select_column.columnid} AS ${E.expression.columnid}`):r.push(`${E.initial_select_column.columnid} AS ${E.expression.columnid}`)}));let u="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(u=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let f=[];try{let E=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${l} ${_} ${u} ${d}`,h=this._convertColumnsToIndexes(E,s);f=await Lr.promise(h,t),t=null}catch(E){throw de.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),de.error(E),new Error("There was a problem processing the data.")}if(f&&f.length>0){for(let E=0,h=f.length;E<h;E++){let m=f[E];o.forEach(S=>{m[S.key]!==null&&m[S.key]!==void 0&&S.keys.add(m[S.key])})}o.forEach(E=>{let h=Object.keys(this.data[`${E.schema}_${E.table}`].__merged_data),m=Bu.difference(h,[...E.keys].map(S=>S.toString()));for(let S=0,g=m.length;S<g;S++){let R=m[S];delete this.data[`${E.schema}_${E.table}`].__merged_data[R]}})}return{existing_attributes:c,joined_length:f?f.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new iE(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=Bu.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 de.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),de.error(i),new Error(ls)}}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 u in i)o.push(i[u][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 yc.getDataByHash(c),_=s.columns.length;for(let u=0,d=o.length;u<d;u++){let f=o[u],E=l.get(f);for(let h=0;h<_;h++){let m=s.columns[h],S=E[m]===void 0?null:E[m];this.data[n].__merged_data[f].push(S)}}}}catch(r){throw de.error("Error thrown from getDataByHash function in SQLSearch class method getData."),de.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();de.trace(`Final SQL: ${s}`),n=await Lr.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),de.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw de.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),de.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 de.error(a5.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),de.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],_=new RegExp(`${l}.\`${o}\``,"g"),u=`${l}.[${c}]`;n=n.replace(_,u)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=new RegExp(`\`${o}\``,"g"),_=`[${c}]`;n=n.replace(l,_)});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 yc.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]=Object.assign({},r[s])),this.data[s].__merged_data[c][t[n.attribute]]=l[n.attribute]??null}catch(o){throw de.error("There was an error when processing this SQL operation. Check your logs"),de.error(o),new Error(ls)}}return Object.values(Object.values(this.data)[0].__merged_data)}};nM.exports=Hg});var ir=T((Cge,iM)=>{"use strict";var l5=FI();iM.exports={searchByConditions:_5,searchByHash:d5,searchByValue:f5,search:E5};var Gg=Mn(),{transformReq:qg}=K(),u5=sM();async function _5(e){return qg(e),Gg.searchByConditions(e)}a(_5,"searchByConditions");async function d5(e){qg(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of Gg.searchByHash(e))r&&t.push(r);return t}a(d5,"searchByHash");async function f5(e){qg(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of Gg.searchByValue(e))t.push(r);return t}a(f5,"searchByValue");function E5(e,t){try{let r=new l5(e);r.validate(),new u5(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(E5,"search")});var oE=T((Lge,oM)=>{"use strict";var h5=Mn();oM.exports={writeTransaction:p5};function p5(e,t,r){return h5.writeTransaction(e,t,r)}a(p5,"writeTransaction")});var uM=T((Uge,lM)=>{"use strict";var m5=ir(),S5=Pn(),aM=x(),T5=yr(),Mge=oE(),g5=require("clone"),Fg=require("alasql"),R5=sE(),cM=require("util"),A5=cM.promisify(S5.getTableSchema),O5=cM.promisify(m5.search),b5=D(),xg=K();R5(Fg);lM.exports={update:y5};var N5="There was a problem performing this update. Please check the logs and try again.";async function y5({statement:e,hdb_user:t}){let r=await A5(e.table.databaseid,e.table.tableid),n=I5(e.columns);xg.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=g5(s),c=xg.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,_=Fg.parse(l).statements[0],u=await O5(_),d=w5(n,u);return C5(o,d,t)}a(y5,"update");function I5(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=Fg.compile(`SELECT ${r.expression.toString()} AS [${b5.FUNC_VAL}] FROM ?`)}),t}catch(t){throw aM.error(t),new Error(N5)}}a(I5,"createUpdateRecord");function w5(e,t){return xg.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(w5,"buildUpdateRecords");async function C5(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await T5.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){aM.error(`Error delete new_attributes from update response: ${i}`)}return s}a(C5,"updateRecords")});var dM=T((Gge,_M)=>{var D5=require("alasql"),L5=ir(),P5=x(),M5=Mn(),$g=require("util"),kg=K(),U5=D(),v5=Pn(),Bge=oE(),Hge=yr(),B5="record",H5="successfully deleted",G5=$g.callbackify(k5),q5=$g.promisify(L5.search),x5=$g.promisify(v5.getTableSchema);_M.exports={convertDelete:G5};function F5(e){return`${e.deleted_hashes.length} ${B5}${e.deleted_hashes.length===1?"":"s"} ${H5}`}a(F5,"generateReturnMessage");async function k5({statement:e,hdb_user:t}){let r=await x5(e.table.databaseid,e.table.tableid);kg.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=kg.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=D5.parse(o).statements[0],l={operation:U5.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await q5(c);let _=await M5.deleteRecords(l);return kg.isEmptyOrZeroLength(_.message)&&(_.message=F5(_)),delete _.txn_time,_}catch(_){throw P5.error(_),_.hdb_code?_.message:_}}a(k5,"convertDelete")});var mM=T((xge,pM)=>{"use strict";var $5=_i(),{hdb_errors:fM}=oe(),{getDatabases:EM}=(ge(),ie(ke));pM.exports={checkSchemaExists:hM,checkSchemaTableExists:V5,schema_describe:$5};async function hM(e){if(!EM()[e])return fM.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(hM,"checkSchemaExists");async function V5(e,t){let r=await hM(e);if(r)return r;if(!EM()[e][t])return fM.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(V5,"checkSchemaTableExists")});var ha=T((kge,Y5)=>{Y5.exports={name:"harperdb",version:"4.3.4",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","cloud","enterprise","Fastify","NATS"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{"minimum-node":"16.0.0","go-lang":"1.21.7","nats-server":"2.10.11"},exports:{".":"./index.js"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"SEE LICENSE IN LICENSE",scripts:{submodules:"git submodule update --init --recursive",build:"eslint -c ./.eslintbuild bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/","cover:test":"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && nyc --no-clean --reporter=lcovonly npm run test:apitests && nyc --no-clean --reporter=lcovonly npm run test:resources && nyc --no-clean --reporter=lcovonly npm run test:logging && nyc --no-clean --reporter=lcovonly npm run test:upgrade && nyc --no-clean --reporter=lcovonly npm run test:nats && nyc --no-clean --reporter=lcovonly npm run test:cfserver && nyc --no-clean --reporter=lcovonly npm run test:hdbserver && nyc --no-clean --reporter=lcovonly npm run test:bin && nyc --no-clean --reporter=lcovonly npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license",test:"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && npm run test:apitests && npm run test:resources && npm run test:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:bin && npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:resources":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/resources/**/*.js' --config '../unitTests/.mocharc.json'","test:bin":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/bin/**/*.js' --config '../unitTests/.mocharc.json'","test:main":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","test:lmdbbridge":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","test:lmdbutility":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","test:hdbserver":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","test:cfserver":"npm run submodules && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/fastifyRoutes/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","test:nats":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","test:upgrade":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","test:apitests":"pm2 kill && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*-test.mjs' --config '../unitTests/.mocharc.json'","test:logging":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test"},dependencies:{"@aws-sdk/client-s3":"3.535.0","@aws-sdk/lib-storage":"3.535.0","@endo/static-module-record":"^1.0.4","@fastify/autoload":"5.7.1","@fastify/compress":"~6.5.0","@fastify/cors":"~8.5.0","@fastify/static":"~6.12.0","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"4.1.10","cbor-x":"1.5.8",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2","fast-glob":"3.3.2",fastify:"~4.26.2","fastify-plugin":"~4.5.1","fs-extra":"11.2.0",graphql:"^16.8.1","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.12.2","json-bigint-fixes":"1.1.0",json2csv:"5.0.7",jsonata:"1.8.7",jsonwebtoken:"9.0.2",lmdb:"3.0.4",lodash:"4.17.21",mathjs:"11.12.0",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.30.1","mqtt-packet":"~8.2.1",msgpackr:"1.10.1",nats:"2.19.0",needle:"3.3.1","node-stream-zip":"1.15.0","node-unix-socket":"0.2.5","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.5.1",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.16.0",pm2:"5.3.1",prompt:"1.3.0","properties-reader":"2.3.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^0.18.0","serve-static":"1.15.0",ses:"1.1.0","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.22.3","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.1","validate.js":"0.13.1",ws:"8.16.0",yaml:"2.4.1"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"latest","@typescript-eslint/eslint-plugin":"^5.55.0","@typescript-eslint/parser":"^5.55.0",axios:"1.6.8",chai:"4.4.1","chai-integer":"0.1.0",esbuild:"^0.20.2",eslint:"8.22.0","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.1","eslint-plugin-radar":"0.2.1",eventsource:"^2.0.2","hook-std":"3.0.0","intercept-stdout":"0.1.2",mocha:"^10.3.0","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",mqtt:"~4.3.8",newman:"5.3.2","newman-reporter-html":"1.0.5","newman-reporter-htmlextra":"1.22.11","newman-reporter-teamcity":"0.1.12","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"2.8.4",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0","source-map-support":"^0.5.21",typescript:"^5.4.2","why-is-node-still-running":"^1.0.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","utf-8-validate":"^5.0.10"}}});var Fu={};Fe(Fu,{addAnalyticsListener:()=>xu,recordAction:()=>un,recordActionBinary:()=>Un,setAnalyticsEnabled:()=>K5});function K5(e){yM=e}function un(e,t,r,n,s){if(!yM)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=lE.get(i);if(o)if(typeof e=="number"){let c=o.values,l=c.index++;if(l>=c.length){let _=c;o.values=c=new Float32Array(l*2),c.set(_),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},lE.set(i,o)}aE||W5()}function Un(e,t,r,n,s){un(!!e,t,r,n,s)}function xu(e){CM.push(e)}function W5(){aE=performance.now(),setTimeout(async()=>{let e=performance.now()-aE;aE=0;let t=[],r={time:Date.now(),period:e,threadId:pa.threadId,metrics:t};for(let[s,i]of lE){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,l=0,_=[],u;for(let d of DM){let f=Math.floor(c*d),E=o[f-1];if(f>l){let h=f-l;if(E===u){let m=_[_.length-1];typeof m=="number"?_[_.length-1]={value:m,count:1+h}:m.count+=h}else _.push(h>1?{value:E,count:h}:E),u=E;l=f}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:_,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await LM()}let n=process.memoryUsage();t.push({metric:"memory",threadId:pa.threadId,byThread:!0,...n});for(let s of CM)s(t);lE=new Map,pa.parentPort?pa.parentPort.postMessage({type:wM,report:r}):UM({report:r})},IM).unref()}async function Q5(e,t=6e4){let r=Kg(),n=PM(),s=new Promise(m=>{let S=performance.now();setImmediate(()=>{let g=performance.now();g-S>5e3&&(0,Hu.warn)("Unusually high event queue latency on the main thread of "+Math.round(g-S)+"ms"),S=performance.now()}),n.primaryStore.prefetch([1],()=>{let g=performance.now();g-S>5e3&&(0,Hu.warn)("Unusually high task queue latency on the main thread of "+Math.round(g-S)+"ms"),m(g-S)})}),i;for(let m of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(m.value?.time){i=m.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,l=new Map,_=[],u;for(let{key:m,value:S}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!S)continue;if(o){if(m>o+t)break}else o=m;u=m;let{metrics:g,threadId:R}=S;for(let A of g||[]){let{path:P,method:U,type:v,metric:k,count:H,total:j,distribution:z,threads:J,...Se}=A;H||(H=1);let ue=k+(P?"-"+P:"");U!==void 0&&(ue+="-"+U),v!==void 0&&(ue+="-"+v);let Ee=c.get(ue);if(Ee){if(Ee.threads){let Ge=Ee.threads[R];if(Ge)Ee=Ge;else{Ee.threads[R]=Object.assign({},Se);continue}}Ee.count||(Ee.count=1);let Me=Ee.count;for(let Ge in Se){let Ft=Se[Ge];typeof Ft=="number"&&(Ee[Ge]=(Ee[Ge]*Me+Ft*H)/(Me+H))}Ee.count+=H,j>=0&&(Ee.total+=j,Ee.ratio=Ee.total/Ee.count)}else Ee=Object.assign({period:t},A),delete Ee.distribution,c.set(ue,Ee),Ee.byThread&&(Ee.threads=[],Ee.threads[R]=Object.assign({},Se),_.push(Ee));if(z){z=z.map(Ge=>typeof Ge=="number"?{value:Ge,count:1}:Ge);let Me=l.get(ue);Me?Me.push(...z):l.set(ue,z)}}await LM()}for(let m of _){let{path:S,method:g,type:R,metric:A,count:P,total:U,distribution:v,threads:k,...H}=m;k=k.filter(j=>j);for(let j in H){if(typeof m[j]!="number")continue;let z=0;for(let J of k){let Se=J[j];typeof Se=="number"&&(z+=Se)}m[j]=z}m.count=k.length,delete m.threads,delete m.byThread}for(let[m,S]of l){let g=c.get(m);S.sort((Ge,Ft)=>Ge.value>Ft.value?1:-1);let R=g.count-1,A=[],P=0,U=0,v;for(let Ge of DM){let Ft=R*Ge;for(;P<Ft;)v=S[U++],P+=v.count,U===1&&P--;let Gd=S[U>1?U-2:0];v||(v=S[0]),A.push(v.value-(v.value-Gd.value)*(P-Ft)/v.count)}let[k,H,j,z,J,Se,ue,Ee,Me]=A;Object.assign(g,{p1:k,p10:H,p25:j,median:z,p75:J,p90:Se,p95:ue,p99:Ee,p999:Me})}let d;for(let[m,S]of c)S.id=(0,cE.getNextMonotonicTime)(),S.time=u,n.primaryStore.put(S.id,S,{append:!0}).then(g=>{g||n.primaryStore.put(S.id,S)}),d=!0;let f=Date.now(),{idle:E,active:h}=performance.eventLoopUtilization();if(d||h*10>E){let m=(0,cE.getNextMonotonicTime)(),S={id:m,metric:"main-thread-utilization",idle:E-SM,active:h-TM,taskQueueLatency:await s,time:f,...process.memoryUsage()};n.primaryStore.put(m,S,{append:!0}).then(g=>{g||n.primaryStore.put(m,S)})}SM=E,TM=h}async function gM(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function Kg(){return RM||(RM=Et({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function PM(){return AM||(AM=Et({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function J5(){MM=!0;let e=(0,qu.get)(Yg.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await Q5(IM,e),await gM(Kg(),j5),await gM(PM(),z5)},Math.min(e/2,2147483647)).unref()}function UM(e,t){let r=e.report;r.threadId=t?.threadId||pa.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(OM+=n.mean*n.count);r.totalBytesProcessed=OM,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(bM.get(t))}),bM.set(t,t.performance.eventLoopUtilization())),r.id=(0,cE.getNextMonotonicTime)(),Kg().primaryStore.put(r.id,r),MM||J5(),X5&&(vM=e8(r))}async function e8(e){if(await vM,!co){let r=(0,Gu.dirname)((0,Hu.getLogFilePath)());try{co=await(0,Vg.open)((0,Gu.join)(r,"analytics.log"),"r+")}catch{co=await(0,Vg.open)((0,Gu.join)(r,"analytics.log"),"w+")}}let t=(await co.stat()).size;if(t>Z5){let r=Buffer.alloc(t);await co.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await co.write(r,{position:0}),await co.truncate(r.length),t=r.length}await co.write(JSON.stringify(e)+`
|
|
9
9
|
`,t)}var pa,NM,Hu,Gu,Vg,cE,qu,Yg,lE,yM,aE,IM,wM,CM,DM,SM,TM,LM,j5,z5,RM,AM,MM,OM,bM,X5,vM,co,Z5,pi=Oe(()=>{pa=require("worker_threads"),NM=B(et());ge();Hu=B(x()),Gu=require("path"),Vg=require("fs/promises"),cE=B(Ar()),qu=B(X()),Yg=B(D());Or();(0,qu.initSync)();lE=new Map,yM=(0,qu.get)(Yg.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(K5,"setAnalyticsEnabled");a(un,"recordAction");ct.recordAnalytics=un;a(Un,"recordActionBinary");aE=0,IM=1e3,wM="analytics-report",CM=[];a(xu,"addAnalyticsListener");DM=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(W5,"sendAnalytics");a(Q5,"aggregation");SM=0,TM=0,LM=a(()=>new Promise(setImmediate),"rest");a(gM,"cleanup");j5=36e5,z5=31536e6;a(Kg,"getRawAnalyticsTable");a(PM,"getAnalyticsTable");(0,NM.setChildListenerByType)(wM,UM);a(J5,"startScheduledTasks");OM=0,bM=new Map,X5=!1;a(UM,"recordAnalytics");Z5=1e6;a(e8,"logAnalytics")});var Xg=T((tRe,YM)=>{"use strict";var{decode:t8}=require("msgpackr"),{isMainThread:Xge,parentPort:Zge,threadId:eRe}=require("worker_threads"),ku=pt(),Ic=Xe(),jg=D(),ur=x(),Qg=X(),r8=D(),{onMessageByType:n8}=et(),GM=ui(),{recordAction:s8,recordActionBinary:i8}=(pi(),ie(Fu)),{publishToStream:o8}=ku,{ConsumerEvents:BM}=require("nats"),a8=ir(),{promisify:c8}=require("util"),qM=c8(setTimeout),dE=1e4,fE,_E,l8,u8,xM,$u=new Map,wc=new Map;YM.exports={initialize:zg,ingestConsumer:Jg,setSubscription:_8,setIgnoreOrigin:E8,getDatabaseSubscriptions:f8,updateConsumer:FM};async function zg(){n8(jg.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await FM(n)}),xM=!0,ur.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await ku.getNATSReferences();fE=e,_E=e.info.server_name,l8=t,u8=r}a(zg,"initialize");async function FM(e){if(e.status==="start"){let{js:t,jsm:r}=await kM(e.node_domain_name);Jg(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=$u.get(e.stream_name+e.node_domain_name);t&&(ur.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),$u.set(e.stream_name+e.node_domain_name,"close")),wc.get(e.node_domain_name)==="failed"&&wc.set(e.node_domain_name,"close")}}a(FM,"updateConsumer");var EE=new Map;function _8(e,t,r){let n=EE.get(e);n||EE.set(e,n=new Map),n.set(t,r),xM||zg().then(d8)}a(_8,"setSubscription");async function d8(){let e=await a8.searchByValue({database:"system",table:"hdb_nodes",search_attribute:"name",search_value:"*"});for await(let t of e){let r=t.name+Ic.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions)if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await kM(r),!n))break;let{schema:o,table:c}=i,l=GM.createNatsTableStreamName(o,c);Jg(l,n,s,r)}}}a(d8,"accessConsumers");async function kM(e){let t,r,n=1;for(;!r;)try{t=await fE.jetstream({domain:e}),r=await fE.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(wc.get(e)==="close")break;wc.set(e,"failed"),n%10===1&&ur.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<dE?n++*100:dE;await qM(i)}return{js:t,jsm:r}}a(kM,"connectToRemoteJS");function f8(){return EE}a(f8,"getDatabaseSubscriptions");var $M;function E8(e){$M=e}a(E8,"setIgnoreOrigin");var VM=100,HM=new Array(VM),uE=0;async function Jg(e,t,r,n){let{connection:s}=await ku.getNATSReferences();fE=s,_E=s.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,_E),ur.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(_){if(wc.get(n)==="close")break;o%10===1&&ur.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",_.message),_.code==="404"&&(ur.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await ku.createConsumer(r,e,_E,new Date(Date.now()).toISOString()));let u=o++*100<dE?o++*100:dE;await qM(u)}let c=!1,l;for(;!c;){if($u.get(e+n)==="close"||wc.get(n)==="close"){$u.delete(e+n),c=!0;continue}l=await i.consume({max_messages:Qg.get(jg.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100}),$u.set(e+n,l);let _=!1;(async()=>{for await(let u of await l.status())if(u.type===BM.ConsumerDeleted&&(await l.close(),c=!0),u.type===BM.HeartbeatsMissed){let d=u.data;ur.trace(`${d} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),d===2&&(ur.warn(`Restarting clustering ingest consumer due to missed heartbeat threshold being met, node: ${n} stream: ${l.consumer.stream}`),l.stop(),_=!0)}})();try{for await(let u of l)await HM[uE],HM[uE]=h8(u).catch(d=>{ur.error(d)}),++uE>=VM&&(uE=0)}catch(u){u.message==="consumer deleted"?(ur.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):ur.error("Error consuming clustering ingest, restarting consumer",u)}ku.clearClientCache(),!c&&_&&await zg()}}a(Jg,"ingestConsumer");async function h8(e){let t=t8(e.data);s8(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),ur.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=Qg.get(jg.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Ic.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Ic.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(Ic.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!$M),i8(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(Ic.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:l,table:_,records:u,hash_values:d,__origin:f,expiresAt:E}=t;ur.trace("processing message:",o,c,_,(u?"records: "+u.map(P=>P?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),ur.trace(`messageProcessor nats msg id: ${e.headers.get(Ic.MSG_HEADERS.NATS_MSG_ID)}`);let h;u||(u=d);let m=new Promise(P=>h=P),{timestamp:S,user:g,node_name:R}=f||{},A=EE.get(c)?.get(_);if(!A)throw new Error("Missing table for replication message",_);if(o==="define_schema")t.type=o,t.onCommit=h,A.send(t);else if(u.length===1&&!l)A.send({type:Wg(o),value:u[0],id:d?.[0],expiresAt:E,timestamp:S,table:_,onCommit:h,user:g,nodeName:R});else{let P=u.map((U,v)=>({type:Wg(o),value:U,expiresAt:E,id:d?.[v],table:_}));for(;l;)P.push({type:Wg(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;A.send({type:"transaction",writes:P,table:_,timestamp:S,onCommit:h,user:g,nodeName:R})}Qg.get(r8.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&o8(e.subject.split(".").slice(0,-1).join("."),GM.createNatsTableStreamName(c,_),e.headers,e.data),await m}catch(o){ur.error(o)}e.ack()}a(h8,"messageProcessor");function Wg(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(Wg,"convertOperation")});var pt=T((cRe,cU)=>{"use strict";var Vt=X();Vt.initSync();var p8=require("fs-extra"),m8=require("semver"),Ku=require("path"),{monotonicFactory:S8}=require("ulidx"),WM=S8(),T8=require("util"),QM=require("child_process"),g8=T8.promisify(QM.exec),R8=QM.spawn,Zt=Xe(),we=D(),hE=K(),us=x(),pE=ui(),A8=oE(),Vu=ut(),{broadcast:O8,onMessageByType:b8,getWorkerIndex:N8}=et(),{isMainThread:jM}=require("worker_threads"),{Encoder:y8,decode:rR}=require("msgpackr"),zM=new y8,{isEmpty:ga}=hE,JM=wr(),nRe=48*36e11;jM&&b8(we.ITC_EVENT_TYPES.RESTART,()=>{Pr=void 0,Ta=void 0});var{connect:I8,StorageType:w8,RetentionPolicy:C8,AckPolicy:nR,DeliverPolicy:sR,DiscardPolicy:D8,NatsConnection:sRe,JetStreamManager:iRe,JetStreamClient:oRe,StringCodec:aRe,JSONCodec:L8,createInbox:iR,headers:P8,ErrorCode:KM}=require("nats"),{PACKAGE_ROOT:M8}=D(),U8=ha(),{recordAction:v8}=(pi(),ie(Fu)),XM=L8(),B8="clustering",H8=U8.engines[Zt.NATS_SERVER_NAME],G8=Ku.join(M8,"dependencies"),tR=Ku.join(G8,`${process.platform}-${process.arch}`,Zt.NATS_BINARY_NAME),Zg,eR,Yu,ma,Sa;cU.exports={runCommand:ZM,checkNATSServerInstalled:q8,createConnection:oR,getConnection:Wu,getJetStreamManager:Qu,getJetStream:tU,getNATSReferences:Bs,getServerList:F8,createLocalStream:aR,listStreams:rU,deleteLocalStream:k8,getServerConfig:Cc,listRemoteStreams:$8,viewStream:V8,viewStreamIterator:Y8,publishToStream:K8,request:j8,reloadNATS:cR,reloadNATSHub:z8,reloadNATSLeaf:J8,extractServerName:Q8,requestErrorHandler:X8,createLocalTableStream:oU,createTableStreams:t6,purgeTableStream:aU,purgeSchemaTableStreams:r6,getStreamInfo:n6,updateLocalStreams:i6,closeConnection:x8,getJsmServerName:mE,addNatsMsgHeader:nU,clearClientCache:eU,updateRemoteConsumer:Z8,createConsumer:sU,updateConsumerIterator:e6};async function ZM(e,t=void 0){let{stdout:r,stderr:n}=await g8(e,{cwd:t});if(n)throw new Error(n.replace(`
|
|
10
10
|
`,""));return r.replace(`
|
|
11
11
|
`,"")}a(ZM,"runCommand");async function q8(){try{await p8.access(tR)}catch{return!1}let e=await ZM(`${tR} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return m8.eq(t,H8)}a(q8,"checkNATSServerInstalled");async function oR(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await JM.getClusterUser();if(ga(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}us.trace("create nats connection called");let i=await I8({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:Vt.get(we.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Vt.get(we.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Vt.get(we.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),us.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&us.error("Error with Nats client connection, connection closed",o),eU()}),i}a(oR,"createConnection");function eU(){Pr=void 0,ma=void 0,Sa=void 0,Ta=void 0}a(eU,"clearClientCache");async function x8(){Pr&&(await Pr.drain(),Pr=void 0,ma=void 0,Sa=void 0,Ta=void 0)}a(x8,"closeConnection");var Pr,Ta;async function Wu(){return Ta||(Ta=oR(Vt.get(we.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),Pr=await Ta),Pr||Ta}a(Wu,"getConnection");async function Qu(){if(ma)return ma;ga(Pr)&&await Wu();let{domain:e}=Cc(we.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(ga(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return ma=await Pr.jetstreamManager({domain:e,timeout:6e4}),ma}a(Qu,"getJetStreamManager");async function tU(){if(Sa)return Sa;ga(Pr)&&await Wu();let{domain:e}=Cc(we.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(ga(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Sa=Pr.jetstream({domain:e,timeout:6e4}),Sa}a(tU,"getJetStream");async function Bs(){let e=Pr||await Wu(),t=ma||await Qu(),r=Sa||await tU();return{connection:e,jsm:t,js:r}}a(Bs,"getNATSReferences");async function F8(e){let t=Vt.get(we.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await JM.getClusterUser(),s=await oR(t,r,n),i=iR(),o=s.subscribe(i),c=[],l,_=(async()=>{for await(let u of o){let d=XM.decode(u.data);d.response_time=Date.now()-l,c.push(d)}})();return l=Date.now(),await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await s.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await s.flush(),await hE.async_set_timeout(e),await o.drain(),await s.close(),await _,c}a(F8,"getServerList");async function aR(e,t){let{jsm:r}=await Bs(),n=Vt.get(we.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Vt.get(we.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=Vt.get(we.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:w8.File,retention:C8.Limits,subjects:t,discard:D8.Old,max_msgs:s,max_bytes:i,max_age:n})}a(aR,"createLocalStream");async function rU(){let{jsm:e}=await Bs(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(rU,"listStreams");async function k8(e){let{jsm:t}=await Bs();await t.streams.delete(e)}a(k8,"deleteLocalStream");async function $8(e){let{connection:t}=await Bs(),r=[],n=iR(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(XM.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($8,"listRemoteStreams");async function V8(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Bs(),i=WM(),o={durable_name:i,ack_policy:nR.Explicit};t&&(o.deliver_policy=sR.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 _=[];for await(let u of l){let d=rR(u.data),f={nats_timestamp:u.info.timestampNanos,nats_sequence:u.info.streamSequence,entry:d};if(u.headers&&(f.origin=u.headers.get(Zt.MSG_HEADERS.ORIGIN)),_.push(f),u.ack(),u.info.pending===0)break}return await c.delete(),_}a(V8,"viewStream");async function*Y8(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Bs(),i=WM(),o={durable_name:i,ack_policy:nR.Explicit};t&&(o.deliver_policy=sR.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 _ of l){let u=rR(_.data);u[0]||(u=[u]);for(let d of u){let f={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};_.headers&&(f.origin=_.headers.get(Zt.MSG_HEADERS.ORIGIN)),yield f}if(_.ack(),_.info.pending===0)break}await c.delete()}a(Y8,"viewStreamIterator");async function K8(e,t,r,n){us.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=nU(n,r);let{js:s}=await Bs(),i=await mE(),o=`${e}.${i}`,c=n instanceof Uint8Array?n:zM.encode(n);try{us.trace(`publishToStream publishing to subject: ${o}`),v8(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 iU(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){us.trace(`publishToStream creating stream: ${t}`);let u=o.split(".");u[2]="*",await aR(t,[o]),await s.publish(o,c,{headers:r})}else throw l}});throw l}}a(K8,"publishToStream");function nU(e,t){t===void 0&&(t=P8());let r=Vt.get(we.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Zt.MSG_HEADERS.ORIGIN)&&r&&t.append(Zt.MSG_HEADERS.ORIGIN,r),t}a(nU,"addNatsMsgHeader");function Cc(e){e=e.toLowerCase();let t=Ku.join(Vt.get(we.CONFIG_PARAMS.ROOTPATH),B8);if(e===we.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return ga(eR)&&(eR={port:Vu.getConfigFromFile(we.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Vu.getConfigFromFile(we.CONFIG_PARAMS.CLUSTERING_NODENAME)+Zt.SERVER_SUFFIX.HUB,config_file:Zt.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Ku.join(t,Zt.PID_FILES.HUB),hdb_nats_path:t}),eR;if(e===we.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return ga(Zg)&&(Zg={port:Vu.getConfigFromFile(we.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Vu.getConfigFromFile(we.CONFIG_PARAMS.CLUSTERING_NODENAME)+Zt.SERVER_SUFFIX.LEAF,config_file:Zt.NATS_CONFIG_FILES.LEAF_SERVER,domain:Vu.getConfigFromFile(we.CONFIG_PARAMS.CLUSTERING_NODENAME)+Zt.SERVER_SUFFIX.LEAF,pid_file_path:Ku.join(t,Zt.PID_FILES.LEAF),hdb_nats_path:t}),Zg;us.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Cc,"getServerConfig");async function sU(e,t,r,n){try{await e.consumers.add(t,{ack_policy:nR.Explicit,durable_name:r,deliver_policy:sR.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(sU,"createConsumer");async function W8(e,t,r){await e.consumers.delete(t,r)}a(W8,"removeConsumer");function Q8(e){return e.split(".")[1]}a(Q8,"extractServerName");async function j8(e,t,r=6e4,n=iR()){if(!hE.isObject(t))throw new Error("data param must be an object");let s=zM.encode(t),{connection:i}=await Bs(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return rR(c.data)}a(j8,"request");function cR(e){return new Promise(async(t,r)=>{let n=R8(tR,["--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(cR,"reloadNATS");async function z8(){let{pid_file_path:e}=Cc(we.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await cR(e)}a(z8,"reloadNATSHub");async function J8(){let{pid_file_path:e}=Cc(we.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await cR(e)}a(J8,"reloadNATSLeaf");function X8(e,t,r){let n;switch(e.code){case KM.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case KM.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(X8,"requestErrorHandler");async function Z8(e,t){let r=t+Zt.SERVER_SUFFIX.LEAF,{connection:n}=await Bs(),{jsm:s}=await a6(r),{schema:i,table:o}=e,c=pE.createNatsTableStreamName(i,o),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await iU(async()=>{if(e.subscribe===!0)await sU(s,c,n.info.server_name,l);else try{await W8(s,c,n.info.server_name)}catch(_){us.trace(_)}})}a(Z8,"updateRemoteConsumer");async function e6(e,t,r,n){let s=pE.createNatsTableStreamName(e,t),i=r+Zt.SERVER_SUFFIX.LEAF,o={type:we.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!jM&&N8()<Vt.get(we.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=Xg();await c(o)}await O8(o),n==="stop"&&await hE.async_set_timeout(1e3)}a(e6,"updateConsumerIterator");function iU(e){return A8.writeTransaction(we.SYSTEM_SCHEMA_NAME,we.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(iU,"exclusiveLock");async function oU(e,t){let r=pE.createNatsTableStreamName(e,t),n=await mE(),s=s6(e,t,n);await aR(r,[s])}a(oU,"createLocalTableStream");async function t6(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await oU(n,s)}}a(t6,"createTableStreams");async function aU(e,t,r=void 0){if(Vt.get(we.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=pE.createNatsTableStreamName(e,t),{domain:s}=Cc(we.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await Wu()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")us.warn(n);else throw n}}a(aU,"purgeTableStream");async function r6(e,t){if(Vt.get(we.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await aU(e,t[r])}a(r6,"purgeSchemaTableStreams");async function n6(e){return(await Qu()).streams.info(e)}a(n6,"getStreamInfo");function s6(e,t,r){return`${Zt.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(s6,"createSubjectName");async function mE(){if(Yu)return Yu;if(Yu=(await Qu())?.nc?.info?.server_name,Yu===void 0)throw new Error("Unable to get jetstream manager server name");return Yu}a(mE,"getJsmServerName");async function i6(){let e=await Qu(),t=await mE(),r=await rU();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=o6(n),c=i.split(".");if(c[c.length-1]===t&&!o||s.name==="__HARPERDB_WORK_QUEUE__")continue;let _=i.split(".");_[_.length-1]=t;let u=_.join(".");us.trace(`Updating stream subject name from: ${i} to: ${u}`),s.subjects[0]=u,await e.streams.update(s.name,s)}}a(i6,"updateLocalStreams");function o6(e){let{config:t}=e,r=!1,n=Vt.get(we.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Vt.get(we.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=Vt.get(we.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(o6,"updateStreamLimits");async function a6(e){let t,r;try{t=await Pr.jetstream({domain:e}),r=await Pr.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw us.error("Unable to connect to:",e),n}return{js:t,jsm:r}}a(a6,"connectToRemoteJS")});var RE=T((_Re,dU)=>{"use strict";var Dc=hf(),Lc=mM(),c6=x(),l6=require("uuid").v4,uRe=require("clone"),TE=di(),Pc=D(),u6=require("util"),lo=Mn(),{handleHDBError:Mr,hdb_errors:_6}=oe(),{HDB_ERROR_MSGS:SE,HTTP_STATUS_CODES:Ur}=_6,{SchemaEventMsg:gE}=is(),lU=pt(),{getDatabases:d6}=(ge(),ie(ke)),{transformReq:Mc}=K();dU.exports={createSchema:f6,createSchemaStructure:uU,createTable:E6,createTableStructure:_U,createAttribute:T6,dropSchema:h6,dropTable:p6,dropAttribute:m6,getBackup:g6};async function f6(e){let t=await uU(e);return TE.signalSchemaChange(new gE(process.pid,e.operation,e.schema)),t}a(f6,"createSchema");async function uU(e){let t=Dc.schema_object(e);if(t)throw Mr(t,t.message,Ur.BAD_REQUEST,void 0,void 0,!0);if(Mc(e),!await Lc.checkSchemaExists(e.schema))throw Mr(new Error,SE.SCHEMA_EXISTS_ERR(e.schema),Ur.BAD_REQUEST,Pc.LOG_LEVELS.ERROR,SE.SCHEMA_EXISTS_ERR(e.schema),!0);return await lo.createSchema(e),`database '${e.schema}' successfully created`}a(uU,"createSchemaStructure");async function E6(e){return Mc(e),e.hash_attribute=e.primary_key??e.hash_attribute,await _U(e)}a(E6,"createTable");async function _U(e){let t=Dc.create_table_object(e);if(t)throw Mr(t,t.message,Ur.BAD_REQUEST,void 0,void 0,!0);if(Dc.validateTableResidence(e.residence),!await Lc.checkSchemaTableExists(e.schema,e.table))throw Mr(new Error,SE.TABLE_EXISTS_ERR(e.schema,e.table),Ur.BAD_REQUEST,Pc.LOG_LEVELS.ERROR,SE.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:l6(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await lo.createTable(n,e);else throw Mr(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Ur.BAD_REQUEST);else await lo.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(_U,"createTableStructure");async function h6(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=Dc.schema_object(e),n=t??r;if(n)throw Mr(n,n.message,Ur.BAD_REQUEST,void 0,void 0,!0);Mc(e);let s=await Lc.checkSchemaExists(e.schema);if(s)throw Mr(new Error,s,Ur.NOT_FOUND,Pc.LOG_LEVELS.ERROR,s,!0);let i=await Lc.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await lo.dropSchema(e),TE.signalSchemaChange(new gE(process.pid,e.operation,e.schema)),await lU.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(h6,"dropSchema");async function p6(e){let t=Dc.table_object(e);if(t)throw Mr(t,t.message,Ur.BAD_REQUEST,void 0,void 0,!0);Mc(e);let r=await Lc.checkSchemaTableExists(e.schema,e.table);if(r)throw Mr(new Error,r,Ur.NOT_FOUND,Pc.LOG_LEVELS.ERROR,r,!0);return await lo.dropTable(e),await lU.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(p6,"dropTable");async function m6(e){let t=Dc.attribute_object(e);if(t)throw Mr(t,t.message,Ur.BAD_REQUEST,void 0,void 0,!0);Mc(e);let r=await Lc.checkSchemaTableExists(e.schema,e.table);if(r)throw Mr(new Error,r,Ur.NOT_FOUND,Pc.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw Mr(new Error,"You cannot drop a hash attribute",Ur.BAD_REQUEST,void 0,void 0,!0);if(Pc.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw Mr(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Ur.BAD_REQUEST,void 0,void 0,!0);try{return await lo.dropAttribute(e),S6(e),TE.signalSchemaChange(new gE(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw c6.error(`Got an error deleting attribute ${u6.inspect(e)}.`),n}}a(m6,"dropAttribute");function S6(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(S6,"dropAttributeFromGlobal");async function T6(e){Mc(e);let t=d6()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw Mr(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Ur.BAD_REQUEST,void 0,void 0,!0);return await lo.createAttribute(e),TE.signalSchemaChange(new gE(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(T6,"createAttribute");function g6(e){return lo.getBackup(e)}a(g6,"getBackup")});var EU=T((fRe,fU)=>{"use strict";var{OPERATIONS_ENUM:R6}=D(),lR=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=R6.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};fU.exports=lR});var uR=T((pRe,TU)=>{"use strict";var A6=Mn(),hRe=EU(),AE=K(),OE=D(),O6=X(),{handleHDBError:hU,hdb_errors:b6}=oe(),{HDB_ERROR_MSGS:pU,HTTP_STATUS_CODES:mU}=b6,N6=Object.values(OE.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),SU="To use this operation audit log must be enabled in harperdb-config.yaml";TU.exports=y6;async function y6(e){if(AE.isEmpty(e.schema))throw new Error(pU.SCHEMA_REQUIRED_ERR);if(AE.isEmpty(e.table))throw new Error(pU.TABLE_REQUIRED_ERR);if(!O6.get(OE.CONFIG_PARAMS.LOGGING_AUDITLOG))throw hU(new Error,SU,mU.BAD_REQUEST,OE.LOG_LEVELS.ERROR,SU,!0);let t=AE.checkSchemaTableExist(e.schema,e.table);if(t)throw hU(new Error,t,mU.NOT_FOUND,OE.LOG_LEVELS.ERROR,t,!0);if(!AE.isEmpty(e.search_type)&&N6.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await A6.readAuditLog(e)}a(y6,"readAuditLog")});var RU=T((SRe,gU)=>{"use strict";var{OPERATIONS_ENUM:I6}=D(),_R=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=I6.GET_BACKUP,this.schema=t,this.table=r}};gU.exports=_R});var bU=T((ARe,OU)=>{"use strict";var w6=Mn(),gRe=RU(),dR=K(),C6=D(),RRe=X(),{handleHDBError:D6,hdb_errors:L6}=oe(),{HDB_ERROR_MSGS:AU,HTTP_STATUS_CODES:P6}=L6;OU.exports=M6;async function M6(e){if(dR.isEmpty(e.schema))throw new Error(AU.SCHEMA_REQUIRED_ERR);if(dR.isEmpty(e.table))throw new Error(AU.TABLE_REQUIRED_ERR);let t=dR.checkSchemaTableExist(e.schema,e.table);if(t)throw D6(new Error,t,P6.NOT_FOUND,C6.LOG_LEVELS.ERROR,t,!0);return await w6.getBackup(read_audit_log_object)}a(M6,"getBackup")});var DU=T((bRe,CU)=>{var uo=require("validate.js"),yU=tt(),Uc=D(),{handleHDBError:U6,hdb_errors:v6}=oe(),{HDB_ERROR_MSGS:mt,HTTP_STATUS_CODES:B6}=v6,fR=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),H6={STRUCTURE_USER:"structure_user"},NU=Object.values(Uc.ROLE_TYPES_ENUM),G6="attribute_permissions",q6="attribute_name",{PERMS_CRUD_ENUM:vc}=Uc,x6=[G6,...Object.values(vc)],IU=[vc.READ,vc.INSERT,vc.UPDATE],F6=[q6,...IU];function k6(e){let t=fR();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,wU(e,t)}a(k6,"addRoleValidation");function $6(e){let t=fR();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,wU(e,t)}a($6,"alterRoleValidation");function V6(e){let t=fR();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,yU.validateObject(e,t)}a(V6,"dropRoleValidation");var Y6=["operation","role","id","permission","hdb_user","hdb_auth_header"];function wU(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)Y6.includes(n[o])||s.push(n[o]);s.length>0&&bt(mt.INVALID_ROLE_JSON_KEYS(s),r);let i=yU.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{bt(o,r)}),e.permission){let o=K6(e);o&&bt(o,r),NU.forEach(c=>{e.permission[c]&&!uo.isBoolean(e.permission[c])&&bt(mt.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(NU.indexOf(o)<0){if(o===H6.STRUCTURE_USER){let l=e.permission[o];if(typeof l=="boolean")continue;if(Array.isArray(l)){for(let _=0,u=l.length;_<u;_++){let d=l[_];global.hdb_schema[d]||bt(mt.SCHEMA_NOT_FOUND(d),r)}continue}bt(mt.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){bt(mt.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let l in c.tables){let _=c.tables[l];if(!l||!global.hdb_schema[o][l]){bt(mt.TABLE_NOT_FOUND(o,l),r);continue}if(Object.keys(_).forEach(u=>{x6.includes(u)||bt(mt.INVALID_PERM_KEY(u),r,o,l)}),Object.values(vc).forEach(u=>{uo.isDefined(_[u])?uo.isBoolean(_[u])||bt(mt.TABLE_PERM_NOT_BOOLEAN(u),r,o,l):bt(mt.TABLE_PERM_MISSING(u),r,o,l)}),uo.isDefined(_.attribute_permissions)){if(!uo.isArray(_.attribute_permissions)){bt(mt.ATTR_PERMS_NOT_ARRAY,r,o,l);continue}}else{bt(mt.ATTR_PERMS_ARRAY_MISSING,r,o,l);continue}if(_.attribute_permissions){let u=global.hdb_schema[o][l].attributes.map(({attribute:f})=>f),d={read:!1,insert:!1,update:!1};for(let f in _.attribute_permissions){let E=_.attribute_permissions[f];if(Object.keys(E).forEach(m=>{!F6.includes(m)&&m!==vc.DELETE&&bt(mt.INVALID_ATTR_PERM_KEY(m),r,o,l)}),!uo.isDefined(E.attribute_name)){bt(mt.ATTR_PERM_MISSING_NAME,r,o,l);continue}let h=E.attribute_name;if(!u.includes(h)){bt(mt.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,l);continue}IU.forEach(m=>{uo.isDefined(E[m])?uo.isBoolean(E[m])||bt(mt.ATTR_PERM_NOT_BOOLEAN(m,h),r,o,l):bt(mt.ATTR_PERM_MISSING(m,h),r,o,l)}),!d.read&&E.read===!0&&(d.read=!0),!d.insert&&E.insert===!0&&(d.insert=!0),!d.update&&E.update===!0&&(d.update=!0)}if(_.read===!1&&d.read===!0||_.insert===!1&&d.insert===!0||_.update===!1&&d.update===!0){let f=`${o}.${l}`;bt(mt.MISMATCHED_TABLE_ATTR_PERMS(f),r,o,l)}}}}return W6(r)}a(wU,"customValidate");CU.exports={addRoleValidation:k6,alterRoleValidation:$6,dropRoleValidation:V6};function K6(e){let{operation:t,permission:r}=e;if(t===Uc.OPERATIONS_ENUM.ADD_ROLE||t===Uc.OPERATIONS_ENUM.ALTER_ROLE){let n=r.super_user===!0,s=r.cluster_user===!0;if(Object.keys(r).length>1&&(n||s)){if(s&&n)return mt.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Uc.ROLE_TYPES_ENUM.SUPER_USER:Uc.ROLE_TYPES_ENUM.CLUSTER_USER;return mt.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(K6,"validateNoSUPerms");function W6(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:mt.ROLE_PERMS_ERROR,...e};return U6(new Error,n,B6.BAD_REQUEST)}else return null}a(W6,"generateRolePermResponse");function bt(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(bt,"addPermError")});var NE=T((yRe,UU)=>{"use strict";var LU=yr(),PU=ir(),Q6=na(),hR=DU(),pR=di(),j6=require("uuid").v4,z6=require("util"),bE=D(),J6=K(),mR=PU.searchByValue,X6=PU.searchByHash,Z6=z6.promisify(Q6.delete),e9=os(),t9=bc(),{hdb_errors:r9,handleHDBError:Ra}=oe(),{HDB_ERROR_MSGS:MU,HTTP_STATUS_CODES:ju}=r9,{UserEventMsg:SR}=is();UU.exports={addRole:n9,alterRole:s9,dropRole:i9,listRoles:o9};function ER(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(ER,"scrubRoleDetails");async function n9(e){let t=hR.addRoleValidation(e);if(t)throw t;e=ER(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 mR(r)||[])}catch(i){throw Ra(i)}if(n&&n.length>0)throw Ra(new Error,MU.ROLE_ALREADY_EXISTS(e.role),ju.CONFLICT,void 0,void 0,!0);e.id||(e.id=j6());let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await LU.insert(s),pR.signalUserChange(new SR(process.pid)),e=ER(e),e}a(n9,"addRole");async function s9(e){let t=hR.alterRoleValidation(e);if(t)throw t;e=ER(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await LU.update(r)}catch(s){throw Ra(s)}if(n&&n?.message==="updated 0 of 1 records")throw Ra(new Error,"Invalid role id",ju.BAD_REQUEST,void 0,void 0,!0);return await pR.signalUserChange(new SR(process.pid)),e}a(s9,"alterRole");async function i9(e){let t=hR.dropRoleValidation(e);if(t)throw Ra(new Error,t,ju.BAD_REQUEST,void 0,void 0,!0);let r=new t9(bE.SYSTEM_SCHEMA_NAME,bE.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await X6(r));if(n.length===0)throw Ra(new Error,MU.ROLE_NOT_FOUND,ju.NOT_FOUND,void 0,void 0,!0);let s=new e9(bE.SYSTEM_SCHEMA_NAME,bE.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await mR(s)),o=!1;if(J6.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){o=!0;break}}if(o===!0)throw Ra(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,ju.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await Z6(c),pR.signalUserChange(new SR(process.pid)),`${n[0].role} successfully deleted`}a(i9,"dropRole");async function o9(){return mR({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(o9,"listRoles")});var GU=T((wRe,HU)=>{"use strict";var a9=X(),_o=require("joi"),c9=tt(),vU=require("moment"),l9=require("fs-extra"),TR=require("path"),u9=require("lodash"),zu=D(),{LOG_LEVELS:Aa}=D(),_9="YYYY-MM-DD hh:mm:ss",d9=TR.resolve(__dirname,"../logs");HU.exports=function(e){return c9.validateBySchema(e,f9)};var f9=_o.object({from:_o.custom(BU),until:_o.custom(BU),level:_o.valid(Aa.NOTIFY,Aa.FATAL,Aa.ERROR,Aa.WARN,Aa.INFO,Aa.DEBUG,Aa.TRACE),order:_o.valid("asc","desc"),limit:_o.number().min(1),start:_o.number().min(0),log_name:_o.custom(E9)});function BU(e,t){if(vU(e,vU.ISO_8601).format(_9)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(BU,"validateDatetime");function E9(e,t){if(u9.invert(zu.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=a9.get(zu.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?zu.LOG_NAMES.HDB:e,i=s===zu.LOG_NAMES.INSTALL?TR.join(d9,zu.LOG_NAMES.INSTALL):TR.join(n,s);return l9.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(E9,"validateReadLogPath")});var RR=T((DRe,xU)=>{"use strict";var yE=D(),h9=x(),p9=X(),m9=GU(),gR=require("path"),qU=require("fs-extra"),{once:S9}=require("events"),{handleHDBError:T9,hdb_errors:g9}=oe(),{PACKAGE_ROOT:R9}=D(),A9=gR.join(R9,"logs"),O9=1e3,b9=200;xU.exports=N9;async function N9(e){let t=m9(e);if(t)throw T9(t,t.message,g9.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=p9.get(yE.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e.log_name===void 0?yE.LOG_NAMES.HDB:e.log_name,s=n===yE.LOG_NAMES.INSTALL?gR.join(A9,yE.LOG_NAMES.INSTALL):gR.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,_=e.until!==void 0,u=_?new Date(e.until):void 0,d=e.limit===void 0?O9:e.limit,f=e.order===void 0?void 0:e.order,E=e.start===void 0?0:e.start,h=E+d,m=0;f==="desc"&&!l&&!u&&(m=Math.max(qU.statSync(s).size-(h+5)*b9,0));let S=qU.createReadStream(s,{start:m});S.on("error",v=>{h9.error(v)});let g=0,R=[],A="",P;S.on("data",v=>{let k=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;v=A+v;let H=0,j;for(;(j=k.exec(v))&&!S.destroyed;){P&&(P.message=v.slice(H,j.index),U(P));let[z,J,Se]=j,ue=Se.split("] ["),Ee=ue[0],Me=ue[1];ue.splice(0,2),P={timestamp:J,thread:Ee,level:Me,tags:ue,message:""},H=j.index+z.length}A=v.slice(H)}),S.on("end",v=>{S.destroyed||P&&(P.message=A.trim(),U(P))}),S.resume();function U(v){let k,H,j;switch(!0){case(i&&c&&_):k=new Date(v.timestamp),H=new Date(l),j=new Date(u),v.level===o&&k>=H&&k<=j&&g<E?g++:v.level===o&&k>=H&&k<=j&&(fo(v,f,R),g++,g===h&&S.destroy());break;case(i&&c):k=new Date(v.timestamp),H=new Date(l),v.level===o&&k>=H&&g<E?g++:v.level===o&&k>=H&&(fo(v,f,R),g++,g===h&&S.destroy());break;case(i&&_):k=new Date(v.timestamp),j=new Date(u),v.level===o&&k<=j&&g<E?g++:v.level===o&&k<=j&&(fo(v,f,R),g++,g===h&&S.destroy());break;case(c&&_):k=new Date(v.timestamp),H=new Date(l),j=new Date(u),k>=H&&k<=j&&g<E?g++:k>=H&&k<=j&&(fo(v,f,R),g++,g===h&&S.destroy());break;case i:v.level===o&&g<E?g++:v.level===o&&(fo(v,f,R),g++,g===h&&S.destroy());break;case c:k=new Date(v.timestamp),H=new Date(l),k>=H&&g<E?g++:k>=H&&g>=E&&(fo(v,f,R),g++,g===h&&S.destroy());break;case _:k=new Date(v.timestamp),j=new Date(u),k<=j&&g<E?g++:k<=j&&g>=E&&(fo(v,f,R),g++,g===h&&S.destroy());break;default:g<E?g++:(fo(v,f,R),g++,g===h&&S.destroy())}}return a(U,"onLogMessage"),await S9(S,"close"),R}a(N9,"readLog");function fo(e,t,r){t==="desc"?y9(e,r):t==="asc"?I9(e,r):r.push(e)}a(fo,"pushLineToResult");function y9(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(y9,"insertDescending");function I9(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(I9,"insertAscending")});var IE=T((vRe,VU)=>{"use strict";var AR=require("joi"),{string:Ju,boolean:FU,date:w9}=AR.types(),C9=tt(),{validateSchemaExists:PRe,validateTableExists:MRe,validateSchemaName:URe}=ws(),D9=D(),L9=Xe(),kU=X();kU.initSync();var P9=Ju.invalid(kU.get(D9.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(L9.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null).required(),$U={operation:Ju.valid("add_node","update_node","set_node_replication"),node_name:P9,subscriptions:AR.array().items({table:Ju.optional(),schema:Ju.optional(),database:Ju.optional(),subscribe:FU.required(),publish:FU.required().custom(U9),start_time:w9.iso()}).min(1).required()};function M9(e){return C9.validateBySchema(e,AR.object($U))}a(M9,"addUpdateNodeValidator");function U9(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(U9,"checkForFalsy");VU.exports={addUpdateNodeValidator:M9,validation_schema:$U}});var KU=T((HRe,YU)=>{var v9=tt(),B9={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};YU.exports=function(e){return v9.validateObject(e,B9)}});var wE=T((GRe,WU)=>{"use strict";var H9=D().OPERATIONS_ENUM,OR=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=H9.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};WU.exports=OR});var jU=T((xRe,QU)=>{"use strict";var G9={OPERATION:"operation",REFRESH:"refresh"},bR=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},NR=class{static{a(this,"JWTRSAKeys")}constructor(t,r,n){this.public_key=t,this.private_key=r,this.passphrase=n}};QU.exports={JWTTokens:bR,TOKEN_TYPE_ENUM:G9,JWTRSAKeys:NR}});var e_=T((kRe,ZU)=>{"use strict";var Zu=require("jsonwebtoken"),yR=require("fs-extra"),IR=K(),vn=D(),{handleHDBError:vr,hdb_errors:q9}=oe(),{HTTP_STATUS_CODES:Br,AUTHENTICATION_ERROR_MSGS:Hr}=q9,Xu=x(),zU=Lf(),DR=wr(),x9=yr().update,F9=wE(),k9=di(),{UserEventMsg:$9}=is(),Eo=X();Eo.initSync();var wR=require("path"),{JWTTokens:V9,JWTRSAKeys:Y9,TOKEN_TYPE_ENUM:CE}=jU(),K9=Eo.get(vn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Eo.get(vn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",W9=Eo.get(vn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Eo.get(vn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",DE="RS256",CR;ZU.exports={createTokens:Q9,validateOperationToken:z9,refreshOperationToken:j9,validateRefreshToken:XU};async function Q9(e){if(IR.isEmpty(e)||typeof e!="object")throw vr(new Error,Hr.INVALID_AUTH_OBJECT,Br.BAD_REQUEST,void 0,void 0,!0);if(IR.isEmpty(e.username))throw vr(new Error,Hr.USERNAME_REQUIRED,Br.BAD_REQUEST,void 0,void 0,!0);if(IR.isEmpty(e.password))throw vr(new Error,Hr.PASSWORD_REQUIRED,Br.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await DR.findAndValidateUser(e.username,e.password),!t)throw vr(new Error,Hr.INVALID_CREDENTIALS,Br.UNAUTHORIZED,void 0,void 0,!0)}catch(f){throw Xu.error(f),vr(new Error,Hr.INVALID_CREDENTIALS,Br.UNAUTHORIZED,void 0,void 0,!0)}let r=await LE(),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 JU(i,r.private_key,r.passphrase),c=await Zu.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:W9,algorithm:DE,subject:CE.REFRESH}),l=zU.hash(c),_=new F9(vn.SYSTEM_SCHEMA_NAME,vn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:l}]),u,d;try{u=await x9(_)}catch(f){Xu.error(f),d=f}if(d!==void 0||u.skipped_hashes.length>0)throw vr(new Error,Hr.REFRESH_TOKEN_SAVE_FAILED,Br.INTERNAL_SERVER_ERROR);return k9.signalUserChange(new $9(process.pid)),new V9(o,c)}a(Q9,"createTokens");async function JU(e,t,r){return await Zu.sign(e,{key:t,passphrase:r},{expiresIn:K9,algorithm:DE,subject:CE.OPERATION})}a(JU,"signOperationToken");async function LE(){if(CR===void 0)try{let e=wR.join(Eo.getHdbBasePath(),vn.LICENSE_KEY_DIR_NAME,vn.JWT_ENUM.JWT_PASSPHRASE_NAME),t=wR.join(Eo.getHdbBasePath(),vn.LICENSE_KEY_DIR_NAME,vn.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=wR.join(Eo.getHdbBasePath(),vn.LICENSE_KEY_DIR_NAME,vn.JWT_ENUM.JWT_PUBLIC_KEY_NAME),n=(await yR.readFile(e)).toString(),s=(await yR.readFile(t)).toString(),i=(await yR.readFile(r)).toString();CR=new Y9(i,s,n)}catch(e){throw Xu.error(e),vr(new Error,Hr.NO_ENCRYPTION_KEYS,Br.INTERNAL_SERVER_ERROR)}return CR}a(LE,"getJWTRSAKeys");async function j9(e){if(!e)throw vr(new Error,Hr.INVALID_BODY,Br.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw vr(new Error,Hr.REFRESH_TOKEN_REQUIRED,Br.BAD_REQUEST,void 0,void 0,!0);await XU(e.refresh_token);let t=await LE(),r=await Zu.decode(e.refresh_token);return{operation_token:await JU({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(j9,"refreshOperationToken");async function z9(e){try{let t=await LE(),r=await Zu.verify(e,t.public_key,{algorithms:DE,subject:CE.OPERATION});return await DR.findAndValidateUser(r.username,void 0,!1)}catch(t){throw Xu.warn(t),t.name&&t.name==="TokenExpiredError"?vr(new Error,Hr.TOKEN_EXPIRED,Br.FORBIDDEN):vr(new Error,Hr.INVALID_TOKEN,Br.UNAUTHORIZED)}}a(z9,"validateOperationToken");async function XU(e){let t;try{let r=await LE(),n=await Zu.verify(e,r.public_key,{algorithms:DE,subject:CE.REFRESH});t=await DR.findAndValidateUser(n.username,void 0,!1)}catch(r){throw Xu.warn(r),r.name&&r.name==="TokenExpiredError"?vr(new Error,Hr.TOKEN_EXPIRED,Br.FORBIDDEN):vr(new Error,Hr.INVALID_TOKEN,Br.UNAUTHORIZED)}if(!zU.validate(t.refresh_token,e))throw vr(new Error,Hr.INVALID_TOKEN,Br.UNAUTHORIZED);return t}a(XU,"validateRefreshToken")});var LR=T((YRe,rv)=>{"use strict";var J9=KU(),Bc=require("passport"),X9=require("passport-local").Strategy,Z9=require("passport-http").BasicStrategy,e7=require("util"),t7=wr(),tv=e7.callbackify(t7.findAndValidateUser),VRe=Zr(),r7=D(),ev=e_();Bc.use(new X9(function(e,t,r){tv(e,t,r)}));Bc.use(new Z9(function(e,t,r){tv(e,t,r)}));Bc.serializeUser(function(e,t){t(null,e)});Bc.deserializeUser(function(e,t){t(null,e)});function n7(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":Bc.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===r7.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?ev.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):ev.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Bc.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(n7,"authorize");function s7(e,t){let r=J9(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(s7,"checkPermissions");rv.exports={authorize:n7,checkPermissions:s7}});var Hc=T((WRe,nv)=>{"use strict";var PR=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},MR=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};nv.exports={Node:PR,NodeSubscription:MR}});var iv=T((jRe,sv)=>{"use strict";var i7=D().OPERATIONS_ENUM,UR=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=i7.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};sv.exports=UR});var t_=T((JRe,ov)=>{"use strict";var vR=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},BR=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)}};ov.exports={RemotePayloadObject:vR,RemotePayloadSubscription:BR}});var cv=T((ZRe,av)=>{"use strict";var HR=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}};av.exports=HR});var _v=T((sAe,uv)=>{"use strict";var o7=cv(),tAe=at(),lv=Ve(),a7=x(),{getSchemaPath:rAe,getTransactionAuditStorePath:nAe}=je(),{getDatabases:c7}=(ge(),ie(ke));uv.exports=l7;async function l7(e){let t=new o7;try{let r=c7()[e.schema]?.[e.name],n=r.primaryStore.getStats(),s=r.auditStore?.getStats(),i=await lv.environmentDataSize(schema_path,e.name),o=await lv.environmentDataSize(txn_path,e.name);t.schema=e.schema,t.table=e.name,t.table_size=i,t.record_count=n.entryCount,t.transaction_log_size=o,t.transaction_log_record_count=s.entryCount}catch(r){a7.warn(`unable to stat table dbi due to ${r}`)}return t}a(l7,"lmdbGetTableSize")});var fv=T((oAe,dv)=>{"use strict";var GR=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}};dv.exports=GR});var mi=T((_Ae,Sv)=>{"use strict";var u7=require("fs-extra"),_7=require("path"),_r=require("systeminformation"),ho=x(),Ev=pt(),cAe=Xe(),ME=D(),d7=_v(),f7=_i(),{getThreadInfo:hv}=et(),QR=X();QR.initSync();var E7=fv(),{openEnvironment:lAe}=Ve(),{getSchemaPath:uAe}=je(),{database:h7,databases:pv}=(ge(),ie(ke)),PE;Sv.exports={getHDBProcessInfo:kR,getNetworkInfo:VR,getDiskInfo:$R,getMemoryInfo:FR,getCPUInfo:xR,getTimeInfo:qR,getSystemInformation:YR,systemInformation:p7,getTableSize:KR,getMetrics:WR};function qR(){return _r.time()}a(qR,"getTimeInfo");async function xR(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:l,cache:_,...u}=await _r.cpu();u.cpu_speed=await _r.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:f,raw_currentload_irq:E,raw_currentload_nice:h,raw_currentload_system:m,raw_currentload_user:S,cpus:g,...R}=await _r.currentLoad();return R.cpus=[],g.forEach(A=>{let{raw_load:P,raw_load_idle:U,raw_load_irq:v,raw_load_nice:k,raw_load_system:H,raw_load_user:j,...z}=A;R.cpus.push(z)}),u.current_load=R,u}catch(e){return ho.error(`error in getCPUInfo: ${e}`),{}}}a(xR,"getCPUInfo");async function FR(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await _r.mem();return Object.assign(s,process.memoryUsage())}catch(e){return ho.error(`error in getMemoryInfo: ${e}`),{}}}a(FR,"getMemoryInfo");async function kR(){let e={core:[],clustering:[]};try{let t=await _r.processes(),r;try{r=Number.parseInt(await u7.readFile(_7.join(QR.get(ME.CONFIG_PARAMS.ROOTPATH),ME.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===ME.NODE_ERROR_CODES.ENOENT)ho.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 ho.error(`error in getHDBProcessInfo: ${t}`),e}}a(kR,"getHDBProcessInfo");async function $R(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await _r.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:l,..._}=await _r.fsStats();return e.read_write=_,e.size=await _r.fsSize(),e}catch(t){return ho.error(`error in getDiskInfo: ${t}`),e}}a($R,"getDiskInfo");async function VR(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await _r.networkInterfaceDefault(),e.latency=await _r.inetChecksite("google.com"),(await _r.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:o,dhcp:c,dnsSuffix:l,ieee8021xAuth:_,ieee8021xState:u,carrier_changes:d,...f}=n;e.interfaces.push(f)}),(await _r.networkStats()).forEach(n=>{let{rx_sec:s,tx_sec:i,ms:o,...c}=n;e.stats.push(c)}),e}catch(t){return ho.error(`error in getNetworkInfo: ${t}`),e}}a(VR,"getNetworkInfo");async function YR(){if(PE!==void 0)return PE;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await _r.osInfo();e=c;let l=await _r.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,PE=e,PE}catch(t){return ho.error(`error in getSystemInformation: ${t}`),e}}a(YR,"getSystemInformation");async function KR(){let e=[],t=await f7.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await d7(n));return e}a(KR,"getTableSize");async function WR(){let e={};for(let t in pv){let r=e[t]={};for(let n in pv[t])try{let s=h7({database:t,table:n}),i=s.getStats();i.readers=s.readerList().split(/\n\s+/).slice(1).map(o=>{let[c,l,_]=o.trim().split(" ");return{pid:c,thread:l,txnid:_}}),r[n]=i}catch(s){ho.notify(`Error getting stats for table ${n}: ${s}`)}}return e}a(WR,"getMetrics");async function mv(){if(QR.get(ME.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await Ev.getNATSReferences(),t=await Ev.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(mv,"getNatsStreamInfo");async function p7(e){let t=new E7;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await YR(),t.time=qR(),t.cpu=await xR(),t.memory=await FR(),t.disk=await $R(),t.network=await VR(),t.harperdb_processes=await kR(),t.table_size=await KR(),t.metrics=await WR(),t.threads=await hv(),t.replication=await mv(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await YR();break;case"time":t.time=qR();break;case"cpu":t.cpu=await xR();break;case"memory":t.memory=await FR();break;case"disk":t.disk=await $R();break;case"network":t.network=await VR();break;case"harperdb_processes":t.harperdb_processes=await kR();break;case"table_size":t.table_size=await KR();break;case"database_metrics":case"metrics":t.metrics=await WR();break;case"threads":t.threads=await hv();break;case"replication":t.replication=await mv();break;default:break}return t}a(p7,"systemInformation")});var Si=T((fAe,Tv)=>{"use strict";Tv.exports={version:m7,printVersion:S7};var UE=ha();function m7(){if(UE)return UE.version}a(m7,"version");function S7(){UE&&console.log(`HarperDB Version ${UE.version}`)}a(S7,"printVersion")});var Ti=T((mAe,Ov)=>{"use strict";var T7=yr(),jR=K(),g7=require("util"),Oa=D(),gv=X();gv.initSync();var R7=LR(),Rv=ir(),{Node:hAe,NodeSubscription:pAe}=Hc(),A7=bc(),O7=iv(),{RemotePayloadObject:b7,RemotePayloadSubscription:N7}=t_(),{handleHDBError:y7,hdb_errors:I7}=oe(),{HTTP_STATUS_CODES:w7,HDB_ERROR_MSGS:C7}=I7,D7=os(),L7=mi(),P7=Si(),{getDatabases:M7}=(ge(),ie(ke)),U7=g7.promisify(R7.authorize),v7=Rv.searchByHash,B7=Rv.searchByValue;Ov.exports={authHeaderToUser:H7,isEmpty:G7,getNodeRecord:q7,upsertNodeRecord:x7,buildNodePayloads:F7,checkClusteringEnabled:k7,getAllNodeRecords:$7,getSystemInfo:V7,reverseSubscription:Av};async function H7(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await U7(t,null),e}a(H7,"authHeaderToUser");function G7(e){return e==null}a(G7,"isEmpty");async function q7(e){let t=new A7(Oa.SYSTEM_SCHEMA_NAME,Oa.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return v7(t)}a(q7,"getNodeRecord");async function x7(e){let t=new O7(Oa.SYSTEM_SCHEMA_NAME,Oa.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return T7.upsert(t)}a(x7,"upsertNodeRecord");function Av(e){if(jR.isEmpty(e.subscribe)||jR.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(Av,"reverseSubscription");function F7(e,t,r,n){let s=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:l,table:_}=c,u=jR.getTableHashAttribute(l,_),{subscribe:d,publish:f}=Av(c),E=M7()[l]?.[_],h=new N7(l,_,u,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);s.push(h)}return new b7(r,t,s,n)}a(F7,"buildNodePayloads");function k7(){if(!gv.get(Oa.CONFIG_PARAMS.CLUSTERING_ENABLED))throw y7(new Error,C7.CLUSTERING_NOT_ENABLED,w7.BAD_REQUEST,void 0,void 0,!0)}a(k7,"checkClusteringEnabled");async function $7(){let e=new D7(Oa.SYSTEM_SCHEMA_NAME,Oa.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await B7(e))}a($7,"getAllNodeRecords");async function V7(){let e=await L7.getSystemInformation();return{hdb_version:P7.version(),node_version:e.node_version,platform:e.platform}}a(V7,"getSystemInfo")});var zR=T((TAe,Lv)=>{"use strict";var vE=pt(),bv=K(),Nv=Xe(),yv=D(),BE=x(),Iv=RE(),Y7=wu(),{RemotePayloadObject:K7}=t_(),{handleHDBError:wv,hdb_errors:W7}=oe(),{HTTP_STATUS_CODES:Cv}=W7,{NodeSubscription:Dv}=Hc();Lv.exports=Q7;async function Q7(e,t){let r;try{r=await vE.request(`${t}.${Nv.REQUEST_SUFFIX}`,new K7(yv.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),BE.trace("Response from remote describe all request:",r)}catch(o){BE.error(`addNode received error from describe all request to remote node: ${o}`);let c=vE.requestErrorHandler(o,"add_node",t);throw wv(new Error,c,Cv.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===Nv.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw wv(new Error,o,Cv.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===yv.SYSTEM_SCHEMA_NAME){await vE.createLocalTableStream(l,c);let h=new Dv(l,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=bv.doesSchemaExist(l),u=n[l]!==void 0,d=c?bv.doesTableExist(l,c):!0,f=c?n?.[l]?.[c]!==void 0:!0;if(!_&&!u||!d&&!f){s.push(o);continue}if(!_&&u&&(BE.trace(`addNode creating schema: ${l}`),await Iv.createSchema({operation:"create_schema",schema:l})),!d&&f){BE.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let h=new Y7(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(h.attributes=n[l][c].attributes),await Iv.createTable(h)}await vE.createLocalTableStream(l,c);let E=new Dv(l,c,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:s}}a(Q7,"reviewSubscriptions")});var s_=T((RAe,Uv)=>{"use strict";var{handleHDBError:HE,hdb_errors:j7}=oe(),{HTTP_STATUS_CODES:GE}=j7,{addUpdateNodeValidator:z7}=IE(),qE=x(),Mv=D(),Pv=Xe(),J7=K(),r_=pt(),n_=Ti(),X7=X(),Z7=zR(),{Node:eee,NodeSubscription:tee}=Hc(),{broadcast:ree}=et(),nee="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",see="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",iee=X7.get(Mv.CONFIG_PARAMS.CLUSTERING_NODENAME);Uv.exports=oee;async function oee(e,t=!1){qE.trace("addNode called with:",e),n_.checkClusteringEnabled();let r=z7(e);if(r)throw HE(r,r.message,GE.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let d=await n_.getNodeRecord(n);if(!J7.isEmptyOrZeroLength(d))throw HE(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,GE.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await Z7(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=nee,o;let c=n_.buildNodePayloads(s,iee,Mv.OPERATIONS_ENUM.ADD_NODE,await n_.getSystemInfo()),l=[];for(let d=0,f=s.length;d<f;d++){let E=s[d];s[d].start_time===void 0&&delete s[d].start_time,l.push(new tee(E.schema,E.table,E.publish,E.subscribe))}qE.trace("addNode sending remote payload:",c);let _;try{_=await r_.request(`${n}.${Pv.REQUEST_SUFFIX}`,c)}catch(d){qE.error(`addNode received error from request: ${d}`);for(let E=0,h=s.length;E<h;E++){let m=s[E];m.publish=!1,m.subscribe=!1,await r_.updateRemoteConsumer(m,n)}let f=r_.requestErrorHandler(d,"add_node",n);throw HE(new Error,f,GE.INTERNAL_SERVER_ERROR,"error",f)}if(_.status===Pv.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${n}: ${_.message}`;throw HE(new Error,d,GE.INTERNAL_SERVER_ERROR,"error",d)}qE.trace(_);for(let d=0,f=s.length;d<f;d++){let E=s[d];await r_.updateRemoteConsumer(E,n),E.subscribe===!0&&await r_.updateConsumerIterator(E.schema,E.table,n,"start")}let u=new eee(n,l,_.system_info);return await n_.upsertNodeRecord(u),ree({type:"nats_update"}),i.length>0?o.message=see:o.message=`Successfully added '${n}' to manifest`,o}a(oee,"addNode")});var ZR=T((bAe,Hv)=>{"use strict";var{handleHDBError:JR,hdb_errors:aee}=oe(),{HTTP_STATUS_CODES:XR}=aee,{addUpdateNodeValidator:cee}=IE(),i_=x(),Bv=D(),vv=Xe(),OAe=K(),o_=pt(),a_=Ti(),lee=X(),{cloneDeep:uee}=require("lodash"),_ee=zR(),{Node:dee,NodeSubscription:fee}=Hc(),{broadcast:Eee}=et(),hee="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",pee="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",mee=lee.get(Bv.CONFIG_PARAMS.CLUSTERING_NODENAME);Hv.exports=See;async function See(e){i_.trace("updateNode called with:",e),a_.checkClusteringEnabled();let t=cee(e);if(t)throw JR(t,t.message,XR.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await a_.getNodeRecord(r);s.length>0&&(n=uee(s));let{added:i,skipped:o}=await _ee(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=hee,c;let l=a_.buildNodePayloads(i,mee,Bv.OPERATIONS_ENUM.UPDATE_NODE,await a_.getSystemInfo());for(let u=0,d=i.length;u<d;u++){let f=i[u];i_.trace(`updateNode updating work stream for node: ${r} subscription:`,f),i[u].start_time===void 0&&delete i[u].start_time}i_.trace("updateNode sending remote payload:",l);let _;try{_=await o_.request(`${r}.${vv.REQUEST_SUFFIX}`,l)}catch(u){i_.error(`updateNode received error from request: ${u}`);let d=o_.requestErrorHandler(u,"update_node",r);throw JR(new Error,d,XR.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===vv.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let u=`Error returned from remote node ${r}: ${_.message}`;throw JR(new Error,u,XR.INTERNAL_SERVER_ERROR,"error",u)}i_.trace(_);for(let u=0,d=i.length;u<d;u++){let f=i[u];await o_.updateRemoteConsumer(f,r),f.subscribe===!0?await o_.updateConsumerIterator(f.schema,f.table,r,"start"):await o_.updateConsumerIterator(f.schema,f.table,r,"stop")}return n||(n=[new dee(r,[],_.system_info)]),await Tee(n[0],i,_.system_info),o.length>0?c.message=pee:c.message=`Successfully updated '${r}'`,c}a(See,"updateNode");async function Tee(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,_=e.subscriptions.length;l<_;l++){let u=n.subscriptions[l];if(u.schema===o.schema&&u.table===o.table){u.publish=o.publish,u.subscribe=o.subscribe,c=!0;break}}c||n.subscriptions.push(new fee(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await a_.upsertNodeRecord(n),Eee({type:"nats_update"})}a(Tee,"updateNodeTable")});var kv=T((yAe,Fv)=>{"use strict";var xv=require("joi"),{string:Gv}=xv.types(),gee=tt(),qv=D(),Ree=X(),Aee=Xe();Fv.exports=Oee;function Oee(e){let t=Gv.invalid(Ree.get(qv.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(Aee.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=xv.object({operation:Gv.valid(qv.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return gee.validateBySchema(e,r)}a(Oee,"removeNodeValidator")});var FE=T((wAe,Wv)=>{"use strict";var{handleHDBError:$v,hdb_errors:bee}=oe(),{HTTP_STATUS_CODES:Vv}=bee,Nee=kv(),c_=x(),Yv=Ti(),yee=K(),xE=D(),Kv=Xe(),eA=pt(),Iee=X(),{RemotePayloadObject:wee}=t_(),{NodeSubscription:Cee}=Hc(),Dee=Iu(),Lee=na(),{broadcast:Pee}=et(),Mee=Iee.get(xE.CONFIG_PARAMS.CLUSTERING_NODENAME);Wv.exports=Uee;async function Uee(e){c_.trace("removeNode called with:",e),Yv.checkClusteringEnabled();let t=Nee(e);if(t)throw $v(t,t.message,Vv.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await Yv.getNodeRecord(r);if(yee.isEmptyOrZeroLength(n))throw $v(new Error,`Node '${r}' was not found.`,Vv.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new wee(xE.OPERATIONS_ENUM.REMOVE_NODE,Mee,[]),i,o=!1;for(let l=0,_=n.subscriptions.length;l<_;l++){let u=n.subscriptions[l];u.subscribe===!0&&await eA.updateConsumerIterator(u.schema,u.table,r,"stop");try{await eA.updateRemoteConsumer(new Cee(u.schema,u.table,!1,!1),r)}catch(d){c_.error(d)}}try{i=await eA.request(`${r}.${Kv.REQUEST_SUFFIX}`,s),c_.trace("Remove node reply from remote node:",r,i)}catch(l){c_.error("removeNode received error from request:",l),o=!0}let c=new Dee(xE.SYSTEM_SCHEMA_NAME,xE.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await Lee.deleteRecord(c),Pee({type:"nats_update"}),i?.status===Kv.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(c_.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(Uee,"removeNode")});var zv=T((DAe,jv)=>{"use strict";var Qv=require("joi"),{string:vee,array:Bee}=Qv.types(),Hee=tt(),Gee=IE();jv.exports=qee;function qee(e){let t=Qv.object({operation:vee.valid("configure_cluster").required(),connections:Bee.items(Gee.validation_schema).required()});return Hee.validateBySchema(e,t)}a(qee,"configureClusterValidator")});var $E=T((PAe,t0)=>{"use strict";var xee=D(),kE=x(),Fee=K(),kee=FE(),$ee=s_(),Jv=Ti(),Vee=zv(),{handleHDBError:Xv,hdb_errors:Yee}=oe(),{HTTP_STATUS_CODES:Zv}=Yee,Kee="Configure cluster complete.",Wee="Failed to configure the cluster. Check the logs for more details.",Qee="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";t0.exports=jee;async function jee(e){kE.trace("configure cluster called with:",e),Jv.checkClusteringEnabled();let t=Vee(e);if(t)throw Xv(t,t.message,Zv.BAD_REQUEST,void 0,void 0,!0);let r=await Jv.getAllNodeRecords(),n=[];for(let u=0,d=r.length;u<d;u++){let f=await e0(kee,{operation:xee.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[u].name},r[u].name);n.push(f)}kE.trace("All results from configure_cluster remove node:",n);let s=[],i=e.connections.length;for(let u=0;u<i;u++){let d=e.connections[u],f=await e0($ee,d,d.node_name);s.push(f)}kE.trace("All results from configure_cluster add node:",s);let o=[],c=[],l=!1,_=n.concat(s);for(let u=0,d=_.length;u<d;u++){let f=_[u];f.status==="rejected"&&(kE.error(f),o.includes(f.node_name)||o.push(f.node_name)),(f?.result?.message?.includes?.("Successfully")||f?.result?.includes?.("Successfully"))&&(l=!0),!(typeof f.result=="string"&&f.result.includes("Successfully removed")||f.status==="rejected")&&c.push({node_name:f?.node_name,subscriptions:f?.result})}if(Fee.isEmptyOrZeroLength(o))return{message:Kee,connections:c};if(l)return{message:Qee,failed_nodes:o,connections:c};throw Xv(new Error,Wee,Zv.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(jee,"configureCluster");async function e0(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}a(e0,"functionWrapper")});var i0=T((UAe,s0)=>{"use strict";var l_=require("joi"),zee=tt(),{validateSchemaExists:r0,validateTableExists:Jee,validateSchemaName:n0}=ws(),Xee=l_.object({operation:l_.string().valid("purge_stream"),schema:l_.string().custom(r0).custom(n0).optional(),database:l_.string().custom(r0).custom(n0).optional(),table:l_.string().custom(Jee).required()});function Zee(e){return zee.validateBySchema(e,Xee)}a(Zee,"purgeStreamValidator");s0.exports=Zee});var tA=T((BAe,o0)=>{"use strict";var{handleHDBError:ete,hdb_errors:tte}=oe(),{HTTP_STATUS_CODES:rte}=tte,nte=i0(),ste=pt(),ite=Ti();o0.exports=ote;async function ote(e){e.schema=e.schema??e.database;let t=nte(e);if(t)throw ete(t,t.message,rte.BAD_REQUEST,void 0,void 0,!0);ite.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await ste.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}a(ote,"purgeStream")});var YE=T((GAe,d0)=>{"use strict";var nA=Ti(),ate=pt(),l0=X(),VE=D(),ba=Xe(),cte=K(),rA=x(),{RemotePayloadObject:lte}=t_(),{ErrorCode:a0}=require("nats"),c0=l0.get(VE.CONFIG_PARAMS.CLUSTERING_ENABLED),u0=l0.get(VE.CONFIG_PARAMS.CLUSTERING_NODENAME);d0.exports={clusterStatus:ute,buildNodeStatus:_0};async function ute(){let e={node_name:u0,is_enabled:c0,connections:[]};if(!c0)return e;let t=await nA.getAllNodeRecords();if(cte.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(_0(t[n],e.connections));return await Promise.allSettled(r),e}a(ute,"clusterStatus");async function _0(e,t){let r=e.name,n=new lte(VE.OPERATIONS_ENUM.CLUSTER_STATUS,u0,void 0,await nA.getSystemInfo()),s,i,o=ba.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await ate.request(ba.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===ba.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=ba.CLUSTER_STATUS_STATUSES.CLOSED,rA.error(`Error getting node status from ${r} `,s))}catch(l){rA.warn(`Error getting node status from ${r}`,l),l.code===a0.NoResponders?o=ba.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===a0.Timeout?o=ba.CLUSTER_STATUS_STATUSES.TIMEOUT:o=ba.CLUSTER_STATUS_STATUSES.CLOSED}let c=new _te(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!==VE.PRE_4_0_0_VERSION&&await nA.upsertNodeRecord(l)}catch(l){rA.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}a(_0,"buildNodeStatus");function _te(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(_te,"NodeStatusObject")});var WE=T((xAe,f0)=>{"use strict";var{handleHDBError:dte,hdb_errors:fte}=oe(),{HTTP_STATUS_CODES:Ete}=fte,hte=pt(),pte=Ti(),sA=K(),KE=require("joi"),mte=tt(),Ste=2e3,Tte=KE.object({timeout:KE.number().min(1),connected_nodes:KE.boolean(),routes:KE.boolean()});f0.exports=gte;async function gte(e){pte.checkClusteringEnabled();let t=mte.validateBySchema(e,Tte);if(t)throw dte(t,t.message,Ete.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||sA.autoCastBoolean(n),o=s===void 0||sA.autoCastBoolean(s),c={nodes:[]},l=await hte.getServerList(r??Ste),_={};if(i)for(let u=0,d=l.length;u<d;u++){let f=l[u].statsz;f&&(_[l[u].server.name]=f.routes)}for(let u=0,d=l.length;u<d;u++){if(l[u].statsz)continue;let f=l[u].server,E=l[u].data;if(f.name.endsWith("-hub")){let h={name:f.name.slice(0,-4),response_time:l[u].response_time};i&&(h.connected_nodes=[],_[f.name]&&_[f.name].forEach(m=>{h.connected_nodes.includes(m.name.slice(0,-4))||h.connected_nodes.push(m.name.slice(0,-4))})),o&&(h.routes=E.cluster?.urls?E.cluster?.urls.map(m=>({host:m.split(":")[0],port:sA.autoCast(m.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(gte,"clusterNetwork")});var m0=T((kAe,p0)=>{"use strict";var iA=require("joi"),E0=tt(),{route_constraints:h0}=bT();p0.exports={setRoutesValidator:Rte,deleteRoutesValidator:Ate};function Rte(e){let t=iA.object({server:iA.valid("hub","leaf").required(),routes:h0.required()});return E0.validateBySchema(e,t)}a(Rte,"setRoutesValidator");function Ate(e){let t=iA.object({routes:h0.required()});return E0.validateBySchema(e,t)}a(Ate,"deleteRoutesValidator")});var jE=T((VAe,R0)=>{"use strict";var Na=ut(),oA=K(),QE=D(),S0=m0(),{handleHDBError:T0,hdb_errors:Ote}=oe(),{HTTP_STATUS_CODES:g0}=Ote,bte="cluster routes successfully set",Nte="cluster routes successfully deleted";R0.exports={setRoutes:yte,getRoutes:Ite,deleteRoutes:wte};function yte(e){let t=S0.setRoutesValidator(e);if(t)throw T0(t,t.message,g0.BAD_REQUEST,void 0,void 0,!0);let r=Na.getClusteringRoutes(),n=e.server==="hub"?r.hub_routes:r.leaf_routes,s=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],o=[];for(let c=0,l=e.routes.length;c<l;c++){let _=e.routes[c];_.port=oA.autoCast(_.port);let u=n.some(f=>f.host===_.host&&f.port===_.port),d=s.some(f=>f.host===_.host&&f.port===_.port);u||d?i.push(_):(n.push(_),o.push(_))}return e.server==="hub"?Na.updateConfigValue(QE.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n):Na.updateConfigValue(QE.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n),{message:bte,set:o,skipped:i}}a(yte,"setRoutes");function Ite(){let e=Na.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(Ite,"getRoutes");function wte(e){let t=S0.deleteRoutesValidator(e);if(t)throw T0(t,t.message,g0.BAD_REQUEST,void 0,void 0,!0);let r=Na.getClusteringRoutes(),n=r.hub_routes,s=r.leaf_routes,i=[],o=[],c=!1,l=!1;for(let _=0,u=e.routes.length;_<u;_++){let d=e.routes[_],f=!1;for(let E=0,h=n.length;E<h;E++){let m=n[E];if(d.host===m.host&&d.port===m.port){n.splice(E,1),f=!0,c=!0,i.push(d);break}}if(!f){let E=!0;for(let h=0,m=s.length;h<m;h++){let S=s[h];if(d.host===S.host&&d.port===S.port){s.splice(h,1),l=!0,E=!1,i.push(d);break}}E&&o.push(d)}}return c&&(n=oA.isEmptyOrZeroLength(n)?null:n,Na.updateConfigValue(QE.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n)),l&&(s=oA.isEmptyOrZeroLength(s)?null:s,Na.updateConfigValue(QE.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s)),{message:Nte,deleted:i,skipped:o}}a(wte,"deleteRoutes")});var O0=T((KAe,A0)=>{"use strict";var u_=require("alasql"),ya=require("recursive-iterator"),_s=x(),Cte=K(),__=D(),aA=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,Lte(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=>__.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=>!__.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][__.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=Dte(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(_=>({attribute_name:_.attribute}));let l=this.affected_attributes.get(i).get(o).filter(_=>!__.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let u=new u_.yy.Column({columnid:_});s.tableid&&(u.tableid=s.tableid),this.ast.columns.push(u),l.includes(_)||l.push(_)}),this.affected_attributes.get(i).set(o,l)}}),this.ast}};function Dte(e){return e.filter(t=>t[__.PERMS_CRUD_ENUM.READ])}a(Dte,"filterReadRestrictedAttrs");function Lte(e,t,r,n,s){Pte(e,t,r,n,s)}a(Lte,"interpretAST");function d_(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(d_,"addSchemaTableToMap");function Pte(e,t,r,n,s){if(!e){_s.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof u_.yy.Insert?Bte(e,t,r):e instanceof u_.yy.Select?Mte(e,t,r,n,s):e instanceof u_.yy.Update?Ute(e,t,r):e instanceof u_.yy.Delete?vte(e,t,r):_s.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(Pte,"getRecordAttributesAST");function Mte(e,t,r,n,s){if(!e){_s.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(Cte.isEmptyOrZeroLength(i)){_s.error("No schema specified");return}e.from.forEach(c=>{d_(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),d_(c.table,t,r,n,s)});let o=new ya(e.columns);for(let{node:c}of o)if(c&&c.columnid){let l=c.tableid,_=n.has(l)?n.get(l):i;if(l||(l=e.from[0].tableid),!t.get(_).has(l))if(r.has(l))l=r.get(l);else{_s.info(`table specified as ${l} not found.`);return}t.get(_).get(l).indexOf(c.columnid)<0&&t.get(_).get(l).push(c.columnid)}if(e.where){let c=new ya(e.where),l=e.from[0].tableid;for(let{node:_}of c)if(_&&_.columnid){let u=_.tableid?_.tableid:l;if(!t.get(i).has(u))if(r.has(u))u=r.get(u);else{_s.info(`table specified as ${u} not found.`);continue}t.get(i).get(u).indexOf(_.columnid)<0&&t.get(i).get(u).push(_.columnid)}}if(e.joins&&e.joins.forEach(c=>{let l=new ya(c.on);for(let{node:_}of l)if(_&&_.columnid){let u=_.tableid,d=s.get(u);if(!t.get(d).has(u))if(r.has(u))u=r.get(u);else{_s.info(`table specified as ${u} not found.`);continue}t.get(d).get(u).indexOf(_.columnid)<0&&t.get(d).get(u).push(_.columnid)}}),e.order){let c=new ya(e.order);for(let{node:l}of c)if(l&&l.columnid){let _=l.tableid,u=n.has(_)?n.get(_):i;if(_||(_=e.from[0].tableid),!t.get(u).has(_))if(r.has(_))_=r.get(_);else{_s.info(`table specified as ${_} not found.`);return}t.get(u).get(_).indexOf(l.columnid)<0&&t.get(u).get(_).push(l.columnid)}}}a(Mte,"getSelectAttributes");function Ute(e,t,r){if(!e){_s.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new ya(e.columns),s=e.table.databaseid;d_(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&cA(e.table.tableid,s,i.columnid,t,r)}a(Ute,"getUpdateAttributes");function vte(e,t,r){if(!e){_s.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new ya(e.where),s=e.table.databaseid;d_(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&cA(e.table.tableid,s,i.columnid,t,r)}a(vte,"getDeleteAttributes");function Bte(e,t,r){if(!e){_s.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new ya(e.columns),s=e.into.databaseid;d_(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&cA(e.into.tableid,s,i.columnid,t,r)}a(Bte,"getInsertAttributes");function cA(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(cA,"pushAttribute");A0.exports=aA});var JE=T((QAe,I0)=>{var zE=aa(),b0=require("chalk"),_n=x(),N0=require("prompt"),{promisify:Hte}=require("util"),lA=D(),Gte=require("fs-extra"),qte=require("path"),xte=K(),Fte=Si(),y0=X();y0.initSync();var kte=require("moment"),$te=Hte(N0.get),Vte=qte.join(y0.getHdbBasePath(),lA.LICENSE_KEY_DIR_NAME,lA.LICENSE_FILE_NAME,lA.LICENSE_FILE_NAME);I0.exports={getFingerprint:Kte,setLicense:Yte,parseLicense:uA,register:Wte,getRegistrationInfo:jte};async function Yte(e){if(e&&e.key&&e.company){try{_n.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await uA(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw _n.error(r),_n.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(Yte,"setLicense");async function Kte(){let e={};try{e=await zE.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw _n.error(r),_n.error(t),new Error(r)}return e}a(Kte,"getFingerprint");async function uA(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");_n.info("Validating license input...");let r=zE.validateLicense(e,t);if(_n.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(_n.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(_n.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{_n.info("writing license to disk"),await Gte.writeFile(Vte,JSON.stringify({license_key:e,company:t}))}catch(n){throw _n.error("Failed to write License"),n}return"Registration successful."}a(uA,"parseLicense");async function Wte(){let e=await Qte();return uA(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(Wte,"register");async function Qte(){let e=await zE.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:b0.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:b0.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{N0.start()}catch(n){_n.error(n)}let r;try{r=await $te(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(Qte,"promptForRegistration");async function jte(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await zE.getLicense()}catch(r){throw _n.error(`There was an error when searching licenses due to: ${r.message}`),r}if(xte.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=Fte.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=kte.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(jte,"getRegistrationInfo")});var C0=T((zAe,w0)=>{"use strict";var zte=Xe(),_A=class{static{a(this,"HubConfigObject")}constructor(t,r,n,s,i,o,c,l,_,u,d,f,E,h){this.port=t,o===null&&(o=void 0),this.server_name=r+zte.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:_,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c}},this.cluster={name:u,port:d,routes:f,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l}},this.accounts={SYS:{users:E},HDB:{users:h}},this.system_account="SYS"}};w0.exports=_A});var P0=T((XAe,L0)=>{"use strict";var D0=Xe(),dA=class{static{a(this,"LeafConfigObject")}constructor(t,r,n,s,i,o,c,l,_,u,d){this.port=t,d===null&&(d=void 0),this.server_name=r+D0.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+D0.SERVER_SUFFIX.LEAF},this.tls={cert_file:_,key_file:u,ca_file:d,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:d,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:d,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:l,jetstream:"enabled"}},this.system_account="SYS"}};L0.exports=dA});var U0=T((eOe,M0)=>{"use strict";var fA=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};M0.exports=fA});var B0=T((rOe,v0)=>{"use strict";var Jte=Xe(),EA=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+Jte.SERVER_SUFFIX.ADMIN,this.password=r}};v0.exports=EA});var rh=T((sOe,q0)=>{"use strict";var Gc=require("path"),eh=require("fs-extra"),Xte=C0(),Zte=P0(),ere=U0(),tre=B0(),hA=wr(),xc=K(),Gr=ut(),ZE=D(),f_=Xe(),{CONFIG_PARAMS:St}=ZE,Fc=x(),E_=X(),H0=ui(),pA=pt(),qc="clustering",rre=1e4,G0=50;q0.exports={generateNatsConfig:sre,removeNatsConfig:ire,getHubConfigPath:nre};function nre(){let e=E_.get(St.ROOTPATH);return Gc.join(e,qc,f_.NATS_CONFIG_FILES.HUB_SERVER)}a(nre,"getHubConfigPath");async function sre(e=!1,t=void 0){E_.initSync();let r=E_.get(St.ROOTPATH),n=Gc.join(r,qc,f_.PID_FILES.HUB),s=Gc.join(r,qc,f_.PID_FILES.LEAF),i=Gr.getConfigFromFile(St.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=Gc.join(r,qc,f_.NATS_CONFIG_FILES.HUB_SERVER),c=Gc.join(r,qc,f_.NATS_CONFIG_FILES.LEAF_SERVER),l=Gr.getConfigFromFile(St.CLUSTERING_TLS_CERTIFICATE),_=Gr.getConfigFromFile(St.CLUSTERING_TLS_PRIVATEKEY),u=Gr.getConfigFromFile(St.CLUSTERING_TLS_CERT_AUTH),d=Gr.getConfigFromFile(St.CLUSTERING_TLS_INSECURE),f=Gr.getConfigFromFile(St.CLUSTERING_TLS_VERIFY),E=Gr.getConfigFromFile(St.CLUSTERING_NODENAME),h=Gr.getConfigFromFile(St.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await pA.checkNATSServerInstalled()||th("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let m=await hA.listUsers(),S=Gr.getConfigFromFile(St.CLUSTERING_USER),g=await hA.getClusterUser();(xc.isEmpty(g)||g.active!==!0)&&th(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await XE(St.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await XE(St.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await XE(St.CLUSTERING_HUBSERVER_NETWORK_PORT),await XE(St.CLUSTERING_LEAFSERVER_NETWORK_PORT));let R=[],A=[];for(let[z,J]of m.entries())J.role.role===ZE.ROLE_TYPES_ENUM.CLUSTER_USER&&J.active&&(R.push(new tre(J.username,H0.decrypt(J.hash))),A.push(new ere(J.username,H0.decrypt(J.hash))));let P=[],{hub_routes:U}=Gr.getClusteringRoutes();if(!xc.isEmptyOrZeroLength(U))for(let z of U)P.push(`tls://${g.sys_name_encoded}:${g.uri_encoded_d_hash}@${z.host}:${z.port}`);let v=new Xte(Gr.getConfigFromFile(St.CLUSTERING_HUBSERVER_NETWORK_PORT),E,n,l,_,u,d,f,h,Gr.getConfigFromFile(St.CLUSTERING_HUBSERVER_CLUSTER_NAME),Gr.getConfigFromFile(St.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),P,R,A);u==null&&(delete v.tls.ca_file,delete v.leafnodes.tls.ca_file),t=xc.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===ZE.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await eh.writeJson(o,v),Fc.trace(`Hub server config written to ${o}`));let k=`tls://${g.sys_name_encoded}:${g.uri_encoded_d_hash}@0.0.0.0:${h}`,H=`tls://${g.uri_encoded_name}:${g.uri_encoded_d_hash}@0.0.0.0:${h}`,j=new Zte(Gr.getConfigFromFile(St.CLUSTERING_LEAFSERVER_NETWORK_PORT),E,s,i,[k],[H],R,A,l,_,u,d);u==null&&delete j.tls.ca_file,(t===void 0||t===ZE.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await eh.writeJson(c,j),Fc.trace(`Leaf server config written to ${c}`))}a(sre,"generateNatsConfig");async function XE(e){let t=E_.get(e);return xc.isEmpty(t)&&th(`port undefined for '${e}'`),await xc.isPortTaken(t)&&th(`'${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(XE,"isPortAvailable");function th(e){let t=`Error generating clustering config: ${e}`;Fc.error(t),console.error(t),process.exit(1)}a(th,"generateNatsConfigError");async function ire(e){let{port:t,config_file:r}=pA.getServerConfig(e),{username:n,decrypt_hash:s}=await hA.getClusterUser(),i=0,o=2e3;for(;i<G0;){try{let u=await pA.createConnection(t,n,s,!1);if(u.protocol.connected===!0){u.close();break}}catch(u){Fc.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${u}`)}if(i++,i>=G0)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check hdb.log for further details.`);let _=o*(i*2);_>3e4&&Fc.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await xc.async_set_timeout(_)}let c="0".repeat(rre),l=Gc.join(E_.get(St.ROOTPATH),qc,r);await eh.writeFile(l,c),await eh.remove(l),Fc.notify(e,"started.")}a(ire,"removeNatsConfig")});var Y0=T((oOe,V0)=>{"use strict";var dn=X(),ore=aa(),me=D(),h_=Xe(),gi=require("path"),{PACKAGE_ROOT:sh}=D(),x0=X(),nh=K(),kc="/dev/null",are=gi.join(sh,"launchServiceScripts"),F0=gi.join(sh,"utility/scripts"),cre=gi.join(F0,me.HDB_RESTART_SCRIPT),k0=gi.resolve(sh,"dependencies",`${process.platform}-${process.arch}`,h_.NATS_BINARY_NAME);function $0(){let t=ore.licenseSearch().ram_allocation||me.RAM_ALLOCATION_ENUM.DEFAULT,r=me.MEM_SETTING_KEY+t,n={[me.PROCESS_NAME_ENV_PROP]:me.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return nh.noBootFile()&&(n[me.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=nh.getEnvCliRootPath()),{name:me.PROCESS_DESCRIPTORS.HDB,script:me.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:sh}}a($0,"generateMainServerConfig");var lre=9930;function ure(){dn.initSync(!0);let e=dn.get(me.CONFIG_PARAMS.ROOTPATH),t=gi.join(e,"clustering",h_.NATS_CONFIG_FILES.HUB_SERVER),r=gi.join(dn.get(me.HDB_SETTINGS_NAMES.LOG_PATH_KEY),me.LOG_NAMES.HDB),n=x0.get(me.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=h_.LOG_LEVEL_FLAGS[dn.get(me.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:me.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==lre?"-"+n:""),script:k0,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[me.PROCESS_NAME_ENV_PROP]:me.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return dn.get(me.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=kc,i.error_file=kc),i}a(ure,"generateNatsHubServerConfig");var _re=9940;function dre(){dn.initSync(!0);let e=dn.get(me.CONFIG_PARAMS.ROOTPATH),t=gi.join(e,"clustering",h_.NATS_CONFIG_FILES.LEAF_SERVER),r=gi.join(dn.get(me.HDB_SETTINGS_NAMES.LOG_PATH_KEY),me.LOG_NAMES.HDB),n=x0.get(me.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=h_.LOG_LEVEL_FLAGS[dn.get(me.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:me.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==_re?"-"+n:""),script:k0,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[me.PROCESS_NAME_ENV_PROP]:me.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return dn.get(me.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=kc,i.error_file=kc),i}a(dre,"generateNatsLeafServerConfig");function fre(){dn.initSync();let e=gi.join(dn.get(me.CONFIG_PARAMS.LOGGING_ROOT),me.LOG_NAMES.HDB),t={name:me.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:me.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[me.PROCESS_NAME_ENV_PROP]:me.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:are,autorestart:!1};return dn.get(me.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=kc,t.error_file=kc),t}a(fre,"generateClusteringUpgradeV4ServiceConfig");function Ere(){let e={[me.PROCESS_NAME_ENV_PROP]:me.PROCESS_DESCRIPTORS.RESTART_HDB};return nh.noBootFile()&&(e[me.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=nh.getEnvCliRootPath()),{...{name:me.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:F0},script:cre}}a(Ere,"generateRestart");function hre(){return{apps:[$0()]}}a(hre,"generateAllServiceConfigs");V0.exports={generateAllServiceConfigs:hre,generateMainServerConfig:$0,generateRestart:Ere,generateNatsHubServerConfig:ure,generateNatsLeafServerConfig:dre,generateClusteringUpgradeV4ServiceConfig:fre}});var $c=T((lOe,sB)=>{"use strict";var He=D(),pre=K(),Ai=rh(),ih=pt(),Ri=Xe(),po=Y0(),oh=X(),mo=x(),mre=Ti(),{startWorker:K0,onMessageFromWorkers:Sre}=et(),Tre=mi(),cOe=require("util"),gre=require("child_process"),Rre=require("fs"),{execFile:Are}=gre,Ce;sB.exports={enterPM2Mode:Ore,start:So,stop:mA,reload:Q0,restart:j0,list:SA,describe:J0,connect:Oi,kill:wre,startAllServices:Cre,startService:TA,getUniqueServicesList:X0,restartAllServices:Dre,isServiceRegistered:Z0,reloadStopStart:eB,restartHdb:z0,deleteProcess:yre,startClusteringProcesses:rB,startClusteringThreads:nB,isHdbRestartRunning:Ire,isClusteringRunning:Pre,stopClustering:Lre,reloadClustering:Mre};var p_=!1;Sre(e=>{e.type==="restart"&&oh.initSync(!0)});function Ore(){p_=!0}a(Ore,"enterPM2Mode");function Oi(){return Ce||(Ce=require("pm2")),new Promise((e,t)=>{Ce.connect((r,n)=>{mo.setupConsoleLogging(),r&&t(r),e(n)})})}a(Oi,"connect");var qr,bre=10,W0;function So(e,t=!1){if(p_)return Nre(e);let r=Are(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=qr.indexOf(r);o>-1&&qr.splice(o,1),!W0&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<bre&&(Rre.existsSync(Ai.getHubConfigPath())?So(e):(await Ai.generateNatsConfig(!0),So(e),await new Promise(c=>setTimeout(c,3e3)),await Ai.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Ai.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let o=oh.get(He.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,l,_=0,u;for(;l=c.exec(i);){if(l.index&&Ri.LOG_LEVEL_HIERARCHY[o]>=Ri.LOG_LEVEL_HIERARCHY[u||"info"]){let E=u===Ri.LOG_LEVELS.ERR||u===Ri.LOG_LEVELS.WRN?mo.OUTPUTS.STDERR:mo.OUTPUTS.STDOUT;mo.logCustomLevel(u||"info",E,n,i.slice(_,l.index).trim())}let[d,f]=l;_=l.index+d.length,u=Ri.LOG_LEVELS[f]}if(Ri.LOG_LEVEL_HIERARCHY[o]>=Ri.LOG_LEVEL_HIERARCHY[u||"info"]){let d=u===Ri.LOG_LEVELS.ERR||u===Ri.LOG_LEVELS.WRN?mo.OUTPUTS.STDERR:mo.OUTPUTS.STDOUT;mo.logCustomLevel(u||"info",d,n,i.slice(_).trim())}}if(a(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),qr=[],!qr&&!t){let i=a(()=>{W0=!0,qr&&(qr.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)}qr.push(r)}a(So,"start");function Nre(e){return new Promise(async(t,r)=>{try{await Oi()}catch(n){r(n)}Ce.start(e,(n,s)=>{n&&(Ce.disconnect(),r(n)),Ce.disconnect(),t(s)})})}a(Nre,"startWithPM2");function mA(e){if(!p_){for(let t of qr||[])t.name===e&&(qr.splice(qr.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Oi()}catch(n){r(n)}Ce.stop(e,async(n,s)=>{n&&(Ce.disconnect(),r(n)),Ce.delete(e,(i,o)=>{i&&(Ce.disconnect(),r(n)),Ce.disconnect(),t(o)})})})}a(mA,"stop");function Q0(e){return new Promise(async(t,r)=>{try{await Oi()}catch(n){r(n)}Ce.reload(e,(n,s)=>{n&&(Ce.disconnect(),r(n)),Ce.disconnect(),t(s)})})}a(Q0,"reload");function j0(e){if(!p_)for(let t of qr||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await Oi()}catch(n){r(n)}Ce.restart(e,(n,s)=>{Ce.disconnect(),t(s)})})}a(j0,"restart");function yre(e){return new Promise(async(t,r)=>{try{await Oi()}catch(n){r(n)}Ce.delete(e,(n,s)=>{n&&(Ce.disconnect(),r(n)),Ce.disconnect(),t(s)})})}a(yre,"deleteProcess");async function z0(){await So(po.generateRestart())}a(z0,"restartHdb");async function Ire(){let e=await SA();for(let t in e)if(e[t].name===He.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(Ire,"isHdbRestartRunning");function SA(){return new Promise(async(e,t)=>{try{await Oi()}catch(r){t(r)}Ce.list((r,n)=>{r&&(Ce.disconnect(),t(r)),Ce.disconnect(),e(n)})})}a(SA,"list");function J0(e){return new Promise(async(t,r)=>{try{await Oi()}catch(n){r(n)}Ce.describe(e,(n,s)=>{n&&(Ce.disconnect(),r(n)),Ce.disconnect(),t(s)})})}a(J0,"describe");function wre(){if(!p_){for(let e of qr||[])e.kill();qr=[];return}return new Promise(async(e,t)=>{try{await Oi()}catch(r){t(r)}Ce.killDaemon((r,n)=>{r&&(Ce.disconnect(),t(r)),Ce.disconnect(),e(n)})})}a(wre,"kill");async function Cre(){try{await rB(),await nB(),await So(po.generateAllServiceConfigs())}catch(e){throw Ce?.disconnect(),e}}a(Cre,"startAllServices");async function TA(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case He.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=po.generateMainServerConfig();break;case He.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=po.generateNatsIngestServiceConfig();break;case He.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=po.generateNatsReplyServiceConfig();break;case He.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=po.generateNatsHubServerConfig(),await So(r,t),await Ai.removeNatsConfig(e);return;case He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=po.generateNatsLeafServerConfig(),await So(r,t),await Ai.removeNatsConfig(e);return;case He.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=po.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await So(r)}catch(r){throw Ce?.disconnect(),r}}a(TA,"startService");async function X0(){try{let e=await SA(),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 Ce?.disconnect(),e}}a(X0,"getUniqueServicesList");async function Dre(e=[]){try{let t=!1,r=await X0();for(let n=0,s=Object.values(r).length;n<s;n++){let o=Object.values(r)[n].name;e.includes(o)||(o===He.PROCESS_DESCRIPTORS.HDB?t=!0:await j0(o))}t&&await eB(He.PROCESS_DESCRIPTORS.HDB)}catch(t){throw Ce?.disconnect(),t}}a(Dre,"restartAllServices");async function Z0(e){if(qr?.find(r=>r.name===e))return!0;let t=await Tre.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(Z0,"isServiceRegistered");async function eB(e){let t=oh.get(He.CONFIG_PARAMS.THREADS_COUNT)??oh.get(He.CONFIG_PARAMS.THREADS),r=await J0(e),n=pre.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await mA(e),await TA(e)):e===He.PROCESS_DESCRIPTORS.HDB?await z0():await Q0(e)}a(eB,"reloadStopStart");var tB;async function rB(e=!1){for(let t in He.CLUSTERING_PROCESSES){let r=He.CLUSTERING_PROCESSES[t];await TA(r,e)}}a(rB,"startClusteringProcesses");async function nB(){tB=K0(He.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:He.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await ih.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await ih.updateLocalStreams();let e=await mre.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===He.PRE_4_0_0_VERSION){mo.info("Starting clustering upgrade 4.0.0 process"),K0(He.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(nB,"startClusteringThreads");async function Lre(){for(let e in He.CLUSTERING_PROCESSES)if(e!==He.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===He.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await tB.terminate();else{let t=He.CLUSTERING_PROCESSES[e];await mA(t)}}a(Lre,"stopClustering");async function Pre(){for(let e in He.CLUSTERING_PROCESSES){let t=He.CLUSTERING_PROCESSES[e];if(await Z0(t)===!1)return!1}return!0}a(Pre,"isClusteringRunning");async function Mre(){await Ai.generateNatsConfig(!0),await ih.reloadNATSHub(),await ih.reloadNATSLeaf(),await Ai.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Ai.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(Mre,"reloadClustering")});var lh={};Fe(lh,{compactOnStart:()=>Ure,copyDb:()=>uB});async function Ure(){S_.notify("Running compact on start"),console.log("Running compact on start");let e=(0,gA.get)(To.CONFIG_PARAMS.ROOTPATH),t=new Map,r=Dr();try{for(let n in r){if(n==="system")continue;let s;for(let l in r[n]){s=r[n][l].primaryStore.path;break}let i=(0,ah.join)(e,"backup",n+".mdb"),o=(0,ah.join)(e,To.DATABASES_DIR_NAME,n+"-copy.mdb"),c=await iB(n);console.log("Database",n,"before compact has a total record count of",c),t.set(n,{db_path:s,copy_dest:o,backup_dest:i,record_count:c}),await uB(n,o),console.log("Backing up",n,"to",i),await(0,Ia.move)(s,i,{overwrite:!0})}m_();for(let[n,{db_path:s,copy_dest:i}]of t)console.log("Moving copy compacted",n,"to",s),await(0,Ia.move)(i,s,{overwrite:!0}),await(0,Ia.remove)((0,ah.join)(e,To.DATABASES_DIR_NAME,`${n}-copy.mdb-lock`));m_()}catch(n){S_.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,RA.updateConfigValue)(To.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,Ia.move)(o,i,{overwrite:!0})}catch(c){console.error(c)}}throw m_(),n}for(let[n,{backup_dest:s,record_count:i}]of t){let o=!0,c=await iB(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}.
|
|
@@ -30,7 +30,7 @@ Database backup has not been removed and can be found here: ${s}`;S_.error(l),co
|
|
|
30
30
|
Connection: close\r
|
|
31
31
|
\r
|
|
32
32
|
`))}},25).unref()}o.close?.(()=>{if(Le.get(Tt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&Sp()==0)try{hx(Le.get(Tt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET))}catch{}clearInterval(c),setTimeout(()=>{console.log("forced close server",i,pp),o.cantCleanupProperly||Er.warn("Had to forcefully exit the thread",pp),process.exit(0)},5e3).unref()})}if(bx||process.env.DEV_MODE)try{require("inspector").close()}catch(i){Er.info("Could not close debugger",i)}}}).ref();let e=[];if(px&&!_ce)for(let t in Vs){let r=Vs[t];if(isNaN(t)&&Sp()==0){rce(t)&&hx(t),e.push(new Promise((s,i)=>{r.listen({path:t},()=>{s(),Er.info("Domain socket listening on "+t)}).on("error",i)}));continue}let n;try{n=px(+t,"::")}catch(s){console.error(`Unable to bind to port ${t}`,s);continue}e.push(new Promise((s,i)=>{r.listen({fd:n},()=>{s(),Er.trace("Listening on port "+t,pp)}).on("error",i)}))}Promise.all(e).then(()=>{J_?.postMessage({type:Tt.ITC_EVENT_TYPES.CHILD_STARTED})})})}a(Nx,"startServers");gx||Nx();function cb(e,t,r){let n=e?.read?e:new Jae({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=Vs[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=Vs[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):o<5?i(o+1):(Er.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}a(cb,"deliverSocket");var Sx=new Map;function Ece(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=Sx.get(s),r){case"connection":i=cb(void 0,t),Sx.set(s,i),i.write=(c,l,_)=>(J_.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),_&&_(),!0),i.end=(c,l,_)=>(J_.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),_&&_(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),J_.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(Ece,"proxyRequest");function lb(e,t,r=!0){!+t&&t!==Le.get(Tt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&(t=parseInt(Le.get(Tt.CONFIG_PARAMS.HTTP_PORT),10));let n=Vs[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",Tx),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else Vs[t]=e;e.on("unhandled",Tx)}a(lb,"registerServer");function yx(e){let t=[],r=parseInt(e?.securePort);return r&&t.push({port:r,secure:!0}),r=parseInt(e?.port),r&&t.push({port:r,secure:!1}),t.length===0&&(t=[],Le.get(Tt.CONFIG_PARAMS.HTTP_PORT)!=null&&t.push({port:Le.get(Tt.CONFIG_PARAMS.HTTP_PORT),secure:Le.get(Tt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),Le.get(Tt.CONFIG_PARAMS.HTTP_SECUREPORT)!=null&&t.push({port:Le.get(Tt.CONFIG_PARAMS.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&Le.get(Tt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:Le.get(Tt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET),secure:!1}),t}a(yx,"getPorts");function ub(e,t){for(let{port:r,secure:n}of yx(t))Ix(r,n,t?.isOperationsServer),typeof e=="function"?ob[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||r}):(e.isSecure=n,lb(e,r,!1)),Tp[r]=ab(ob,r),dce=ab(fce,r)}a(ub,"httpServer");function Ix(e,t,r){if(!wo[e]){let n=r?"operationsApi_network":"http",s={keepAliveTimeout:Le.get(n+"_keepAliveTimeout"),headersTimeout:Le.get(n+"_headersTimeout"),requestTimeout:Le.get(n+"_timeout")},i=Le.get(n+"_mtls"),o=Le.get(n+"_mtls_required");if(t){n=r?"operationsApi_":"";let l=Le.get(n+"tls_privateKey"),_=Le.get(n+"tls_certificate"),u=Le.get(n+"tls_certificateAuthority");Object.assign(s,{allowHTTP1:!0,key:ll(l),ciphers:Le.get("tls_ciphers"),cert:ll(_),ca:u&&ll(u),rejectUnauthorized:!!o,requestCert:!!i,ticketKeys:ice(),maxHeaderSize:Le.get(Tt.CONFIG_PARAMS.HTTP_MAXHEADERSIZE)})}let c=lce();wo[e]=(t?tce:Zae)(s,async(l,_)=>{try{let d=performance.now(),f=new Ax(l,_);r&&(f.isOperationsServer=!0);let E=await Tp[e](f);if(!E){if(f._nodeResponse.statusCode)return;E=wx(f)}if(c?E.headers?.set?.("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"):E.headers?.set?.("Server","HarperDB"),E.status===-1){for(let U of E.headers||[])_.setHeader(U[0],U[1]);return l.baseRequest=f,_.baseResponse=E,wo[e].emit("unhandled",l,_)}let h=E.status||200,m=performance.now(),S=m-d,g=E.body,R;if(!E.handlesHeaders){let U=E.headers||new Rx;g?g.length>=0&&(typeof g=="string"?U.set("Content-Length",Buffer.byteLength(g)):U.set("Content-Length",g.length),R=!0):(U.set("Content-Length","0"),R=!0);let v=`hdb;dur=${S.toFixed(2)}`;E.wasCacheMiss&&(v+=", miss"),ace(U,"Server-Timing",v,!0),_.writeHead(h,U&&(U[Symbol.iterator]?Array.from(U):U)),R&&_.end(g)}let A=f.handlerPath,P=f.method;if(z_(S,"duration",A,P,E.wasCacheMiss==null?void 0:E.wasCacheMiss?"cache-miss":"cache-hit"),cce(h<400,"success",A,P),!R)if(g?.pipe){g.pipe(_),g.destroy&&_.on("close",()=>{g.destroy()});let U=0;g.on("data",v=>{U+=v.length}),g.on("end",()=>{z_(performance.now()-m,"transfer",A,P),z_(U,"bytes-sent",A,P)})}else g?.then?g.then(U=>{_.end(U)},u):_.end(g)}catch(d){u(d)}function u(d){let f=d.headers;_.writeHead(d.statusCode||500,f&&(f[Symbol.iterator]?Array.from(f):f)),_.end(d.toString()),d.statusCode?d.statusCode===500?Er.warn(d):Er.info(d):Er.error(d)}a(u,"onError")}),i&&(wo[e].mtlsConfig=i),t&&(wo[e].on("secureConnection",l=>{l._parent.startTime&&z_(performance.now()-l._parent.startTime,"tls-handshake",e),z_(l.isSessionReused(),"tls-reused",e)}),wo[e].isSecure=!0),lb(wo[e],e)}return wo[e]}a(Ix,"getHTTPServer");function ab(e,t){let r=wx;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(ab,"makeCallbackChain");function wx(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new Rx}}a(wx,"unhandled");function hce(e,t){ub(e,{requestOnly:!0,...t})}a(hce,"onRequest");function pce(e,t){let r;if(t.securePort){let n=Le.get("tls_privateKey"),s=Le.get("tls_certificate"),i=t.mtls?.certificateAuthority||Le.get("tls_certificateAuthority");r=sce({ciphers:Le.get("tls_ciphers"),key:ll(n),cert:ll(s),ca:i&&ll(i),rejectUnauthorized:!!t.mtls?.required,requestCert:!!t.mtls},e),Vs[t.securePort]=r}return t.port&&(r=Xae(e),Vs[t.port]=r),r}a(pce,"onSocket");Object.defineProperty(ece.prototype,"upgrade",{get(){return"connection"in this.headers&&"upgrade"in this.headers&&this.headers.connection.startsWith("Upgrade")&&this.headers.upgrade.toLowerCase()=="websocket"},set(e){}});function mce(e,t){let r;for(let{port:n,secure:s}of yx(t)){mp[n]||(mp[n]=new nce({server:r=Ix(n,s)}),mp[n].on("connection",async(c,l)=>{try{let _=new Ax(l);_.isWebSocket=!0;let u=Tp[n](_),d=l.headers["sec-websocket-protocol"]||"",f=ib[n];if(d){let E;for(let h=0;h<f.length;h++){let m=f[h];m.protocol===d&&(E=!0,m.listener(c,_,u))}if(E)return}for(let E=0;E<f.length;E++){let h=f[E];h.protocol||h.listener(c,_,u)}}catch(_){Er.warn("Error handling WebSocket connection",_)}}),mp[n].on("error",c=>{console.log("Error in setting up WebSocket server",c)}));let i=t?.subProtocol||"",o=ib[n];o||(o=ib[n]=[]),o.push({listener:e,protocol:i}),Tp[n]=ab(ob,n)}return r}a(mce,"onWebSocket");function Tx(e,t){t.writeHead(404),t.end(`Not found
|
|
33
|
-
`)}a(Tx,"defaultNotFound")});var Bx={};Fe(Bx,{startHTTPThreads:()=>Tce,startSocketServer:()=>hb,updateWorkerIdleness:()=>vx});async function Tce(e=2,t){if(t)fb(0,1,!0);else{let{loadRootComponents:n}=Rp();if(e===0)return(0,Co.setMainIsWorker)(!0),await _b().startServers(),Promise.resolve([]);await n()}let r=(0,Px.checkMemoryLimit)();r&&!process.env.DEV_MODE&&(console.error(r),setInterval(()=>{Np.notify(r)},Sce).unref());for(let n=0;n<e;n++)fb(n,e);return Promise.all(Ux)}function fb(e,t=1,r){if(db++,(0,Co.startWorker)("server/threads/threadServer.js",{name:bp.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((o,c)=>{function l(_){_.type===bp.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(n.removeListener("message",l),o(n))}a(l,"onMessage"),n.on("message",l),n.on("error",c)});Ux.push(s),await s,ul.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",o=>{if(o.requestId){let c=Op.get(o.requestId);c&&c(o)}}),n.on("exit",i),n.on("shutdown",i);function i(){let o=ul.indexOf(n);o>-1&&ul.splice(o,1)}if(a(i,"removeWorker"),_l){let o=_l;_l=[];for(let c of o)Mx[c.localPort](null,c)}}}),r){let n=setInterval(()=>{Eb?Eb=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,Co.shutdownWorkers)(),db=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function hb(e=0,t){if(typeof e=="string")try{(0,yp.existsSync)(e)&&(0,yp.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=gce:r=Rce(t):r=pb;let n=(0,dl.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(n._handle){n._handle.onconnection=Mx[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),Eb=!0,r(o,(c,l)=>{if(!c){if(Cx){let u=o._socket||new dl.Socket({handle:o,writable:!0,readable:!0});Cx.deliverSocket(u,e,l),u.resume()}else db>0?(_l.length===0&&setTimeout(()=>{_l.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,_l.push(o)):(console.log("start up a dynamic thread to handle request"),fb(0));un(!1,"socket-routed");return}c.requests++;let _=o.fd;if(_>=0)c.postMessage({port:e,fd:_,data:l});else{let u=o._socket||new dl.Socket({handle:o,writable:!0,readable:!0});bce(u,c,e)}un(!0,"socket-routed")})};let s=ha();Np.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 pb(e,t){let r,n=0;for(let s of ul){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=Ap)return Ap=i,t(r);n=i}Ap=0,t(r)}function gce(e,t){let r={};e.getpeername(r);let n=r.address,s=fl.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);pb(e,o=>{fl.set(n,{worker:o,lastUsed:i}),t(o)})}function Rce(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new dl.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",o=>{n.readStop();let l=o.toString("latin1").match(t)?.[1],_=fl.get(l),u=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=u,s(_.worker);pb(n,d=>{fl.set(l,{worker:d,lastUsed:u}),s(d,o)})})}a(r,"findByHeaderAffinity")}function vx(){Ap=0;for(let e of ul)e.expectedIdle=e.recentELU.idle+Ace,e.requests=1;ul.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function bce(e,t,r){let n=Oce++;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(),Op.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")),Op.delete(n)),s.event=="destroy"&&(e.destroy(),Op.delete(n))})}var Co,dl,bp,Np,yp,Lx,Px,ul,_l,Mx,Cx,db,Ux,Sce,Eb,Ap,Dx,fl,Ace,Op,Oce,mb=Oe(()=>{Co=B(et()),dl=require("net"),bp=B(D()),Np=B(x()),yp=require("fs");pi();Lx=require("worker_threads"),Px=B(aa()),ul=[],_l=[],Mx=[],db=0,Ux=[];Lx.isMainThread&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});Sce=6e5;a(Tce,"startHTTPThreads");a(fb,"startHTTPWorker");a(hb,"startSocketServer");Ap=0;a(pb,"findMostIdleWorker");Dx=36e5,fl=new Map;a(gce,"findByRemoteAddressAffinity");a(Rce,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of fl)r.lastUsed+Dx<e&&fl.delete(t)},Dx).unref();Ace=1e3;a(vx,"updateWorkerIdleness");(0,Co.setMonitorListener)(vx);Op=new Map,Oce=1;a(bce,"proxySocket")});var xx=T((TNe,qx)=>{"use strict";var Nce=require("cluster"),Fa=X();Fa.initSync();var Gx=D(),ENe=require("util"),Ui=x(),hNe=require("fs"),yce=require("fastify"),pNe=ha(),Ice=require("@fastify/cors"),wce=require("@fastify/compress"),Cce=require("@fastify/static"),Dce=TO(),Lce=require("path"),{PACKAGE_ROOT:Pce}=D(),Mce=Pn(),Uce=K(),vce=wr(),Bce=aa(),{server:Hce}=(Or(),ie(Wo)),{node_request_key:mNe}=(hp(),ie(sb)),{authHandler:Gce,handlePostRequest:qce,serverErrorHandler:xce,reqBodyValidationHandler:Fce}=fp(),SNe=require("net"),{registerContentHandlers:kce}=(Wc(),ie(oG)),$ce=6e4,Vce=1024*1024*1024,Yce="TRUE",{CONFIG_PARAMS:X_}=Gx,El;qx.exports={hdbServer:Hx,start:Hx};async function Hx(e){try{Ui.info("In Fastify server"+process.cwd()),Ui.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Ui.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=Nce.isMaster,await Kce();let t=e.securePort>0;El=Wce(t),await El.ready(),e||(e={}),e.isOperationsServer=!0;try{Hce.http(El.server,e),El.server.closeIdleConnections||await El.listen({port:0,host:"::"})}catch(r){throw El.close(),Ui.error(r),Ui.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),Ui.fatal(t),process.exit(1)}}a(Hx,"operationsServer");async function Kce(){Ui.trace("Configuring HarperDB process."),Mce.setSchemaDataToGlobal(),await vce.setUsersToGlobal(),await Bce.getLicense()}a(Kce,"setUp");function Wce(e){Ui.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=Qce(e),r=yce(t);r.server.headersTimeout=zce(),r.setErrorHandler(xce);let n=jce();n&&r.register(Ice,n),r.register(function(i,o,c){i.setNotFoundHandler(function(l,_){r.server.emit("unhandled",l.raw,_.raw)}),c()}),r.register(Dce),r.register(wce),r.register(Cce,{root:Lce.join(Pce,"studio/build-local")}),kce(r);let s=Fa.get(Gx.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!Uce.isEmpty(s)&&s.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[Fce,Gce],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),qce(i,o)}),r.get("/health",()=>"HarperDB is running."),Ui.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(Wce,"buildServer");function Qce(e){let t=Fa.get(X_.OPERATIONSAPI_NETWORK_TIMEOUT),r=Fa.get(X_.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:Vce,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}a(Qce,"getServerOptions");function jce(){let e=Fa.get(X_.OPERATIONSAPI_NETWORK_CORS),t=Fa.get(X_.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===Yce)&&(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(jce,"getCORSOpts");function zce(){return Fa.get(X_.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??$ce}a(zce,"getHeaderTimeoutConfig")});var Ob={};Fe(Ob,{disableNATS:()=>Xce,publishToStream:()=>Cp,setNATSReplicator:()=>Sb,setPublishToStream:()=>Zce,setSubscription:()=>Ab,start:()=>Jce});function Jce(){Z_.default.get(ed.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&tle()}function Xce(e=!0){Yx=e}function Zce(e,t){Cp=e,Ab=t}function tle(){if(Yx||process.env._DISABLE_NATS)return;let e=Dr(),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];Sb(s,r,i)}}bb((r,n)=>{Sb(r.tableName,r.databaseName,r),n&&Wx(r)}),!Fx&&(Fx=!0)}function Sb(e,t,r){if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.sources.some(s=>s?.isNATSReplicator))return;r.sourcedFrom(class extends Jt{static{a(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[Ue],record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[Ue]})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[Ue],record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this[Ue],record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[Ue]})}static defineSchema(i){Wx(i)}static subscribe(){let i=new Zn;return Ab(t,e,i),i}static subscribeOnThisThread(i){return i<(Z_.default.get(ed.default.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??ele)}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 Ip(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=Kx;return i}a(n,"getNATSTransaction")}function Wx(e){let t=Z_.default.get(ed.default.CONFIG_PARAMS.CLUSTERING_NODENAME);Cp(`${gb.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,Rb.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 kx,gb,Rb,$x,Vx,Z_,ed,wp,Yx,Cp,Ab,ele,Kx,Fx,Ip,Tb,Qx=Oe(()=>{ge();es();kx=B(pt()),gb=B(Xe()),Rb=B(ui());zl();$x=B(Xg()),Vx=B(Ar()),Z_=B(X()),ed=B(D()),wp=B(x());a(Jce,"start");a(Xce,"disableNATS");Cp=kx.publishToStream,Ab=$x.setSubscription;a(Zce,"setPublishToStream");ele=2;a(tle,"assignReplicationSource");a(Sb,"setNATSReplicator");a(Wx,"publishSchema");Ip=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=Z_.default.get(ed.default.CONFIG_PARAMS.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writes_by_db){let o=[],c=[],l,_;for(let u of i){let d=u.table,f=u.operation=="put"?"upsert":u.operation;l||(wp.trace(`Sending transaction event ${f}`),_=l={operation:f,schema:s,table:d,__origin:{user:this.user?.username,timestamp:t,node_name:r}},l.hash_values=c,f!=="delete"&&f!=="invalidate"&&(l.records=o)),l.table===d&&l.operation===f?(o.push(u.record),c.push(u.id)):_=_.next={operation:f,table:d,id:u.id,record:u.record},u.expiresAt&&(_.expiresAt=u.expiresAt)}l&&n.push(Cp(`${gb.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,Rb.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(u=>{throw wp.error("An error has occurred trying to replicate transaction",l,u),u.statusCode=504,u}))}return Promise.all(n)}},Tb=class extends Ip{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,Vx.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};Kx=new Tb});async function Xx({clientId:e,user:t,clean:r,will:n}){let s;if(e&&!r){let i=await Nb.get(e,{returnNonexistent:!0});s=new wb(e,t,i),i&&(s.sessionWasPresent=!0)}else{if(e){let i=await Nb.get(e);i&&i.delete()}s=new Lp(e,t)}return n&&(n.id=e,n.user={username:t?.username},td.put(n)),s}function yb(){return Dp++,Dp>65500&&(Dp=1),Dp}function Ib(e,t,r){let{topic:n,retain:s}=e;e.data=t,e.async=!0,r.authorize=!0;let i=go.getMatch(n);if(!i)throw new Error(`Can not publish to topic ${n} as it does not exist, no resource has been defined to handle this topic`);e.url=i.relativeURL;let o=i.Resource;return Ze(r,()=>s?t===void 0?o.delete(e,r):o.put(e,e.data,r):o.publish(e,e.data,r))}var jx,Do,zx,Jx,Nb,td,Dp,Lp,wb,Zx=Oe(()=>{ge();O_();jx=B(Ar()),Do=B(x());fa();zx=B(et()),Jx=B(_b());Or();Nb=Et({database:"system",table:"hdb_durable_session",attributes:[{name:"id",isPrimaryKey:!0},{name:"subscriptions",type:"array",elements:{attributes:[{name:"topic"},{name:"qos"},{name:"startTime"},{name:"acks"}]}}]}),td=Et({database:"system",table:"hdb_session_will",attributes:[{name:"id",isPrimaryKey:!0},{name:"topic",type:"string"},{name:"data"},{name:"qos",type:"number"},{name:"retain",type:"boolean"},{name:"user",type:"any"}]});(0,zx.getWorkerIndex)()===0&&(async()=>{await Jx.when_components_loaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of td.search({})){let t=e.data,r=Object.assign({},e);r.user?.username&&(r.user=await ct.getUser(r.user.username)),Ze(r,()=>{try{Ib(r,t,r)}catch{(0,Do.warn)("Failed to publish will",t)}td.delete(e.id,r)})}})();a(Xx,"getSession");Dp=1;a(yb,"getNextMessageId");Lp=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;request;socket;subscriptions=[];awaitingAcks;sessionWasPresent;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,n){let{topic:s,rh:i,startTime:o}=t,c=s.indexOf("?"),l,_;if(c>-1?(l=s.slice(c),_=s.slice(0,c)):_=s,!_)throw new Error("No topic provided");if(_.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");let u=this.subscriptions.find(g=>g.topic===s),d;u?(d=i>0,u.end(),this.subscriptions.splice(this.subscriptions.indexOf(u),1)):d=i===2;let f={search:l,async:!0,user:this.user,startTime:o,omitCurrent:d,url:""};o&&(0,Do.trace)("Resuming subscription from",s,"from",o);let E=go.getMatch(_);if(!E){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(f.url=E.relativeURL,f.url.indexOf("+")>-1||f.url.indexOf("#")>-1){let g=f.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(f.isCollection=!0,g.indexOf("+")===g.length-1)f.onlyChildren=!0,f.url="/"+g.slice(0,g.length-1);else{let R=g.split("/"),A;for(let v=0;v<R.length;v++)if(R[v].indexOf("+")>-1)if(R[v]==="+")A=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&A)throw new Error("Filters can not be combined");let P=!0;R[R.length-1]==="#"&&(R.length--,P=!1),A&&(n=a(v=>{let k=v.id;if(!Array.isArray(k)||P&&k.length!==R.length)return!1;for(let H=0;H<R.length;H++)if(R[H]!=="+"&&R[H]!==k[H])return!1;return!0},"filter"));let U=R.indexOf("+");f.url="/"+(U>-1?R.slice(0,U):R).concat("").join("/")}}let h=E.path,m=E.Resource,S=await Ze(f,async()=>{let g=this.createContext();g.topic=s,g.retainHandling=i;let R=await m.subscribe(f,g);if(!R)throw new Error(`No subscription was returned from subscribe for topic ${s}`);if(!R[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);return(async()=>{for await(let A of R)try{let P;if(A.type&&A.type!=="put"&&A.type!=="delete"&&A.type!=="message"&&A.type!=="patch"||n&&!n(A))continue;r?(A.topic=s,P=this.needsAcknowledge(A)):(A.acknowledge?.(),P=yb());let U=A.id;Array.isArray(U)&&(U=Yc(U)),U==null&&(U=""),this.listener(h+"/"+U,A.value,P,t)}catch(P){(0,Do.warn)(P)}})(),R});return S.topic=s,S.qos=t.qos,this.subscriptions.push(S),S}resume(){}needsAcknowledge(t){let r=yb();return t.acknowledge&&(this.awaitingAcks||(this.awaitingAcks=new Map),this.awaitingAcks.set(r,t.acknowledge)),r}acknowledge(t){let r=this.awaitingAcks?.get(t);r&&(this.awaitingAcks.delete(t),r())}async removeSubscription(t){let r=this.subscriptions.find(n=>n.topic===t);if(r)return r.end(),this.subscriptions.splice(this.subscriptions.indexOf(r),1),!0}async publish(t,r){return Ib(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){let r=this.createContext();Ze(r,async()=>{if(!t){let n=await td.get(this.sessionId);n?.doesExist()&&await Ib(n,n.data,r)}await td.delete(this.sessionId)}).catch(n=>{(0,Do.warn)(`Error publishing MQTT will for ${this.sessionId}`,n)});for(let n of this.subscriptions)n.end();this.subscriptions=[]}};a(Ib,"publish");wb=class extends Lp{static{a(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,n){super(t,r),this.sessionRecord=n||{id:t,subscriptions:[]}}async resume(){for(let t of this.sessionRecord.subscriptions||[])await this.resumeSubscription({omitCurrent:!0,topic:t.topic,qos:t.qos,startTime:t.startTime},!0,t.acks?r=>!t.acks.includes(r.timestamp):null)}resumeSubscription(t,r,n){return super.addSubscription(t,r,n)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=yb(),n={topic:t.topic,timestamp:t.timestamp};return t.acknowledge&&(n.acknowledge=t.acknowledge),this.awaitingAcks.set(r,n),r}acknowledge(t){let r=this.awaitingAcks.get(t);this.awaitingAcks.delete(t),r.acknowledge?.();let n=r.topic;for(let[,s]of this.awaitingAcks)if(s.topic===n&&s.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===n){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,Do.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,jx.getNextMonotonicTime)()),(0,Do.trace)("Added durable subscription",t.topic,r),{qos:t.qos,topic:t.topic,startTime:r}}),Nb.put(this.sessionRecord)}}});var Db={};Fe(Db,{bypassAuth:()=>rle,start:()=>nle});function rle(){nF=!0}function nle({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){let o=e.mqtt={requireAuthentication:i,sessions:new Set},c,l=r?.mtls;return n&&(c=e.ws((_,u,d)=>{if(_.protocol==="mqtt"){hr.debug("Received WebSocket connection for MQTT from",_._socket.remoteAddress);let{onMessage:f,onClose:E}=tF(_,(h,m)=>{if(_.send(h),m&&_._socket.writableNeedDrain)return new Promise(S=>this._socket.once("drain",S))},u,Promise.resolve(d).then(()=>u?.user),o);_.on("message",f),_.on("close",E),_.on("error",h=>{hr.info("WebSocket error",h)})}},Object.assign({subProtocol:"mqtt"},n))),(t||s)&&(c=e.socket(async _=>{let u;if(hr.debug(`Received ${_.getCertificate?"SSL":"TCP"} connection for MQTT from ${_.remoteAddress}`),l){if(_.authorized)try{let E=l.user;if(E!==null){(E===void 0||E==="Common Name"||E==="CN")&&(E=_.getPeerCertificate().subject.CN);try{u=await e.getUser(E,null,null),(0,hl.get)(sr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&Mp.notify({username:u?.username,status:sr.AUTH_AUDIT_STATUS.SUCCESS,type:sr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT mTLS",remote_address:_.remoteAddress})}catch(h){throw(0,hl.get)(sr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&Mp.error({username:E,status:sr.AUTH_AUDIT_STATUS.FAILURE,type:sr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:_.remoteAddress}),h}}else hr.debug("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",_.remoteAddress)}catch(E){hr.error(E)}else if(l.required)return hr.info(`Unauthorized connection attempt, no authorized client certificate provided, error: ${_.authorizationError}`),_.end()}!u&&nF&&_.remoteAddress.includes("127.0.0.1")&&(u=await(0,rF.getSuperUser)(),hr.debug("Auto-authorizing local connection",u?.username));let{onMessage:d,onClose:f}=tF(_,E=>_.write(E),null,u,o);_.on("data",d),_.on("close",f),_.on("error",E=>{hr.info("Socket error",E)})},{port:t,securePort:s,mtls:l})),c}function tF(e,t,r,n,s){eF||(eF=!0,xu(d=>{Pp>0&&d.push({metric:"mqtt-connections",connections:Pp,byThread:!0})}));let i;Pp++;let o,c={protocolVersion:4},l=(0,Up.parser)({protocolVersion:5});function _(d){l.parse(d)}a(_,"onMessage");function u(){Pp--,i||(i=!0,o?.disconnect(),s.sessions.delete(o),Un(!1,"connection","mqtt","disconnect"),hr.debug("MQTT connection was closed",e.remoteAddress))}return a(u,"onClose"),l.on("packet",async d=>{n?.then&&(n=await n),o?.then&&await o;try{switch(d.cmd){case"connect":if(c.protocolVersion=d.protocolVersion,d.username)try{n=await ct.getUser(d.username,d.password.toString(),r),(0,hl.get)(sr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&Mp.notify({username:n?.username,status:sr.AUTH_AUDIT_STATUS.SUCCESS,type:sr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,hl.get)(sr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&Mp.error({username:d.username,status:sr.AUTH_AUDIT_STATUS.FAILURE,type:sr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),f({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return Un(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(d,n),d.will){let A=e.deserialize||(e.deserialize=Ua(r?.headers.get?.("content-type")));d.will.data=d.will.payload?.length>0?A(d.will.payload):void 0,delete d.will.payload}o=Xx({user:n,...d}),o=await o,o.socket=e,r&&(o.request=r),s.sessions.add(o)}catch(A){return hr.error(A),Un(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:A.code||5,returnCode:A.code||128})}Un(!0,"connection","mqtt","connect"),f({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((A,P,U,v)=>{try{let k=A.indexOf("/",1),H=k>0?A.slice(0,k):A;f({cmd:"publish",topic:A,payload:E(P),messageId:U||Math.floor(Math.random()*1e8),qos:v.qos},H)}catch(k){hr.error(k),o?.disconnect(),s.sessions.delete(o)}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let h=[];for(let A of d.subscriptions){let P;try{P=(await o.addSubscription(A,A.qos>=1)).qos||0}catch(U){hr.error(U),P=c.protocolVersion<5?128:U.statusCode===403?135:U.statusCode===404?143:128}h.push(P)}await o.committed,f({cmd:"suback",granted:h,messageId:d.messageId});break;case"unsubscribe":{let A=[];for(let P of d.unsubscriptions)A.push(o.removeSubscription(P)?0:17);f({cmd:"unsuback",granted:A,messageId:d.messageId});break}case"pubrel":f({cmd:"pubcomp",messageId:d.messageId,reasonCode:0});return;case"publish":let m=d.qos===2?"pubrec":"puback",S=e.deserialize||(e.deserialize=Ua(r?.headers.get?.("content-type"))),g=d.payload?.length>0?S(d.payload):void 0,R;try{R=await o.publish(d,g)}catch(A){hr.warn(A),d.qos>0&&f({cmd:m,messageId:d.messageId,reasonCode:128},d.topic);break}d.qos>0&&f({cmd:m,messageId:d.messageId,reasonCode:R===!1?144:0},d.topic);break;case"pubrec":f({cmd:"pubrel",messageId:d.messageId,reasonCode:0});break;case"pubcomp":case"puback":o.acknowledge(d.messageId);break;case"pingreq":f({cmd:"pingresp"});break;case"disconnect":i=!0,o?.disconnect(!0),s.sessions.delete(o),Un(!0,"connection","mqtt","disconnect"),hr.debug("Received disconnect command, closing MQTT session",e.remoteAddress),e.close?e.close():e.end();break}}catch(h){hr.error(h),f({cmd:"disconnect"})}function f(h,m){let S=(0,Up.generate)(h,c);t(S),un(S.length,"bytes-sent",m,h.cmd,"mqtt")}a(f,"sendPacket");function E(h){return Ao(h,r)}a(E,"serialize")}),{onMessage:_,onClose:u}}var Up,rF,hl,sr,Cb,Mp,hr,nF,eF,Pp,sF=Oe(()=>{Up=require("mqtt-packet");Zx();rF=B(wr());Wc();pi();Or();hl=B(X()),sr=B(D()),Cb=B(x()),Mp=(0,Cb.loggerWithTag)("auth-event"),hr=(0,Cb.loggerWithTag)("mqtt"),nF=(0,hl.get)(sr.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(rle,"bypassAuth");a(nle,"start");Pp=0;a(tF,"onSocket")});var Ih={};Fe(Ih,{component_errors:()=>ml,loadComponent:()=>vp,loadComponentDirectories:()=>fF,setErrorReporter:()=>ale});function fF(e,t){t&&(Pb=t),e&&(Mb=e);let r=[];if((0,ps.existsSync)(Lb)){let s=(0,ps.readdirSync)(Lb,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,wt.join)(Lb,o);r.push(vp(c,Pb,"hdb",!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(vp(n,Pb,n,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{dF=!0})}function ale(e){nd=e}async function vp(e,t,r,n,s,i){if(!oF.has(e)){oF.set(e,!0),s&&(Mb=s);try{let o;n&&(ml=new Map);let c=(0,wt.join)(e,n?"harperdb-config.yaml":"config.yaml");(0,ps.existsSync)(c)?o=n?(0,_F.getConfigObj)():(0,aF.parseDocument)((0,ps.readFileSync)(c,"utf8"),{simpleKeys:!0}).toJSON():o=Ub;let l=[],_=n;for(let u in o){let d=o[u];if(ml.set(n?u:(0,wt.basename)(e),!1),!d)continue;let f,E=d.package;try{if(E){let R=e,A;for(;!(0,ps.existsSync)(A=(0,wt.join)(R,"node_modules",u));)if(R=(0,wt.dirname)(R),R.length<(0,uF.getHdbBasePath)().length){A=null;break}if(A)f=await vp(A,t,r,!1),_=!0;else throw new Error(`Unable to find package ${u}:${E}`)}else f=ole[u];if(!f)continue;l.push(f);let h=a(R=>(R.origin=r,Et(R)),"ensureTable"),m=d.network||(d.port||d.securePort)&&d,S=m?.securePort||m?.https&&m.port,g=!m?.https&&m?.port;if(pl.isMainThread&&(f=await f.startOnMainThread?.({server:ct,ensureTable:h,port:g,securePort:S,resources:t,...d})||f,n&&m))for(let R of[g,S])try{if(+R&&!iF.includes(R)){let A=vb.get(Bb.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);A&&rd.default.warn("Session affinity is not recommended and may cause memory leaks"),(A||!Ep)&&(iF.push(R),hb(R,A))}}catch(A){console.error("Error listening on socket",R,A,u)}if(t.isWorker&&(f=await f.start?.({server:ct,ensureTable:h,port:g,securePort:S,resources:t,...d})||f),Mb.set(f,!0),(f.handleFile||f.handleDirectory)&&d.files){if(d.files.includes(".."))throw(0,lF.handleHDBError)("Can not reference parent directories");let R=(0,wt.join)(e,d.files).replace(/\\/g,"/"),A=R.indexOf("/*");if(A>-1&&d.files!==Ub[u]?.files&&!(0,ps.existsSync)(R.slice(0,A)))throw new Error(`The path '${R.slice(0,A)}' does not exist and cannot be used as the base of the resolved 'files' path value '${d.files}'`);let P=(0,wt.basename)(e),U=d.path||"/";U=U.startsWith("/")?U:U.startsWith("./")?"/"+P+U.slice(2):U==="."?"/"+P:"/"+P+"/"+U;let v,k,H;if(d.root){let z=d.root;z.startsWith("/")&&(z=z.slice(1)),z.endsWith("/")&&(z=z.slice(0,-1)),z+="/",k=(0,wt.join)(e,z)}else(H=R.indexOf("/*"))>-1&&(k=R.slice(0,H+1),v=(0,wt.relative)(e,k));let j=!1;if(pl.isMainThread&&f.setupDirectory&&(j=await f.setupDirectory?.(U,k,t)),t.isWorker&&f.handleDirectory&&(j=await f.handleDirectory?.(U,k,t)),j)continue;for(let z of await(0,cF.default)(R,{onlyFiles:!1,objectMode:!0})){let{path:J,dirent:Se}=z;_=!0;let ue=(0,wt.relative)(e,J).replace(/\\/g,"/");if(v)if(ue.startsWith(v))ue=ue.slice(v.length+1);else throw new Error(`The root path '${d.root}' does not reference a valid part of the file path '${ue}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`);let Ee=U+(U.endsWith("/")?"":"/")+ue;try{if(Se.isFile()){let Me=await ile(J);pl.isMainThread&&await f.setupFile?.(Me,Ee,J,t),t.isWorker&&await f.handleFile?.(Me,Ee,J,t)}else pl.isMainThread&&await f.setupDirectory?.(Ee,J,t),t.isWorker&&await f.handleDirectory?.(Ee,J,t)}catch(Me){Me.message=`Could not load ${Se.isFile()?"file":"directory"} '${J}'${d.module?" using '"+d.module+"'":""} for application '${e}' due to: ${Me.message}`,nd?.(Me),((0,Sl.getWorkerIndex)()===0?console:rd.default).error(Me),t.set(d.path||"/",new sd(Me)),ml.set(n?u:(0,wt.basename)(e),Me.message)}}}}catch(h){h.message=`Could not load component '${u}' for application '${(0,wt.basename)(e)}' due to: ${h.message}`,nd?.(h),((0,Sl.getWorkerIndex)()===0?console:rd.default).error(h),t.set(d.path||"/",new sd(h),null,!0),ml.set(n?u:(0,wt.basename)(e),h.message)}}if(pl.isMainThread&&!dF&&i&&(0,Sl.watchDir)(e,async()=>fF()),o.extensionModule)return await ef((0,wt.join)(e,o.extensionModule));if(!_&&t.isWorker){let u=`${e} did not load any modules, resources, or files, is this a valid component?`;nd?.(new Error(u)),((0,Sl.getWorkerIndex)()===0?console:rd.default).error(u),ml.set((0,wt.basename)(e),u)}}catch(o){console.error(`Could not load application directory ${e}`,o),o.message=`Could not load application due to ${o.message}`,nd?.(o),t.set("",new sd(o))}}}var ps,wt,pl,aF,vb,Bb,cF,Sl,rd,lF,uF,sle,_F,ile,Lb,Mb,dF,Pb,ml,ole,Ub,iF,oF,nd,sd,wh=Oe(()=>{ps=require("fs"),wt=require("path"),pl=require("worker_threads"),aF=require("yaml"),vb=B(X()),Bb=B(D());pI();gI();RI();gG();ax();fx();cF=B(require("fast-glob")),Sl=B(et()),rd=B(x());ES();Or();lF=B(oe());es();ge();mb();uF=B(X()),sle=B(xx());Th();Qx();sF();_F=B(ut());hp();({readFile:ile}=ps.promises),Lb=vb.get(Bb.CONFIG_PARAMS.COMPONENTSROOT),Mb=new Map,ml=new Map;a(fF,"loadComponentDirectories");ole={REST:Yh,rest:Yh,graphqlSchema:fS,jsResource:pS,fastifyRoutes:ZO,login:SS,static:eb,operationsApi:sle,customFunctions:{},http:{},clustering:Ob,authentication:N_,mqtt:Db},Ub={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(Ub,"static",{value:{files:"web/**"}});iF=[],oF=new Map;a(ale,"setErrorReporter");a(vp,"loadComponent");sd=class extends Jt{constructor(r){super();this.error=r}static{a(this,"ErrorResource")}get(){throw this.error}post(){throw this.error}put(){throw this.error}delete(){throw this.error}connect(){throw this.error}getResource(){return this}publish(){throw this.error}subscribe(){throw this.error}}});var Rp=T((jNe,hF)=>{var{isMainThread:EF}=require("worker_threads"),{getTables:cle}=(ge(),ie(ke)),{loadComponentDirectories:lle,loadComponent:ule}=(wh(),ie(Ih)),{resetResources:_le}=(O_(),ie(CB)),dle=MA(),fle=ut(),{dirname:Ele}=require("path"),{getConnection:hle}=pt(),ple=X(),mle=D(),Hb=new Map;async function Sle(e=!1){!EF&&ple.get(mle.CONFIG_PARAMS.CLUSTERING_ENABLED)&&hle();try{EF&&await dle()}catch(n){console.error(n)}let t=_le();cle(),t.isWorker=e,await ule(Ele(fle.getConfigFilePath()),t,"hdb",!0,Hb),await lle(Hb,t);let r=[];for(let[n]of Hb)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}a(Sle,"loadRootComponents");hF.exports.loadRootComponents=Sle});var et=T((JNe,Po)=>{"use strict";var{Worker:Tle,MessageChannel:gle,parentPort:Ys,isMainThread:kb,threadId:Rle,workerData:vi}=require("worker_threads"),{PACKAGE_ROOT:Ale}=D(),{join:TF,isAbsolute:Ole,extname:ble}=require("path"),{server:gF}=(Or(),ie(Wo)),{watch:Nle,readdir:yle}=require("fs/promises"),{totalmem:pF}=require("os"),id=D(),RF=X(),Bi=x(),{randomBytes:Ile}=require("crypto"),{_assignPackageExport:wle}=require("../index"),Cle=D(),mF=1024*1024,Lo=[],kn=[],Dle=50,$b=1e4,Lle="restart",AF="request_thread_info",OF="resource_report",bF="thread_info",NF="added-port",Ple="ack",Gb;wle("threads",kn);Po.exports={startWorker:qb,restartWorkers:Yb,shutdownWorkers:Hle,workers:Lo,setMonitorListener:Yle,onMessageFromWorkers:Gle,onMessageByType:PF,broadcast:xle,broadcastWithAcknowledgement:kle,setChildListenerByType:Ble,getWorkerIndex:yF,getWorkerCount:IF,getTicketKeys:CF,setMainIsWorker:Ule,setTerminateTimeout:Mle,restartNumber:vi?.restartNumber||1};kn.onMessageByType=PF;kn.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=kn.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};var Vb;function Mle(e){$b=e}a(Mle,"setTerminateTimeout");function yF(){return vi?vi.workerIndex:Vb?0:void 0}a(yF,"getWorkerIndex");function IF(){return vi?vi.workerCount:Vb?1:void 0}a(IF,"getWorkerCount");function Ule(e){Vb=e}a(Ule,"setMainIsWorker");var wF=1,Bp;function CF(){return Bp||(Bp=kb?Ile(48):vi.ticketKeys,Bp)}a(CF,"getTicketKeys");Object.defineProperty(gF,"workerIndex",{get(){return yF()}});Object.defineProperty(gF,"workerCount",{get(){return IF()}});var DF={[AF](e,t){$le(t)},[OF](e,t){Vle(t,e)}};function qb(e,t={}){let r=process.constrainedMemory?.()||pF();r=Math.min(r,pF(),2e4*mF);let n=RF.get(id.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/mF/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],o=[];for(let l of kn){let _=new gle;_.existingPort=l,i.push(_),o.push(_.port2)}ble(e)||(e+=".js");let c=new Tle(Ole(e)?e:TF(Ale,e),Object.assign({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:wF=t.threadCount,name:t.name,restartNumber:Po.exports.restartNumber,ticketKeys:CF()},transferList:o},t));for(let{port1:l,existingPort:_}of i)_.postMessage({type:NF,port:l,threadId:c.threadId},[l]);return Gp(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>qb(e,t),c.on("error",l=>{console.error("Worker error:",l),Bi.error("Worker error:",l)}),c.on("exit",l=>{Lo.splice(Lo.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<Dle?(t.unexpectedRestarts=c.unexpectedRestarts+1,qb(e,t)):Bi.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",l=>{DF[l.type]?.(l,c)}),Lo.push(c),Wle(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(qb,"startWorker");var vle=[id.THREAD_TYPES.HTTP];async function Yb(e=null,t=Math.max(wF>3,1),r=!0){if(kb){if(r){let{loadRootComponents:o}=Rp();await o()}Po.exports.restartNumber++,t<1&&(t=t*Lo.length);let n=[],s=[];for(let o of Lo.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;Bi.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:Po.exports.restartNumber,type:id.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=vle.indexOf(o.name)>-1,l=new Promise(_=>{let u=setTimeout(()=>o.terminate(),$b*2).unref();o.on("exit",()=>{clearTimeout(u),n.splice(n.indexOf(l)),!c&&r&&o.startCopy(),_()})});if(n.push(l),c&&r){let _=o.startCopy(),u=new Promise(d=>{let f=a(E=>{E.type===Cle.ITC_EVENT_TYPES.CHILD_STARTED&&(Bi.trace("Worker has started",_.threadId),d(),s.splice(s.indexOf(u)),_.off("message",f))},"startListener");Bi.trace("Waiting for worker to start",_.threadId),_.on("message",f)});s.push(u),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}=wa();r&&(e==="http"||!e)&&RF.get(id.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else Ys.postMessage({type:Lle,workerType:e})}a(Yb,"restartWorkers");function Ble(e,t){DF[e]=t}a(Ble,"setChildListenerByType");function Hle(e){return Yb(e,1/0,!1)}a(Hle,"shutdownWorkers");var LF=[];function Gle(e){LF.push(e)}a(Gle,"onMessageFromWorkers");var xb=new Map;function PF(e,t){let r=xb.get(e);r||xb.set(e,r=[]),r.push(t)}a(PF,"onMessageByType");var qle=10;async function xle(e){let t=0;for(let r of kn)try{r.postMessage(e),t++>qle&&(t=0,await new Promise(setImmediate))}catch(n){Bi.error("Unable to send message to worker",n)}}a(xle,"broadcast");var Hp=new Map,Fle=1;function kle(e){return new Promise(t=>{let r=0;for(let n of kn)try{let s=Fle++,i=a(()=>{Hp.delete(s),--r===0&&t(),n!==Ys&&--n.refCount===0&&n.unref()},"ack_handler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,Hp.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,o]of Hp)o.port===n&&o()})),n.postMessage(e),r++}catch(s){Bi.error("Unable to send message to worker",s)}r===0&&t()})}a(kle,"broadcastWithAcknowledgement");function $le(e){e.postMessage({type:bF,workers:MF()})}a($le,"sendThreadInfo");function MF(){let e=Date.now();return Lo.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(MF,"getChildWorkerInfo");function Vle(e,t){e.resources=t,e.resources.updated=Date.now()}a(Vle,"recordResourceReport");var Fb;function Yle(e){Fb=e}a(Yle,"setMonitorListener");var Kle=1e3,SF=!1;function Wle(){SF||(SF=!0,setInterval(()=>{for(let e of Lo){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}Fb&&Fb()},Kle).unref())}a(Wle,"startMonitoring");var Qle=1e3;if(Ys){Gp(Ys);for(let e=0,t=vi.addPorts.length;e<t;e++){let r=vi.addPorts[e];r.threadId=vi.addThreadIds[e],Gp(r)}setInterval(()=>{let e=process.memoryUsage();Ys.postMessage({type:OF,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Qle).unref(),Gb=a(()=>new Promise((e,t)=>{Ys.on("message",r),Ys.postMessage({type:AF});function r(n){n.type===bF&&(Ys.off("message",r),e(n.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else Gb=MF;Po.exports.getThreadInfo=Gb;function Gp(e,t){kn.push(e),e.on("message",r=>{if(r.type===NF)r.port.threadId=r.threadId,Gp(r.port);else if(r.type===Ple){let n=Hp.get(r.id);n&&n()}else{for(let s of LF)s(r,e);let n=xb.get(r.type);if(n)for(let s of n)try{s(r,e)}catch(i){Bi.error(i)}}}).on("close",()=>{kn.splice(kn.indexOf(e),1)}).on("exit",()=>{kn.splice(kn.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(Gp,"addPort");if(kb){let e,t,r=a(async(n,s)=>{s&&(e=s);for(let i of await yle(n,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(TF(n,i.name));try{for await(let{filename:i}of Nle(n,{persistent:!1}))t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await Yb(),console.log("Reloaded HarperDB components")},100)}catch(i){console.warn("Error trying to watch component directory",n,i)}},"watch_dir");Po.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else Ys.on("message",async e=>{let{type:t}=e;t===id.ITC_EVENT_TYPES.SHUTDOWN&&(Po.exports.restartNumber=e.restartNumber,Ys.unref(),setTimeout(()=>{Bi.warn("Thread did not voluntarily terminate",Rle),process.exit(0)},$b).unref())})});var NP={};Fe(NP,{AUDIT_STORE_OPTIONS:()=>_h,createAuditEntry:()=>of,openAuditStore:()=>kp,readAuditEntry:()=>kt,setAuditRetention:()=>zle,transactionKeyEncoder:()=>kF});function kp(e){let t=e.auditStore=e.openDB(qF.AUDIT_STORE_NAME,_h);t.rootStore=e;let r=[];t.addDeleteRemovalCallback=function(i,o){return r[i]=o,{remove(){delete r[i]}}};let n=null;function s(i=qp){clearTimeout(n),n=setTimeout(async()=>{if(t.rootStore.status==="closed")return;let o=0,c;try{for(let{key:l,value:_}of t.getRange({start:0,snapshot:!1,end:Date.now()-Kb})){if((_[0]&15)===jb){let u=kt(_),d=u.tableId;r[d]?.(u.recordId)}if(c=t.remove(l),await new Promise(setImmediate),++o>=jle){i=10;break}}await c}finally{o===0&&(i=Math.min(i<<1,Kb/10)),s(i)}},i).unref()}return a(s,"scheduleAuditCleanup"),t.scheduleAuditCleanup=s,(0,Fp.getWorkerIndex)()===(0,Fp.getWorkerCount)()-1&&s(qp),t}function zle(e,t=qp){Kb=e,qp=t}function of(e,t,r,n,s,i,o){let c=$F[i];if(!c)throw new Error(`Invalid audit entry type ${i}`);let l=1;n&&(n>1?Tl.setFloat64(0,n):$n.set(US),l=9),f(0),f(t),d(r),Tl.setFloat64(l,e),l+=8,s?d(s):$n[l++]=0,$n[n?8:0]=c;let u=$n.subarray(0,l);if(o)return Buffer.concat([u,o]);return u;function d(E){let h=l;l+=1,l=(0,gl.writeKey)(E,$n,l);let m=l-h-1;m>127?m>16383?(Jb.error("Key or username was too large for audit entry",E),l=h+1,$n[h]=0):($n.copyWithin(h+2,h+1,l),Tl.setUint16(h,m|32768),l++):$n[h]=m}function f(E){E<128?$n[l++]=E:E<16384?(Tl.setUint16(l,E|32768),l+=2):E<1056964608?(Tl.setUint32(l,E|3221225472),l+=4):($n[l]=255,Tl.setUint32(l+1,E),l+=5)}}function kt(e){try{let t=e.dataView||(e.dataView=new zb(e.buffer,e.byteOffset,e.byteLength)),r;e[0]==66&&(r=t.readFloat64());let n=t.readInt(),s=t.readInt(),i=t.readInt(),o=t.readInt(),c=t.position,l=t.position+=o,_=t.readFloat64();o=t.readInt();let u=t.position,d=t.position+=o;return{type:$F[n&7],tableId:i,get recordId(){return GF(e,c,l)},version:_,previousLocalTime:r,get user(){return d>u?GF(e,u,d):void 0},getValue(f,E,h){if(n&Wb||n&Qb&&!E)return f.decoder.decode(e.subarray(t.position));if(n&Qb&&h)return Xb(f.getEntry(this.recordId),h,f)}}}catch(t){return Jb.error("Reading audit entry error",t,e),{}}}function GF(e,t,r){let n=e.subarray(t,r);return(0,gl.readKey)(n,0,r-t)}var gl,xp,qF,xF,Fp,FF,Jb,$n,Tl,kF,_h,Kb,jle,qp,Wb,Qb,UF,jb,vF,BF,HF,$F,zb,Zi=Oe(()=>{gl=require("ordered-binary"),xp=B(X()),qF=B(at()),xF=B(D()),Fp=B(et()),FF=B(K());nu();Jb=B(x());$p();(0,xp.initSync)();$n=Buffer.alloc(1024),Tl=new DataView($n.buffer,$n.byteOffset,1024),kF={writeKey(e,t,r){return e===ru?(t.set(ru,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,gl.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,gl.readKey)(e,t,r)}},_h={encoding:"binary",keyEncoder:kF},Kb=(0,FF.convertToMS)((0,xp.get)(xF.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,jle=1e3,qp=1e4;a(kp,"openAuditStore");a(zle,"setAuditRetention");Wb=16,Qb=32,UF=1,jb=2,vF=3,BF=4,HF=5,$F={put:UF|Wb,[UF]:"put",delete:jb,[jb]:"delete",message:vF|Wb,[vF]:"message",invalidate:BF,[BF]:"invalidate",patch:HF|Qb,[HF]:"patch"};a(of,"createAuditEntry");a(kt,"readAuditEntry");zb=class extends DataView{static{a(this,"Decoder")}position=0;readInt(){let t=this.getUint8(this.position++);return t>=128?t>=192?t===255?(t=this.getUint32(this.position),this.position+=4,t):(t=this.getUint32(this.position-1)&1073741823,this.position+=3,t):(t=this.getUint16(this.position-1)&32767,this.position++,t):t}readFloat64(){try{let t=this.getFloat64(this.position);return this.position+=8,t}catch{debugger}}};a(GF,"readKeySafely")});var Zb={};Fe(Zb,{add:()=>Vp,applyReverse:()=>VF,getRecordAtTime:()=>Xb,rebuildUpdateBefore:()=>Yp});function Vp(e,t,r){isNaN(e[t])?e[t]=r.value:e[t]+=r.value}function Yp(e,t){let r=null;for(let n in e)if(n in t){let s=t[n];if(s?.__op__){let i=e[n];if(i?.__op__)if(i.__op__===s.__op__)r||(r={}),r[n]=i;else throw new Error("Can not merge updates with different operations");else r||(r={}),r[n]=i,Vp(r,n,s)}}else r||(r={}),r[n]=e[n];return r}function VF(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=Jle[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=YF}}function Xb(e,t,r){let n=r.rootStore.auditStore,s=Object.assign({},e.value),i=e.localTime;for(;i>t;){let l=n.get(i),_=kt(l);switch(_.type){case"put":s=_.getValue(r);break;case"patch":VF(s,_.getValue(r));break;case"delete":s=null}i=_.previousLocalTime}let o={},c=0;for(let l in s)s[l]===YF&&(o[l]=!0,c++);for(;c>0&&i>0;){let l=n.get(i),_=kt(l),u;switch(_.type){case"put":u=_.getValue(r);break;case"patch":u=_.getValue(r);break}for(let d in u)o[d]&&(s[d]=u[d],o[d]=!1,c--);i=_.previousLocalTime}if(c>0)for(let l in o)s[l]=null;return s}var Jle,YF,$p=Oe(()=>{Zi();a(Vp,"add");Vp.reverse=function(e,t,r){isNaN(e[t])||(e[t]-=r.value)};Jle={add:Vp};a(Yp,"rebuildUpdateBefore");a(VF,"applyReverse");YF={};a(Xb,"getRecordAtTime")});function pn(e){return e[Gt]||(e[Gt]=Object.create(null))}function zp(e,t){let r=e.prototype,n={},s=t.attributes||t.properties||[];for(let o of s){let c=o.name,l,_;if(o.resolve)_={get(){return o.resolve(this,this[Ie])},set(u){return o.set(this,u)},configurable:!0};else{switch(o.type){case"String":l=a(function(u){if(!(typeof u=="string"||u==null&&o.nullable!==!1))throw new Vn.ClientError(`${c} must be a string, attempt to assign ${u}`);pn(this)[c]=u},"set");break;case"ID":l=a(function(u){if(!(typeof u=="string"||u?.length>0&&u.every?.(d=>typeof d=="string")||u==null&&o.nullable!==!1))throw new Vn.ClientError(`${c} must be a string, attempt to assign ${u}`);pn(this)[c]=u},"set");break;case"Float":case"Number":l=a(function(u){if(!(typeof u=="number"||u==null&&o.nullable!==!1))throw new Vn.ClientError(`${c} must be a number, attempt to assign ${u}`);pn(this)[c]=u},"set");break;case"Int":l=a(function(u){if(!(u>>0===u||u==null&&o.nullable!==!1))if(typeof u=="number"&&Math.abs((u>>0)-u)<=1)u=Math.round(u);else throw new Vn.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${u}`);pn(this)[c]=u},"set");break;case"Long":l=a(function(u){if(!(Math.round(u)===u&&Math.abs(u)<=9007199254740992||u==null&&o.nullable!==!1))if(typeof u=="number"&&Math.abs(u)<=9007199254740992)u=Math.round(u);else throw new Vn.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${u}`);pn(this)[c]=u},"set");break;case"BigInt":l=a(function(u){if(!(typeof u=="bigint"||u==null&&o.nullable!==!1))if(typeof u=="string"||typeof u=="number")u=BigInt(u);else throw new Vn.ClientError(`${c} must be a number, attempt to assign ${u}`);pn(this)[c]=u},"set");break;case"Boolean":l=a(function(u){if(!(typeof u=="boolean"||u==null&&o.nullable!==!1))throw new Vn.ClientError(`${c} must be a boolean, attempt to assign ${u}`);pn(this)[c]=u},"set");break;case"Date":l=a(function(u){if(!(u instanceof Date||u==null&&o.nullable!==!1))if(typeof u=="string"||typeof u=="number")u=new Date(u);else throw new Vn.ClientError(`${c} must be a Date, attempt to assign ${u}`);pn(this)[c]=u},"set");break;case"Bytes":l=a(function(u){if(!(u instanceof Uint8Array||u==null&&o.nullable!==!1))throw new Vn.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${u}`);pn(this)[c]=u},"set");break;case"Any":case void 0:l=a(function(u){pn(this)[c]=u},"set");break;default:l=a(function(u){if(!(typeof u=="object"||u==null&&o.nullable!==!1))throw new Vn.ClientError(`${c} must be an object, attempt to assign ${u}`);pn(this)[c]=u},"set")}_={get(){let u=this[Gt];if(u&&c in u){let f=u[c];if(f?.__op__){let E=this[fe]?.[c];return f.update(E)}return f}let d=this[fe]?.[c];if(d&&typeof d=="object"){let f=WF(d,o);if(f)return u||(u=this[Gt]=Object.create(null)),u[c]=f}return d},set:l,enumerable:!0,configurable:!0}}_.get.isAttribute=!0,n[c]=_,(!(c in r)||Object.getOwnPropertyDescriptor(r,c)?.get?.isAttribute)&&Object.defineProperty(r,c,_)}i("getProperty",function(o){let c=n[o];if(c)return c.get.call(this);let l=this[Gt];return l?.[o]!==void 0?l[o]:this[fe]?.[o]}),i("set",function(o,c){let l=n[o];if(l)return l.set.call(this,c);if(t.sealed)throw new Vn.ClientError("Can not add a property to a sealed table schema");pn(this)[o]=c}),i("deleteProperty",function(o){pn(this)[o]=void 0}),i("toJSON",function(){let o=this[Gt],c;for(let _ in o){c||(c=Object.assign({},this[fe]));let u=o[_];if(u?.__op__){let d=c[_];u=u.update(d)}c[_]=u}return Object.keys(this).length>0&&(c||(c=Object.assign({},this[fe])),Object.assign(c,this)),c||this[fe]}),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 WF(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?.[fe])throw new Error("Can not track an already tracked object, check for circular references");this[fe]=s}},zp(r,t)),new r(e)):new Kp(e);case Array:let n=new Qp(e.length);n[fe]=e;for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=WF(o,t?.elements)),n[s]=o}return n;default:return e}}function tE(e){let t=e[Gt],r;for(let s in t){r||(r=Object.assign({},e[fe]));let i=t[s];if(i&&typeof i=="object")if(i.__op__){let o=r[s];i=i.update(o)}else i=tE(i);r[s]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[fe])),Object.assign(r,e)),r||e[fe]}function $a(e,t=e[Gt]){let r;if(KF.call(e,fe)&&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=$a(i);o!==i&&r===e&&(r=e.slice(0)),i=o}r[n]=i}return Object.freeze(r)}for(let n in t){r||(r=Object.assign({},e[fe]));let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=Zb[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=$a(s);r[n]=s}return r?Object.freeze(r):KF.call(e,fe)?e[fe]:e}function Wp(e){let t=e[fe];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[ka]||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?.[fe]===s){if(Wp(i))return!0}else return!0}}else{let r=e[Gt];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[fe]===i){if(Wp(s))return!0}else return!0}else return!0}}return!1}var Vn,Gt,Kp,KF,ka,Qp,jp,rE=Oe(()=>{es();Vn=B(oe());$p();Gt=Symbol("own-data");a(pn,"getChanges");a(zp,"assignTrackedAccessors");a(WF,"trackObject");Kp=class{static{a(this,"GenericTrackedObject")}constructor(t){if(t?.[fe])throw new Error("Can not track an already tracked object, check for circular references");this[fe]=t}};zp(Kp,{});a(tE,"collapseData");KF=Object.prototype.hasOwnProperty;a($a,"deepFreeze");a(Wp,"hasChanges");ka=Symbol.for("has-array-changes"),Qp=class extends Array{static{a(this,"TrackedArray")}[ka];constructor(t){super(t)}splice(...t){return this[ka]=!0,super.splice(...t)}push(...t){return this[ka]=!0,super.push(...t)}pop(){return this[ka]=!0,super.pop()}unshift(...t){return this[ka]=!0,super.unshift(...t)}shift(){return this[ka]=!0,super.shift()}};Qp.prototype.constructor=Array;jp=class{constructor(t){this.value=t}static{a(this,"Addition")}__op__="add";update(t){return(+t||0)+this.value}}});var cg={};Fe(cg,{CONTEXT:()=>Ie,ID_PROPERTY:()=>Ue,IS_COLLECTION:()=>Yn,RECORD_PROPERTY:()=>fe,Resource:()=>Jt,snake_case:()=>Zle,transformForSelect:()=>Xp});function Zle(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function QF(e,t){if(od=!1,e==="")return null;if(e=e.slice(1),e.indexOf("/")===-1)return e===""?(od=!0,null):(e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e)));let r=e.split("/"),n=new tN;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){od=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}function mn(e,t){n.reliesOnPrototype=!0;let r=t.hasContent;return n;function n(s,i,o){let c,l,_,u;if(r?(o?(u=i,o=o[Ie]||o):i?typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(u=s,c=u[this.primaryKey]??null,o=i[Ie]||i):u=i:(u=s,c=u[Ue]??u[this.primaryKey]??null),c==null&&(_=!0)):i?o=i[Ie]||i:s&&typeof s=="object"&&!Array.isArray(s)&&(o=s),c===void 0)if(typeof s=="string")c=s;else if(typeof s=="object"&&s)if(l=s,s[Symbol.iterator]){c=[],_=!0;for(let E of s){if(typeof E=="object"&&E)break;c.push(E)}c.length===0?c=null:(c.length===1&&(c=c[0]),l.slice&&(l=l.slice(c.length,l.length),l.length===0&&(l=null,_=!1)))}else{if(typeof(c=s.url)=="string"){let E=c.indexOf("?");if(E>-1){let m=this.parseQuery(c.slice(E+1));l?l=Object.assign(m,l):l=m,c=c.slice(0,E)}let h=this.parsePath(c,o,l);h?.id!==void 0?(h.query&&(l?l=Object.assign(h.query,l):l=h.query),_=h.isCollection,c=h.id):c=h}c===void 0&&(c=s.id??null,c==null&&(_=!0))}else c=s??null,c==null&&(_=!0);o||(o={});let d;if(l?.ensureLoaded!=null||l?.async||_?(d=Object.assign({},t),l?.ensureLoaded!=null&&(d.ensureLoaded=l.ensureLoaded),l?.async&&(d.async=l.async),_&&(d.isCollection=!0)):d=t,o.transaction){let E=this.getResource(c,o,d);return E.then?E.then(f):f(E)}else return Ze(o,()=>{let E=this.getResource(c,o,d);return E.then?E.then(f):f(E)},d);function f(E){if(o.authorize){o.authorize=!1;let h=t.type==="read"?E.allowRead(o.user,l,o):t.type==="update"?E.doesExist?.()===!1?E.allowCreate(o.user,u,o):E.allowUpdate(o.user,u,o):t.type==="create"?E.allowCreate(o.user,u,o):E.allowDelete(o.user,l,o);if(h?.then)return h.then(m=>{if(!m)throw new Jp(o.user);return typeof u?.then=="function"?u.then(S=>e(E,l,o,S)):e(E,l,o,u)});if(!h)throw new Jp(o.user)}return typeof u?.then=="function"?u.then(h=>e(E,l,o,h)):e(E,l,o,u)}a(f,"authorizeActionOnResource")}}function Sn(e,t){let r=new JF.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 eN(e,t,r){let n=e[fe];if(n){let s=e[Gt];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 Xp(e,t){let r=t?.propertyResolvers,n=t[Ie],s;if(typeof e=="string")return a(function o(c){return c.then?c.then(o):Array.isArray(c)?c.map(o):eN(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=i(eN(l,r,n));for(let d of e)_.push(u(d));return _},"transform");let o=e.forceNulls;return a(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(f=>f&&typeof f=="object"?c(f):f);let _={},u=i(eN(l,r,n)),d;for(let f of e){let E=u(f);E===void 0&&o&&(E=null),E?.then?(d||(d=[]),d.push(E.then(h=>_[f.name||f]=h))):_[f.name||f]=E}return d?Promise.all(d).then(()=>_):_},"transform")}else throw new Error("Invalid select argument type "+typeof e);function i(o){return c=>{if(typeof c=="string")return o(c);if(typeof c=="object")if(c.name){s||(s={});let l=s[c.name];if(!l){let u=r[c.name]?.definition?.tableClass;l=s[c.name]=Xp(c.select||c,u)}let _=o(c.name);return l(_)}else return o(c);else return c}}a(i,"handleProperty")}var jF,zF,JF,Ie,Ue,Yn,fe,Xle,Jt,Jp,od,tN,es=Oe(()=>{jF=require("crypto");zl();zF=require("../index"),JF=B(oe());rE();fa();$h();Ie=Symbol.for("context"),Ue=Symbol.for("primary-key"),Yn=Symbol("is-collection"),fe=Symbol("stored-record"),Xle={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Jt=class{static{a(this,"Resource")}static transactions;constructor(t,r){this[Ue]=t;let n=r?.[Ie];this[Ie]=n!==void 0?n:r||null}static get=mn(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 _=Xp(l,t.constructor);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",letItLinger:!0,ensureLoaded:!0,async:!0});static put=mn(function(t,r,n,s){if(Array.isArray(s)&&t[Yn]){let i=[],o=n.authorize;for(let c of s){let l=t.constructor,_=l.getResource(c[l.primaryKey],n,{async:!0});_.then?i.push(_.then(u=>u.put(c,n))):i.push(_.put(c,n))}return Promise.all(i)}return t.put?t.put(s,r):Sn(t,"put")},{hasContent:!0,type:"update"});static patch=mn(function(t,r,n,s){return t.patch?t.patch(s,r):Sn(t,"patch")},{hasContent:!0,type:"update"});static delete=mn(function(t,r,n,s){return t.delete?t.delete(r):Sn(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,jF.randomUUID)()}static create(t,r,n){let s;return t==null?s=this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?s=[...t,this.getNewId()]:typeof t!="object"?s=[t,this.getNewId()]:(s=this.getNewId(),n=r,r=t),Ze(n,()=>{let i=new this(s,n),o=i.update?i.update(r,!0):Sn(i,"update");return n.newLocation=s,n.createdResource=!0,o?.then?o.then(()=>s):s})}static invalidate=mn(function(t,r,n,s){return t.invalidate?t.invalidate(r):Sn(t,"delete")},{hasContent:!1,type:"update"});static post=mn(function(t,r,n,s){return t[Ue]!=null&&t.update?.(),t.post(s,r)},{hasContent:!0,type:"create"});static connect=mn(function(t,r,n,s){return t.connect?t.connect(s,r):Sn(t,"connect")},{hasContent:!0,type:"read"});static subscribe=mn(function(t,r,n,s){return t.subscribe?t.subscribe(r):Sn(t,"subscribe")},{type:"read"});static publish=mn(function(t,r,n,s){return t[Ue]!=null&&t.update?.(),t.publish?t.publish(s,r):Sn(t,"publish")},{hasContent:!0,type:"create"});static search=mn(function(t,r,n,s){let i=t.search?t.search(r):Sn(t,"search"),o=n.select;if(o&&n.hasOwnProperty("select")&&i!=null&&!i.selectApplied){let c=Xp(o,t.constructor);return i.map(c)}return i},{type:"read"});static query=mn(function(t,r,n,s){return t.search?t.search(s,r):Sn(t,"search")},{hasContent:!0,type:"read"});static copy=mn(function(t,r,n,s){return t.copy?t.copy(s,r):Sn(t,"copy")},{type:"create"});static move=mn(function(t,r,n,s){return t.move?t.move(s,r):Sn(t,"move")},{type:"delete"});post(t){if(this[Yn])return this.constructor.create(this[Ue],t,this[Ie]);Sn(this,"post")}static isCollection(t){return t?.[Yn]}static coerceId(t){return t}static parseQuery(t){return kh(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&&Xle[o];if(c)r.headers.set("accept",c);else if(n)n.property=o;else return{query:{property:o},id:QF(t,this),isCollection:od}}let i=QF(t,this);return od?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r[Ie],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 _=l.asMap.get(t);if(s=_?.find(u=>u.constructor===c),s)return s;_||l.asMap.set(t,_=[]),_.push(s=new c(t,i))}else{if(s=l.find(_=>_[Ue]===t&&_.constructor===c),s)return s;if(l.push(s=new c(t,i)),l.length>10){let _=new Map;for(let u of l){let d=u[Ue],f=_.get(d);f?f.push(u):_.set(d,[u])}i.resourceCache.length=0,i.resourceCache.asMap=_}}}else s=new c(t,i);return o&&(s[Yn]=!0),s}subscribe(t){return new Zn}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new Zn}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[Ue]}getContext(){return this[Ie]}};Jt.prototype[Ie]=null;(0,zF._assignPackageExport)("Resource",Jt);a(Zle,"snake_case");Jp=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(QF,"pathToId");tN=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(mn,"transactional");a(Sn,"missingMethod");a(eN,"selectFromObject");a(Xp,"transformForSelect")});function ZF(e,t,r,n){let s=e.primaryStore.env.path,i=e.primaryStore.tableId;Rl||((0,Zp.onMessageByType)(XF,u=>{ek(u.path)}),Rl=Object.create(null));let o=Rl[s]||(Rl[s]=[]);o.auditStore=e.auditStore,o.lastTxnTime==null&&(o.lastTxnTime=Date.now());let c=o[i];c||(c=o[i]=new Map,c.envs=o,c.tableId=i,c.store=e.primaryStore),t=Yc(t);let l=new nN(r);l.startTime=n;let _=c.get(t);return _?_.push(l):(c.set(t,_=[l]),_.tables=c,_.key=t),l.subscriptions=_,l}function ek(e,t){if(!Rl)return;let r=Rl[e];if(!r)return;try{r.auditStore.resetReadTxn()}catch(s){throw s.message+=" in "+e,s}let n;for(let{key:s,value:i}of r.auditStore.getRange({start:r.lastTxnTime,exclusiveStart:!0})){r.lastTxnTime=s;let o=kt(i),c=r[o.tableId];if(!c)continue;let l=o.recordId,_,u=Yc(o.recordId),d=0;do{let f=c.get(u);if(f){for(let h of f)if(!(d>0&&!(h.includeDescendants&&!(h.onlyChildren&&d>1)))){if(h.startTime>=s){(0,rN.info)("omitting",l,h.startTime,s);continue}try{if(h.crossThreads===!1&&!t)continue;let m;h.supportsTransactions&&h.txnInProgress!==o.version&&(m=!0,h.txnInProgress||(n?n.push(h):n=[h]),h.txnInProgress=o.version),h.listener(l,o,s,m)}catch(m){console.error(m),(0,rN.info)(m)}}}if(u==null)break;let E=u.lastIndexOf?.("/",u.length-2);E>-1?u=u.slice(0,E):u=null,d++}while(!0)}if(n)for(let s of n)s.txnInProgress=null,s.listener(null,{type:"end_txn"},r.lastTxnTime,!0)}function tk(e,t){let r=t||e,n=r.env;if(t&&!t.cache&&(t.cache=new Map),!n.hasBroadcastListener){n.hasBroadcastListener=!0;let s=n.path;r.on("aftercommit",()=>{(0,Zp.broadcast)({type:XF,path:s}),ek(s,!0)})}}var rN,Zp,XF,Rl,Tye,nN,rk=Oe(()=>{rN=B(x()),Zp=B(et());zl();O_();Zi();XF="transaction",Tye=Buffer.alloc(4096);a(ZF,"addSubscription");nN=class extends Zn{static{a(this,"Subscription")}listener;subscriptions;startTime;constructor(t){super(),this.listener=t,this.on("close",()=>this.end())}end(){if(this.subscriptions){if(this.subscriptions.splice(this.subscriptions.indexOf(this),1),this.subscriptions.length===0){let t=this.subscriptions.tables,r=this.subscriptions.key;if(t.delete(r),t.size===0){let n=t.envs,s=t.dbi;delete n[s]}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}};a(ek,"notifyFromTransactionData");a(tk,"listenToCommits")});var BO={};Fe(BO,{coerceType:()=>em,makeTable:()=>nm,setServerUtilities:()=>cue,updateResource:()=>tm});function nm(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:o,databaseName:c,auditStore:l,schemaDefined:_,dbisDB:u,sealed:d}=e,{expirationMS:f,evictionMS:E,audit:h,trackDeletes:m}=e,{attributes:S}=e;S||(S=[]),tk(i,l);let g=HS(i,n,l),R=0,A,P,U={},v=Promise.resolve(),k,H,j;for(let W of S)(W.assignCreatedTime||W.name==="__createdtime__")&&(k=W),(W.assignUpdatedTime||W.name==="__updatedtime__")&&(H=W),W.expiresAt&&(j=W),W.isPrimaryKey&&(U=W);let z,J=[],Se=[],ue=1,Ee=2,Me={},Ge={},Ft=864e5,Gd,qd,Ki,iy=!1,$m,Vm,kV=i.getRange({start:!1,end:!1}).constructor,$V=10,VV=6;h&&cy();class Je extends Jt{static name=s;static primaryStore=i;static auditStore=l;static primaryKey=t;static tableName=s;static indices=r;static audit=h;static databasePath=o;static databaseName=c;static attributes=S;static expirationTimer;static createdTimeProperty=k;static updatedTimeProperty=H;static propertyResolvers;static sources=[];static get expirationMS(){return f}static dbisDB=u;static schemaDefined=_;static sourcedFrom(p,O){O&&(this.sourceOptions=O,(O.expiration||O.eviction||O.scanInterval)&&this.setTTLExpiration(O)),O?.intermediateSource?(p.intermediateSource=!0,this.sources.unshift(p)):this.sources.push(p),P=p.get&&(!p.get.reliesOnPrototype||p.prototype.get);let I=a(L=>{let y=this.sources.slice(0,-1);if(y=y.filter(M=>M[L]&&(!M[L].reliesOnPrototype||M.prototype[L])),y.length>0)if(y.length===1){let M=y[0];return($,C,G)=>{if($?.source!==M)return M[L](C,G,$)}}else return(M,$,C)=>{let G=[];for(let q of y){if(M?.source===q)break;G.push(q[L]($,C,M))}return Promise.all(G)}},"getApplyToIntermediateSource"),N=this.sources[this.sources.length-1],b=a(L=>{if(N[L]&&(!N[L].reliesOnPrototype||N.prototype[L]))return(y,M,$)=>{if(!y?.source)return N[L](M,$,y)}},"getApplyToCanonicalSource");return Me={put:b("put"),patch:b("patch"),delete:b("delete"),publish:b("publish")},Ge={put:I("put"),patch:I("patch"),delete:I("delete"),publish:I("publish"),invalidate:I("invalidate")},(async()=>{let L=!1,y=a(async(M,$)=>{let C=M.value,G=M.table?lt[c][M.table]:Je;if(c===Ss.SYSTEM_SCHEMA_NAME&&(M.table===Ss.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||M.table===Ss.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(L=!0),M.id===void 0&&(M.id=C[G.primaryKey],M.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(M));M.source=p;let q=await G.getResource(M.id,$,Al);switch(M.type){case"put":return q._writeUpdate(C,!0,Al);case"patch":return q._writeUpdate(C,!1,Al);case"delete":return q._writeDelete(Al);case"publish":return q._writePublish(C,Al);case"invalidate":return q.invalidate(Al);default:st.error("Unknown operation",M.type,M.id)}},"writeUpdate");try{let M=p.subscribe;M&&m==null&&(m=!0);let $=p.subscribeOnThisThread?p.subscribeOnThisThread((0,Ya.getWorkerIndex)()):(0,Ya.getWorkerIndex)()===0,C=M&&$&&await p.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(C){let G;for await(let q of C)try{if(!(q.type==="transaction"?q.writes[0]:q)){st.error("Bad subscription event",q);continue}if(q.source=p,G)if(q.beginTxn)G.resolve();else{y(q,G);continue}if(q.type==="end_txn")continue;let Te=Ze(q,()=>{if(q.type==="transaction"){let te=[];for(let Be of q.writes)try{te.push(y(Be,q))}catch(le){throw le.message+=" writing "+JSON.stringify(Be)+" of event "+JSON.stringify(q),le}return Promise.all(te)}else if(q.type==="define_schema"){let te=this.attributes.slice(0),Be;for(let le of q.attributes)te.find($e=>$e.name===le.name)||(te.push(le),Be=!0);Be&&(Et({table:s,database:c,attributes:te,origin:"cluster"}),fd.signalSchemaChange(new Ed.SchemaEventMsg(process.pid,Ss.OPERATIONS_ENUM.CREATE_TABLE,c,s)))}else return q.beginTxn?(G=q,y(q,q),new Promise(te=>{G.resolve=te})):y(q,q)});L&&(await Te,fd.signalUserChange(new Ed.UserEventMsg(process.pid))),q.onCommit&&(Te?.then?Te.then(q.onCommit):q.onCommit())}catch(ae){st.error("error in subscription handler",ae)}}}catch(M){st.error(M)}})(),this}static getResource(p,O,I){let N=super.getResource(p,O,I);if(p!=null){vl(p);try{if(N.hasOwnProperty(fe))return N;if(typeof p=="object"&&p&&!Array.isArray(p))throw new Error(`Invalid id ${JSON.stringify(p)}`);let b=!I?.async||i.cache?.get(p),L=Jn(O),y=L.getReadTxn();if(y?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return Ym(p,O,{transaction:y},b,M=>{if(M?tm(N,M):N[fe]=null,O.onlyIfCached&&O.noCacheStore){if(!N.doesExist())throw new Kn.ServerError("Entry is not cached",504)}else if(I?.ensureLoaded){let $=Km(p,M,O,N);if($)return L?.disregardReadTxn(),N[sN]=!0,oN($,C=>(tm(N,C),N))}return N})}catch(b){throw b.message.includes("Unable to serialize object")&&(b.message+=": "+JSON.stringify(p)),b}}return N}ensureLoaded(){let p=Km(this[Ue],this[Tn],this[Ie]);if(p)return this[sN]=!0,oN(p,O=>{this[Tn]=O,this[fe]=O.value,this[_d]=O.version})}static setTTLExpiration(p){if(typeof p=="number")f=p*1e3,E||(E=0);else if(p&&typeof p=="object")f=p.expiration*1e3,E=(p.eviction||0)*1e3,Ft=p.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(f<0)throw new Error("Expiration can not be negative");Ft=Ft||(f+E)/4,Qm()}static enableAuditing(p=!0){h=p,p&&cy(),Je.audit=p}static coerceId(p){return p===""?null:em(p,U)}static async dropTable(){if(delete lt[c][s],c===o){for(let p of S)u.remove(Je.tableName+"/"+p.name),r[p.name]?.drop();u.remove(Je.tableName+"/"),i.drop(),await u.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));fd.signalSchemaChange(new Ed.SchemaEventMsg(process.pid,Ss.OPERATIONS_ENUM.DROP_TABLE,c,s))}get(p){if(typeof p=="string")return this.getProperty(p);if(this[Yn])return this.search(p);if(this[Ue]===null){if(p?.conditions)return this.search(p);let O=Je.getRecordCount();return{recordCount:O.recordCount,estimatedRecordRange:O.estimatedRange,records:"./",name:s,database:c,attributes:S}}if(p?.property)return this.getProperty(p.property);if(this.doesExist()||p?.ensureLoaded===!1||this[Ie]?.returnNonexistent)return this}allowRead(p,O){let I=Fd(p);if(I?.read){if(I.isSuperUser)return!0;let N=I.attribute_permissions,b=O?.select;if(N?.length>0||iy&&b){if(O||(O={}),b){let L=N?.length>0&&iN(N,"read");O.select=b.map(y=>{let M=y.name||y;if(!L||L[M]){let $=Ki[M]?.definition?.tableClass;if($){if(y.name||(y={name:y}),!$.prototype.allowRead.call(null,p,y))return!1;if(!y.select)return y.name}return y}}).filter(Boolean)}else O.select=N.filter(L=>L.read&&!Ki[L.attribute_name]).map(L=>L.attribute_name);return O}else return!0}}allowUpdate(p,O){let I=Fd(p);if(I?.update){let N=I.attribute_permissions;if(N?.length>0){let b=iN(N,"update");for(let L in O)if(!b[L])return!1;for(let L of N){let y=L.attribute_name;!L.update&&!(y in O)&&(O[y]=this.getProperty(y))}}return!0}}allowCreate(p,O){if(this[Yn]){let I=Fd(p);if(I?.insert){let N=I.attribute_permissions;if(N?.length>0){let b=iN(N,"insert");for(let L in O)if(!b[L])return!1}else return!0}}else return this.allowUpdate(p,{})}allowDelete(p){return Fd(p)?.delete}update(p,O){if(!Jn(this[Ie]))throw new Error("Can not update a table resource outside of a transaction");if(p===!1)return this;let N;return typeof p=="object"&&p&&(O?(Object.isFrozen(p)&&(p=Object.assign({},p)),this[fe]={},this[Gt]=p):(N=this[Gt],N&&(p=Object.assign(N,p)),this[Gt]=N=p)),this._writeUpdate(this[Gt],O),this}addTo(p,O){if(typeof O=="number")this[ad]===sk?this.set(p,(+this.getProperty(p)||0)+O):(this[ad]||this.update(),this.set(p,new jp(O)));else throw new Error("Can not add a non-numeric value")}subtractFrom(p,O){if(typeof O=="number")return this.addTo(p,-O);throw new Error("Can not subtract a non-numeric value")}invalidate(p){let O=this[Ie],I=this[Ue];vl(I),Jn(this[Ie]).addWrite({key:I,store:i,invalidated:!0,entry:this[Tn],nodeName:this[Ie]?.nodeName,before:Me.invalidate?.bind(this,O,I),beforeIntermediate:Ge.invalidate?.bind(this,O,I),commit:(b,L)=>{if(L?.version>b)return;let y=null;for(let M in r)y||(y={}),y[M]=this.getProperty(M);g(I,y,this[Tn],b,cd,h,this[Ie],0,"invalidate")}})}static evict(p,O,I){let N=this.Source,b;if(!((P||h)&&(!O||(b=i.getEntry(p),!b||!O)||b.version!==I))){if(P){if(i.hasLock(p,b.version))return;let L;for(let y in r)L||(L={}),L[y]=O[y];if(L)return g(p,L,b,I,ld,null,null,0,null,!0)}return i.ifVersion(p,I,()=>{xd(p,O,null)}),h?g(p,null,b,I,ld,null,null,0,null,!0):i.remove(p,I)}}lock(){throw new Error("Not yet implemented")}static operation(p,O){return p.table||=s,p.schema||=c,uk.operation(p,O)}put(p){this.update(p,!0)}patch(p){this.update(p,!1)}_writeUpdate(p,O,I){let N=this[Ie],b=Jn(N),L=this[Ue];vl(L);let y=this[Tn];this[ad]=O?sk:iue;let M={key:L,store:i,entry:y,nodeName:N?.nodeName,validate:$=>{p||(p=this[Gt]),O||p&&Wp(p)?N?.source||(b.checkOverloaded(),this.validate(p,!O),H&&(p[H.name]=H.type==="Date"?new Date($):H.type==="String"?new Date($).toISOString():$),O&&(t&&p[t]!==L&&(p[t]=L),k&&(y?.value?p[k.name]=y?.value[k.name]:p[k.name]=k.type==="Date"?new Date($):k.type==="String"?new Date($).toISOString():$),p=$a(p))):b.removeWrite(M)},before:O?Me.put?()=>Me.put(N,L,p):null:Me.patch?()=>Me.patch(N,L,p):Me.put?()=>Me.put(N,L,$a(this)):null,beforeIntermediate:O?Ge.put?()=>Ge.put(N,L,p):null:Ge.patch?()=>Ge.patch(N,L,p):Ge.put?()=>Ge.put(N,L,$a(this)):null,commit:($,C,G)=>{if(G){if(N&&C?.version>(N.lastModified||0)&&(N.lastModified=C.version),this[Tn]=C,C?.value?.[fe])throw new Error("Can not assign a record to a record, check for circular references");O||(this[fe]=C?.value??null)}this[Gt]=p,this[_d]=$;let q=C?.value,ae=p;if(this[ad]=0,C?.version>=$)if(h){let le=C.localTime,$e=C.version;for(;ae&&(le>$||$e>=$&&le>0);){let ne=l.get(le);if(!ne)break;let Z=kt(ne);if($e=Z.version,$e>$){if(Z.type==="patch"){let Ne=Z.getValue(i);ae=Yp(ae,Ne)}else if(Z.type==="put"||Z.type==="delete")return}else if($e===$)return;le=Z.previousLocalTime}}else{if(O)return;ae=Yp(ae,q)}let Te;if(O?Te=ae:(this[fe]=q,Te=O?ae:$a(this,ae)),this[fe]=Te,Te?.[fe])throw new Error("Can not assign a record to a record, check for circular references");let te;O||(te=p),xd(L,q,Te);let Be=O?"put":"patch";g(L,Te,C,$,0,h,N,N.expiresAt||(f?f+Date.now():0),Be,!1,te)}};b.addWrite(M)}async delete(p){if(typeof p=="string")return this.deleteProperty(p);if(this[Yn]){for await(let O of this.search(p))(await Je.getResource(O[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(p);return}return this[fe]?this._writeDelete(p):!1}_writeDelete(p){let O=Jn(this[Ie]),I=this[Ue];vl(I);let N=this[Ie];return O.addWrite({key:I,store:i,resource:this,nodeName:N?.nodeName,before:Me.delete?.bind(this,N,I),beforeIntermediate:Ge.delete?.bind(this,N,I),commit:(b,L,y)=>{let M=L?.value;y&&(N&&L?.version>(N.lastModified||0)&&(N.lastModified=L.version),tm(this,L)),!(L?.version>b)&&(xd(this[Ue],M),st.trace("Write delete entry",I,b),h||m?(g(I,null,this[Tn],b,0,h,this[Ie],0,"delete"),h||Qm()):i.remove(this[Ue]))}}),!0}search(p){let O=this[Ie],I=Jn(O);if(!p)throw new Error("No query provided");let N=p.conditions;N?N.length===void 0&&(N=N[Symbol.iterator]?Array.from(N):[N]):N=Array.isArray(p)?p:p[Symbol.iterator]?Array.from(p):[],this[Ue]&&(N=[{attribute:null,comparator:"prefix",value:this[Ue]}].concat(N));let b,L={};function y(Z,Ne){let qe;switch(Ne){case"and":case void 0:if(Z.length<1)throw new Error('An "and" operator requires at least one condition');qe=!0;break;case"or":if(Z.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+Ne)}let Os=qe&&{},Wi;for(let Qe of Z){if(Qe.conditions){Qe.conditions=y(Qe.conditions,Qe.operator);continue}let jt=Qe[0]??Qe.attribute,wn=jt==null?U:Di(S,jt);if(wn){if(qe){let bs=ds(jt),zt=Os[bs];zt?(zt.push(Qe),Wi=!0):Os[bs]=[Qe]}(wn.type||cO[Qe.comparator])&&(Qe[1]===void 0?Qe.value=$(Qe.value,wn):Qe[1]=$(Qe[1],wn))}else if(jt!=null)throw(0,Kn.handleHDBError)(new Error,`${jt} is not a defined attribute`,404)}if(p.enforceExecutionOrder)return Z;if(Wi)for(let Qe in Os){let jt=Os[Qe],wn=jt.length;if(wn>1)for(let bs=0;bs<wn;bs++){let zt=jt[bs];if(zt.comparator==="ge"||zt.comparator==="greater_than_equal")for(let Qi=0;Qi<wn;Qi++){let oc=jt[Qi];(oc.comparator==="le"||oc.comparator==="less_than_equal")&&(zt.comparator="between",zt.value=[zt.value,oc.value],Z.splice(Z.indexOf(oc),1))}if(zt.comparator==="equals"||!zt.comparator){for(let Qi=0;Qi<wn;Qi++)if(Qi!==bs){let oc=jt[Qi];Z.splice(Z.indexOf(oc),1)}break}}}return Z}a(y,"prepareConditions");function M(Z,Ne){if(p.enforceExecutionOrder)return Z;for(let qe of Z)qe.conditions&&(qe.conditions=M(qe.conditions,qe.operator));return Z.length>1&&Ne!=="or"?(0,lk.sortBy)(Z,Fh(Je)):Z}a(M,"orderConditions");function $(Z,Ne){return Array.isArray(Z)?Z.map(qe=>em(qe,Ne)):em(Z,Ne)}a($,"coerceTypedValues");let C=p.operator;(N.length>0||C)&&(N=y(N,C));let G=typeof p.sort=="object"&&p.sort,q;if(G&&C!=="or"){let Z=G.attribute;if(b=N.find(Ne=>ds(Ne.attribute)===ds(Z)),!b){if(!Di(S,Z))throw(0,Kn.handleHDBError)(new Error,`${Array.isArray(Z)?Z.join("."):Z} is not a defined attribute`,404);b={attribute:Z,comparator:"sort"},N.push(b)}b.descending=!!G.descending}N=M(N,C),G&&(N[0]===b?G.next&&(q={dbOrderedAttribute:G.attribute,attribute:G.next.attribute,descending:G.next.descending,next:G.next.next}):(b&&N.splice(N.indexOf(b),1),q=G));let ae=p.select;if(N.length===0&&(N=[{attribute:t,comparator:"greater_than",value:!0}]),p.explain)return{conditions:N,operator:C,postOrdering:q,selectApplied:!!ae};let Te=I.useReadTxn(),te=lO(N,C,Je,Te,p,O,(Z,Ne)=>oy(Z,ae,O,Te,Ne),L),Be=p.ensureLoaded!==!1;q||(te=ne(te));let le=Je.transformEntryForSelect(ae,O,Te,L,Be,!0),$e=Je.transformToOrderedSelect(te,ae,q,Te,O,le);function ne(Z){return p.offset||p.limit!==void 0?Z.slice(p.offset,p.limit!==void 0?(p.offset||0)+p.limit:void 0):Z}return a(ne,"applyOffset"),q&&($e=ne($e)),$e.onDone=()=>{$e.onDone=null,I.doneReadTxn()},$e.selectApplied=!0,$e.getColumns=()=>{if(ae){let Z=[];for(let Ne of ae)Ne==="*"?Z.push(...S.map(qe=>qe.name)):Z.push(Ne.name||Ne);return Z}return S.map(Z=>Z.name)},$e}static transformToOrderedSelect(p,O,I,N,b,L){let y=new kV;if(I){p=oy(p,O,N,b,null);let M;y.iterate=function(){let C,G=p[Symbol.asyncIterator]?p[Symbol.asyncIterator]():p[Symbol.iterator](),q,ae=I.dbOrderedAttribute,Te,te,Be=!0;function le(ne){let Z=ne.next&&le(ne.next),Ne=ne.descending;return(qe,Os)=>{let Wi=Wm(qe,ne.attribute,N),Qe=Wm(Os,ne.attribute,N),jt=Ne?(0,Ka.compareKeys)(Qe,Wi):(0,Ka.compareKeys)(Wi,Qe);return jt===0?Z?.(qe,Os)||0:jt}}a(le,"createComparator");let $e=le(I);return{async next(){let ne;if(C)if(ne=C.next(),ne.done){if(q)return y.onDone&&y.onDone(),ne}else return{value:await L.call(this,ne.value)};M=[],Te&&M.push(Te);do if(ne=await G.next(),ne.done){if(q=!0,M.length)break;return y.onDone&&y.onDone(),ne}else{let Z=ne.value;if(Z?.then&&(Z=await Z),ae){let Ne=Wm(Z,ae,N);if(Be)Be=!1,te=Ne;else if(Ne!==te){te=Ne,Te=Z;break}}M.push(Z)}while(!0);return I.isGrouped,M.sort($e),C=M[Symbol.iterator](),ne=C.next(),ne.done?(y.onDone&&y.onDone(),ne):{value:await L.call(this,ne.value)}},return(){y.onDone&&y.onDone(),G.return()},throw(){y.onDone&&y.onDone(),G.throw()}}};let $=a(C=>{if(typeof O=="object"&&Array.isArray(C.attribute))for(let G=0;G<O.length;G++){let q=O[G],ae;if(q.name===C.attribute[0]){for(ae=q.sort||(q.sort={});ae.next;)ae=ae.next;ae.attribute=C.attribute.slice(1),ae.descending=C.descending}else q===C.attribute[0]&&(O[G]=ae={name:q,sort:{attribute:C.attribute.slice(1),descending:C.descending}})}C.next&&$(C.next)},"applySortingOnSelect");$(I)}else y.iterate=(p[Symbol.asyncIterator]||p[Symbol.iterator]).bind(p),y=y.map(L);return y}static transformEntryForSelect(p,O,I,N,b,L){if(p&&(p===t||p?.length===1&&p[0]===t)){let C=a(G=>G?.key??G,"transform");return p===t?C:p.asArray?G=>[C(G)]:G=>({[t]:C(G)})}let y;b&&P&&!p?.every(C=>{let G;return typeof C=="object"?G=C.name:G=C,r[G]||G===t})&&(y=!0);let M,$=a(function(C){let G;if(C!=null){if($m=C,G=C.value||C.deref?.(),!G&&(C.key===void 0||C.deref)){if(C=Ym(C.key??C,O,{transaction:I,lazy:p?.length<4},this.isSync,q=>q),C?.then)return C.then($.bind(this));G=C?.value}if(y&&(C.metadataFlags&(cd|ld)||C.expiresAt&&C.expiresAt<Date.now())){let q=Km(C.key??C,C,O);if(q?.then)return q.then($)}}if(G==null)return L?Va.SKIP:G;if(p&&!(p[0]==="*"&&p.length===1)){let q,ae=a((te,Be)=>{let le;typeof te=="object"?le=te.name:le=te;let $e=Ki?.[le],ne;if($e){let Z=N?.[le];if(Z)if(Z.hasMappings){let qe=$e.from?G[$e.from]:ds(C.key);ne=Z.get(qe),ne||(ne=[])}else ne=Z.fromRecord?.(G);else ne=$e(G,O,C);let Ne=a(qe=>{if(qe&&typeof qe=="object"){let Os=$e.definition?.tableClass||Je;M||(M={});let Wi=M[le]||(M[le]=Os.transformEntryForSelect(le===te?null:te.select||(Array.isArray(te)?te:null),O,I,Z,b));if(Array.isArray(qe)){let Qe=[],jt=Os.transformToOrderedSelect(qe,te.select,typeof te.sort=="object"&&te.sort,O,I,Wi)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),wn=a(zt=>{for(;!zt.done;){if(zt?.then)return zt.then(wn);Qe.push(zt.value),zt=jt.next()}Be(Qe,le)},"nextValue"),bs=wn(jt.next());bs&&(q||(q=[]),q.push(bs));return}else if(qe=Wi.call(this,qe),qe?.then){q||(q=[]),q.push(qe.then(Qe=>Be(Qe,le)));return}}Be(qe,le)},"handleResolvedValue");ne?.then?(q||(q=[]),q.push(ne.then(Ne))):Ne(ne);return}else ne=G[le],ne&&typeof ne=="object"&&le!==te&&(ne=Je.transformEntryForSelect(te.select||te,O,I,null)({value:ne}));Be(ne,le)},"selectAttribute"),Te;if(typeof p=="string")ae(p,te=>{Te=te});else if(Array.isArray(p))if(p.asArray)Te=[],p.forEach((te,Be)=>{te==="*"?p[Be]=G:ae(te,le=>Te[Be]=le)});else{Te={};let te=p.forceNulls;for(let Be of p)if(Be==="*")for(let le in G)Te[le]=G[le];else ae(Be,(le,$e)=>{le===void 0&&te&&(le=null),Te[$e]=le})}else throw new Kn.ClientError("Invalid select"+p);return q?Promise.all(q).then(()=>Te):Te}return G},"transform");return $}async subscribe(p){if(!l)throw new Error("Can not subscribe to a table without an audit log");h||Et({table:s,database:c,schemaDefined:_,attributes:S,audit:!0}),p||(p={});let O=!p.rawEvents,I=ZF(Je,this[Ue]??null,function(y,M,$,C){try{let G=M.getValue?.(i,O);if(!G&&M.type==="patch"&&O){let q=i.getEntry(y);q?.version===M.version?G=q.value:G=M.getValue?.(i,!0,$),M.type="put"}this.send({id:y,timestamp:$,value:G,version:M.version,type:M.type,beginTxn:C})}catch(G){st.error(G)}},p.startTime||0,this[Yn]);this[Yn]&&(I.includeDescendants=!0,p.onlyChildren&&(I.onlyChildren=!0)),p.crossThreads===!1&&(I.crossThreads=!1),p.supportsTransactions&&(I.supportsTransactions=!0);let N=this[Ue],b=p.previousCount;b>1e3&&(b=1e3);let L=p.startTime;if(this[Yn]){if(L){if(b)throw new Kn.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:y,value:M}of l.getRange({start:L,exclusiveStart:!0})){let $=kt(M);if($.tableId!==n)continue;let C=$.recordId;if(N==null||ak(N,C)){let G=$.getValue(i,O,y);I.send({id:C,timestamp:y,value:G,version:$.version,type:$.type})}I.startTime=y}}else if(b){let y=[];for(let{key:M,value:$}of l.getRange({start:"z",end:!1,reverse:!0}))try{let C=kt($);if(C.tableId!==n)continue;let G=C.recordId;if(N==null||ak(N,G)){let q=C.getValue(i,O,M);if(y.push({id:G,timestamp:M,value:q,version:C.version,type:C.type}),--b<=0)break}}catch(C){st.error("Error getting history entry",M,C)}for(let M=y.length;M>0;)I.send(y[--M]);y[0]&&(I.startTime=y[0].timestamp)}else if(!p.omitCurrent)for(let{key:y,value:M,version:$,localTime:C}of i.getRange({start:N??!1,end:N==null?void 0:[N,Ka.MAXIMUM_KEY],versions:!0}))M&&I.send({id:y,timestamp:C,value:M,version:$,type:"put"})}else{b&&!L&&(L=0);let y=this[Tn]?.localTime;if(y===BS&&(i.cache?.delete(N),this[Tn]=i.getEntry(N),st.trace("re-retrieved record",y,this[Tn]?.localTime),y=this[Tn]?.localTime),st.trace("Subscription from",L,"from",N,y),L<y){let M=[],$=y;do{let C=l.get($);if(C){p.omitCurrent=!0;let G=kt(C),q=G.getValue(i,O,$);O&&(G.type="put"),M.push({id:N,value:q,timestamp:$,...G}),$=G.previousLocalTime}else break;b&&b--}while($>L&&b!==0);for(let C=M.length;C>0;)I.send(M[--C]);I.startTime=y}!p.omitCurrent&&this.doesExist()&&I.send({id:N,timestamp:y,value:this,version:this[_d],type:"put"})}return p.listener&&I.on("data",p.listener),I}doesExist(){return!!(this[fe]||this[ad])}publish(p,O){this._writePublish(p,O)}_writePublish(p,O){let I=Jn(this[Ie]),N=this[Ue]||null;vl(N);let b=this[Ie];I.addWrite({key:N,store:i,entry:this[Tn],nodeName:b?.nodeName,validate:()=>{b?.source||(I.checkOverloaded(),this.validate(p))},before:Me.publish?.bind(this,b,N,p),beforeIntermediate:Ge.publish?.bind(this,b,N,p),commit:(L,y,M)=>{y===void 0&&m&&!h&&Qm(),g(N,y?.value??null,y,y?.version||L,0,!0,b,y?.expiresAt,"message",!1,p)}})}validate(p,O){let I,N=a((b,L,y)=>{if(L.type&&b!=null)if(O&&b.__op__&&(b=b.value),L.properties){typeof b!="object"&&(I||(I=[])).push(`Value ${ms(b)} in property ${y} must be an object${L.type?" ("+L.type+")":""}`);let M=L.properties;for(let $=0,C=M.length;$<C;$++){let G=M[$],q=N(b[G.name],G,y+"."+G.name);q&&(b[G.name]=q)}if(L.sealed&&b!=null&&typeof b=="object")for(let $ in b)M.find(C=>C.name===$)||(I||(I=[])).push(`Property ${$} is not allowed within object in property ${y}`)}else switch(L.type){case"Int":(typeof b!="number"||b>>0!==b)&&(I||(I=[])).push(`Value ${ms(b)} in property ${y} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof b!="number"||!(Math.floor(b)===b&&Math.abs(b)<=9007199254740992))&&(I||(I=[])).push(`Value ${ms(b)} in property ${y} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof b!="number"&&(I||(I=[])).push(`Value ${ms(b)} in property ${y} must be a number`);break;case"ID":typeof b=="string"||b?.length>0&&b.every?.(M=>typeof M=="string")||(I||(I=[])).push(`Value ${ms(b)} in property ${y} must be a string, or an array of strings`);break;case"String":typeof b!="string"&&(I||(I=[])).push(`Value ${ms(b)} in property ${y} must be a string`);break;case"Boolean":typeof b!="boolean"&&(I||(I=[])).push(`Value ${ms(b)} in property ${y} must be a boolean`);break;case"Date":if(!(b instanceof Date)){if(typeof b=="string"||typeof b=="number")return new Date(b);(I||(I=[])).push(`Value ${ms(b)} in property ${y} must be a Date`)}break;case"BigInt":if(typeof b!="bigint"){if(typeof b=="string"||typeof b=="number")return BigInt(b);(I||(I=[])).push(`Value ${ms(b)} in property ${y} must be a bigint`)}break;case"Bytes":b instanceof Uint8Array||(I||(I=[])).push(`Value ${ms(b)} in property ${y} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(b)){if(L.elements)for(let M=0,$=b.length;M<$;M++){let C=b[M],G=N(C,L.elements,y+"[*]");G&&(b[M]=G)}}else(I||(I=[])).push(`Value ${ms(b)} in property ${y} must be a Buffer or Uint8Array`);break}L.nullable===!1&&b==null&&(I||(I=[])).push(`Property ${y} is required (and not does not allow null values)`)},"validateValue");for(let b=0,L=S.length;b<L;b++){let y=S[b];if(!y.relationship&&(!O||y.name in p)){let M=N(p[y.name],y,y.name);M&&(p[y.name]=M)}}if(d)for(let b in p)S.find(L=>L.name===b)||(I||(I=[])).push(`Property ${b} is not allowed`);if(I)throw new Kn.ClientError(I.join(". "))}getUpdatedTime(){return this[_d]}wasLoadedFromSource(){return P?!!this[sN]:void 0}static async addAttributes(p){let O=S.slice(0);for(let I of p){if(!I.name)throw new Kn.ClientError("Attribute name is required");if(I.name.match(/[`/]/))throw new Kn.ClientError("Attribute names cannot include backticks or forward slashes");O.push(I)}return Et({table:s,database:c,schemaDefined:_,attributes:O}),Je.indexingOperation}static async removeAttributes(p){let O=S.filter(I=>!p.includes(I.name));return Et({table:s,database:c,schemaDefined:_,attributes:O}),Je.indexingOperation}static getRecordCount(p){let O=i.getStats().entryCount,I=5e3,N=1e3,b;O>I&&!p?.exactCount&&(b=N);let L=0;for(let{value:y}of i.getRange({start:!0,lazy:!0,limit:b}))y!=null&&L++;if(b){let y=L;L=0;for(let{value:Be}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:b}))Be!=null&&L++;let M=b*2,$=(L+y)/M,C=Math.pow((L-y+1)/b/2,2)+$*(1-$)/M,G=Math.max(Math.sqrt(C)*O,1),q=Math.round($*O),ae=Math.max(q-1.96*G,0),Te=Math.min(q+1.96*G,O),te=Math.pow(10,Math.round(Math.log10(G)));return te>q&&(te=te/10),L=Math.round(q/te)*te,{recordCount:L,estimatedRange:[Math.round(ae),Math.round(Te)]}}return{recordCount:L}}static updatedAttributes(){Ki=this.propertyResolvers={$id:(p,O,I)=>({value:I.key}),$updatedtime:(p,O,I)=>I.version,$record:(p,O,I)=>I?{value:p}:p};for(let p of this.attributes){p.resolve=null;let O=p.relationship;if(O)if(p.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),iy=!0,O.to)p.elements?.definition?(Ki[p.name]=p.resolve=(I,N,b)=>{let L=I[O.from?O.from:t],y=p.elements.definition.tableClass;return b?rl({attribute:O.to,value:L},Jn(N).getReadTxn(),!1,y,!1).asArray:y.search([{attribute:O.to,value:L}],N).asArray},p.set=()=>{throw new Error("Setting a one-to-many relationship property is not supported")},p.resolve.definition=p.elements.definition,O.from&&(p.resolve.from=O.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(O.from){let I=p.definition||p.elements?.definition;I?(Ki[p.name]=p.resolve=(N,b,L)=>{let y=N[O.from];if(y!==void 0){if(p.elements){let M,$=y.map(C=>{let G=L?I.tableClass.primaryStore.getEntry(C,{transaction:Jn(b).getReadTxn()}):I.tableClass.get(C,b);return G?.then&&(M=!0),G});return O.filterMissing?M?Promise.all($).then(C=>C.filter(ck)):$.filter(ck):M?Promise.all($):$}return L?I.tableClass.primaryStore.getEntry(y,{transaction:Jn(b).getReadTxn()}):I.tableClass.get(y,b)}},p.set=(N,b)=>{if(Array.isArray(b)){let L=b.map(y=>y[Ue]||y[I.tableClass.primaryKey]);N[O.from]=L}else{let L=b[Ue]||b[I.tableClass.primaryKey];N[O.from]=L}},p.resolve.definition=p.definition||p.elements?.definition,p.resolve.from=O.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`)}zp(this,this)}static async deleteHistory(p=0){let O;for(let{key:I,value:N}of l.getRange({start:0,end:p}))await ud(),kt(N).tableId===n&&(O=l.remove(I));await O}static async*getHistory(p=0,O=1/0){for(let{key:I,value:N}of l.getRange({start:p,end:O})){await ud();let b=kt(N);b.tableId===n&&(yield{id:b.recordId,localTime:I,version:b.version,type:b.type,value:b.getValue(i,!0,I),user:b.user})}}static async getHistoryOfRecord(p){let O=[];if(p==null)throw new Error("An id is required");let I=i.getEntry(p);if(!I)return O;let N=I.localTime;if(!N)throw new Error("The entry does not have a local audit time");let b=0;do{await ud();let L=l.get(N);if(L){let y=kt(L);O.push({id:y.recordId,localTime:N,version:y.version,type:y.type,value:y.getValue(i,!0,N),user:y.user}),N=y.previousLocalTime}else break}while(b<1e3&&N);return O.reverse()}static cleanup(){z?.remove()}}Je.updatedAttributes();let YV=Je.prototype;return YV[sue]=!0,f&&Je.setTTLExpiration(f/1e3),j&&KV(),Je;function xd(W,p,O){let I;for(let N in r){let b=r[N],L=b.isIndexing,y=O?.[N],M=p?.[N];if(y===M&&!L)continue;I=!0;let $=b.indexNulls,C=(0,dd.getIndexedValues)(y,$),G=(0,dd.getIndexedValues)(M,$);if(G?.length>0){let q=new Set(G);if(C=C?C.filter(ae=>{if(q.has(ae))q.delete(ae);else return!0}):[],G=Array.from(q),(G.length>0||C.length>0)&&nk){let ae=G.concat(C).map(Te=>({key:Te,value:W}));b.prefetch(ae,ok)}for(let ae=0,Te=G.length;ae<Te;ae++)b.remove(G[ae],W)}else C?.length>0&&nk&&b.prefetch(C.map(q=>({key:q,value:W})),ok);if(C)for(let q=0,ae=C.length;q<ae;q++)b.put(C[q],W)}return I}a(xd,"updateIndices");function vl(W){switch(typeof W){case"number":return!0;case"string":if(W.length<659)return!0;if(W.length>ik)throw new Error("Primary key size is too large: "+W.length);break;case"object":if(W===null)return!0;break;case"bigint":if(W<2n**64n&&W>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof W)}if((0,Ka.writeKey)(W,oue,0)>ik)throw new Error("Primary key size is too large: "+W.length);return!0}a(vl,"checkValidId");function Ym(W,p,O,I,N){let b=a(()=>{if(p?.transaction?.stale&&(p.transaction.stale=!1),O.transaction?.isDone)return N(null,W);let L=i.getEntry(W,O);return L&&p&&(L?.version>(p.lastModified||0)&&(p.lastModified=L.version),L?.localTime&&!p.lastRefreshed&&(p.lastRefreshed=L.localTime)),N(L,W)},"whenPrefetched");return I?b():ue>0?(ue--,b()):new Promise((L,y)=>{ue===0?(ue--,i.prefetch([W],()=>{M(),$()})):(J.push(W),Se.push($),J.length>VV&&(ue--,M()));function M(){if(J.length>0){let C=Se;i.prefetch(J,()=>{ue===-1?M():ue++;for(let G of C)G()}),J=[],Se=[],Ee>2&&Ee--}else ue=Ee,Ee<$V&&Ee++}a(M,"prefetch");function $(){try{L(b())}catch(C){y(C)}}a($,"load")})}a(Ym,"loadLocalRecord");function Fd(W){if(!W?.role)return;let p=W.role.permission;if(p.super_user)return aue;let O=p[c],I,N=O?.tables;if(N)return N[s];if(c==="data"&&(I=p[s])&&!I.tables)return I}a(Fd,"getTablePermissions");function Km(W,p,O,I){if(P){let N;if(O.noCache?N=!0:(p?(!p.value||p.metadataFlags&(cd|ld)||p.expiresAt&&p.expiresAt<Date.now())&&(N=!0):N=!0,Un(!N,"cache-hit",s)),N){let b=ay(W,p,O).then(L=>(L?.value?.[fe]&&st.error("Can not assign a record with a record property"),O&&(L?.version>(O.lastModified||0)&&(O.lastModified=L.version),O.lastRefreshed=Date.now()),L));if(O?.onlyIfCached||p?.value&&I?.allowStaleWhileRevalidate?.(p,W)){if(b.catch(L=>st.warn(L)),O?.onlyIfCached&&!I.doesExist())throw new Kn.ServerError("Entry is not cached",504);return}else return b}}}a(Km,"ensureLoadedFromSource");function Jn(W){let p=W?.transaction;if(p){if(!p.lmdbDb)return p.lmdbDb=i,p;do{if(p.lmdbDb?.path===i.path)return p;let O=p.next;if(!O)return p=p.next=new da,p.lmdbDb=i,p;p=O}while(!0)}else return new Zf}a(Jn,"txnForContext");function Wm(W,p,O){if(!W)return;$m=W;let I=W.value||W.deref?.()||($m=i.getEntry(W.key))?.value;if(typeof p=="object"){let b=Ki,L=I;for(let y=0,M=p.length;y<M;y++){let $=p[y],C=b?.[$];L=C&&L?C(L,O,!0)?.value:L?.[$],b=C?.definition?.tableClass?.propertyResolvers}return L}let N=Ki[p];return N?N(I,O):I[p]}a(Wm,"getAttributeValue");function oy(W,p,O,I,N){let b=N?.length,L={transaction:I,lazy:b>0||typeof p=="string"||p?.length<4,alwaysPrefetch:!0},y;function M($,C){let G=$?.value;if(!G)return Va.SKIP;for(let q=0;q<b;q++)if(!y?.includes(q)&&!N[q](G,$))return Va.SKIP;return C!==void 0&&($.key=C),$}if(a(M,"processEntry"),b>0||!W.hasEntries){let $=W.map(C=>{if(y=null,typeof C=="object"&&C?.key!==void 0)return b>0?M(C):C;if(C==null)return Va.SKIP;for(let G=0;G<b;G++){let ae=N[G].idFilter;if(ae){if(!ae(C))return Va.SKIP;y||(y=[]),y.push(G)}}return Ym(C,O,L,!1,M)});return Array.isArray(W)&&($=$.filter(C=>C!==Va.SKIP)),$.hasEntries=!0,$}return W}a(oy,"transformToEntries");async function ay(W,p,O){let I=p?.metadataFlags,N=p?.version,b,L;if(!i.attemptLock(W,N,()=>{clearTimeout(L);let C=i.getEntry(W);!C||!C.value||C.metadataFlags&(cd|ld)?b(ay(W,i.getEntry(W),O)):b(C)}))return new Promise(C=>{b=C,L=setTimeout(()=>{i.unlock(W,N)},nue)});let y=p?.value,M={requestContext:O,replacingRecord:y,replacingVersion:N,source:null,resourceCache:O?.resourceCache},$=O?.responseHeaders;return new Promise((C,G)=>{let q;oN(Ze(M,async ae=>{let Te=performance.now(),te,Be,le;try{for(let Ne of Je.sources)if(Ne.get&&(!Ne.get.reliesOnPrototype||Ne.prototype.get)&&(M.source=Ne,te=await Ne.get(W,M),te))break;le=I&cd;let ne=M.lastModified||le&&N;Be=le||ne>N||!y,ne||(ne=(0,dd.getNextMonotonicTime)());let Z=performance.now()-Te;if(un(Z,"cache-resolution",s),$&&DA($,"Server-Timing",`cache-resolve;dur=${Z.toFixed(2)}`,!0),ae.timestamp=ne,f&&!M.expiresAt&&(M.expiresAt=Date.now()+f),te){if(typeof te!="object")throw new Error("Only objects can be cached and stored in tables");typeof te.toJSON=="function"&&(te=te.toJSON()),t&&te[t]!==W&&(te[t]=W)}q=!0,C({version:ne,value:te})}catch(ne){ne.message+=` while resolving record ${W} for ${s}`,y&&((ne.code==="ECONNRESET"||ne.code==="ECONNREFUSED"||ne.code==="EAI_AGAIN")&&!O?.mustRevalidate||O?.staleIfError&&(ne.statusCode===500||ne.statusCode===502||ne.statusCode===503||ne.statusCode===504))?(C({version:N,value:y}),st.trace(ne.message,"(returned stale record)")):G(ne),M.transaction.abort();return}if(O?.noCacheStore){M.transaction.abort();return}Jn(M).addWrite({key:W,store:i,entry:p,nodeName:"source",commit:(ne,Z)=>{if(Z?.version!==N)return;let Ne=xd(W,y,te);te?(Ge.put?.(M,W,te),g(W,te,Z,ne,0,h&&Be||null,M,M.expiresAt,"put",!!le)):(Ge.delete?.(M,W),h||m?g(W,null,Z,ne,0,h&&Be||null,M,0,"delete",!!le):i.remove(W,N))}})}),()=>{i.unlock(W,N)},ae=>{i.unlock(W,N),q&&st.error("Error committing cache update",ae)})})}a(ay,"getFromSource");function Qm(){if(Ft!==Gd&&(Gd=Ft,(0,Ya.getWorkerIndex)()===(0,Ya.getWorkerCount)()-1)){if(qd&&clearTimeout(qd),!Ft)return;let W=new Date;W.setMonth(0),W.setDate(1),W.setHours(0),W.setMinutes(0),W.setSeconds(0);let p=Math.ceil((Date.now()-W.getTime())/Ft)*Ft+W.getTime(),O=a(I=>{st.trace(`Scheduled next cleanup scan at ${new Date(I)}ms`),qd=setTimeout(()=>v=v.then(async()=>{if(O(Math.max(I+Ft,Date.now())),i.rootStore.status!=="open"){clearTimeout(qd);return}let N=50,b=new Array(N),L=0;st.trace(`Starting cleanup scan for ${s}`);try{let y=0;for(let{key:M,value:$,version:C,expiresAt:G}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let q;$===null&&!h&&C+rue<Date.now()?q=i.remove(M,C):G&&G+E<Date.now()&&(q=Je.evict(M,$,C),y++),q&&(await b[L],b[L]=q.catch(ae=>{st.error("Cleanup error",ae)}),++L>=N&&(L=0)),await ud()}st.trace(`Finished cleanup scan for ${s}, evicted ${y} entries`)}catch(y){st.trace(`Error in cleanup scan for ${s}:`,y)}}),Math.min(I-Date.now(),2147483647)).unref()},"startNextTimer");O(p)}}a(Qm,"scheduleCleanup");function cy(){z=l?.addDeleteRemovalCallback(n,W=>{let p=i.getEntry(W);p?.value===null&&i.remove(W,p.version)})}a(cy,"addDeleteRemoval");function KV(){(0,Ya.getWorkerIndex)()===0&&setInterval(async()=>{if(!Vm){Vm=!0;try{let W=j.name,p=r[W];if(!p)throw new Error(`expiresAt attribute ${j} must be indexed`);for(let O of p.getRange({start:!0,values:!1,end:Date.now(),snapshot:!1})){for(let I of p.getValues(O)){let N=i.getEntry(I);N?.value?N.value[W]<Date.now()&&Je.evict(I,N.value,N.version):i.ifVersion(I,N?.version,()=>p.remove(O,I))}await ud()}}catch(W){st.error("Error in evicting old records",W)}finally{Vm=!1}}},tue).unref()}a(KV,"runRecordExpirationEviction")}function iN(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 ok(){}function cue(e){uk=e}function em(e,t){let r=t?.type;return e===null?e:e===""&&r&&r!=="String"&&r!=="Any"?null:r==="Int"||r==="Long"?e==="null"?null:parseInt(e):r==="Float"?e==="null"?null:parseFloat(e):r==="BigInt"?e==="null"?null:BigInt(e):r==="Boolean"?e==="true"?!0:e==="false"?!1:e:r==="Date"?(typeof e!="number"&&!lue.test(e)&&(e+="Z"),e==="null"?null:new Date(e)):!r||r==="Any"?(0,rm.autoCast)(e):e}function ak(e,t){if(e==null)return!0;if(!Array.isArray(t))return e===t;if(Array.isArray(e)){let r=e.length;if(e[r-1]===null&&r--,t.length>=r){for(let n=0;n<r;n++)if(t[n]!==e[n])return!1;return!0}return!1}else if(t[0]===e)return!0}function oN(e,t,r){return e?.then?e.then(t,r):t(e)}function tm(e,t){e[Tn]=t,e[fe]=t?.value??null,e[_d]=t?.version}function ck(e){return e!=null}function ms(e){try{return JSON.stringify(e)}catch{return e}}var Ss,Va,dd,lk,hd,Kn,fd,Ed,st,Ka,Ya,rm,eue,uk,tue,rue,nk,nue,_d,sue,Tn,ad,sk,iue,sN,Al,cd,ld,oue,ik,aue,Hye,lue,ud,np=Oe(()=>{Ss=B(D()),Va=require("lmdb"),dd=B(Ar()),lk=require("lodash");es();Dg();hd=B(X());rk();Kn=B(oe()),fd=B(di()),Ed=B(is());ge();$h();st=B(x());rE();fa();Ka=require("ordered-binary"),Ya=B(et());Zi();rm=B(K());nu();pi();$p();b_();eue=new Uint8Array(9);eue[8]=192;tue=6e4,rue=864e5;hd.initSync();nk=hd.get(Ss.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),nue=1e4,_d=Symbol.for("version"),sue=Symbol.for("incremental-update"),Tn=Symbol("entry"),ad=Symbol("is-saving"),sk=1,iue=2,sN=Symbol("loaded-from-source"),Al={isNotification:!0,ensureLoaded:!1},cd=1,ld=8,oue=Buffer.allocUnsafeSlow(8192),ik=1978,aue={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},Hye=(0,rm.convertToMS)(hd.get(Ss.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(nm,"makeTable");a(iN,"attributesAsObject");a(ok,"noop");a(cue,"setServerUtilities");lue=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(em,"coerceType");a(ak,"isDescendantId");ud=a(()=>new Promise(setImmediate),"rest");a(oN,"when");a(tm,"updateResource");a(ck,"exists");a(ms,"stringify")});var ke={};Fe(ke,{database:()=>Mu,databases:()=>lt,dropDatabase:()=>vg,dropTableMeta:()=>Eue,getDatabases:()=>Dr,getDefaultCompression:()=>dh,getTables:()=>uue,onUpdatedTable:()=>bb,readMetaDb:()=>pd,resetDatabases:()=>m_,table:()=>Et,tables:()=>en});function uue(){return cm||Dr(),en||{}}function Dr(){if(cm)return lt;cm=!0,Nl=new Map;let e=(0,gt.getHdbBasePath)()&&(0,it.join)((0,gt.getHdbBasePath)(),qt.DATABASES_DIR_NAME),t=(0,gt.get)(qt.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,gt.get)(qt.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,gn.existsSync)(e)?e:(0,it.join)((0,gt.getHdbBasePath)(),qt.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,gn.existsSync)(e))for(let r of(0,gn.readdirSync)(e,{withFileTypes:!0})){let n=(0,it.basename)(r.name,".mdb");r.isFile()&&(0,it.extname)(r.name).toLowerCase()===".mdb"&&!t[n]?.path&&pd((0,it.join)(e,r.name),null,n)}if((0,gn.existsSync)((0,bl.getBaseSchemaPath)())){for(let r of(0,gn.readdirSync)((0,bl.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,it.join)((0,bl.getBaseSchemaPath)(),r.name),s=(0,it.join)((0,bl.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,gn.readdirSync)(n,{withFileTypes:!0}))if(i.isFile()&&(0,it.extname)(i.name).toLowerCase()===".mdb"){let o=(0,it.join)(s,i.name);pd((0,it.join)(n,i.name),(0,it.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let n=t[r],s=n.path;if((0,gn.existsSync)(s))for(let o of(0,gn.readdirSync)(s,{withFileTypes:!0}))o.isFile()&&(0,it.extname)(o.name).toLowerCase()===".mdb"&&pd((0,it.join)(s,o.name),(0,it.basename)(o.name,".mdb"),r);let i=n.tables;if(i)for(let o in i){let c=i[o],l=(0,it.join)(c.path,(0,it.basename)(o+".mdb"));(0,gn.existsSync)(l)&&pd(l,o,r,null,!0)}}for(let r in lt){let n=Nl.get(r);if(n){let s=lt[r];r.includes("delete")&&Wn.trace(`defined tables ${Array.from(n.keys())}`);for(let i in s)n.has(i)||(Wn.trace(`delete table class ${i}`),delete s[i])}else if(delete lt[r],r==="data"){for(let s in en)delete en[s];delete en[um]}}return Nl=null,lt}}function m_(){cm=!1;for(let[,e]of Mo)e.needsDeletion=!0;Dr();for(let[e,t]of Mo)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),Mo.delete(e));return lt}function pd(e,t,r=lN,n,s){let i=new aN.default(e,!1);try{let o=Mo.get(e);o?o.needsDeletion=!1:(o=(0,im.open)(i),Mo.set(e,o));let c=new Wa.default(!1),l=o.dbisDb||(o.dbisDb=o.openDB(sm.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(n?(0,gn.existsSync)(n)&&(i.path=n,_=(0,im.open)(i),_.isLegacy=!0):_=kp(o));let u=Ek(r),d=u[um],f=new Map;for(let{key:E,value:h}of l.getRange({start:!1})){let[m,S]=E.toString().split("/");S===""?S=h.name:S||(S=m,m=t,h.name||(h.name=S,h.indexed=!h.is_hash_attribute)),d?.add(m);let g=f.get(m);g||f.set(m,g={attributes:[]}),(S==null||h.is_hash_attribute)&&(g.primary=h),S!=null&&g.attributes.push(h),Object.defineProperty(h,"key",{value:E,configurable:!0})}for(let[E,h]of f){let{attributes:m,primary:S}=h;if(!S){for(let J of m)if(J.is_hash_attribute||J.isPrimaryKey){S=J;break}if(!S){Wn.fatal(`Unable to find a primary key attribute on table ${E}, with attributes: ${JSON.stringify(m)}`);continue}}let g=u[E],R={},A=[],P,U,v=typeof S.audit=="boolean"?S.audit:(0,gt.get)(qt.CONFIG_PARAMS.LOGGING_AUDITLOG),k=S.trackDeletes,H=S.expiration,j=S.eviction,z=S.sealed;if(g)R=g.indices,A=g.attributes,g.schemaVersion++;else{P=S.tableId,P?P>=(l.get(Ol)||0)&&l.putSync(Ol,P+1):(S.tableId=P=l.get(Ol),P||(P=1),l.putSync(Ol,P+1),l.putSync(S.key,S));let J=new Wa.default(!S.is_hash_attribute,S.is_hash_attribute);if(J.compression=S.compression,J.compression){let Se=(0,gt.get)(qt.CONFIG_PARAMS.STORAGE_COMPRESSION_THRESHOLD)||fk;J.compression.threshold=Se}U=af(o.openDB(S.key,J)),U.rootStore=o,U.tableId=P}for(let J of m){J.attribute=J.name;try{if(!J.is_hash_attribute&&(J.indexed||J.attribute&&!J.name)){if(!R[J.name]){let ue=new Wa.default(!J.is_hash_attribute,J.is_hash_attribute);R[J.name]=o.openDB(J.key,ue),R[J.name].indexNulls=J.indexNulls}let Se=A.find(ue=>ue.name===J.name);Se?A.splice(A.indexOf(Se),1,J):A.push(J)}}catch(Se){Wn.error("Error trying to update attribute",J,A,R,Se)}}if(!g){g=hk(u,E,nm({primaryStore:U,auditStore:_,audit:v,sealed:z,expirationMS:H&&H*1e3,evictionMS:j&&j*1e3,trackDeletes:k,tableName:E,tableId:P,primaryKey:S.name,databasePath:s?r+"/"+E:r,databaseName:r,indices:R,attributes:m,schemaDefined:S.schemaDefined,dbisDB:l})),g.schemaVersion=1;for(let J of uN)J(g)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function Ek(e){let t=lt[e];if(t||(e==="data"?t=lt[e]=en:e==="system"?Object.defineProperty(lt,"system",{value:t=Object.create(null),configurable:!0}):t=lt[e]=Object.create(null)),Nl&&!Nl.has(e)){let r=new Set;t[um]=r,Nl.set(e,r)}return t}function hk(e,t,r){return e[t]=r,r}function Mu({database:e,table:t}){e||(e=lN),Dr();let r=Ek(e),n=(0,it.join)((0,gt.getHdbBasePath)(),qt.DATABASES_DIR_NAME),s=(0,gt.get)(qt.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,gt.get)(qt.CONFIG_PARAMS.STORAGE_PATH)||((0,gn.existsSync)(n)?n:(0,it.join)((0,gt.getHdbBasePath)(),qt.LEGACY_DATABASES_DIR_NAME));let o=(0,it.join)(n,(i?t:e)+".mdb"),c=Mo.get(o);if(!c){let l=new aN.default(o,!1);c=(0,im.open)(l),Mo.set(o,c)}return c}async function vg(e){if(!lt[e])throw new Error("Schema does not exist");let t=lt[e];for(let r in t){let s=t[r].primaryStore.rootStore;Mo.delete(s.path),s.status==="open"&&(await s.close(),await lm.remove(s.path))}if(e==="data"){for(let r in en)delete en[r];delete en[um]}delete lt[e]}function Et({table:e,database:t,expiration:r,eviction:n,scanInterval:s,attributes:i,audit:o,sealed:c,trackDeletes:l,schemaDefined:_,origin:u}){t||(t=lN);let d=Mu({database:t,table:e}),f=lt[t],E=f?.[e];if(d.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let h,m,S,g;_==null&&(_=!0);let R=new Wa.default(!1);for(let H of i)H.attribute?(H.name=H.attribute,H.indexed=!0):H.attribute=H.name,H.expiresAt&&(H.indexed=!0);let A,P;if(E){if(h=E.primaryKey,E.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${e} class`);E.attributes.splice(0,E.attributes.length,...i)}else{let H=d.auditStore;H||(H=kp(d)),m=i.find(Se=>Se.isPrimaryKey)||{},h=m.name,m.is_hash_attribute=!0,m.schemaDefined=_,m.compression=dh(),l&&(m.trackDeletes=!0),o=m.audit=typeof o=="boolean"?o:(0,gt.get)(qt.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(m.expiration=r),n&&(m.eviction=n),typeof c=="boolean"&&(m.sealed=c),u&&(m.origins?m.origins.includes(u)||m.origins.push(u):m.origins=[u]),Wn.trace(`${e} table loading, opening primary store`);let j=new Wa.default(!1,!0);j.compression=m.compression;let z=e+"/",J=af(d.openDB(z,j));J.rootStore=d,g=d.dbisDb=d.openDB(sm.INTERNAL_DBIS_NAME,R),J.tableId=g.get(Ol),J.tableId||(J.tableId=1),g.putSync(Ol,J.tableId+1),m.tableId=J.tableId,E=hk(f,e,nm({primaryStore:J,auditStore:H,audit:o,sealed:c,trackDeletes:l,expirationMS:r&&r*1e3,evictionMS:n&&n*1e3,primaryKey:h,tableName:e,tableId:J.tableId,databasePath:t,databaseName:t,indices:{},attributes:i,schemaDefined:_,dbisDB:g})),E.schemaVersion=1,A=!0,k(),g.put(z,m)}S=E.indices,g=g||(d.dbisDb=d.openDB(sm.INTERNAL_DBIS_NAME,R)),E.dbisDB=g;let U=[];for(let{key:H,value:j}of g.getRange({start:!0})){let[z,J]=H.toString().split("/");if(J===""&&(J=j.name),J){if(z!==e)continue}else J=z;if(!i.find(ue=>ue.name===J)?.indexed&&j.indexed&&!j.isPrimaryKey){k(),A=!0,g.remove(H);let ue=E.indices[z];ue&&U.push(ue)}}let v=[];try{for(let H of i||[]){if(H.relationship)continue;let j=e+"/"+(H.name||"");Object.defineProperty(H,"key",{value:j,configurable:!0});let z=g.get(j);if(H.isPrimaryKey){if(z=z||g.get(j=e+"/")||{},o!==E.audit||c!==c||(+r||void 0)!==(+z.expiration||void 0)||(+n||void 0)!==(+z.eviction||void 0)){let Se=Object.assign({},z);typeof o=="boolean"&&(o&&E.enableAuditing(o),Se.audit=o),r&&(Se.expiration=+r),n&&(Se.eviction=+n),c!==void 0&&(Se.sealed=c),A=!0,k(),g.put(j,Se)}continue}z?.attribute&&!z.name&&(z.indexed=!0);let J=!z||z.type!==H.type||z.indexed!==H.indexed||z.nullable!==H.nullable||JSON.stringify(z.attributes)!==JSON.stringify(H.attributes)||JSON.stringify(z.elements)!==JSON.stringify(H.elements);if(H.indexed){let Se=new Wa.default(!0,!1),ue=d.openDB(j,Se);(J||z.indexingPID&&z.indexingPID!==process.pid||z.restartNumber<md.workerData?.restartNumber)&&(A=!0,k(),z=g.get(j),(J||z.indexingPID&&z.indexingPID!==process.pid||z.restartNumber<md.workerData?.restartNumber)&&(A=!0,H.indexNulls===void 0&&(H.indexNulls=!0),E.primaryStore.getStats().entryCount>0&&(H.lastIndexedKey=z?.lastIndexedKey||!1,H.indexingPID=process.pid,ue.isIndexing=!0,Object.defineProperty(H,"dbi",{value:ue}),v.push(H))),g.put(j,H)),z?.indexNulls&&H.indexNulls===void 0&&(H.indexNulls=!0),ue.indexNulls=H.indexNulls,S[H.name]=ue}else J&&(A=!0,k(),g.put(j,H))}}finally{P&&P()}if(A&&(E.schemaVersion++,E.updatedAttributes()),Wn.trace(`${e} table loading, running index`),v.length>0||U.length>0?E.indexingOperation=fue(E,v,U):A&&om.signalSchemaChange(new am.SchemaEventMsg(process.pid,"schema-change",E.databaseName,E.tableName)),E.origin=u,A)for(let H of uN)H(E,u!=="cluster");return(r||n||s)&&E.setTTLExpiration({expiration:r,eviction:n,scanInterval:s}),Wn.trace(`${e} table loaded`),E;function k(){P||d.transactionSync(()=>({then(H){P=H}}))}a(k,"startTxn")}async function fue(e,t,r){try{let n=e.schemaVersion;await om.signalSchemaChange(new am.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let l of r)s=l.drop();let i,o=0,c=t.length;if(await new Promise(l=>setImmediate(l)),c>0){let l=0;for(let{key:_,value:u,version:d}of e.primaryStore.getRange({start:t[0].lastIndexedKey,lazy:c<4,versions:!0,snapshot:!1}))if(u){if(l++,s=e.primaryStore.ifVersion(_,d,()=>{for(let f=0;f<c;f++){let E=t[f],h=E.name,m=(0,_k.getIndexedValues)(u[h]);if(m)for(let S=0,g=m.length;S<g;S++)E.dbi.put(m[S],_)}}),s.then(()=>l--,f=>{l--,Wn.error(f)}),md.workerData&&md.workerData.restartNumber!==dk.restartNumber&&(i=!0),++o%100===0||i){for(let f of t)f.lastIndexedKey=_,e.dbisDB.put(f.key,f);if(i)return}l>_ue?await s:l>due&&await new Promise(f=>setImmediate(f))}for(let _ of t)delete _.lastIndexedKey,delete _.indexingPID,_.dbi.isIndexing=!1,s=e.dbisDB.put(_.key,_)}await s,await om.signalSchemaChange(new am.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(n){Wn.error("Error in indexing",n)}}function Eue({table:e,database:t}){let r=Mu({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 bb(e){uN.push(e)}function dh(){let e=(0,gt.get)(qt.CONFIG_PARAMS.STORAGE_COMPRESSION),t=(0,gt.get)(qt.CONFIG_PARAMS.STORAGE_COMPRESSION_DICTIONARY),r=(0,gt.get)(qt.CONFIG_PARAMS.STORAGE_COMPRESSION_THRESHOLD)||fk,n={startingOffset:32};return t&&(n.dictionary=lm.readFileSync(t)),r&&(n.threshold=r),e&&n}var gt,sm,im,it,gn,bl,Wa,aN,qt,lm,cN,_k,om,am,md,Wn,dk,lN,um,fk,en,lt,Ol,uN,cm,Mo,Nl,_ue,due,ge=Oe(()=>{gt=B(X()),sm=B(at()),im=require("lmdb"),it=require("path"),gn=require("fs"),bl=B(je());np();Wa=B(su()),aN=B(iu()),qt=B(D()),lm=B(require("fs-extra")),cN=require("../index"),_k=B(Ar()),om=B(di()),am=B(is()),md=require("worker_threads"),Wn=B(x()),dk=B(et());Zi();nu();lN="data",um=Symbol("defined-tables"),fk=((0,gt.get)(qt.CONFIG_PARAMS.STORAGE_PAGESIZE)||4096)-60;(0,gt.initSync)();en=Object.create(null),lt=Object.create(null);(0,cN._assignPackageExport)("databases",lt);(0,cN._assignPackageExport)("tables",en);Ol=Symbol.for("next-table-id"),uN=[],Mo=new Map;a(uue,"getTables");a(Dr,"getDatabases");a(m_,"resetDatabases");a(pd,"readMetaDb");a(Ek,"ensureDB");a(hk,"setTable");a(Mu,"database");a(vg,"dropDatabase");a(Et,"table");_ue=1e3,due=10;a(fue,"runIndexing");a(Eue,"dropTableMeta");a(bb,"onUpdatedTable");a(dh,"getDefaultCompression")});var K=T((Kye,Ck)=>{"use strict";var Uo=require("path"),gk=require("fs-extra"),Yr=x(),pk=require("fs-extra"),_m=require("os"),hue=require("net"),pue=require("recursive-iterator"),ft=D(),mue=aS(),mk=require("papaparse"),dm=require("moment"),{inspect:Sue}=require("util"),Sk=require("is-number"),Yye=require("lodash"),Tue=require("minimist"),gue=require("https"),Rue=require("http"),{hdb_errors:fm}=oe(),Aue=/^((\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)))$/,Rk=require("util").promisify(setTimeout),Oue=100,bue=5,Nue="",yue=4,Tk={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};Ck.exports={isEmpty:Rn,isEmptyOrZeroLength:Ks,arrayHasEmptyValues:Cue,arrayHasEmptyOrZeroLengthValues:Due,buildFolderPath:Lue,isBoolean:Ak,errorizeMessage:Iue,stripFileExtension:Mue,autoCast:Uue,autoCastJSON:Ok,autoCastJSONDeep:dN,removeDir:vue,compareVersions:Bue,isCompatibleDataVersion:Hue,escapeRawValue:Gue,unescapeValue:que,stringifyProps:xue,timeoutPromise:kue,isClusterOperation:Vue,getClusterUser:Kue,checkGlobalSchemaTable:Yue,getHomeDir:Nk,getPropsFilePath:Fue,promisifyPapaParse:Wue,removeBOM:yk,createEventPromise:Que,checkProcessRunning:jue,checkSchemaTableExist:zue,checkSchemaExists:Ik,checkTableExists:wk,getStartOfTomorrowInSeconds:Jue,getLimitKey:Xue,isObject:Pue,isNotEmptyAndHasValue:wue,autoCasterIsNumberCheck:bk,backtickASTSchemaItems:Zue,isPortTaken:$ue,createForkArgs:e_e,autoCastBoolean:t_e,async_set_timeout:Rk,getTableHashAttribute:r_e,doesSchemaExist:n_e,doesTableExist:s_e,stringifyObj:i_e,ms_to_time:o_e,changeExtension:a_e,getEnvCliRootPath:fN,noBootFile:c_e,httpRequest:l_e,transformReq:u_e,convertToMS:__e,PACKAGE_ROOT:ft.PACKAGE_ROOT};function Iue(e){return e instanceof Error?e:new Error(e)}a(Iue,"errorizeMessage");function Rn(e){return e==null}a(Rn,"isEmpty");function wue(e){return!Rn(e)&&(e||e===0||e===""||Ak(e))}a(wue,"isNotEmptyAndHasValue");function Ks(e){return Rn(e)||e.length===0||e.size===0}a(Ks,"isEmptyOrZeroLength");function Cue(e){if(Rn(e))return!0;for(let t=0;t<e.length;t++)if(Rn(e[t]))return!0;return!1}a(Cue,"arrayHasEmptyValues");function Due(e){if(Ks(e))return!0;for(let t=0;t<e.length;t++)if(Ks(e[t]))return!0;return!1}a(Due,"arrayHasEmptyOrZeroLengthValues");function Lue(...e){try{return e.join(Uo.sep)}catch{console.error(e)}}a(Lue,"buildFolderPath");function Ak(e){return Rn(e)?!1:e===!0||e===!1}a(Ak,"isBoolean");function Pue(e){return Rn(e)?!1:typeof e=="object"}a(Pue,"isObject");function Mue(e){return Ks(e)?Nue:e.slice(0,-yue)}a(Mue,"stripFileExtension");function Uue(e){return Rn(e)||e===""||typeof e!="string"?e:Tk[e]!==void 0?Tk[e]:bk(e)===!0?Number(e):Aue.test(e)?new Date(e):e}a(Uue,"autoCast");function Ok(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(Ok,"autoCastJSON");function dN(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=dN(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=dN(r);n!==r&&(e[t]=n)}return e}else return Ok(e)}a(dN,"autoCastJSONDeep");function bk(e){if(e.startsWith("0.")&&Sk(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&Sk(e))}a(bk,"autoCasterIsNumberCheck");async function vue(e){if(Ks(e))throw new Error(`Directory path: ${e} does not exist`);try{await pk.emptyDir(e),await pk.remove(e)}catch(t){throw Yr.error(`Error removing files in ${e} -- ${t}`),t}}a(vue,"removeDir");function Bue(e,t){if(Ks(e)){Yr.info("Invalid current version sent as parameter.");return}if(Ks(t)){Yr.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 _=0;_<l;_++)if(r=parseInt(o[_],10)-parseInt(c[_],10),r)return r;return o.length-c.length}a(Bue,"compareVersions");function Hue(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(Hue,"isCompatibleDataVersion");function Gue(e){if(Rn(e))return e;let t=String(e);return t==="."?ft.UNICODE_PERIOD:t===".."?ft.UNICODE_PERIOD+ft.UNICODE_PERIOD:t.replace(ft.FORWARD_SLASH_REGEX,ft.UNICODE_FORWARD_SLASH)}a(Gue,"escapeRawValue");function que(e){if(Rn(e))return e;let t=String(e);return t===ft.UNICODE_PERIOD?".":t===ft.UNICODE_PERIOD+ft.UNICODE_PERIOD?"..":String(e).replace(ft.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(que,"unescapeValue");function xue(e,t){if(Rn(e))return Yr.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+_m.EOL}!Ks(n)&&n[0]===";"?r+=" "+n+s+_m.EOL:Ks(n)||(r+=n+"="+s+_m.EOL)}catch{Yr.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(xue,"stringifyProps");function Nk(){let e;try{e=_m.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(Nk,"getHomeDir");function Fue(){let e=Uo.join(Nk(),ft.HDB_HOME_DIR_NAME,ft.BOOT_PROPS_FILE_NAME);return gk.existsSync(e)||(e=Uo.join(__dirname,"../","hdb_boot_properties.file")),e}a(Fue,"getPropsFilePath");function kue(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:function(){clearTimeout(r)}}}a(kue,"timeoutPromise");async function $ue(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=hue.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a($ue,"isPortTaken");function Vue(e){try{return ft.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){Yr.error(`Error checking operation against cluster ops ${t}`)}return!1}a(Vue,"isClusterOperation");function Yue(e,t){let r=(ge(),ie(ke)).getDatabases();if(!r[e])return fm.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return fm.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Yue,"checkGlobalSchemaTable");function Kue(e,t){if(Rn(t)){Yr.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Rn(e)||Ks(e)){Yr.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){Yr.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){Yr.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(Kue,"getClusterUser");function Wue(){mk.parsePromise=function(e,t,r){return new Promise(function(n,s){mk.parse(e,{header:!0,transformHeader:yk,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(Wue,"promisifyPapaParse");function yk(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(yk,"removeBOM");function Que(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;Yr.info(`Got cluster status event response: ${Sue(s)}`);try{i.cancel()}catch{Yr.error("Error trying to cancel timeout.")}n(s)})})}a(Que,"createEventPromise");async function jue(e){let t=!0,r=0;do await Rk(Oue*r++),(await mue.findPs(e)).length>0&&(t=!1);while(t&&r<bue);if(t)throw new Error(`process ${e} was not started`)}a(jue,"checkProcessRunning");function zue(e,t){let r=Ik(e);if(r)return r;let n=wk(e,t);if(n)return n}a(zue,"checkSchemaTableExist");function Ik(e){let{getDatabases:t}=(ge(),ie(ke));if(!t()[e])return fm.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(Ik,"checkSchemaExists");function wk(e,t){let{getDatabases:r}=(ge(),ie(ke));if(!r()[e][t])return fm.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(wk,"checkTableExists");function Jue(){let e=dm().utc().add(1,ft.MOMENT_DAYS_TAG).startOf(ft.MOMENT_DAYS_TAG).unix(),t=dm().utc().unix();return e-t}a(Jue,"getStartOfTomorrowInSeconds");function Xue(){return dm().utc().format("DD-MM-YYYY")}a(Xue,"getLimitKey");function Zue(e){try{let t=new pue(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){Yr.error("Got an error back ticking items."),Yr.error(t)}}a(Zue,"backtickASTSchemaItems");function e_e(e){return[e]}a(e_e,"createForkArgs");function t_e(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(t_e,"autoCastBoolean");function r_e(e,t){let{getDatabases:r}=(ge(),ie(ke)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(r_e,"getTableHashAttribute");function n_e(e){let{getDatabases:t}=(ge(),ie(ke));return t()[e]!==void 0}a(n_e,"doesSchemaExist");function s_e(e,t){let{getDatabases:r}=(ge(),ie(ke));return r()[e]?.[t]!==void 0}a(s_e,"doesTableExist");function i_e(e){try{return JSON.stringify(e)}catch{return e}}a(i_e,"stringifyObj");function o_e(e){let t=dm.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(o_e,"ms_to_time");function a_e(e,t){let r=Uo.basename(e,Uo.extname(e));return Uo.join(Uo.dirname(e),r+t)}a(a_e,"changeExtension");function fN(){if(process.env[ft.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[ft.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=Tue(process.argv);if(e[ft.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[ft.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(fN,"getEnvCliRootPath");var _N;function c_e(){if(_N)return _N;let e=fN();fN()&&gk.pathExistsSync(Uo.join(e,ft.HDB_CONFIG_FILE))&&(_N=!0)}a(c_e,"noBootFile");function l_e(e,t){let r;return e.protocol==="http:"?r=Rue:r=gue,new Promise((n,s)=>{let i=r.request(e,o=>{o.setEncoding("utf8");let c={body:"",headers:o.headers};o.on("data",l=>{c.body+=l}),o.on("end",()=>{n(c)})});i.on("error",o=>{s(o)}),i.write(JSON.stringify(t)),i.end()})}a(l_e,"httpRequest");function u_e(e){if(!e.schema&&!e.database){e.schema=ft.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(u_e,"transformReq");function __e(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(__e,"convertToMS")});var X=T((Qye,Uk)=>{"use strict";var EN=require("fs-extra"),Qa=require("path"),Dk=require("os"),d_e=require("properties-reader"),Td=x(),Sd=K(),_e=D(),Em=ut(),f_e="Error initializing environment manager",hm="BOOT_PROPS_FILE_PATH",Lk=!1,E_e={[_e.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Hi={};Uk.exports={BOOT_PROPS_FILE_PATH:hm,getHdbBasePath:h_e,setHdbBasePath:p_e,get:Pk,initSync:S_e,setProperty:ve,initTestEnvironment:g_e,setCloneVar:T_e};function h_e(){return Hi[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(h_e,"getHdbBasePath");function p_e(e){Hi[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(p_e,"setHdbBasePath");function Pk(e){let t=Em.getConfigValue(e);return t===void 0?Hi[e]:t}a(Pk,"get");function ve(e,t){E_e[e]&&(Hi[e]=t),Em.updateConfigObject(e,t)}a(ve,"setProperty");function m_e(){let e;try{e=Sd.getPropsFilePath(),EN.accessSync(e,EN.constants.F_OK|EN.constants.R_OK),Lk=!0;let t=d_e(e);return Hi[_e.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(_e.HDB_SETTINGS_NAMES.INSTALL_USER),Hi[_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Hi[hm]=e,!0}catch{return Td.trace(`Environment manager found no properties file at ${e}`),!1}}a(m_e,"doesPropFileExist");function S_e(e=!1){try{(Lk||m_e()||Sd.noBootFile())&&!Mk&&(Em.initConfig(e),Hi[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Em.getConfigValue(_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Td.error(f_e),Td.error(t),console.error(t),process.exit(1)}}a(S_e,"initSync");var Mk=!1;function T_e(e){Mk=e}a(T_e,"setCloneVar");function g_e(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=Qa.join(__dirname,"../../","unitTests");Hi[hm]=Qa.join(l,"hdb_boot_properties.file"),ve(_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Qa.join(l,"settings.test")),ve(_e.HDB_SETTINGS_NAMES.INSTALL_USER,Dk.userInfo()?Dk.userInfo().username:void 0),ve(_e.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),ve(_e.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Qa.join(l,"envDir","log")),ve(_e.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),ve(_e.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),ve(_e.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),ve(_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Qa.join(l,"envDir")),ve(_e.CONFIG_PARAMS.STORAGE_PATH,Qa.join(l,"envDir")),s&&(ve(_e.CONFIG_PARAMS.HTTP_SECUREPORT,Pk(_e.CONFIG_PARAMS.HTTP_PORT)),ve(_e.CONFIG_PARAMS.HTTP_PORT,null)),ve(_e.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),ve(_e.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),ve(_e.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Sd.isEmpty(i)?!1:i),ve(_e.CONFIG_PARAMS.HTTP_CORS,Sd.isEmpty(i)?!1:i),ve(_e.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),ve(_e.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),ve(_e.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),ve(_e.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),ve(_e.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Qa.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),ve(_e.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Sd.isEmpty(c)?!1:c),o&&(ve("CORS_ACCESSLIST",o),ve(_e.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(ve(_e.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),ve(_e.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(ve(_e.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),ve(_e.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(ve(_e.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),ve(_e.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${hm}. Please check your boot props and settings files`;Td.fatal(r),Td.error(t)}}a(g_e,"initTestEnvironment")});var Hk=T((zye,Bk)=>{"use strict";var mm=X();mm.initSync();var pm=D(),{httpRequest:R_e}=K(),A_e=require("path"),vk=require("fs-extra"),O_e=require("yaml"),b_e={describe_table:!0,describe_all:!0,describe_database:!0,list_users:!0,list_roles:!0,drop_role:!0,add_user:!0,alter_user:!0,drop_user:!0,restart_service:!0,restart:!0,create_database:!0,drop_database:!0,create_table:!0,drop_table:!0,create_attribute:!0,drop_attribute:!0,search_by_id:!0,delete:!0,search_by_value:!0,csv_file_load:!0,csv_url_load:!0,cluster_get_routes:!0,cluster_network:!0,cluster_status:!0,remove_node:!0,add_component:!0,deploy_component:!0,package_component:!0,drop_component:!0,get_components:!0,get_component_file:!0,set_component_file:!0,registration_info:!0,get_fingerprint:!0,set_license:!0,get_job:!0,search_jobs_by_start_date:!0,read_log:!0,read_transaction_log:!0,read_audit_log:!0,delete_transaction_logs_before:!0,purge_stream:!0,delete_records_before:!0,install_node_modules:!0,set_configuration:!0,get_configuration:!0,create_authentication_tokens:!0,refresh_operation_token:!0,system_information:!0,sql:!0};Bk.exports={cliOperations:y_e,buildRequest:N_e};function N_e(){let e={};for(let t of process.argv){if(b_e[t]){e.operation=t;continue}if(t.includes("=")){let[r,...n]=t.split("=");n=n.join("=");try{n=JSON.parse(n)}catch{}e[r]=n}}return e}a(N_e,"buildRequest");async function y_e(e){await vk.exists(A_e.join(mm.get(pm.CONFIG_PARAMS.ROOTPATH),pm.HDB_PID_FILE))||(console.error("HarperDB must be running to perform this operation"),process.exit()),await vk.exists(mm.get(pm.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET))||(console.error("No domain socket found, unable to perform this operation"),process.exit());try{let t=await R_e({method:"POST",protocol:"http:",socketPath:mm.get(pm.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET),headers:{"Content-Type":"application/json"}},e);t=JSON.parse(t.body),e.json?console.log(JSON.stringify(t,null,2)):console.log(O_e.stringify(t).trim())}catch(t){let r="Error: ";t?.response?.data?.error?r+=t.response.data.error:t?.response?.data?r+=t?.response?.data:r+=t.message,console.error(r)}}a(y_e,"cliOperations")});var xk=T((Xye,qk)=>{"use strict";var Gk=require("semver/functions/major"),I_e=ha(),hN=process.versions&&process.versions.node?process.versions.node:void 0;qk.exports=w_e;function w_e(){let e=I_e.engines["minimum-node"];if(hN&&Gk(hN)<Gk(e))return{error:`The minimum version of Node.js HarperDB supports is: ${e}, the currently installed Node.js version is: ${hN}. Please install a version of Node.js that is withing the defined range.`}}a(w_e,"checkNodeVersion")});var mN=T((eIe,Fk)=>{"use strict";var gd=X();gd.initSync();var yl=require("fs-extra"),pN=require("path"),Il=D(),C_e=require("crypto"),D_e=require("uuid").v4;Fk.exports=L_e;function L_e(){if(gd.getHdbBasePath()!==void 0){let e=pN.join(gd.getHdbBasePath(),Il.LICENSE_KEY_DIR_NAME,Il.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=pN.join(gd.getHdbBasePath(),Il.LICENSE_KEY_DIR_NAME,Il.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=pN.join(gd.getHdbBasePath(),Il.LICENSE_KEY_DIR_NAME,Il.JWT_ENUM.JWT_PASSPHRASE_NAME);try{yl.accessSync(r),yl.accessSync(e),yl.accessSync(t)}catch(n){if(n.code==="ENOENT"){let s=D_e(),i=C_e.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:s}});yl.writeFileSync(r,s),yl.writeFileSync(e,i.privateKey),yl.writeFileSync(t,i.publicKey)}else throw n}}}a(L_e,"checkJWTTokenExist")});var $k=T((rIe,kk)=>{"use strict";var SN=class{static{a(this,"HdbInfoInsertObject")}constructor(t,r,n){this.info_id=t,this.data_version_num=r,this.hdb_version_num=n}};kk.exports={HdbInfoInsertObject:SN}});var Kk=T((sIe,Yk)=>{"use strict";var Vk=D(),TN=class{static{a(this,"UpgradeObject")}constructor(t,r){this[Vk.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[Vk.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};Yk.exports={UpgradeObject:TN}});var Sm=T((oIe,Qk)=>{"use strict";var Qn=require("prompt"),wl=require("chalk"),Wk=x(),Ts=require("os"),gN=Ji(),RN=["yes","y"];async function P_e(e){let t=`${Ts.EOL}`+wl.bold.green("Your current HarperDB version requires that we complete an update process.")+`${Ts.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Ts.EOL}${Ts.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${Ts.EOL}`;Qn.override=gN(["CONFIRM_UPGRADE"]),Qn.start(),Qn.message=t;let r={properties:{CONFIRM_UPGRADE:{description:wl.magenta(`${Ts.EOL}[CONFIRM_UPGRADE] Do you want to upgrade your HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n;try{n=await Qn.get([r])}catch(s){return Wk.error("There was an error when prompting user about an upgrade."),Wk.error(s),!1}return RN.includes(n.CONFIRM_UPGRADE)}a(P_e,"forceUpdatePrompt");async function M_e(e){let t=`${Ts.EOL}`+wl.bold.green(`Your installed HarperDB version is older than the version used to create your data. Downgrading is not recommended as it is not tested and guaranteed to work. However, if you need to downgrade, and a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Ts.EOL}`);Qn.override=gN(["CONFIRM_DOWNGRADE"]),Qn.start(),Qn.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:wl.magenta(`${Ts.EOL}[CONFIRM_DOWNGRADE] Do you want to proceed with using your downgraded HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n=await Qn.get([r]);return RN.includes(n.CONFIRM_DOWNGRADE)}a(M_e,"forceDowngradePrompt");async function U_e(){let e=`${Ts.EOL}`+wl.bold.green("We now require a Certifacte Authority certificate. HarperDB can generate all new certificates for you (your existing certificates will be backed up) or you can keep any existing certificates and add your own CA certificate. To add your own CA certificate set the <certificateAuthority> parameter in harperdb-config.yaml");Qn.override=gN(["GENERATE_CERTS"]),Qn.start(),Qn.message=e;let t={properties:{GENERATE_CERTS:{description:wl.magenta(`${Ts.EOL}[GENERATE_CERTS] Do you want HarperDB to generate all new certificates? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"yes",required:!0}}},r=await Qn.get([t]);return RN.includes(r.GENERATE_CERTS)}a(U_e,"upgradeCertsPrompt");Qk.exports={forceUpdatePrompt:P_e,forceDowngradePrompt:M_e,upgradeCertsPrompt:U_e}});var ON=T((cIe,jk)=>{"use strict";var AN=class{static{a(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};jk.exports=AN});var Jk=T((EIe,zk)=>{"use strict";var v_e=K(),B_e=ut(),uIe=x(),_Ie=require("path"),dIe=require("fs"),fIe=D();zk.exports={getOldPropsValue:H_e};function H_e(e,t,r=!1){let n=t.getRaw(e);return v_e.isNotEmptyAndHasValue(n)?n:r?B_e.getDefaultConfig(e):""}a(H_e,"getOldPropsValue")});var t$=T((pIe,e$)=>{"use strict";var vo=require("path"),Bo=require("fs-extra"),G_e=require("properties-reader"),q_e=ON(),Ct=x(),{getOldPropsValue:We}=Jk(),{HDB_SETTINGS_NAMES:se,CONFIG_PARAMS:ja}=D(),za=ut(),Tm=X(),Xk=K(),Ws=D(),bN=new q_e("3.1.0"),Zk=[];function x_e(){let e=G_e(Tm.get(se.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),Ct.info(t);let r=` ;Settings for the HarperDB process.
|
|
33
|
+
`)}a(Tx,"defaultNotFound")});var Bx={};Fe(Bx,{startHTTPThreads:()=>Tce,startSocketServer:()=>hb,updateWorkerIdleness:()=>vx});async function Tce(e=2,t){if(t)fb(0,1,!0);else{let{loadRootComponents:n}=Rp();if(e===0)return(0,Co.setMainIsWorker)(!0),await _b().startServers(),Promise.resolve([]);await n()}let r=(0,Px.checkMemoryLimit)();r&&!process.env.DEV_MODE&&(console.error(r),setInterval(()=>{Np.notify(r)},Sce).unref());for(let n=0;n<e;n++)fb(n,e);return Promise.all(Ux)}function fb(e,t=1,r){if(db++,(0,Co.startWorker)("server/threads/threadServer.js",{name:bp.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((o,c)=>{function l(_){_.type===bp.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(n.removeListener("message",l),o(n))}a(l,"onMessage"),n.on("message",l),n.on("error",c)});Ux.push(s),await s,ul.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",o=>{if(o.requestId){let c=Op.get(o.requestId);c&&c(o)}}),n.on("exit",i),n.on("shutdown",i);function i(){let o=ul.indexOf(n);o>-1&&ul.splice(o,1)}if(a(i,"removeWorker"),_l){let o=_l;_l=[];for(let c of o)Mx[c.localPort](null,c)}}}),r){let n=setInterval(()=>{Eb?Eb=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,Co.shutdownWorkers)(),db=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function hb(e=0,t){if(typeof e=="string")try{(0,yp.existsSync)(e)&&(0,yp.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=gce:r=Rce(t):r=pb;let n=(0,dl.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(n._handle){n._handle.onconnection=Mx[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),Eb=!0,r(o,(c,l)=>{if(!c){if(Cx){let u=o._socket||new dl.Socket({handle:o,writable:!0,readable:!0});Cx.deliverSocket(u,e,l),u.resume()}else db>0?(_l.length===0&&setTimeout(()=>{_l.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,_l.push(o)):(console.log("start up a dynamic thread to handle request"),fb(0));un(!1,"socket-routed");return}c.requests++;let _=o.fd;if(_>=0)c.postMessage({port:e,fd:_,data:l});else{let u=o._socket||new dl.Socket({handle:o,writable:!0,readable:!0});bce(u,c,e)}un(!0,"socket-routed")})};let s=ha();Np.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 pb(e,t){let r,n=0;for(let s of ul){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=Ap)return Ap=i,t(r);n=i}Ap=0,t(r)}function gce(e,t){let r={};e.getpeername(r);let n=r.address,s=fl.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);pb(e,o=>{fl.set(n,{worker:o,lastUsed:i}),t(o)})}function Rce(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new dl.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",o=>{n.readStop();let l=o.toString("latin1").match(t)?.[1],_=fl.get(l),u=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=u,s(_.worker);pb(n,d=>{fl.set(l,{worker:d,lastUsed:u}),s(d,o)})})}a(r,"findByHeaderAffinity")}function vx(){Ap=0;for(let e of ul)e.expectedIdle=e.recentELU.idle+Ace,e.requests=1;ul.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function bce(e,t,r){let n=Oce++;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(),Op.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")),Op.delete(n)),s.event=="destroy"&&(e.destroy(),Op.delete(n))})}var Co,dl,bp,Np,yp,Lx,Px,ul,_l,Mx,Cx,db,Ux,Sce,Eb,Ap,Dx,fl,Ace,Op,Oce,mb=Oe(()=>{Co=B(et()),dl=require("net"),bp=B(D()),Np=B(x()),yp=require("fs");pi();Lx=require("worker_threads"),Px=B(aa()),ul=[],_l=[],Mx=[],db=0,Ux=[];Lx.isMainThread&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});Sce=6e5;a(Tce,"startHTTPThreads");a(fb,"startHTTPWorker");a(hb,"startSocketServer");Ap=0;a(pb,"findMostIdleWorker");Dx=36e5,fl=new Map;a(gce,"findByRemoteAddressAffinity");a(Rce,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of fl)r.lastUsed+Dx<e&&fl.delete(t)},Dx).unref();Ace=1e3;a(vx,"updateWorkerIdleness");(0,Co.setMonitorListener)(vx);Op=new Map,Oce=1;a(bce,"proxySocket")});var xx=T((TNe,qx)=>{"use strict";var Nce=require("cluster"),Fa=X();Fa.initSync();var Gx=D(),ENe=require("util"),Ui=x(),hNe=require("fs"),yce=require("fastify"),pNe=ha(),Ice=require("@fastify/cors"),wce=require("@fastify/compress"),Cce=require("@fastify/static"),Dce=TO(),Lce=require("path"),{PACKAGE_ROOT:Pce}=D(),Mce=Pn(),Uce=K(),vce=wr(),Bce=aa(),{server:Hce}=(Or(),ie(Wo)),{node_request_key:mNe}=(hp(),ie(sb)),{authHandler:Gce,handlePostRequest:qce,serverErrorHandler:xce,reqBodyValidationHandler:Fce}=fp(),SNe=require("net"),{registerContentHandlers:kce}=(Wc(),ie(oG)),$ce=6e4,Vce=1024*1024*1024,Yce="TRUE",{CONFIG_PARAMS:X_}=Gx,El;qx.exports={hdbServer:Hx,start:Hx};async function Hx(e){try{Ui.info("In Fastify server"+process.cwd()),Ui.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Ui.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=Nce.isMaster,await Kce();let t=e.securePort>0;El=Wce(t),await El.ready(),e||(e={}),e.isOperationsServer=!0;try{Hce.http(El.server,e),El.server.closeIdleConnections||await El.listen({port:0,host:"::"})}catch(r){throw El.close(),Ui.error(r),Ui.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),Ui.fatal(t),process.exit(1)}}a(Hx,"operationsServer");async function Kce(){Ui.trace("Configuring HarperDB process."),Mce.setSchemaDataToGlobal(),await vce.setUsersToGlobal(),await Bce.getLicense()}a(Kce,"setUp");function Wce(e){Ui.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=Qce(e),r=yce(t);r.server.headersTimeout=zce(),r.setErrorHandler(xce);let n=jce();n&&r.register(Ice,n),r.register(function(i,o,c){i.setNotFoundHandler(function(l,_){r.server.emit("unhandled",l.raw,_.raw)}),c()}),r.register(Dce),r.register(wce),r.register(Cce,{root:Lce.join(Pce,"studio/build-local")}),kce(r);let s=Fa.get(Gx.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!Uce.isEmpty(s)&&s.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[Fce,Gce],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),qce(i,o)}),r.get("/health",()=>"HarperDB is running."),Ui.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(Wce,"buildServer");function Qce(e){let t=Fa.get(X_.OPERATIONSAPI_NETWORK_TIMEOUT),r=Fa.get(X_.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:Vce,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}a(Qce,"getServerOptions");function jce(){let e=Fa.get(X_.OPERATIONSAPI_NETWORK_CORS),t=Fa.get(X_.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===Yce)&&(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(jce,"getCORSOpts");function zce(){return Fa.get(X_.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??$ce}a(zce,"getHeaderTimeoutConfig")});var Ob={};Fe(Ob,{disableNATS:()=>Xce,publishToStream:()=>Cp,setNATSReplicator:()=>Sb,setPublishToStream:()=>Zce,setSubscription:()=>Ab,start:()=>Jce});function Jce(){Z_.default.get(ed.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&tle()}function Xce(e=!0){Yx=e}function Zce(e,t){Cp=e,Ab=t}function tle(){if(Yx||process.env._DISABLE_NATS)return;let e=Dr(),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];Sb(s,r,i)}}bb((r,n)=>{Sb(r.tableName,r.databaseName,r),n&&Wx(r)}),!Fx&&(Fx=!0)}function Sb(e,t,r){if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.sources.some(s=>s?.isNATSReplicator))return;r.sourcedFrom(class extends Jt{static{a(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[Ue],record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[Ue]})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[Ue],record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this[Ue],record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[Ue]})}static defineSchema(i){Wx(i)}static subscribe(){let i=new Zn;return Ab(t,e,i),i}static subscribeOnThisThread(i){return i<(Z_.default.get(ed.default.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??ele)}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 Ip(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=Kx;return i}a(n,"getNATSTransaction")}function Wx(e){let t=Z_.default.get(ed.default.CONFIG_PARAMS.CLUSTERING_NODENAME);Cp(`${gb.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,Rb.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 kx,gb,Rb,$x,Vx,Z_,ed,wp,Yx,Cp,Ab,ele,Kx,Fx,Ip,Tb,Qx=Oe(()=>{ge();es();kx=B(pt()),gb=B(Xe()),Rb=B(ui());zl();$x=B(Xg()),Vx=B(Ar()),Z_=B(X()),ed=B(D()),wp=B(x());a(Jce,"start");a(Xce,"disableNATS");Cp=kx.publishToStream,Ab=$x.setSubscription;a(Zce,"setPublishToStream");ele=2;a(tle,"assignReplicationSource");a(Sb,"setNATSReplicator");a(Wx,"publishSchema");Ip=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=Z_.default.get(ed.default.CONFIG_PARAMS.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writes_by_db){let o=[],c=[],l,_;for(let u of i){let d=u.table,f=u.operation=="put"?"upsert":u.operation;l||(wp.trace(`Sending transaction event ${f}`),_=l={operation:f,schema:s,table:d,__origin:{user:this.user?.username,timestamp:t,node_name:r}},l.hash_values=c,f!=="delete"&&f!=="invalidate"&&(l.records=o)),l.table===d&&l.operation===f?(o.push(u.record),c.push(u.id)):_=_.next={operation:f,table:d,id:u.id,record:u.record},u.expiresAt&&(_.expiresAt=u.expiresAt)}l&&n.push(Cp(`${gb.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,Rb.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(u=>{throw wp.error("An error has occurred trying to replicate transaction",l,u),u.statusCode=504,u}))}return Promise.all(n)}},Tb=class extends Ip{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,Vx.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};Kx=new Tb});async function Xx({clientId:e,user:t,clean:r,will:n}){let s;if(e&&!r){let i=await Nb.get(e,{returnNonexistent:!0});s=new wb(e,t,i),i&&(s.sessionWasPresent=!0)}else{if(e){let i=await Nb.get(e);i&&i.delete()}s=new Lp(e,t)}return n&&(n.id=e,n.user={username:t?.username},td.put(n)),s}function yb(){return Dp++,Dp>65500&&(Dp=1),Dp}function Ib(e,t,r){let{topic:n,retain:s}=e;e.data=t,e.async=!0,r.authorize=!0;let i=go.getMatch(n);if(!i)throw new Error(`Can not publish to topic ${n} as it does not exist, no resource has been defined to handle this topic`);e.url=i.relativeURL;let o=i.Resource;return Ze(r,()=>s?t===void 0?o.delete(e,r):o.put(e,e.data,r):o.publish(e,e.data,r))}var jx,Do,zx,Jx,Nb,td,Dp,Lp,wb,Zx=Oe(()=>{ge();O_();jx=B(Ar()),Do=B(x());fa();zx=B(et()),Jx=B(_b());Or();Nb=Et({database:"system",table:"hdb_durable_session",attributes:[{name:"id",isPrimaryKey:!0},{name:"subscriptions",type:"array",elements:{attributes:[{name:"topic"},{name:"qos"},{name:"startTime"},{name:"acks"}]}}]}),td=Et({database:"system",table:"hdb_session_will",attributes:[{name:"id",isPrimaryKey:!0},{name:"topic",type:"string"},{name:"data"},{name:"qos",type:"number"},{name:"retain",type:"boolean"},{name:"user",type:"any"}]});(0,zx.getWorkerIndex)()===0&&(async()=>{await Jx.when_components_loaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of td.search({})){let t=e.data,r=Object.assign({},e);r.user?.username&&(r.user=await ct.getUser(r.user.username)),Ze(r,()=>{try{Ib(r,t,r)}catch{(0,Do.warn)("Failed to publish will",t)}td.delete(e.id,r)})}})();a(Xx,"getSession");Dp=1;a(yb,"getNextMessageId");Lp=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;request;socket;subscriptions=[];awaitingAcks;sessionWasPresent;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,n){let{topic:s,rh:i,startTime:o}=t,c=s.indexOf("?"),l,_;if(c>-1?(l=s.slice(c),_=s.slice(0,c)):_=s,!_)throw new Error("No topic provided");if(_.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");let u=this.subscriptions.find(g=>g.topic===s),d;u?(d=i>0,u.end(),this.subscriptions.splice(this.subscriptions.indexOf(u),1)):d=i===2;let f={search:l,async:!0,user:this.user,startTime:o,omitCurrent:d,url:""};o&&(0,Do.trace)("Resuming subscription from",s,"from",o);let E=go.getMatch(_);if(!E){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(f.url=E.relativeURL,f.url.indexOf("+")>-1||f.url.indexOf("#")>-1){let g=f.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(f.isCollection=!0,g.indexOf("+")===g.length-1)f.onlyChildren=!0,f.url="/"+g.slice(0,g.length-1);else{let R=g.split("/"),A;for(let v=0;v<R.length;v++)if(R[v].indexOf("+")>-1)if(R[v]==="+")A=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&A)throw new Error("Filters can not be combined");let P=!0;R[R.length-1]==="#"&&(R.length--,P=!1),A&&(n=a(v=>{let k=v.id;if(!Array.isArray(k)||P&&k.length!==R.length)return!1;for(let H=0;H<R.length;H++)if(R[H]!=="+"&&R[H]!==k[H])return!1;return!0},"filter"));let U=R.indexOf("+");f.url="/"+(U>-1?R.slice(0,U):R).concat("").join("/")}}let h=E.path,m=E.Resource,S=await Ze(f,async()=>{let g=this.createContext();g.topic=s,g.retainHandling=i;let R=await m.subscribe(f,g);if(!R)throw new Error(`No subscription was returned from subscribe for topic ${s}`);if(!R[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);return(async()=>{for await(let A of R)try{let P;if(A.type&&A.type!=="put"&&A.type!=="delete"&&A.type!=="message"&&A.type!=="patch"||n&&!n(A))continue;r?(A.topic=s,P=this.needsAcknowledge(A)):(A.acknowledge?.(),P=yb());let U=A.id;Array.isArray(U)&&(U=Yc(U)),U==null&&(U=""),this.listener(h+"/"+U,A.value,P,t)}catch(P){(0,Do.warn)(P)}})(),R});return S.topic=s,S.qos=t.qos,this.subscriptions.push(S),S}resume(){}needsAcknowledge(t){let r=yb();return t.acknowledge&&(this.awaitingAcks||(this.awaitingAcks=new Map),this.awaitingAcks.set(r,t.acknowledge)),r}acknowledge(t){let r=this.awaitingAcks?.get(t);r&&(this.awaitingAcks.delete(t),r())}async removeSubscription(t){let r=this.subscriptions.find(n=>n.topic===t);if(r)return r.end(),this.subscriptions.splice(this.subscriptions.indexOf(r),1),!0}async publish(t,r){return Ib(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){let r=this.createContext();Ze(r,async()=>{if(!t){let n=await td.get(this.sessionId);n?.doesExist()&&await Ib(n,n.data,r)}await td.delete(this.sessionId)}).catch(n=>{(0,Do.warn)(`Error publishing MQTT will for ${this.sessionId}`,n)});for(let n of this.subscriptions)n.end();this.subscriptions=[]}};a(Ib,"publish");wb=class extends Lp{static{a(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,n){super(t,r),this.sessionRecord=n||{id:t,subscriptions:[]}}async resume(){for(let t of this.sessionRecord.subscriptions||[])await this.resumeSubscription({omitCurrent:!0,topic:t.topic,qos:t.qos,startTime:t.startTime},!0,t.acks?r=>!t.acks.includes(r.timestamp):null)}resumeSubscription(t,r,n){return super.addSubscription(t,r,n)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=yb(),n={topic:t.topic,timestamp:t.timestamp};return t.acknowledge&&(n.acknowledge=t.acknowledge),this.awaitingAcks.set(r,n),r}acknowledge(t){let r=this.awaitingAcks.get(t);this.awaitingAcks.delete(t),r.acknowledge?.();let n=r.topic;for(let[,s]of this.awaitingAcks)if(s.topic===n&&s.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===n){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,Do.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,jx.getNextMonotonicTime)()),(0,Do.trace)("Added durable subscription",t.topic,r),{qos:t.qos,topic:t.topic,startTime:r}}),Nb.put(this.sessionRecord)}}});var Db={};Fe(Db,{bypassAuth:()=>rle,start:()=>nle});function rle(){nF=!0}function nle({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){let o=e.mqtt={requireAuthentication:i,sessions:new Set},c,l=r?.mtls;return n&&(c=e.ws((_,u,d)=>{if(_.protocol==="mqtt"){hr.debug("Received WebSocket connection for MQTT from",_._socket.remoteAddress);let{onMessage:f,onClose:E}=tF(_,(h,m)=>{if(_.send(h),m&&_._socket.writableNeedDrain)return new Promise(S=>this._socket.once("drain",S))},u,Promise.resolve(d).then(()=>u?.user),o);_.on("message",f),_.on("close",E),_.on("error",h=>{hr.info("WebSocket error",h)})}},Object.assign({subProtocol:"mqtt"},n))),(t||s)&&(c=e.socket(async _=>{let u;if(hr.debug(`Received ${_.getCertificate?"SSL":"TCP"} connection for MQTT from ${_.remoteAddress}`),l){if(_.authorized)try{let E=l.user;if(E!==null){(E===void 0||E==="Common Name"||E==="CN")&&(E=_.getPeerCertificate().subject.CN);try{u=await e.getUser(E,null,null),(0,hl.get)(sr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&Mp.notify({username:u?.username,status:sr.AUTH_AUDIT_STATUS.SUCCESS,type:sr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT mTLS",remote_address:_.remoteAddress})}catch(h){throw(0,hl.get)(sr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&Mp.error({username:E,status:sr.AUTH_AUDIT_STATUS.FAILURE,type:sr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:_.remoteAddress}),h}}else hr.debug("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",_.remoteAddress)}catch(E){hr.error(E)}else if(l.required)return hr.info(`Unauthorized connection attempt, no authorized client certificate provided, error: ${_.authorizationError}`),_.end()}!u&&nF&&_.remoteAddress.includes("127.0.0.1")&&(u=await(0,rF.getSuperUser)(),hr.debug("Auto-authorizing local connection",u?.username));let{onMessage:d,onClose:f}=tF(_,E=>_.write(E),null,u,o);_.on("data",d),_.on("close",f),_.on("error",E=>{hr.info("Socket error",E)})},{port:t,securePort:s,mtls:l})),c}function tF(e,t,r,n,s){eF||(eF=!0,xu(d=>{Pp>0&&d.push({metric:"mqtt-connections",connections:Pp,byThread:!0})}));let i;Pp++;let o,c={protocolVersion:4},l=(0,Up.parser)({protocolVersion:5});function _(d){l.parse(d)}a(_,"onMessage");function u(){Pp--,i||(i=!0,o?.disconnect(),s.sessions.delete(o),Un(!1,"connection","mqtt","disconnect"),hr.debug("MQTT connection was closed",e.remoteAddress))}return a(u,"onClose"),l.on("packet",async d=>{n?.then&&(n=await n),o?.then&&await o;try{switch(d.cmd){case"connect":if(c.protocolVersion=d.protocolVersion,d.username)try{n=await ct.getUser(d.username,d.password.toString(),r),(0,hl.get)(sr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&Mp.notify({username:n?.username,status:sr.AUTH_AUDIT_STATUS.SUCCESS,type:sr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,hl.get)(sr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&Mp.error({username:d.username,status:sr.AUTH_AUDIT_STATUS.FAILURE,type:sr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),f({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return Un(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(d,n),d.will){let A=e.deserialize||(e.deserialize=Ua(r?.headers.get?.("content-type")));d.will.data=d.will.payload?.length>0?A(d.will.payload):void 0,delete d.will.payload}o=Xx({user:n,...d}),o=await o,o.socket=e,r&&(o.request=r),s.sessions.add(o)}catch(A){return hr.error(A),Un(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:A.code||5,returnCode:A.code||128})}Un(!0,"connection","mqtt","connect"),f({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((A,P,U,v)=>{try{let k=A.indexOf("/",1),H=k>0?A.slice(0,k):A;f({cmd:"publish",topic:A,payload:E(P),messageId:U||Math.floor(Math.random()*1e8),qos:v.qos},H)}catch(k){hr.error(k),o?.disconnect(),s.sessions.delete(o)}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let h=[];for(let A of d.subscriptions){let P;try{P=(await o.addSubscription(A,A.qos>=1)).qos||0}catch(U){hr.error(U),P=c.protocolVersion<5?128:U.statusCode===403?135:U.statusCode===404?143:128}h.push(P)}await o.committed,f({cmd:"suback",granted:h,messageId:d.messageId});break;case"unsubscribe":{let A=[];for(let P of d.unsubscriptions)A.push(o.removeSubscription(P)?0:17);f({cmd:"unsuback",granted:A,messageId:d.messageId});break}case"pubrel":f({cmd:"pubcomp",messageId:d.messageId,reasonCode:0});return;case"publish":let m=d.qos===2?"pubrec":"puback",S=e.deserialize||(e.deserialize=Ua(r?.headers.get?.("content-type"))),g=d.payload?.length>0?S(d.payload):void 0,R;try{R=await o.publish(d,g)}catch(A){hr.warn(A),d.qos>0&&f({cmd:m,messageId:d.messageId,reasonCode:128},d.topic);break}d.qos>0&&f({cmd:m,messageId:d.messageId,reasonCode:R===!1?144:0},d.topic);break;case"pubrec":f({cmd:"pubrel",messageId:d.messageId,reasonCode:0});break;case"pubcomp":case"puback":o.acknowledge(d.messageId);break;case"pingreq":f({cmd:"pingresp"});break;case"disconnect":i=!0,o?.disconnect(!0),s.sessions.delete(o),Un(!0,"connection","mqtt","disconnect"),hr.debug("Received disconnect command, closing MQTT session",e.remoteAddress),e.close?e.close():e.end();break}}catch(h){hr.error(h),f({cmd:"disconnect"})}function f(h,m){let S=(0,Up.generate)(h,c);t(S),un(S.length,"bytes-sent",m,h.cmd,"mqtt")}a(f,"sendPacket");function E(h){return Ao(h,r)}a(E,"serialize")}),{onMessage:_,onClose:u}}var Up,rF,hl,sr,Cb,Mp,hr,nF,eF,Pp,sF=Oe(()=>{Up=require("mqtt-packet");Zx();rF=B(wr());Wc();pi();Or();hl=B(X()),sr=B(D()),Cb=B(x()),Mp=(0,Cb.loggerWithTag)("auth-event"),hr=(0,Cb.loggerWithTag)("mqtt"),nF=(0,hl.get)(sr.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(rle,"bypassAuth");a(nle,"start");Pp=0;a(tF,"onSocket")});var Ih={};Fe(Ih,{component_errors:()=>ml,loadComponent:()=>vp,loadComponentDirectories:()=>fF,setErrorReporter:()=>ale});function fF(e,t){t&&(Pb=t),e&&(Mb=e);let r=[];if((0,ps.existsSync)(Lb)){let s=(0,ps.readdirSync)(Lb,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,wt.join)(Lb,o);r.push(vp(c,Pb,"hdb",!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(vp(n,Pb,n,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{dF=!0})}function ale(e){nd=e}async function vp(e,t,r,n,s,i){if(!oF.has(e)){oF.set(e,!0),s&&(Mb=s);try{let o;n&&(ml=new Map);let c=(0,wt.join)(e,n?"harperdb-config.yaml":"config.yaml");(0,ps.existsSync)(c)?o=n?(0,_F.getConfigObj)():(0,aF.parseDocument)((0,ps.readFileSync)(c,"utf8"),{simpleKeys:!0}).toJSON():o=Ub;let l=[],_=n;for(let u in o){let d=o[u];if(ml.set(n?u:(0,wt.basename)(e),!1),!d)continue;let f,E=d.package;try{if(E){let R=e,A;for(;!(0,ps.existsSync)(A=(0,wt.join)(R,"node_modules",u));)if(R=(0,wt.dirname)(R),R.length<(0,uF.getHdbBasePath)().length){A=null;break}if(A)f=await vp(A,t,r,!1),_=!0;else throw new Error(`Unable to find package ${u}:${E}`)}else f=ole[u];if(!f)continue;l.push(f);let h=a(R=>(R.origin=r,Et(R)),"ensureTable"),m=d.network||(d.port||d.securePort)&&d,S=m?.securePort||m?.https&&m.port,g=!m?.https&&m?.port;if(pl.isMainThread&&(f=await f.startOnMainThread?.({server:ct,ensureTable:h,port:g,securePort:S,resources:t,...d})||f,n&&m))for(let R of[g,S])try{if(+R&&!iF.includes(R)){let A=vb.get(Bb.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);A&&rd.default.warn("Session affinity is not recommended and may cause memory leaks"),(A||!Ep)&&(iF.push(R),hb(R,A))}}catch(A){console.error("Error listening on socket",R,A,u)}if(t.isWorker&&(f=await f.start?.({server:ct,ensureTable:h,port:g,securePort:S,resources:t,...d})||f),Mb.set(f,!0),(f.handleFile||f.handleDirectory)&&d.files){if(d.files.includes(".."))throw(0,lF.handleHDBError)("Can not reference parent directories");let R=(0,wt.join)(e,d.files).replace(/\\/g,"/"),A=R.indexOf("/*");if(A>-1&&d.files!==Ub[u]?.files&&!(0,ps.existsSync)(R.slice(0,A)))throw new Error(`The path '${R.slice(0,A)}' does not exist and cannot be used as the base of the resolved 'files' path value '${d.files}'`);let P=(0,wt.basename)(e),U=d.path||"/";U=U.startsWith("/")?U:U.startsWith("./")?"/"+P+U.slice(2):U==="."?"/"+P:"/"+P+"/"+U;let v,k,H;if(d.root){let z=d.root;z.startsWith("/")&&(z=z.slice(1)),z.endsWith("/")&&(z=z.slice(0,-1)),z+="/",k=(0,wt.join)(e,z)}else(H=R.indexOf("/*"))>-1&&(k=R.slice(0,H+1),v=(0,wt.relative)(e,k));let j=!1;if(pl.isMainThread&&f.setupDirectory&&(j=await f.setupDirectory?.(U,k,t)),t.isWorker&&f.handleDirectory&&(j=await f.handleDirectory?.(U,k,t)),j)continue;for(let z of await(0,cF.default)(R,{onlyFiles:!1,objectMode:!0})){let{path:J,dirent:Se}=z;_=!0;let ue=(0,wt.relative)(e,J).replace(/\\/g,"/");if(v)if(ue.startsWith(v))ue=ue.slice(v.length+1);else throw new Error(`The root path '${d.root}' does not reference a valid part of the file path '${ue}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`);let Ee=U+(U.endsWith("/")?"":"/")+ue;try{if(Se.isFile()){let Me=await ile(J);pl.isMainThread&&await f.setupFile?.(Me,Ee,J,t),t.isWorker&&await f.handleFile?.(Me,Ee,J,t)}else pl.isMainThread&&await f.setupDirectory?.(Ee,J,t),t.isWorker&&await f.handleDirectory?.(Ee,J,t)}catch(Me){Me.message=`Could not load ${Se.isFile()?"file":"directory"} '${J}'${d.module?" using '"+d.module+"'":""} for application '${e}' due to: ${Me.message}`,nd?.(Me),((0,Sl.getWorkerIndex)()===0?console:rd.default).error(Me),t.set(d.path||"/",new sd(Me)),ml.set(n?u:(0,wt.basename)(e),Me.message)}}}}catch(h){h.message=`Could not load component '${u}' for application '${(0,wt.basename)(e)}' due to: ${h.message}`,nd?.(h),((0,Sl.getWorkerIndex)()===0?console:rd.default).error(h),t.set(d.path||"/",new sd(h),null,!0),ml.set(n?u:(0,wt.basename)(e),h.message)}}if(pl.isMainThread&&!dF&&i&&(0,Sl.watchDir)(e,async()=>fF()),o.extensionModule)return await ef((0,wt.join)(e,o.extensionModule));if(!_&&t.isWorker){let u=`${e} did not load any modules, resources, or files, is this a valid component?`;nd?.(new Error(u)),((0,Sl.getWorkerIndex)()===0?console:rd.default).error(u),ml.set((0,wt.basename)(e),u)}}catch(o){console.error(`Could not load application directory ${e}`,o),o.message=`Could not load application due to ${o.message}`,nd?.(o),t.set("",new sd(o))}}}var ps,wt,pl,aF,vb,Bb,cF,Sl,rd,lF,uF,sle,_F,ile,Lb,Mb,dF,Pb,ml,ole,Ub,iF,oF,nd,sd,wh=Oe(()=>{ps=require("fs"),wt=require("path"),pl=require("worker_threads"),aF=require("yaml"),vb=B(X()),Bb=B(D());pI();gI();RI();gG();ax();fx();cF=B(require("fast-glob")),Sl=B(et()),rd=B(x());ES();Or();lF=B(oe());es();ge();mb();uF=B(X()),sle=B(xx());Th();Qx();sF();_F=B(ut());hp();({readFile:ile}=ps.promises),Lb=vb.get(Bb.CONFIG_PARAMS.COMPONENTSROOT),Mb=new Map,ml=new Map;a(fF,"loadComponentDirectories");ole={REST:Yh,rest:Yh,graphqlSchema:fS,jsResource:pS,fastifyRoutes:ZO,login:SS,static:eb,operationsApi:sle,customFunctions:{},http:{},clustering:Ob,authentication:N_,mqtt:Db},Ub={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(Ub,"static",{value:{files:"web/**"}});iF=[],oF=new Map;a(ale,"setErrorReporter");a(vp,"loadComponent");sd=class extends Jt{constructor(r){super();this.error=r}static{a(this,"ErrorResource")}get(){throw this.error}post(){throw this.error}put(){throw this.error}delete(){throw this.error}connect(){throw this.error}getResource(){return this}publish(){throw this.error}subscribe(){throw this.error}}});var Rp=T((jNe,hF)=>{var{isMainThread:EF}=require("worker_threads"),{getTables:cle}=(ge(),ie(ke)),{loadComponentDirectories:lle,loadComponent:ule}=(wh(),ie(Ih)),{resetResources:_le}=(O_(),ie(CB)),dle=MA(),fle=ut(),{dirname:Ele}=require("path"),{getConnection:hle}=pt(),ple=X(),mle=D(),Hb=new Map;async function Sle(e=!1){!EF&&ple.get(mle.CONFIG_PARAMS.CLUSTERING_ENABLED)&&hle();try{EF&&await dle()}catch(n){console.error(n)}let t=_le();cle(),t.isWorker=e,await ule(Ele(fle.getConfigFilePath()),t,"hdb",!0,Hb),await lle(Hb,t);let r=[];for(let[n]of Hb)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}a(Sle,"loadRootComponents");hF.exports.loadRootComponents=Sle});var et=T((JNe,Po)=>{"use strict";var{Worker:Tle,MessageChannel:gle,parentPort:Ys,isMainThread:kb,threadId:Rle,workerData:vi}=require("worker_threads"),{PACKAGE_ROOT:Ale}=D(),{join:TF,isAbsolute:Ole,extname:ble}=require("path"),{server:gF}=(Or(),ie(Wo)),{watch:Nle,readdir:yle}=require("fs/promises"),{totalmem:pF}=require("os"),id=D(),RF=X(),Bi=x(),{randomBytes:Ile}=require("crypto"),{_assignPackageExport:wle}=require("../index"),Cle=D(),mF=1024*1024,Lo=[],kn=[],Dle=50,$b=1e4,Lle="restart",AF="request_thread_info",OF="resource_report",bF="thread_info",NF="added-port",Ple="ack",Gb;wle("threads",kn);Po.exports={startWorker:qb,restartWorkers:Yb,shutdownWorkers:Hle,workers:Lo,setMonitorListener:Yle,onMessageFromWorkers:Gle,onMessageByType:PF,broadcast:xle,broadcastWithAcknowledgement:kle,setChildListenerByType:Ble,getWorkerIndex:yF,getWorkerCount:IF,getTicketKeys:CF,setMainIsWorker:Ule,setTerminateTimeout:Mle,restartNumber:vi?.restartNumber||1};kn.onMessageByType=PF;kn.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=kn.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};var Vb;function Mle(e){$b=e}a(Mle,"setTerminateTimeout");function yF(){return vi?vi.workerIndex:Vb?0:void 0}a(yF,"getWorkerIndex");function IF(){return vi?vi.workerCount:Vb?1:void 0}a(IF,"getWorkerCount");function Ule(e){Vb=e}a(Ule,"setMainIsWorker");var wF=1,Bp;function CF(){return Bp||(Bp=kb?Ile(48):vi.ticketKeys,Bp)}a(CF,"getTicketKeys");Object.defineProperty(gF,"workerIndex",{get(){return yF()}});Object.defineProperty(gF,"workerCount",{get(){return IF()}});var DF={[AF](e,t){$le(t)},[OF](e,t){Vle(t,e)}};function qb(e,t={}){let r=process.constrainedMemory?.()||pF();r=Math.min(r,pF(),2e4*mF);let n=RF.get(id.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/mF/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],o=[];for(let l of kn){let _=new gle;_.existingPort=l,i.push(_),o.push(_.port2)}ble(e)||(e+=".js");let c=new Tle(Ole(e)?e:TF(Ale,e),Object.assign({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:wF=t.threadCount,name:t.name,restartNumber:Po.exports.restartNumber,ticketKeys:CF()},transferList:o},t));for(let{port1:l,existingPort:_}of i)_.postMessage({type:NF,port:l,threadId:c.threadId},[l]);return Gp(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>qb(e,t),c.on("error",l=>{console.error("Worker error:",l),Bi.error("Worker error:",l)}),c.on("exit",l=>{Lo.splice(Lo.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<Dle?(t.unexpectedRestarts=c.unexpectedRestarts+1,qb(e,t)):Bi.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",l=>{DF[l.type]?.(l,c)}),Lo.push(c),Wle(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(qb,"startWorker");var vle=[id.THREAD_TYPES.HTTP];async function Yb(e=null,t=Math.max(wF>3,1),r=!0){if(kb){if(r){let{loadRootComponents:o}=Rp();await o()}Po.exports.restartNumber++,t<1&&(t=t*Lo.length);let n=[],s=[];for(let o of Lo.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;Bi.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:Po.exports.restartNumber,type:id.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=vle.indexOf(o.name)>-1,l=new Promise(_=>{let u=setTimeout(()=>o.terminate(),$b*2).unref();o.on("exit",()=>{clearTimeout(u),n.splice(n.indexOf(l)),!c&&r&&o.startCopy(),_()})});if(n.push(l),c&&r){let _=o.startCopy(),u=new Promise(d=>{let f=a(E=>{E.type===Cle.ITC_EVENT_TYPES.CHILD_STARTED&&(Bi.trace("Worker has started",_.threadId),d(),s.splice(s.indexOf(u)),_.off("message",f))},"startListener");Bi.trace("Waiting for worker to start",_.threadId),_.on("message",f)});s.push(u),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}=wa();r&&(e==="http"||!e)&&RF.get(id.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else Ys.postMessage({type:Lle,workerType:e})}a(Yb,"restartWorkers");function Ble(e,t){DF[e]=t}a(Ble,"setChildListenerByType");function Hle(e){return Yb(e,1/0,!1)}a(Hle,"shutdownWorkers");var LF=[];function Gle(e){LF.push(e)}a(Gle,"onMessageFromWorkers");var xb=new Map;function PF(e,t){let r=xb.get(e);r||xb.set(e,r=[]),r.push(t)}a(PF,"onMessageByType");var qle=10;async function xle(e){let t=0;for(let r of kn)try{r.postMessage(e),t++>qle&&(t=0,await new Promise(setImmediate))}catch(n){Bi.error("Unable to send message to worker",n)}}a(xle,"broadcast");var Hp=new Map,Fle=1;function kle(e){return new Promise(t=>{let r=0;for(let n of kn)try{let s=Fle++,i=a(()=>{Hp.delete(s),--r===0&&t(),n!==Ys&&--n.refCount===0&&n.unref()},"ack_handler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,Hp.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,o]of Hp)o.port===n&&o()})),n.postMessage(e),r++}catch(s){Bi.error("Unable to send message to worker",s)}r===0&&t()})}a(kle,"broadcastWithAcknowledgement");function $le(e){e.postMessage({type:bF,workers:MF()})}a($le,"sendThreadInfo");function MF(){let e=Date.now();return Lo.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(MF,"getChildWorkerInfo");function Vle(e,t){e.resources=t,e.resources.updated=Date.now()}a(Vle,"recordResourceReport");var Fb;function Yle(e){Fb=e}a(Yle,"setMonitorListener");var Kle=1e3,SF=!1;function Wle(){SF||(SF=!0,setInterval(()=>{for(let e of Lo){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}Fb&&Fb()},Kle).unref())}a(Wle,"startMonitoring");var Qle=1e3;if(Ys){Gp(Ys);for(let e=0,t=vi.addPorts.length;e<t;e++){let r=vi.addPorts[e];r.threadId=vi.addThreadIds[e],Gp(r)}setInterval(()=>{let e=process.memoryUsage();Ys.postMessage({type:OF,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Qle).unref(),Gb=a(()=>new Promise((e,t)=>{Ys.on("message",r),Ys.postMessage({type:AF});function r(n){n.type===bF&&(Ys.off("message",r),e(n.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else Gb=MF;Po.exports.getThreadInfo=Gb;function Gp(e,t){kn.push(e),e.on("message",r=>{if(r.type===NF)r.port.threadId=r.threadId,Gp(r.port);else if(r.type===Ple){let n=Hp.get(r.id);n&&n()}else{for(let s of LF)s(r,e);let n=xb.get(r.type);if(n)for(let s of n)try{s(r,e)}catch(i){Bi.error(i)}}}).on("close",()=>{kn.splice(kn.indexOf(e),1)}).on("exit",()=>{kn.splice(kn.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(Gp,"addPort");if(kb){let e,t,r=a(async(n,s)=>{s&&(e=s);for(let i of await yle(n,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(TF(n,i.name));try{for await(let{filename:i}of Nle(n,{persistent:!1}))t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await Yb(),console.log("Reloaded HarperDB components")},100)}catch(i){console.warn("Error trying to watch component directory",n,i)}},"watch_dir");Po.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else Ys.on("message",async e=>{let{type:t}=e;t===id.ITC_EVENT_TYPES.SHUTDOWN&&(Po.exports.restartNumber=e.restartNumber,Ys.unref(),setTimeout(()=>{Bi.warn("Thread did not voluntarily terminate",Rle),process.exit(0)},$b).unref())})});var NP={};Fe(NP,{AUDIT_STORE_OPTIONS:()=>_h,createAuditEntry:()=>of,openAuditStore:()=>kp,readAuditEntry:()=>kt,setAuditRetention:()=>zle,transactionKeyEncoder:()=>kF});function kp(e){let t=e.auditStore=e.openDB(qF.AUDIT_STORE_NAME,_h);t.rootStore=e;let r=[];t.addDeleteRemovalCallback=function(i,o){return r[i]=o,{remove(){delete r[i]}}};let n=null;function s(i=qp){clearTimeout(n),n=setTimeout(async()=>{if(t.rootStore.status==="closed")return;let o=0,c;try{for(let{key:l,value:_}of t.getRange({start:0,snapshot:!1,end:Date.now()-Kb})){if((_[0]&15)===jb){let u=kt(_),d=u.tableId;r[d]?.(u.recordId)}if(c=t.remove(l),await new Promise(setImmediate),++o>=jle){i=10;break}}await c}finally{o===0&&(i=Math.min(i<<1,Kb/10)),s(i)}},i).unref()}return a(s,"scheduleAuditCleanup"),t.scheduleAuditCleanup=s,(0,Fp.getWorkerIndex)()===(0,Fp.getWorkerCount)()-1&&s(qp),t}function zle(e,t=qp){Kb=e,qp=t}function of(e,t,r,n,s,i,o){let c=$F[i];if(!c)throw new Error(`Invalid audit entry type ${i}`);let l=1;n&&(n>1?Tl.setFloat64(0,n):$n.set(US),l=9),f(0),f(t),d(r),Tl.setFloat64(l,e),l+=8,s?d(s):$n[l++]=0,$n[n?8:0]=c;let u=$n.subarray(0,l);if(o)return Buffer.concat([u,o]);return u;function d(E){let h=l;l+=1,l=(0,gl.writeKey)(E,$n,l);let m=l-h-1;m>127?m>16383?(Jb.error("Key or username was too large for audit entry",E),l=h+1,$n[h]=0):($n.copyWithin(h+2,h+1,l),Tl.setUint16(h,m|32768),l++):$n[h]=m}function f(E){E<128?$n[l++]=E:E<16384?(Tl.setUint16(l,E|32768),l+=2):E<1056964608?(Tl.setUint32(l,E|3221225472),l+=4):($n[l]=255,Tl.setUint32(l+1,E),l+=5)}}function kt(e){try{let t=e.dataView||(e.dataView=new zb(e.buffer,e.byteOffset,e.byteLength)),r;e[0]==66&&(r=t.readFloat64());let n=t.readInt(),s=t.readInt(),i=t.readInt(),o=t.readInt(),c=t.position,l=t.position+=o,_=t.readFloat64();o=t.readInt();let u=t.position,d=t.position+=o;return{type:$F[n&7],tableId:i,get recordId(){return GF(e,c,l)},version:_,previousLocalTime:r,get user(){return d>u?GF(e,u,d):void 0},getValue(f,E,h){if(n&Wb||n&Qb&&!E)return f.decoder.decode(e.subarray(t.position));if(n&Qb&&h)return Xb(f.getEntry(this.recordId),h,f)}}}catch(t){return Jb.error("Reading audit entry error",t,e),{}}}function GF(e,t,r){let n=e.subarray(t,r);return(0,gl.readKey)(n,0,r-t)}var gl,xp,qF,xF,Fp,FF,Jb,$n,Tl,kF,_h,Kb,jle,qp,Wb,Qb,UF,jb,vF,BF,HF,$F,zb,Zi=Oe(()=>{gl=require("ordered-binary"),xp=B(X()),qF=B(at()),xF=B(D()),Fp=B(et()),FF=B(K());nu();Jb=B(x());$p();(0,xp.initSync)();$n=Buffer.alloc(1024),Tl=new DataView($n.buffer,$n.byteOffset,1024),kF={writeKey(e,t,r){return e===ru?(t.set(ru,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,gl.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,gl.readKey)(e,t,r)}},_h={encoding:"binary",keyEncoder:kF},Kb=(0,FF.convertToMS)((0,xp.get)(xF.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,jle=1e3,qp=1e4;a(kp,"openAuditStore");a(zle,"setAuditRetention");Wb=16,Qb=32,UF=1,jb=2,vF=3,BF=4,HF=5,$F={put:UF|Wb,[UF]:"put",delete:jb,[jb]:"delete",message:vF|Wb,[vF]:"message",invalidate:BF,[BF]:"invalidate",patch:HF|Qb,[HF]:"patch"};a(of,"createAuditEntry");a(kt,"readAuditEntry");zb=class extends DataView{static{a(this,"Decoder")}position=0;readInt(){let t=this.getUint8(this.position++);return t>=128?t>=192?t===255?(t=this.getUint32(this.position),this.position+=4,t):(t=this.getUint32(this.position-1)&1073741823,this.position+=3,t):(t=this.getUint16(this.position-1)&32767,this.position++,t):t}readFloat64(){try{let t=this.getFloat64(this.position);return this.position+=8,t}catch{debugger}}};a(GF,"readKeySafely")});var Zb={};Fe(Zb,{add:()=>Vp,applyReverse:()=>VF,getRecordAtTime:()=>Xb,rebuildUpdateBefore:()=>Yp});function Vp(e,t,r){isNaN(e[t])?e[t]=r.value:e[t]+=r.value}function Yp(e,t){let r=null;for(let n in e)if(n in t){let s=t[n];if(s?.__op__){let i=e[n];if(i?.__op__)if(i.__op__===s.__op__)r||(r={}),r[n]=i;else throw new Error("Can not merge updates with different operations");else r||(r={}),r[n]=i,Vp(r,n,s)}}else r||(r={}),r[n]=e[n];return r}function VF(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=Jle[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=YF}}function Xb(e,t,r){let n=r.rootStore.auditStore,s=Object.assign({},e.value),i=e.localTime;for(;i>t;){let l=n.get(i),_=kt(l);switch(_.type){case"put":s=_.getValue(r);break;case"patch":VF(s,_.getValue(r));break;case"delete":s=null}i=_.previousLocalTime}let o={},c=0;for(let l in s)s[l]===YF&&(o[l]=!0,c++);for(;c>0&&i>0;){let l=n.get(i),_=kt(l),u;switch(_.type){case"put":u=_.getValue(r);break;case"patch":u=_.getValue(r);break}for(let d in u)o[d]&&(s[d]=u[d],o[d]=!1,c--);i=_.previousLocalTime}if(c>0)for(let l in o)s[l]=null;return s}var Jle,YF,$p=Oe(()=>{Zi();a(Vp,"add");Vp.reverse=function(e,t,r){isNaN(e[t])||(e[t]-=r.value)};Jle={add:Vp};a(Yp,"rebuildUpdateBefore");a(VF,"applyReverse");YF={};a(Xb,"getRecordAtTime")});function pn(e){return e[Gt]||(e[Gt]=Object.create(null))}function zp(e,t){let r=e.prototype,n={},s=t.attributes||t.properties||[];for(let o of s){let c=o.name,l,_;if(o.resolve)_={get(){return o.resolve(this,this[Ie])},set(u){return o.set(this,u)},configurable:!0};else{switch(o.type){case"String":l=a(function(u){if(!(typeof u=="string"||u==null&&o.nullable!==!1))throw new Vn.ClientError(`${c} must be a string, attempt to assign ${u}`);pn(this)[c]=u},"set");break;case"ID":l=a(function(u){if(!(typeof u=="string"||u?.length>0&&u.every?.(d=>typeof d=="string")||u==null&&o.nullable!==!1))throw new Vn.ClientError(`${c} must be a string, attempt to assign ${u}`);pn(this)[c]=u},"set");break;case"Float":case"Number":l=a(function(u){if(!(typeof u=="number"||u==null&&o.nullable!==!1))throw new Vn.ClientError(`${c} must be a number, attempt to assign ${u}`);pn(this)[c]=u},"set");break;case"Int":l=a(function(u){if(!(u>>0===u||u==null&&o.nullable!==!1))if(typeof u=="number"&&Math.abs((u>>0)-u)<=1)u=Math.round(u);else throw new Vn.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${u}`);pn(this)[c]=u},"set");break;case"Long":l=a(function(u){if(!(Math.round(u)===u&&Math.abs(u)<=9007199254740992||u==null&&o.nullable!==!1))if(typeof u=="number"&&Math.abs(u)<=9007199254740992)u=Math.round(u);else throw new Vn.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${u}`);pn(this)[c]=u},"set");break;case"BigInt":l=a(function(u){if(!(typeof u=="bigint"||u==null&&o.nullable!==!1))if(typeof u=="string"||typeof u=="number")u=BigInt(u);else throw new Vn.ClientError(`${c} must be a number, attempt to assign ${u}`);pn(this)[c]=u},"set");break;case"Boolean":l=a(function(u){if(!(typeof u=="boolean"||u==null&&o.nullable!==!1))throw new Vn.ClientError(`${c} must be a boolean, attempt to assign ${u}`);pn(this)[c]=u},"set");break;case"Date":l=a(function(u){if(!(u instanceof Date||u==null&&o.nullable!==!1))if(typeof u=="string"||typeof u=="number")u=new Date(u);else throw new Vn.ClientError(`${c} must be a Date, attempt to assign ${u}`);pn(this)[c]=u},"set");break;case"Bytes":l=a(function(u){if(!(u instanceof Uint8Array||u==null&&o.nullable!==!1))throw new Vn.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${u}`);pn(this)[c]=u},"set");break;case"Any":case void 0:l=a(function(u){pn(this)[c]=u},"set");break;default:l=a(function(u){if(!(typeof u=="object"||u==null&&o.nullable!==!1))throw new Vn.ClientError(`${c} must be an object, attempt to assign ${u}`);pn(this)[c]=u},"set")}_={get(){let u=this[Gt];if(u&&c in u){let f=u[c];if(f?.__op__){let E=this[fe]?.[c];return f.update(E)}return f}let d=this[fe]?.[c];if(d&&typeof d=="object"){let f=WF(d,o);if(f)return u||(u=this[Gt]=Object.create(null)),u[c]=f}return d},set:l,enumerable:!0,configurable:!0}}_.get.isAttribute=!0,n[c]=_,(!(c in r)||Object.getOwnPropertyDescriptor(r,c)?.get?.isAttribute)&&Object.defineProperty(r,c,_)}i("getProperty",function(o){let c=n[o];if(c)return c.get.call(this);let l=this[Gt];return l?.[o]!==void 0?l[o]:this[fe]?.[o]}),i("set",function(o,c){let l=n[o];if(l)return l.set.call(this,c);if(t.sealed)throw new Vn.ClientError("Can not add a property to a sealed table schema");pn(this)[o]=c}),i("deleteProperty",function(o){pn(this)[o]=void 0}),i("toJSON",function(){let o=this[Gt],c;for(let _ in o){c||(c=Object.assign({},this[fe]));let u=o[_];if(u?.__op__){let d=c[_];u=u.update(d)}c[_]=u}return Object.keys(this).length>0&&(c||(c=Object.assign({},this[fe])),Object.assign(c,this)),c||this[fe]}),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 WF(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?.[fe])throw new Error("Can not track an already tracked object, check for circular references");this[fe]=s}},zp(r,t)),new r(e)):new Kp(e);case Array:let n=new Qp(e.length);n[fe]=e;for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=WF(o,t?.elements)),n[s]=o}return n;default:return e}}function tE(e){let t=e[Gt],r;for(let s in t){r||(r=Object.assign({},e[fe]));let i=t[s];if(i&&typeof i=="object")if(i.__op__){let o=r[s];i=i.update(o)}else i=tE(i);r[s]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[fe])),Object.assign(r,e)),r||e[fe]}function $a(e,t=e[Gt]){let r;if(KF.call(e,fe)&&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=$a(i);o!==i&&r===e&&(r=e.slice(0)),i=o}r[n]=i}return Object.freeze(r)}for(let n in t){r||(r=Object.assign({},e[fe]));let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=Zb[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=$a(s);r[n]=s}return r?Object.freeze(r):KF.call(e,fe)?e[fe]:e}function Wp(e){let t=e[fe];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[ka]||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?.[fe]===s){if(Wp(i))return!0}else return!0}}else{let r=e[Gt];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[fe]===i){if(Wp(s))return!0}else return!0}else return!0}}return!1}var Vn,Gt,Kp,KF,ka,Qp,jp,rE=Oe(()=>{es();Vn=B(oe());$p();Gt=Symbol("own-data");a(pn,"getChanges");a(zp,"assignTrackedAccessors");a(WF,"trackObject");Kp=class{static{a(this,"GenericTrackedObject")}constructor(t){if(t?.[fe])throw new Error("Can not track an already tracked object, check for circular references");this[fe]=t}};zp(Kp,{});a(tE,"collapseData");KF=Object.prototype.hasOwnProperty;a($a,"deepFreeze");a(Wp,"hasChanges");ka=Symbol.for("has-array-changes"),Qp=class extends Array{static{a(this,"TrackedArray")}[ka];constructor(t){super(t)}splice(...t){return this[ka]=!0,super.splice(...t)}push(...t){return this[ka]=!0,super.push(...t)}pop(){return this[ka]=!0,super.pop()}unshift(...t){return this[ka]=!0,super.unshift(...t)}shift(){return this[ka]=!0,super.shift()}};Qp.prototype.constructor=Array;jp=class{constructor(t){this.value=t}static{a(this,"Addition")}__op__="add";update(t){return(+t||0)+this.value}}});var cg={};Fe(cg,{CONTEXT:()=>Ie,ID_PROPERTY:()=>Ue,IS_COLLECTION:()=>Yn,RECORD_PROPERTY:()=>fe,Resource:()=>Jt,snake_case:()=>Zle,transformForSelect:()=>Xp});function Zle(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function QF(e,t){if(od=!1,e==="")return null;if(e=e.slice(1),e.indexOf("/")===-1)return e===""?(od=!0,null):(e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e)));let r=e.split("/"),n=new tN;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){od=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}function mn(e,t){n.reliesOnPrototype=!0;let r=t.hasContent;return n;function n(s,i,o){let c,l,_,u;if(r?(o?(u=i,o=o[Ie]||o):i?typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(u=s,c=u[this.primaryKey]??null,o=i[Ie]||i):u=i:(u=s,c=u[Ue]??u[this.primaryKey]??null),c==null&&(_=!0)):i?o=i[Ie]||i:s&&typeof s=="object"&&!Array.isArray(s)&&(o=s),c===void 0)if(typeof s=="string")c=s;else if(typeof s=="object"&&s)if(l=s,s[Symbol.iterator]){c=[],_=!0;for(let E of s){if(typeof E=="object"&&E)break;c.push(E)}c.length===0?c=null:(c.length===1&&(c=c[0]),l.slice&&(l=l.slice(c.length,l.length),l.length===0&&(l=null,_=!1)))}else{if(typeof(c=s.url)=="string"){let E=c.indexOf("?");if(E>-1){let m=this.parseQuery(c.slice(E+1));l?l=Object.assign(m,l):l=m,c=c.slice(0,E)}let h=this.parsePath(c,o,l);h?.id!==void 0?(h.query&&(l?l=Object.assign(h.query,l):l=h.query),_=h.isCollection,c=h.id):c=h}c===void 0&&(c=s.id??null,c==null&&(_=!0))}else c=s??null,c==null&&(_=!0);o||(o={});let d;if(l?.ensureLoaded!=null||l?.async||_?(d=Object.assign({},t),l?.ensureLoaded!=null&&(d.ensureLoaded=l.ensureLoaded),l?.async&&(d.async=l.async),_&&(d.isCollection=!0)):d=t,o.transaction){let E=this.getResource(c,o,d);return E.then?E.then(f):f(E)}else return Ze(o,()=>{let E=this.getResource(c,o,d);return E.then?E.then(f):f(E)},d);function f(E){if(o.authorize){o.authorize=!1;let h=t.type==="read"?E.allowRead(o.user,l,o):t.type==="update"?E.doesExist?.()===!1?E.allowCreate(o.user,u,o):E.allowUpdate(o.user,u,o):t.type==="create"?E.allowCreate(o.user,u,o):E.allowDelete(o.user,l,o);if(h?.then)return h.then(m=>{if(!m)throw new Jp(o.user);return typeof u?.then=="function"?u.then(S=>e(E,l,o,S)):e(E,l,o,u)});if(!h)throw new Jp(o.user)}return typeof u?.then=="function"?u.then(h=>e(E,l,o,h)):e(E,l,o,u)}a(f,"authorizeActionOnResource")}}function Sn(e,t){let r=new JF.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 eN(e,t,r){let n=e[fe];if(n){let s=e[Gt];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 Xp(e,t){let r=t?.propertyResolvers,n=t[Ie],s;if(typeof e=="string")return a(function o(c){return c.then?c.then(o):Array.isArray(c)?c.map(o):eN(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=i(eN(l,r,n));for(let d of e)_.push(u(d));return _},"transform");let o=e.forceNulls;return a(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(f=>f&&typeof f=="object"?c(f):f);let _={},u=i(eN(l,r,n)),d;for(let f of e){let E=u(f);E===void 0&&o&&(E=null),E?.then?(d||(d=[]),d.push(E.then(h=>_[f.name||f]=h))):_[f.name||f]=E}return d?Promise.all(d).then(()=>_):_},"transform")}else throw new Error("Invalid select argument type "+typeof e);function i(o){return c=>{if(typeof c=="string")return o(c);if(typeof c=="object")if(c.name){s||(s={});let l=s[c.name];if(!l){let u=r[c.name]?.definition?.tableClass;l=s[c.name]=Xp(c.select||c,u)}let _=o(c.name);return l(_)}else return o(c);else return c}}a(i,"handleProperty")}var jF,zF,JF,Ie,Ue,Yn,fe,Xle,Jt,Jp,od,tN,es=Oe(()=>{jF=require("crypto");zl();zF=require("../index"),JF=B(oe());rE();fa();$h();Ie=Symbol.for("context"),Ue=Symbol.for("primary-key"),Yn=Symbol("is-collection"),fe=Symbol("stored-record"),Xle={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Jt=class{static{a(this,"Resource")}static transactions;constructor(t,r){this[Ue]=t;let n=r?.[Ie];this[Ie]=n!==void 0?n:r||null}static get=mn(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 _=Xp(l,t.constructor);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",letItLinger:!0,ensureLoaded:!0,async:!0});static put=mn(function(t,r,n,s){if(Array.isArray(s)&&t[Yn]){let i=[],o=n.authorize;for(let c of s){let l=t.constructor,_=l.getResource(c[l.primaryKey],n,{async:!0});_.then?i.push(_.then(u=>u.put(c,n))):i.push(_.put(c,n))}return Promise.all(i)}return t.put?t.put(s,r):Sn(t,"put")},{hasContent:!0,type:"update"});static patch=mn(function(t,r,n,s){return t.patch?t.patch(s,r):Sn(t,"patch")},{hasContent:!0,type:"update"});static delete=mn(function(t,r,n,s){return t.delete?t.delete(r):Sn(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,jF.randomUUID)()}static create(t,r,n){let s;return t==null?s=this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?s=[...t,this.getNewId()]:typeof t!="object"?s=[t,this.getNewId()]:(s=this.getNewId(),n=r,r=t),Ze(n,()=>{let i=new this(s,n),o=i.update?i.update(r,!0):Sn(i,"update");return n.newLocation=s,n.createdResource=!0,o?.then?o.then(()=>s):s})}static invalidate=mn(function(t,r,n,s){return t.invalidate?t.invalidate(r):Sn(t,"delete")},{hasContent:!1,type:"update"});static post=mn(function(t,r,n,s){return t[Ue]!=null&&t.update?.(),t.post(s,r)},{hasContent:!0,type:"create"});static connect=mn(function(t,r,n,s){return t.connect?t.connect(s,r):Sn(t,"connect")},{hasContent:!0,type:"read"});static subscribe=mn(function(t,r,n,s){return t.subscribe?t.subscribe(r):Sn(t,"subscribe")},{type:"read"});static publish=mn(function(t,r,n,s){return t[Ue]!=null&&t.update?.(),t.publish?t.publish(s,r):Sn(t,"publish")},{hasContent:!0,type:"create"});static search=mn(function(t,r,n,s){let i=t.search?t.search(r):Sn(t,"search"),o=n.select;if(o&&n.hasOwnProperty("select")&&i!=null&&!i.selectApplied){let c=Xp(o,t.constructor);return i.map(c)}return i},{type:"read"});static query=mn(function(t,r,n,s){return t.search?t.search(s,r):Sn(t,"search")},{hasContent:!0,type:"read"});static copy=mn(function(t,r,n,s){return t.copy?t.copy(s,r):Sn(t,"copy")},{type:"create"});static move=mn(function(t,r,n,s){return t.move?t.move(s,r):Sn(t,"move")},{type:"delete"});post(t){if(this[Yn])return this.constructor.create(this[Ue],t,this[Ie]);Sn(this,"post")}static isCollection(t){return t?.[Yn]}static coerceId(t){return t}static parseQuery(t){return kh(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&&Xle[o];if(c)r.headers.set("accept",c);else if(n)n.property=o;else return{query:{property:o},id:QF(t,this),isCollection:od}}let i=QF(t,this);return od?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r[Ie],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 _=l.asMap.get(t);if(s=_?.find(u=>u.constructor===c),s)return s;_||l.asMap.set(t,_=[]),_.push(s=new c(t,i))}else{if(s=l.find(_=>_[Ue]===t&&_.constructor===c),s)return s;if(l.push(s=new c(t,i)),l.length>10){let _=new Map;for(let u of l){let d=u[Ue],f=_.get(d);f?f.push(u):_.set(d,[u])}i.resourceCache.length=0,i.resourceCache.asMap=_}}}else s=new c(t,i);return o&&(s[Yn]=!0),s}subscribe(t){return new Zn}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new Zn}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[Ue]}getContext(){return this[Ie]}};Jt.prototype[Ie]=null;(0,zF._assignPackageExport)("Resource",Jt);a(Zle,"snake_case");Jp=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(QF,"pathToId");tN=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(mn,"transactional");a(Sn,"missingMethod");a(eN,"selectFromObject");a(Xp,"transformForSelect")});function ZF(e,t,r,n){let s=e.primaryStore.env.path,i=e.primaryStore.tableId;Rl||((0,Zp.onMessageByType)(XF,u=>{ek(u.path)}),Rl=Object.create(null));let o=Rl[s]||(Rl[s]=[]);o.auditStore=e.auditStore,o.lastTxnTime==null&&(o.lastTxnTime=Date.now());let c=o[i];c||(c=o[i]=new Map,c.envs=o,c.tableId=i,c.store=e.primaryStore),t=Yc(t);let l=new nN(r);l.startTime=n;let _=c.get(t);return _?_.push(l):(c.set(t,_=[l]),_.tables=c,_.key=t),l.subscriptions=_,l}function ek(e,t){if(!Rl)return;let r=Rl[e];if(!r)return;try{r.auditStore.resetReadTxn()}catch(s){throw s.message+=" in "+e,s}let n;for(let{key:s,value:i}of r.auditStore.getRange({start:r.lastTxnTime,exclusiveStart:!0})){r.lastTxnTime=s;let o=kt(i),c=r[o.tableId];if(!c)continue;let l=o.recordId,_,u=Yc(o.recordId),d=0;do{let f=c.get(u);if(f){for(let h of f)if(!(d>0&&!(h.includeDescendants&&!(h.onlyChildren&&d>1)))){if(h.startTime>=s){(0,rN.info)("omitting",l,h.startTime,s);continue}try{if(h.crossThreads===!1&&!t)continue;let m;h.supportsTransactions&&h.txnInProgress!==o.version&&(m=!0,h.txnInProgress||(n?n.push(h):n=[h]),h.txnInProgress=o.version),h.listener(l,o,s,m)}catch(m){console.error(m),(0,rN.info)(m)}}}if(u==null)break;let E=u.lastIndexOf?.("/",u.length-2);E>-1?u=u.slice(0,E):u=null,d++}while(!0)}if(n)for(let s of n)s.txnInProgress=null,s.listener(null,{type:"end_txn"},r.lastTxnTime,!0)}function tk(e,t){let r=t||e,n=r.env;if(t&&!t.cache&&(t.cache=new Map),!n.hasBroadcastListener){n.hasBroadcastListener=!0;let s=n.path;r.on("aftercommit",()=>{(0,Zp.broadcast)({type:XF,path:s}),ek(s,!0)})}}var rN,Zp,XF,Rl,Tye,nN,rk=Oe(()=>{rN=B(x()),Zp=B(et());zl();O_();Zi();XF="transaction",Tye=Buffer.alloc(4096);a(ZF,"addSubscription");nN=class extends Zn{static{a(this,"Subscription")}listener;subscriptions;startTime;constructor(t){super(),this.listener=t,this.on("close",()=>this.end())}end(){if(this.subscriptions){if(this.subscriptions.splice(this.subscriptions.indexOf(this),1),this.subscriptions.length===0){let t=this.subscriptions.tables,r=this.subscriptions.key;if(t.delete(r),t.size===0){let n=t.envs,s=t.dbi;delete n[s]}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}};a(ek,"notifyFromTransactionData");a(tk,"listenToCommits")});var BO={};Fe(BO,{coerceType:()=>em,makeTable:()=>nm,setServerUtilities:()=>cue,updateResource:()=>tm});function nm(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:o,databaseName:c,auditStore:l,schemaDefined:_,dbisDB:u,sealed:d}=e,{expirationMS:f,evictionMS:E,audit:h,trackDeletes:m}=e,{attributes:S}=e;S||(S=[]),tk(i,l);let g=HS(i,n,l),R=0,A,P,U={},v=Promise.resolve(),k,H,j;for(let W of S)(W.assignCreatedTime||W.name==="__createdtime__")&&(k=W),(W.assignUpdatedTime||W.name==="__updatedtime__")&&(H=W),W.expiresAt&&(j=W),W.isPrimaryKey&&(U=W);let z,J=[],Se=[],ue=1,Ee=2,Me={},Ge={},Ft=864e5,Gd,qd,Ki,iy=!1,$m,Vm,kV=i.getRange({start:!1,end:!1}).constructor,$V=10,VV=6;h&&cy();class Je extends Jt{static name=s;static primaryStore=i;static auditStore=l;static primaryKey=t;static tableName=s;static indices=r;static audit=h;static databasePath=o;static databaseName=c;static attributes=S;static expirationTimer;static createdTimeProperty=k;static updatedTimeProperty=H;static propertyResolvers;static sources=[];static get expirationMS(){return f}static dbisDB=u;static schemaDefined=_;static sourcedFrom(p,O){O&&(this.sourceOptions=O,(O.expiration||O.eviction||O.scanInterval)&&this.setTTLExpiration(O)),O?.intermediateSource?(p.intermediateSource=!0,this.sources.unshift(p)):this.sources.push(p),P=p.get&&(!p.get.reliesOnPrototype||p.prototype.get);let I=a(L=>{let y=this.sources.slice(0,-1);if(y=y.filter(M=>M[L]&&(!M[L].reliesOnPrototype||M.prototype[L])),y.length>0)if(y.length===1){let M=y[0];return($,C,G)=>{if($?.source!==M)return M[L](C,G,$)}}else return(M,$,C)=>{let G=[];for(let q of y){if(M?.source===q)break;G.push(q[L]($,C,M))}return Promise.all(G)}},"getApplyToIntermediateSource"),N=this.sources[this.sources.length-1],b=a(L=>{if(N[L]&&(!N[L].reliesOnPrototype||N.prototype[L]))return(y,M,$)=>{if(!y?.source)return N[L](M,$,y)}},"getApplyToCanonicalSource");return Me={put:b("put"),patch:b("patch"),delete:b("delete"),publish:b("publish")},Ge={put:I("put"),patch:I("patch"),delete:I("delete"),publish:I("publish"),invalidate:I("invalidate")},(async()=>{let L=!1,y=a(async(M,$)=>{let C=M.value,G=M.table?lt[c][M.table]:Je;if(c===Ss.SYSTEM_SCHEMA_NAME&&(M.table===Ss.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||M.table===Ss.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(L=!0),M.id===void 0&&(M.id=C[G.primaryKey],M.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(M));M.source=p;let q=await G.getResource(M.id,$,Al);switch(M.type){case"put":return q._writeUpdate(C,!0,Al);case"patch":return q._writeUpdate(C,!1,Al);case"delete":return q._writeDelete(Al);case"publish":return q._writePublish(C,Al);case"invalidate":return q.invalidate(Al);default:st.error("Unknown operation",M.type,M.id)}},"writeUpdate");try{let M=p.subscribe;M&&m==null&&(m=!0);let $=p.subscribeOnThisThread?p.subscribeOnThisThread((0,Ya.getWorkerIndex)()):(0,Ya.getWorkerIndex)()===0,C=M&&$&&await p.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(C){let G;for await(let q of C)try{if(!(q.type==="transaction"?q.writes[0]:q)){st.error("Bad subscription event",q);continue}if(q.source=p,G)if(q.beginTxn)G.resolve();else{y(q,G);continue}if(q.type==="end_txn")continue;let Te=Ze(q,()=>{if(q.type==="transaction"){let te=[];for(let Be of q.writes)try{te.push(y(Be,q))}catch(le){throw le.message+=" writing "+JSON.stringify(Be)+" of event "+JSON.stringify(q),le}return Promise.all(te)}else if(q.type==="define_schema"){let te=this.attributes.slice(0),Be;for(let le of q.attributes)te.find($e=>$e.name===le.name)||(te.push(le),Be=!0);Be&&(Et({table:s,database:c,attributes:te,origin:"cluster"}),fd.signalSchemaChange(new Ed.SchemaEventMsg(process.pid,Ss.OPERATIONS_ENUM.CREATE_TABLE,c,s)))}else return q.beginTxn?(G=q,y(q,q),new Promise(te=>{G.resolve=te})):y(q,q)});L&&(await Te,fd.signalUserChange(new Ed.UserEventMsg(process.pid))),q.onCommit&&(Te?.then?Te.then(q.onCommit):q.onCommit())}catch(ae){st.error("error in subscription handler",ae)}}}catch(M){st.error(M)}})(),this}static getResource(p,O,I){let N=super.getResource(p,O,I);if(p!=null){vl(p);try{if(N.hasOwnProperty(fe))return N;if(typeof p=="object"&&p&&!Array.isArray(p))throw new Error(`Invalid id ${JSON.stringify(p)}`);let b=!I?.async||i.cache?.get(p),L=Jn(O),y=L.getReadTxn();if(y?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return Ym(p,O,{transaction:y},b,M=>{if(M?tm(N,M):N[fe]=null,O.onlyIfCached&&O.noCacheStore){if(!N.doesExist())throw new Kn.ServerError("Entry is not cached",504)}else if(I?.ensureLoaded){let $=Km(p,M,O,N);if($)return L?.disregardReadTxn(),N[sN]=!0,oN($,C=>(tm(N,C),N))}return N})}catch(b){throw b.message.includes("Unable to serialize object")&&(b.message+=": "+JSON.stringify(p)),b}}return N}ensureLoaded(){let p=Km(this[Ue],this[Tn],this[Ie]);if(p)return this[sN]=!0,oN(p,O=>{this[Tn]=O,this[fe]=O.value,this[_d]=O.version})}static setTTLExpiration(p){if(typeof p=="number")f=p*1e3,E||(E=0);else if(p&&typeof p=="object")f=p.expiration*1e3,E=(p.eviction||0)*1e3,Ft=p.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(f<0)throw new Error("Expiration can not be negative");Ft=Ft||(f+E)/4,Qm()}static enableAuditing(p=!0){h=p,p&&cy(),Je.audit=p}static coerceId(p){return p===""?null:em(p,U)}static async dropTable(){if(delete lt[c][s],c===o){for(let p of S)u.remove(Je.tableName+"/"+p.name),r[p.name]?.drop();u.remove(Je.tableName+"/"),i.drop(),await u.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));fd.signalSchemaChange(new Ed.SchemaEventMsg(process.pid,Ss.OPERATIONS_ENUM.DROP_TABLE,c,s))}get(p){if(typeof p=="string")return this.getProperty(p);if(this[Yn])return this.search(p);if(this[Ue]===null){if(p?.conditions)return this.search(p);let O=Je.getRecordCount();return{recordCount:O.recordCount,estimatedRecordRange:O.estimatedRange,records:"./",name:s,database:c,attributes:S}}if(p?.property)return this.getProperty(p.property);if(this.doesExist()||p?.ensureLoaded===!1||this[Ie]?.returnNonexistent)return this}allowRead(p,O){let I=Fd(p);if(I?.read){if(I.isSuperUser)return!0;let N=I.attribute_permissions,b=O?.select;if(N?.length>0||iy&&b){if(O||(O={}),b){let L=N?.length>0&&iN(N,"read");O.select=b.map(y=>{let M=y.name||y;if(!L||L[M]){let $=Ki[M]?.definition?.tableClass;if($){if(y.name||(y={name:y}),!$.prototype.allowRead.call(null,p,y))return!1;if(!y.select)return y.name}return y}}).filter(Boolean)}else O.select=N.filter(L=>L.read&&!Ki[L.attribute_name]).map(L=>L.attribute_name);return O}else return!0}}allowUpdate(p,O){let I=Fd(p);if(I?.update){let N=I.attribute_permissions;if(N?.length>0){let b=iN(N,"update");for(let L in O)if(!b[L])return!1;for(let L of N){let y=L.attribute_name;!L.update&&!(y in O)&&(O[y]=this.getProperty(y))}}return!0}}allowCreate(p,O){if(this[Yn]){let I=Fd(p);if(I?.insert){let N=I.attribute_permissions;if(N?.length>0){let b=iN(N,"insert");for(let L in O)if(!b[L])return!1}else return!0}}else return this.allowUpdate(p,{})}allowDelete(p){return Fd(p)?.delete}update(p,O){if(!Jn(this[Ie]))throw new Error("Can not update a table resource outside of a transaction");if(p===!1)return this;let N;return typeof p=="object"&&p&&(O?(Object.isFrozen(p)&&(p=Object.assign({},p)),this[fe]={},this[Gt]=p):(N=this[Gt],N&&(p=Object.assign(N,p)),this[Gt]=N=p)),this._writeUpdate(this[Gt],O),this}addTo(p,O){if(typeof O=="number")this[ad]===sk?this.set(p,(+this.getProperty(p)||0)+O):(this[ad]||this.update(),this.set(p,new jp(O)));else throw new Error("Can not add a non-numeric value")}subtractFrom(p,O){if(typeof O=="number")return this.addTo(p,-O);throw new Error("Can not subtract a non-numeric value")}invalidate(p){let O=this[Ie],I=this[Ue];vl(I),Jn(this[Ie]).addWrite({key:I,store:i,invalidated:!0,entry:this[Tn],nodeName:this[Ie]?.nodeName,before:Me.invalidate?.bind(this,O,I),beforeIntermediate:Ge.invalidate?.bind(this,O,I),commit:(b,L)=>{if(L?.version>b)return;let y=null;for(let M in r)y||(y={}),y[M]=this.getProperty(M);g(I,y,this[Tn],b,cd,h,this[Ie],0,"invalidate")}})}static evict(p,O,I){let N=this.Source,b;if(!((P||h)&&(!O||(b=i.getEntry(p),!b||!O)||b.version!==I))){if(P){if(i.hasLock(p,b.version))return;let L;for(let y in r)L||(L={}),L[y]=O[y];if(L)return g(p,L,b,I,ld,null,null,0,null,!0)}return i.ifVersion(p,I,()=>{xd(p,O,null)}),h?g(p,null,b,I,ld,null,null,0,null,!0):i.remove(p,I)}}lock(){throw new Error("Not yet implemented")}static operation(p,O){return p.table||=s,p.schema||=c,uk.operation(p,O)}put(p){this.update(p,!0)}patch(p){this.update(p,!1)}_writeUpdate(p,O,I){let N=this[Ie],b=Jn(N),L=this[Ue];vl(L);let y=this[Tn];this[ad]=O?sk:iue;let M={key:L,store:i,entry:y,nodeName:N?.nodeName,validate:$=>{p||(p=this[Gt]),O||p&&Wp(p)?N?.source||(b.checkOverloaded(),this.validate(p,!O),H&&(p[H.name]=H.type==="Date"?new Date($):H.type==="String"?new Date($).toISOString():$),O&&(t&&p[t]!==L&&(p[t]=L),k&&(y?.value?p[k.name]=y?.value[k.name]:p[k.name]=k.type==="Date"?new Date($):k.type==="String"?new Date($).toISOString():$),p=$a(p))):b.removeWrite(M)},before:O?Me.put?()=>Me.put(N,L,p):null:Me.patch?()=>Me.patch(N,L,p):Me.put?()=>Me.put(N,L,$a(this)):null,beforeIntermediate:O?Ge.put?()=>Ge.put(N,L,p):null:Ge.patch?()=>Ge.patch(N,L,p):Ge.put?()=>Ge.put(N,L,$a(this)):null,commit:($,C,G)=>{if(G){if(N&&C?.version>(N.lastModified||0)&&(N.lastModified=C.version),this[Tn]=C,C?.value?.[fe])throw new Error("Can not assign a record to a record, check for circular references");O||(this[fe]=C?.value??null)}this[Gt]=p,this[_d]=$;let q=C?.value,ae=p;if(this[ad]=0,C?.version>=$)if(h){let le=C.localTime,$e=C.version;for(;ae&&(le>$||$e>=$&&le>0);){let ne=l.get(le);if(!ne)break;let Z=kt(ne);if($e=Z.version,$e>$){if(Z.type==="patch"){let Ne=Z.getValue(i);ae=Yp(ae,Ne)}else if(Z.type==="put"||Z.type==="delete")return}else if($e===$)return;le=Z.previousLocalTime}}else{if(O)return;ae=Yp(ae,q)}let Te;if(O?Te=ae:(this[fe]=q,Te=O?ae:$a(this,ae)),this[fe]=Te,Te?.[fe])throw new Error("Can not assign a record to a record, check for circular references");let te;O||(te=p),xd(L,q,Te);let Be=O?"put":"patch";g(L,Te,C,$,0,h,N,N.expiresAt||(f?f+Date.now():0),Be,!1,te)}};b.addWrite(M)}async delete(p){if(typeof p=="string")return this.deleteProperty(p);if(this[Yn]){for await(let O of this.search(p))(await Je.getResource(O[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(p);return}return this[fe]?this._writeDelete(p):!1}_writeDelete(p){let O=Jn(this[Ie]),I=this[Ue];vl(I);let N=this[Ie];return O.addWrite({key:I,store:i,resource:this,nodeName:N?.nodeName,before:Me.delete?.bind(this,N,I),beforeIntermediate:Ge.delete?.bind(this,N,I),commit:(b,L,y)=>{let M=L?.value;y&&(N&&L?.version>(N.lastModified||0)&&(N.lastModified=L.version),tm(this,L)),!(L?.version>b)&&(xd(this[Ue],M),st.trace("Write delete entry",I,b),h||m?(g(I,null,this[Tn],b,0,h,this[Ie],0,"delete"),h||Qm()):i.remove(this[Ue]))}}),!0}search(p){let O=this[Ie],I=Jn(O);if(!p)throw new Error("No query provided");let N=p.conditions;N?N.length===void 0&&(N=N[Symbol.iterator]?Array.from(N):[N]):N=Array.isArray(p)?p:p[Symbol.iterator]?Array.from(p):[],this[Ue]&&(N=[{attribute:null,comparator:"prefix",value:this[Ue]}].concat(N));let b,L={};function y(Z,Ne){let qe;switch(Ne){case"and":case void 0:if(Z.length<1)throw new Error('An "and" operator requires at least one condition');qe=!0;break;case"or":if(Z.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+Ne)}let Os=qe&&{},Wi;for(let Qe of Z){if(Qe.conditions){Qe.conditions=y(Qe.conditions,Qe.operator);continue}let jt=Qe[0]??Qe.attribute,wn=jt==null?U:Di(S,jt);if(wn){if(qe){let bs=ds(jt),zt=Os[bs];zt?(zt.push(Qe),Wi=!0):Os[bs]=[Qe]}(wn.type||cO[Qe.comparator])&&(Qe[1]===void 0?Qe.value=$(Qe.value,wn):Qe[1]=$(Qe[1],wn))}else if(jt!=null)throw(0,Kn.handleHDBError)(new Error,`${jt} is not a defined attribute`,404)}if(p.enforceExecutionOrder)return Z;if(Wi)for(let Qe in Os){let jt=Os[Qe],wn=jt.length;if(wn>1)for(let bs=0;bs<wn;bs++){let zt=jt[bs];if(zt.comparator==="ge"||zt.comparator==="greater_than_equal")for(let Qi=0;Qi<wn;Qi++){let oc=jt[Qi];(oc.comparator==="le"||oc.comparator==="less_than_equal")&&(zt.comparator="between",zt.value=[zt.value,oc.value],Z.splice(Z.indexOf(oc),1))}if(zt.comparator==="equals"||!zt.comparator){for(let Qi=0;Qi<wn;Qi++)if(Qi!==bs){let oc=jt[Qi];Z.splice(Z.indexOf(oc),1)}break}}}return Z}a(y,"prepareConditions");function M(Z,Ne){if(p.enforceExecutionOrder)return Z;for(let qe of Z)qe.conditions&&(qe.conditions=M(qe.conditions,qe.operator));return Z.length>1&&Ne!=="or"?(0,lk.sortBy)(Z,Fh(Je)):Z}a(M,"orderConditions");function $(Z,Ne){return Array.isArray(Z)?Z.map(qe=>em(qe,Ne)):em(Z,Ne)}a($,"coerceTypedValues");let C=p.operator;(N.length>0||C)&&(N=y(N,C));let G=typeof p.sort=="object"&&p.sort,q;if(G&&C!=="or"){let Z=G.attribute;if(b=N.find(Ne=>ds(Ne.attribute)===ds(Z)),!b){if(!Di(S,Z))throw(0,Kn.handleHDBError)(new Error,`${Array.isArray(Z)?Z.join("."):Z} is not a defined attribute`,404);b={attribute:Z,comparator:"sort"},N.push(b)}b.descending=!!G.descending}N=M(N,C),G&&(N[0]===b?G.next&&(q={dbOrderedAttribute:G.attribute,attribute:G.next.attribute,descending:G.next.descending,next:G.next.next}):(b&&N.splice(N.indexOf(b),1),q=G));let ae=p.select;if(N.length===0&&(N=[{attribute:t,comparator:"greater_than",value:!0}]),p.explain)return{conditions:N,operator:C,postOrdering:q,selectApplied:!!ae};let Te=I.useReadTxn(),te=lO(N,C,Je,Te,p,O,(Z,Ne)=>oy(Z,ae,O,Te,Ne),L),Be=p.ensureLoaded!==!1;q||(te=ne(te));let le=Je.transformEntryForSelect(ae,O,Te,L,Be,!0),$e=Je.transformToOrderedSelect(te,ae,q,Te,O,le);function ne(Z){return p.offset||p.limit!==void 0?Z.slice(p.offset,p.limit!==void 0?(p.offset||0)+p.limit:void 0):Z}return a(ne,"applyOffset"),q&&($e=ne($e)),$e.onDone=()=>{$e.onDone=null,I.doneReadTxn()},$e.selectApplied=!0,$e.getColumns=()=>{if(ae){let Z=[];for(let Ne of ae)Ne==="*"?Z.push(...S.map(qe=>qe.name)):Z.push(Ne.name||Ne);return Z}return S.map(Z=>Z.name)},$e}static transformToOrderedSelect(p,O,I,N,b,L){let y=new kV;if(I){p=oy(p,O,N,b,null);let M;y.iterate=function(){let C,G=p[Symbol.asyncIterator]?p[Symbol.asyncIterator]():p[Symbol.iterator](),q,ae=I.dbOrderedAttribute,Te,te,Be=!0;function le(ne){let Z=ne.next&&le(ne.next),Ne=ne.descending;return(qe,Os)=>{let Wi=Wm(qe,ne.attribute,N),Qe=Wm(Os,ne.attribute,N),jt=Ne?(0,Ka.compareKeys)(Qe,Wi):(0,Ka.compareKeys)(Wi,Qe);return jt===0?Z?.(qe,Os)||0:jt}}a(le,"createComparator");let $e=le(I);return{async next(){let ne;if(C)if(ne=C.next(),ne.done){if(q)return y.onDone&&y.onDone(),ne}else return{value:await L.call(this,ne.value)};M=[],Te&&M.push(Te);do if(ne=await G.next(),ne.done){if(q=!0,M.length)break;return y.onDone&&y.onDone(),ne}else{let Z=ne.value;if(Z?.then&&(Z=await Z),ae){let Ne=Wm(Z,ae,N);if(Be)Be=!1,te=Ne;else if(Ne!==te){te=Ne,Te=Z;break}}M.push(Z)}while(!0);return I.isGrouped,M.sort($e),C=M[Symbol.iterator](),ne=C.next(),ne.done?(y.onDone&&y.onDone(),ne):{value:await L.call(this,ne.value)}},return(){y.onDone&&y.onDone(),G.return()},throw(){y.onDone&&y.onDone(),G.throw()}}};let $=a(C=>{if(typeof O=="object"&&Array.isArray(C.attribute))for(let G=0;G<O.length;G++){let q=O[G],ae;if(q.name===C.attribute[0]){for(ae=q.sort||(q.sort={});ae.next;)ae=ae.next;ae.attribute=C.attribute.slice(1),ae.descending=C.descending}else q===C.attribute[0]&&(O[G]=ae={name:q,sort:{attribute:C.attribute.slice(1),descending:C.descending}})}C.next&&$(C.next)},"applySortingOnSelect");$(I)}else y.iterate=(p[Symbol.asyncIterator]||p[Symbol.iterator]).bind(p),y=y.map(L);return y}static transformEntryForSelect(p,O,I,N,b,L){if(p&&(p===t||p?.length===1&&p[0]===t)){let C=a(G=>(O?.transaction?.stale&&(O.transaction.stale=!1),G?.key??G),"transform");return p===t?C:p.asArray?G=>[C(G)]:G=>({[t]:C(G)})}let y;b&&P&&!p?.every(C=>{let G;return typeof C=="object"?G=C.name:G=C,r[G]||G===t})&&(y=!0);let M,$=a(function(C){let G;if(O?.transaction?.stale&&(O.transaction.stale=!1),C!=null){if($m=C,G=C.value||C.deref?.(),!G&&(C.key===void 0||C.deref)){if(C=Ym(C.key??C,O,{transaction:I,lazy:p?.length<4},this.isSync,q=>q),C?.then)return C.then($.bind(this));G=C?.value}if(y&&(C.metadataFlags&(cd|ld)||C.expiresAt&&C.expiresAt<Date.now())){let q=Km(C.key??C,C,O);if(q?.then)return q.then($)}}if(G==null)return L?Va.SKIP:G;if(p&&!(p[0]==="*"&&p.length===1)){let q,ae=a((te,Be)=>{let le;typeof te=="object"?le=te.name:le=te;let $e=Ki?.[le],ne;if($e){let Z=N?.[le];if(Z)if(Z.hasMappings){let qe=$e.from?G[$e.from]:ds(C.key);ne=Z.get(qe),ne||(ne=[])}else ne=Z.fromRecord?.(G);else ne=$e(G,O,C);let Ne=a(qe=>{if(qe&&typeof qe=="object"){let Os=$e.definition?.tableClass||Je;M||(M={});let Wi=M[le]||(M[le]=Os.transformEntryForSelect(le===te?null:te.select||(Array.isArray(te)?te:null),O,I,Z,b));if(Array.isArray(qe)){let Qe=[],jt=Os.transformToOrderedSelect(qe,te.select,typeof te.sort=="object"&&te.sort,O,I,Wi)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),wn=a(zt=>{for(;!zt.done;){if(zt?.then)return zt.then(wn);Qe.push(zt.value),zt=jt.next()}Be(Qe,le)},"nextValue"),bs=wn(jt.next());bs&&(q||(q=[]),q.push(bs));return}else if(qe=Wi.call(this,qe),qe?.then){q||(q=[]),q.push(qe.then(Qe=>Be(Qe,le)));return}}Be(qe,le)},"handleResolvedValue");ne?.then?(q||(q=[]),q.push(ne.then(Ne))):Ne(ne);return}else ne=G[le],ne&&typeof ne=="object"&&le!==te&&(ne=Je.transformEntryForSelect(te.select||te,O,I,null)({value:ne}));Be(ne,le)},"selectAttribute"),Te;if(typeof p=="string")ae(p,te=>{Te=te});else if(Array.isArray(p))if(p.asArray)Te=[],p.forEach((te,Be)=>{te==="*"?p[Be]=G:ae(te,le=>Te[Be]=le)});else{Te={};let te=p.forceNulls;for(let Be of p)if(Be==="*")for(let le in G)Te[le]=G[le];else ae(Be,(le,$e)=>{le===void 0&&te&&(le=null),Te[$e]=le})}else throw new Kn.ClientError("Invalid select"+p);return q?Promise.all(q).then(()=>Te):Te}return G},"transform");return $}async subscribe(p){if(!l)throw new Error("Can not subscribe to a table without an audit log");h||Et({table:s,database:c,schemaDefined:_,attributes:S,audit:!0}),p||(p={});let O=!p.rawEvents,I=ZF(Je,this[Ue]??null,function(y,M,$,C){try{let G=M.getValue?.(i,O);if(!G&&M.type==="patch"&&O){let q=i.getEntry(y);q?.version===M.version?G=q.value:G=M.getValue?.(i,!0,$),M.type="put"}this.send({id:y,timestamp:$,value:G,version:M.version,type:M.type,beginTxn:C})}catch(G){st.error(G)}},p.startTime||0,this[Yn]);this[Yn]&&(I.includeDescendants=!0,p.onlyChildren&&(I.onlyChildren=!0)),p.crossThreads===!1&&(I.crossThreads=!1),p.supportsTransactions&&(I.supportsTransactions=!0);let N=this[Ue],b=p.previousCount;b>1e3&&(b=1e3);let L=p.startTime;if(this[Yn]){if(L){if(b)throw new Kn.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:y,value:M}of l.getRange({start:L,exclusiveStart:!0})){let $=kt(M);if($.tableId!==n)continue;let C=$.recordId;if(N==null||ak(N,C)){let G=$.getValue(i,O,y);I.send({id:C,timestamp:y,value:G,version:$.version,type:$.type})}I.startTime=y}}else if(b){let y=[];for(let{key:M,value:$}of l.getRange({start:"z",end:!1,reverse:!0}))try{let C=kt($);if(C.tableId!==n)continue;let G=C.recordId;if(N==null||ak(N,G)){let q=C.getValue(i,O,M);if(y.push({id:G,timestamp:M,value:q,version:C.version,type:C.type}),--b<=0)break}}catch(C){st.error("Error getting history entry",M,C)}for(let M=y.length;M>0;)I.send(y[--M]);y[0]&&(I.startTime=y[0].timestamp)}else if(!p.omitCurrent)for(let{key:y,value:M,version:$,localTime:C}of i.getRange({start:N??!1,end:N==null?void 0:[N,Ka.MAXIMUM_KEY],versions:!0}))M&&I.send({id:y,timestamp:C,value:M,version:$,type:"put"})}else{b&&!L&&(L=0);let y=this[Tn]?.localTime;if(y===BS&&(i.cache?.delete(N),this[Tn]=i.getEntry(N),st.trace("re-retrieved record",y,this[Tn]?.localTime),y=this[Tn]?.localTime),st.trace("Subscription from",L,"from",N,y),L<y){let M=[],$=y;do{let C=l.get($);if(C){p.omitCurrent=!0;let G=kt(C),q=G.getValue(i,O,$);O&&(G.type="put"),M.push({id:N,value:q,timestamp:$,...G}),$=G.previousLocalTime}else break;b&&b--}while($>L&&b!==0);for(let C=M.length;C>0;)I.send(M[--C]);I.startTime=y}!p.omitCurrent&&this.doesExist()&&I.send({id:N,timestamp:y,value:this,version:this[_d],type:"put"})}return p.listener&&I.on("data",p.listener),I}doesExist(){return!!(this[fe]||this[ad])}publish(p,O){this._writePublish(p,O)}_writePublish(p,O){let I=Jn(this[Ie]),N=this[Ue]||null;vl(N);let b=this[Ie];I.addWrite({key:N,store:i,entry:this[Tn],nodeName:b?.nodeName,validate:()=>{b?.source||(I.checkOverloaded(),this.validate(p))},before:Me.publish?.bind(this,b,N,p),beforeIntermediate:Ge.publish?.bind(this,b,N,p),commit:(L,y,M)=>{y===void 0&&m&&!h&&Qm(),g(N,y?.value??null,y,y?.version||L,0,!0,b,y?.expiresAt,"message",!1,p)}})}validate(p,O){let I,N=a((b,L,y)=>{if(L.type&&b!=null)if(O&&b.__op__&&(b=b.value),L.properties){typeof b!="object"&&(I||(I=[])).push(`Value ${ms(b)} in property ${y} must be an object${L.type?" ("+L.type+")":""}`);let M=L.properties;for(let $=0,C=M.length;$<C;$++){let G=M[$],q=N(b[G.name],G,y+"."+G.name);q&&(b[G.name]=q)}if(L.sealed&&b!=null&&typeof b=="object")for(let $ in b)M.find(C=>C.name===$)||(I||(I=[])).push(`Property ${$} is not allowed within object in property ${y}`)}else switch(L.type){case"Int":(typeof b!="number"||b>>0!==b)&&(I||(I=[])).push(`Value ${ms(b)} in property ${y} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof b!="number"||!(Math.floor(b)===b&&Math.abs(b)<=9007199254740992))&&(I||(I=[])).push(`Value ${ms(b)} in property ${y} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof b!="number"&&(I||(I=[])).push(`Value ${ms(b)} in property ${y} must be a number`);break;case"ID":typeof b=="string"||b?.length>0&&b.every?.(M=>typeof M=="string")||(I||(I=[])).push(`Value ${ms(b)} in property ${y} must be a string, or an array of strings`);break;case"String":typeof b!="string"&&(I||(I=[])).push(`Value ${ms(b)} in property ${y} must be a string`);break;case"Boolean":typeof b!="boolean"&&(I||(I=[])).push(`Value ${ms(b)} in property ${y} must be a boolean`);break;case"Date":if(!(b instanceof Date)){if(typeof b=="string"||typeof b=="number")return new Date(b);(I||(I=[])).push(`Value ${ms(b)} in property ${y} must be a Date`)}break;case"BigInt":if(typeof b!="bigint"){if(typeof b=="string"||typeof b=="number")return BigInt(b);(I||(I=[])).push(`Value ${ms(b)} in property ${y} must be a bigint`)}break;case"Bytes":b instanceof Uint8Array||(I||(I=[])).push(`Value ${ms(b)} in property ${y} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(b)){if(L.elements)for(let M=0,$=b.length;M<$;M++){let C=b[M],G=N(C,L.elements,y+"[*]");G&&(b[M]=G)}}else(I||(I=[])).push(`Value ${ms(b)} in property ${y} must be a Buffer or Uint8Array`);break}L.nullable===!1&&b==null&&(I||(I=[])).push(`Property ${y} is required (and not does not allow null values)`)},"validateValue");for(let b=0,L=S.length;b<L;b++){let y=S[b];if(!y.relationship&&(!O||y.name in p)){let M=N(p[y.name],y,y.name);M&&(p[y.name]=M)}}if(d)for(let b in p)S.find(L=>L.name===b)||(I||(I=[])).push(`Property ${b} is not allowed`);if(I)throw new Kn.ClientError(I.join(". "))}getUpdatedTime(){return this[_d]}wasLoadedFromSource(){return P?!!this[sN]:void 0}static async addAttributes(p){let O=S.slice(0);for(let I of p){if(!I.name)throw new Kn.ClientError("Attribute name is required");if(I.name.match(/[`/]/))throw new Kn.ClientError("Attribute names cannot include backticks or forward slashes");O.push(I)}return Et({table:s,database:c,schemaDefined:_,attributes:O}),Je.indexingOperation}static async removeAttributes(p){let O=S.filter(I=>!p.includes(I.name));return Et({table:s,database:c,schemaDefined:_,attributes:O}),Je.indexingOperation}static getRecordCount(p){let O=i.getStats().entryCount,I=5e3,N=1e3,b;O>I&&!p?.exactCount&&(b=N);let L=0;for(let{value:y}of i.getRange({start:!0,lazy:!0,limit:b}))y!=null&&L++;if(b){let y=L;L=0;for(let{value:Be}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:b}))Be!=null&&L++;let M=b*2,$=(L+y)/M,C=Math.pow((L-y+1)/b/2,2)+$*(1-$)/M,G=Math.max(Math.sqrt(C)*O,1),q=Math.round($*O),ae=Math.max(q-1.96*G,0),Te=Math.min(q+1.96*G,O),te=Math.pow(10,Math.round(Math.log10(G)));return te>q&&(te=te/10),L=Math.round(q/te)*te,{recordCount:L,estimatedRange:[Math.round(ae),Math.round(Te)]}}return{recordCount:L}}static updatedAttributes(){Ki=this.propertyResolvers={$id:(p,O,I)=>({value:I.key}),$updatedtime:(p,O,I)=>I.version,$record:(p,O,I)=>I?{value:p}:p};for(let p of this.attributes){p.resolve=null;let O=p.relationship;if(O)if(p.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),iy=!0,O.to)p.elements?.definition?(Ki[p.name]=p.resolve=(I,N,b)=>{let L=I[O.from?O.from:t],y=p.elements.definition.tableClass;return b?rl({attribute:O.to,value:L},Jn(N).getReadTxn(),!1,y,!1).asArray:y.search([{attribute:O.to,value:L}],N).asArray},p.set=()=>{throw new Error("Setting a one-to-many relationship property is not supported")},p.resolve.definition=p.elements.definition,O.from&&(p.resolve.from=O.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(O.from){let I=p.definition||p.elements?.definition;I?(Ki[p.name]=p.resolve=(N,b,L)=>{let y=N[O.from];if(y!==void 0){if(p.elements){let M,$=y.map(C=>{let G=L?I.tableClass.primaryStore.getEntry(C,{transaction:Jn(b).getReadTxn()}):I.tableClass.get(C,b);return G?.then&&(M=!0),G});return O.filterMissing?M?Promise.all($).then(C=>C.filter(ck)):$.filter(ck):M?Promise.all($):$}return L?I.tableClass.primaryStore.getEntry(y,{transaction:Jn(b).getReadTxn()}):I.tableClass.get(y,b)}},p.set=(N,b)=>{if(Array.isArray(b)){let L=b.map(y=>y[Ue]||y[I.tableClass.primaryKey]);N[O.from]=L}else{let L=b[Ue]||b[I.tableClass.primaryKey];N[O.from]=L}},p.resolve.definition=p.definition||p.elements?.definition,p.resolve.from=O.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`)}zp(this,this)}static async deleteHistory(p=0){let O;for(let{key:I,value:N}of l.getRange({start:0,end:p}))await ud(),kt(N).tableId===n&&(O=l.remove(I));await O}static async*getHistory(p=0,O=1/0){for(let{key:I,value:N}of l.getRange({start:p,end:O})){await ud();let b=kt(N);b.tableId===n&&(yield{id:b.recordId,localTime:I,version:b.version,type:b.type,value:b.getValue(i,!0,I),user:b.user})}}static async getHistoryOfRecord(p){let O=[];if(p==null)throw new Error("An id is required");let I=i.getEntry(p);if(!I)return O;let N=I.localTime;if(!N)throw new Error("The entry does not have a local audit time");let b=0;do{await ud();let L=l.get(N);if(L){let y=kt(L);O.push({id:y.recordId,localTime:N,version:y.version,type:y.type,value:y.getValue(i,!0,N),user:y.user}),N=y.previousLocalTime}else break}while(b<1e3&&N);return O.reverse()}static cleanup(){z?.remove()}}Je.updatedAttributes();let YV=Je.prototype;return YV[sue]=!0,f&&Je.setTTLExpiration(f/1e3),j&&KV(),Je;function xd(W,p,O){let I;for(let N in r){let b=r[N],L=b.isIndexing,y=O?.[N],M=p?.[N];if(y===M&&!L)continue;I=!0;let $=b.indexNulls,C=(0,dd.getIndexedValues)(y,$),G=(0,dd.getIndexedValues)(M,$);if(G?.length>0){let q=new Set(G);if(C=C?C.filter(ae=>{if(q.has(ae))q.delete(ae);else return!0}):[],G=Array.from(q),(G.length>0||C.length>0)&&nk){let ae=G.concat(C).map(Te=>({key:Te,value:W}));b.prefetch(ae,ok)}for(let ae=0,Te=G.length;ae<Te;ae++)b.remove(G[ae],W)}else C?.length>0&&nk&&b.prefetch(C.map(q=>({key:q,value:W})),ok);if(C)for(let q=0,ae=C.length;q<ae;q++)b.put(C[q],W)}return I}a(xd,"updateIndices");function vl(W){switch(typeof W){case"number":return!0;case"string":if(W.length<659)return!0;if(W.length>ik)throw new Error("Primary key size is too large: "+W.length);break;case"object":if(W===null)return!0;break;case"bigint":if(W<2n**64n&&W>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof W)}if((0,Ka.writeKey)(W,oue,0)>ik)throw new Error("Primary key size is too large: "+W.length);return!0}a(vl,"checkValidId");function Ym(W,p,O,I,N){let b=a(()=>{if(p?.transaction?.stale&&(p.transaction.stale=!1),O.transaction?.isDone)return N(null,W);let L=i.getEntry(W,O);return L&&p&&(L?.version>(p.lastModified||0)&&(p.lastModified=L.version),L?.localTime&&!p.lastRefreshed&&(p.lastRefreshed=L.localTime)),N(L,W)},"whenPrefetched");return I?b():ue>0?(ue--,b()):new Promise((L,y)=>{ue===0?(ue--,i.prefetch([W],()=>{M(),$()})):(J.push(W),Se.push($),J.length>VV&&(ue--,M()));function M(){if(J.length>0){let C=Se;i.prefetch(J,()=>{ue===-1?M():ue++;for(let G of C)G()}),J=[],Se=[],Ee>2&&Ee--}else ue=Ee,Ee<$V&&Ee++}a(M,"prefetch");function $(){try{L(b())}catch(C){y(C)}}a($,"load")})}a(Ym,"loadLocalRecord");function Fd(W){if(!W?.role)return;let p=W.role.permission;if(p.super_user)return aue;let O=p[c],I,N=O?.tables;if(N)return N[s];if(c==="data"&&(I=p[s])&&!I.tables)return I}a(Fd,"getTablePermissions");function Km(W,p,O,I){if(P){let N;if(O.noCache?N=!0:(p?(!p.value||p.metadataFlags&(cd|ld)||p.expiresAt&&p.expiresAt<Date.now())&&(N=!0):N=!0,Un(!N,"cache-hit",s)),N){let b=ay(W,p,O).then(L=>(L?.value?.[fe]&&st.error("Can not assign a record with a record property"),O&&(L?.version>(O.lastModified||0)&&(O.lastModified=L.version),O.lastRefreshed=Date.now()),L));if(O?.onlyIfCached||p?.value&&I?.allowStaleWhileRevalidate?.(p,W)){if(b.catch(L=>st.warn(L)),O?.onlyIfCached&&!I.doesExist())throw new Kn.ServerError("Entry is not cached",504);return}else return b}}}a(Km,"ensureLoadedFromSource");function Jn(W){let p=W?.transaction;if(p){if(!p.lmdbDb)return p.lmdbDb=i,p;do{if(p.lmdbDb?.path===i.path)return p;let O=p.next;if(!O)return p=p.next=new da,p.lmdbDb=i,p;p=O}while(!0)}else return new Zf}a(Jn,"txnForContext");function Wm(W,p,O){if(!W)return;$m=W;let I=W.value||W.deref?.()||($m=i.getEntry(W.key))?.value;if(typeof p=="object"){let b=Ki,L=I;for(let y=0,M=p.length;y<M;y++){let $=p[y],C=b?.[$];L=C&&L?C(L,O,!0)?.value:L?.[$],b=C?.definition?.tableClass?.propertyResolvers}return L}let N=Ki[p];return N?N(I,O):I[p]}a(Wm,"getAttributeValue");function oy(W,p,O,I,N){let b=N?.length,L={transaction:I,lazy:b>0||typeof p=="string"||p?.length<4,alwaysPrefetch:!0},y;function M($,C){let G=$?.value;if(!G)return Va.SKIP;for(let q=0;q<b;q++)if(!y?.includes(q)&&!N[q](G,$))return Va.SKIP;return C!==void 0&&($.key=C),$}if(a(M,"processEntry"),b>0||!W.hasEntries){let $=W.map(C=>{if(y=null,typeof C=="object"&&C?.key!==void 0)return b>0?M(C):C;if(C==null)return Va.SKIP;for(let G=0;G<b;G++){let ae=N[G].idFilter;if(ae){if(!ae(C))return Va.SKIP;y||(y=[]),y.push(G)}}return Ym(C,O,L,!1,M)});return Array.isArray(W)&&($=$.filter(C=>C!==Va.SKIP)),$.hasEntries=!0,$}return W}a(oy,"transformToEntries");async function ay(W,p,O){let I=p?.metadataFlags,N=p?.version,b,L;if(!i.attemptLock(W,N,()=>{clearTimeout(L);let C=i.getEntry(W);!C||!C.value||C.metadataFlags&(cd|ld)?b(ay(W,i.getEntry(W),O)):b(C)}))return new Promise(C=>{b=C,L=setTimeout(()=>{i.unlock(W,N)},nue)});let y=p?.value,M={requestContext:O,replacingRecord:y,replacingVersion:N,source:null,resourceCache:O?.resourceCache},$=O?.responseHeaders;return new Promise((C,G)=>{let q;oN(Ze(M,async ae=>{let Te=performance.now(),te,Be,le;try{for(let Ne of Je.sources)if(Ne.get&&(!Ne.get.reliesOnPrototype||Ne.prototype.get)&&(M.source=Ne,te=await Ne.get(W,M),te))break;le=I&cd;let ne=M.lastModified||le&&N;Be=le||ne>N||!y,ne||(ne=(0,dd.getNextMonotonicTime)());let Z=performance.now()-Te;if(un(Z,"cache-resolution",s),$&&DA($,"Server-Timing",`cache-resolve;dur=${Z.toFixed(2)}`,!0),ae.timestamp=ne,f&&!M.expiresAt&&(M.expiresAt=Date.now()+f),te){if(typeof te!="object")throw new Error("Only objects can be cached and stored in tables");typeof te.toJSON=="function"&&(te=te.toJSON()),t&&te[t]!==W&&(te[t]=W)}q=!0,C({version:ne,value:te})}catch(ne){ne.message+=` while resolving record ${W} for ${s}`,y&&((ne.code==="ECONNRESET"||ne.code==="ECONNREFUSED"||ne.code==="EAI_AGAIN")&&!O?.mustRevalidate||O?.staleIfError&&(ne.statusCode===500||ne.statusCode===502||ne.statusCode===503||ne.statusCode===504))?(C({version:N,value:y}),st.trace(ne.message,"(returned stale record)")):G(ne),M.transaction.abort();return}if(O?.noCacheStore){M.transaction.abort();return}Jn(M).addWrite({key:W,store:i,entry:p,nodeName:"source",commit:(ne,Z)=>{if(Z?.version!==N)return;let Ne=xd(W,y,te);te?(Ge.put?.(M,W,te),g(W,te,Z,ne,0,h&&Be||null,M,M.expiresAt,"put",!!le)):(Ge.delete?.(M,W),h||m?g(W,null,Z,ne,0,h&&Be||null,M,0,"delete",!!le):i.remove(W,N))}})}),()=>{i.unlock(W,N)},ae=>{i.unlock(W,N),q&&st.error("Error committing cache update",ae)})})}a(ay,"getFromSource");function Qm(){if(Ft!==Gd&&(Gd=Ft,(0,Ya.getWorkerIndex)()===(0,Ya.getWorkerCount)()-1)){if(qd&&clearTimeout(qd),!Ft)return;let W=new Date;W.setMonth(0),W.setDate(1),W.setHours(0),W.setMinutes(0),W.setSeconds(0);let p=Math.ceil((Date.now()-W.getTime())/Ft)*Ft+W.getTime(),O=a(I=>{st.trace(`Scheduled next cleanup scan at ${new Date(I)}ms`),qd=setTimeout(()=>v=v.then(async()=>{if(O(Math.max(I+Ft,Date.now())),i.rootStore.status!=="open"){clearTimeout(qd);return}let N=50,b=new Array(N),L=0;st.trace(`Starting cleanup scan for ${s}`);try{let y=0;for(let{key:M,value:$,version:C,expiresAt:G}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let q;$===null&&!h&&C+rue<Date.now()?q=i.remove(M,C):G&&G+E<Date.now()&&(q=Je.evict(M,$,C),y++),q&&(await b[L],b[L]=q.catch(ae=>{st.error("Cleanup error",ae)}),++L>=N&&(L=0)),await ud()}st.trace(`Finished cleanup scan for ${s}, evicted ${y} entries`)}catch(y){st.trace(`Error in cleanup scan for ${s}:`,y)}}),Math.min(I-Date.now(),2147483647)).unref()},"startNextTimer");O(p)}}a(Qm,"scheduleCleanup");function cy(){z=l?.addDeleteRemovalCallback(n,W=>{let p=i.getEntry(W);p?.value===null&&i.remove(W,p.version)})}a(cy,"addDeleteRemoval");function KV(){(0,Ya.getWorkerIndex)()===0&&setInterval(async()=>{if(!Vm){Vm=!0;try{let W=j.name,p=r[W];if(!p)throw new Error(`expiresAt attribute ${j} must be indexed`);for(let O of p.getRange({start:!0,values:!1,end:Date.now(),snapshot:!1})){for(let I of p.getValues(O)){let N=i.getEntry(I);N?.value?N.value[W]<Date.now()&&Je.evict(I,N.value,N.version):i.ifVersion(I,N?.version,()=>p.remove(O,I))}await ud()}}catch(W){st.error("Error in evicting old records",W)}finally{Vm=!1}}},tue).unref()}a(KV,"runRecordExpirationEviction")}function iN(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 ok(){}function cue(e){uk=e}function em(e,t){let r=t?.type;return e===null?e:e===""&&r&&r!=="String"&&r!=="Any"?null:r==="Int"||r==="Long"?e==="null"?null:parseInt(e):r==="Float"?e==="null"?null:parseFloat(e):r==="BigInt"?e==="null"?null:BigInt(e):r==="Boolean"?e==="true"?!0:e==="false"?!1:e:r==="Date"?(typeof e!="number"&&!lue.test(e)&&(e+="Z"),e==="null"?null:new Date(e)):!r||r==="Any"?(0,rm.autoCast)(e):e}function ak(e,t){if(e==null)return!0;if(!Array.isArray(t))return e===t;if(Array.isArray(e)){let r=e.length;if(e[r-1]===null&&r--,t.length>=r){for(let n=0;n<r;n++)if(t[n]!==e[n])return!1;return!0}return!1}else if(t[0]===e)return!0}function oN(e,t,r){return e?.then?e.then(t,r):t(e)}function tm(e,t){e[Tn]=t,e[fe]=t?.value??null,e[_d]=t?.version}function ck(e){return e!=null}function ms(e){try{return JSON.stringify(e)}catch{return e}}var Ss,Va,dd,lk,hd,Kn,fd,Ed,st,Ka,Ya,rm,eue,uk,tue,rue,nk,nue,_d,sue,Tn,ad,sk,iue,sN,Al,cd,ld,oue,ik,aue,Hye,lue,ud,np=Oe(()=>{Ss=B(D()),Va=require("lmdb"),dd=B(Ar()),lk=require("lodash");es();Dg();hd=B(X());rk();Kn=B(oe()),fd=B(di()),Ed=B(is());ge();$h();st=B(x());rE();fa();Ka=require("ordered-binary"),Ya=B(et());Zi();rm=B(K());nu();pi();$p();b_();eue=new Uint8Array(9);eue[8]=192;tue=6e4,rue=864e5;hd.initSync();nk=hd.get(Ss.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),nue=1e4,_d=Symbol.for("version"),sue=Symbol.for("incremental-update"),Tn=Symbol("entry"),ad=Symbol("is-saving"),sk=1,iue=2,sN=Symbol("loaded-from-source"),Al={isNotification:!0,ensureLoaded:!1},cd=1,ld=8,oue=Buffer.allocUnsafeSlow(8192),ik=1978,aue={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},Hye=(0,rm.convertToMS)(hd.get(Ss.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(nm,"makeTable");a(iN,"attributesAsObject");a(ok,"noop");a(cue,"setServerUtilities");lue=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(em,"coerceType");a(ak,"isDescendantId");ud=a(()=>new Promise(setImmediate),"rest");a(oN,"when");a(tm,"updateResource");a(ck,"exists");a(ms,"stringify")});var ke={};Fe(ke,{database:()=>Mu,databases:()=>lt,dropDatabase:()=>vg,dropTableMeta:()=>Eue,getDatabases:()=>Dr,getDefaultCompression:()=>dh,getTables:()=>uue,onUpdatedTable:()=>bb,readMetaDb:()=>pd,resetDatabases:()=>m_,table:()=>Et,tables:()=>en});function uue(){return cm||Dr(),en||{}}function Dr(){if(cm)return lt;cm=!0,Nl=new Map;let e=(0,gt.getHdbBasePath)()&&(0,it.join)((0,gt.getHdbBasePath)(),qt.DATABASES_DIR_NAME),t=(0,gt.get)(qt.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,gt.get)(qt.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,gn.existsSync)(e)?e:(0,it.join)((0,gt.getHdbBasePath)(),qt.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,gn.existsSync)(e))for(let r of(0,gn.readdirSync)(e,{withFileTypes:!0})){let n=(0,it.basename)(r.name,".mdb");r.isFile()&&(0,it.extname)(r.name).toLowerCase()===".mdb"&&!t[n]?.path&&pd((0,it.join)(e,r.name),null,n)}if((0,gn.existsSync)((0,bl.getBaseSchemaPath)())){for(let r of(0,gn.readdirSync)((0,bl.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,it.join)((0,bl.getBaseSchemaPath)(),r.name),s=(0,it.join)((0,bl.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,gn.readdirSync)(n,{withFileTypes:!0}))if(i.isFile()&&(0,it.extname)(i.name).toLowerCase()===".mdb"){let o=(0,it.join)(s,i.name);pd((0,it.join)(n,i.name),(0,it.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let n=t[r],s=n.path;if((0,gn.existsSync)(s))for(let o of(0,gn.readdirSync)(s,{withFileTypes:!0}))o.isFile()&&(0,it.extname)(o.name).toLowerCase()===".mdb"&&pd((0,it.join)(s,o.name),(0,it.basename)(o.name,".mdb"),r);let i=n.tables;if(i)for(let o in i){let c=i[o],l=(0,it.join)(c.path,(0,it.basename)(o+".mdb"));(0,gn.existsSync)(l)&&pd(l,o,r,null,!0)}}for(let r in lt){let n=Nl.get(r);if(n){let s=lt[r];r.includes("delete")&&Wn.trace(`defined tables ${Array.from(n.keys())}`);for(let i in s)n.has(i)||(Wn.trace(`delete table class ${i}`),delete s[i])}else if(delete lt[r],r==="data"){for(let s in en)delete en[s];delete en[um]}}return Nl=null,lt}}function m_(){cm=!1;for(let[,e]of Mo)e.needsDeletion=!0;Dr();for(let[e,t]of Mo)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),Mo.delete(e));return lt}function pd(e,t,r=lN,n,s){let i=new aN.default(e,!1);try{let o=Mo.get(e);o?o.needsDeletion=!1:(o=(0,im.open)(i),Mo.set(e,o));let c=new Wa.default(!1),l=o.dbisDb||(o.dbisDb=o.openDB(sm.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(n?(0,gn.existsSync)(n)&&(i.path=n,_=(0,im.open)(i),_.isLegacy=!0):_=kp(o));let u=Ek(r),d=u[um],f=new Map;for(let{key:E,value:h}of l.getRange({start:!1})){let[m,S]=E.toString().split("/");S===""?S=h.name:S||(S=m,m=t,h.name||(h.name=S,h.indexed=!h.is_hash_attribute)),d?.add(m);let g=f.get(m);g||f.set(m,g={attributes:[]}),(S==null||h.is_hash_attribute)&&(g.primary=h),S!=null&&g.attributes.push(h),Object.defineProperty(h,"key",{value:E,configurable:!0})}for(let[E,h]of f){let{attributes:m,primary:S}=h;if(!S){for(let J of m)if(J.is_hash_attribute||J.isPrimaryKey){S=J;break}if(!S){Wn.fatal(`Unable to find a primary key attribute on table ${E}, with attributes: ${JSON.stringify(m)}`);continue}}let g=u[E],R={},A=[],P,U,v=typeof S.audit=="boolean"?S.audit:(0,gt.get)(qt.CONFIG_PARAMS.LOGGING_AUDITLOG),k=S.trackDeletes,H=S.expiration,j=S.eviction,z=S.sealed;if(g)R=g.indices,A=g.attributes,g.schemaVersion++;else{P=S.tableId,P?P>=(l.get(Ol)||0)&&l.putSync(Ol,P+1):(S.tableId=P=l.get(Ol),P||(P=1),l.putSync(Ol,P+1),l.putSync(S.key,S));let J=new Wa.default(!S.is_hash_attribute,S.is_hash_attribute);if(J.compression=S.compression,J.compression){let Se=(0,gt.get)(qt.CONFIG_PARAMS.STORAGE_COMPRESSION_THRESHOLD)||fk;J.compression.threshold=Se}U=af(o.openDB(S.key,J)),U.rootStore=o,U.tableId=P}for(let J of m){J.attribute=J.name;try{if(!J.is_hash_attribute&&(J.indexed||J.attribute&&!J.name)){if(!R[J.name]){let ue=new Wa.default(!J.is_hash_attribute,J.is_hash_attribute);R[J.name]=o.openDB(J.key,ue),R[J.name].indexNulls=J.indexNulls}let Se=A.find(ue=>ue.name===J.name);Se?A.splice(A.indexOf(Se),1,J):A.push(J)}}catch(Se){Wn.error("Error trying to update attribute",J,A,R,Se)}}if(!g){g=hk(u,E,nm({primaryStore:U,auditStore:_,audit:v,sealed:z,expirationMS:H&&H*1e3,evictionMS:j&&j*1e3,trackDeletes:k,tableName:E,tableId:P,primaryKey:S.name,databasePath:s?r+"/"+E:r,databaseName:r,indices:R,attributes:m,schemaDefined:S.schemaDefined,dbisDB:l})),g.schemaVersion=1;for(let J of uN)J(g)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function Ek(e){let t=lt[e];if(t||(e==="data"?t=lt[e]=en:e==="system"?Object.defineProperty(lt,"system",{value:t=Object.create(null),configurable:!0}):t=lt[e]=Object.create(null)),Nl&&!Nl.has(e)){let r=new Set;t[um]=r,Nl.set(e,r)}return t}function hk(e,t,r){return e[t]=r,r}function Mu({database:e,table:t}){e||(e=lN),Dr();let r=Ek(e),n=(0,it.join)((0,gt.getHdbBasePath)(),qt.DATABASES_DIR_NAME),s=(0,gt.get)(qt.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,gt.get)(qt.CONFIG_PARAMS.STORAGE_PATH)||((0,gn.existsSync)(n)?n:(0,it.join)((0,gt.getHdbBasePath)(),qt.LEGACY_DATABASES_DIR_NAME));let o=(0,it.join)(n,(i?t:e)+".mdb"),c=Mo.get(o);if(!c){let l=new aN.default(o,!1);c=(0,im.open)(l),Mo.set(o,c)}return c}async function vg(e){if(!lt[e])throw new Error("Schema does not exist");let t=lt[e];for(let r in t){let s=t[r].primaryStore.rootStore;Mo.delete(s.path),s.status==="open"&&(await s.close(),await lm.remove(s.path))}if(e==="data"){for(let r in en)delete en[r];delete en[um]}delete lt[e]}function Et({table:e,database:t,expiration:r,eviction:n,scanInterval:s,attributes:i,audit:o,sealed:c,trackDeletes:l,schemaDefined:_,origin:u}){t||(t=lN);let d=Mu({database:t,table:e}),f=lt[t],E=f?.[e];if(d.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let h,m,S,g;_==null&&(_=!0);let R=new Wa.default(!1);for(let H of i)H.attribute?(H.name=H.attribute,H.indexed=!0):H.attribute=H.name,H.expiresAt&&(H.indexed=!0);let A,P;if(E){if(h=E.primaryKey,E.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${e} class`);E.attributes.splice(0,E.attributes.length,...i)}else{let H=d.auditStore;H||(H=kp(d)),m=i.find(Se=>Se.isPrimaryKey)||{},h=m.name,m.is_hash_attribute=!0,m.schemaDefined=_,m.compression=dh(),l&&(m.trackDeletes=!0),o=m.audit=typeof o=="boolean"?o:(0,gt.get)(qt.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(m.expiration=r),n&&(m.eviction=n),typeof c=="boolean"&&(m.sealed=c),u&&(m.origins?m.origins.includes(u)||m.origins.push(u):m.origins=[u]),Wn.trace(`${e} table loading, opening primary store`);let j=new Wa.default(!1,!0);j.compression=m.compression;let z=e+"/",J=af(d.openDB(z,j));J.rootStore=d,g=d.dbisDb=d.openDB(sm.INTERNAL_DBIS_NAME,R),J.tableId=g.get(Ol),J.tableId||(J.tableId=1),g.putSync(Ol,J.tableId+1),m.tableId=J.tableId,E=hk(f,e,nm({primaryStore:J,auditStore:H,audit:o,sealed:c,trackDeletes:l,expirationMS:r&&r*1e3,evictionMS:n&&n*1e3,primaryKey:h,tableName:e,tableId:J.tableId,databasePath:t,databaseName:t,indices:{},attributes:i,schemaDefined:_,dbisDB:g})),E.schemaVersion=1,A=!0,k(),g.put(z,m)}S=E.indices,g=g||(d.dbisDb=d.openDB(sm.INTERNAL_DBIS_NAME,R)),E.dbisDB=g;let U=[];for(let{key:H,value:j}of g.getRange({start:!0})){let[z,J]=H.toString().split("/");if(J===""&&(J=j.name),J){if(z!==e)continue}else J=z;if(!i.find(ue=>ue.name===J)?.indexed&&j.indexed&&!j.isPrimaryKey){k(),A=!0,g.remove(H);let ue=E.indices[z];ue&&U.push(ue)}}let v=[];try{for(let H of i||[]){if(H.relationship)continue;let j=e+"/"+(H.name||"");Object.defineProperty(H,"key",{value:j,configurable:!0});let z=g.get(j);if(H.isPrimaryKey){if(z=z||g.get(j=e+"/")||{},o!==E.audit||c!==c||(+r||void 0)!==(+z.expiration||void 0)||(+n||void 0)!==(+z.eviction||void 0)){let Se=Object.assign({},z);typeof o=="boolean"&&(o&&E.enableAuditing(o),Se.audit=o),r&&(Se.expiration=+r),n&&(Se.eviction=+n),c!==void 0&&(Se.sealed=c),A=!0,k(),g.put(j,Se)}continue}z?.attribute&&!z.name&&(z.indexed=!0);let J=!z||z.type!==H.type||z.indexed!==H.indexed||z.nullable!==H.nullable||JSON.stringify(z.attributes)!==JSON.stringify(H.attributes)||JSON.stringify(z.elements)!==JSON.stringify(H.elements);if(H.indexed){let Se=new Wa.default(!0,!1),ue=d.openDB(j,Se);(J||z.indexingPID&&z.indexingPID!==process.pid||z.restartNumber<md.workerData?.restartNumber)&&(A=!0,k(),z=g.get(j),(J||z.indexingPID&&z.indexingPID!==process.pid||z.restartNumber<md.workerData?.restartNumber)&&(A=!0,H.indexNulls===void 0&&(H.indexNulls=!0),E.primaryStore.getStats().entryCount>0&&(H.lastIndexedKey=z?.lastIndexedKey||!1,H.indexingPID=process.pid,ue.isIndexing=!0,Object.defineProperty(H,"dbi",{value:ue}),v.push(H))),g.put(j,H)),z?.indexNulls&&H.indexNulls===void 0&&(H.indexNulls=!0),ue.indexNulls=H.indexNulls,S[H.name]=ue}else J&&(A=!0,k(),g.put(j,H))}}finally{P&&P()}if(A&&(E.schemaVersion++,E.updatedAttributes()),Wn.trace(`${e} table loading, running index`),v.length>0||U.length>0?E.indexingOperation=fue(E,v,U):A&&om.signalSchemaChange(new am.SchemaEventMsg(process.pid,"schema-change",E.databaseName,E.tableName)),E.origin=u,A)for(let H of uN)H(E,u!=="cluster");return(r||n||s)&&E.setTTLExpiration({expiration:r,eviction:n,scanInterval:s}),Wn.trace(`${e} table loaded`),E;function k(){P||d.transactionSync(()=>({then(H){P=H}}))}a(k,"startTxn")}async function fue(e,t,r){try{let n=e.schemaVersion;await om.signalSchemaChange(new am.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let l of r)s=l.drop();let i,o=0,c=t.length;if(await new Promise(l=>setImmediate(l)),c>0){let l=0;for(let{key:_,value:u,version:d}of e.primaryStore.getRange({start:t[0].lastIndexedKey,lazy:c<4,versions:!0,snapshot:!1}))if(u){if(l++,s=e.primaryStore.ifVersion(_,d,()=>{for(let f=0;f<c;f++){let E=t[f],h=E.name,m=(0,_k.getIndexedValues)(u[h]);if(m)for(let S=0,g=m.length;S<g;S++)E.dbi.put(m[S],_)}}),s.then(()=>l--,f=>{l--,Wn.error(f)}),md.workerData&&md.workerData.restartNumber!==dk.restartNumber&&(i=!0),++o%100===0||i){for(let f of t)f.lastIndexedKey=_,e.dbisDB.put(f.key,f);if(i)return}l>_ue?await s:l>due&&await new Promise(f=>setImmediate(f))}for(let _ of t)delete _.lastIndexedKey,delete _.indexingPID,_.dbi.isIndexing=!1,s=e.dbisDB.put(_.key,_)}await s,await om.signalSchemaChange(new am.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(n){Wn.error("Error in indexing",n)}}function Eue({table:e,database:t}){let r=Mu({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 bb(e){uN.push(e)}function dh(){let e=(0,gt.get)(qt.CONFIG_PARAMS.STORAGE_COMPRESSION),t=(0,gt.get)(qt.CONFIG_PARAMS.STORAGE_COMPRESSION_DICTIONARY),r=(0,gt.get)(qt.CONFIG_PARAMS.STORAGE_COMPRESSION_THRESHOLD)||fk,n={startingOffset:32};return t&&(n.dictionary=lm.readFileSync(t)),r&&(n.threshold=r),e&&n}var gt,sm,im,it,gn,bl,Wa,aN,qt,lm,cN,_k,om,am,md,Wn,dk,lN,um,fk,en,lt,Ol,uN,cm,Mo,Nl,_ue,due,ge=Oe(()=>{gt=B(X()),sm=B(at()),im=require("lmdb"),it=require("path"),gn=require("fs"),bl=B(je());np();Wa=B(su()),aN=B(iu()),qt=B(D()),lm=B(require("fs-extra")),cN=require("../index"),_k=B(Ar()),om=B(di()),am=B(is()),md=require("worker_threads"),Wn=B(x()),dk=B(et());Zi();nu();lN="data",um=Symbol("defined-tables"),fk=((0,gt.get)(qt.CONFIG_PARAMS.STORAGE_PAGESIZE)||4096)-60;(0,gt.initSync)();en=Object.create(null),lt=Object.create(null);(0,cN._assignPackageExport)("databases",lt);(0,cN._assignPackageExport)("tables",en);Ol=Symbol.for("next-table-id"),uN=[],Mo=new Map;a(uue,"getTables");a(Dr,"getDatabases");a(m_,"resetDatabases");a(pd,"readMetaDb");a(Ek,"ensureDB");a(hk,"setTable");a(Mu,"database");a(vg,"dropDatabase");a(Et,"table");_ue=1e3,due=10;a(fue,"runIndexing");a(Eue,"dropTableMeta");a(bb,"onUpdatedTable");a(dh,"getDefaultCompression")});var K=T((Kye,Ck)=>{"use strict";var Uo=require("path"),gk=require("fs-extra"),Yr=x(),pk=require("fs-extra"),_m=require("os"),hue=require("net"),pue=require("recursive-iterator"),ft=D(),mue=aS(),mk=require("papaparse"),dm=require("moment"),{inspect:Sue}=require("util"),Sk=require("is-number"),Yye=require("lodash"),Tue=require("minimist"),gue=require("https"),Rue=require("http"),{hdb_errors:fm}=oe(),Aue=/^((\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)))$/,Rk=require("util").promisify(setTimeout),Oue=100,bue=5,Nue="",yue=4,Tk={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};Ck.exports={isEmpty:Rn,isEmptyOrZeroLength:Ks,arrayHasEmptyValues:Cue,arrayHasEmptyOrZeroLengthValues:Due,buildFolderPath:Lue,isBoolean:Ak,errorizeMessage:Iue,stripFileExtension:Mue,autoCast:Uue,autoCastJSON:Ok,autoCastJSONDeep:dN,removeDir:vue,compareVersions:Bue,isCompatibleDataVersion:Hue,escapeRawValue:Gue,unescapeValue:que,stringifyProps:xue,timeoutPromise:kue,isClusterOperation:Vue,getClusterUser:Kue,checkGlobalSchemaTable:Yue,getHomeDir:Nk,getPropsFilePath:Fue,promisifyPapaParse:Wue,removeBOM:yk,createEventPromise:Que,checkProcessRunning:jue,checkSchemaTableExist:zue,checkSchemaExists:Ik,checkTableExists:wk,getStartOfTomorrowInSeconds:Jue,getLimitKey:Xue,isObject:Pue,isNotEmptyAndHasValue:wue,autoCasterIsNumberCheck:bk,backtickASTSchemaItems:Zue,isPortTaken:$ue,createForkArgs:e_e,autoCastBoolean:t_e,async_set_timeout:Rk,getTableHashAttribute:r_e,doesSchemaExist:n_e,doesTableExist:s_e,stringifyObj:i_e,ms_to_time:o_e,changeExtension:a_e,getEnvCliRootPath:fN,noBootFile:c_e,httpRequest:l_e,transformReq:u_e,convertToMS:__e,PACKAGE_ROOT:ft.PACKAGE_ROOT};function Iue(e){return e instanceof Error?e:new Error(e)}a(Iue,"errorizeMessage");function Rn(e){return e==null}a(Rn,"isEmpty");function wue(e){return!Rn(e)&&(e||e===0||e===""||Ak(e))}a(wue,"isNotEmptyAndHasValue");function Ks(e){return Rn(e)||e.length===0||e.size===0}a(Ks,"isEmptyOrZeroLength");function Cue(e){if(Rn(e))return!0;for(let t=0;t<e.length;t++)if(Rn(e[t]))return!0;return!1}a(Cue,"arrayHasEmptyValues");function Due(e){if(Ks(e))return!0;for(let t=0;t<e.length;t++)if(Ks(e[t]))return!0;return!1}a(Due,"arrayHasEmptyOrZeroLengthValues");function Lue(...e){try{return e.join(Uo.sep)}catch{console.error(e)}}a(Lue,"buildFolderPath");function Ak(e){return Rn(e)?!1:e===!0||e===!1}a(Ak,"isBoolean");function Pue(e){return Rn(e)?!1:typeof e=="object"}a(Pue,"isObject");function Mue(e){return Ks(e)?Nue:e.slice(0,-yue)}a(Mue,"stripFileExtension");function Uue(e){return Rn(e)||e===""||typeof e!="string"?e:Tk[e]!==void 0?Tk[e]:bk(e)===!0?Number(e):Aue.test(e)?new Date(e):e}a(Uue,"autoCast");function Ok(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(Ok,"autoCastJSON");function dN(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=dN(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=dN(r);n!==r&&(e[t]=n)}return e}else return Ok(e)}a(dN,"autoCastJSONDeep");function bk(e){if(e.startsWith("0.")&&Sk(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&Sk(e))}a(bk,"autoCasterIsNumberCheck");async function vue(e){if(Ks(e))throw new Error(`Directory path: ${e} does not exist`);try{await pk.emptyDir(e),await pk.remove(e)}catch(t){throw Yr.error(`Error removing files in ${e} -- ${t}`),t}}a(vue,"removeDir");function Bue(e,t){if(Ks(e)){Yr.info("Invalid current version sent as parameter.");return}if(Ks(t)){Yr.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 _=0;_<l;_++)if(r=parseInt(o[_],10)-parseInt(c[_],10),r)return r;return o.length-c.length}a(Bue,"compareVersions");function Hue(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(Hue,"isCompatibleDataVersion");function Gue(e){if(Rn(e))return e;let t=String(e);return t==="."?ft.UNICODE_PERIOD:t===".."?ft.UNICODE_PERIOD+ft.UNICODE_PERIOD:t.replace(ft.FORWARD_SLASH_REGEX,ft.UNICODE_FORWARD_SLASH)}a(Gue,"escapeRawValue");function que(e){if(Rn(e))return e;let t=String(e);return t===ft.UNICODE_PERIOD?".":t===ft.UNICODE_PERIOD+ft.UNICODE_PERIOD?"..":String(e).replace(ft.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(que,"unescapeValue");function xue(e,t){if(Rn(e))return Yr.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+_m.EOL}!Ks(n)&&n[0]===";"?r+=" "+n+s+_m.EOL:Ks(n)||(r+=n+"="+s+_m.EOL)}catch{Yr.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(xue,"stringifyProps");function Nk(){let e;try{e=_m.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(Nk,"getHomeDir");function Fue(){let e=Uo.join(Nk(),ft.HDB_HOME_DIR_NAME,ft.BOOT_PROPS_FILE_NAME);return gk.existsSync(e)||(e=Uo.join(__dirname,"../","hdb_boot_properties.file")),e}a(Fue,"getPropsFilePath");function kue(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:function(){clearTimeout(r)}}}a(kue,"timeoutPromise");async function $ue(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=hue.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a($ue,"isPortTaken");function Vue(e){try{return ft.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){Yr.error(`Error checking operation against cluster ops ${t}`)}return!1}a(Vue,"isClusterOperation");function Yue(e,t){let r=(ge(),ie(ke)).getDatabases();if(!r[e])return fm.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return fm.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Yue,"checkGlobalSchemaTable");function Kue(e,t){if(Rn(t)){Yr.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Rn(e)||Ks(e)){Yr.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){Yr.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){Yr.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(Kue,"getClusterUser");function Wue(){mk.parsePromise=function(e,t,r){return new Promise(function(n,s){mk.parse(e,{header:!0,transformHeader:yk,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(Wue,"promisifyPapaParse");function yk(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(yk,"removeBOM");function Que(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;Yr.info(`Got cluster status event response: ${Sue(s)}`);try{i.cancel()}catch{Yr.error("Error trying to cancel timeout.")}n(s)})})}a(Que,"createEventPromise");async function jue(e){let t=!0,r=0;do await Rk(Oue*r++),(await mue.findPs(e)).length>0&&(t=!1);while(t&&r<bue);if(t)throw new Error(`process ${e} was not started`)}a(jue,"checkProcessRunning");function zue(e,t){let r=Ik(e);if(r)return r;let n=wk(e,t);if(n)return n}a(zue,"checkSchemaTableExist");function Ik(e){let{getDatabases:t}=(ge(),ie(ke));if(!t()[e])return fm.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(Ik,"checkSchemaExists");function wk(e,t){let{getDatabases:r}=(ge(),ie(ke));if(!r()[e][t])return fm.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(wk,"checkTableExists");function Jue(){let e=dm().utc().add(1,ft.MOMENT_DAYS_TAG).startOf(ft.MOMENT_DAYS_TAG).unix(),t=dm().utc().unix();return e-t}a(Jue,"getStartOfTomorrowInSeconds");function Xue(){return dm().utc().format("DD-MM-YYYY")}a(Xue,"getLimitKey");function Zue(e){try{let t=new pue(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){Yr.error("Got an error back ticking items."),Yr.error(t)}}a(Zue,"backtickASTSchemaItems");function e_e(e){return[e]}a(e_e,"createForkArgs");function t_e(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(t_e,"autoCastBoolean");function r_e(e,t){let{getDatabases:r}=(ge(),ie(ke)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(r_e,"getTableHashAttribute");function n_e(e){let{getDatabases:t}=(ge(),ie(ke));return t()[e]!==void 0}a(n_e,"doesSchemaExist");function s_e(e,t){let{getDatabases:r}=(ge(),ie(ke));return r()[e]?.[t]!==void 0}a(s_e,"doesTableExist");function i_e(e){try{return JSON.stringify(e)}catch{return e}}a(i_e,"stringifyObj");function o_e(e){let t=dm.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(o_e,"ms_to_time");function a_e(e,t){let r=Uo.basename(e,Uo.extname(e));return Uo.join(Uo.dirname(e),r+t)}a(a_e,"changeExtension");function fN(){if(process.env[ft.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[ft.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=Tue(process.argv);if(e[ft.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[ft.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(fN,"getEnvCliRootPath");var _N;function c_e(){if(_N)return _N;let e=fN();fN()&&gk.pathExistsSync(Uo.join(e,ft.HDB_CONFIG_FILE))&&(_N=!0)}a(c_e,"noBootFile");function l_e(e,t){let r;return e.protocol==="http:"?r=Rue:r=gue,new Promise((n,s)=>{let i=r.request(e,o=>{o.setEncoding("utf8");let c={body:"",headers:o.headers};o.on("data",l=>{c.body+=l}),o.on("end",()=>{n(c)})});i.on("error",o=>{s(o)}),i.write(JSON.stringify(t)),i.end()})}a(l_e,"httpRequest");function u_e(e){if(!e.schema&&!e.database){e.schema=ft.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(u_e,"transformReq");function __e(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(__e,"convertToMS")});var X=T((Qye,Uk)=>{"use strict";var EN=require("fs-extra"),Qa=require("path"),Dk=require("os"),d_e=require("properties-reader"),Td=x(),Sd=K(),_e=D(),Em=ut(),f_e="Error initializing environment manager",hm="BOOT_PROPS_FILE_PATH",Lk=!1,E_e={[_e.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Hi={};Uk.exports={BOOT_PROPS_FILE_PATH:hm,getHdbBasePath:h_e,setHdbBasePath:p_e,get:Pk,initSync:S_e,setProperty:ve,initTestEnvironment:g_e,setCloneVar:T_e};function h_e(){return Hi[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(h_e,"getHdbBasePath");function p_e(e){Hi[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(p_e,"setHdbBasePath");function Pk(e){let t=Em.getConfigValue(e);return t===void 0?Hi[e]:t}a(Pk,"get");function ve(e,t){E_e[e]&&(Hi[e]=t),Em.updateConfigObject(e,t)}a(ve,"setProperty");function m_e(){let e;try{e=Sd.getPropsFilePath(),EN.accessSync(e,EN.constants.F_OK|EN.constants.R_OK),Lk=!0;let t=d_e(e);return Hi[_e.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(_e.HDB_SETTINGS_NAMES.INSTALL_USER),Hi[_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Hi[hm]=e,!0}catch{return Td.trace(`Environment manager found no properties file at ${e}`),!1}}a(m_e,"doesPropFileExist");function S_e(e=!1){try{(Lk||m_e()||Sd.noBootFile())&&!Mk&&(Em.initConfig(e),Hi[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Em.getConfigValue(_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Td.error(f_e),Td.error(t),console.error(t),process.exit(1)}}a(S_e,"initSync");var Mk=!1;function T_e(e){Mk=e}a(T_e,"setCloneVar");function g_e(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=Qa.join(__dirname,"../../","unitTests");Hi[hm]=Qa.join(l,"hdb_boot_properties.file"),ve(_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Qa.join(l,"settings.test")),ve(_e.HDB_SETTINGS_NAMES.INSTALL_USER,Dk.userInfo()?Dk.userInfo().username:void 0),ve(_e.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),ve(_e.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Qa.join(l,"envDir","log")),ve(_e.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),ve(_e.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),ve(_e.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),ve(_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Qa.join(l,"envDir")),ve(_e.CONFIG_PARAMS.STORAGE_PATH,Qa.join(l,"envDir")),s&&(ve(_e.CONFIG_PARAMS.HTTP_SECUREPORT,Pk(_e.CONFIG_PARAMS.HTTP_PORT)),ve(_e.CONFIG_PARAMS.HTTP_PORT,null)),ve(_e.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),ve(_e.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),ve(_e.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Sd.isEmpty(i)?!1:i),ve(_e.CONFIG_PARAMS.HTTP_CORS,Sd.isEmpty(i)?!1:i),ve(_e.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),ve(_e.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),ve(_e.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),ve(_e.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),ve(_e.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Qa.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),ve(_e.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Sd.isEmpty(c)?!1:c),o&&(ve("CORS_ACCESSLIST",o),ve(_e.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(ve(_e.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),ve(_e.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(ve(_e.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),ve(_e.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(ve(_e.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),ve(_e.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${hm}. Please check your boot props and settings files`;Td.fatal(r),Td.error(t)}}a(g_e,"initTestEnvironment")});var Hk=T((zye,Bk)=>{"use strict";var mm=X();mm.initSync();var pm=D(),{httpRequest:R_e}=K(),A_e=require("path"),vk=require("fs-extra"),O_e=require("yaml"),b_e={describe_table:!0,describe_all:!0,describe_database:!0,list_users:!0,list_roles:!0,drop_role:!0,add_user:!0,alter_user:!0,drop_user:!0,restart_service:!0,restart:!0,create_database:!0,drop_database:!0,create_table:!0,drop_table:!0,create_attribute:!0,drop_attribute:!0,search_by_id:!0,delete:!0,search_by_value:!0,csv_file_load:!0,csv_url_load:!0,cluster_get_routes:!0,cluster_network:!0,cluster_status:!0,remove_node:!0,add_component:!0,deploy_component:!0,package_component:!0,drop_component:!0,get_components:!0,get_component_file:!0,set_component_file:!0,registration_info:!0,get_fingerprint:!0,set_license:!0,get_job:!0,search_jobs_by_start_date:!0,read_log:!0,read_transaction_log:!0,read_audit_log:!0,delete_transaction_logs_before:!0,purge_stream:!0,delete_records_before:!0,install_node_modules:!0,set_configuration:!0,get_configuration:!0,create_authentication_tokens:!0,refresh_operation_token:!0,system_information:!0,sql:!0};Bk.exports={cliOperations:y_e,buildRequest:N_e};function N_e(){let e={};for(let t of process.argv){if(b_e[t]){e.operation=t;continue}if(t.includes("=")){let[r,...n]=t.split("=");n=n.join("=");try{n=JSON.parse(n)}catch{}e[r]=n}}return e}a(N_e,"buildRequest");async function y_e(e){await vk.exists(A_e.join(mm.get(pm.CONFIG_PARAMS.ROOTPATH),pm.HDB_PID_FILE))||(console.error("HarperDB must be running to perform this operation"),process.exit()),await vk.exists(mm.get(pm.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET))||(console.error("No domain socket found, unable to perform this operation"),process.exit());try{let t=await R_e({method:"POST",protocol:"http:",socketPath:mm.get(pm.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET),headers:{"Content-Type":"application/json"}},e);t=JSON.parse(t.body),e.json?console.log(JSON.stringify(t,null,2)):console.log(O_e.stringify(t).trim())}catch(t){let r="Error: ";t?.response?.data?.error?r+=t.response.data.error:t?.response?.data?r+=t?.response?.data:r+=t.message,console.error(r)}}a(y_e,"cliOperations")});var xk=T((Xye,qk)=>{"use strict";var Gk=require("semver/functions/major"),I_e=ha(),hN=process.versions&&process.versions.node?process.versions.node:void 0;qk.exports=w_e;function w_e(){let e=I_e.engines["minimum-node"];if(hN&&Gk(hN)<Gk(e))return{error:`The minimum version of Node.js HarperDB supports is: ${e}, the currently installed Node.js version is: ${hN}. Please install a version of Node.js that is withing the defined range.`}}a(w_e,"checkNodeVersion")});var mN=T((eIe,Fk)=>{"use strict";var gd=X();gd.initSync();var yl=require("fs-extra"),pN=require("path"),Il=D(),C_e=require("crypto"),D_e=require("uuid").v4;Fk.exports=L_e;function L_e(){if(gd.getHdbBasePath()!==void 0){let e=pN.join(gd.getHdbBasePath(),Il.LICENSE_KEY_DIR_NAME,Il.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=pN.join(gd.getHdbBasePath(),Il.LICENSE_KEY_DIR_NAME,Il.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=pN.join(gd.getHdbBasePath(),Il.LICENSE_KEY_DIR_NAME,Il.JWT_ENUM.JWT_PASSPHRASE_NAME);try{yl.accessSync(r),yl.accessSync(e),yl.accessSync(t)}catch(n){if(n.code==="ENOENT"){let s=D_e(),i=C_e.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:s}});yl.writeFileSync(r,s),yl.writeFileSync(e,i.privateKey),yl.writeFileSync(t,i.publicKey)}else throw n}}}a(L_e,"checkJWTTokenExist")});var $k=T((rIe,kk)=>{"use strict";var SN=class{static{a(this,"HdbInfoInsertObject")}constructor(t,r,n){this.info_id=t,this.data_version_num=r,this.hdb_version_num=n}};kk.exports={HdbInfoInsertObject:SN}});var Kk=T((sIe,Yk)=>{"use strict";var Vk=D(),TN=class{static{a(this,"UpgradeObject")}constructor(t,r){this[Vk.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[Vk.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};Yk.exports={UpgradeObject:TN}});var Sm=T((oIe,Qk)=>{"use strict";var Qn=require("prompt"),wl=require("chalk"),Wk=x(),Ts=require("os"),gN=Ji(),RN=["yes","y"];async function P_e(e){let t=`${Ts.EOL}`+wl.bold.green("Your current HarperDB version requires that we complete an update process.")+`${Ts.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Ts.EOL}${Ts.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${Ts.EOL}`;Qn.override=gN(["CONFIRM_UPGRADE"]),Qn.start(),Qn.message=t;let r={properties:{CONFIRM_UPGRADE:{description:wl.magenta(`${Ts.EOL}[CONFIRM_UPGRADE] Do you want to upgrade your HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n;try{n=await Qn.get([r])}catch(s){return Wk.error("There was an error when prompting user about an upgrade."),Wk.error(s),!1}return RN.includes(n.CONFIRM_UPGRADE)}a(P_e,"forceUpdatePrompt");async function M_e(e){let t=`${Ts.EOL}`+wl.bold.green(`Your installed HarperDB version is older than the version used to create your data. Downgrading is not recommended as it is not tested and guaranteed to work. However, if you need to downgrade, and a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Ts.EOL}`);Qn.override=gN(["CONFIRM_DOWNGRADE"]),Qn.start(),Qn.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:wl.magenta(`${Ts.EOL}[CONFIRM_DOWNGRADE] Do you want to proceed with using your downgraded HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n=await Qn.get([r]);return RN.includes(n.CONFIRM_DOWNGRADE)}a(M_e,"forceDowngradePrompt");async function U_e(){let e=`${Ts.EOL}`+wl.bold.green("We now require a Certifacte Authority certificate. HarperDB can generate all new certificates for you (your existing certificates will be backed up) or you can keep any existing certificates and add your own CA certificate. To add your own CA certificate set the <certificateAuthority> parameter in harperdb-config.yaml");Qn.override=gN(["GENERATE_CERTS"]),Qn.start(),Qn.message=e;let t={properties:{GENERATE_CERTS:{description:wl.magenta(`${Ts.EOL}[GENERATE_CERTS] Do you want HarperDB to generate all new certificates? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"yes",required:!0}}},r=await Qn.get([t]);return RN.includes(r.GENERATE_CERTS)}a(U_e,"upgradeCertsPrompt");Qk.exports={forceUpdatePrompt:P_e,forceDowngradePrompt:M_e,upgradeCertsPrompt:U_e}});var ON=T((cIe,jk)=>{"use strict";var AN=class{static{a(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};jk.exports=AN});var Jk=T((EIe,zk)=>{"use strict";var v_e=K(),B_e=ut(),uIe=x(),_Ie=require("path"),dIe=require("fs"),fIe=D();zk.exports={getOldPropsValue:H_e};function H_e(e,t,r=!1){let n=t.getRaw(e);return v_e.isNotEmptyAndHasValue(n)?n:r?B_e.getDefaultConfig(e):""}a(H_e,"getOldPropsValue")});var t$=T((pIe,e$)=>{"use strict";var vo=require("path"),Bo=require("fs-extra"),G_e=require("properties-reader"),q_e=ON(),Ct=x(),{getOldPropsValue:We}=Jk(),{HDB_SETTINGS_NAMES:se,CONFIG_PARAMS:ja}=D(),za=ut(),Tm=X(),Xk=K(),Ws=D(),bN=new q_e("3.1.0"),Zk=[];function x_e(){let e=G_e(Tm.get(se.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),Ct.info(t);let r=` ;Settings for the HarperDB process.
|
|
34
34
|
|
|
35
35
|
;The directory selected during install where the database files reside.
|
|
36
36
|
${se.HDB_ROOT_KEY} = ${We(se.HDB_ROOT_KEY,e)}
|